diff options
author | devin ivy <devinivy@gmail.com> | 2024-06-20 17:45:52 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-20 17:45:52 -0400 |
commit | 51f5e6bf900685ef92191f22949d09035733c682 (patch) | |
tree | 7e613992c1b131f4fe082a794ae9c32555d87b12 /bskyogcard/src/index.ts | |
parent | eac4668d7312b35721e147e808c181b2be0256bf (diff) | |
download | voidsky-51f5e6bf900685ef92191f22949d09035733c682.tar.zst |
Bsky link card service (#4547)
* setup bskycard * quick proof of concept for png card generation * bskycard: use jsx * bskycard: 3x5 profile layout * bskycard: add butterfly overlay * bskycard: tidy * bskycard: separate and reorganize * bskycard: tidy * bskycard: tidy * bskycard: tidy * bskycard: poc of transparent overlay and box shadow * bskycard: reorg impl into src/ directory * bskycard: use more standard app structure * bskycard: setup dockerfile, fix build * bskycard: support for x-origin-verify * bskycard: card layout, filter images based on labels * bskycard: tidy * bskycard: support cluster mode * bskycard: handle error fetching starter pack info * bskycard: tidy * bskycard: fix leak on failed image fetch * bskycard: build workflow * bskyogcard: rename from bskycard * bskyogcard: fix some express plumbing * bskyogcard: add cdn tags, tidy
Diffstat (limited to 'bskyogcard/src/index.ts')
-rw-r--r-- | bskyogcard/src/index.ts | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/bskyogcard/src/index.ts b/bskyogcard/src/index.ts new file mode 100644 index 000000000..ef8d48494 --- /dev/null +++ b/bskyogcard/src/index.ts @@ -0,0 +1,41 @@ +import events from 'node:events' +import http from 'node:http' + +import express from 'express' +import {createHttpTerminator, HttpTerminator} from 'http-terminator' + +import {Config} from './config.js' +import {AppContext} from './context.js' +import {default as routes, errorHandler} from './routes/index.js' + +export * from './config.js' +export * from './logger.js' + +export class CardService { + public server?: http.Server + private terminator?: HttpTerminator + + constructor(public app: express.Application, public ctx: AppContext) {} + + static async create(cfg: Config): Promise<CardService> { + let app = express() + + const ctx = await AppContext.fromConfig(cfg) + app = routes(ctx, app) + app.use(errorHandler) + + return new CardService(app, ctx) + } + + async start() { + this.server = this.app.listen(this.ctx.cfg.service.port) + this.server.keepAliveTimeout = 90000 + this.terminator = createHttpTerminator({server: this.server}) + await events.once(this.server, 'listening') + } + + async destroy() { + this.ctx.abortController.abort() + await this.terminator?.terminate() + } +} |