63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import {Database, envToCfg, httpLogger, LinkService, readEnv} from './index.js'
|
|
|
|
async function main() {
|
|
try {
|
|
httpLogger.info('Starting blink service')
|
|
|
|
const env = readEnv()
|
|
const cfg = envToCfg(env)
|
|
|
|
httpLogger.info(
|
|
{
|
|
port: cfg.service.port,
|
|
safelinkEnabled: cfg.service.safelinkEnabled,
|
|
hasDbUrl: !!cfg.db.url,
|
|
hasDbMigrationUrl: !!cfg.db.migrationUrl,
|
|
},
|
|
'Configuration loaded',
|
|
)
|
|
|
|
if (cfg.db.migrationUrl) {
|
|
httpLogger.info('Running database migrations')
|
|
const migrateDb = Database.postgres({
|
|
url: cfg.db.migrationUrl,
|
|
schema: cfg.db.schema,
|
|
})
|
|
await migrateDb.migrateToLatestOrThrow()
|
|
await migrateDb.close()
|
|
httpLogger.info('Database migrations completed')
|
|
}
|
|
|
|
httpLogger.info('Creating LinkService')
|
|
const link = await LinkService.create(cfg)
|
|
|
|
if (link.ctx.cfg.service.safelinkEnabled) {
|
|
httpLogger.info('Starting Safelink client')
|
|
link.ctx.safelinkClient.runFetchEvents()
|
|
}
|
|
|
|
await link.start()
|
|
httpLogger.info('Link service is running')
|
|
|
|
process.on('SIGTERM', async () => {
|
|
httpLogger.info('Link service is stopping')
|
|
await link.destroy()
|
|
httpLogger.info('Link service is stopped')
|
|
})
|
|
} catch (error) {
|
|
httpLogger.error(
|
|
{
|
|
error: String(error),
|
|
stack: error instanceof Error ? error.stack : undefined,
|
|
},
|
|
'Failed to start blink service',
|
|
)
|
|
process.exit(1)
|
|
}
|
|
}
|
|
|
|
main().catch(error => {
|
|
console.error('Unhandled startup error:', error)
|
|
process.exit(1)
|
|
})
|