Scratch space for learning atproto app development
1import type {
2 NodeSavedSession,
3 NodeSavedSessionStore,
4 NodeSavedState,
5 NodeSavedStateStore,
6} from '@atproto/oauth-client-node'
7import { Database } from '#/db'
8
9export class StateStore implements NodeSavedStateStore {
10 constructor(private db: Database) {}
11 async get(key: string): Promise<NodeSavedState | undefined> {
12 const result = await this.db
13 .selectFrom('auth_state')
14 .selectAll()
15 .where('key', '=', key)
16 .executeTakeFirst()
17 if (!result) return
18 return JSON.parse(result.state) as NodeSavedState
19 }
20 async set(key: string, val: NodeSavedState) {
21 const state = JSON.stringify(val)
22 await this.db
23 .insertInto('auth_state')
24 .values({ key, state })
25 .onConflict((oc) => oc.doUpdateSet({ state }))
26 .execute()
27 }
28 async del(key: string) {
29 await this.db.deleteFrom('auth_state').where('key', '=', key).execute()
30 }
31}
32
33export class SessionStore implements NodeSavedSessionStore {
34 constructor(private db: Database) {}
35 async get(key: string): Promise<NodeSavedSession | undefined> {
36 const result = await this.db
37 .selectFrom('auth_session')
38 .selectAll()
39 .where('key', '=', key)
40 .executeTakeFirst()
41 if (!result) return
42 return JSON.parse(result.session) as NodeSavedSession
43 }
44 async set(key: string, val: NodeSavedSession) {
45 const session = JSON.stringify(val)
46 await this.db
47 .insertInto('auth_session')
48 .values({ key, session })
49 .onConflict((oc) => oc.doUpdateSet({ session }))
50 .execute()
51 }
52 async del(key: string) {
53 await this.db.deleteFrom('auth_session').where('key', '=', key).execute()
54 }
55}