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