A minimal starter for ATProto logins in Astro
1import type { 2 NodeSavedSession, 3 NodeSavedSessionStore, 4 NodeSavedState, 5 NodeSavedStateStore, 6} from '@atproto/oauth-client-node' 7 8// In-memory storage for OAuth state and sessions 9// For production, you'd want to use a proper database or distributed cache 10 11export class StateStore implements NodeSavedStateStore { 12 private store = new Map<string, NodeSavedState>() 13 14 async get(key: string): Promise<NodeSavedState | undefined> { 15 return this.store.get(key) 16 } 17 18 async set(key: string, val: NodeSavedState) { 19 this.store.set(key, val) 20 } 21 22 async del(key: string) { 23 this.store.delete(key) 24 } 25} 26 27export class SessionStore implements NodeSavedSessionStore { 28 private store = new Map<string, NodeSavedSession>() 29 30 async get(key: string): Promise<NodeSavedSession | undefined> { 31 return this.store.get(key) 32 } 33 34 async set(key: string, val: NodeSavedSession) { 35 this.store.set(key, val) 36 } 37 38 async del(key: string) { 39 this.store.delete(key) 40 } 41}