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}