announcedReleases
The releases an account has announced: its codes.tcm.release records, read from the PDS its DID document names.
A record that isn't one, or isn't at its own key (<package>:<version>), is left out.
import { getJson } from "#codebase/tcmts/atproto"; import type { Identity } from "#codebase/tcmts/atproto"; import { parseReleaseRecord, recordKey, RELEASE_COLLECTION } from "#codebase/tcmts/records"; import type { ReleaseRecord } from "#codebase/tcmts/records"; export async function announcedReleases(id: Identity): Promise<ReleaseRecord[]> { const out: ReleaseRecord[] = []; let cursor: string | undefined; // (so many pages of 100, however many a PDS says there are) let pages = 0; do { const q = new URLSearchParams({ repo: id.did, collection: RELEASE_COLLECTION, limit: "100", ...(cursor ? { cursor } : {}), }); const page = await getJson<{ records: { uri: string; value: unknown }[]; cursor?: string }>( `${id.pds}/xrpc/com.atproto.repo.listRecords?${q}`, ); for (const { uri, value } of page.records) { const r = parseReleaseRecord(value); if (r && uri.endsWith(`/${recordKey(r)}`)) out.push(r); } cursor = page.records.length && ++pages < 50 ? page.cursor : undefined; } while (cursor); return out; }
uses
- tcmts.atproto.Identity
- tcmts.atproto.getJson
- tcmts.records.RELEASE_COLLECTION
- tcmts.records.ReleaseRecord
- tcmts.records.parseReleaseRecord
- tcmts.records.recordKey