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' 9import { 10 BidirectionalResolver, 11 createBidirectionalResolver, 12} from '#/id-resolver' 13 14/** 15 * Application state passed to the router and elsewhere 16 */ 17export type AppContext = { 18 db: Database 19 ingester: Firehose 20 logger: pino.Logger 21 oauthClient: NodeOAuthClient 22 resolver: BidirectionalResolver 23 destroy: () => Promise<void> 24} 25 26export async function createAppContext(): Promise<AppContext> { 27 const db = createDb(env.DB_PATH) 28 await migrateToLatest(db) 29 const oauthClient = await createOAuthClient(db) 30 const ingester = createIngester(db) 31 const logger = pino({ name: 'server', level: env.LOG_LEVEL }) 32 const resolver = createBidirectionalResolver(oauthClient) 33 34 return { 35 db, 36 ingester, 37 logger, 38 oauthClient, 39 resolver, 40 41 async destroy() { 42 await ingester.destroy() 43 await db.destroy() 44 }, 45 } 46}