'use strict' import fastify, { type FastifyRequest } from 'fastify' import { getPackageVersion } from '@futureporn/utils' import pgbossPlugin, { type ExtendedFastifyInstance } from './fastify-pgboss-plugin.ts' import PgBoss from 'pg-boss' import { join, dirname } from 'node:path' import { fileURLToPath } from 'node:url' const __dirname = dirname(fileURLToPath(import.meta.url)); const version = getPackageVersion(join(__dirname, '../package.json')) interface RecordBodyType { url: string; channel: string; } const build = function (opts: Record={}, boss: PgBoss) { const app: ExtendedFastifyInstance = fastify(opts) app.register(pgbossPlugin, { boss }) app.get('/', async function (request, reply) { return { app: '@futureporn/capture', version } }) app.post('/api/record', async function (request: FastifyRequest<{ Body: RecordBodyType }>, reply) { const { url, channel } = request.body console.log(`POST /api/record with url=${url}`) if (app?.boss) { const jobId = await app.boss.send('record', { url, channel }) return { jobId } } else { console.error(`app.boss was missing! Is the pgboss plugin registered to the fastify instance?`) } return { 'idk': true } }) return app } export { build }