import type { Keypair } from "@atproto/crypto"; type SignatureHeaders = { authorization: string; "signature-input": string; signature: string; "atproto-space-audience"?: string }; export async function spaceSignatureHeaders(key: Keypair, authorization: string, audience?: string) { const parameters = audience === undefined ? `("authorization");keyid="${key.did()}"` : '("authorization" "atproto-space-audience")'; const lines = [`"authorization": ${authorization}`]; if (audience !== undefined) lines.push(`"atproto-space-audience": ${audience}`); lines.push(`"@signature-params": ${parameters}`); const signature = await key.sign(new TextEncoder().encode(lines.join("\n"))); const headers: SignatureHeaders = { authorization, "signature-input": `atproto-space=${parameters}`, signature: `atproto-space=:${btoa(String.fromCharCode(...signature))}:`, }; if (audience !== undefined) headers["atproto-space-audience"] = audience; return headers; }