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 } 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 = await createDb()
23 const oauthClient = await createOAuthClient(db)
24 const ingester = createIngester(db)
25 const logger = pino({ name: 'server', level: env.LOG_LEVEL })
26
27 return {
28 db,
29 ingester,
30 logger,
31 oauthClient,
32 identityResolver: oauthClient.identityResolver,
33 }
34}