Link bookmarking tool built on aproto (early alpha)
at main 1.4 kB view raw
1import { 2 NodeSavedSession, 3 NodeSavedSessionStore, 4 NodeSavedState, 5 NodeSavedStateStore, 6} from "@bigmoves/atproto-oauth-client" 7import { AUTH_PREFIX, kv } from "./kv" 8 9// ==== Utils ==== 10 11export function stateKey(key: string | string[]): Deno.KvKey { 12 if (Array.isArray(key)) { 13 return [AUTH_PREFIX, "state", ...key] 14 } 15 return [AUTH_PREFIX, "state", key] 16} 17 18export function sessionKey(key: string | string[]): Deno.KvKey { 19 if (Array.isArray(key)) { 20 return [AUTH_PREFIX, "session", ...key] 21 } 22 return [AUTH_PREFIX, "session", key] 23} 24 25// ==== Store implementations ==== 26 27export const StateStore = { 28 async get(key): Promise<NodeSavedState | undefined> { 29 const res = await kv.get<NodeSavedState>(stateKey(key)) 30 return res.value ?? undefined 31 }, 32 async set(key, val) { 33 await kv.set(stateKey(key), val) 34 }, 35 async del(key: string) { 36 await kv.delete(stateKey(key)) 37 }, 38} satisfies NodeSavedStateStore 39 40export const SessionStore = { 41 async get(key): Promise<NodeSavedSession | undefined> { 42 const res = await kv.get<NodeSavedSession>(sessionKey(key)) 43 return res.value ?? undefined 44 }, 45 async set(key, val) { 46 await kv.set(sessionKey(key), val) 47 }, 48 async del(key) { 49 await kv.delete(sessionKey(key)) 50 }, 51} satisfies NodeSavedSessionStore