Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
1.6 kB · 56 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657import { IdResolver, getPds } from "@atproto/identity";
export type Record = { uri: string; cid: string; value: unknown;};
export async function getRecord<T = unknown>( did: string, collection: string, rkey: string,): Promise<{ uri: string; cid: string; value: T } | null> { const pds = await resolvePds(did); if (!pds) return null; const url = new URL(`${pds}/xrpc/com.atproto.repo.getRecord`); url.searchParams.set("repo", did); url.searchParams.set("collection", collection); url.searchParams.set("rkey", rkey); const res = await fetch(url); if (!res.ok) return null; return (await res.json()) as { uri: string; cid: string; value: T };}
export async function listAllRecords( did: string, collection: string,): Promise<{ value: any; uri: string }[]> { const pds = await resolvePds(did); if (!pds) return [];
const records: Record[] = []; let cursor: string | undefined; do { const url = new URL(`${pds}/xrpc/com.atproto.repo.listRecords`); url.searchParams.set("repo", did); url.searchParams.set("collection", collection); url.searchParams.set("limit", "100"); if (cursor) url.searchParams.set("cursor", cursor); const res = (await (await fetch(url)).json()) as { records?: Record[]; cursor?: string; }; records.push(...(res.records || [])); cursor = res.cursor; } while (cursor);
return records;}
async function resolvePds(did: string): Promise<string | null> { const resolver = new IdResolver(); const doc = await resolver.did.resolve(did); if (!doc) return null; return getPds(doc) ?? null;}