about summary refs log tree commit diff
path: root/bskylink/src/context.ts
diff options
context:
space:
mode:
Diffstat (limited to 'bskylink/src/context.ts')
-rw-r--r--bskylink/src/context.ts33
1 files changed, 33 insertions, 0 deletions
diff --git a/bskylink/src/context.ts b/bskylink/src/context.ts
new file mode 100644
index 000000000..7e6f2f34e
--- /dev/null
+++ b/bskylink/src/context.ts
@@ -0,0 +1,33 @@
+import {Config} from './config.js'
+import Database from './db/index.js'
+
+export type AppContextOptions = {
+  cfg: Config
+  db: Database
+}
+
+export class AppContext {
+  cfg: Config
+  db: Database
+  abortController = new AbortController()
+
+  constructor(private opts: AppContextOptions) {
+    this.cfg = this.opts.cfg
+    this.db = this.opts.db
+  }
+
+  static async fromConfig(cfg: Config, overrides?: Partial<AppContextOptions>) {
+    const db = Database.postgres({
+      url: cfg.db.url,
+      schema: cfg.db.schema,
+      poolSize: cfg.db.pool.size,
+      poolMaxUses: cfg.db.pool.maxUses,
+      poolIdleTimeoutMs: cfg.db.pool.idleTimeoutMs,
+    })
+    return new AppContext({
+      cfg,
+      db,
+      ...overrides,
+    })
+  }
+}