@real-life/trust-protocol 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/README.md +47 -25
- package/dist/adapters/vti-mediator.d.ts +18 -3
- package/dist/adapters/vti-mediator.d.ts.map +1 -1
- package/dist/adapters/vti-mediator.js +51 -13
- package/dist/adapters/vti-mediator.js.map +1 -1
- package/dist/codec.d.ts +9 -1
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +107 -23
- package/dist/codec.js.map +1 -1
- package/dist/engine.d.ts +15 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +130 -16
- package/dist/engine.js.map +1 -1
- package/dist/entropy.d.ts +1 -1
- package/dist/entropy.d.ts.map +1 -1
- package/dist/entropy.js +1 -1
- package/dist/entropy.js.map +1 -1
- package/dist/events.d.ts +21 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/holder-api.d.ts +29 -1
- package/dist/holder-api.d.ts.map +1 -1
- package/dist/holder-api.js +12 -2
- package/dist/holder-api.js.map +1 -1
- package/dist/holder-state-v2.d.ts +858 -0
- package/dist/holder-state-v2.d.ts.map +1 -0
- package/dist/holder-state-v2.js +2 -0
- package/dist/holder-state-v2.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/introduction/holder.d.ts.map +1 -1
- package/dist/introduction/holder.js +7 -0
- package/dist/introduction/holder.js.map +1 -1
- package/dist/invariants.d.ts.map +1 -1
- package/dist/invariants.js +70 -0
- package/dist/invariants.js.map +1 -1
- package/dist/membership/holder.d.ts +3 -5
- package/dist/membership/holder.d.ts.map +1 -1
- package/dist/membership/holder.js +165 -88
- package/dist/membership/holder.js.map +1 -1
- package/dist/membership.d.ts +31 -0
- package/dist/membership.d.ts.map +1 -1
- package/dist/membership.js +25 -2
- package/dist/membership.js.map +1 -1
- package/dist/message/holder.d.ts +49 -0
- package/dist/message/holder.d.ts.map +1 -0
- package/dist/message/holder.js +290 -0
- package/dist/message/holder.js.map +1 -0
- package/dist/message.d.ts +43 -0
- package/dist/message.d.ts.map +1 -0
- package/dist/message.js +51 -0
- package/dist/message.js.map +1 -0
- package/dist/receive.d.ts +4 -3
- package/dist/receive.d.ts.map +1 -1
- package/dist/receive.js +23 -4
- package/dist/receive.js.map +1 -1
- package/dist/results.d.ts +17 -2
- package/dist/results.d.ts.map +1 -1
- package/dist/results.js.map +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +9 -6
- package/dist/schemas.js.map +1 -1
- package/dist/state.d.ts +66 -5
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -1
- package/dist/state.js.map +1 -1
- package/dist/trust/continuity.d.ts.map +1 -1
- package/dist/trust/continuity.js +7 -1
- package/dist/trust/continuity.js.map +1 -1
- package/dist/trust/entries.d.ts.map +1 -1
- package/dist/trust/entries.js +103 -2
- package/dist/trust/entries.js.map +1 -1
- package/dist/views.d.ts +34 -2
- package/dist/views.d.ts.map +1 -1
- package/dist/views.js +19 -1
- package/dist/views.js.map +1 -1
- package/dist/wire.d.ts +47 -6
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js.map +1 -1
- package/package.json +6 -2
- package/schemas/holder-state-v2.schema.json +4123 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"holder.js","sourceRoot":"","sources":["../../src/introduction/holder.ts"],"names":[],"mappings":"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","sourcesContent":["// introduction/holder — the Introduction Act on the holder (lib Stage 2,\n// PR 7a; Trust Layer 0.31 §8 on Delivery 0.81 §4.4). The pure forms are\n// the root module's (introduction.ts). Trust 0.31 §8 relays the act\n// through the mediator; no rendezvous drop is needed or built.\n//\n// The three roles, each its own lifecycle (8320), in\n// state.encounter.introductions under `<role>:<act>`:\n// requester holds an offer (below), decides on an `introduction`\n// prompt, sends introduction-request/0.1 on its pinned tuple\n// toward the mediator (8270), with a fresh pair label and card;\n// sent → acked (the ack) → completed (an accepted reply, 8.2);\n// sent or acked → failed at the act's expiry (8340), the\n// requester waiting for the ack and the reply alike until\n// then: users are mostly offline, a mediator not online\n// within ack-delay + act-skew would fail every introduction\n// (A20, spec follow-up 18: 8690's ack timeout is not applied);\n// the discard at the absolute lifetime as before (8310)\n// mediator received (checks 1–3 of 8410–8430, the ack duty bound),\n// forwarded (the target resolved, the byte-identical payload\n// on its tuple, 8440), completed once the ack is produced, the\n// reply forwarded and both vouchers sent (8360)\n// target received (a forward verified, 8050) → an `introduction`\n// prompt; consented (its reply sent) or refused (local, silent)\n// The new relationship: the requester opens its fresh tuple toward the\n// target's card on an accepted reply, the target toward the requester's\n// card at consent (Trust openTuple, provenance `introduced` via the\n// mediator's contact, 8790); the continuity probe follows on it. A\n// verified voucher marks the relationship's memory `vouchedBy`. Both name\n// the mediator with the own pair label toward it the act pinned\n// (provenance.viaPin, memory.vouchedPin), so a split of the mediator's\n// entry moves them with that relationship (2080).\n//\n// What it registers (introductionModule):\n// human acts introduction.introduce the mediator's act (below)\n// decision introduction: on an offer, accept sends the request; on a\n// forward, accept consents (the reply), decline refuses\n// tasks introduction-request/0.1, -forward/0.1, -reply/0.1\n// (signature class: signed acks), -ack/0.1, -voucher/0.1 (DV\n// class: MAC acks), registry-declaration/0.1 (proof\n// required) and x-introduction-offer/0.1 (this library's\n// form, proof required); every one on the tuple binding,\n// the active head of a live relationship (receive.ts, 6240),\n// except the reply, ack and voucher: `pinned`, on the tuple\n// the act pinned, deactivated or not (8270)\n// duty intro-ack/1: the mediator's one ack at t_received + ack-delay\n// retain time-driven transitions (8140: the first whole second after\n// the bound) and the discard at the absolute lifetime (8310)\n// keepKeys the own rkids of every pinned tuple of a held act: a\n// chaining mid-act deactivates it, tick keeps its key (8270,\n// 8290)\n//\n// Choices this file makes where spec and note leave them open:\n// - who starts: §8 has the requester mint the act and name the target by\n// the mediator's designator (8.3), but says nothing of how the\n// requester learns that designator. This library has the mediator's\n// act `introduce(requester, target, {label?})` (the human who knows\n// both) send the requester an\n// experimental, signed x-introduction-offer/0.1 with the designator and\n// at most a label the mediator's human typed in that act — never a\n// name read from the target's profile (audience: the mediator alone,\n// 6b) or card, and no provenance of the mediator↔target relationship —\n// with the mediator's registry declaration of ack-delay (Delivery §4.4:\n// a requester never sends without holding it). The requester's human\n// accepts on an `introduction` prompt, which sends the request. Gaps\n// for Trust 0.32: the designator's way to the requester (§8.3), and\n// the residue that the offer, signed, is transferable: the requester\n// can show a third party that the mediator offered it this designator\n// and label\n// - the designator: 32 fresh bytes, u-base64url, minted once per target\n// contact and kept (stable per (mediator, target), 8610); the target\n// verifies \"designates itself\" by the channel the forward arrives on,\n// the mediator's pinned tuple toward it — it cannot read the handle\n// - ack-delay: a library constant the mediator declares, PT30S (in\n// [PT1S, PT1H]), revision 1, identical to every counterpart\n// - acks of the documents: the request, forward and reply carry\n// transferable signatures and earn signed delivery-acks (Delivery 4.4's\n// class rule); the ack and voucher artifacts are DV and earn MAC acks\n// - the forward opens a fresh thread toward the target; the reply comes\n// on it and is forwarded on the request's thread; the ack and the\n// requester's voucher travel on the request's thread, the target's on\n// the forward's\n// - an artifact outside its window is refused at stage 8 from its own\n// bytes (8110), the offer by its document's issuedAt; a refusal by a role's lifecycle (a late reply of a\n// failed act, 8350; a reply after the cutoff, 8180) commits only the\n// document's acknowledgement: the act is unchanged\n// - the requester's profile in the request is its display name (the own\n// profile's, at most 64 characters, 8450); the cards carry no name\n// - the name of an introduced contact: at the target the request's\n// displayName, at the requester the offer's label; kept in the\n// relationship's memory as `introducedName`, which the views read until\n// a profile arrives (self-declared, Encounter 6120)\nimport { iso, jcs } from '../core.js'\nimport type { Json, JsonObject } from '../core.js'\nimport { diSignWith, diVerify, digestBytes, digestDoc, xRawOfMk } from '../crypto.js'\nimport { seal } from '../delivery.js'\nimport { cardBody } from '../encounter.js'\nimport {\n ACT_EXPIRY, ACT_SKEW, DECLARATION_TYPE, INTRODUCTION_TYPES, MAC_ACK_INFO, MAC_VOUCHER_INFO, MEDIATOR_ROLE, actIdOf, designatorOf, designatorOk,\n introDigest, actFiresAt, introCardShapeOk, introMacKey, introSchemaOk, introMacArtifact, introMacOk, mediatorConstants, replyBound, replyCutoffHolds,\n requestCutoffHolds, requestFormOk, signIntroArtifact, actWindowHolds,\n} from '../introduction.js'\nimport type { AckBody, Artifact, ReplyBody, RequestBody, VoucherBody } from '../introduction.js'\nimport { b64uOf } from '../core.js'\nimport { tupleByRkid } from '../receive.js'\nimport type { TaskRefusal } from '../receive.js'\nimport type { Applied, CommandDef, DecisionDef, DutyHandler, EventDraft, HolderModule, OutboundDraft, PrepareCtx, Refusal, TaskHandler } from '../engine.js'\nimport type { Recipient } from '../ports.js'\nimport type { HolderState, IntroAct, IntroAckDuty, IntroOffer, Millis, Prompt } from '../state.js'\nimport { openTuple } from '../trust/continuity.js'\nimport { activeTuple, entryOf, findContact, liveRel, tupleByLabel } from '../trust/state.js'\nimport { idsOf } from '../encounter/ceremony.js'\nimport { withPairNonce } from '../identity-state.js'\nimport { tsec } from '../core.js'\n\nconst TT = 'https://real-life.org/trust-tasks/'\nexport const OFFER_TYPE = TT + 'x-introduction-offer/0.1'\nexport { DECLARATION_TYPE, INTRODUCTION_TYPES }\n\n/** The mediator's declared ack-delay (Delivery §4.4, Trust 8.4). */\nexport const ACK_DELAY = 'PT30S'\nexport const ACK_DELAY_MS = 30_000\n\nexport const INTRODUCTION_COMMANDS = Object.freeze({ introduce: 'introduction.introduce' })\nexport interface IntroduceInput { requesterId: string, targetId: string, label?: string }\n\nconst refuse = (reason: TaskRefusal['reason'], ref?: string): TaskRefusal => ({ ok: false, reason, ...(ref ? { ref } : {}) })\nconst no = (code: Refusal['code'], ref?: string): Refusal => ({ ok: false, code, ...(ref ? { ref } : {}) })\nconst isRefusal = (x: unknown): x is Refusal | TaskRefusal => (x as Refusal)?.ok === false\ntype Doc = Record<string, any>\nconst keyOf = (role: IntroAct['role'], act: string): string => `${role}:${act}`\nconst offerPromptId = (digest: string): string => 'intro-offer:' + digest\nconst consentPromptId = (act: string): string => 'intro:' + act\n\ninterface Sealed { digest: string, envelope: OutboundDraft['envelope'], threadId: string, type: string, recipient: Recipient }\nconst draft = (s: Sealed): OutboundDraft => ({ digest: s.digest, envelope: s.envelope, type: s.type, threadId: s.threadId, recipient: s.recipient })\n\n/** A document from an own pair label's anchor on a tuple, sealed to its counterpart. */\nasync function onTuple (ctx: PrepareCtx, label: string, type: string, payload: unknown, threadId: string, sign = false): Promise<Sealed> {\n const at = tupleByLabel(ctx.snapshot, label)\n if (!at) throw new Error(`introduction: no tuple ${label}`)\n const own = await ctx.keys.anchorOf(label)\n const issuedAt = iso(ctx.when)\n let doc: Doc = { id: ctx.entropy.id('doc.id'), type, issuer: own.anchor, recipient: at.tuple.counterpartAnchor, threadId, issuedAt, payload }\n if (sign) doc = await diSignWith(own.anchor, (b) => ctx.keys.sign(label, b), doc, issuedAt, ctx.crypto.subtle)\n const S = ctx.crypto.subtle\n return {\n digest: await digestDoc(doc, S),\n envelope: await seal(doc as Json, at.tuple.counterpartKeyAgreement, { ephSeed: ctx.entropy.bytes('seal.eph', 32), nonce: ctx.entropy.bytes('seal.nonce', 12) }, S),\n threadId, type,\n recipient: { contactId: entryOf(ctx.snapshot, at.rel)?.id ?? at.rel.contactId, rkid: at.tuple.rkid, keyAgreement: at.tuple.counterpartKeyAgreement },\n }\n}\n\n/** The MAC key of the pinned tuple `label` (8630, 8730). */\nasync function pinKey (ctx: PrepareCtx, label: string, info: string): Promise<Uint8Array | null> {\n const at = tupleByLabel(ctx.snapshot, label)\n const raw = at ? xRawOfMk(at.tuple.counterpartKeyAgreement) : null\n if (!at || !raw) return null\n const a = await ctx.keys.agree(at.tuple.rkid, raw, ctx.release)\n return a.status === 'available' ? introMacKey(a.shared, info, ctx.crypto.subtle) : null\n}\n\n/** The live active tuple toward a contact (8020: a pair relationship). */\nfunction channelTo (state: Readonly<HolderState>, contactId: string) {\n const c = findContact(state, contactId)\n if (!c) return null\n const ids = new Set([c.id, ...c.aliases])\n for (const id of c.relIds) {\n const r = state.relationships[id]\n const t = r && liveRel(r) ? activeTuple(r) : undefined\n if (t && !t.deactivated && ids.has(t.entryId)) return { contact: c, rel: r, tuple: t }\n }\n return null\n}\n\n/** The arrival tuple of a document, with the entry it feeds. */\nfunction arrival (state: Readonly<HolderState>, rkid: string) {\n const at = tupleByRkid(state, rkid)\n return at ? { label: at.tuple.ownPairLabel, contactId: entryOf(state, at.rel)?.id ?? at.rel.contactId, tuple: at.tuple, rel: at.rel } : null\n}\n\nconst withAct = (state: HolderState, a: IntroAct): HolderState =>\n ({ ...state, encounter: { ...state.encounter, introductions: { ...state.encounter.introductions, [a.key]: a } } })\n\nconst held = (state: Readonly<HolderState>, role: IntroAct['role'], act: string): IntroAct | undefined => state.encounter.introductions[keyOf(role, act)]\n\n/** The requester's status at `when` (8340, 8140): sent or acked, it fails\n * at the act's expiry, the first whole second after it, whether or not\n * tick ran; no ack timeout (A20, spec follow-up 18, against 8690). */\nfunction requesterStatus (a: Readonly<IntroAct>, when: Millis): IntroAct['status'] {\n if ((a.status === 'sent' || a.status === 'acked') && when >= actFiresAt(a.at + ACT_EXPIRY)) return 'failed'\n return a.status\n}\n\nconst lifetimeOver = (a: Readonly<IntroAct>, when: Millis): boolean => when >= actFiresAt(a.issuedAt + ACT_EXPIRY + ACT_SKEW)\n\n/** The mediator's completion (8360): ack produced, reply forwarded, vouchers sent. */\nconst completedIfDone = (a: IntroAct): IntroAct =>\n a.role === 'mediator' && a.ack !== null && a.replyForwarded && a.vouchersSent ? { ...a, status: 'completed' } : a\n\n/** The own profile name for the request's displayName (≤ 64, 8450). */\nconst displayNameOf = (state: Readonly<HolderState>): string | undefined => {\n const n = (state.profile.body as { name?: unknown } | null)?.name\n return typeof n === 'string' && n.length ? [...n].slice(0, 64).join('') : undefined\n}\n\n/** A fresh pair label and its displayed card, no challenge, no name (the\n * act's fresh anchor, 8010; an rltp-card/0.25 under Encounter's DI rules). */\nasync function freshCard (ctx: PrepareCtx): Promise<{ label: string, nonce: string, rkid: string, anchor: string, card: Doc }> {\n const n = ctx.entropy.bytes('founding.nonce', 32)\n const label = 'pair/' + await digestBytes(n, ctx.crypto.subtle)\n const me = await ctx.keys.anchorOf(label)\n const at = iso(ctx.when)\n const card = await diSignWith(me.anchor, (b) => ctx.keys.sign(label, b), cardBody(me) as unknown as Record<string, Json>, at, ctx.crypto.subtle)\n return { label, nonce: b64uOf(n), rkid: me.keyAgreement, anchor: me.anchor, card }\n}\n\n/** The fresh relationship of an act toward the counterpart's card, introduced via the mediator (8790). */\nfunction openIntroduced (state: Readonly<HolderState>, label: string, nonce: string | undefined, rkid: string, card: Doc, viaPin: string, name: string | undefined, when: Millis): Applied {\n const ids = idsOf(label)\n const opened = openTuple(state, {\n relId: ids.relId, contactId: ids.contactId, ownPairLabel: label, counterpartAnchor: card.anchor, counterpartKeyAgreement: card.keyAgreement,\n provenance: { kind: 'introduced', via: arrivalContact(state, viaPin), viaPin }, ...(nonce !== undefined ? { nonce } : {}),\n }, rkid, when)\n if (name === undefined) return opened\n const rel = opened.state.relationships[ids.relId]\n return { ...opened, state: { ...opened.state, relationships: { ...opened.state.relationships, [ids.relId]: { ...rel, memory: { ...rel.memory, introducedName: name } } } } }\n}\n\n// ── the mediator's act ─────────────────────────────────────────────────\n\ntype IntroducePrep = Refusal | { designator: string, minted: boolean, offer: Sealed, declaration: Sealed }\n\nconst introduceDef: CommandDef<IntroduceInput, IntroducePrep> = {\n human: true,\n async prepare (ctx, input) {\n const s = ctx.snapshot\n const r = channelTo(s, input?.requesterId), t = channelTo(s, input?.targetId)\n if (!r || !t) return no('no-own-channel', 'RLTP-TRU-8020')\n if (r.contact.id === t.contact.id) return no('unknown-contact')\n const held = Object.entries(s.encounter.designators).find(([, c]) => c === t.contact.id)?.[0]\n const designator = held ?? designatorOf(ctx.entropy.bytes('intro.target', 32))\n const label = input.label\n if (label !== undefined && (typeof label !== 'string' || !label.length || [...label].length > 64)) throw new TypeError('introduction.introduce: label is 1 to 64 characters')\n const declaration = await onTuple(ctx, r.tuple.ownPairLabel, DECLARATION_TYPE,\n { declaration: { role: MEDIATOR_ROLE, revision: '1', constants: { 'ack-delay': ACK_DELAY } } }, ctx.entropy.id('thread.id'), true)\n const offer = await onTuple(ctx, r.tuple.ownPairLabel, OFFER_TYPE,\n { target: designator, ...(label !== undefined ? { label } : {}) }, ctx.entropy.id('thread.id'), true)\n return { designator, minted: held === undefined, offer, declaration }\n },\n apply (state, prepared, input) {\n const p = prepared.value\n if (isRefusal(p)) return p\n const designators = p.minted ? { ...state.encounter.designators, [p.designator]: findContact(state, input.targetId)!.id } : state.encounter.designators\n return { state: { ...state, encounter: { ...state.encounter, designators } }, outbound: [draft(p.declaration), draft(p.offer)] }\n },\n}\n\n// ── the registry declaration (Delivery §4.4) ───────────────────────────\n\nconst declarationTask: TaskHandler<Doc, null> = {\n proof: 'required',\n decode: (p) => (introSchemaOk('payload-registry-declaration.schema.json', p) ? p as Doc : refuse('malformed')),\n async prepare (ctx, doc) {\n if (!(await diVerify(doc, doc.issuer, ctx.crypto.subtle))) return refuse('validation-failed')\n const d = doc.payload.declaration\n // the registering specification closes names and domains: only the mediator role is known here\n if (d.role !== MEDIATOR_ROLE || mediatorConstants(d.constants) === null) return refuse('validation-failed')\n return null\n },\n // the generic revision rule: higher wins, equal and identical is\n // idempotent, equal and different or lower is refused\n apply (state, _p, doc, arr) {\n const d = doc.payload.declaration\n const k = `${doc.issuer} ${d.role}`\n const h = state.encounter.declarations[k]\n if (h) {\n const cmp = BigInt(d.revision) - BigInt(h.revision)\n if (cmp < 0n) return refuse('validation-failed')\n if (cmp === 0n) return jcs(h.constants) === jcs(d.constants) ? { state: state as HolderState } : refuse('validation-failed')\n }\n return { state: { ...state, encounter: { ...state.encounter, declarations: { ...state.encounter.declarations, [k]: { issuer: doc.issuer, role: d.role, revision: d.revision, constants: d.constants, at: arr.when } } } } }\n },\n}\n\n// ── the offer at the requester (this library's form) ───────────────────\n\nconst offerTask: TaskHandler<Doc, null> = {\n proof: 'required',\n decode (p) {\n const x = p as Record<string, unknown>\n if (x === null || typeof x !== 'object' || !designatorOk(x.target) ||\n (x.label !== undefined && (typeof x.label !== 'string' || !x.label.length || [...x.label].length > 64)) || Object.keys(x).some((k) => !['target', 'label'].includes(k))) return refuse('malformed')\n return x as Doc\n },\n async prepare (ctx, doc) {\n // the act window, like the request's and the forward's (8110): a replay\n // after the effect cache let the offer go opens no prompt again\n if (!actWindowHolds(doc.issuedAt, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8110')\n return (await diVerify(doc, doc.issuer, ctx.crypto.subtle)) ? null : refuse('validation-failed')\n },\n apply (state, _p, doc, arr) {\n const a = arrival(state, arr.rkid)!\n const o: IntroOffer = {\n id: offerPromptId(arr.digest), mediatorContactId: a.contactId, pin: a.label, target: doc.payload.target,\n ...(doc.payload.label !== undefined ? { label: doc.payload.label } : {}), at: arr.when,\n }\n const prompt: Prompt = { id: o.id, kind: 'introduction', contactId: a.contactId, openedAt: arr.when, expiresAt: arr.when + ACT_EXPIRY }\n return {\n state: { ...state, encounter: { ...state.encounter, offers: { ...state.encounter.offers, [o.id]: o } }, prompts: { ...state.prompts, [prompt.id]: prompt } },\n events: [{ type: 'prompt.opened', promptId: prompt.id, kind: 'introduction' }],\n }\n },\n}\n\n// ── the request: the requester's decision on an offer ──────────────────\n\ninterface RequestPrep { act: string, fresh: Awaited<ReturnType<typeof freshCard>>, request: Artifact<RequestBody>, doc: Sealed, ackDelayMs: number }\n\nasync function prepareRequest (ctx: PrepareCtx, o: Readonly<IntroOffer>): Promise<RequestPrep | Refusal> {\n const pin = tupleByLabel(ctx.snapshot, o.pin)\n if (!pin || pin.tuple.deactivated) return no('no-own-channel', 'RLTP-TRU-8270')\n // Delivery §4.4: never a request to a mediator whose declaration is not held\n const dec = ctx.snapshot.encounter.declarations[`${pin.tuple.counterpartAnchor} ${MEDIATOR_ROLE}`]\n const c = dec ? mediatorConstants(dec.constants) : null\n if (!c) return no('no-declaration')\n const fresh = await freshCard(ctx)\n const act = actIdOf(ctx.entropy.bytes('intro.act', 32))\n const name = displayNameOf(ctx.snapshot)\n const body: RequestBody = {\n type: 'introduction-request@1', act, issuedAt: iso(ctx.when), target: o.target,\n cardDigest: await introDigest(fresh.card, ctx.crypto.subtle), profile: name !== undefined ? { displayName: name } : {},\n }\n const request = await signIntroArtifact(body, (b) => ctx.keys.sign(fresh.label, b))\n const doc = await onTuple(ctx, o.pin, INTRODUCTION_TYPES.request, { introduction: request, card: fresh.card }, ctx.entropy.id('thread.id'))\n return { act, fresh, request, doc, ackDelayMs: c.ackDelayMs }\n}\n\nfunction applyRequest (state: Readonly<HolderState>, o: Readonly<IntroOffer>, p: RequestPrep, when: Millis): Applied | Refusal {\n if (held(state, 'requester', p.act)) throw new Error('introduction: the act id is not fresh (8080)')\n if (state.register.labels.includes(p.fresh.label)) throw new Error('introduction: the pair label is not fresh')\n const a: IntroAct = {\n key: keyOf('requester', p.act), act: p.act, role: 'requester', status: 'sent', issuedAt: tsec(when), request: p.request as unknown as JsonObject,\n requestCard: p.fresh.card as JsonObject, reply: null, replyCard: null, pins: { mediator: o.pin }, threads: { request: p.doc.threadId },\n at: when, ackDelayMs: p.ackDelayMs, ownLabel: p.fresh.label, ack: null, replyForwarded: false, vouchersSent: false,\n pendingVoucher: null, voucher: null, vouched: false, promptId: null, ...(o.label !== undefined ? { peerName: o.label } : {}),\n }\n const offers = { ...state.encounter.offers }\n delete offers[o.id]\n const next: HolderState = {\n ...state,\n // the act's fresh label in the register before its card is shown (Identity 6.1)\n register: withPairNonce(state.register, p.fresh.label, p.fresh.nonce),\n addresses: { ...state.addresses, keys: { ...state.addresses.keys, [p.fresh.rkid]: { label: p.fresh.label, lastShown: when } } },\n encounter: { ...state.encounter, offers },\n }\n return { state: withAct(next, a), outbound: [draft(p.doc)] }\n}\n\n// ── the mediator: the request (8410–8440) ──────────────────────────────\n\ninterface RequestPayload { introduction: Artifact<RequestBody>, card: Doc }\ntype MediatorPrep = { dup: 'same' | 'none', forward: Sealed | null, target: string | null, ack: Sealed | null }\n\nconst requestTask: TaskHandler<RequestPayload, MediatorPrep> = {\n proof: 'absent',\n decode: (p) => (introSchemaOk('visibility-payload-introduction-request.schema.json', p) ? p as RequestPayload : refuse('malformed')),\n async prepare (ctx, doc, arr) {\n const s = ctx.snapshot\n const a = arrival(s, arr.rkid)!\n const body = doc.payload.introduction.body\n // step 1: an active channel (the pin set at arrival)\n if (!liveRel(a.rel) || a.tuple.deactivated || a.rel.activeHead !== a.label) return refuse('validation-failed', 'RLTP-TRU-8410')\n // step 2: form — schema (decode), digest, signature, the window, the ack cutoff\n if (!introCardShapeOk(doc.payload.card) || !(await diVerify(doc.payload.card, doc.payload.card.anchor, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8420')\n if (!(await requestFormOk(doc.payload, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8420')\n if (!actWindowHolds(body.issuedAt, ctx.when) || !requestCutoffHolds(body.issuedAt, ctx.when, ACK_DELAY_MS)) return refuse('validation-failed', 'RLTP-TRU-8160')\n const h = held(s, 'mediator', body.act)\n if (h) {\n if (jcs((h.request as Doc).body) !== jcs(doc.payload.introduction.body)) return refuse('validation-failed', 'RLTP-TRU-8240')\n // a byte-identical repeat: the one ack value, once produced (8220, 8230)\n const ack = h.ack ? await onTuple(ctx, a.label, INTRODUCTION_TYPES.ack, { introduction: h.ack }, h.threads.request) : null\n return { dup: 'same', forward: null, target: null, ack }\n }\n // step 4: resolution, for forwarding only and silently (8440)\n const targetId = s.encounter.designators[body.target]\n const t = targetId !== undefined ? channelTo(s, targetId) : null\n const forward = t && t.tuple.ownPairLabel !== a.label\n ? await onTuple(ctx, t.tuple.ownPairLabel, INTRODUCTION_TYPES.forward, doc.payload, ctx.entropy.id('thread.id'))\n : null\n return { dup: 'none', forward, target: forward ? t!.tuple.ownPairLabel : null, ack: null }\n },\n // step 3: received, the ack duty bound before and independent of resolution (8430)\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n if (p.dup === 'same') return { state: state as HolderState, outbound: p.ack ? [draft(p.ack)] : [] }\n const a = arrival(state, arr.rkid)!\n const body = doc.payload.introduction.body\n const act: IntroAct = {\n key: keyOf('mediator', body.act), act: body.act, role: 'mediator', status: p.forward ? 'forwarded' : 'received',\n issuedAt: Date.parse(body.issuedAt), request: doc.payload.introduction as unknown as JsonObject, requestCard: doc.payload.card as JsonObject,\n reply: null, replyCard: null, pins: { requester: a.label, ...(p.target ? { target: p.target } : {}) },\n threads: { request: doc.threadId, ...(p.forward ? { forward: p.forward.threadId } : {}) }, at: arr.when, ackDelayMs: ACK_DELAY_MS,\n ownLabel: null, ack: null, replyForwarded: false, vouchersSent: false, pendingVoucher: null, voucher: null, vouched: false, promptId: null,\n }\n const duty: IntroAckDuty = { kind: 'intro-ack', v: 1, id: 'intro-ack:' + body.act, dueAt: arr.when + ACK_DELAY_MS, act: body.act }\n return { state: withAct(state as HolderState, act), duties: [duty], outbound: p.forward ? [draft(p.forward)] : [] }\n },\n}\n\n/** The mediator's one ack, at t_received + ack-delay (8640), identical for\n * every target (8650); none after the absolute lifetime (8280). */\nconst ackDuty: DutyHandler<{ sealed: Sealed, ack: Json } | null> = {\n v: 1,\n async prepare (ctx, duty) {\n const a = held(ctx.snapshot, 'mediator', (duty as IntroAckDuty).act)\n if (!a || a.ack || lifetimeOver(a, ctx.when) || !a.pins.requester) return null\n const key = await pinKey(ctx, a.pins.requester, MAC_ACK_INFO)\n if (!key) return null\n const ack = await introMacArtifact<AckBody>({ type: 'introduction-ack@1', act: a.act }, key, ctx.crypto.subtle)\n return { sealed: await onTuple(ctx, a.pins.requester, INTRODUCTION_TYPES.ack, { introduction: ack }, a.threads.request), ack: ack as unknown as JsonObject }\n },\n apply (state, duty, ctx, when) {\n const a = held(state, 'mediator', (duty as IntroAckDuty).act)\n const p = ctx.prepared.value\n // past the lifetime, or the pinned key gone: the duty ends without production (8280)\n if (!a || a.ack || lifetimeOver(a, when) || p === null) return { state: state as HolderState }\n // the ack value as produced, retained for re-delivery (8200, 8230)\n return { state: withAct(state as HolderState, completedIfDone({ ...a, ack: p.ack as JsonObject })), outbound: [draft(p.sealed)] }\n },\n}\n\n// ── the target: the forward (8050) and its consent ─────────────────────\n\nconst forwardTask: TaskHandler<RequestPayload, { known: boolean }> = {\n proof: 'absent',\n decode: (p) => (introSchemaOk('visibility-payload-introduction-forward.schema.json', p) ? p as RequestPayload : refuse('malformed')),\n async prepare (ctx, doc) {\n const body = doc.payload.introduction.body\n if (!actWindowHolds(body.issuedAt, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8110')\n const h = held(ctx.snapshot, 'target', body.act)\n if (h) return jcs((h.request as Doc).body) === jcs(doc.payload.introduction.body) ? { known: true } : refuse('validation-failed', 'RLTP-TRU-8260')\n // the request signature under the card's anchor, cardDigest, the card (8050)\n if (!(await requestFormOk(doc.payload, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8050')\n if (!introCardShapeOk(doc.payload.card) || !(await diVerify(doc.payload.card, doc.payload.card.anchor, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8050')\n return { known: false }\n },\n // received: the pin at the forward's arrival (8270); the human decides\n // on its own device (8810); \"designates itself\" is the channel it came on\n apply (state, prepared, doc, arr) {\n if (prepared.value.known) return { state: state as HolderState }\n const a = arrival(state, arr.rkid)!\n const body = doc.payload.introduction.body\n const promptId = consentPromptId(body.act)\n const act: IntroAct = {\n key: keyOf('target', body.act), act: body.act, role: 'target', status: 'received', issuedAt: Date.parse(body.issuedAt),\n request: doc.payload.introduction as unknown as JsonObject, requestCard: doc.payload.card as JsonObject, reply: null, replyCard: null,\n pins: { mediator: a.label }, threads: { request: '', forward: doc.threadId }, at: arr.when, ackDelayMs: 0, ownLabel: null, ack: null,\n replyForwarded: false, vouchersSent: false, pendingVoucher: null, voucher: null, vouched: false, promptId,\n }\n const prompt: Prompt = { id: promptId, kind: 'introduction', contactId: a.contactId, openedAt: arr.when, expiresAt: actFiresAt(act.issuedAt + ACT_EXPIRY + ACT_SKEW) }\n return {\n state: { ...withAct(state as HolderState, act), prompts: { ...state.prompts, [promptId]: prompt } },\n events: [{ type: 'prompt.opened', promptId, kind: 'introduction' }],\n }\n },\n}\n\ninterface ReplyPrep { fresh: Awaited<ReturnType<typeof freshCard>>, reply: Artifact<ReplyBody>, doc: Sealed }\n\nasync function prepareReply (ctx: PrepareCtx, a: Readonly<IntroAct>): Promise<ReplyPrep | Refusal> {\n if (!a.pins.mediator || !tupleByLabel(ctx.snapshot, a.pins.mediator)) return no('no-own-channel', 'RLTP-TRU-8270')\n const fresh = await freshCard(ctx)\n const S = ctx.crypto.subtle\n const request = a.request as unknown as Artifact<RequestBody>\n const body: ReplyBody = {\n type: 'introduction-reply@1', act: a.act, requestDigest: await introDigest(request.body, S),\n requesterPair: (a.requestCard as Doc).anchor, cardDigest: await introDigest(fresh.card, S),\n }\n const reply = await signIntroArtifact(body, (b) => ctx.keys.sign(fresh.label, b))\n const doc = await onTuple(ctx, a.pins.mediator, INTRODUCTION_TYPES.reply, { introduction: reply, card: fresh.card }, a.threads.forward!)\n return { fresh, reply, doc }\n}\n\n/** The target consents: its reply out, its fresh tuple toward the requester's card (8380). */\nfunction applyConsent (state: Readonly<HolderState>, a: Readonly<IntroAct>, p: ReplyPrep, when: Millis): Applied | Refusal {\n if (a.status !== 'received') return no('unknown-act')\n if (lifetimeOver(a, when)) return no('prompt-expired', 'RLTP-TRU-8280')\n const name = ((a.request as Doc).body.profile as { displayName?: string }).displayName\n const opened = openIntroduced(state, p.fresh.label, p.fresh.nonce, p.fresh.rkid, a.requestCard as Doc, a.pins.mediator!, name, when)\n const next: IntroAct = { ...a, status: 'consented', reply: p.reply as unknown as JsonObject, replyCard: p.fresh.card as JsonObject, ownLabel: p.fresh.label }\n return { state: withAct(opened.state, next), outbound: [draft(p.doc)], events: opened.events, duties: opened.duties }\n}\n\nconst arrivalContact = (state: Readonly<HolderState>, label: string): string => {\n const at = tupleByLabel(state, label)\n return at ? (entryOf(state, at.rel)?.id ?? at.rel.contactId) : ''\n}\n\n/** introduction: on an offer, accept sends the request; on a forward,\n * accept consents and decline refuses, locally and silently (8380). */\nconst introductionDecision: DecisionDef<RequestPrep | ReplyPrep | Refusal | null> = {\n async prepare (ctx, prompt, choice) {\n if (choice !== 'accept') return null\n const o = ctx.snapshot.encounter.offers[prompt.id]\n if (o) return prepareRequest(ctx, o)\n const a = Object.values(ctx.snapshot.encounter.introductions).find((x) => x.promptId === prompt.id && x.role === 'target')\n return a ? prepareReply(ctx, a) : no('unknown-act')\n },\n apply (state, prompt, choice, when, prepared) {\n const o = state.encounter.offers[prompt.id]\n const a = Object.values(state.encounter.introductions).find((x) => x.promptId === prompt.id && x.role === 'target')\n if (choice === 'decline') {\n if (o) {\n const offers = { ...state.encounter.offers }\n delete offers[o.id]\n return { state: { ...state, encounter: { ...state.encounter, offers } } }\n }\n return a ? { state: withAct(state as HolderState, { ...a, status: 'refused' }) } : { state: state as HolderState }\n }\n const p = prepared.value\n if (p === null || isRefusal(p)) return p ?? no('unknown-act')\n if (o) return applyRequest(state, o, p as RequestPrep, when)\n return a ? applyConsent(state, a, p as ReplyPrep, when) : no('unknown-act')\n },\n}\n\n// ── the reply at the mediator (8480–8540) and at the requester (8550–8600) ─\n\ninterface ReplyPayload { introduction: Artifact<ReplyBody>, card: Doc }\ntype MediatorReplyPrep = { repeat: boolean, toRequester: Sealed | null, vouchers: Sealed[], orphaned?: true }\ntype RequesterReplyPrep = { ignore: boolean }\n\nconst replyChecks = async (ctx: PrepareCtx, a: Readonly<IntroAct>, payload: ReplyPayload): Promise<string | null> => {\n const r = payload.introduction.body\n if (!(await replyBound(payload, ctx.crypto.subtle))) return a.role === 'mediator' ? 'RLTP-TRU-8500' : 'RLTP-TRU-8560'\n if (r.requestDigest !== await introDigest((a.request as Doc).body, ctx.crypto.subtle)) return a.role === 'mediator' ? 'RLTP-TRU-8510' : 'RLTP-TRU-8570'\n if (r.requesterPair !== (a.requestCard as Doc).anchor) return a.role === 'mediator' ? 'RLTP-TRU-8520' : 'RLTP-TRU-8580'\n if (!introCardShapeOk(payload.card) || !(await diVerify(payload.card, payload.card.anchor, ctx.crypto.subtle))) return a.role === 'mediator' ? 'RLTP-TRU-8530' : 'RLTP-TRU-8590'\n return null\n}\n\nconst replyTask: TaskHandler<ReplyPayload, MediatorReplyPrep | RequesterReplyPrep> = {\n proof: 'absent',\n // on the tuple the act pinned, even one a chaining deactivated since (8270)\n pinned: true,\n decode: (p) => (introSchemaOk('visibility-payload-introduction-reply.schema.json', p) ? p as ReplyPayload : refuse('malformed')),\n async prepare (ctx, doc, arr) {\n const s = ctx.snapshot\n const r = doc.payload.introduction.body\n const at = arrival(s, arr.rkid)!\n const m = held(s, 'mediator', r.act)\n if (m && m.pins.target === at.label) {\n // step 2: on the pinned mediator↔target tuple; step 3: forwarded, window and cutoff\n if (m.status !== 'forwarded' && m.status !== 'completed') return refuse('validation-failed', 'RLTP-TRU-8490')\n // a held reply first: a differing one is rejected at any time (8250)\n if (m.reply) {\n if (jcs((m.reply as Doc).body) !== jcs(doc.payload.introduction.body)) return refuse('validation-failed', 'RLTP-TRU-8250')\n return { repeat: true, toRequester: null, vouchers: [] }\n }\n const issuedAt = (m.request as Doc).body.issuedAt as string\n if (!actWindowHolds(issuedAt, ctx.when) || !replyCutoffHolds(issuedAt, ctx.when)) return { repeat: true, toRequester: null, vouchers: [] } // 8180: dropped silently\n const bad = await replyChecks(ctx, m, doc.payload)\n if (bad) return refuse('validation-failed', bad)\n // the requester's relationship departed while the act ran: the reply is\n // taken (an authentic document on the pinned target tuple), the relay\n // ends as failed; nothing goes to a departed relationship\n if (!tupleByLabel(s, m.pins.requester!)) return { repeat: false, toRequester: null, vouchers: [], orphaned: true }\n // forward unchanged (8060) and both vouchers (8740)\n const toRequester = await onTuple(ctx, m.pins.requester!, INTRODUCTION_TYPES.reply, doc.payload, m.threads.request)\n const vouchers: Sealed[] = []\n const vb: VoucherBody = { type: 'introduction-voucher@1', act: r.act, requesterPair: (m.requestCard as Doc).anchor, targetPair: doc.payload.card.anchor }\n for (const [side, thread] of [[m.pins.requester!, m.threads.request], [m.pins.target!, m.threads.forward!]] as const) {\n const key = await pinKey(ctx, side, MAC_VOUCHER_INFO)\n if (!key) return refuse('validation-failed')\n vouchers.push(await onTuple(ctx, side, INTRODUCTION_TYPES.voucher, { voucher: await introMacArtifact(vb, key, ctx.crypto.subtle) }, thread))\n }\n return { repeat: false, toRequester, vouchers }\n }\n const q = held(s, 'requester', r.act)\n if (!q || q.pins.mediator !== at.label) return refuse('validation-failed', 'RLTP-TRU-8550')\n if (!actWindowHolds((q.request as Doc).body.issuedAt, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8550')\n if (q.reply) return jcs((q.reply as Doc).body) === jcs(doc.payload.introduction.body) ? { ignore: true } : refuse('validation-failed', 'RLTP-TRU-8260')\n // a late reply of a failed act is ignored (8350)\n if (requesterStatus(q, ctx.when) === 'failed') return { ignore: true }\n const bad = await replyChecks(ctx, q, doc.payload)\n return bad ? refuse('validation-failed', bad) : { ignore: false }\n },\n apply (state, prepared, doc, arr) {\n const r = doc.payload.introduction.body\n const p = prepared.value\n if ('vouchers' in p) {\n const m = held(state, 'mediator', r.act)!\n if (p.repeat) return { state: state as HolderState }\n if (p.orphaned) return { state: withAct(state as HolderState, { ...m, status: 'failed', reply: doc.payload.introduction as unknown as JsonObject, replyCard: doc.payload.card as JsonObject }) }\n const next = completedIfDone({ ...m, reply: doc.payload.introduction as unknown as JsonObject, replyCard: doc.payload.card as JsonObject, replyForwarded: true, vouchersSent: true })\n return { state: withAct(state as HolderState, next), outbound: [draft(p.toRequester!), ...p.vouchers.map(draft)] }\n }\n if (p.ignore) return { state: state as HolderState }\n const q = held(state, 'requester', r.act)!\n const opened = openIntroduced(state, q.ownLabel!, state.register.pairNonces[q.ownLabel!], rkidOf(state, q.ownLabel!), doc.payload.card, q.pins.mediator!, q.peerName, arr.when)\n let next: IntroAct = { ...q, status: 'completed', reply: doc.payload.introduction as unknown as JsonObject, replyCard: doc.payload.card as JsonObject }\n // the pending voucher, re-evaluated (8600, 8770)\n let st = opened.state\n if (q.pendingVoucher) {\n // matched it is accepted and retained; unmatched it vouches for nothing and goes\n next = voucherMatches(next, q.pendingVoucher as Doc)\n ? { ...next, pendingVoucher: null, voucher: q.pendingVoucher, vouched: true }\n : { ...next, pendingVoucher: null }\n if (next.vouched) st = markVouched(st, next)\n }\n return { state: withAct(st, next), events: opened.events, duties: opened.duties }\n },\n}\n\n/** The own key-agreement id a label derives under, from `addresses`. */\nfunction rkidOf (state: Readonly<HolderState>, label: string): string {\n for (const [rkid, k] of Object.entries(state.addresses.keys)) if (k.label === label) return rkid\n throw new Error(`introduction: no address key for ${label}`)\n}\n\n// ── the ack at the requester (8680) ────────────────────────────────────\n\nconst ackTask: TaskHandler<{ introduction: Artifact<AckBody> }, { ok: boolean }> = {\n proof: 'absent',\n // on the tuple the act pinned, even one a chaining deactivated since (8270)\n pinned: true,\n decode: (p) => (introSchemaOk('visibility-payload-introduction-ack.schema.json', p) ? p as { introduction: Artifact<AckBody> } : refuse('malformed')),\n async prepare (ctx, doc, arr) {\n const q = held(ctx.snapshot, 'requester', doc.payload.introduction.body.act)\n const at = arrival(ctx.snapshot, arr.rkid)!\n if (!q || q.pins.mediator !== at.label) return refuse('validation-failed', 'RLTP-TRU-8680')\n // after the absolute lifetime, whether or not tick ran (8300)\n if (lifetimeOver(q, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8300')\n const key = await pinKey(ctx, q.pins.mediator, MAC_ACK_INFO)\n if (!key || !(await introMacOk(doc.payload.introduction, key, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8680')\n return { ok: true }\n },\n // sent → acked; absorbed after completion (8330); ignored after failed (8710)\n apply (state, _p, doc, arr) {\n const q = held(state, 'requester', doc.payload.introduction.body.act)!\n if (requesterStatus(q, arr.when) !== 'sent') return { state: state as HolderState }\n return { state: withAct(state as HolderState, { ...q, status: 'acked' }) }\n },\n}\n\n// ── vouchers at both sides (8.5) ───────────────────────────────────────\n\nconst voucherMatches = (a: Readonly<IntroAct>, v: Doc): boolean => {\n const own = a.role === 'requester'\n const requesterPair = (a.requestCard as Doc).anchor\n const targetPair = (a.replyCard as Doc | null)?.anchor\n return v.body.requesterPair === requesterPair && targetPair !== undefined && v.body.targetPair === targetPair && (own || a.role === 'target')\n}\n\n/** The relationship the act made, marked as vouched by the mediator. */\nfunction markVouched (state: HolderState, a: Readonly<IntroAct>): HolderState {\n const at = a.ownLabel ? tupleByLabel(state, a.ownLabel) : null\n if (!at) return state\n const rel = at.rel\n return { ...state, relationships: { ...state.relationships, [rel.id]: { ...rel, memory: { ...rel.memory, vouchedBy: arrivalContact(state, a.pins.mediator!), vouchedPin: a.pins.mediator! } } } }\n}\n\nconst voucherTask: TaskHandler<{ voucher: Artifact<VoucherBody> }, { role: 'requester' | 'target' }> = {\n proof: 'absent',\n // on the tuple the act pinned, even one a chaining deactivated since (8270)\n pinned: true,\n decode: (p) => (introSchemaOk('visibility-payload-introduction-voucher.schema.json', p) ? p as { voucher: Artifact<VoucherBody> } : refuse('malformed')),\n async prepare (ctx, doc, arr) {\n const act = doc.payload.voucher.body.act\n const at = arrival(ctx.snapshot, arr.rkid)!\n const a = [held(ctx.snapshot, 'requester', act), held(ctx.snapshot, 'target', act)].find((x) => x && x.pins.mediator === at.label)\n // a held act within its lifetime, role-terminal states included (8760, 8290)\n if (!a || lifetimeOver(a, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8760')\n const key = await pinKey(ctx, a.pins.mediator!, MAC_VOUCHER_INFO)\n if (!key || !(await introMacOk(doc.payload.voucher, key, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8730')\n return { role: a.role as 'requester' | 'target' }\n },\n // 8260: a repeat is byte-identical in JCS(body) (8210) and ignored, a\n // differing one rejected — against the accepted voucher, retained until\n // the lifetime (8200), and against a pending one alike\n apply (state, prepared, doc) {\n const v = doc.payload.voucher as unknown as Doc\n const a = held(state, prepared.value.role, v.body.act)!\n const kept = (a.voucher ?? a.pendingVoucher) as Doc | null\n if (kept) return jcs(kept.body) === jcs(v.body) ? { state: state as HolderState } : refuse('validation-failed', 'RLTP-TRU-8260')\n if (a.reply === null) return { state: withAct(state as HolderState, { ...a, pendingVoucher: v as JsonObject }) } // 8770\n if (!voucherMatches(a, v)) return refuse('validation-failed', 'RLTP-TRU-8760')\n const next = { ...a, voucher: v as JsonObject, vouched: true }\n return { state: withAct(markVouched(state as HolderState, next), next) }\n },\n}\n\n// ── time: the transitions and the discard (8140, 8340, 8310) ───────────\n\nfunction retainActs (state: Readonly<HolderState>, when: Millis): HolderState {\n let out: Record<string, IntroAct> | null = null\n for (const a of Object.values(state.encounter.introductions)) {\n if (lifetimeOver(a, when)) {\n out ??= { ...state.encounter.introductions }\n delete out[a.key]\n continue\n }\n if (a.role === 'requester') {\n const st = requesterStatus(a, when)\n if (st !== a.status) (out ??= { ...state.encounter.introductions })[a.key] = { ...a, status: st }\n }\n }\n // offers leave with their prompt\n const offers = Object.values(state.encounter.offers).filter((o) => !Object.hasOwn(state.prompts, o.id))\n if (!out && !offers.length) return state as HolderState\n const kept = { ...state.encounter.offers }\n for (const o of offers) delete kept[o.id]\n return { ...state, encounter: { ...state.encounter, introductions: out ?? state.encounter.introductions, offers: kept } }\n}\n\n/** When retainActs changes something: a requester's timeout fires, an\n * act's absolute lifetime ends (the timer contract, engine.ts). */\nfunction actDeadlines (state: Readonly<HolderState>): Millis[] {\n const out: Millis[] = []\n for (const a of Object.values(state.encounter.introductions)) {\n out.push(actFiresAt(a.issuedAt + ACT_EXPIRY + ACT_SKEW))\n if (a.role === 'requester' && (a.status === 'sent' || a.status === 'acked')) out.push(actFiresAt(a.at + ACT_EXPIRY))\n }\n return out\n}\n\n/** The own rkids of every tuple a held act pinned (8270): a chaining\n * during the act deactivates such a tuple, but the act's artifacts stay\n * on it and verify under its key until the absolute lifetime (8290), when\n * retainActs discards the act and with it this claim. */\nfunction pinnedKeys (state: Readonly<HolderState>): string[] {\n const out = new Set<string>()\n for (const a of Object.values(state.encounter.introductions)) {\n for (const label of [a.pins.requester, a.pins.target, a.pins.mediator]) {\n const at = label === undefined ? null : tupleByLabel(state, label)\n if (at) out.add(at.tuple.rkid)\n }\n }\n return [...out]\n}\n\n/** The introduction module createHolder registers. */\nexport function introductionModule (): HolderModule {\n return Object.freeze({\n name: 'introduction',\n commands: Object.freeze({ [INTRODUCTION_COMMANDS.introduce]: introduceDef }),\n tasks: Object.freeze({\n [DECLARATION_TYPE]: declarationTask,\n [OFFER_TYPE]: offerTask,\n [INTRODUCTION_TYPES.request]: requestTask,\n [INTRODUCTION_TYPES.forward]: forwardTask,\n [INTRODUCTION_TYPES.reply]: replyTask,\n [INTRODUCTION_TYPES.ack]: ackTask,\n [INTRODUCTION_TYPES.voucher]: voucherTask,\n }),\n duties: Object.freeze({ 'intro-ack': ackDuty }),\n decisions: Object.freeze({ introduction: introductionDecision }),\n retain: retainActs,\n deadlines: actDeadlines,\n keepKeys: pinnedKeys,\n })\n}\n"]}
|
|
1
|
+
{"version":3,"file":"holder.js","sourceRoot":"","sources":["../../src/introduction/holder.ts"],"names":[],"mappings":"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","sourcesContent":["// introduction/holder — the Introduction Act on the holder (lib Stage 2,\n// PR 7a; Trust Layer 0.31 §8 on Delivery 0.81 §4.4). The pure forms are\n// the root module's (introduction.ts). Trust 0.31 §8 relays the act\n// through the mediator; no rendezvous drop is needed or built.\n//\n// The three roles, each its own lifecycle (8320), in\n// state.encounter.introductions under `<role>:<act>`:\n// requester holds an offer (below), decides on an `introduction`\n// prompt, sends introduction-request/0.1 on its pinned tuple\n// toward the mediator (8270), with a fresh pair label and card;\n// sent → acked (the ack) → completed (an accepted reply, 8.2);\n// sent or acked → failed at the act's expiry (8340), the\n// requester waiting for the ack and the reply alike until\n// then: users are mostly offline, a mediator not online\n// within ack-delay + act-skew would fail every introduction\n// (A20, spec follow-up 18: 8690's ack timeout is not applied);\n// the discard at the absolute lifetime as before (8310)\n// mediator received (checks 1–3 of 8410–8430, the ack duty bound),\n// forwarded (the target resolved, the byte-identical payload\n// on its tuple, 8440), completed once the ack is produced, the\n// reply forwarded and both vouchers sent (8360)\n// target received (a forward verified, 8050) → an `introduction`\n// prompt; consented (its reply sent) or refused (local, silent)\n// The new relationship: the requester opens its fresh tuple toward the\n// target's card on an accepted reply, the target toward the requester's\n// card at consent (Trust openTuple, provenance `introduced` via the\n// mediator's contact, 8790); the continuity probe follows on it. A\n// verified voucher marks the relationship's memory `vouchedBy`. Both name\n// the mediator with the own pair label toward it the act pinned\n// (provenance.viaPin, memory.vouchedPin), so a split of the mediator's\n// entry moves them with that relationship (2080).\n//\n// What it registers (introductionModule):\n// human acts introduction.introduce the mediator's act (below)\n// decision introduction: on an offer, accept sends the request; on a\n// forward, accept consents (the reply), decline refuses\n// tasks introduction-request/0.1, -forward/0.1, -reply/0.1\n// (signature class: signed acks), -ack/0.1, -voucher/0.1 (DV\n// class: MAC acks), registry-declaration/0.1 (proof\n// required) and x-introduction-offer/0.1 (this library's\n// form, proof required); every one on the tuple binding,\n// the active head of a live relationship (receive.ts, 6240),\n// except the reply, ack and voucher: `pinned`, on the tuple\n// the act pinned, deactivated or not (8270)\n// duty intro-ack/1: the mediator's one ack at t_received + ack-delay\n// retain time-driven transitions (8140: the first whole second after\n// the bound) and the discard at the absolute lifetime (8310)\n// keepKeys the own rkids of every pinned tuple of a held act: a\n// chaining mid-act deactivates it, tick keeps its key (8270,\n// 8290)\n//\n// Choices this file makes where spec and note leave them open:\n// - who starts: §8 has the requester mint the act and name the target by\n// the mediator's designator (8.3), but says nothing of how the\n// requester learns that designator. This library has the mediator's\n// act `introduce(requester, target, {label?})` (the human who knows\n// both) send the requester an\n// experimental, signed x-introduction-offer/0.1 with the designator and\n// at most a label the mediator's human typed in that act — never a\n// name read from the target's profile (audience: the mediator alone,\n// 6b) or card, and no provenance of the mediator↔target relationship —\n// with the mediator's registry declaration of ack-delay (Delivery §4.4:\n// a requester never sends without holding it). The requester's human\n// accepts on an `introduction` prompt, which sends the request. Gaps\n// for Trust 0.32: the designator's way to the requester (§8.3), and\n// the residue that the offer, signed, is transferable: the requester\n// can show a third party that the mediator offered it this designator\n// and label\n// - the designator: 32 fresh bytes, u-base64url, minted once per target\n// contact and kept (stable per (mediator, target), 8610); the target\n// verifies \"designates itself\" by the channel the forward arrives on,\n// the mediator's pinned tuple toward it — it cannot read the handle\n// - ack-delay: a library constant the mediator declares, PT30S (in\n// [PT1S, PT1H]), revision 1, identical to every counterpart\n// - acks of the documents: the request, forward and reply carry\n// transferable signatures and earn signed delivery-acks (Delivery 4.4's\n// class rule); the ack and voucher artifacts are DV and earn MAC acks\n// - the forward opens a fresh thread toward the target; the reply comes\n// on it and is forwarded on the request's thread; the ack and the\n// requester's voucher travel on the request's thread, the target's on\n// the forward's\n// - an artifact outside its window is refused at stage 8 from its own\n// bytes (8110), the offer by its document's issuedAt; a refusal by a role's lifecycle (a late reply of a\n// failed act, 8350; a reply after the cutoff, 8180) commits only the\n// document's acknowledgement: the act is unchanged\n// - the requester's profile in the request is its display name (the own\n// profile's, at most 64 characters, 8450); the cards carry no name\n// - the name of an introduced contact: at the target the request's\n// displayName, at the requester the offer's label; kept in the\n// relationship's memory as `introducedName`, which the views read until\n// a profile arrives (self-declared, Encounter 6120)\nimport { blockedRel } from '../message/holder.js'\nimport { iso, jcs } from '../core.js'\nimport type { Json, JsonObject } from '../core.js'\nimport { diSignWith, diVerify, digestBytes, digestDoc, xRawOfMk } from '../crypto.js'\nimport { seal } from '../delivery.js'\nimport { cardBody } from '../encounter.js'\nimport {\n ACT_EXPIRY, ACT_SKEW, DECLARATION_TYPE, INTRODUCTION_TYPES, MAC_ACK_INFO, MAC_VOUCHER_INFO, MEDIATOR_ROLE, actIdOf, designatorOf, designatorOk,\n introDigest, actFiresAt, introCardShapeOk, introMacKey, introSchemaOk, introMacArtifact, introMacOk, mediatorConstants, replyBound, replyCutoffHolds,\n requestCutoffHolds, requestFormOk, signIntroArtifact, actWindowHolds,\n} from '../introduction.js'\nimport type { AckBody, Artifact, ReplyBody, RequestBody, VoucherBody } from '../introduction.js'\nimport { b64uOf } from '../core.js'\nimport { tupleByRkid } from '../receive.js'\nimport type { TaskRefusal } from '../receive.js'\nimport type { Applied, CommandDef, DecisionDef, DutyHandler, EventDraft, HolderModule, OutboundDraft, PrepareCtx, Refusal, TaskHandler } from '../engine.js'\nimport type { Recipient } from '../ports.js'\nimport type { HolderState, IntroAct, IntroAckDuty, IntroOffer, Millis, Prompt } from '../state.js'\nimport { openTuple } from '../trust/continuity.js'\nimport { activeTuple, entryOf, findContact, liveRel, tupleByLabel } from '../trust/state.js'\nimport { idsOf } from '../encounter/ceremony.js'\nimport { withPairNonce } from '../identity-state.js'\nimport { tsec } from '../core.js'\n\nconst TT = 'https://real-life.org/trust-tasks/'\nexport const OFFER_TYPE = TT + 'x-introduction-offer/0.1'\nexport { DECLARATION_TYPE, INTRODUCTION_TYPES }\n\n/** The mediator's declared ack-delay (Delivery §4.4, Trust 8.4). */\nexport const ACK_DELAY = 'PT30S'\nexport const ACK_DELAY_MS = 30_000\n\nexport const INTRODUCTION_COMMANDS = Object.freeze({ introduce: 'introduction.introduce' })\nexport interface IntroduceInput { requesterId: string, targetId: string, label?: string }\n\nconst refuse = (reason: TaskRefusal['reason'], ref?: string): TaskRefusal => ({ ok: false, reason, ...(ref ? { ref } : {}) })\nconst no = (code: Refusal['code'], ref?: string): Refusal => ({ ok: false, code, ...(ref ? { ref } : {}) })\nconst isRefusal = (x: unknown): x is Refusal | TaskRefusal => (x as Refusal)?.ok === false\ntype Doc = Record<string, any>\nconst keyOf = (role: IntroAct['role'], act: string): string => `${role}:${act}`\nconst offerPromptId = (digest: string): string => 'intro-offer:' + digest\nconst consentPromptId = (act: string): string => 'intro:' + act\n\ninterface Sealed { digest: string, envelope: OutboundDraft['envelope'], threadId: string, type: string, recipient: Recipient }\nconst draft = (s: Sealed): OutboundDraft => ({ digest: s.digest, envelope: s.envelope, type: s.type, threadId: s.threadId, recipient: s.recipient })\n\n/** A document from an own pair label's anchor on a tuple, sealed to its counterpart. */\nasync function onTuple (ctx: PrepareCtx, label: string, type: string, payload: unknown, threadId: string, sign = false): Promise<Sealed> {\n const at = tupleByLabel(ctx.snapshot, label)\n if (!at) throw new Error(`introduction: no tuple ${label}`)\n const own = await ctx.keys.anchorOf(label)\n const issuedAt = iso(ctx.when)\n let doc: Doc = { id: ctx.entropy.id('doc.id'), type, issuer: own.anchor, recipient: at.tuple.counterpartAnchor, threadId, issuedAt, payload }\n if (sign) doc = await diSignWith(own.anchor, (b) => ctx.keys.sign(label, b), doc, issuedAt, ctx.crypto.subtle)\n const S = ctx.crypto.subtle\n return {\n digest: await digestDoc(doc, S),\n envelope: await seal(doc as Json, at.tuple.counterpartKeyAgreement, { ephSeed: ctx.entropy.bytes('seal.eph', 32), nonce: ctx.entropy.bytes('seal.nonce', 12) }, S),\n threadId, type,\n recipient: { contactId: entryOf(ctx.snapshot, at.rel)?.id ?? at.rel.contactId, rkid: at.tuple.rkid, keyAgreement: at.tuple.counterpartKeyAgreement },\n }\n}\n\n/** The MAC key of the pinned tuple `label` (8630, 8730). */\nasync function pinKey (ctx: PrepareCtx, label: string, info: string): Promise<Uint8Array | null> {\n const at = tupleByLabel(ctx.snapshot, label)\n const raw = at ? xRawOfMk(at.tuple.counterpartKeyAgreement) : null\n if (!at || !raw) return null\n const a = await ctx.keys.agree(at.tuple.rkid, raw, ctx.release)\n return a.status === 'available' ? introMacKey(a.shared, info, ctx.crypto.subtle) : null\n}\n\n/** The live active tuple toward a contact (8020: a pair relationship). */\nfunction channelTo (state: Readonly<HolderState>, contactId: string) {\n const c = findContact(state, contactId)\n if (!c) return null\n const ids = new Set([c.id, ...c.aliases])\n for (const id of c.relIds) {\n const r = state.relationships[id]\n const t = r && liveRel(r) ? activeTuple(r) : undefined\n if (t && !t.deactivated && ids.has(t.entryId)) return { contact: c, rel: r, tuple: t }\n }\n return null\n}\n\n/** The arrival tuple of a document, with the entry it feeds. */\nfunction arrival (state: Readonly<HolderState>, rkid: string) {\n const at = tupleByRkid(state, rkid)\n return at ? { label: at.tuple.ownPairLabel, contactId: entryOf(state, at.rel)?.id ?? at.rel.contactId, tuple: at.tuple, rel: at.rel } : null\n}\n\nconst withAct = (state: HolderState, a: IntroAct): HolderState =>\n ({ ...state, encounter: { ...state.encounter, introductions: { ...state.encounter.introductions, [a.key]: a } } })\n\nconst held = (state: Readonly<HolderState>, role: IntroAct['role'], act: string): IntroAct | undefined => state.encounter.introductions[keyOf(role, act)]\n\n/** The requester's status at `when` (8340, 8140): sent or acked, it fails\n * at the act's expiry, the first whole second after it, whether or not\n * tick ran; no ack timeout (A20, spec follow-up 18, against 8690). */\nfunction requesterStatus (a: Readonly<IntroAct>, when: Millis): IntroAct['status'] {\n if ((a.status === 'sent' || a.status === 'acked') && when >= actFiresAt(a.at + ACT_EXPIRY)) return 'failed'\n return a.status\n}\n\nconst lifetimeOver = (a: Readonly<IntroAct>, when: Millis): boolean => when >= actFiresAt(a.issuedAt + ACT_EXPIRY + ACT_SKEW)\n\n/** The mediator's completion (8360): ack produced, reply forwarded, vouchers sent. */\nconst completedIfDone = (a: IntroAct): IntroAct =>\n a.role === 'mediator' && a.ack !== null && a.replyForwarded && a.vouchersSent ? { ...a, status: 'completed' } : a\n\n/** The own profile name for the request's displayName (≤ 64, 8450). */\nconst displayNameOf = (state: Readonly<HolderState>): string | undefined => {\n const n = (state.profile.body as { name?: unknown } | null)?.name\n return typeof n === 'string' && n.length ? [...n].slice(0, 64).join('') : undefined\n}\n\n/** A fresh pair label and its displayed card, no challenge, no name (the\n * act's fresh anchor, 8010; an rltp-card/0.25 under Encounter's DI rules). */\nasync function freshCard (ctx: PrepareCtx): Promise<{ label: string, nonce: string, rkid: string, anchor: string, card: Doc }> {\n const n = ctx.entropy.bytes('founding.nonce', 32)\n const label = 'pair/' + await digestBytes(n, ctx.crypto.subtle)\n const me = await ctx.keys.anchorOf(label)\n const at = iso(ctx.when)\n const card = await diSignWith(me.anchor, (b) => ctx.keys.sign(label, b), cardBody(me) as unknown as Record<string, Json>, at, ctx.crypto.subtle)\n return { label, nonce: b64uOf(n), rkid: me.keyAgreement, anchor: me.anchor, card }\n}\n\n/** The fresh relationship of an act toward the counterpart's card, introduced via the mediator (8790). */\nfunction openIntroduced (state: Readonly<HolderState>, label: string, nonce: string | undefined, rkid: string, card: Doc, viaPin: string, name: string | undefined, when: Millis): Applied {\n const ids = idsOf(label)\n const opened = openTuple(state, {\n relId: ids.relId, contactId: ids.contactId, ownPairLabel: label, counterpartAnchor: card.anchor, counterpartKeyAgreement: card.keyAgreement,\n provenance: { kind: 'introduced', via: arrivalContact(state, viaPin), viaPin }, ...(nonce !== undefined ? { nonce } : {}),\n }, rkid, when)\n if (name === undefined) return opened\n const rel = opened.state.relationships[ids.relId]\n return { ...opened, state: { ...opened.state, relationships: { ...opened.state.relationships, [ids.relId]: { ...rel, memory: { ...rel.memory, introducedName: name } } } } }\n}\n\n// ── the mediator's act ─────────────────────────────────────────────────\n\ntype IntroducePrep = Refusal | { designator: string, minted: boolean, offer: Sealed, declaration: Sealed }\n\nconst introduceDef: CommandDef<IntroduceInput, IntroducePrep> = {\n human: true,\n async prepare (ctx, input) {\n const s = ctx.snapshot\n const r = channelTo(s, input?.requesterId), t = channelTo(s, input?.targetId)\n if (!r || !t) return no('no-own-channel', 'RLTP-TRU-8020')\n if (r.contact.id === t.contact.id) return no('unknown-contact')\n // no act whose requester or target relationship is blocked (Message Tasks 6410)\n if (blockedRel(s, r.rel.id) || blockedRel(s, t.rel.id)) return no('blocked', 'RLTP-MSG-6410')\n const held = Object.entries(s.encounter.designators).find(([, c]) => c === t.contact.id)?.[0]\n const designator = held ?? designatorOf(ctx.entropy.bytes('intro.target', 32))\n const label = input.label\n if (label !== undefined && (typeof label !== 'string' || !label.length || [...label].length > 64)) throw new TypeError('introduction.introduce: label is 1 to 64 characters')\n const declaration = await onTuple(ctx, r.tuple.ownPairLabel, DECLARATION_TYPE,\n { declaration: { role: MEDIATOR_ROLE, revision: '1', constants: { 'ack-delay': ACK_DELAY } } }, ctx.entropy.id('thread.id'), true)\n const offer = await onTuple(ctx, r.tuple.ownPairLabel, OFFER_TYPE,\n { target: designator, ...(label !== undefined ? { label } : {}) }, ctx.entropy.id('thread.id'), true)\n return { designator, minted: held === undefined, offer, declaration }\n },\n apply (state, prepared, input) {\n const p = prepared.value\n if (isRefusal(p)) return p\n const designators = p.minted ? { ...state.encounter.designators, [p.designator]: findContact(state, input.targetId)!.id } : state.encounter.designators\n return { state: { ...state, encounter: { ...state.encounter, designators } }, outbound: [draft(p.declaration), draft(p.offer)] }\n },\n}\n\n// ── the registry declaration (Delivery §4.4) ───────────────────────────\n\nconst declarationTask: TaskHandler<Doc, null> = {\n proof: 'required',\n decode: (p) => (introSchemaOk('payload-registry-declaration.schema.json', p) ? p as Doc : refuse('malformed')),\n async prepare (ctx, doc) {\n if (!(await diVerify(doc, doc.issuer, ctx.crypto.subtle))) return refuse('validation-failed')\n const d = doc.payload.declaration\n // the registering specification closes names and domains: only the mediator role is known here\n if (d.role !== MEDIATOR_ROLE || mediatorConstants(d.constants) === null) return refuse('validation-failed')\n return null\n },\n // the generic revision rule: higher wins, equal and identical is\n // idempotent, equal and different or lower is refused\n apply (state, _p, doc, arr) {\n const d = doc.payload.declaration\n const k = `${doc.issuer} ${d.role}`\n const h = state.encounter.declarations[k]\n if (h) {\n const cmp = BigInt(d.revision) - BigInt(h.revision)\n if (cmp < 0n) return refuse('validation-failed')\n if (cmp === 0n) return jcs(h.constants) === jcs(d.constants) ? { state: state as HolderState } : refuse('validation-failed')\n }\n return { state: { ...state, encounter: { ...state.encounter, declarations: { ...state.encounter.declarations, [k]: { issuer: doc.issuer, role: d.role, revision: d.revision, constants: d.constants, at: arr.when } } } } }\n },\n}\n\n// ── the offer at the requester (this library's form) ───────────────────\n\nconst offerTask: TaskHandler<Doc, null> = {\n proof: 'required',\n decode (p) {\n const x = p as Record<string, unknown>\n if (x === null || typeof x !== 'object' || !designatorOk(x.target) ||\n (x.label !== undefined && (typeof x.label !== 'string' || !x.label.length || [...x.label].length > 64)) || Object.keys(x).some((k) => !['target', 'label'].includes(k))) return refuse('malformed')\n return x as Doc\n },\n async prepare (ctx, doc) {\n // the act window, like the request's and the forward's (8110): a replay\n // after the effect cache let the offer go opens no prompt again\n if (!actWindowHolds(doc.issuedAt, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8110')\n return (await diVerify(doc, doc.issuer, ctx.crypto.subtle)) ? null : refuse('validation-failed')\n },\n apply (state, _p, doc, arr) {\n const a = arrival(state, arr.rkid)!\n const o: IntroOffer = {\n id: offerPromptId(arr.digest), mediatorContactId: a.contactId, pin: a.label, target: doc.payload.target,\n ...(doc.payload.label !== undefined ? { label: doc.payload.label } : {}), at: arr.when,\n }\n const prompt: Prompt = { id: o.id, kind: 'introduction', contactId: a.contactId, openedAt: arr.when, expiresAt: arr.when + ACT_EXPIRY }\n return {\n state: { ...state, encounter: { ...state.encounter, offers: { ...state.encounter.offers, [o.id]: o } }, prompts: { ...state.prompts, [prompt.id]: prompt } },\n events: [{ type: 'prompt.opened', promptId: prompt.id, kind: 'introduction' }],\n }\n },\n}\n\n// ── the request: the requester's decision on an offer ──────────────────\n\ninterface RequestPrep { act: string, fresh: Awaited<ReturnType<typeof freshCard>>, request: Artifact<RequestBody>, doc: Sealed, ackDelayMs: number }\n\nasync function prepareRequest (ctx: PrepareCtx, o: Readonly<IntroOffer>): Promise<RequestPrep | Refusal> {\n const pin = tupleByLabel(ctx.snapshot, o.pin)\n if (!pin || pin.tuple.deactivated) return no('no-own-channel', 'RLTP-TRU-8270')\n // no act whose mediator relationship is blocked (Message Tasks 6410)\n if (blockedRel(ctx.snapshot, pin.rel.id)) return no('blocked', 'RLTP-MSG-6410')\n // Delivery §4.4: never a request to a mediator whose declaration is not held\n const dec = ctx.snapshot.encounter.declarations[`${pin.tuple.counterpartAnchor} ${MEDIATOR_ROLE}`]\n const c = dec ? mediatorConstants(dec.constants) : null\n if (!c) return no('no-declaration')\n const fresh = await freshCard(ctx)\n const act = actIdOf(ctx.entropy.bytes('intro.act', 32))\n const name = displayNameOf(ctx.snapshot)\n const body: RequestBody = {\n type: 'introduction-request@1', act, issuedAt: iso(ctx.when), target: o.target,\n cardDigest: await introDigest(fresh.card, ctx.crypto.subtle), profile: name !== undefined ? { displayName: name } : {},\n }\n const request = await signIntroArtifact(body, (b) => ctx.keys.sign(fresh.label, b))\n const doc = await onTuple(ctx, o.pin, INTRODUCTION_TYPES.request, { introduction: request, card: fresh.card }, ctx.entropy.id('thread.id'))\n return { act, fresh, request, doc, ackDelayMs: c.ackDelayMs }\n}\n\nfunction applyRequest (state: Readonly<HolderState>, o: Readonly<IntroOffer>, p: RequestPrep, when: Millis): Applied | Refusal {\n if (held(state, 'requester', p.act)) throw new Error('introduction: the act id is not fresh (8080)')\n if (state.register.labels.includes(p.fresh.label)) throw new Error('introduction: the pair label is not fresh')\n const a: IntroAct = {\n key: keyOf('requester', p.act), act: p.act, role: 'requester', status: 'sent', issuedAt: tsec(when), request: p.request as unknown as JsonObject,\n requestCard: p.fresh.card as JsonObject, reply: null, replyCard: null, pins: { mediator: o.pin }, threads: { request: p.doc.threadId },\n at: when, ackDelayMs: p.ackDelayMs, ownLabel: p.fresh.label, ack: null, replyForwarded: false, vouchersSent: false,\n pendingVoucher: null, voucher: null, vouched: false, promptId: null, ...(o.label !== undefined ? { peerName: o.label } : {}),\n }\n const offers = { ...state.encounter.offers }\n delete offers[o.id]\n const next: HolderState = {\n ...state,\n // the act's fresh label in the register before its card is shown (Identity 6.1)\n register: withPairNonce(state.register, p.fresh.label, p.fresh.nonce),\n addresses: { ...state.addresses, keys: { ...state.addresses.keys, [p.fresh.rkid]: { label: p.fresh.label, lastShown: when } } },\n encounter: { ...state.encounter, offers },\n }\n return { state: withAct(next, a), outbound: [draft(p.doc)] }\n}\n\n// ── the mediator: the request (8410–8440) ──────────────────────────────\n\ninterface RequestPayload { introduction: Artifact<RequestBody>, card: Doc }\ntype MediatorPrep = { dup: 'same' | 'none', forward: Sealed | null, target: string | null, ack: Sealed | null }\n\nconst requestTask: TaskHandler<RequestPayload, MediatorPrep> = {\n proof: 'absent',\n decode: (p) => (introSchemaOk('visibility-payload-introduction-request.schema.json', p) ? p as RequestPayload : refuse('malformed')),\n async prepare (ctx, doc, arr) {\n const s = ctx.snapshot\n const a = arrival(s, arr.rkid)!\n const body = doc.payload.introduction.body\n // step 1: an active channel (the pin set at arrival)\n if (!liveRel(a.rel) || a.tuple.deactivated || a.rel.activeHead !== a.label) return refuse('validation-failed', 'RLTP-TRU-8410')\n // step 2: form — schema (decode), digest, signature, the window, the ack cutoff\n if (!introCardShapeOk(doc.payload.card) || !(await diVerify(doc.payload.card, doc.payload.card.anchor, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8420')\n if (!(await requestFormOk(doc.payload, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8420')\n if (!actWindowHolds(body.issuedAt, ctx.when) || !requestCutoffHolds(body.issuedAt, ctx.when, ACK_DELAY_MS)) return refuse('validation-failed', 'RLTP-TRU-8160')\n const h = held(s, 'mediator', body.act)\n if (h) {\n if (jcs((h.request as Doc).body) !== jcs(doc.payload.introduction.body)) return refuse('validation-failed', 'RLTP-TRU-8240')\n // a byte-identical repeat: the one ack value, once produced (8220, 8230)\n const ack = h.ack ? await onTuple(ctx, a.label, INTRODUCTION_TYPES.ack, { introduction: h.ack }, h.threads.request) : null\n return { dup: 'same', forward: null, target: null, ack }\n }\n // step 4: resolution, for forwarding only and silently (8440)\n const targetId = s.encounter.designators[body.target]\n const t = targetId !== undefined ? channelTo(s, targetId) : null\n const forward = t && t.tuple.ownPairLabel !== a.label\n ? await onTuple(ctx, t.tuple.ownPairLabel, INTRODUCTION_TYPES.forward, doc.payload, ctx.entropy.id('thread.id'))\n : null\n return { dup: 'none', forward, target: forward ? t!.tuple.ownPairLabel : null, ack: null }\n },\n // step 3: received, the ack duty bound before and independent of resolution (8430)\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n if (p.dup === 'same') return { state: state as HolderState, outbound: p.ack ? [draft(p.ack)] : [] }\n const a = arrival(state, arr.rkid)!\n const body = doc.payload.introduction.body\n const act: IntroAct = {\n key: keyOf('mediator', body.act), act: body.act, role: 'mediator', status: p.forward ? 'forwarded' : 'received',\n issuedAt: Date.parse(body.issuedAt), request: doc.payload.introduction as unknown as JsonObject, requestCard: doc.payload.card as JsonObject,\n reply: null, replyCard: null, pins: { requester: a.label, ...(p.target ? { target: p.target } : {}) },\n threads: { request: doc.threadId, ...(p.forward ? { forward: p.forward.threadId } : {}) }, at: arr.when, ackDelayMs: ACK_DELAY_MS,\n ownLabel: null, ack: null, replyForwarded: false, vouchersSent: false, pendingVoucher: null, voucher: null, vouched: false, promptId: null,\n }\n const duty: IntroAckDuty = { kind: 'intro-ack', v: 1, id: 'intro-ack:' + body.act, dueAt: arr.when + ACK_DELAY_MS, act: body.act }\n return { state: withAct(state as HolderState, act), duties: [duty], outbound: p.forward ? [draft(p.forward)] : [] }\n },\n}\n\n/** The mediator's one ack, at t_received + ack-delay (8640), identical for\n * every target (8650); none after the absolute lifetime (8280). */\nconst ackDuty: DutyHandler<{ sealed: Sealed, ack: Json } | null> = {\n v: 1,\n async prepare (ctx, duty) {\n const a = held(ctx.snapshot, 'mediator', (duty as IntroAckDuty).act)\n if (!a || a.ack || lifetimeOver(a, ctx.when) || !a.pins.requester) return null\n const key = await pinKey(ctx, a.pins.requester, MAC_ACK_INFO)\n if (!key) return null\n const ack = await introMacArtifact<AckBody>({ type: 'introduction-ack@1', act: a.act }, key, ctx.crypto.subtle)\n return { sealed: await onTuple(ctx, a.pins.requester, INTRODUCTION_TYPES.ack, { introduction: ack }, a.threads.request), ack: ack as unknown as JsonObject }\n },\n apply (state, duty, ctx, when) {\n const a = held(state, 'mediator', (duty as IntroAckDuty).act)\n const p = ctx.prepared.value\n // past the lifetime, or the pinned key gone: the duty ends without production (8280)\n if (!a || a.ack || lifetimeOver(a, when) || p === null) return { state: state as HolderState }\n // the ack value as produced, retained for re-delivery (8200, 8230)\n return { state: withAct(state as HolderState, completedIfDone({ ...a, ack: p.ack as JsonObject })), outbound: [draft(p.sealed)] }\n },\n}\n\n// ── the target: the forward (8050) and its consent ─────────────────────\n\nconst forwardTask: TaskHandler<RequestPayload, { known: boolean }> = {\n proof: 'absent',\n decode: (p) => (introSchemaOk('visibility-payload-introduction-forward.schema.json', p) ? p as RequestPayload : refuse('malformed')),\n async prepare (ctx, doc) {\n const body = doc.payload.introduction.body\n if (!actWindowHolds(body.issuedAt, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8110')\n const h = held(ctx.snapshot, 'target', body.act)\n if (h) return jcs((h.request as Doc).body) === jcs(doc.payload.introduction.body) ? { known: true } : refuse('validation-failed', 'RLTP-TRU-8260')\n // the request signature under the card's anchor, cardDigest, the card (8050)\n if (!(await requestFormOk(doc.payload, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8050')\n if (!introCardShapeOk(doc.payload.card) || !(await diVerify(doc.payload.card, doc.payload.card.anchor, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8050')\n return { known: false }\n },\n // received: the pin at the forward's arrival (8270); the human decides\n // on its own device (8810); \"designates itself\" is the channel it came on\n apply (state, prepared, doc, arr) {\n if (prepared.value.known) return { state: state as HolderState }\n const a = arrival(state, arr.rkid)!\n const body = doc.payload.introduction.body\n const promptId = consentPromptId(body.act)\n const act: IntroAct = {\n key: keyOf('target', body.act), act: body.act, role: 'target', status: 'received', issuedAt: Date.parse(body.issuedAt),\n request: doc.payload.introduction as unknown as JsonObject, requestCard: doc.payload.card as JsonObject, reply: null, replyCard: null,\n pins: { mediator: a.label }, threads: { request: '', forward: doc.threadId }, at: arr.when, ackDelayMs: 0, ownLabel: null, ack: null,\n replyForwarded: false, vouchersSent: false, pendingVoucher: null, voucher: null, vouched: false, promptId,\n }\n const prompt: Prompt = { id: promptId, kind: 'introduction', contactId: a.contactId, openedAt: arr.when, expiresAt: actFiresAt(act.issuedAt + ACT_EXPIRY + ACT_SKEW) }\n return {\n state: { ...withAct(state as HolderState, act), prompts: { ...state.prompts, [promptId]: prompt } },\n events: [{ type: 'prompt.opened', promptId, kind: 'introduction' }],\n }\n },\n}\n\ninterface ReplyPrep { fresh: Awaited<ReturnType<typeof freshCard>>, reply: Artifact<ReplyBody>, doc: Sealed }\n\nasync function prepareReply (ctx: PrepareCtx, a: Readonly<IntroAct>): Promise<ReplyPrep | Refusal> {\n if (!a.pins.mediator || !tupleByLabel(ctx.snapshot, a.pins.mediator)) return no('no-own-channel', 'RLTP-TRU-8270')\n const fresh = await freshCard(ctx)\n const S = ctx.crypto.subtle\n const request = a.request as unknown as Artifact<RequestBody>\n const body: ReplyBody = {\n type: 'introduction-reply@1', act: a.act, requestDigest: await introDigest(request.body, S),\n requesterPair: (a.requestCard as Doc).anchor, cardDigest: await introDigest(fresh.card, S),\n }\n const reply = await signIntroArtifact(body, (b) => ctx.keys.sign(fresh.label, b))\n const doc = await onTuple(ctx, a.pins.mediator, INTRODUCTION_TYPES.reply, { introduction: reply, card: fresh.card }, a.threads.forward!)\n return { fresh, reply, doc }\n}\n\n/** The target consents: its reply out, its fresh tuple toward the requester's card (8380). */\nfunction applyConsent (state: Readonly<HolderState>, a: Readonly<IntroAct>, p: ReplyPrep, when: Millis): Applied | Refusal {\n if (a.status !== 'received') return no('unknown-act')\n if (lifetimeOver(a, when)) return no('prompt-expired', 'RLTP-TRU-8280')\n const name = ((a.request as Doc).body.profile as { displayName?: string }).displayName\n const opened = openIntroduced(state, p.fresh.label, p.fresh.nonce, p.fresh.rkid, a.requestCard as Doc, a.pins.mediator!, name, when)\n const next: IntroAct = { ...a, status: 'consented', reply: p.reply as unknown as JsonObject, replyCard: p.fresh.card as JsonObject, ownLabel: p.fresh.label }\n return { state: withAct(opened.state, next), outbound: [draft(p.doc)], events: opened.events, duties: opened.duties }\n}\n\nconst arrivalContact = (state: Readonly<HolderState>, label: string): string => {\n const at = tupleByLabel(state, label)\n return at ? (entryOf(state, at.rel)?.id ?? at.rel.contactId) : ''\n}\n\n/** introduction: on an offer, accept sends the request; on a forward,\n * accept consents and decline refuses, locally and silently (8380). */\nconst introductionDecision: DecisionDef<RequestPrep | ReplyPrep | Refusal | null> = {\n async prepare (ctx, prompt, choice) {\n if (choice !== 'accept') return null\n const o = ctx.snapshot.encounter.offers[prompt.id]\n if (o) return prepareRequest(ctx, o)\n const a = Object.values(ctx.snapshot.encounter.introductions).find((x) => x.promptId === prompt.id && x.role === 'target')\n return a ? prepareReply(ctx, a) : no('unknown-act')\n },\n apply (state, prompt, choice, when, prepared) {\n const o = state.encounter.offers[prompt.id]\n const a = Object.values(state.encounter.introductions).find((x) => x.promptId === prompt.id && x.role === 'target')\n if (choice === 'decline') {\n if (o) {\n const offers = { ...state.encounter.offers }\n delete offers[o.id]\n return { state: { ...state, encounter: { ...state.encounter, offers } } }\n }\n return a ? { state: withAct(state as HolderState, { ...a, status: 'refused' }) } : { state: state as HolderState }\n }\n const p = prepared.value\n if (p === null || isRefusal(p)) return p ?? no('unknown-act')\n if (o) return applyRequest(state, o, p as RequestPrep, when)\n return a ? applyConsent(state, a, p as ReplyPrep, when) : no('unknown-act')\n },\n}\n\n// ── the reply at the mediator (8480–8540) and at the requester (8550–8600) ─\n\ninterface ReplyPayload { introduction: Artifact<ReplyBody>, card: Doc }\ntype MediatorReplyPrep = { repeat: boolean, toRequester: Sealed | null, vouchers: Sealed[], orphaned?: true }\ntype RequesterReplyPrep = { ignore: boolean }\n\nconst replyChecks = async (ctx: PrepareCtx, a: Readonly<IntroAct>, payload: ReplyPayload): Promise<string | null> => {\n const r = payload.introduction.body\n if (!(await replyBound(payload, ctx.crypto.subtle))) return a.role === 'mediator' ? 'RLTP-TRU-8500' : 'RLTP-TRU-8560'\n if (r.requestDigest !== await introDigest((a.request as Doc).body, ctx.crypto.subtle)) return a.role === 'mediator' ? 'RLTP-TRU-8510' : 'RLTP-TRU-8570'\n if (r.requesterPair !== (a.requestCard as Doc).anchor) return a.role === 'mediator' ? 'RLTP-TRU-8520' : 'RLTP-TRU-8580'\n if (!introCardShapeOk(payload.card) || !(await diVerify(payload.card, payload.card.anchor, ctx.crypto.subtle))) return a.role === 'mediator' ? 'RLTP-TRU-8530' : 'RLTP-TRU-8590'\n return null\n}\n\nconst replyTask: TaskHandler<ReplyPayload, MediatorReplyPrep | RequesterReplyPrep> = {\n proof: 'absent',\n // on the tuple the act pinned, even one a chaining deactivated since (8270)\n pinned: true,\n decode: (p) => (introSchemaOk('visibility-payload-introduction-reply.schema.json', p) ? p as ReplyPayload : refuse('malformed')),\n async prepare (ctx, doc, arr) {\n const s = ctx.snapshot\n const r = doc.payload.introduction.body\n const at = arrival(s, arr.rkid)!\n const m = held(s, 'mediator', r.act)\n if (m && m.pins.target === at.label) {\n // step 2: on the pinned mediator↔target tuple; step 3: forwarded, window and cutoff\n if (m.status !== 'forwarded' && m.status !== 'completed') return refuse('validation-failed', 'RLTP-TRU-8490')\n // a held reply first: a differing one is rejected at any time (8250)\n if (m.reply) {\n if (jcs((m.reply as Doc).body) !== jcs(doc.payload.introduction.body)) return refuse('validation-failed', 'RLTP-TRU-8250')\n return { repeat: true, toRequester: null, vouchers: [] }\n }\n const issuedAt = (m.request as Doc).body.issuedAt as string\n if (!actWindowHolds(issuedAt, ctx.when) || !replyCutoffHolds(issuedAt, ctx.when)) return { repeat: true, toRequester: null, vouchers: [] } // 8180: dropped silently\n const bad = await replyChecks(ctx, m, doc.payload)\n if (bad) return refuse('validation-failed', bad)\n // the requester's relationship departed while the act ran: the reply is\n // taken (an authentic document on the pinned target tuple), the relay\n // ends as failed; nothing goes to a departed relationship\n if (!tupleByLabel(s, m.pins.requester!)) return { repeat: false, toRequester: null, vouchers: [], orphaned: true }\n // forward unchanged (8060) and both vouchers (8740)\n const toRequester = await onTuple(ctx, m.pins.requester!, INTRODUCTION_TYPES.reply, doc.payload, m.threads.request)\n const vouchers: Sealed[] = []\n const vb: VoucherBody = { type: 'introduction-voucher@1', act: r.act, requesterPair: (m.requestCard as Doc).anchor, targetPair: doc.payload.card.anchor }\n for (const [side, thread] of [[m.pins.requester!, m.threads.request], [m.pins.target!, m.threads.forward!]] as const) {\n const key = await pinKey(ctx, side, MAC_VOUCHER_INFO)\n if (!key) return refuse('validation-failed')\n vouchers.push(await onTuple(ctx, side, INTRODUCTION_TYPES.voucher, { voucher: await introMacArtifact(vb, key, ctx.crypto.subtle) }, thread))\n }\n return { repeat: false, toRequester, vouchers }\n }\n const q = held(s, 'requester', r.act)\n if (!q || q.pins.mediator !== at.label) return refuse('validation-failed', 'RLTP-TRU-8550')\n if (!actWindowHolds((q.request as Doc).body.issuedAt, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8550')\n if (q.reply) return jcs((q.reply as Doc).body) === jcs(doc.payload.introduction.body) ? { ignore: true } : refuse('validation-failed', 'RLTP-TRU-8260')\n // a late reply of a failed act is ignored (8350)\n if (requesterStatus(q, ctx.when) === 'failed') return { ignore: true }\n const bad = await replyChecks(ctx, q, doc.payload)\n return bad ? refuse('validation-failed', bad) : { ignore: false }\n },\n apply (state, prepared, doc, arr) {\n const r = doc.payload.introduction.body\n const p = prepared.value\n if ('vouchers' in p) {\n const m = held(state, 'mediator', r.act)!\n if (p.repeat) return { state: state as HolderState }\n if (p.orphaned) return { state: withAct(state as HolderState, { ...m, status: 'failed', reply: doc.payload.introduction as unknown as JsonObject, replyCard: doc.payload.card as JsonObject }) }\n const next = completedIfDone({ ...m, reply: doc.payload.introduction as unknown as JsonObject, replyCard: doc.payload.card as JsonObject, replyForwarded: true, vouchersSent: true })\n return { state: withAct(state as HolderState, next), outbound: [draft(p.toRequester!), ...p.vouchers.map(draft)] }\n }\n if (p.ignore) return { state: state as HolderState }\n const q = held(state, 'requester', r.act)!\n const opened = openIntroduced(state, q.ownLabel!, state.register.pairNonces[q.ownLabel!], rkidOf(state, q.ownLabel!), doc.payload.card, q.pins.mediator!, q.peerName, arr.when)\n let next: IntroAct = { ...q, status: 'completed', reply: doc.payload.introduction as unknown as JsonObject, replyCard: doc.payload.card as JsonObject }\n // the pending voucher, re-evaluated (8600, 8770)\n let st = opened.state\n if (q.pendingVoucher) {\n // matched it is accepted and retained; unmatched it vouches for nothing and goes\n next = voucherMatches(next, q.pendingVoucher as Doc)\n ? { ...next, pendingVoucher: null, voucher: q.pendingVoucher, vouched: true }\n : { ...next, pendingVoucher: null }\n if (next.vouched) st = markVouched(st, next)\n }\n return { state: withAct(st, next), events: opened.events, duties: opened.duties }\n },\n}\n\n/** The own key-agreement id a label derives under, from `addresses`. */\nfunction rkidOf (state: Readonly<HolderState>, label: string): string {\n for (const [rkid, k] of Object.entries(state.addresses.keys)) if (k.label === label) return rkid\n throw new Error(`introduction: no address key for ${label}`)\n}\n\n// ── the ack at the requester (8680) ────────────────────────────────────\n\nconst ackTask: TaskHandler<{ introduction: Artifact<AckBody> }, { ok: boolean }> = {\n proof: 'absent',\n // on the tuple the act pinned, even one a chaining deactivated since (8270)\n pinned: true,\n decode: (p) => (introSchemaOk('visibility-payload-introduction-ack.schema.json', p) ? p as { introduction: Artifact<AckBody> } : refuse('malformed')),\n async prepare (ctx, doc, arr) {\n const q = held(ctx.snapshot, 'requester', doc.payload.introduction.body.act)\n const at = arrival(ctx.snapshot, arr.rkid)!\n if (!q || q.pins.mediator !== at.label) return refuse('validation-failed', 'RLTP-TRU-8680')\n // after the absolute lifetime, whether or not tick ran (8300)\n if (lifetimeOver(q, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8300')\n const key = await pinKey(ctx, q.pins.mediator, MAC_ACK_INFO)\n if (!key || !(await introMacOk(doc.payload.introduction, key, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8680')\n return { ok: true }\n },\n // sent → acked; absorbed after completion (8330); ignored after failed (8710)\n apply (state, _p, doc, arr) {\n const q = held(state, 'requester', doc.payload.introduction.body.act)!\n if (requesterStatus(q, arr.when) !== 'sent') return { state: state as HolderState }\n return { state: withAct(state as HolderState, { ...q, status: 'acked' }) }\n },\n}\n\n// ── vouchers at both sides (8.5) ───────────────────────────────────────\n\nconst voucherMatches = (a: Readonly<IntroAct>, v: Doc): boolean => {\n const own = a.role === 'requester'\n const requesterPair = (a.requestCard as Doc).anchor\n const targetPair = (a.replyCard as Doc | null)?.anchor\n return v.body.requesterPair === requesterPair && targetPair !== undefined && v.body.targetPair === targetPair && (own || a.role === 'target')\n}\n\n/** The relationship the act made, marked as vouched by the mediator. */\nfunction markVouched (state: HolderState, a: Readonly<IntroAct>): HolderState {\n const at = a.ownLabel ? tupleByLabel(state, a.ownLabel) : null\n if (!at) return state\n const rel = at.rel\n return { ...state, relationships: { ...state.relationships, [rel.id]: { ...rel, memory: { ...rel.memory, vouchedBy: arrivalContact(state, a.pins.mediator!), vouchedPin: a.pins.mediator! } } } }\n}\n\nconst voucherTask: TaskHandler<{ voucher: Artifact<VoucherBody> }, { role: 'requester' | 'target' }> = {\n proof: 'absent',\n // on the tuple the act pinned, even one a chaining deactivated since (8270)\n pinned: true,\n decode: (p) => (introSchemaOk('visibility-payload-introduction-voucher.schema.json', p) ? p as { voucher: Artifact<VoucherBody> } : refuse('malformed')),\n async prepare (ctx, doc, arr) {\n const act = doc.payload.voucher.body.act\n const at = arrival(ctx.snapshot, arr.rkid)!\n const a = [held(ctx.snapshot, 'requester', act), held(ctx.snapshot, 'target', act)].find((x) => x && x.pins.mediator === at.label)\n // a held act within its lifetime, role-terminal states included (8760, 8290)\n if (!a || lifetimeOver(a, ctx.when)) return refuse('validation-failed', 'RLTP-TRU-8760')\n const key = await pinKey(ctx, a.pins.mediator!, MAC_VOUCHER_INFO)\n if (!key || !(await introMacOk(doc.payload.voucher, key, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-TRU-8730')\n return { role: a.role as 'requester' | 'target' }\n },\n // 8260: a repeat is byte-identical in JCS(body) (8210) and ignored, a\n // differing one rejected — against the accepted voucher, retained until\n // the lifetime (8200), and against a pending one alike\n apply (state, prepared, doc) {\n const v = doc.payload.voucher as unknown as Doc\n const a = held(state, prepared.value.role, v.body.act)!\n const kept = (a.voucher ?? a.pendingVoucher) as Doc | null\n if (kept) return jcs(kept.body) === jcs(v.body) ? { state: state as HolderState } : refuse('validation-failed', 'RLTP-TRU-8260')\n if (a.reply === null) return { state: withAct(state as HolderState, { ...a, pendingVoucher: v as JsonObject }) } // 8770\n if (!voucherMatches(a, v)) return refuse('validation-failed', 'RLTP-TRU-8760')\n const next = { ...a, voucher: v as JsonObject, vouched: true }\n return { state: withAct(markVouched(state as HolderState, next), next) }\n },\n}\n\n// ── time: the transitions and the discard (8140, 8340, 8310) ───────────\n\nfunction retainActs (state: Readonly<HolderState>, when: Millis): HolderState {\n let out: Record<string, IntroAct> | null = null\n for (const a of Object.values(state.encounter.introductions)) {\n if (lifetimeOver(a, when)) {\n out ??= { ...state.encounter.introductions }\n delete out[a.key]\n continue\n }\n if (a.role === 'requester') {\n const st = requesterStatus(a, when)\n if (st !== a.status) (out ??= { ...state.encounter.introductions })[a.key] = { ...a, status: st }\n }\n }\n // offers leave with their prompt\n const offers = Object.values(state.encounter.offers).filter((o) => !Object.hasOwn(state.prompts, o.id))\n if (!out && !offers.length) return state as HolderState\n const kept = { ...state.encounter.offers }\n for (const o of offers) delete kept[o.id]\n return { ...state, encounter: { ...state.encounter, introductions: out ?? state.encounter.introductions, offers: kept } }\n}\n\n/** When retainActs changes something: a requester's timeout fires, an\n * act's absolute lifetime ends (the timer contract, engine.ts). */\nfunction actDeadlines (state: Readonly<HolderState>): Millis[] {\n const out: Millis[] = []\n for (const a of Object.values(state.encounter.introductions)) {\n out.push(actFiresAt(a.issuedAt + ACT_EXPIRY + ACT_SKEW))\n if (a.role === 'requester' && (a.status === 'sent' || a.status === 'acked')) out.push(actFiresAt(a.at + ACT_EXPIRY))\n }\n return out\n}\n\n/** The own rkids of every tuple a held act pinned (8270): a chaining\n * during the act deactivates such a tuple, but the act's artifacts stay\n * on it and verify under its key until the absolute lifetime (8290), when\n * retainActs discards the act and with it this claim. */\nfunction pinnedKeys (state: Readonly<HolderState>): string[] {\n const out = new Set<string>()\n for (const a of Object.values(state.encounter.introductions)) {\n for (const label of [a.pins.requester, a.pins.target, a.pins.mediator]) {\n const at = label === undefined ? null : tupleByLabel(state, label)\n if (at) out.add(at.tuple.rkid)\n }\n }\n return [...out]\n}\n\n/** The introduction module createHolder registers. */\nexport function introductionModule (): HolderModule {\n return Object.freeze({\n name: 'introduction',\n commands: Object.freeze({ [INTRODUCTION_COMMANDS.introduce]: introduceDef }),\n tasks: Object.freeze({\n [DECLARATION_TYPE]: declarationTask,\n [OFFER_TYPE]: offerTask,\n [INTRODUCTION_TYPES.request]: requestTask,\n [INTRODUCTION_TYPES.forward]: forwardTask,\n [INTRODUCTION_TYPES.reply]: replyTask,\n [INTRODUCTION_TYPES.ack]: ackTask,\n [INTRODUCTION_TYPES.voucher]: voucherTask,\n }),\n duties: Object.freeze({ 'intro-ack': ackDuty }),\n decisions: Object.freeze({ introduction: introductionDecision }),\n retain: retainActs,\n deadlines: actDeadlines,\n keepKeys: pinnedKeys,\n })\n}\n"]}
|
package/dist/invariants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../src/invariants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../src/invariants.ts"],"names":[],"mappings":"AAkLA,OAAO,KAAK,EAAW,IAAI,EAAE,WAAW,EAAsC,MAAM,YAAY,CAAA;AAMhG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAK9C,yDAAyD;AACzD,MAAM,MAAM,QAAQ;AAClB,8DAA8D;AAC5D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;AAClB,0EAA0E;GACxE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AACrC;gEACgE;GAC9D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1G,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAiHhE,wBAAgB,eAAe,CAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,SAAS,EAAE,CAyE1E;AAqGD,+FAA+F;AAC/F,wBAAgB,SAAS,CAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,GAAG,OAAO,CA6DhI;AAwFD,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,GAAG,SAAS,EAAE,CA6K5H;AAED,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,GAAI,QAAQ,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,QAAQ,KAAG,SAAS,EAC7C,CAAA"}
|
package/dist/invariants.js
CHANGED
|
@@ -65,6 +65,9 @@
|
|
|
65
65
|
// issued at the counter's revision on the active tuple
|
|
66
66
|
// (profileOut) or a class-on or profile duty open on it
|
|
67
67
|
//
|
|
68
|
+
// messages a block names a relationship the holder holds (Message
|
|
69
|
+
// Tasks 6010)
|
|
70
|
+
//
|
|
68
71
|
// Over one commit (transitionViolations):
|
|
69
72
|
// commitSeq strictly +1 per commit; lastWhen never falls (4.7)
|
|
70
73
|
// register labels, pair nonces, carriers, device names and revocation
|
|
@@ -108,6 +111,15 @@
|
|
|
108
111
|
// chaining appended a tuple in this commit (6610, the union of
|
|
109
112
|
// 4c); a relationship's held anchor head moves only along the
|
|
110
113
|
// links it holds (6150, 6170), except at such a chaining
|
|
114
|
+
// messages the record of surfaced invitations and the register of
|
|
115
|
+
// declined ones only grow (RLTP-MT-3130, RLTP-MSG-6310); a
|
|
116
|
+
// block is set only by the block act, a merge, or a
|
|
117
|
+
// chaining that absorbs a blocked fresh relationship (6030),
|
|
118
|
+
// cleared only by the block act or with its relationship; a
|
|
119
|
+
// completion-record entry never changes and leaves only by
|
|
120
|
+
// tick (4340); an inbox entry arises only in a unique
|
|
121
|
+
// receive of its document, with its record entry, and leaves
|
|
122
|
+
// only by the take-over (4420)
|
|
111
123
|
// outbox `accepted` appears only through report; a new item starts
|
|
112
124
|
// submitted (Delivery §6.1, note §4.3)
|
|
113
125
|
// effects a new cache entry only through a unique receive, one, the
|
|
@@ -161,6 +173,7 @@
|
|
|
161
173
|
// bound to a salt above hwm, and a later, higher salt completing
|
|
162
174
|
// raises hwm past it (5140, 5366). Checked instead: both never fall,
|
|
163
175
|
// and an open assembly lies above both
|
|
176
|
+
import { MESSAGE_LIFETIME_MS } from './message.js';
|
|
164
177
|
import { jcs } from './core.js';
|
|
165
178
|
import { triasOf } from './state.js';
|
|
166
179
|
import { ADMISSION_BOUND, classOnToward, entryOf, entryRelationships, feeding, findContact, liveRel, newestHeads, newestOf } from './trust/state.js';
|
|
@@ -312,6 +325,10 @@ function socialViolations(v, state) {
|
|
|
312
325
|
export function stateViolations(state) {
|
|
313
326
|
const v = [];
|
|
314
327
|
registerViolations(v, state);
|
|
328
|
+
// a block names a relationship the holder holds (Message Tasks 6010)
|
|
329
|
+
for (const r of state.messages.blocked)
|
|
330
|
+
if (!Object.hasOwn(state.relationships, r))
|
|
331
|
+
v.push({ invariant: 'messages', detail: `blocked ${r} names no relationship` });
|
|
315
332
|
socialViolations(v, state);
|
|
316
333
|
const contacts = Object.values(state.contacts);
|
|
317
334
|
const positions = new Set();
|
|
@@ -731,6 +748,59 @@ export function transitionViolations(before, after, op) {
|
|
|
731
748
|
if (!Object.hasOwn(after.encounter.introductions, k) && after.lastWhen < a.issuedAt + ACT_EXPIRY + ACT_SKEW)
|
|
732
749
|
v.push({ invariant: 'introductions', detail: `${k} discarded before its lifetime ended` });
|
|
733
750
|
}
|
|
751
|
+
// the record of surfaced invitations and the register of declined ones
|
|
752
|
+
// only grow, for the life of the holder (RLTP-MT-3130, RLTP-MSG-6310)
|
|
753
|
+
for (const [what, b, a] of [['surfaced', before.joining.surfaced, after.joining.surfaced], ['declined', before.joining.declined, after.joining.declined]]) {
|
|
754
|
+
const gone = superset(a, b);
|
|
755
|
+
if (gone.length)
|
|
756
|
+
v.push({ invariant: 'messages', detail: `joining.${what} lost ${jcs(gone)}` });
|
|
757
|
+
}
|
|
758
|
+
// the completion record (Message Tasks 4.4): an entry never changes its
|
|
759
|
+
// body digest and leaves only by tick (4340); the inbox (4.5): an entry
|
|
760
|
+
// arises only in a unique receive, with its record entry, and leaves only
|
|
761
|
+
// by the application's take-over (4420)
|
|
762
|
+
for (const [label, rec] of Object.entries(before.messages.records)) {
|
|
763
|
+
for (const [mid, e] of Object.entries(rec)) {
|
|
764
|
+
const x = after.messages.records[label]?.[mid];
|
|
765
|
+
if (x === undefined) {
|
|
766
|
+
// only tick, after sentAt + H on the mark it writes, or with its tuple deactivated or gone (4340)
|
|
767
|
+
const t = Object.values(after.relationships).flatMap((r) => r.tuples).find((u) => u.ownPairLabel === label);
|
|
768
|
+
if (op.kind !== 'tick')
|
|
769
|
+
v.push({ invariant: 'messages', detail: `record ${label} ${mid} deleted by ${op.kind}` });
|
|
770
|
+
else if (!(e.sentAt + MESSAGE_LIFETIME_MS < after.lastWhen) && t !== undefined && !t.deactivated)
|
|
771
|
+
v.push({ invariant: 'messages', detail: `record ${label} ${mid} deleted before sentAt + H, its tuple live` });
|
|
772
|
+
continue;
|
|
773
|
+
}
|
|
774
|
+
if (x.bodyDigest !== e.bodyDigest || x.sentAt !== e.sentAt)
|
|
775
|
+
v.push({ invariant: 'messages', detail: `record ${label} ${mid} changed` });
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
for (const [id, e] of Object.entries(after.messages.inbox)) {
|
|
779
|
+
if (Object.hasOwn(before.messages.inbox, id))
|
|
780
|
+
continue;
|
|
781
|
+
if (op.kind !== 'receive' || op.disposition !== 'unique' || op.digest !== id)
|
|
782
|
+
v.push({ invariant: 'messages', detail: `inbox entry ${id} arose by ${op.kind}` });
|
|
783
|
+
if (after.messages.records[e.tuple]?.[e.mid] === undefined)
|
|
784
|
+
v.push({ invariant: 'messages', detail: `inbox entry ${id} without its record entry` });
|
|
785
|
+
}
|
|
786
|
+
for (const id of Object.keys(before.messages.inbox)) {
|
|
787
|
+
if (!Object.hasOwn(after.messages.inbox, id) && !(op.kind === 'act' && op.command === 'message.take'))
|
|
788
|
+
v.push({ invariant: 'messages', detail: `inbox entry ${id} left by ${op.kind}` });
|
|
789
|
+
}
|
|
790
|
+
// a block changes only by the block act, a merge (6030) or a departure
|
|
791
|
+
// that removes its relationship
|
|
792
|
+
for (const r of before.messages.blocked) {
|
|
793
|
+
if (!after.messages.blocked.includes(r) && Object.hasOwn(after.relationships, r) && !(op.kind === 'act' && op.command === 'message.block'))
|
|
794
|
+
v.push({ invariant: 'messages', detail: `the block of ${r} cleared by ${op.kind}` });
|
|
795
|
+
}
|
|
796
|
+
for (const r of after.messages.blocked) {
|
|
797
|
+
if (before.messages.blocked.includes(r) || (op.kind === 'act' && (op.command === 'message.block' || op.command === 'trust.merge')) || op.kind === 'resume')
|
|
798
|
+
continue;
|
|
799
|
+
// a chaining: the chain takes the block of the fresh relationship it absorbed (6030)
|
|
800
|
+
const absorbed = Object.values(after.relationships).some((h) => h.chainedInto === r && before.relationships[h.id]?.chainedInto === null && before.messages.blocked.includes(h.id));
|
|
801
|
+
if (!absorbed)
|
|
802
|
+
v.push({ invariant: 'messages', detail: `the block of ${r} set by ${op.kind}` });
|
|
803
|
+
}
|
|
734
804
|
// a member stays on the holder's roster (removal is not built)
|
|
735
805
|
for (const [id, g] of Object.entries(before.groups)) {
|
|
736
806
|
const ga = after.groups[id];
|