setTrust

tcmts.cli.attest.setTrust · #g4miwljq · term · runs on the server

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

used by