45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
|
'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<string, any>={}, 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
|
||
|
}
|