diff --git a/packages/shared/deno.jsonc b/packages/shared/deno.jsonc new file mode 100644 index 0000000..49dab39 --- /dev/null +++ b/packages/shared/deno.jsonc @@ -0,0 +1,9 @@ +{ + "name": "@cistern/shared", + "exports": { + ".": "./mod.ts" + }, + "imports": { + "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.2" + } +} diff --git a/packages/shared/mod.ts b/packages/shared/mod.ts new file mode 100644 index 0000000..b8509f8 --- /dev/null +++ b/packages/shared/mod.ts @@ -0,0 +1 @@ +export * from "./resolve-did.ts"; diff --git a/packages/shared/resolve-did.ts b/packages/shared/resolve-did.ts new file mode 100644 index 0000000..f911b4f --- /dev/null +++ b/packages/shared/resolve-did.ts @@ -0,0 +1,30 @@ +import type { Did, Handle } from "@atcute/lexicons"; + +export interface MiniDoc { + did: Did; + handle: Handle; + pds: string; + signing_key: string; +} + +export async function resolveMiniDoc( + handle: string, + slingshotUrl?: string, +): Promise { + const url = new URL( + "/xrpc/com.bad-example.identity.resolveMiniDoc", + slingshotUrl ?? "https://slingshot.microcosm.blue", + ); + + url.searchParams.set("handle", handle); + + const result = await fetch(url.toString()); + + if (!result.ok) { + throw new Error( + `failed to fetch identity mini doc: Error ${result.status} ${result.statusText}`, + ); + } + + return await result.json(); +}