Scratch space for learning atproto app development
1import { NodeOAuthClient } from '@atproto/oauth-client-node'
2import { Firehose } from '@atproto/sync'
3import { pino } from 'pino'
4
5import { createOAuthClient } from '#/auth/client'
6import { createDb, Database, migrateToLatest } from '#/db'
7import { createIngester } from '#/ingester'
8import { env } from '#/env'
9
10/**
11 * Application state passed to the router and elsewhere
12 */
13export type AppContext = {
14 db: Database
15 ingester: Firehose
16 logger: pino.Logger
17 oauthClient: NodeOAuthClient
18 identityResolver: NodeOAuthClient['identityResolver']
19}
20
21export async function createAppContext(): Promise<AppContext> {
22 const db = createDb(env.DB_PATH)
23 await migrateToLatest(db)
24 const oauthClient = await createOAuthClient(db)
25 const ingester = createIngester(db)
26 const logger = pino({ name: 'server', level: env.LOG_LEVEL })
27
28 return {
29 db,
30 ingester,
31 logger,
32 oauthClient,
33 identityResolver: oauthClient.identityResolver,
34 }
35}