takeAttestation

tcmts.registry.takeAttestation · #v6d36tgl · term · runs on the server

uses tcmts.registry.attestations, which uses tcmts.server.table, which uses tcmts.server.Table, which uses #tcm/host (database)

A review, advisory or yank Jetstream sent: kept, to be checked against its writer's repository; or, deleted, gone once its repository no longer holds it (recheckAttestation).

import { parseAttestation } from "#codebase/tcmts/records";
import {
  attestationFields, attestations, checkAttestation, people, recheckAttestation, safeLex,
} from "#codebase/tcmts/registry";
import type { RegistryAttestation } from "#codebase/tcmts/registry";
import { enqueue } from "#codebase/tcmts/server";
import type { RawEvent } from "@bsky/jetstream";

export async function takeAttestation(e: RawEvent & { kind: "commit" }): Promise<void> {
  const uri = `at://${e.did}/${e.commit.collection}/${e.commit.rkey}`;
  const had = await attestations.findOne({ uri });
  if (e.commit.operation === "delete") {
    if (had) enqueue(recheckAttestation, uri);
    return;
  }
  const raw = e.commit.record;
  const a = parseAttestation(e.commit.collection, raw instanceof Uint8Array ? safeLex(raw) : raw);
  if (!a) return;
  if (!(await people.findOne({ did: e.did }))) await people.insert({ did: e.did, seq: e.seq });
  const row: RegistryAttestation = {
    uri,
    did: e.did,
    ...attestationFields(a),
    seq: e.seq,
    state: "pending",
  };
  if (had) await attestations.put(had.id, row);
  else await attestations.insert(row);
  enqueue(checkAttestation, uri);
}

uses

used by