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}
24
25export async function createAppContext(): Promise<AppContext> {
26 const db = createDb(env.DB_PATH)
27 await migrateToLatest(db)
28 const oauthClient = await createOAuthClient(db)
29 const ingester = createIngester(db)
30 const logger = pino({ name: 'server', level: env.LOG_LEVEL })
31 const resolver = createBidirectionalResolver(oauthClient)
32
33 return {
34 db,
35 ingester,
36 logger,
37 oauthClient,
38 resolver,
39 }
40}