setTrust
uses Buffer
tcm lib trust: whose attestations tcm lib shows, besides each library's author's: add someone (a handle or DID),
or take them off. The list is a file of the codebase, so it's history: a team shares it.
import { resolveIdentity } from "#codebase/tcmts/atproto"; import { trustedIn, trustPath } from "#codebase/tcmts/cli/attest"; import type { Trusted } from "#codebase/tcmts/cli/attest"; import type { Codebase } from "#codebase/tcmts/cli/codebase"; import { fileDefinition } from "#codebase/tcmts/cli/files"; import { dim } from "#codebase/tcmts/cli/style"; import { UsageError } from "#codebase/tcmts/cli/ui"; export async function setTrust( cb: Codebase, o: { add?: string | undefined; rm?: string | undefined }, ): Promise<Trusted[]> { let list = trustedIn(cb); const before = JSON.stringify(list); if (o.add) { const id = await resolveIdentity(o.add); list = [ ...list.filter((t) => t.did !== id.did), { did: id.did, ...(id.handle ? { handle: id.handle } : {}) }, ]; } if (o.rm) { const who = o.rm.replace(/^@/, ""); const left = list.filter((t) => t.did !== who && t.handle !== who); if (left.length === list.length) throw new UsageError(`${o.rm} isn't trusted here`); list = left; } if (JSON.stringify(list) !== before) { const path = trustPath(cb); const { def } = fileDefinition( cb, path, "json", Buffer.from(`${JSON.stringify(list, null, 2)}\n`), ); cb.putDefs([def]); const [old] = cb.store.hashesAt(path); const message = `lib trust ${o.add ? `+${o.add}` : ""}${o.add && o.rm ? " " : ""}${o.rm ? `-${o.rm}` : ""}`; if (old) cb.store.updateName(path, def.hash, "file", message); else cb.store.addName(path, def.hash, "file", message); } console.log( list.length ? `${dim("trusted, besides each library's author:")} ${list.map((t) => (t.handle ? `@${t.handle}` : t.did)).join(", ")}` : dim("no one trusted yet, besides each library's author: `tcm lib trust --add @<handle>`"), ); return list; }
uses
- tcmts.atproto.resolveIdentity
- tcmts.cli.attest.Trusted
- tcmts.cli.attest.trustPath
- tcmts.cli.attest.trustedIn
- tcmts.cli.codebase.Codebase
- tcmts.cli.files.fileDefinition
- tcmts.cli.style.dim
- tcmts.cli.ui.UsageError