Something went wrong. Try again.
Scratch space for learning atproto app development
Something went wrong. Try again.
1.2 kB · 46 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import { NodeOAuthClient } from '@atproto/oauth-client-node'import { Firehose } from '@atproto/sync'import { pino } from 'pino'
import { createOAuthClient } from '#/auth/client'import { createDb, Database, migrateToLatest } from '#/db'import { createIngester } from '#/ingester'import { env } from '#/env'import { BidirectionalResolver, createBidirectionalResolver,} from '#/id-resolver'
/** * Application state passed to the router and elsewhere */export type AppContext = { db: Database ingester: Firehose logger: pino.Logger oauthClient: NodeOAuthClient resolver: BidirectionalResolver destroy: () => Promise<void>}
export async function createAppContext(): Promise<AppContext> { const db = createDb(env.DB_PATH) await migrateToLatest(db) const oauthClient = await createOAuthClient(db) const ingester = createIngester(db) const logger = pino({ name: 'server', level: env.LOG_LEVEL }) const resolver = createBidirectionalResolver(oauthClient)
return { db, ingester, logger, oauthClient, resolver,
async destroy() { await ingester.destroy() await db.destroy() }, }}