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'
8
9/**
10 * Application state passed to the router and elsewhere
11 */
12export type AppContext = {
13 db: Database
14 ingester: Firehose
15 logger: pino.Logger
16 oauthClient: NodeOAuthClient
17 identityResolver: NodeOAuthClient['identityResolver']
18}
19
20export async function createAppContext(): Promise<AppContext> {
21 const db = await createDb()
22 const oauthClient = await createOAuthClient(db)
23 const ingester = createIngester(db)
24 const logger = pino({ name: 'server' })
25
26 return {
27 db,
28 ingester,
29 logger,
30 oauthClient,
31 identityResolver: oauthClient.identityResolver,
32 }
33}