Encrypted, ephemeral, private memos on atproto
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 45 lines 1.1 kB view raw
1import type { InputLocalKeyPair } from "@cistern/consumer"; 2import { getLogger } from "@logtape/logtape"; 3 4const KV_PATH = "./cistern-mcp.db"; 5 6let kv: Deno.Kv | undefined; 7 8async function getKv(): Promise<Deno.Kv> { 9 if (!kv) { 10 kv = await Deno.openKv(KV_PATH); 11 } 12 return kv; 13} 14 15export async function getStoredKeypair( 16 handle: string, 17): Promise<InputLocalKeyPair | null> { 18 const logger = getLogger(["cistern", "mcp"]); 19 const db = await getKv(); 20 const result = await db.get<InputLocalKeyPair>([ 21 "cistern", 22 "keypairs", 23 handle, 24 ]); 25 26 if (result.value) { 27 logger.debug("found stored keypair for {handle}", { handle }); 28 return result.value; 29 } 30 31 logger.debug("no stored keypair found for {handle}", { handle }); 32 return null; 33} 34 35export async function storeKeypair( 36 handle: string, 37 keypair: InputLocalKeyPair, 38): Promise<void> { 39 const logger = getLogger(["cistern", "mcp"]); 40 const db = await getKv(); 41 42 await db.set(["cistern", "keypairs", handle], keypair); 43 44 logger.info("stored keypair for {handle}", { handle }); 45}