Scratch space for learning atproto app development
at main 1.6 kB view raw
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}