forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {SafelinkClient} from './cache/safelinkClient.js'
2import {type Config} from './config.js'
3import Database from './db/index.js'
4import {MetricsClient} from './metrics.js'
5
6export type AppContextOptions = {
7 cfg: Config
8 db: Database
9}
10
11export class AppContext {
12 cfg: Config
13 db: Database
14 safelinkClient: SafelinkClient
15 abortController = new AbortController()
16 metrics: MetricsClient
17
18 constructor(private opts: AppContextOptions) {
19 this.cfg = this.opts.cfg
20 this.db = this.opts.db
21 this.safelinkClient = new SafelinkClient({
22 cfg: this.opts.cfg.service,
23 db: this.opts.db,
24 })
25 this.metrics = new MetricsClient({
26 trackingEndpoint: this.opts.cfg.service.metricsApiHost,
27 })
28 }
29
30 static async fromConfig(cfg: Config, overrides?: Partial<AppContextOptions>) {
31 const db = Database.postgres({
32 url: cfg.db.url,
33 schema: cfg.db.schema,
34 poolSize: cfg.db.pool.size,
35 poolMaxUses: cfg.db.pool.maxUses,
36 poolIdleTimeoutMs: cfg.db.pool.idleTimeoutMs,
37 })
38 return new AppContext({
39 cfg,
40 db,
41 ...overrides,
42 })
43 }
44}