47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import { createServer } from '@linkforty/core';
|
|
|
|
function getTrustProxy(): boolean | number | undefined {
|
|
const v = process.env.TRUST_PROXY;
|
|
if (v === undefined || v === '') return undefined;
|
|
if (v === '1' || v.toLowerCase() === 'true') return true;
|
|
const n = Number(v);
|
|
if (!Number.isNaN(n) && n >= 0) return n;
|
|
return undefined;
|
|
}
|
|
|
|
async function start() {
|
|
const server = await createServer({
|
|
database: {
|
|
url: process.env.DATABASE_URL || 'postgresql://postgres:password@localhost:5432/linkforty',
|
|
},
|
|
redis: {
|
|
url: process.env.REDIS_URL || 'redis://localhost:6379',
|
|
},
|
|
cors: {
|
|
origin: process.env.CORS_ORIGIN || '*',
|
|
},
|
|
trustProxy: getTrustProxy(),
|
|
});
|
|
|
|
await server.listen({
|
|
port: Number(process.env.PORT) || 3000,
|
|
host: '0.0.0.0',
|
|
});
|
|
|
|
console.log('LinkForty server running on http://localhost:3000');
|
|
console.log('');
|
|
console.log('API Endpoints:');
|
|
console.log(' POST /api/links - Create a new link');
|
|
console.log(' GET /api/links - List all links (requires ?userId=xxx)');
|
|
console.log(' GET /api/links/:id - Get a specific link (requires ?userId=xxx)');
|
|
console.log(' PUT /api/links/:id - Update a link (requires ?userId=xxx)');
|
|
console.log(' DELETE /api/links/:id - Delete a link (requires ?userId=xxx)');
|
|
console.log(' GET /api/analytics/overview - Get analytics overview (requires ?userId=xxx)');
|
|
console.log(' GET /api/analytics/links/:linkId - Get link analytics (requires ?userId=xxx)');
|
|
console.log('');
|
|
console.log('Public Endpoint:');
|
|
console.log(' GET /:shortCode - Redirect to target URL');
|
|
}
|
|
|
|
start().catch(console.error);
|