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