@real-life/trust-protocol 0.4.0 → 0.6.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 +137 -0
- package/README.md +91 -24
- package/dist/adapters/vti-mediator.d.ts +36 -8
- package/dist/adapters/vti-mediator.d.ts.map +1 -1
- package/dist/adapters/vti-mediator.js +193 -29
- package/dist/adapters/vti-mediator.js.map +1 -1
- package/dist/codec.d.ts +2 -1
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +75 -26
- package/dist/codec.js.map +1 -1
- package/dist/engine.d.ts +77 -4
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +419 -31
- 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 +44 -2
- package/dist/holder-api.d.ts.map +1 -1
- package/dist/holder-api.js +40 -5
- package/dist/holder-api.js.map +1 -1
- package/dist/{holder-state-v1.d.ts → holder-state-v3.d.ts} +261 -201
- package/dist/holder-state-v3.d.ts.map +1 -0
- package/dist/holder-state-v3.js +2 -0
- package/dist/holder-state-v3.js.map +1 -0
- package/dist/index.d.ts +3 -2
- 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 -2
- 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 +22 -3
- 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 +88 -14
- 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 -4
- package/schemas/{holder-state-v1.schema.json → holder-state-v3.schema.json} +300 -12
- package/dist/holder-state-v1.d.ts.map +0 -1
- package/dist/holder-state-v1.js +0 -2
- package/dist/holder-state-v1.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"holder.js","sourceRoot":"","sources":["../../src/membership/holder.ts"],"names":[],"mappings":"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","sourcesContent":["// membership/holder — groups on the holder (lib Stage 2, PR 7a; Membership\n// Tasks 0.19 on Access 0.57, Delivery 0.81): founding, the prelude and\n// the invite, the accept, admission and welcome, evidence and vouches, on\n// HolderState and the engine. The pure forms and checks are the root\n// module's (membership.ts).\n//\n// What it registers (membershipModule):\n// human acts membership.found a group founded under a fresh pair\n// label, its genesis signed (Access 3.4.1:\n// that context is the founder's member\n// anchor, its memberOp the genesis)\n// membership.invite the prelude toward a contact (Membership\n// 1.2); the invite follows its answer\n// membership.vouch a vouch@2 for a held consent pair\n// (Access 5.3), relayed as evidence\n// decision group-invite: accept signs and sends the accept (3.2),\n// decline closes\n// tasks membership-invite/0.2 (proof absent), membership-accept/0.2\n// (proof required), membership-evidence/0.2 and /0.1 (proof\n// absent): channel bindings on member keys (receive.ts);\n// x-membership-prelude-request/0.1, x-membership-prelude-\n// reply/0.1 (tuple binding) and x-membership-welcome/0.1\n// (channel binding), this library's experimental forms; all\n// signature-class: signed acks\n// keepKeys the member keys of held groups and of groups on the way in,\n// and the tuple rkid of every held prelude (sent or answered)\n// retain declined and expired invitations leave `joining`\n//\n// Choices this file makes where spec and note leave them open:\n// - the prelude is application-level (Membership 1.2): this library\n// carries it over the relationship tuple as two experimental, signed\n// documents; the invitee's holder answers on its own, registering its member label and key first (Identity 6.1),\n// with a displayed member card (2.6) whose key the invite is sealed\n// to. An answer is taken only on a thread whose request this holder\n// sent (the outbox holds it)\n// - the welcome: Membership 3.3 carries it in access-operation/0.1 with\n// a member.add envelope and a sealed rltp-welcome/0.1 (Section 4),\n// Access's materialization deciding; until the Access envelope is\n// built here, the admitting member sends x-membership-welcome/0.1,\n// signed under its member anchor: the group's name, DID, genesis, rules\n// and the roster it holds, the new member's entry naming its admission\n// by the accept's document digest (its memberOp). Replication of the\n// roster beyond that is the Access port's. Operation ids: the founder's\n// memberOp is the genesis's oid (the genesis digest's SHA-256, Access\n// 3.3), a member's the oid of its accept document's digest (a member admitted later is\n// unknown to earlier members until their port materializes it)\n// - the admission without a human act at the admitting member: the\n// invitation is read as the anticipated admission act — the inviter\n// decided when it invited, so the accept (n = 1) or the evidence that\n// completes the vouches admits in the same commit. Membership 3280\n// (the accept grants nothing) and 3800 (evidence grants nothing) can be\n// read against this; an open spec reading for Membership 0.20, no\n// admission prompt yet\n// - founding: the genesis admits under the rule of one (vouchThreshold\n// \"1\"); a stricter rule needs policy.change, which is not built, so\n// found refuses another (threshold-unsupported). A member's own vouch\n// for its own invitee never counts beside its admission and is refused\n// (own-admission)\n// - the prelude is bound both ways: the request names the inviter's\n// member anchor and the answering holder files the prelude under\n// (genesis digest, inviter), so an invite surfaces as the contact that\n// asked as that inviter; the inviter files its request by thread\n// (group, contact, own rkid) and takes an answer only for exactly that\n// group on exactly that thread and tuple\n// - invitations are kept per thread: a new invite opens its own thread\n// beside earlier ones, so an accept signed in time on an earlier thread\n// still answers it; an accept answers exactly the invitation of its\n// thread, and an admission answers every invitation to its subject\n// - bounded state (tick): an issued invitation leaves past validUntil +\n// membership-skew + the longest give-up horizon (P90D, RLTP-MT-3090),\n// as does evidence (an accept signed in time may arrive that late), or\n// once its subject is on the roster; an outgoing prelude past an\n// invite's life and the horizon (its answer may travel that long); an\n// answered prelude no open or accepted invitation rests on past an\n// invite's life + skew + P90D; an accepted or joined invitation past\n// validUntil + skew + two horizons — the accept's delivery and the\n// welcome's — so the welcome finds the accepted state and the member\n// key (kept while an invitation is open or accepted); an explicit abort\n// is not built. A member key leaving keepKeys leaves `addresses`\n// without a tombstone (an identity context, engine.ts tick), so a later\n// invitation to the same group derives and uses the same key again\n// - the prelude request proves its claimed inviter: a binding signed\n// under the inviter's member key over (anchor, group, thread, and both\n// pair anchors of the channel it travels on, checked against the\n// document's issuer and recipient as stage 8 authenticated them), so\n// no other contact can replay it on its own channel; the\n// answering holder never overwrites a binding (group, inviter) held for\n// another contact. Residue: the binding links the inviter's member\n// anchor to its pair channel transferably (the invite names that\n// anchor before consent anyway)\n// - the admission policy: the group rule vouchThreshold n reads as the\n// `vouch` rule of member.add (Access 4.2) counting the admitting\n// member: n distinct members stand behind an admission, the admitting\n// member one of them, the others by vouch@2 credentials whose issuer\n// is on its roster. n = 1 admits on the accept. Only the inviter (the\n// holder that recorded the accept) admits; with n > 1 it relays the\n// consent pair as membership-evidence/0.2 to the other members on its\n// roster (candidacy false still permits this silent relay, 3250), and\n// a member's vouch travels back to it as evidence with its vouch\n// - membership-evidence: Delivery §4.4 still lists membership-evidence/\n// 0.1; Membership 0.19 registers /0.2 and keeps /0.1 receivable\n// (3815): both are registered here, /0.2 is the one issued (a gap to\n// close in Delivery 0.82). A relayer this holder does not have on its\n// roster cannot be acknowledged (its key is unknown): validation-failed\n// where 3750 has the pending disposition incomplete(missing:\n// group-state), which this engine does not have\n// - the accept's candidacy is false (the decision carries only accept\n// or decline); surfacing a candidacy (3765) is not built\n// - the in-library Access (localAccess): where createHolder gets no\n// Access port, every preparation sees one over its own snapshot's\n// `groups`, so a group star opens between members whose rosters the\n// holder holds: isMember by the roster, resolve(oid) by the roster\n// entry whose op it is (its member anchor and card key)\n// - a member group is listed in the group star (5420: listed unless\n// switched off)\nimport { b64uOf, fromB64u, iso, sameDigest, toU } from '../core.js'\nimport type { Json, JsonObject } from '../core.js'\nimport { anchorOfEd, diSignWith, diVerify, digestBytes, digestDoc } from '../crypto.js'\nimport { seal } from '../delivery.js'\nimport { cardBody } from '../encounter.js'\nimport {\n ACCEPT_TYPE, EVIDENCE_TYPE, EVIDENCE_TYPE_01, INVITE_TYPE, MEMBERSHIP_SKEW, acceptProblem, enclosedCardOk, evidenceProblem,\n inviteCredentialBody, inviteProblem, memberLabelOf, membershipSchemaOk, oidOf, vouchCredentialBody, vouchProblem, withinBudget,\n} from '../membership.js'\nimport { withLabel, withPairNonce } from '../identity-state.js'\nimport { ED_PKCS8 } from '../keys-seed.js'\nimport { tupleByRkid } from '../receive.js'\nimport type { Channel, TaskRefusal } from '../receive.js'\nimport type { Applied, CommandDef, DecisionDef, EventDraft, HolderModule, OutboundDraft, PrepareCtx, Refusal, TaskHandler } from '../engine.js'\nimport type { Access, GroupAccess, Recipient } from '../ports.js'\nimport type { Evidence, Group, HolderState, Joining, Millis, OpenInvitation, Prompt, ReceivedInvite, RosterEntry } from '../state.js'\nimport { entryOf, findContact, liveRel, activeTuple } from '../trust/state.js'\nimport { groupStarRematch, withGroupHits } from '../trust/group-star.js'\nimport type { GroupStarRehit } from '../trust/group-star.js'\nimport type { GroupMembership } from '../group-star.js'\n\nconst TT = 'https://real-life.org/trust-tasks/'\n/** This library's experimental forms (receive.ts SIGNATURE_CLASS). */\nexport const PRELUDE_REQUEST_TYPE = TT + 'x-membership-prelude-request/0.1'\nexport const PRELUDE_REPLY_TYPE = TT + 'x-membership-prelude-reply/0.1'\nexport const WELCOME_TYPE = TT + 'x-membership-welcome/0.1'\nexport { INVITE_TYPE, ACCEPT_TYPE, EVIDENCE_TYPE }\n\n/** How long an invite is answerable (validUntil − validFrom), as the probe had it. */\nexport const INVITE_LIFE = 24 * 3_600_000\n/** The longest give-up horizon (Delivery [P1D, P90D]): what late answers may still need (RLTP-MT-3090). */\nconst HORIZON_MAX = 90 * 86_400_000\n\nexport const MEMBERSHIP_COMMANDS = Object.freeze({\n found: 'membership.found',\n invite: 'membership.invite',\n vouch: 'membership.vouch',\n})\n\nexport interface FoundInput { name: string, vouchThreshold?: string, listed?: boolean }\nexport interface InviteInput { groupId: string, contactId: string }\nexport interface VouchInput { groupId: string, member: string, provenance?: 'met' | 'introduced' }\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>\n\nconst sealWith = (ctx: PrepareCtx, doc: unknown, keyAgreement: string) =>\n seal(doc as Json, keyAgreement, { ephSeed: ctx.entropy.bytes('seal.eph', 32), nonce: ctx.entropy.bytes('seal.nonce', 12) }, ctx.crypto.subtle)\nconst signer = (ctx: PrepareCtx, label: string) => (b: Uint8Array) => ctx.keys.sign(label, b)\nconst signDoc = async <T extends Record<string, any>> (ctx: PrepareCtx, label: string, anchor: string, doc: T, at: string) =>\n diSignWith(anchor, signer(ctx, label), doc, at, ctx.crypto.subtle)\n\n/** A sealed document ready for the outbox. */\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\nasync function sealed (ctx: PrepareCtx, doc: Doc, recipient: Recipient): Promise<Sealed> {\n return { digest: await digestDoc(doc, ctx.crypto.subtle), envelope: await sealWith(ctx, doc, recipient.keyAgreement), threadId: doc.threadId, type: doc.type, recipient }\n}\n\n/** The own key-agreement id a label derives under, from `addresses`. */\nconst rkidOf = (state: Readonly<HolderState>, label: string): string | undefined =>\n Object.entries(state.addresses.keys).find(([, k]) => k.label === label)?.[0]\n\n/** A displayed member card (Membership 2.6): no challenge, no sentTo/boundTo/hints. */\nasync function memberCard (ctx: PrepareCtx, label: string, name: string | undefined, at: string): Promise<Json> {\n const me = await ctx.keys.anchorOf(label)\n const body = cardBody(me, name !== undefined ? { name } : {})\n return await signDoc(ctx, label, me.anchor, body as unknown as Record<string, Json>, at) as unknown as Json\n}\n\nconst ownName = (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, 200).join('') : undefined\n}\n\nconst groupOfLabel = (state: Readonly<HolderState>, label: string | undefined): Group | undefined =>\n label === undefined ? undefined : Object.values(state.groups).find((g) => g.memberLabel === label)\n\n/** The policy (see the header): admitted when vouchThreshold distinct\n * members stand behind it, the admitting member one of them. */\nfunction policyMet (g: Readonly<Group>, ev: Readonly<Evidence>): boolean {\n const backers = new Set<string>([g.memberAnchor ?? ''])\n for (const v of ev.vouches as Doc[]) if (Object.hasOwn(g.roster, v.issuer)) backers.add(v.issuer)\n return BigInt(backers.size) >= BigInt(g.rules.vouchThreshold)\n}\n\n// ── the in-library Access over the holder's own groups ─────────────────\n\nconst groupAccess = (g: Readonly<Group>): GroupAccess => Object.freeze({\n group: g.id,\n isMember: (a: string) => Object.hasOwn(g.roster, a),\n resolve: (oid: string) => {\n const e = Object.values(g.roster).find((x) => x.op === oid)\n return e ? { subject: e.anchor, keyAgreement: e.keyAgreement } : null\n },\n})\n\n/** An Access over one snapshot's `groups` (note §3 Access; the header). */\nexport function localAccess (state: Readonly<HolderState>): Access {\n return Object.freeze({\n memberships: async () => Object.values(state.groups).map(groupAccess),\n membership: async (id: string) => (Object.hasOwn(state.groups, id) ? groupAccess(state.groups[id]) : null),\n })\n}\n\n// ── founding (Access 3.4.1) ────────────────────────────────────────────\n\ninterface FoundPrep { label: string, nonce: string, rkid: string, anchor: string, did: string, genesis: Json, genesisDigest: string, keyAgreement: string, name?: string }\n\nconst foundDef: CommandDef<FoundInput, FoundPrep> = {\n human: true,\n async prepare (ctx, input) {\n if (typeof input?.name !== 'string' || !input.name.length) throw new TypeError('membership.found needs {name}')\n const S = ctx.crypto.subtle\n const n = ctx.entropy.bytes('founding.nonce', 32)\n const label = 'pair/' + await digestBytes(n, S)\n const me = await ctx.keys.anchorOf(label)\n // the group address: a probe mint until Identity names the group key's origin\n const k = await S.importKey('pkcs8', Uint8Array.from([...ED_PKCS8, ...ctx.entropy.bytes('group.seed', 32)]), { name: 'Ed25519' }, true, ['sign'])\n const did = anchorOfEd(fromB64u((await S.exportKey('jwk', k)).x!))\n const at = iso(ctx.when)\n const body = { type: 'group-genesis@probe', group: did, label: input.name, founder: me.anchor, issuedAt: at }\n const genesis = await signDoc(ctx, label, me.anchor, body, at) as unknown as Json\n return { label, nonce: b64uOf(n), rkid: me.keyAgreement, anchor: me.anchor, did, genesis, genesisDigest: await digestDoc(body, S), keyAgreement: me.keyAgreement, name: ownName(ctx.snapshot) }\n },\n apply (state, prepared, input, when) {\n const p = prepared.value\n if (state.register.labels.includes(p.label)) throw new Error('membership.found: the founding label is not fresh')\n if (Object.hasOwn(state.groups, p.genesisDigest)) throw new Error('membership.found: the genesis exists')\n const threshold = input.vouchThreshold ?? '1'\n if (!/^[1-9][0-9]?$/.test(threshold)) throw new TypeError('membership.found: vouchThreshold is a positive decimal')\n if (threshold !== '1') return no('threshold-unsupported')\n const group: Group = {\n id: p.genesisDigest, name: input.name, did: p.did, genesis: p.genesis as JsonObject, memberLabel: p.label, rules: { vouchThreshold: threshold },\n listed: input.listed ?? true, memberAnchor: p.anchor, memberOp: oidOf(p.genesisDigest)!,\n roster: { [p.anchor]: { anchor: p.anchor, op: oidOf(p.genesisDigest)!, keyAgreement: p.keyAgreement, ...(p.name !== undefined ? { name: p.name } : {}), addedAt: when } },\n invitations: {}, evidence: {}, preludes: {},\n }\n return {\n state: {\n ...state,\n register: withPairNonce(state.register, p.label, p.nonce),\n addresses: { ...state.addresses, keys: { ...state.addresses.keys, [p.rkid]: { label: p.label, lastShown: when } } },\n groups: { ...state.groups, [group.id]: group },\n },\n events: [{ type: 'group.founded', groupId: group.id }],\n }\n },\n}\n\n// ── the prelude (Membership 1.2) ───────────────────────────────────────\n\n/** The live active tuple toward a contact, with its 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\nconst inviteDef: CommandDef<InviteInput, Refusal | Sealed> = {\n human: true,\n async prepare (ctx, input) {\n const g = ctx.snapshot.groups[input?.groupId]\n if (!g || g.memberAnchor === undefined) return no('unknown-group')\n const ch = channelTo(ctx.snapshot, input.contactId)\n if (!ch) return no('no-own-channel')\n const own = await ctx.keys.anchorOf(ch.tuple.ownPairLabel)\n const at = iso(ctx.when)\n const body = {\n id: ctx.entropy.id('doc.id'), type: PRELUDE_REQUEST_TYPE, issuer: own.anchor, recipient: ch.tuple.counterpartAnchor,\n threadId: ctx.entropy.id('thread.id'), issuedAt: at, payload: { genesisDigest: g.id, group: g.did ?? '', name: g.name, inviter: g.memberAnchor, binding: {} as Doc },\n }\n // the inviter's member anchor proven: signed under it over (anchor, group, thread)\n body.payload.binding = await signDoc(ctx, g.memberLabel, g.memberAnchor, {\n type: 'x-membership-inviter@0.1', inviter: g.memberAnchor, genesisDigest: g.id, threadId: body.threadId, from: own.anchor, to: ch.tuple.counterpartAnchor,\n }, at)\n const doc = await signDoc(ctx, ch.tuple.ownPairLabel, own.anchor, body, at)\n return sealed(ctx, doc, { contactId: ch.contact.id, rkid: ch.tuple.rkid, keyAgreement: ch.tuple.counterpartKeyAgreement })\n },\n apply (state, prepared, input, when) {\n const p = prepared.value\n if (isRefusal(p)) return p\n const g = state.groups[input.groupId]\n const preludes = { ...g.preludes, [p.threadId]: { contactId: p.recipient.contactId, rkid: p.recipient.rkid, at: when } }\n return { state: { ...state, groups: { ...state.groups, [g.id]: { ...g, preludes } } }, outbound: [draft(p)] }\n },\n}\n\n/** The arrival tuple's own label and 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 ?? findContact(state, at.rel.contactId)?.id ?? at.rel.contactId, tuple: at.tuple } : null\n}\n\ninterface PreludeRequestPayload { genesisDigest: string, group: string, name: string, inviter: string, binding: Doc }\n\n/** An answered prelude's key: the group and the inviter that asked. */\nconst preludeKey = (group: string, inviter: string): string => `${group} ${inviter}`\n\nconst preludeRequestTask: TaskHandler<PreludeRequestPayload, { reply: Sealed, label: string, rkid: string }> = {\n proof: 'required',\n decode (p) {\n const x = p as Record<string, unknown>\n if (x === null || typeof x !== 'object' || Object.keys(x).length !== 5 || typeof x.genesisDigest !== 'string' || typeof x.group !== 'string' ||\n typeof x.name !== 'string' || typeof x.inviter !== 'string' || !/^did:key:z6Mk[1-9A-HJ-NP-Za-km-z]{44}$/.test(x.inviter) ||\n x.binding === null || typeof x.binding !== 'object') return refuse('malformed')\n return memberLabelOf(x.genesisDigest) === null ? refuse('validation-failed') : x as unknown as PreludeRequestPayload\n },\n async prepare (ctx, doc, arr) {\n if (!(await diVerify(doc, doc.issuer, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-MT-2130')\n // the claimed inviter proven by its own member key, for this group and thread\n const b = doc.payload.binding\n if (b.type !== 'x-membership-inviter@0.1' || b.inviter !== doc.payload.inviter || b.genesisDigest !== doc.payload.genesisDigest ||\n b.threadId !== doc.threadId || b.from !== doc.issuer || b.to !== doc.recipient || !(await diVerify(b, doc.payload.inviter, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-MT-3020')\n const a = arrival(ctx.snapshot, arr.rkid)!\n const label = memberLabelOf(doc.payload.genesisDigest)!\n const member = await ctx.keys.anchorOf(label)\n const at = iso(ctx.when)\n const card = await memberCard(ctx, label, ownName(ctx.snapshot), at)\n const own = await ctx.keys.anchorOf(a.label)\n const body = {\n id: ctx.entropy.id('doc.id'), type: PRELUDE_REPLY_TYPE, issuer: own.anchor, recipient: doc.issuer, threadId: doc.threadId, issuedAt: at,\n payload: { genesisDigest: doc.payload.genesisDigest, card },\n }\n const reply = await sealed(ctx, await signDoc(ctx, a.label, own.anchor, body, at), { contactId: a.contactId, rkid: arr.rkid, keyAgreement: a.tuple.counterpartKeyAgreement })\n return { reply, label, rkid: member.keyAgreement }\n },\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n const a = arrival(state, arr.rkid)!\n // a binding (group, inviter) held for another contact is never\n // overwritten: compared by the entries the two arrival tuples feed now\n // (a merge, a split or a chaining since moves it with them); a binding\n // whose tuple is gone (a departure) is free\n const bound = state.joining.preludes[preludeKey(toU(doc.payload.genesisDigest)!, doc.payload.inviter)]\n const was = bound ? arrival(state, bound.rkid) : null\n if (was && was.contactId !== a.contactId) return refuse('validation-failed', 'RLTP-MT-3030')\n const keys = Object.hasOwn(state.addresses.keys, p.rkid) ? state.addresses.keys : { ...state.addresses.keys, [p.rkid]: { label: p.label, lastShown: arr.when } }\n return {\n state: {\n ...state,\n // the member label in the register before its anchor is shown (Identity 6.1)\n register: withLabel(state.register, p.label),\n addresses: { ...state.addresses, keys },\n joining: { ...state.joining, preludes: { ...state.joining.preludes, [preludeKey(toU(doc.payload.genesisDigest)!, doc.payload.inviter)]: { group: toU(doc.payload.genesisDigest)!, inviter: doc.payload.inviter, contactId: a.contactId, rkid: arr.rkid, memberLabel: p.label, at: arr.when } } },\n },\n outbound: [draft(p.reply)],\n }\n },\n}\n\ninterface PreludeReplyPayload { genesisDigest: string, card: Doc }\n\nconst preludeReplyTask: TaskHandler<PreludeReplyPayload, Sealed & { invitee: string, credDigest: string, invite: Doc, validUntil: Millis }> = {\n proof: 'required',\n decode (p) {\n const x = p as Record<string, unknown>\n if (x === null || typeof x !== 'object' || Object.keys(x).length !== 2 || typeof x.genesisDigest !== 'string' || x.card === null || typeof x.card !== 'object') return refuse('malformed')\n return x as unknown as PreludeReplyPayload\n },\n async prepare (ctx, doc, arr) {\n const s = ctx.snapshot\n if (!(await diVerify(doc, doc.issuer, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-MT-2130')\n // the answer to exactly the prelude this holder sent: its group, thread and tuple\n const g = s.groups[toU(doc.payload.genesisDigest) ?? '']\n const asked = g?.preludes[doc.threadId]\n if (!g || g.memberAnchor === undefined || !asked || asked.rkid !== arr.rkid) return refuse('validation-failed', 'RLTP-MT-3030')\n const card = doc.payload.card\n if (!(await enclosedCardOk(card, card.anchor, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-MT-2250')\n const a = arrival(s, arr.rkid)!\n const S = ctx.crypto.subtle\n const at = iso(ctx.when)\n const until = ctx.when + INVITE_LIFE\n const threadId = ctx.entropy.id('thread.id')\n const inviterCard = await memberCard(ctx, g.memberLabel, ownName(s), at)\n const cred = inviteCredentialBody({\n issuer: g.memberAnchor, invitee: card.anchor, group: g.did ?? '', genesisDigest: g.id, card: inviterCard, name: g.name,\n validFrom: at, validUntil: iso(until), taskContext: threadId,\n })\n const invite = await signDoc(ctx, g.memberLabel, g.memberAnchor, cred, at)\n const inviteDoc = { id: ctx.entropy.id('doc.id'), type: INVITE_TYPE, issuer: g.memberAnchor, recipient: card.anchor, threadId, issuedAt: at, payload: { invite } }\n if (!membershipSchemaOk('payload-membership-invite.schema.json', inviteDoc.payload) || !withinBudget(inviteDoc)) return refuse('validation-failed', 'RLTP-MT-2220')\n const out = await sealed(ctx, inviteDoc, { contactId: a.contactId, rkid: rkidOf(s, g.memberLabel) ?? '', keyAgreement: card.keyAgreement, anchor: card.anchor, via: arr.rkid })\n return { ...out, invitee: card.anchor, credDigest: await digestDoc(invite, S), invite: inviteDoc, validUntil: until }\n },\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n const g = state.groups[toU(doc.payload.genesisDigest)!]\n const preludes = { ...g.preludes }\n delete preludes[doc.threadId]\n // a member is not invited again; every invitation is its own thread,\n // kept beside earlier ones (an accept signed in time may still travel)\n if (Object.hasOwn(g.roster, p.invitee)) return { state: { ...state, groups: { ...state.groups, [g.id]: { ...g, preludes } } } }\n if (!p.recipient.rkid) throw new Error(`membership: no address key for ${g.memberLabel}`)\n const inv = { invitee: p.invitee, keyAgreement: p.recipient.keyAgreement, contactId: p.recipient.contactId, rkid: arr.rkid, threadId: p.threadId, credDigest: p.credDigest, invite: p.invite as JsonObject, validUntil: p.validUntil }\n return {\n state: { ...state, groups: { ...state.groups, [g.id]: { ...g, preludes, invitations: { ...g.invitations, [p.threadId]: inv } } } },\n outbound: [draft(p)],\n }\n },\n}\n\n// ── the invite at the invitee (Membership 3.1) ─────────────────────────\n\nconst invitePromptId = (credDigest: string): string => 'invite:' + credDigest\n\nconst inviteTask: TaskHandler<Doc, { credDigest: string }> = {\n proof: 'absent',\n decode: (p) => (membershipSchemaOk('payload-membership-invite.schema.json', p) ? p as Doc : refuse('malformed')),\n // the prelude check (3030): the invite reaches the key of the own\n // derivation from its genesis digest, after a prelude this holder answered\n channel (state, doc, rkid): Channel | TaskRefusal {\n const inv = doc.payload.invite\n const label = memberLabelOf(inv.credentialSubject.genesisDigest)\n if (label === null || state.addresses.keys[rkid]?.label !== label) return refuse('validation-failed', 'RLTP-MT-3030')\n // the contact that asked as this inviter (the prelude's binding)\n const pre = state.joining.preludes[preludeKey(toU(inv.credentialSubject.genesisDigest) ?? '', inv.issuer)]\n if (!pre) return refuse('validation-failed', 'RLTP-MT-3030')\n return { keyAgreement: inv.credentialSubject.card.keyAgreement, contactId: pre.contactId, via: pre.rkid }\n },\n async prepare (ctx, doc) {\n const bad = await inviteProblem(doc, ctx.crypto.subtle)\n if (bad) return refuse('validation-failed', bad)\n return { credDigest: await digestDoc(doc.payload.invite, ctx.crypto.subtle) }\n },\n // durable buffering and surfacing to the human (3095)\n apply (state, prepared, doc, arr) {\n const inv = doc.payload.invite\n const gd = toU(inv.credentialSubject.genesisDigest)!\n const { credDigest } = prepared.value\n if (Object.hasOwn(state.groups, gd) || Object.hasOwn(state.joining.invites, credDigest)) return { state: state as HolderState }\n const pre = state.joining.preludes[preludeKey(gd, inv.issuer)]\n const validUntil = Date.parse(inv.validUntil)\n const r: ReceivedInvite = {\n credDigest, group: gd, name: typeof inv.credentialSubject.name === 'string' ? inv.credentialSubject.name : '', contactId: pre.contactId, rkid: pre.rkid,\n memberLabel: memberLabelOf(gd)!, invite: doc as unknown as JsonObject, promptId: invitePromptId(credDigest), validUntil, status: 'open', at: arr.when,\n }\n const prompt: Prompt = { id: r.promptId, kind: 'group-invite', contactId: r.contactId, groupId: gd, openedAt: arr.when, expiresAt: validUntil + MEMBERSHIP_SKEW }\n return {\n state: { ...state, joining: { ...state.joining, invites: { ...state.joining.invites, [credDigest]: r } }, prompts: { ...state.prompts, [prompt.id]: prompt } },\n events: [{ type: 'prompt.opened', promptId: prompt.id, kind: 'group-invite' }],\n }\n },\n}\n\n// ── the accept (Membership 3.2): the group-invite decision ─────────────\n\nconst inviteOfPrompt = (state: Readonly<HolderState>, promptId: string): ReceivedInvite | undefined =>\n Object.values(state.joining.invites).find((i) => i.promptId === promptId)\n\nconst acceptDecision: DecisionDef<(Sealed & { acceptDigest: string }) | Refusal | null> = {\n async prepare (ctx, prompt, choice) {\n if (choice !== 'accept') return null\n const r = inviteOfPrompt(ctx.snapshot, prompt.id)\n if (!r || r.status !== 'open') return no('unknown-group')\n const inv = (r.invite as Doc).payload.invite\n const me = await ctx.keys.anchorOf(r.memberLabel)\n const at = iso(ctx.when)\n const card = await memberCard(ctx, r.memberLabel, ownName(ctx.snapshot), at)\n const body = {\n id: ctx.entropy.id('doc.id'), type: ACCEPT_TYPE, issuer: me.anchor, recipient: inv.issuer, threadId: (r.invite as Doc).threadId, issuedAt: at,\n payload: { accept: { group: inv.credentialSubject.group, subject: me.anchor, ref: r.credDigest, card, candidacy: false } },\n }\n const doc = await signDoc(ctx, r.memberLabel, me.anchor, body, at)\n if (!withinBudget(doc)) return no('unknown-group', 'RLTP-MT-2220')\n const out = await sealed(ctx, doc, { contactId: r.contactId, rkid: rkidOf(ctx.snapshot, r.memberLabel) ?? '', keyAgreement: inv.credentialSubject.card.keyAgreement, anchor: inv.issuer, via: r.rkid })\n return { ...out, acceptDigest: await digestDoc(doc, ctx.crypto.subtle) }\n },\n apply (state, prompt, choice, when, prepared) {\n const r = inviteOfPrompt(state, prompt.id)\n if (!r) return { state: state as HolderState }\n if (choice === 'decline') return { state: { ...state, joining: { ...state.joining, invites: { ...state.joining.invites, [r.credDigest]: { ...r, status: 'declined' } } } } }\n const p = prepared.value\n if (p === null || isRefusal(p)) return p ?? no('unknown-group')\n if (when > r.validUntil + MEMBERSHIP_SKEW) return no('prompt-expired', 'RLTP-MT-3270')\n if (!p.recipient.rkid) throw new Error(`membership: no address key for ${r.memberLabel}`)\n return {\n state: { ...state, joining: { ...state.joining, invites: { ...state.joining.invites, [r.credDigest]: { ...r, status: 'accepted', acceptDigest: p.acceptDigest } } } },\n outbound: [draft(p)],\n }\n },\n}\n\n// ── admission at the inviter ───────────────────────────────────────────\n\ninterface WelcomeMember { anchor: string, op: string, keyAgreement: string, name?: string }\n\n/** The welcome (this library's form, see the header) and, for n > 1, the\n * evidence relays to the other members. */\nasync function admissionDocs (ctx: PrepareCtx, g: Readonly<Group>, ev: Readonly<Evidence>, acceptDigest: string, admit: boolean): Promise<{ welcome: Sealed | null, relays: Sealed[] }> {\n const acc = (ev.accept as Doc).payload.accept\n const at = iso(ctx.when)\n const entry = rosterEntryOf(acc, acceptDigest, ctx.when, undefined)\n if (admit) {\n const roster: WelcomeMember[] = [...Object.values(g.roster), entry].map((m) => ({ anchor: m.anchor, op: m.op, keyAgreement: m.keyAgreement, ...(m.name !== undefined ? { name: m.name } : {}) }))\n const body = {\n id: ctx.entropy.id('doc.id'), type: WELCOME_TYPE, issuer: g.memberAnchor!, recipient: acc.subject, threadId: (ev.accept as Doc).threadId, issuedAt: at,\n payload: { genesisDigest: g.id, group: g.did ?? '', name: g.name, genesis: g.genesis ?? {}, vouchThreshold: g.rules.vouchThreshold, accept: acceptDigest, roster },\n }\n const doc = await signDoc(ctx, g.memberLabel, g.memberAnchor!, body, at)\n return { welcome: await sealed(ctx, doc, { ...contactOfInvitation(g, acc.subject), rkid: rkidOf(ctx.snapshot, g.memberLabel) ?? '', keyAgreement: acc.card.keyAgreement, anchor: acc.subject }), relays: [] }\n }\n const relays: Sealed[] = []\n for (const m of Object.values(g.roster)) {\n if (m.anchor === g.memberAnchor || m.anchor === acc.subject) continue\n const body = {\n id: ctx.entropy.id('doc.id'), type: EVIDENCE_TYPE, issuer: g.memberAnchor!, recipient: m.anchor, threadId: (ev.accept as Doc).threadId, issuedAt: at,\n payload: { evidence: { invite: ev.invite, accept: ev.accept } },\n }\n relays.push(await sealed(ctx, body, { ...contactOfMember(m), rkid: rkidOf(ctx.snapshot, g.memberLabel) ?? '', keyAgreement: m.keyAgreement, anchor: m.anchor }))\n }\n return { welcome: null, relays }\n}\n\n/** The invitation of a thread to a subject (Membership 3.2: the accept answers the invite of its thread). */\nconst invitationOf = (g: Readonly<Group>, threadId: string, subject: string) => {\n const i = Object.hasOwn(g.invitations, threadId) ? g.invitations[threadId] : undefined\n return i && i.invitee === subject ? i : undefined\n}\n/** The contact an invitee was invited as, with the tuple its prelude went on (Recipient.via). */\nconst contactOfInvitation = (g: Readonly<Group>, subject: string): { contactId: string, via?: string } => {\n const i = Object.values(g.invitations).find((x) => x.invitee === subject)\n return i ? { contactId: i.contactId, via: i.rkid } : { contactId: 'member:' + subject }\n}\n/** A member as a recipient's contact: the contact it is known as, with its tuple (Recipient.via). */\nconst contactOfMember = (m: Readonly<RosterEntry>): { contactId: string, via?: string } =>\n (m.contactId !== undefined ? { contactId: m.contactId, ...(m.rkid !== undefined ? { via: m.rkid } : {}) } : { contactId: 'member:' + m.anchor })\n\nconst rosterEntryOf = (acc: Doc, acceptDigest: string, when: Millis, by: Readonly<OpenInvitation> | undefined): RosterEntry => ({\n anchor: acc.subject, op: oidOf(acceptDigest)!, keyAgreement: acc.card.keyAgreement,\n ...(typeof acc.card.name === 'string' ? { name: acc.card.name } : {}), addedAt: when, ...(by ? { contactId: by.contactId, rkid: by.rkid } : {}),\n})\n\n/** The admission's state: the roster grows, the evidence and the invitation go. */\nfunction admitted (state: Readonly<HolderState>, g: Readonly<Group>, acceptDigest: string, ev: Readonly<Evidence>, when: Millis): { state: HolderState, events: EventDraft[] } {\n const acc = (ev.accept as Doc).payload.accept\n // the contact the member was invited as, on the tuple its prelude went on\n const by = Object.values(g.invitations).find((i) => i.invitee === acc.subject)\n // every invitation to the now member is answered\n const invitations = Object.fromEntries(Object.entries(g.invitations).filter(([, i]) => i.invitee !== acc.subject))\n const evidence = { ...g.evidence }\n delete evidence[acceptDigest]\n const next: Group = { ...g, roster: { ...g.roster, [acc.subject]: rosterEntryOf(acc, acceptDigest, when, by) }, invitations, evidence }\n return { state: { ...state, groups: { ...state.groups, [g.id]: next } }, events: [{ type: 'group.admitted', groupId: g.id, member: acc.subject }] }\n}\n\ninterface AcceptPrep { group: string, acceptDigest: string, welcome: Sealed | null, relays: Sealed[] }\n\nconst acceptTask: TaskHandler<Doc, AcceptPrep> = {\n proof: 'required',\n decode: (p) => (membershipSchemaOk('payload-membership-accept.schema.json', p) ? p as Doc : refuse('malformed')),\n // to the member key that issued the invitation this accept answers\n channel (state, doc, rkid): Channel | TaskRefusal {\n const g = groupOfLabel(state, state.addresses.keys[rkid]?.label)\n const inv = g && invitationOf(g, doc.threadId, doc.issuer)\n if (!g || !inv) return refuse('validation-failed', 'RLTP-MT-3270')\n return { keyAgreement: doc.payload.accept.card.keyAgreement, contactId: inv.contactId, via: inv.rkid }\n },\n async prepare (ctx, doc, arr) {\n const g = groupOfLabel(ctx.snapshot, ctx.snapshot.addresses.keys[arr.rkid].label)!\n const inv = invitationOf(g, doc.threadId, doc.issuer)!\n const bad = await acceptProblem(doc, inv.invite, inv.credDigest, ctx.crypto.subtle)\n if (bad) return refuse('validation-failed', bad)\n const acceptDigest = await digestDoc(doc, ctx.crypto.subtle)\n const ev: Evidence = { invite: inv.invite, accept: doc as unknown as JsonObject, vouches: [], at: arr.when }\n const docs = await admissionDocs(ctx, g, ev, acceptDigest, policyMet(g, ev))\n return { group: g.id, acceptDigest, ...docs }\n },\n // the defined effect: the consent recorded (3280); the admission where\n // the policy holds, else the pair relayed for vouches (the header)\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n const g = state.groups[p.group]\n const ev: Evidence = { invite: invitationOf(g, doc.threadId, doc.issuer)!.invite, accept: doc as unknown as JsonObject, vouches: [], at: arr.when }\n if (p.welcome) {\n const a = admitted(state, g, p.acceptDigest, ev, arr.when)\n return { state: a.state, events: a.events, outbound: [draft(p.welcome)] }\n }\n // the consent waits as evidence; the invitation stays until the\n // admission (its contact goes onto the roster then)\n return {\n state: { ...state, groups: { ...state.groups, [g.id]: { ...g, evidence: { ...g.evidence, [p.acceptDigest]: ev } } } },\n outbound: p.relays.map(draft),\n }\n },\n}\n\n// ── evidence (Membership 3.4) and vouches ──────────────────────────────\n\ninterface EvidencePrep { group: string, acceptDigest: string, vouches: Doc[], welcome: Sealed | null }\n\nconst evidenceTask = (schema: string): TaskHandler<Doc, EvidencePrep> => ({\n proof: 'absent',\n decode: (p) => (membershipSchemaOk(schema, p) ? p as Doc : refuse('malformed')),\n // 3745: this holder is a member of the pair's group; the relayer is on its roster\n channel (state, doc, rkid): Channel | TaskRefusal {\n const inv = doc.payload.evidence.invite.payload.invite\n const g = groupOfLabel(state, state.addresses.keys[rkid]?.label)\n if (!g || !sameDigest(g.id, inv.credentialSubject.genesisDigest)) return refuse('validation-failed', 'RLTP-MT-3755')\n const m = g.roster[doc.issuer]\n if (!m) return refuse('validation-failed', 'RLTP-MT-3750')\n return { keyAgreement: m.keyAgreement, ...contactOfMember(m) }\n },\n async prepare (ctx, doc, arr) {\n const { invite, accept, vouches = [] } = doc.payload.evidence\n const S = ctx.crypto.subtle\n const credDigest = await digestDoc(invite.payload.invite, S)\n const bad = await evidenceProblem(invite, accept, credDigest, S)\n if (bad) return refuse('validation-failed', bad)\n const acceptDigest = await digestDoc(accept, S)\n for (const v of vouches) {\n const vb = await vouchProblem(v, accept.payload.accept.subject, acceptDigest, invite.payload.invite.credentialSubject.genesisDigest, S)\n if (vb) return refuse('validation-failed', vb)\n }\n const g = groupOfLabel(ctx.snapshot, ctx.snapshot.addresses.keys[arr.rkid].label)!\n const held = g.evidence[acceptDigest]\n const merged = mergeVouches(held?.vouches as Doc[] ?? [], vouches)\n const ev: Evidence = { invite, accept, vouches: merged as JsonObject[], at: arr.when }\n // the inviter admits once the policy holds (the header)\n const admit = invite.payload.invite.issuer === g.memberAnchor && !Object.hasOwn(g.roster, accept.payload.accept.subject) && policyMet(g, ev)\n const welcome = admit ? (await admissionDocs(ctx, g, ev, acceptDigest, true)).welcome : null\n return { group: g.id, acceptDigest, vouches, welcome }\n },\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n const g = state.groups[p.group]\n const { invite, accept } = doc.payload.evidence\n if (Object.hasOwn(g.roster, accept.payload.accept.subject)) return { state: state as HolderState }\n const held = g.evidence[p.acceptDigest]\n const ev: Evidence = { invite, accept, vouches: mergeVouches(held?.vouches as Doc[] ?? [], p.vouches) as JsonObject[], at: held?.at ?? arr.when }\n if (p.welcome) {\n const a = admitted(state, g, p.acceptDigest, ev, arr.when)\n return { state: a.state, events: a.events, outbound: [draft(p.welcome)] }\n }\n // keyed by the accept: one decision per consent, vouches added up to 16 (3795)\n return { state: { ...state, groups: { ...state.groups, [g.id]: { ...g, evidence: { ...g.evidence, [p.acceptDigest]: ev } } } } }\n },\n})\n\n/** Vouches by distinct issuers, the held ones first, at most 16 (3805, 3795). */\nfunction mergeVouches (held: readonly Doc[], more: readonly Doc[]): Doc[] {\n const out = [...held]\n for (const v of more) if (out.length < 16 && !out.some((x) => x.issuer === v.issuer)) out.push(v)\n return out\n}\n\ntype VouchPrep = Refusal | { group: string, acceptDigest: string, vouch: Doc, relay: Sealed | null, welcome: Sealed | null }\n\nconst vouchDef: CommandDef<VouchInput, VouchPrep> = {\n human: true,\n async prepare (ctx, input) {\n const g = ctx.snapshot.groups[input?.groupId]\n if (!g || g.memberAnchor === undefined) return no('unknown-group')\n const held = Object.entries(g.evidence).find(([, e]) => (e.accept as Doc).payload.accept.subject === input.member)\n if (!held) return no('no-evidence')\n const [acceptDigest, ev] = held\n // the admitting member stands behind its admission already (the header)\n if ((ev.invite as Doc).payload.invite.issuer === g.memberAnchor) return no('own-admission')\n if ((ev.vouches as Doc[]).some((v) => v.issuer === g.memberAnchor)) return no('already-given')\n const at = iso(ctx.when)\n const body = vouchCredentialBody({ issuer: g.memberAnchor, subject: input.member, genesisDigest: g.id, accept: acceptDigest, provenance: input.provenance ?? 'met', validFrom: at })\n const vouch = await signDoc(ctx, g.memberLabel, g.memberAnchor, body, at)\n const inv = (ev.invite as Doc).payload.invite\n const to = g.roster[inv.issuer]\n if (!to) return no('no-evidence')\n const doc = {\n id: ctx.entropy.id('doc.id'), type: EVIDENCE_TYPE, issuer: g.memberAnchor, recipient: inv.issuer, threadId: (ev.accept as Doc).threadId, issuedAt: at,\n payload: { evidence: { invite: ev.invite, accept: ev.accept, vouches: [vouch] } },\n }\n const relay = await sealed(ctx, doc, { ...contactOfMember(to), rkid: rkidOf(ctx.snapshot, g.memberLabel) ?? '', keyAgreement: to.keyAgreement, anchor: to.anchor })\n return { group: g.id, acceptDigest, vouch, relay, welcome: null }\n },\n apply (state, prepared, input, when) {\n const p = prepared.value\n if (isRefusal(p)) return p\n const g = state.groups[p.group]\n const ev = g.evidence[p.acceptDigest]\n const next: Evidence = { ...ev, vouches: mergeVouches(ev.vouches as Doc[], [p.vouch]) as JsonObject[] }\n const events: EventDraft[] = [{ type: 'group.vouched', groupId: g.id, member: input.member }]\n if (p.welcome) {\n const a = admitted(state, g, p.acceptDigest, next, when)\n return { state: a.state, events: [...events, ...a.events], outbound: [draft(p.welcome)] }\n }\n return {\n state: { ...state, groups: { ...state.groups, [g.id]: { ...g, evidence: { ...g.evidence, [p.acceptDigest]: next } } } },\n events,\n outbound: p.relay ? [draft(p.relay)] : [],\n }\n },\n}\n\n// ── the welcome at the new member ──────────────────────────────────────\n\ninterface WelcomePayload { genesisDigest: string, group: string, name: string, genesis: Doc, vouchThreshold: string, accept: string, roster: WelcomeMember[] }\n\nconst isStr = (x: unknown): x is string => typeof x === 'string'\nconst welcomeShape = (p: unknown): p is WelcomePayload => {\n const x = p as Record<string, unknown>\n if (x === null || typeof x !== 'object') return false\n if (![x.genesisDigest, x.group, x.name, x.vouchThreshold, x.accept].every(isStr) || x.genesis === null || typeof x.genesis !== 'object' || !Array.isArray(x.roster)) return false\n if (!/^[1-9][0-9]?$/.test(x.vouchThreshold as string) || toU(x.genesisDigest) !== x.genesisDigest) return false\n return (x.roster as unknown[]).every((m) => {\n const e = m as Record<string, unknown>\n return e !== null && typeof e === 'object' && isStr(e.anchor) && isStr(e.op) && isStr(e.keyAgreement) && (e.name === undefined || isStr(e.name))\n })\n}\n\n/** A roster carries each member once: its anchors and its ops distinct\n * (one admission per member, one member per admission). No rule of\n * Membership 0.19 names it for this library's welcome form, so a repeat\n * is validation-failed without a ref. */\nconst rosterDistinct = (roster: readonly WelcomeMember[]): boolean =>\n new Set(roster.map((m) => m.anchor)).size === roster.length && new Set(roster.map((m) => m.op)).size === roster.length\n\n/** The welcome's roster as the holder materialises it, by member anchor:\n * the one map the re-match reads and the group commits. */\nconst welcomeRoster = (roster: readonly WelcomeMember[]): ReadonlyMap<string, WelcomeMember> => new Map(roster.map((m) => [m.anchor, m]))\n\n/** The invite this holder accepted whose welcome `doc` would be. */\nconst acceptedInvite = (state: Readonly<HolderState>, doc: Doc): ReceivedInvite | undefined =>\n Object.values(state.joining.invites).find((i) => i.status !== 'open' && i.status !== 'declined' &&\n (i.invite as Doc).payload.invite.issuer === doc.issuer && (i.invite as Doc).threadId === doc.threadId && i.group === doc.payload.genesisDigest)\n\nconst welcomeTask: TaskHandler<WelcomePayload, { hits: GroupStarRehit[] }> = {\n proof: 'required',\n decode: (p) => (!welcomeShape(p) ? refuse('malformed') : !rosterDistinct(p.roster) ? refuse('validation-failed') : p),\n // the welcome answers an invitation this holder accepted: in its thread,\n // from its inviter, to the member key of its group\n channel (state, doc, rkid): Channel | TaskRefusal {\n const i = acceptedInvite(state, doc)\n if (!i || state.addresses.keys[rkid]?.label !== i.memberLabel) return refuse('validation-failed')\n return { keyAgreement: (i.invite as Doc).payload.invite.credentialSubject.card.keyAgreement, contactId: i.contactId, via: i.rkid }\n },\n // the group stars already accepted are matched against the joined group (5520)\n async prepare (ctx, doc) {\n if (!(await diVerify(doc, doc.issuer, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-MT-2130')\n // the joined group as the welcome carries it: its roster, the oids naming the admissions\n const roster = welcomeRoster(doc.payload.roster)\n const membership: GroupMembership = {\n group: doc.payload.genesisDigest,\n isMember: (a) => roster.has(a),\n resolve: (oid) => { const e = [...roster.values()].find((m) => m.op === oid); return e ? { subject: e.anchor, keyAgreement: e.keyAgreement } : null },\n }\n return { hits: await groupStarRematch(ctx, membership) }\n },\n apply (state, p, doc, arr) {\n const i = acceptedInvite(state, doc)!\n const w = doc.payload\n if (Object.hasOwn(state.groups, w.genesisDigest)) return { state: state as HolderState }\n const own = w.roster.find((m) => m.anchor === doc.recipient)\n if (!own || !w.roster.some((m) => m.anchor === doc.issuer) || i.acceptDigest === undefined || own.op !== oidOf(i.acceptDigest) || !sameDigest(w.accept, i.acceptDigest)) {\n return refuse('validation-failed')\n }\n const roster: Record<string, RosterEntry> = {}\n for (const m of welcomeRoster(w.roster).values()) {\n roster[m.anchor] = { anchor: m.anchor, op: m.op, keyAgreement: m.keyAgreement, ...(m.name !== undefined ? { name: m.name } : {}), addedAt: arr.when, ...(m.anchor === doc.issuer ? { contactId: i.contactId, rkid: i.rkid } : {}) }\n }\n const g: Group = {\n id: w.genesisDigest, name: w.name, did: w.group, genesis: w.genesis as JsonObject, memberLabel: i.memberLabel, rules: { vouchThreshold: w.vouchThreshold },\n listed: true, memberAnchor: doc.recipient, memberOp: own.op, roster, invitations: {}, evidence: {}, preludes: {}, acceptDigest: i.acceptDigest,\n }\n return {\n state: withGroupHits({\n ...state, groups: { ...state.groups, [g.id]: g },\n joining: { ...state.joining, invites: { ...state.joining.invites, [i.credDigest]: { ...i, status: 'joined' } } },\n }, p.value.hits, g.id),\n events: [{ type: 'group.joined', groupId: g.id }],\n }\n },\n}\n\n// ── keys and retention ─────────────────────────────────────────────────\n\n/** The member keys still needed: held groups' and those on the way in\n * (an answered prelude, an invitation open or accepted). */\nfunction memberKeys (state: Readonly<HolderState>): string[] {\n const labels = new Set<string>(Object.values(state.groups).map((g) => g.memberLabel))\n for (const p of Object.values(state.joining.preludes)) labels.add(p.memberLabel)\n for (const i of Object.values(state.joining.invites)) if (i.status === 'open' || i.status === 'accepted') labels.add(i.memberLabel)\n const out = Object.entries(state.addresses.keys).filter(([, k]) => labels.has(k.label)).map(([rkid]) => rkid)\n // the tuple a held prelude travelled on: a chaining may deactivate it\n // while the prelude is open, and its answer, its acks and the invitation\n // bound to it still arrive under that key\n for (const g of Object.values(state.groups)) for (const p of Object.values(g.preludes)) out.push(p.rkid)\n for (const p of Object.values(state.joining.preludes)) out.push(p.rkid)\n return out\n}\n\nconst untilOf = (invite: Json): Millis => Date.parse((invite as Doc).payload.invite.validUntil)\n\n/** Bounded membership state (the header): what tick lets go. */\nfunction retainMembership (state: Readonly<HolderState>, when: Millis): HolderState {\n let changed = false\n const groups: Record<string, Group> = {}\n for (const [id, g] of Object.entries(state.groups)) {\n const invitations = Object.fromEntries(Object.entries(g.invitations).filter(([, i]) => i.validUntil + MEMBERSHIP_SKEW + HORIZON_MAX >= when))\n const evidence = Object.fromEntries(Object.entries(g.evidence).filter(([, e]) =>\n untilOf(e.invite) + MEMBERSHIP_SKEW + HORIZON_MAX >= when && !Object.hasOwn(g.roster, (e.accept as Doc).payload.accept.subject)))\n const preludes = Object.fromEntries(Object.entries(g.preludes).filter(([, p]) => p.at + INVITE_LIFE + MEMBERSHIP_SKEW + HORIZON_MAX >= when))\n const same = Object.keys(invitations).length === Object.keys(g.invitations).length && Object.keys(evidence).length === Object.keys(g.evidence).length &&\n Object.keys(preludes).length === Object.keys(g.preludes).length\n groups[id] = same ? g : { ...g, invitations, evidence, preludes }\n if (!same) changed = true\n }\n // the accept → admission → welcome chain: two deliveries, each within a give-up horizon\n const late = (i: ReceivedInvite): boolean => i.validUntil + MEMBERSHIP_SKEW + 2 * HORIZON_MAX < when\n const invites = Object.fromEntries(Object.entries(state.joining.invites).filter(([, i]) =>\n !(i.status === 'declined' || (i.status === 'open' && i.validUntil + MEMBERSHIP_SKEW < when) || ((i.status === 'accepted' || i.status === 'joined') && late(i)))))\n // an answered prelude no open or accepted invitation still rests on, past an invite's life and the horizon\n const rests = (p: Joining['preludes'][string]): boolean => Object.values(invites).some((i) => i.group === p.group && i.contactId === p.contactId && (i.status === 'open' || i.status === 'accepted'))\n const preludes = Object.fromEntries(Object.entries(state.joining.preludes).filter(([, p]) => rests(p) || p.at + INVITE_LIFE + MEMBERSHIP_SKEW + HORIZON_MAX >= when))\n if (Object.keys(invites).length !== Object.keys(state.joining.invites).length || Object.keys(preludes).length !== Object.keys(state.joining.preludes).length) changed = true\n return changed ? { ...state, groups, joining: { preludes, invites } } : state as HolderState\n}\n\n/** When retainMembership lets something go (the timer contract, engine.ts). */\nfunction membershipDeadlines (state: Readonly<HolderState>): Millis[] {\n const out: Millis[] = []\n for (const g of Object.values(state.groups)) {\n for (const i of Object.values(g.invitations)) out.push(i.validUntil + MEMBERSHIP_SKEW + HORIZON_MAX + 1)\n for (const e of Object.values(g.evidence)) out.push(untilOf(e.invite) + MEMBERSHIP_SKEW + HORIZON_MAX + 1)\n for (const p of Object.values(g.preludes)) out.push(p.at + INVITE_LIFE + MEMBERSHIP_SKEW + HORIZON_MAX + 1)\n }\n for (const i of Object.values(state.joining.invites)) {\n if (i.status === 'open') out.push(i.validUntil + MEMBERSHIP_SKEW + 1)\n if (i.status === 'accepted' || i.status === 'joined') out.push(i.validUntil + MEMBERSHIP_SKEW + 2 * HORIZON_MAX + 1)\n }\n for (const p of Object.values(state.joining.preludes)) out.push(p.at + INVITE_LIFE + MEMBERSHIP_SKEW + HORIZON_MAX + 1)\n return out\n}\n\n/** The membership module createHolder registers. */\nexport function membershipModule (): HolderModule {\n return Object.freeze({\n name: 'membership',\n commands: Object.freeze({\n [MEMBERSHIP_COMMANDS.found]: foundDef,\n [MEMBERSHIP_COMMANDS.invite]: inviteDef,\n [MEMBERSHIP_COMMANDS.vouch]: vouchDef,\n }),\n tasks: Object.freeze({\n [PRELUDE_REQUEST_TYPE]: preludeRequestTask,\n [PRELUDE_REPLY_TYPE]: preludeReplyTask,\n [INVITE_TYPE]: inviteTask,\n [ACCEPT_TYPE]: acceptTask,\n [EVIDENCE_TYPE]: evidenceTask('payload-membership-evidence.schema.json'),\n [EVIDENCE_TYPE_01]: evidenceTask('payload-membership-evidence-0.1.schema.json'),\n [WELCOME_TYPE]: welcomeTask,\n }),\n decisions: Object.freeze({ 'group-invite': acceptDecision }),\n keepKeys: memberKeys,\n retain: retainMembership,\n deadlines: membershipDeadlines,\n })\n}\n"]}
|
|
1
|
+
{"version":3,"file":"holder.js","sourceRoot":"","sources":["../../src/membership/holder.ts"],"names":[],"mappings":"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","sourcesContent":["// membership/holder — groups on the holder (lib Stage 2, PR 7a; Membership\n// Tasks 0.20 on Access 0.57, Delivery 0.82): founding, the prelude and\n// the invite, the accept, admission and welcome, evidence and vouches, on\n// HolderState and the engine. The pure forms and checks are the root\n// module's (membership.ts).\n//\n// What it registers (membershipModule):\n// human acts membership.found a group founded under a fresh pair\n// label, its genesis signed (Access 3.4.1:\n// that context is the founder's member\n// anchor, its memberOp the genesis)\n// membership.invite the prelude toward a contact (Membership\n// 3.5); the invite follows its answer\n// membership.vouch a vouch@2 for a held consent pair\n// (Access 5.3), relayed as evidence\n// decision group-invite: accept signs and sends the accept (3.2),\n// decline closes\n// tasks membership-invite/0.2 (proof absent), membership-accept/0.2\n// (proof required), membership-evidence/0.2 and /0.1 (proof\n// absent): channel bindings on member keys (receive.ts);\n// membership-prelude-request/0.1 and membership-prelude-\n// reply/0.1 (proof required, tuple binding; Membership 3.5),\n// and x-membership-welcome/0.1 (channel binding), this\n// library's experimental form; all signature-class: signed acks\n// keepKeys the member keys of held groups and of groups on the way in,\n// and the tuple rkid of every prelude sent and held, and of an\n// answered one while its answer may still travel\n// retain declined and expired invitations leave `joining`; a\n// binding once its relationship ended and no open or accepted\n// invitation rests on it (RLTP-MT-3945)\n//\n// Choices this file makes where spec and note leave them open:\n// - the prelude (Membership 3.5) travels over the relationship tuple as\n// its two registered types; the invitee's holder answers on its own\n// (3960), registering its member label and key first (Identity 6.1),\n// with a displayed member card (2.6) whose key the invite is sealed\n// to. An answer is taken only on a thread whose request this holder\n// sent and still holds, on its tuple (3965)\n// - the welcome: Membership 3.3 carries it in access-operation/0.1 with\n// a member.add envelope and a sealed rltp-welcome/0.1 (Section 4),\n// Access's materialization deciding; until the Access envelope is\n// built here, the admitting member sends x-membership-welcome/0.1,\n// signed under its member anchor: the group's name, DID, genesis, rules\n// and the roster it holds, the new member's entry naming its admission\n// by the accept's document digest (its memberOp). Replication of the\n// roster beyond that is the Access port's. Operation ids: the founder's\n// memberOp is the genesis's oid (the genesis digest's SHA-256, Access\n// 3.3), a member's the oid of its accept document's digest (a member admitted later is\n// unknown to earlier members until their port materializes it)\n// - the admission without a human act at the admitting member: the\n// invitation stands as the inviter's act of admission (RLTP-MT-3282),\n// so the accept (n = 1) or the evidence that completes the vouches\n// admits in the same commit — before invite.validUntil +\n// membership-skew + the longest give-up horizon by the inviter's\n// clock; later the consent stays as evidence (an admission prompt is\n// not built)\n// - founding: the genesis admits under the rule of one (vouchThreshold\n// \"1\"); a stricter rule needs policy.change, which is not built, so\n// found refuses another (threshold-unsupported). A member's own vouch\n// for its own invitee never counts beside its admission and is refused\n// (own-admission)\n// - the prelude is bound both ways: the request names the inviter's\n// member anchor and the answering holder keeps the binding under\n// (genesis digest, inviter) with the arrival tuple (3925), so an invite\n// surfaces as the contact that asked as that inviter; the inviter files its request by thread\n// (group, contact, own rkid) and takes an answer only for exactly that\n// group on exactly that thread and tuple\n// - invitations are kept per thread: a new invite opens its own thread\n// beside earlier ones, so an accept signed in time on an earlier thread\n// still answers it; an accept answers exactly the invitation of its\n// thread, and an admission answers every invitation to its subject\n// - the lock keys of 3950–3957 and 3980: the engine serializes every\n// operation of a holder and commits by CAS over the whole state\n// (receive.ts), a superset of every key the rules name\n// - bounded state (tick): an issued invitation leaves past validUntil +\n// membership-skew + the longest give-up horizon (P90D, RLTP-MT-3090),\n// as does evidence (an accept signed in time may arrive that late), or\n// once its subject is on the roster; an outgoing prelude past an\n// invite's life and the horizon (its answer may travel that long); an\n// answered prelude's binding once its relationship ended and no open\n// or accepted invitation rests on it (3945); an accepted or joined invitation past\n// validUntil + skew + two horizons — the accept's delivery and the\n// welcome's — so the welcome finds the accepted state and the member\n// key (kept while an invitation is open or accepted); an explicit abort\n// is not built. A member key leaving keepKeys leaves `addresses`\n// without a tombstone (an identity context, engine.ts tick), so a later\n// invitation to the same group derives and uses the same key again\n// - the prelude request proves its claimed inviter: a binding signed\n// under the inviter's member key over (anchor, group, thread, and both\n// pair anchors of the channel it travels on, checked against the\n// document's issuer and recipient as stage 8 authenticated them), so\n// no other contact can replay it on its own channel (3905, 3910); the\n// answering holder keeps one binding per relationship (3930, 3935):\n// a request from another relationship is refused while the bound one\n// is current, whichever entries they feed. Residue: the binding links the inviter's member\n// anchor to its pair channel transferably (the invite names that\n// anchor before consent anyway)\n// - the admission policy: the group rule vouchThreshold n reads as the\n// `vouch` rule of member.add (Access 4.2) counting the admitting\n// member: n distinct members stand behind an admission, the admitting\n// member one of them, the others by vouch@2 credentials whose issuer\n// is on its roster. n = 1 admits on the accept. Only the inviter (the\n// holder that recorded the accept) admits; with n > 1 it relays the\n// consent pair as membership-evidence/0.2 to the other members on its\n// roster (candidacy false still permits this silent relay, 3250), and\n// a member's vouch travels back to it as evidence with its vouch\n// - membership-evidence: Delivery §4.4 still lists membership-evidence/\n// 0.1; Membership 0.19 registers /0.2 and keeps /0.1 receivable\n// (3815): both are registered here, /0.2 is the one issued (a gap to\n// close in Delivery 0.82). A relayer this holder does not have on its\n// roster cannot be acknowledged (its key is unknown): validation-failed\n// where 3750 has the pending disposition incomplete(missing:\n// group-state), which this engine does not have\n// - the accept's candidacy is false (the decision carries only accept\n// or decline); surfacing a candidacy (3765) is not built\n// - the in-library Access (localAccess): where createHolder gets no\n// Access port, every preparation sees one over its own snapshot's\n// `groups`, so a group star opens between members whose rosters the\n// holder holds: isMember by the roster, resolve(oid) by the roster\n// entry whose op it is (its member anchor and card key)\n// - a member group is listed in the group star (5420: listed unless\n// switched off)\nimport { b64uOf, fromB64u, iso, sameDigest, toU } from '../core.js'\nimport type { Json, JsonObject } from '../core.js'\nimport { anchorOfEd, diSignWith, diVerify, digestBytes, digestDoc } from '../crypto.js'\nimport { seal } from '../delivery.js'\nimport { cardBody } from '../encounter.js'\nimport {\n ACCEPT_TYPE, EVIDENCE_TYPE, EVIDENCE_TYPE_01, INVITE_TYPE, MEMBERSHIP_SKEW, PRELUDE_REPLY_TYPE, PRELUDE_REQUEST_TYPE, acceptProblem, enclosedCardOk, evidenceProblem,\n inviteCredentialBody, inviteProblem, inviterBindingBody, memberLabelOf, membershipSchemaOk, oidOf, preludeRequestProblem, vouchCredentialBody, vouchProblem, withinBudget,\n} from '../membership.js'\nimport { withLabel, withPairNonce } from '../identity-state.js'\nimport { ED_PKCS8 } from '../keys-seed.js'\nimport { tupleByRkid } from '../receive.js'\nimport type { Channel, TaskRefusal } from '../receive.js'\nimport type { Applied, CommandDef, DecisionDef, EventDraft, HolderModule, OutboundDraft, PrepareCtx, Refusal, TaskHandler } from '../engine.js'\nimport type { Access, GroupAccess, Recipient } from '../ports.js'\nimport type { Evidence, Group, HolderState, Joining, Millis, OpenInvitation, Prompt, ReceivedInvite, RosterEntry } from '../state.js'\nimport { INVITE_RATE, blockedRel, rateCount, relOfRkid, withRate } from '../message/holder.js'\nimport { entryOf, findContact, liveRel, activeTuple } from '../trust/state.js'\nimport { groupStarRematch, withGroupHits } from '../trust/group-star.js'\nimport type { GroupStarRehit } from '../trust/group-star.js'\nimport type { GroupMembership } from '../group-star.js'\n\nconst TT = 'https://real-life.org/trust-tasks/'\n/** This library's experimental form of the welcome (receive.ts SIGNATURE_CLASS). */\nexport const WELCOME_TYPE = TT + 'x-membership-welcome/0.1'\nexport { INVITE_TYPE, ACCEPT_TYPE, EVIDENCE_TYPE, PRELUDE_REQUEST_TYPE, PRELUDE_REPLY_TYPE }\n\n/** How long an invite is answerable (validUntil − validFrom), as the probe had it. */\nexport const INVITE_LIFE = 24 * 3_600_000\n/** The longest give-up horizon (Delivery [P1D, P90D]): what late answers may still need (RLTP-MT-3090). */\nconst HORIZON_MAX = 90 * 86_400_000\n\nexport const MEMBERSHIP_COMMANDS = Object.freeze({\n found: 'membership.found',\n invite: 'membership.invite',\n vouch: 'membership.vouch',\n})\n\nexport interface FoundInput { name: string, vouchThreshold?: string, listed?: boolean }\nexport interface InviteInput { groupId: string, contactId: string }\nexport interface VouchInput { groupId: string, member: string, provenance?: 'met' | 'introduced' }\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>\n\nconst sealWith = (ctx: PrepareCtx, doc: unknown, keyAgreement: string) =>\n seal(doc as Json, keyAgreement, { ephSeed: ctx.entropy.bytes('seal.eph', 32), nonce: ctx.entropy.bytes('seal.nonce', 12) }, ctx.crypto.subtle)\nconst signer = (ctx: PrepareCtx, label: string) => (b: Uint8Array) => ctx.keys.sign(label, b)\nconst signDoc = async <T extends Record<string, any>> (ctx: PrepareCtx, label: string, anchor: string, doc: T, at: string) =>\n diSignWith(anchor, signer(ctx, label), doc, at, ctx.crypto.subtle)\n\n/** A sealed document ready for the outbox. */\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\nasync function sealed (ctx: PrepareCtx, doc: Doc, recipient: Recipient): Promise<Sealed> {\n return { digest: await digestDoc(doc, ctx.crypto.subtle), envelope: await sealWith(ctx, doc, recipient.keyAgreement), threadId: doc.threadId, type: doc.type, recipient }\n}\n\n/** The own key-agreement id a label derives under, from `addresses`. */\nconst rkidOf = (state: Readonly<HolderState>, label: string): string | undefined =>\n Object.entries(state.addresses.keys).find(([, k]) => k.label === label)?.[0]\n\n/** A displayed member card (Membership 2.6): no challenge, no sentTo/boundTo/hints. */\nasync function memberCard (ctx: PrepareCtx, label: string, name: string | undefined, at: string): Promise<Json> {\n const me = await ctx.keys.anchorOf(label)\n const body = cardBody(me, name !== undefined ? { name } : {})\n return await signDoc(ctx, label, me.anchor, body as unknown as Record<string, Json>, at) as unknown as Json\n}\n\nconst ownName = (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, 200).join('') : undefined\n}\n\nconst groupOfLabel = (state: Readonly<HolderState>, label: string | undefined): Group | undefined =>\n label === undefined ? undefined : Object.values(state.groups).find((g) => g.memberLabel === label)\n\n/** RLTP-MT-3282: the inviter admits on its own invitation without a\n * further human act only before invite.validUntil + membership-skew +\n * the longest give-up horizon, by its own clock; later, the admission\n * would wait for a human act, which this library does not offer — the\n * consent stays as evidence until its retention lets it go. */\nconst admissionOpen = (invite: Json, when: Millis): boolean => when < untilOf(invite) + MEMBERSHIP_SKEW + HORIZON_MAX\n\n/** The policy (see the header): admitted when vouchThreshold distinct\n * members stand behind it, the admitting member one of them. */\nfunction policyMet (g: Readonly<Group>, ev: Readonly<Evidence>): boolean {\n const backers = new Set<string>([g.memberAnchor ?? ''])\n for (const v of ev.vouches as Doc[]) if (Object.hasOwn(g.roster, v.issuer)) backers.add(v.issuer)\n return BigInt(backers.size) >= BigInt(g.rules.vouchThreshold)\n}\n\n// ── the in-library Access over the holder's own groups ─────────────────\n\nconst groupAccess = (g: Readonly<Group>): GroupAccess => Object.freeze({\n group: g.id,\n isMember: (a: string) => Object.hasOwn(g.roster, a),\n resolve: (oid: string) => {\n const e = Object.values(g.roster).find((x) => x.op === oid)\n return e ? { subject: e.anchor, keyAgreement: e.keyAgreement } : null\n },\n})\n\n/** An Access over one snapshot's `groups` (note §3 Access; the header). */\nexport function localAccess (state: Readonly<HolderState>): Access {\n return Object.freeze({\n memberships: async () => Object.values(state.groups).map(groupAccess),\n membership: async (id: string) => (Object.hasOwn(state.groups, id) ? groupAccess(state.groups[id]) : null),\n })\n}\n\n// ── founding (Access 3.4.1) ────────────────────────────────────────────\n\ninterface FoundPrep { label: string, nonce: string, rkid: string, anchor: string, did: string, genesis: Json, genesisDigest: string, keyAgreement: string, name?: string }\n\nconst foundDef: CommandDef<FoundInput, FoundPrep> = {\n human: true,\n async prepare (ctx, input) {\n if (typeof input?.name !== 'string' || !input.name.length) throw new TypeError('membership.found needs {name}')\n const S = ctx.crypto.subtle\n const n = ctx.entropy.bytes('founding.nonce', 32)\n const label = 'pair/' + await digestBytes(n, S)\n const me = await ctx.keys.anchorOf(label)\n // the group address: a probe mint until Identity names the group key's origin\n const k = await S.importKey('pkcs8', Uint8Array.from([...ED_PKCS8, ...ctx.entropy.bytes('group.seed', 32)]), { name: 'Ed25519' }, true, ['sign'])\n const did = anchorOfEd(fromB64u((await S.exportKey('jwk', k)).x!))\n const at = iso(ctx.when)\n const body = { type: 'group-genesis@probe', group: did, label: input.name, founder: me.anchor, issuedAt: at }\n const genesis = await signDoc(ctx, label, me.anchor, body, at) as unknown as Json\n return { label, nonce: b64uOf(n), rkid: me.keyAgreement, anchor: me.anchor, did, genesis, genesisDigest: await digestDoc(body, S), keyAgreement: me.keyAgreement, name: ownName(ctx.snapshot) }\n },\n apply (state, prepared, input, when) {\n const p = prepared.value\n if (state.register.labels.includes(p.label)) throw new Error('membership.found: the founding label is not fresh')\n if (Object.hasOwn(state.groups, p.genesisDigest)) throw new Error('membership.found: the genesis exists')\n const threshold = input.vouchThreshold ?? '1'\n if (!/^[1-9][0-9]?$/.test(threshold)) throw new TypeError('membership.found: vouchThreshold is a positive decimal')\n if (threshold !== '1') return no('threshold-unsupported')\n const group: Group = {\n id: p.genesisDigest, name: input.name, did: p.did, genesis: p.genesis as JsonObject, memberLabel: p.label, rules: { vouchThreshold: threshold },\n listed: input.listed ?? true, memberAnchor: p.anchor, memberOp: oidOf(p.genesisDigest)!,\n roster: { [p.anchor]: { anchor: p.anchor, op: oidOf(p.genesisDigest)!, keyAgreement: p.keyAgreement, ...(p.name !== undefined ? { name: p.name } : {}), addedAt: when } },\n invitations: {}, evidence: {}, preludes: {},\n }\n return {\n state: {\n ...state,\n register: withPairNonce(state.register, p.label, p.nonce),\n addresses: { ...state.addresses, keys: { ...state.addresses.keys, [p.rkid]: { label: p.label, lastShown: when } } },\n groups: { ...state.groups, [group.id]: group },\n },\n events: [{ type: 'group.founded', groupId: group.id }],\n }\n },\n}\n\n// ── the prelude (Membership 1.2) ───────────────────────────────────────\n\n/** The live active tuple toward a contact, with its 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\nconst inviteDef: CommandDef<InviteInput, Refusal | Sealed> = {\n human: true,\n async prepare (ctx, input) {\n const g = ctx.snapshot.groups[input?.groupId]\n if (!g || g.memberAnchor === undefined) return no('unknown-group')\n const ch = channelTo(ctx.snapshot, input.contactId)\n if (!ch) return no('no-own-channel')\n // no invitation toward a blocked relationship (Message Tasks 6410)\n if (blockedRel(ctx.snapshot, ch.rel.id)) return no('blocked', 'RLTP-MSG-6410')\n const own = await ctx.keys.anchorOf(ch.tuple.ownPairLabel)\n const at = iso(ctx.when)\n const body = {\n id: ctx.entropy.id('doc.id'), type: PRELUDE_REQUEST_TYPE, issuer: own.anchor, recipient: ch.tuple.counterpartAnchor,\n threadId: ctx.entropy.id('thread.id'), issuedAt: at, payload: { genesisDigest: g.id, group: g.did ?? '', name: g.name, inviter: g.memberAnchor, binding: {} as Doc },\n }\n // the inviter binding (RLTP-MT-3905): signed under the member anchor\n // over (inviter, genesis digest, thread, from, to)\n body.payload.binding = await signDoc(ctx, g.memberLabel, g.memberAnchor,\n inviterBindingBody({ inviter: g.memberAnchor, genesisDigest: g.id, threadId: body.threadId, from: own.anchor, to: ch.tuple.counterpartAnchor }), at)\n const doc = await signDoc(ctx, ch.tuple.ownPairLabel, own.anchor, body, at)\n return sealed(ctx, doc, { contactId: ch.contact.id, rkid: ch.tuple.rkid, keyAgreement: ch.tuple.counterpartKeyAgreement })\n },\n apply (state, prepared, input, when) {\n const p = prepared.value\n if (isRefusal(p)) return p\n const g = state.groups[input.groupId]\n const preludes = { ...g.preludes, [p.threadId]: { contactId: p.recipient.contactId, rkid: p.recipient.rkid, at: when } }\n return { state: { ...state, groups: { ...state.groups, [g.id]: { ...g, preludes } } }, outbound: [draft(p)] }\n },\n}\n\n/** The arrival tuple's own label and 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 ?? findContact(state, at.rel.contactId)?.id ?? at.rel.contactId, tuple: at.tuple } : null\n}\n\ninterface PreludeRequestPayload { genesisDigest: string, group: string, name: string, inviter: string, binding: Doc }\n\n/** An answered prelude's key: the group and the inviter that asked. */\nconst preludeKey = (group: string, inviter: string): string => `${group} ${inviter}`\n\nconst preludeRequestTask: TaskHandler<PreludeRequestPayload, { reply: Sealed, label: string, rkid: string }> = {\n proof: 'required',\n // stage 7: the payload schema (RLTP-MT-3905)\n decode (p) {\n if (!membershipSchemaOk('payload-membership-prelude-request.schema.json', p)) return refuse('malformed', 'RLTP-MT-3905')\n return memberLabelOf((p as PreludeRequestPayload).genesisDigest) === null ? refuse('validation-failed') : p as PreludeRequestPayload\n },\n async prepare (ctx, doc, arr) {\n // the document proof under its issuer, the binding's fields (genesis\n // digests by their decoded bytes) and its proof under the inviter\n // (RLTP-MT-3905, 3910); the issuer and recipient are the arrival\n // tuple's pair anchors by the core's tuple binding (receive.ts)\n const bad = await preludeRequestProblem(doc, ctx.crypto.subtle)\n if (bad) return refuse('validation-failed', bad === 'documentProof' ? 'RLTP-MT-3900' : 'RLTP-MT-3905')\n const a = arrival(ctx.snapshot, arr.rkid)!\n const label = memberLabelOf(doc.payload.genesisDigest)!\n const member = await ctx.keys.anchorOf(label)\n const at = iso(ctx.when)\n const card = await memberCard(ctx, label, ownName(ctx.snapshot), at)\n const own = await ctx.keys.anchorOf(a.label)\n const body = {\n id: ctx.entropy.id('doc.id'), type: PRELUDE_REPLY_TYPE, issuer: own.anchor, recipient: doc.issuer, threadId: doc.threadId, issuedAt: at,\n payload: { genesisDigest: doc.payload.genesisDigest, card },\n }\n const reply = await sealed(ctx, await signDoc(ctx, a.label, own.anchor, body, at), { contactId: a.contactId, rkid: arr.rkid, keyAgreement: a.tuple.counterpartKeyAgreement })\n return { reply, label, rkid: member.keyAgreement }\n },\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n const a = arrival(state, arr.rkid)!\n // the binding per relationship (RLTP-MT-3925–3935): a request under a\n // held key from a tuple of the bound tuple's relationship replaces the\n // tuple (3930); from another relationship it is refused while the bound\n // one is current, whatever entry either feeds (3935), and replaces the\n // binding once that one has ended. The relationships are read through\n // the tuples now (3940): a merge, a split or a chaining moves them\n const bound = state.joining.preludes[preludeKey(toU(doc.payload.genesisDigest)!, doc.payload.inviter)]\n const was = bound ? tupleByRkid(state, bound.rkid) : null\n const here = tupleByRkid(state, arr.rkid)!\n if (was && liveRel(was.rel) && was.rel.id !== here.rel.id) return refuse('validation-failed', 'RLTP-MT-3935')\n const keys = Object.hasOwn(state.addresses.keys, p.rkid) ? state.addresses.keys : { ...state.addresses.keys, [p.rkid]: { label: p.label, lastShown: arr.when } }\n return {\n state: {\n ...state,\n // the member label in the register before its anchor is shown (Identity 6.1)\n register: withLabel(state.register, p.label),\n addresses: { ...state.addresses, keys },\n joining: { ...state.joining, preludes: { ...state.joining.preludes, [preludeKey(toU(doc.payload.genesisDigest)!, doc.payload.inviter)]: { group: toU(doc.payload.genesisDigest)!, inviter: doc.payload.inviter, contactId: a.contactId, rkid: arr.rkid, memberLabel: p.label, at: arr.when } } },\n },\n outbound: [draft(p.reply)],\n }\n },\n}\n\ninterface PreludeReplyPayload { genesisDigest: string, card: Doc }\n\nconst preludeReplyTask: TaskHandler<PreludeReplyPayload, Sealed & { invitee: string, credDigest: string, invite: Doc, validUntil: Millis }> = {\n proof: 'required',\n // stage 7: the payload schema (RLTP-MT-3960)\n decode (p) {\n return membershipSchemaOk('payload-membership-prelude-reply.schema.json', p) ? p as PreludeReplyPayload : refuse('malformed', 'RLTP-MT-3960')\n },\n async prepare (ctx, doc, arr) {\n const s = ctx.snapshot\n if (!(await diVerify(doc, doc.issuer, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-MT-3960')\n // the answer to exactly the prelude this holder sent and still holds:\n // its group (genesis digests by their decoded bytes), thread and tuple (3965)\n const g = s.groups[toU(doc.payload.genesisDigest) ?? '']\n const asked = g?.preludes[doc.threadId]\n if (!g || g.memberAnchor === undefined || !asked || asked.rkid !== arr.rkid) return refuse('validation-failed', 'RLTP-MT-3965')\n const card = doc.payload.card\n if (!(await enclosedCardOk(card, card.anchor, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-MT-3960')\n const a = arrival(s, arr.rkid)!\n const S = ctx.crypto.subtle\n const at = iso(ctx.when)\n const until = ctx.when + INVITE_LIFE\n const threadId = ctx.entropy.id('thread.id')\n const inviterCard = await memberCard(ctx, g.memberLabel, ownName(s), at)\n const cred = inviteCredentialBody({\n issuer: g.memberAnchor, invitee: card.anchor, group: g.did ?? '', genesisDigest: g.id, card: inviterCard, name: g.name,\n validFrom: at, validUntil: iso(until), taskContext: threadId,\n })\n const invite = await signDoc(ctx, g.memberLabel, g.memberAnchor, cred, at)\n const inviteDoc = { id: ctx.entropy.id('doc.id'), type: INVITE_TYPE, issuer: g.memberAnchor, recipient: card.anchor, threadId, issuedAt: at, payload: { invite } }\n if (!membershipSchemaOk('payload-membership-invite.schema.json', inviteDoc.payload) || !withinBudget(inviteDoc)) return refuse('validation-failed', 'RLTP-MT-2220')\n const out = await sealed(ctx, inviteDoc, { contactId: a.contactId, rkid: rkidOf(s, g.memberLabel) ?? '', keyAgreement: card.keyAgreement, anchor: card.anchor, via: arr.rkid })\n return { ...out, invitee: card.anchor, credDigest: await digestDoc(invite, S), invite: inviteDoc, validUntil: until }\n },\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n const g = state.groups[toU(doc.payload.genesisDigest)!]\n const preludes = { ...g.preludes }\n delete preludes[doc.threadId]\n // under a block of the relationship the reply arrives on: the waiting\n // prelude closes, acknowledged, and no invitation is issued or sent —\n // one transaction with the block check (RLTP-MT-3975, 3980)\n const rel = relOfRkid(state, arr.rkid)\n if (rel !== null && blockedRel(state, rel)) return { state: { ...state, groups: { ...state.groups, [g.id]: { ...g, preludes } } } }\n // a member is not invited again; every invitation is its own thread,\n // kept beside earlier ones (an accept signed in time may still travel)\n if (Object.hasOwn(g.roster, p.invitee)) return { state: { ...state, groups: { ...state.groups, [g.id]: { ...g, preludes } } } }\n if (!p.recipient.rkid) throw new Error(`membership: no address key for ${g.memberLabel}`)\n const inv = { invitee: p.invitee, keyAgreement: p.recipient.keyAgreement, contactId: p.recipient.contactId, rkid: arr.rkid, threadId: p.threadId, credDigest: p.credDigest, invite: p.invite as JsonObject, validUntil: p.validUntil }\n return {\n state: { ...state, groups: { ...state.groups, [g.id]: { ...g, preludes, invitations: { ...g.invitations, [p.threadId]: inv } } } },\n outbound: [draft(p)],\n }\n },\n}\n\n// ── the invite at the invitee (Membership 3.1) ─────────────────────────\n\nconst invitePromptId = (credDigest: string): string => 'invite:' + credDigest\n\n/** The invitation's attribution (RLTP-MT-3100): the relationship of the\n * prelude binding held for its genesis digest and issuer, read through\n * the binding's tuple now (3940), or none. */\nfunction attribution (state: Readonly<HolderState>, inv: Doc): { pre: Joining['preludes'][string], relId: string } | null {\n const pre = state.joining.preludes[preludeKey(toU(inv.credentialSubject.genesisDigest) ?? '', inv.issuer)]\n const relId = pre ? relOfRkid(state, pre.rkid) : null\n return pre && relId !== null ? { pre, relId } : null\n}\n\n/** Whether the holder holds the credential digest in any record (3105):\n * surfaced, declined, or a received invitation. */\nconst knownInvite = (state: Readonly<HolderState>, credDigest: string): boolean =>\n state.joining.surfaced.includes(credDigest) || state.joining.declined.includes(credDigest) || Object.hasOwn(state.joining.invites, credDigest)\n\nconst sortedWith = (xs: readonly string[], x: string): string[] => (xs.includes(x) ? [...xs] : [...xs, x].sort())\n\nconst inviteTask: TaskHandler<Doc, { credDigest: string }> = {\n proof: 'absent',\n decode: (p) => (membershipSchemaOk('payload-membership-invite.schema.json', p) ? p as Doc : refuse('malformed')),\n // the prelude check (3030): the invite reaches the key of the own\n // derivation from its genesis digest. The ack is sealed to the inviter's\n // card and filed under the contact of the binding's relationship, or\n // under the member where no binding attributes it (3100)\n channel (state, doc, rkid): Channel | TaskRefusal {\n const inv = doc.payload.invite\n const label = memberLabelOf(inv.credentialSubject.genesisDigest)\n if (label === null || state.addresses.keys[rkid]?.label !== label) return refuse('validation-failed', 'RLTP-MT-3030')\n const at = attribution(state, inv)\n return at\n ? { keyAgreement: inv.credentialSubject.card.keyAgreement, contactId: at.pre.contactId, via: at.pre.rkid }\n : { keyAgreement: inv.credentialSubject.card.keyAgreement, contactId: 'member:' + inv.issuer }\n },\n async prepare (ctx, doc) {\n const bad = await inviteProblem(doc, ctx.crypto.subtle)\n if (bad) return refuse('validation-failed', bad)\n const credDigest = await digestDoc(doc.payload.invite, ctx.crypto.subtle)\n // the rate (3105, Message Tasks 4115): a digest new to the holder, on a\n // relationship that accepted 20 new ones in the window, counted before\n // the block, waits at its carrier: failed(rate-limited) at stage 8,\n // nothing committed (Delivery RLTP-DEL-6270); a known digest never\n // counts and is never refused by it\n const s = ctx.snapshot\n const at = attribution(s, doc.payload.invite)\n if (at && !knownInvite(s, credDigest) && rateCount(s, at.relId, 'invites', ctx.when) >= INVITE_RATE) return refuse('rate-limited', 'RLTP-MT-3105')\n return { credDigest }\n },\n // the defined effect (3095): durable buffering and the surfacing\n // decision, in one transaction under the credential digest's key (3110;\n // the engine serializes the whole state, receive.ts): exactly one of\n // decline, surface, or no new effect\n apply (state, prepared, doc, arr) {\n const inv = doc.payload.invite\n const gd = toU(inv.credentialSubject.genesisDigest)!\n const { credDigest } = prepared.value\n const at = attribution(state, inv)\n // the rate counts the new digest before the block is applied (3105, Message Tasks 4130)\n let next: HolderState = at && !knownInvite(state, credDigest) ? withRate(state, at.relId, 'invites', arr.when) : state as HolderState\n // decline under a block (3115, Message Tasks 6.4): the register holds\n // the digest, an open prompt of it closes as declined, silently\n if (at && blockedRel(state, at.relId)) {\n const promptId = invitePromptId(credDigest)\n const prompts = { ...next.prompts }\n delete prompts[promptId]\n const held = next.joining.invites[credDigest]\n const invites = held && held.status === 'open' ? { ...next.joining.invites, [credDigest]: { ...held, status: 'declined' as const } } : next.joining.invites\n return { state: { ...next, prompts, joining: { ...next.joining, invites, declined: sortedWith(next.joining.declined, credDigest) } } }\n }\n // no new effect: the register holds it (3120), or it surfaced before\n // (3125). An invitation into a group the holder holds surfaces like any\n // other: 3125 names no exception, and the person decides\n if (next.joining.declined.includes(credDigest) || next.joining.surfaced.includes(credDigest) || Object.hasOwn(next.joining.invites, credDigest)) return { state: next }\n // surface (3125): a prompt opened, the digest kept for the holder's life (3130)\n const validUntil = Date.parse(inv.validUntil)\n const r: ReceivedInvite = {\n credDigest, group: gd, name: typeof inv.credentialSubject.name === 'string' ? inv.credentialSubject.name : '',\n ...(at ? { contactId: at.pre.contactId, rkid: at.pre.rkid } : {}),\n memberLabel: memberLabelOf(gd)!, invite: doc as unknown as JsonObject, promptId: invitePromptId(credDigest), validUntil, status: 'open', at: arr.when,\n }\n const prompt: Prompt = { id: r.promptId, kind: 'group-invite', ...(r.contactId !== undefined ? { contactId: r.contactId } : {}), groupId: gd, openedAt: arr.when, expiresAt: validUntil + MEMBERSHIP_SKEW }\n return {\n state: {\n ...next,\n joining: { ...next.joining, invites: { ...next.joining.invites, [credDigest]: r }, surfaced: sortedWith(next.joining.surfaced, credDigest) },\n prompts: { ...next.prompts, [prompt.id]: prompt },\n },\n events: [{ type: 'prompt.opened', promptId: prompt.id, kind: 'group-invite' }],\n }\n },\n}\n\n// ── the accept (Membership 3.2): the group-invite decision ─────────────\n\nconst inviteOfPrompt = (state: Readonly<HolderState>, promptId: string): ReceivedInvite | undefined =>\n Object.values(state.joining.invites).find((i) => i.promptId === promptId)\n\nconst acceptDecision: DecisionDef<(Sealed & { acceptDigest: string }) | Refusal | null> = {\n async prepare (ctx, prompt, choice) {\n if (choice !== 'accept') return null\n const r = inviteOfPrompt(ctx.snapshot, prompt.id)\n if (!r || r.status !== 'open') return no('unknown-group')\n const inv = (r.invite as Doc).payload.invite\n const me = await ctx.keys.anchorOf(r.memberLabel)\n const at = iso(ctx.when)\n const card = await memberCard(ctx, r.memberLabel, ownName(ctx.snapshot), at)\n const body = {\n id: ctx.entropy.id('doc.id'), type: ACCEPT_TYPE, issuer: me.anchor, recipient: inv.issuer, threadId: (r.invite as Doc).threadId, issuedAt: at,\n payload: { accept: { group: inv.credentialSubject.group, subject: me.anchor, ref: r.credDigest, card, candidacy: false } },\n }\n const doc = await signDoc(ctx, r.memberLabel, me.anchor, body, at)\n if (!withinBudget(doc)) return no('unknown-group', 'RLTP-MT-2220')\n const out = await sealed(ctx, doc, { contactId: r.contactId ?? 'member:' + inv.issuer, rkid: rkidOf(ctx.snapshot, r.memberLabel) ?? '', keyAgreement: inv.credentialSubject.card.keyAgreement, anchor: inv.issuer, ...(r.rkid !== undefined ? { via: r.rkid } : {}) })\n return { ...out, acceptDigest: await digestDoc(doc, ctx.crypto.subtle) }\n },\n apply (state, prompt, choice, when, prepared) {\n const r = inviteOfPrompt(state, prompt.id)\n if (!r) return { state: state as HolderState }\n if (choice === 'decline') return { state: { ...state, joining: { ...state.joining, invites: { ...state.joining.invites, [r.credDigest]: { ...r, status: 'declined' } } } } }\n const p = prepared.value\n if (p === null || isRefusal(p)) return p ?? no('unknown-group')\n if (when > r.validUntil + MEMBERSHIP_SKEW) return no('prompt-expired', 'RLTP-MT-3270')\n if (!p.recipient.rkid) throw new Error(`membership: no address key for ${r.memberLabel}`)\n return {\n state: { ...state, joining: { ...state.joining, invites: { ...state.joining.invites, [r.credDigest]: { ...r, status: 'accepted', acceptDigest: p.acceptDigest } } } },\n outbound: [draft(p)],\n }\n },\n}\n\n// ── admission at the inviter ───────────────────────────────────────────\n\ninterface WelcomeMember { anchor: string, op: string, keyAgreement: string, name?: string }\n\n/** The welcome (this library's form, see the header) and, for n > 1, the\n * evidence relays to the other members. */\nasync function admissionDocs (ctx: PrepareCtx, g: Readonly<Group>, ev: Readonly<Evidence>, acceptDigest: string, admit: boolean): Promise<{ welcome: Sealed | null, relays: Sealed[] }> {\n const acc = (ev.accept as Doc).payload.accept\n const at = iso(ctx.when)\n const entry = rosterEntryOf(acc, acceptDigest, ctx.when, undefined)\n if (admit) {\n const roster: WelcomeMember[] = [...Object.values(g.roster), entry].map((m) => ({ anchor: m.anchor, op: m.op, keyAgreement: m.keyAgreement, ...(m.name !== undefined ? { name: m.name } : {}) }))\n const body = {\n id: ctx.entropy.id('doc.id'), type: WELCOME_TYPE, issuer: g.memberAnchor!, recipient: acc.subject, threadId: (ev.accept as Doc).threadId, issuedAt: at,\n payload: { genesisDigest: g.id, group: g.did ?? '', name: g.name, genesis: g.genesis ?? {}, vouchThreshold: g.rules.vouchThreshold, accept: acceptDigest, roster },\n }\n const doc = await signDoc(ctx, g.memberLabel, g.memberAnchor!, body, at)\n return { welcome: await sealed(ctx, doc, { ...contactOfInvitation(g, acc.subject), rkid: rkidOf(ctx.snapshot, g.memberLabel) ?? '', keyAgreement: acc.card.keyAgreement, anchor: acc.subject }), relays: [] }\n }\n const relays: Sealed[] = []\n for (const m of Object.values(g.roster)) {\n if (m.anchor === g.memberAnchor || m.anchor === acc.subject) continue\n const body = {\n id: ctx.entropy.id('doc.id'), type: EVIDENCE_TYPE, issuer: g.memberAnchor!, recipient: m.anchor, threadId: (ev.accept as Doc).threadId, issuedAt: at,\n payload: { evidence: { invite: ev.invite, accept: ev.accept } },\n }\n relays.push(await sealed(ctx, body, { ...contactOfMember(m), rkid: rkidOf(ctx.snapshot, g.memberLabel) ?? '', keyAgreement: m.keyAgreement, anchor: m.anchor }))\n }\n return { welcome: null, relays }\n}\n\n/** The invitation of a thread to a subject (Membership 3.2: the accept answers the invite of its thread). */\nconst invitationOf = (g: Readonly<Group>, threadId: string, subject: string) => {\n const i = Object.hasOwn(g.invitations, threadId) ? g.invitations[threadId] : undefined\n return i && i.invitee === subject ? i : undefined\n}\n/** The contact an invitee was invited as, with the tuple its prelude went on (Recipient.via). */\nconst contactOfInvitation = (g: Readonly<Group>, subject: string): { contactId: string, via?: string } => {\n const i = Object.values(g.invitations).find((x) => x.invitee === subject)\n return i ? { contactId: i.contactId, via: i.rkid } : { contactId: 'member:' + subject }\n}\n/** A member as a recipient's contact: the contact it is known as, with its tuple (Recipient.via). */\nconst contactOfMember = (m: Readonly<RosterEntry>): { contactId: string, via?: string } =>\n (m.contactId !== undefined ? { contactId: m.contactId, ...(m.rkid !== undefined ? { via: m.rkid } : {}) } : { contactId: 'member:' + m.anchor })\n\nconst rosterEntryOf = (acc: Doc, acceptDigest: string, when: Millis, by: Readonly<OpenInvitation> | undefined): RosterEntry => ({\n anchor: acc.subject, op: oidOf(acceptDigest)!, keyAgreement: acc.card.keyAgreement,\n ...(typeof acc.card.name === 'string' ? { name: acc.card.name } : {}), addedAt: when, ...(by ? { contactId: by.contactId, rkid: by.rkid } : {}),\n})\n\n/** The admission's state: the roster grows, the evidence and the invitation go. */\nfunction admitted (state: Readonly<HolderState>, g: Readonly<Group>, acceptDigest: string, ev: Readonly<Evidence>, when: Millis): { state: HolderState, events: EventDraft[] } {\n const acc = (ev.accept as Doc).payload.accept\n // the contact the member was invited as, on the tuple its prelude went on\n const by = Object.values(g.invitations).find((i) => i.invitee === acc.subject)\n // every invitation to the now member is answered\n const invitations = Object.fromEntries(Object.entries(g.invitations).filter(([, i]) => i.invitee !== acc.subject))\n const evidence = { ...g.evidence }\n delete evidence[acceptDigest]\n const next: Group = { ...g, roster: { ...g.roster, [acc.subject]: rosterEntryOf(acc, acceptDigest, when, by) }, invitations, evidence }\n return { state: { ...state, groups: { ...state.groups, [g.id]: next } }, events: [{ type: 'group.admitted', groupId: g.id, member: acc.subject }] }\n}\n\ninterface AcceptPrep { group: string, acceptDigest: string, welcome: Sealed | null, relays: Sealed[] }\n\nconst acceptTask: TaskHandler<Doc, AcceptPrep> = {\n proof: 'required',\n decode: (p) => (membershipSchemaOk('payload-membership-accept.schema.json', p) ? p as Doc : refuse('malformed')),\n // to the member key that issued the invitation this accept answers\n channel (state, doc, rkid): Channel | TaskRefusal {\n const g = groupOfLabel(state, state.addresses.keys[rkid]?.label)\n const inv = g && invitationOf(g, doc.threadId, doc.issuer)\n if (!g || !inv) return refuse('validation-failed', 'RLTP-MT-3270')\n return { keyAgreement: doc.payload.accept.card.keyAgreement, contactId: inv.contactId, via: inv.rkid }\n },\n async prepare (ctx, doc, arr) {\n const g = groupOfLabel(ctx.snapshot, ctx.snapshot.addresses.keys[arr.rkid].label)!\n const inv = invitationOf(g, doc.threadId, doc.issuer)!\n const bad = await acceptProblem(doc, inv.invite, inv.credDigest, ctx.crypto.subtle)\n if (bad) return refuse('validation-failed', bad)\n const acceptDigest = await digestDoc(doc, ctx.crypto.subtle)\n const ev: Evidence = { invite: inv.invite, accept: doc as unknown as JsonObject, vouches: [], at: arr.when }\n const docs = await admissionDocs(ctx, g, ev, acceptDigest, policyMet(g, ev) && admissionOpen(inv.invite, arr.when))\n return { group: g.id, acceptDigest, ...docs }\n },\n // the defined effect: the consent recorded (3280); the admission where\n // the policy holds, else the pair relayed for vouches (the header)\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n const g = state.groups[p.group]\n const ev: Evidence = { invite: invitationOf(g, doc.threadId, doc.issuer)!.invite, accept: doc as unknown as JsonObject, vouches: [], at: arr.when }\n if (p.welcome) {\n const a = admitted(state, g, p.acceptDigest, ev, arr.when)\n return { state: a.state, events: a.events, outbound: [draft(p.welcome)] }\n }\n // the consent waits as evidence; the invitation stays until the\n // admission (its contact goes onto the roster then)\n return {\n state: { ...state, groups: { ...state.groups, [g.id]: { ...g, evidence: { ...g.evidence, [p.acceptDigest]: ev } } } },\n outbound: p.relays.map(draft),\n }\n },\n}\n\n// ── evidence (Membership 3.4) and vouches ──────────────────────────────\n\ninterface EvidencePrep { group: string, acceptDigest: string, vouches: Doc[], welcome: Sealed | null }\n\nconst evidenceTask = (schema: string): TaskHandler<Doc, EvidencePrep> => ({\n proof: 'absent',\n decode: (p) => (membershipSchemaOk(schema, p) ? p as Doc : refuse('malformed')),\n // 3745: this holder is a member of the pair's group; the relayer is on its roster\n channel (state, doc, rkid): Channel | TaskRefusal {\n const inv = doc.payload.evidence.invite.payload.invite\n const g = groupOfLabel(state, state.addresses.keys[rkid]?.label)\n if (!g || !sameDigest(g.id, inv.credentialSubject.genesisDigest)) return refuse('validation-failed', 'RLTP-MT-3755')\n const m = g.roster[doc.issuer]\n if (!m) return refuse('validation-failed', 'RLTP-MT-3750')\n return { keyAgreement: m.keyAgreement, ...contactOfMember(m) }\n },\n async prepare (ctx, doc, arr) {\n const { invite, accept, vouches = [] } = doc.payload.evidence\n const S = ctx.crypto.subtle\n const credDigest = await digestDoc(invite.payload.invite, S)\n const bad = await evidenceProblem(invite, accept, credDigest, S)\n if (bad) return refuse('validation-failed', bad)\n const acceptDigest = await digestDoc(accept, S)\n for (const v of vouches) {\n const vb = await vouchProblem(v, accept.payload.accept.subject, acceptDigest, invite.payload.invite.credentialSubject.genesisDigest, S)\n if (vb) return refuse('validation-failed', vb)\n }\n const g = groupOfLabel(ctx.snapshot, ctx.snapshot.addresses.keys[arr.rkid].label)!\n const held = g.evidence[acceptDigest]\n const merged = mergeVouches(held?.vouches as Doc[] ?? [], vouches)\n const ev: Evidence = { invite, accept, vouches: merged as JsonObject[], at: arr.when }\n // the inviter admits once the policy holds (the header)\n const admit = invite.payload.invite.issuer === g.memberAnchor && !Object.hasOwn(g.roster, accept.payload.accept.subject) && policyMet(g, ev) && admissionOpen(invite, arr.when)\n const welcome = admit ? (await admissionDocs(ctx, g, ev, acceptDigest, true)).welcome : null\n return { group: g.id, acceptDigest, vouches, welcome }\n },\n apply (state, prepared, doc, arr) {\n const p = prepared.value\n const g = state.groups[p.group]\n const { invite, accept } = doc.payload.evidence\n if (Object.hasOwn(g.roster, accept.payload.accept.subject)) return { state: state as HolderState }\n const held = g.evidence[p.acceptDigest]\n const ev: Evidence = { invite, accept, vouches: mergeVouches(held?.vouches as Doc[] ?? [], p.vouches) as JsonObject[], at: held?.at ?? arr.when }\n if (p.welcome) {\n const a = admitted(state, g, p.acceptDigest, ev, arr.when)\n return { state: a.state, events: a.events, outbound: [draft(p.welcome)] }\n }\n // keyed by the accept: one decision per consent, vouches added up to 16 (3795)\n return { state: { ...state, groups: { ...state.groups, [g.id]: { ...g, evidence: { ...g.evidence, [p.acceptDigest]: ev } } } } }\n },\n})\n\n/** Vouches by distinct issuers, the held ones first, at most 16 (3805, 3795). */\nfunction mergeVouches (held: readonly Doc[], more: readonly Doc[]): Doc[] {\n const out = [...held]\n for (const v of more) if (out.length < 16 && !out.some((x) => x.issuer === v.issuer)) out.push(v)\n return out\n}\n\ntype VouchPrep = Refusal | { group: string, acceptDigest: string, vouch: Doc, relay: Sealed | null, welcome: Sealed | null }\n\nconst vouchDef: CommandDef<VouchInput, VouchPrep> = {\n human: true,\n async prepare (ctx, input) {\n const g = ctx.snapshot.groups[input?.groupId]\n if (!g || g.memberAnchor === undefined) return no('unknown-group')\n const held = Object.entries(g.evidence).find(([, e]) => (e.accept as Doc).payload.accept.subject === input.member)\n if (!held) return no('no-evidence')\n const [acceptDigest, ev] = held\n // the admitting member stands behind its admission already (the header)\n if ((ev.invite as Doc).payload.invite.issuer === g.memberAnchor) return no('own-admission')\n if ((ev.vouches as Doc[]).some((v) => v.issuer === g.memberAnchor)) return no('already-given')\n const at = iso(ctx.when)\n const body = vouchCredentialBody({ issuer: g.memberAnchor, subject: input.member, genesisDigest: g.id, accept: acceptDigest, provenance: input.provenance ?? 'met', validFrom: at })\n const vouch = await signDoc(ctx, g.memberLabel, g.memberAnchor, body, at)\n const inv = (ev.invite as Doc).payload.invite\n const to = g.roster[inv.issuer]\n if (!to) return no('no-evidence')\n const doc = {\n id: ctx.entropy.id('doc.id'), type: EVIDENCE_TYPE, issuer: g.memberAnchor, recipient: inv.issuer, threadId: (ev.accept as Doc).threadId, issuedAt: at,\n payload: { evidence: { invite: ev.invite, accept: ev.accept, vouches: [vouch] } },\n }\n const relay = await sealed(ctx, doc, { ...contactOfMember(to), rkid: rkidOf(ctx.snapshot, g.memberLabel) ?? '', keyAgreement: to.keyAgreement, anchor: to.anchor })\n return { group: g.id, acceptDigest, vouch, relay, welcome: null }\n },\n apply (state, prepared, input, when) {\n const p = prepared.value\n if (isRefusal(p)) return p\n const g = state.groups[p.group]\n const ev = g.evidence[p.acceptDigest]\n const next: Evidence = { ...ev, vouches: mergeVouches(ev.vouches as Doc[], [p.vouch]) as JsonObject[] }\n const events: EventDraft[] = [{ type: 'group.vouched', groupId: g.id, member: input.member }]\n if (p.welcome) {\n const a = admitted(state, g, p.acceptDigest, next, when)\n return { state: a.state, events: [...events, ...a.events], outbound: [draft(p.welcome)] }\n }\n return {\n state: { ...state, groups: { ...state.groups, [g.id]: { ...g, evidence: { ...g.evidence, [p.acceptDigest]: next } } } },\n events,\n outbound: p.relay ? [draft(p.relay)] : [],\n }\n },\n}\n\n// ── the welcome at the new member ──────────────────────────────────────\n\ninterface WelcomePayload { genesisDigest: string, group: string, name: string, genesis: Doc, vouchThreshold: string, accept: string, roster: WelcomeMember[] }\n\nconst isStr = (x: unknown): x is string => typeof x === 'string'\nconst welcomeShape = (p: unknown): p is WelcomePayload => {\n const x = p as Record<string, unknown>\n if (x === null || typeof x !== 'object') return false\n if (![x.genesisDigest, x.group, x.name, x.vouchThreshold, x.accept].every(isStr) || x.genesis === null || typeof x.genesis !== 'object' || !Array.isArray(x.roster)) return false\n if (!/^[1-9][0-9]?$/.test(x.vouchThreshold as string) || toU(x.genesisDigest) !== x.genesisDigest) return false\n return (x.roster as unknown[]).every((m) => {\n const e = m as Record<string, unknown>\n return e !== null && typeof e === 'object' && isStr(e.anchor) && isStr(e.op) && isStr(e.keyAgreement) && (e.name === undefined || isStr(e.name))\n })\n}\n\n/** A roster carries each member once: its anchors and its ops distinct\n * (one admission per member, one member per admission). No rule of\n * Membership 0.19 names it for this library's welcome form, so a repeat\n * is validation-failed without a ref. */\nconst rosterDistinct = (roster: readonly WelcomeMember[]): boolean =>\n new Set(roster.map((m) => m.anchor)).size === roster.length && new Set(roster.map((m) => m.op)).size === roster.length\n\n/** The welcome's roster as the holder materialises it, by member anchor:\n * the one map the re-match reads and the group commits. */\nconst welcomeRoster = (roster: readonly WelcomeMember[]): ReadonlyMap<string, WelcomeMember> => new Map(roster.map((m) => [m.anchor, m]))\n\n/** The invite this holder accepted whose welcome `doc` would be. */\nconst acceptedInvite = (state: Readonly<HolderState>, doc: Doc): ReceivedInvite | undefined =>\n Object.values(state.joining.invites).find((i) => i.status !== 'open' && i.status !== 'declined' &&\n (i.invite as Doc).payload.invite.issuer === doc.issuer && (i.invite as Doc).threadId === doc.threadId && i.group === doc.payload.genesisDigest)\n\nconst welcomeTask: TaskHandler<WelcomePayload, { hits: GroupStarRehit[] }> = {\n proof: 'required',\n decode: (p) => (!welcomeShape(p) ? refuse('malformed') : !rosterDistinct(p.roster) ? refuse('validation-failed') : p),\n // the welcome answers an invitation this holder accepted: in its thread,\n // from its inviter, to the member key of its group\n channel (state, doc, rkid): Channel | TaskRefusal {\n const i = acceptedInvite(state, doc)\n if (!i || state.addresses.keys[rkid]?.label !== i.memberLabel) return refuse('validation-failed')\n return { keyAgreement: (i.invite as Doc).payload.invite.credentialSubject.card.keyAgreement, contactId: i.contactId ?? 'member:' + doc.issuer, ...(i.rkid !== undefined ? { via: i.rkid } : {}) }\n },\n // the group stars already accepted are matched against the joined group (5520)\n async prepare (ctx, doc) {\n if (!(await diVerify(doc, doc.issuer, ctx.crypto.subtle))) return refuse('validation-failed', 'RLTP-MT-2130')\n // the joined group as the welcome carries it: its roster, the oids naming the admissions\n const roster = welcomeRoster(doc.payload.roster)\n const membership: GroupMembership = {\n group: doc.payload.genesisDigest,\n isMember: (a) => roster.has(a),\n resolve: (oid) => { const e = [...roster.values()].find((m) => m.op === oid); return e ? { subject: e.anchor, keyAgreement: e.keyAgreement } : null },\n }\n return { hits: await groupStarRematch(ctx, membership) }\n },\n apply (state, p, doc, arr) {\n const i = acceptedInvite(state, doc)!\n const w = doc.payload\n if (Object.hasOwn(state.groups, w.genesisDigest)) return { state: state as HolderState }\n const own = w.roster.find((m) => m.anchor === doc.recipient)\n if (!own || !w.roster.some((m) => m.anchor === doc.issuer) || i.acceptDigest === undefined || own.op !== oidOf(i.acceptDigest) || !sameDigest(w.accept, i.acceptDigest)) {\n return refuse('validation-failed')\n }\n const roster: Record<string, RosterEntry> = {}\n for (const m of welcomeRoster(w.roster).values()) {\n roster[m.anchor] = { anchor: m.anchor, op: m.op, keyAgreement: m.keyAgreement, ...(m.name !== undefined ? { name: m.name } : {}), addedAt: arr.when, ...(m.anchor === doc.issuer && i.contactId !== undefined && i.rkid !== undefined ? { contactId: i.contactId, rkid: i.rkid } : {}) }\n }\n const g: Group = {\n id: w.genesisDigest, name: w.name, did: w.group, genesis: w.genesis as JsonObject, memberLabel: i.memberLabel, rules: { vouchThreshold: w.vouchThreshold },\n listed: true, memberAnchor: doc.recipient, memberOp: own.op, roster, invitations: {}, evidence: {}, preludes: {}, acceptDigest: i.acceptDigest,\n }\n return {\n state: withGroupHits({\n ...state, groups: { ...state.groups, [g.id]: g },\n joining: { ...state.joining, invites: { ...state.joining.invites, [i.credDigest]: { ...i, status: 'joined' } } },\n }, p.value.hits, g.id),\n events: [{ type: 'group.joined', groupId: g.id }],\n }\n },\n}\n\n// ── keys and retention ─────────────────────────────────────────────────\n\n/** The member keys still needed: held groups' and those on the way in\n * (an answered prelude, an invitation open or accepted). */\nfunction memberKeys (state: Readonly<HolderState>, when: Millis): string[] {\n const labels = new Set<string>(Object.values(state.groups).map((g) => g.memberLabel))\n for (const p of Object.values(state.joining.preludes)) labels.add(p.memberLabel)\n for (const i of Object.values(state.joining.invites)) if (i.status === 'open' || i.status === 'accepted') labels.add(i.memberLabel)\n const out = Object.entries(state.addresses.keys).filter(([, k]) => labels.has(k.label)).map(([rkid]) => rkid)\n // the tuple a held prelude travelled on: a chaining may deactivate it\n // while the prelude is open, and its answer, its acks and the invitation\n // bound to it still arrive under that key\n for (const g of Object.values(state.groups)) for (const p of Object.values(g.preludes)) out.push(p.rkid)\n // an answered prelude's tuple, while its answer and the acks may still\n // travel; the binding itself lives longer (3945) and needs no key\n for (const p of Object.values(state.joining.preludes)) if (p.at + INVITE_LIFE + MEMBERSHIP_SKEW + HORIZON_MAX >= when) out.push(p.rkid)\n return out\n}\n\nconst untilOf = (invite: Json): Millis => Date.parse((invite as Doc).payload.invite.validUntil)\n\n/** Bounded membership state (the header): what tick lets go. */\nfunction retainMembership (state: Readonly<HolderState>, when: Millis): HolderState {\n let changed = false\n const groups: Record<string, Group> = {}\n for (const [id, g] of Object.entries(state.groups)) {\n const invitations = Object.fromEntries(Object.entries(g.invitations).filter(([, i]) => i.validUntil + MEMBERSHIP_SKEW + HORIZON_MAX >= when))\n const evidence = Object.fromEntries(Object.entries(g.evidence).filter(([, e]) =>\n untilOf(e.invite) + MEMBERSHIP_SKEW + HORIZON_MAX >= when && !Object.hasOwn(g.roster, (e.accept as Doc).payload.accept.subject)))\n const preludes = Object.fromEntries(Object.entries(g.preludes).filter(([, p]) => p.at + INVITE_LIFE + MEMBERSHIP_SKEW + HORIZON_MAX >= when))\n const same = Object.keys(invitations).length === Object.keys(g.invitations).length && Object.keys(evidence).length === Object.keys(g.evidence).length &&\n Object.keys(preludes).length === Object.keys(g.preludes).length\n groups[id] = same ? g : { ...g, invitations, evidence, preludes }\n if (!same) changed = true\n }\n // the accept → admission → welcome chain: two deliveries, each within a give-up horizon\n const late = (i: ReceivedInvite): boolean => i.validUntil + MEMBERSHIP_SKEW + 2 * HORIZON_MAX < when\n const invites = Object.fromEntries(Object.entries(state.joining.invites).filter(([, i]) =>\n !(i.status === 'declined' || (i.status === 'open' && i.validUntil + MEMBERSHIP_SKEW < when) || ((i.status === 'accepted' || i.status === 'joined') && late(i)))))\n // a binding lives while the relationship of its tuple is current or an\n // invitation attributed to it is open or accepted (RLTP-MT-3945); tick\n // deletes it in its own serialized commit, deciding on the state it reads\n // there (3947)\n // an invitation rests on the binding of its key (genesis digest, inviter):\n // a renewal may have moved the binding to a newer tuple since (3930)\n const rests = (p: Joining['preludes'][string]): boolean => Object.values(invites).some((i) =>\n i.group === p.group && (i.invite as Doc).payload.invite.issuer === p.inviter && (i.status === 'open' || i.status === 'accepted'))\n const current = (p: Joining['preludes'][string]): boolean => { const t = tupleByRkid(state, p.rkid); return t !== null && liveRel(t.rel) }\n const preludes = Object.fromEntries(Object.entries(state.joining.preludes).filter(([, p]) => current(p) || rests(p)))\n if (Object.keys(invites).length !== Object.keys(state.joining.invites).length || Object.keys(preludes).length !== Object.keys(state.joining.preludes).length) changed = true\n return changed ? { ...state, groups, joining: { ...state.joining, preludes, invites } } : state as HolderState\n}\n\n/** When retainMembership lets something go (the timer contract, engine.ts). */\nfunction membershipDeadlines (state: Readonly<HolderState>): Millis[] {\n const out: Millis[] = []\n for (const g of Object.values(state.groups)) {\n for (const i of Object.values(g.invitations)) out.push(i.validUntil + MEMBERSHIP_SKEW + HORIZON_MAX + 1)\n for (const e of Object.values(g.evidence)) out.push(untilOf(e.invite) + MEMBERSHIP_SKEW + HORIZON_MAX + 1)\n for (const p of Object.values(g.preludes)) out.push(p.at + INVITE_LIFE + MEMBERSHIP_SKEW + HORIZON_MAX + 1)\n }\n for (const i of Object.values(state.joining.invites)) {\n if (i.status === 'open') out.push(i.validUntil + MEMBERSHIP_SKEW + 1)\n if (i.status === 'accepted' || i.status === 'joined') out.push(i.validUntil + MEMBERSHIP_SKEW + 2 * HORIZON_MAX + 1)\n }\n // an answered prelude's tuple key leaves keepKeys then (memberKeys)\n for (const p of Object.values(state.joining.preludes)) out.push(p.at + INVITE_LIFE + MEMBERSHIP_SKEW + HORIZON_MAX + 1)\n return out\n}\n\n/** The membership module createHolder registers. */\nexport function membershipModule (): HolderModule {\n return Object.freeze({\n name: 'membership',\n commands: Object.freeze({\n [MEMBERSHIP_COMMANDS.found]: foundDef,\n [MEMBERSHIP_COMMANDS.invite]: inviteDef,\n [MEMBERSHIP_COMMANDS.vouch]: vouchDef,\n }),\n tasks: Object.freeze({\n [PRELUDE_REQUEST_TYPE]: preludeRequestTask,\n [PRELUDE_REPLY_TYPE]: preludeReplyTask,\n [INVITE_TYPE]: inviteTask,\n [ACCEPT_TYPE]: acceptTask,\n [EVIDENCE_TYPE]: evidenceTask('payload-membership-evidence.schema.json'),\n [EVIDENCE_TYPE_01]: evidenceTask('payload-membership-evidence-0.1.schema.json'),\n [WELCOME_TYPE]: welcomeTask,\n }),\n decisions: Object.freeze({ 'group-invite': acceptDecision }),\n keepKeys: memberKeys,\n retain: retainMembership,\n deadlines: membershipDeadlines,\n })\n}\n"]}
|
package/dist/membership.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ export declare const ACCEPT_TYPE: string;
|
|
|
3
3
|
export declare const EVIDENCE_TYPE: string;
|
|
4
4
|
/** accepted under the same rules, never issued (RLTP-MT-3815) */
|
|
5
5
|
export declare const EVIDENCE_TYPE_01: string;
|
|
6
|
+
/** The prelude (Membership 3.5): the inviter's request and the invitee's reply. */
|
|
7
|
+
export declare const PRELUDE_REQUEST_TYPE: string;
|
|
8
|
+
export declare const PRELUDE_REPLY_TYPE: string;
|
|
9
|
+
/** The inviter binding's artifact type (RLTP-MT-3905). */
|
|
10
|
+
export declare const INVITER_BINDING_TYPE = "membership-inviter@1";
|
|
6
11
|
/** membership-skew, PT5M (Membership §5, RLTP-MT-5050), in ms. */
|
|
7
12
|
export declare const MEMBERSHIP_SKEW = 300000;
|
|
8
13
|
/** The membership size budget: JCS bytes of an invite or accept document (2.5). */
|
|
@@ -89,4 +94,30 @@ export declare const vouchCredentialBody: (f: {
|
|
|
89
94
|
export declare function vouchProblem(vouch: any, acceptSubject: string, acceptDigest: string, genesisDigest: string, subtle?: SubtleCrypto): Promise<string | null>;
|
|
90
95
|
/** The evidence pair's checks (RLTP-MT-3725), past the payload schema. */
|
|
91
96
|
export declare function evidenceProblem(invite: any, accept: any, credDigest: string, subtle?: SubtleCrypto): Promise<string | null>;
|
|
97
|
+
/** The unsigned inviter binding `membership-inviter@1` (RLTP-MT-3905):
|
|
98
|
+
* the inviter's member anchor, the group's genesis digest, and the
|
|
99
|
+
* request document's threadId, issuer (from) and recipient (to). */
|
|
100
|
+
export declare const inviterBindingBody: (f: {
|
|
101
|
+
inviter: string;
|
|
102
|
+
genesisDigest: string;
|
|
103
|
+
threadId: string;
|
|
104
|
+
from: string;
|
|
105
|
+
to: string;
|
|
106
|
+
}) => {
|
|
107
|
+
type: string;
|
|
108
|
+
inviter: string;
|
|
109
|
+
genesisDigest: string;
|
|
110
|
+
threadId: string;
|
|
111
|
+
from: string;
|
|
112
|
+
to: string;
|
|
113
|
+
};
|
|
114
|
+
/** Why a prelude request fails its form (Membership 3.5), the vector
|
|
115
|
+
* cases' `fails` names: the payload schema, the document proof under its
|
|
116
|
+
* issuer (RLTP-MT-3900), the binding's fields against the payload and the
|
|
117
|
+
* document, genesis digests compared by their decoded bytes
|
|
118
|
+
* (RLTP-MT-3905), and the binding proof under its `inviter`. The tuple
|
|
119
|
+
* checks of RLTP-MT-3910 (issuer and recipient the arrival tuple's pair
|
|
120
|
+
* anchors) need holder state and stay the caller's. null when it passes. */
|
|
121
|
+
export type PreludeRequestProblem = 'schema' | 'documentProof' | 'bindingFields' | 'bindingProof';
|
|
122
|
+
export declare function preludeRequestProblem(doc: any, subtle?: SubtleCrypto): Promise<PreludeRequestProblem | null>;
|
|
92
123
|
//# sourceMappingURL=membership.d.ts.map
|