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}