@real-life/trust-protocol 0.3.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +97 -0
- package/README.md +209 -78
- package/dist/ack.d.ts +84 -0
- package/dist/ack.d.ts.map +1 -0
- package/dist/ack.js +114 -0
- package/dist/ack.js.map +1 -0
- package/dist/adapters/vti-mediator.d.ts +169 -0
- package/dist/adapters/vti-mediator.d.ts.map +1 -0
- package/dist/adapters/vti-mediator.js +659 -0
- package/dist/adapters/vti-mediator.js.map +1 -0
- package/dist/anchor.d.ts +226 -0
- package/dist/anchor.d.ts.map +1 -0
- package/dist/anchor.js +347 -0
- package/dist/anchor.js.map +1 -0
- package/dist/{holder.d.ts → carrier-holder.d.ts} +1 -1
- package/dist/carrier-holder.d.ts.map +1 -0
- package/dist/{holder.js → carrier-holder.js} +5 -4
- package/dist/carrier-holder.js.map +1 -0
- package/dist/carrier-identity.js +4 -4
- package/dist/carrier-identity.js.map +1 -1
- package/dist/carrier.d.ts.map +1 -1
- package/dist/carrier.js +4 -3
- package/dist/carrier.js.map +1 -1
- package/dist/ceremony.d.ts +3 -2
- package/dist/ceremony.d.ts.map +1 -1
- package/dist/ceremony.js +16 -26
- package/dist/ceremony.js.map +1 -1
- package/dist/codec.d.ts +54 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +494 -0
- package/dist/codec.js.map +1 -0
- package/dist/continuity.d.ts +67 -0
- package/dist/continuity.d.ts.map +1 -0
- package/dist/continuity.js +110 -0
- package/dist/continuity.js.map +1 -0
- package/dist/core.d.ts +4 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js.map +1 -1
- package/dist/crypto.d.ts +23 -7
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +54 -20
- package/dist/crypto.js.map +1 -1
- package/dist/delivery.d.ts +31 -3
- package/dist/delivery.d.ts.map +1 -1
- package/dist/delivery.js +75 -28
- package/dist/delivery.js.map +1 -1
- package/dist/encounter/ceremony.d.ts +37 -0
- package/dist/encounter/ceremony.d.ts.map +1 -0
- package/dist/encounter/ceremony.js +662 -0
- package/dist/encounter/ceremony.js.map +1 -0
- package/dist/encounter.d.ts +91 -1
- package/dist/encounter.d.ts.map +1 -1
- package/dist/encounter.js +191 -12
- package/dist/encounter.js.map +1 -1
- package/dist/engine.d.ts +303 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +1509 -0
- package/dist/engine.js.map +1 -0
- package/dist/entropy.d.ts +28 -0
- package/dist/entropy.d.ts.map +1 -0
- package/dist/entropy.js +96 -0
- package/dist/entropy.js.map +1 -0
- package/dist/events.d.ts +198 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -0
- package/dist/fixtures.d.ts +30 -0
- package/dist/fixtures.d.ts.map +1 -0
- package/dist/fixtures.js +155 -0
- package/dist/fixtures.js.map +1 -0
- package/dist/forge.d.ts +47 -0
- package/dist/forge.d.ts.map +1 -0
- package/dist/forge.js +20 -0
- package/dist/forge.js.map +1 -0
- package/dist/group-star.d.ts +251 -0
- package/dist/group-star.d.ts.map +1 -0
- package/dist/group-star.js +348 -0
- package/dist/group-star.js.map +1 -0
- package/dist/holder-api.d.ts +165 -0
- package/dist/holder-api.d.ts.map +1 -0
- package/dist/holder-api.js +142 -0
- package/dist/holder-api.js.map +1 -0
- package/dist/holder-state-v1.d.ts +801 -0
- package/dist/holder-state-v1.d.ts.map +1 -0
- package/dist/holder-state-v1.js +2 -0
- package/dist/holder-state-v1.js.map +1 -0
- package/dist/holder-state-v2.d.ts +858 -0
- package/dist/holder-state-v2.d.ts.map +1 -0
- package/dist/holder-state-v2.js +2 -0
- package/dist/holder-state-v2.js.map +1 -0
- package/dist/identity-state.d.ts +43 -0
- package/dist/identity-state.d.ts.map +1 -0
- package/dist/identity-state.js +345 -0
- package/dist/identity-state.js.map +1 -0
- package/dist/identity.d.ts +24 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +70 -11
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +27 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +81 -29
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +37 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +22 -0
- package/dist/internal.js.map +1 -0
- package/dist/introduction/holder.d.ts +18 -0
- package/dist/introduction/holder.d.ts.map +1 -0
- package/dist/introduction/holder.js +764 -0
- package/dist/introduction/holder.js.map +1 -0
- package/dist/introduction.d.ts +101 -0
- package/dist/introduction.d.ts.map +1 -0
- package/dist/introduction.js +132 -0
- package/dist/introduction.js.map +1 -0
- package/dist/invariants.d.ts +43 -0
- package/dist/invariants.d.ts.map +1 -0
- package/dist/invariants.js +953 -0
- package/dist/invariants.js.map +1 -0
- package/dist/keys-seed.d.ts +7 -0
- package/dist/keys-seed.d.ts.map +1 -0
- package/dist/keys-seed.js +133 -0
- package/dist/keys-seed.js.map +1 -0
- package/dist/log-memory.d.ts +12 -0
- package/dist/log-memory.d.ts.map +1 -0
- package/dist/log-memory.js +101 -0
- package/dist/log-memory.js.map +1 -0
- package/dist/membership/holder.d.ts +33 -0
- package/dist/membership/holder.d.ts.map +1 -0
- package/dist/membership/holder.js +929 -0
- package/dist/membership/holder.js.map +1 -0
- package/dist/membership.d.ts +123 -0
- package/dist/membership.d.ts.map +1 -0
- package/dist/membership.js +180 -0
- package/dist/membership.js.map +1 -0
- 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/ports.d.ts +237 -0
- package/dist/ports.d.ts.map +1 -0
- package/dist/ports.js +2 -0
- package/dist/ports.js.map +1 -0
- package/dist/profile.d.ts +56 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +193 -0
- package/dist/profile.js.map +1 -0
- package/dist/prompts.d.ts +14 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +69 -0
- package/dist/prompts.js.map +1 -0
- package/dist/receive.d.ts +134 -0
- package/dist/receive.d.ts.map +1 -0
- package/dist/receive.js +317 -0
- package/dist/receive.js.map +1 -0
- package/dist/results.d.ts +173 -0
- package/dist/results.d.ts.map +1 -0
- package/dist/results.js +21 -0
- package/dist/results.js.map +1 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +45 -38
- package/dist/schemas.js.map +1 -1
- package/dist/sha256.d.ts +3 -0
- package/dist/sha256.d.ts.map +1 -0
- package/dist/sha256.js +69 -0
- package/dist/sha256.js.map +1 -0
- package/dist/star.d.ts +31 -0
- package/dist/star.d.ts.map +1 -0
- package/dist/star.js +56 -0
- package/dist/star.js.map +1 -0
- package/dist/state-builder.d.ts +42 -0
- package/dist/state-builder.d.ts.map +1 -0
- package/dist/state-builder.js +100 -0
- package/dist/state-builder.js.map +1 -0
- package/dist/state.d.ts +914 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +37 -0
- package/dist/state.js.map +1 -0
- package/dist/store-contract.d.ts +11 -0
- package/dist/store-contract.d.ts.map +1 -0
- package/dist/store-contract.js +189 -0
- package/dist/store-contract.js.map +1 -0
- package/dist/store-memory.d.ts +8 -0
- package/dist/store-memory.d.ts.map +1 -0
- package/dist/store-memory.js +17 -0
- package/dist/store-memory.js.map +1 -0
- package/dist/testing.d.ts +22 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +21 -0
- package/dist/testing.js.map +1 -0
- package/dist/trust/continuity.d.ts +71 -0
- package/dist/trust/continuity.d.ts.map +1 -0
- package/dist/trust/continuity.js +1222 -0
- package/dist/trust/continuity.js.map +1 -0
- package/dist/trust/duties.d.ts +67 -0
- package/dist/trust/duties.d.ts.map +1 -0
- package/dist/trust/duties.js +179 -0
- package/dist/trust/duties.js.map +1 -0
- package/dist/trust/entries.d.ts +139 -0
- package/dist/trust/entries.d.ts.map +1 -0
- package/dist/trust/entries.js +795 -0
- package/dist/trust/entries.js.map +1 -0
- package/dist/trust/group-star.d.ts +43 -0
- package/dist/trust/group-star.d.ts.map +1 -0
- package/dist/trust/group-star.js +188 -0
- package/dist/trust/group-star.js.map +1 -0
- package/dist/trust/mapping.d.ts +56 -0
- package/dist/trust/mapping.d.ts.map +1 -0
- package/dist/trust/mapping.js +584 -0
- package/dist/trust/mapping.js.map +1 -0
- package/dist/trust/profile.d.ts +25 -0
- package/dist/trust/profile.d.ts.map +1 -0
- package/dist/trust/profile.js +249 -0
- package/dist/trust/profile.js.map +1 -0
- package/dist/trust/star.d.ts +208 -0
- package/dist/trust/star.d.ts.map +1 -0
- package/dist/trust/star.js +588 -0
- package/dist/trust/star.js.map +1 -0
- package/dist/trust/state.d.ts +83 -0
- package/dist/trust/state.d.ts.map +1 -0
- package/dist/trust/state.js +154 -0
- package/dist/trust/state.js.map +1 -0
- package/dist/util-freeze.d.ts +3 -0
- package/dist/util-freeze.d.ts.map +1 -0
- package/dist/util-freeze.js +11 -0
- package/dist/util-freeze.js.map +1 -0
- package/dist/views.d.ts +179 -0
- package/dist/views.d.ts.map +1 -0
- package/dist/views.js +286 -0
- package/dist/views.js.map +1 -0
- package/dist/visibility.d.ts +5 -5
- package/dist/visibility.d.ts.map +1 -1
- package/dist/visibility.js +22 -28
- package/dist/visibility.js.map +1 -1
- package/dist/wire.d.ts +218 -83
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js.map +1 -1
- package/package.json +60 -10
- package/schemas/holder-state-v1.schema.json +3880 -0
- package/schemas/holder-state-v2.schema.json +4123 -0
- package/dist/holder.d.ts.map +0 -1
- package/dist/holder.js.map +0 -1
- package/dist/probe/acks.d.ts +0 -27
- package/dist/probe/acks.d.ts.map +0 -1
- package/dist/probe/acks.js +0 -152
- package/dist/probe/acks.js.map +0 -1
- package/dist/probe/continuity.d.ts +0 -20
- package/dist/probe/continuity.d.ts.map +0 -1
- package/dist/probe/continuity.js +0 -805
- package/dist/probe/continuity.js.map +0 -1
- package/dist/probe/deps.d.ts +0 -61
- package/dist/probe/deps.d.ts.map +0 -1
- package/dist/probe/deps.js +0 -54
- package/dist/probe/deps.js.map +0 -1
- package/dist/probe/encounter.d.ts +0 -26
- package/dist/probe/encounter.d.ts.map +0 -1
- package/dist/probe/encounter.js +0 -938
- package/dist/probe/encounter.js.map +0 -1
- package/dist/probe/introduce.d.ts +0 -62
- package/dist/probe/introduce.d.ts.map +0 -1
- package/dist/probe/introduce.js +0 -306
- package/dist/probe/introduce.js.map +0 -1
- package/dist/probe/membership.d.ts +0 -96
- package/dist/probe/membership.d.ts.map +0 -1
- package/dist/probe/membership.js +0 -467
- package/dist/probe/membership.js.map +0 -1
- package/dist/probe/trust.d.ts +0 -156
- package/dist/probe/trust.d.ts.map +0 -1
- package/dist/probe/trust.js +0 -1233
- package/dist/probe/trust.js.map +0 -1
- package/dist/probe.d.ts +0 -7
- package/dist/probe.d.ts.map +0 -1
- package/dist/probe.js +0 -42
- package/dist/probe.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"encounter.js","sourceRoot":"","sources":["../../src/probe/encounter.ts"],"names":[],"mappings":"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","sourcesContent":["// encounter — the ceremony's TRANSMISSION on the normative forms:\n// Encounter 0.29 (wire 0.25: rltp-card/0.25 · encounter-scan@0.25)\n// carried by Delivery 0.79 — encounter-bundle/0.1 (§4.1),\n// encounter-credential-delivery/0.1 (§4.3), acknowledged with the\n// SIGNED delivery-ack/0.1 (§4.2/4.4 class rule: signature-class payloads\n// get an eddsa-jcs-2022 ack; only DV payloads get the deniable MAC form).\n// The Encounter-Nachzug (design/encounter-nachzug-plan-2026-09.md)\n// replaces the host's `encounter-verify@probe` with this module.\n//\n// The machine (Encounter 5.3–5.8, in the probe WORLD of a Person):\n// · own-challenge STATE MODEL (5.3): issuance → open; record creation\n// → recorded (atomic, in-lock); aging latch → unknown (set-only,\n// whole-second normalized, LOCK-FREE). resolve() is total and by\n// precedence.\n// · the ENACTMENT RECORD (5.5), keyed by the own challenge, unique and\n// idempotent; the record IS the contact tuple; the record key is one\n// lock namespace for bundles, the optical leg, the scanner's own\n// record and the counter-step.\n// · ONE COMMIT DISCIPLINE for every effect (design/encounter-review11-\n// halt-2026-09.md, Option 1): `effect()` runs, under the lock set,\n// prepare — async, FALLIBLE, no mutation (checks, tuple, ack);\n// verify — SYNCHRONOUS re-check of EVERY state-dependent\n// condition (cache, authoritative resolution, thread\n// freshness, counterpart/card identity, uniqueness);\n// commit — SYNCHRONOUS, no await (record/tuple/buffer + accepted\n// digest + cache + retained ack).\n// Nothing read before an await ever decides a commit; a state that\n// moved makes verify say `retry` — the waiter rule of 6.2, re-entering\n// at stage 4 — or names the disposition. `p.__beforeVerify` is a test\n// hook that perturbs state between prepare and verify.\n// · receiveEncounter: the §6.2 stage order — profile + recipient (5) →\n// payload schema (7) → the pre-lock checks of 4.1 IN ORDER (8) → the\n// lock set {digest, record key} (9, bundles) / {digest} (deliveries).\n// · encounter-credential-delivery (4.3): the effect is BUFFERING; the\n// ack is sent at buffering; Encounter acceptance (5.6) runs\n// separately (own record-key section) and is never signaled (7.4).\n// · digest equality is over decoded multihash bytes (2.3: sameDigest).\n// · \"delivered\" is the sender's status ONLY on a valid ack (6.1) —\n// trust.receiveAckInner marks bundleAcked / counterAcked.\nimport { jcs, makeValidator, sameDigest } from '../core.js'\nimport { SCHEMAS } from '../schemas.js'\nimport * as C from './deps.js'\nimport type { Person } from './deps.js'\nimport { snapshotPriors } from './continuity.js'\nimport { buildAck } from './acks.js'\n\nconst say = (p: Person, m: string) => p.log.push(m)\nconst V = makeValidator(SCHEMAS)\nconst schemaOk = (file: string, data: any) => V.validate(data, SCHEMAS[file], SCHEMAS[file]).length === 0\nconst TT = 'https://real-life.org/trust-tasks/'\nexport const BUNDLE_TYPE = TT + 'encounter-bundle/0.1'\nexport const DELIVERY_TYPE = TT + 'encounter-credential-delivery/0.1'\n// Encounter §9 operational constants (ms)\nexport const CHALLENGE_MAX_AGE = 5 * 60_000 // PT5M\nexport const ISSUANCE_WINDOW = 24 * 3_600_000 // PT24H\nexport const SKEW_TOLERANCE = 5 * 60_000 // PT5M\nconst sec = (ms: number) => Math.floor(ms / 1000) // 2.3: whole seconds\n// producer-side profile discipline (Delivery 3 / Encounter 6): UUID v4 ids and\n// threads, a display name inside the card schema's bound (200 characters)\nconst UUID_V4 = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\nconst uuidOk = (v: unknown) => typeof v === 'string' && UUID_V4.test(v)\nconst displayName = (p: Person) => String(p.name ?? '').slice(0, 200)\nconst secIso = (iso: string) => Math.floor(Date.parse(iso) / 1000)\n\n// ── 5.3 the own-challenge state model ───────────────────────────────────\n// p.challenges: value → { tCh (ms), ctxAnchor, aged? } — every issued\n// value is RETAINED until recorded or aged (retention is mandatory).\n// p.records: own challenge value → record (5.5); the record's contact\n// tuple lives in p.contacts under the counterparty anchor.\nconst chal = (p: Person): Map<string, any> => ((p as any).challenges ??= new Map())\nconst recs = (p: Person): Map<string, any> => ((p as any).records ??= new Map())\n/** total resolution by precedence: recorded → open → unknown; the one\n * write is the aging latch (set-only, whole-second boundary, lock-free) */\nexport function resolve (p: Person, value: string, now: number): 'recorded' | 'open' | 'unknown' {\n if (recs(p).has(value)) return 'recorded'\n const c = chal(p).get(value)\n if (!c || c.aged) return 'unknown'\n if (sec(now) > sec(c.tCh) + (CHALLENGE_MAX_AGE + SKEW_TOLERANCE) / 1000) { c.aged = true; return 'unknown' } // latch\n return 'open'\n}\nconst futureOk = (tCh: number, now: number) => sec(tCh) <= sec(now) + SKEW_TOLERANCE / 1000 // 5.5 explicit future check\n// the producer's mirror of 5.6 step 6: may a credential binding a challenge issued at tChMs still be issued now?\nconst issuanceOpen = (tChMs: number, now: number) => { const skew = SKEW_TOLERANCE / 1000; return sec(now) >= sec(tChMs) - skew && sec(now) <= sec(tChMs) + (CHALLENGE_MAX_AGE + ISSUANCE_WINDOW) / 1000 + skew }\n\n// ── the LOCK SET of Delivery 6.2 stage 9 ────────────────────────────────\n// Atomic acquisition of every key (single-threaded: no await between the\n// check and the marks); a waiter holds nothing; when the way is free the\n// caller's body runs as the re-entry at stage 4.\ntype LockState = { held: Set<string>, waiters: Array<() => void> }\nconst lockState = (p: Person): LockState => ((p as any).lockSet ??= { held: new Set(), waiters: [] })\nconst release = (L: LockState, keys: string[]) => { for (const k of keys) L.held.delete(k); const w = L.waiters; L.waiters = []; for (const r of w) r() }\n/** acquire the whole set at once if free (synchronous); else null */\nconst tryAcquire = (p: Person, keys: string[]): LockState | null => {\n const L = lockState(p)\n if (keys.some((k) => L.held.has(k))) return null\n for (const k of keys) L.held.add(k)\n return L\n}\nconst awaitRelease = (p: Person) => new Promise<void>((res) => lockState(p).waiters.push(res))\n/** producer-side critical section (own actions, no stage evaluation): wait, then run */\nasync function withLockSet<T> (p: Person, keys: string[], fn: () => Promise<T>): Promise<T> {\n let L = tryAcquire(p, keys)\n while (!L) { await awaitRelease(p); L = tryAcquire(p, keys) }\n try { return await fn() } finally { release(L, keys) }\n}\n\n// ── the ONE commit discipline ───────────────────────────────────────────\n// prepare (async, no mutation, UNLOCKED — stages 4–8) → lock set acquired\n// (stage 9) → [test hook] → verify (sync) → commit (sync) → release.\n// verify returns null (go), 'retry' (the state moved: release and RE-ENTER\n// AT STAGE 4 — prepare runs again under the new state, no lock held across\n// the re-entry, unbounded as 6.2 demands), or a disposition string.\n// prepare may short-circuit with { done } (a result needing no commit) or\n// { error }.\ntype Prep<P> = { error?: string, done?: any, prep?: P }\ntype Effect<P, R> = {\n prepare: () => Promise<Prep<P>>,\n verify: (prep: P) => null | 'retry' | string,\n commit: (prep: P) => R,\n}\nasync function effect<P, R> (p: Person, keys: string[], e: Effect<P, R>, fail: (err: string) => R): Promise<R> {\n for (;;) {\n const pr = await e.prepare() // stages 4–8, holding nothing\n if (pr.error !== undefined) return fail(pr.error)\n if (pr.done !== undefined) return pr.done\n // stage 9: the lock set, acquired ATOMICALLY and only if free — a\n // waiter holds nothing and, when the way is free, does NOT resume:\n // it re-enters at stage 4 (prepare again, 6.2)\n const L = tryAcquire(p, keys)\n if (!L) { await awaitRelease(p); continue }\n try {\n const hook = (p as any).__beforeVerify\n if (typeof hook === 'function') hook()\n // ── from here to the end of commit: NO await ──\n const v = e.verify(pr.prep as P)\n if (v === 'retry') continue // the state moved: re-enter at stage 4\n if (v !== null) return fail(v)\n return e.commit(pr.prep as P)\n } finally { release(L, keys) }\n }\n}\nconst failed = (err: string) => ({ handled: true, error: err }) as any\n\n// ── cards (Encounter 6): schema-valid, decoded keys, proof under the anchor\nconst CARD_SCHEMA = 'contact-card-0.25.schema.json'\nasync function cardOk (card: any): Promise<string | null> {\n if (!schemaOk(CARD_SCHEMA, card)) return 'card fails contact-card-0.25 schema'\n if (card.version !== C.CARD_VERSION) return 'card version unknown'\n if (!card.challenge) return 'card without challenge (enactment use requires one)'\n if (!C.calOK(card.challenge.issuedAt) || !C.calOK(card.proof?.created)) return 'card: calendar-invalid timestamp'\n if (!C.xRawOfMk(card.keyAgreement) || !C.edRawOfAnchor(card.anchor)) return 'card keyAgreement does not decode (x25519-pub + 32 bytes, 2.3)'\n if (!(await C.diVerify(card, card.anchor))) return 'card proof'\n return null\n}\n\n// ── show: a displayed card (5.3 displayed challenge) ─────────────────────\nexport async function show (p: Person, when: number, ent: any = {}) {\n const ctx = await C.pairContext(p.rootIkm, ent.nonce ?? C.rand(32))\n if (p.contexts.has(ctx.anchor)) return { error: 'validation-failed (pair anchor already used — fresh-always, 4.4)' } as any\n const ch = C.challengeOf(ent.ch ?? C.rand(17))\n const iso = C.iso(when)\n // single use + monotone latch (5.3): a value that is recorded, still\n // held open, or aged is NEVER re-issued\n if (recs(p).has(ch) || chal(p).has(ch)) return { error: 'validation-failed (challenge value already issued)' } as any\n p.contexts.set(ctx.anchor, ctx); p.contexts.set(ctx.keyAgreement, ctx)\n chal(p).set(ch, { tCh: when, ctxAnchor: ctx.anchor }) // enters as OPEN\n const card = await C.signCard(ctx, C.cardBody(ctx, { name: displayName(p), challenge: { value: ch, issuedAt: iso } }), iso)\n return { ctx, ch, card, tCh: when }\n}\n\n// ── the record (5.5): build (pure) + one SYNCHRONOUS commit ─────────────\n// Encounter 4.2: the edge's direction is DERIVED from what exists — issued\n// (own credential) and received (counterparty credential accepted); a\n// record alone has no direction yet ('◇': met, recorded)\nconst edgeState = (t: any) => t.credential && t.credentialIn ? '✓' : t.credential ? '→' : t.credentialIn ? '←' : '◇'\nfunction buildTuple (p: Person, ownCtx: any, peerCard: any, ownValue: string, peerValue: string, bind: string, when: number, extra: any = {}) {\n const tuple: any = {\n name: peerCard.name, card: peerCard, provenance: 'ceremony', since: C.iso(when),\n channel: { own: ownCtx, counterpartKa: peerCard.keyAgreement }, priorCands: [],\n ownChallenge: ownValue, peerChallenge: peerValue, bind, ...extra.tuple,\n }\n tuple.state = edgeState(tuple)\n return tuple\n}\nfunction commitRecord (p: Person, tuple: any, when: number) {\n tuple.priorCands = snapshotPriors(p) // BEFORE the fresh tuple (6a)\n const c = chal(p).get(tuple.ownChallenge)\n p.contacts.set(tuple.card.anchor, tuple)\n recs(p).set(tuple.ownChallenge, { ceremony: C.CEREMONY, counterpart: tuple.card.anchor, card: tuple.card, ownValue: tuple.ownChallenge, peerValue: tuple.peerChallenge, tCh: c?.tCh ?? when, bind: tuple.bind, at: when, ctxAnchor: tuple.channel.own.anchor, accepted: {} })\n chal(p).delete(tuple.ownChallenge) // open → recorded\n return tuple\n}\n\n// ── outbox / threads / acks ─────────────────────────────────────────────\nconst outboxOf = (t: any) => (t.outbox ??= new Map<string, any>())\n// a thread-opening document carries a FRESH threadId (Delivery 3 / 4.1) —\n// fresh means: used by no bundle thread, no reserved inbound thread, no\n// outbox entry of this person (a re-issued bundle for the same enactment\n// opens a fresh thread too; 4.1 \"Thread freshness under re-issue\")\nconst threadInUse = (p: Person, id: string) => {\n for (const t of p.contacts.values()) {\n if (t.bundleThread === id || t.inThreads?.has(id)) return true\n for (const o of (t.outbox ?? new Map()).values()) if (o.threadId === id) return true\n }\n return false\n}\nasync function issueDoc (p: Person, tuple: any, type: string, payload: any, when: number, threadId: string, kind: string, ent: any = {}, ceremony?: any, onCommit?: () => void) {\n const doc: any = { id: ent.id ?? globalThis.crypto.randomUUID(), type, issuer: tuple.channel.own.anchor, recipient: tuple.card.anchor, threadId, issuedAt: C.iso(when), payload }\n if (ceremony) doc.ceremony = ceremony\n // the outer document validates against the profile BEFORE anything is committed (a malformed document would be refused at stage 5 by every receiver)\n if (!uuidOk(doc.id) || !uuidOk(threadId) || !schemaOk('rltp-delivery-document.schema.json', doc)) throw new Error('document profile violated (id/threadId UUID v4, schema)')\n const env = await C.seal(doc, tuple.channel.counterpartKa, ent.envNonce ? { nonce: ent.envNonce } : {}) // fallible — nothing persisted yet\n const digest = await C.digestDoc(doc)\n outboxOf(tuple).set(digest, { env: structuredClone(env), threadId, kind }) // COMMIT — the store's own copy …\n onCommit?.() // … and the duty flag falls in the SAME synchronous span\n return { to: tuple, kind: kind + '/0.1', env, threadId, digest }\n}\n// Encounter payloads carry transferable signatures → the ack is the\n// SIGNED form (4.2/4.4 acknowledgement class rule)\nconst mkAck = (p: Person, tuple: any, digest: string, threadId: string, when: number, recipient?: string) => buildAck(p, tuple, digest, threadId, when, { cls: 'signature', ...(recipient ? { recipient } : {}) }).then((a: any) => a.env)\n// the retained ack is the store's OWN copy — the host's handle can never\n// alter what a redelivery re-sends (4.2 byte-identical)\n// the retained ack shares the completed-effect cache's LIFETIME (4.2), not\n// the tuple's: p.ackRetained keeps digest → { env, to } so a redelivery after\n// the relation was deleted still re-sends exactly the stored document\nconst retained = (p: Person): Map<string, { env: any, to: any }> => ((p as any).ackRetained ??= new Map())\nconst commitAck = (p: Person, tuple: any, digest: string, ackEnv: any) => {\n C.effectDone(p, digest)\n const copy = structuredClone(ackEnv)\n ;(tuple.ackStore ??= new Map()).set(digest, copy)\n retained(p).set(digest, { env: copy, to: tuple })\n return { to: tuple, kind: 'delivery-ack/0.1', env: ackEnv }\n}\nconst dupResult = (p: Person, digest: string, anchor: string) => {\n const r = retained(p).get(digest)\n const to = p.contacts.get(anchor) ?? r?.to\n return { handled: true, duplicate: true, ack: r ? { to, kind: 'delivery-ack/0.1 (Re-Ack, byte-identisch)', env: structuredClone(r.env) } : undefined }\n}\nconst cached = (p: Person, digest: string) => (p.deliveryCache ?? new Set()).has(digest)\n\n// ── scan: the scanner's step (5.8 trunk 2–3) → encounter-bundle/0.1 ──────\n// A generates a FRESH pair context (4.4 fresh-always) and a FRESH\n// challenge c_A created now (5.3: never the display challenge). Under the\n// record key: prepare = the binding; verify = single use of the own\n// value, pair-anchor freshness, thread freshness, future check; commit =\n// the value enters `open`, resolves AUTHORITATIVELY in the same span, the\n// RECORD (5.5, before issuing). Credential, sent card and bundle follow.\nexport async function scan (p: Person, peerCardIn: any, when: number, ent: any = {}) {\n const peerCard = structuredClone(peerCardIn) // SNAPSHOT before the first await: verified = recorded\n const ce = await cardOk(peerCard)\n if (ce) return { error: `displayed card invalid (${ce})` }\n if (peerCard.sentTo !== undefined || peerCard.boundTo !== undefined) return { error: 'a displayed card carries neither sentTo nor boundTo' }\n const ctx = await C.pairContext(p.rootIkm, ent.nonce ?? C.rand(32))\n if (p.contexts.has(ctx.anchor)) return { error: 'validation-failed (pair anchor already used — fresh-always, 4.4)' }\n let ownValue = C.challengeOf(ent.ch ?? C.rand(17))\n while (!ent.ch && ownValue === peerCard.challenge.value) ownValue = C.challengeOf(C.rand(17))\n if (ownValue === peerCard.challenge.value) return { error: 'validation-failed (c_A equals the displayed challenge — never reused in a sent card, 5.3)' }\n const peerValue = peerCard.challenge.value\n // 5.3 single use, from the scanner's side too: a displayed value already\n // present in one of OUR records never enters a second enactment (a double\n // scan of one code would otherwise overwrite the anchor pair's tuple) —\n // decided in verify, under a lock key for THIS display (anchor + value),\n // so parallel scans of one code linearize\n const alreadyScanned = () => { for (const r of recs(p).values()) if (r.peerValue === peerValue && r.counterpart === peerCard.anchor) return true; return false }\n if (alreadyScanned()) return { error: 'validation-failed (this code was already scanned — its challenge is in a record, 5.3)' }\n const displayKey = 'display:' + peerCard.anchor + ':' + peerValue\n const threadId = ent.threadId ?? globalThis.crypto.randomUUID()\n if (!uuidOk(threadId) || (ent.id !== undefined && !uuidOk(ent.id))) return { error: 'validation-failed (id/threadId must be UUID v4 — Delivery 3)' } // before the record gate\n const iso = C.iso(when)\n const recorded = await effect<any, any>(p, [ownValue, displayKey], {\n prepare: async () => ({ prep: { bind: await C.binding(C.CEREMONY, ownValue, peerValue) } }),\n verify: () => {\n if (alreadyScanned()) return 'validation-failed (this code was already scanned — its challenge is in a record, 5.3)'\n if (recs(p).has(ownValue) || chal(p).has(ownValue)) return 'validation-failed (own challenge value already in use)' // single use (5.3/5.5)\n if (p.contexts.has(ctx.anchor)) return 'validation-failed (pair anchor already used — fresh-always, 4.4)'\n if (threadInUse(p, threadId)) return 'validation-failed (threadId not fresh — a bundle opens its exchange, 4.1)'\n if (!futureOk(when, when)) return 'gate-future'\n return null\n },\n commit: ({ bind }) => {\n p.contexts.set(ctx.anchor, ctx); p.contexts.set(ctx.keyAgreement, ctx)\n chal(p).set(ownValue, { tCh: when, ctxAnchor: ctx.anchor }) // enters as OPEN, t_ch = now …\n if (resolve(p, ownValue, when) !== 'open') { chal(p).delete(ownValue); return { error: 'validation-failed (own challenge does not resolve open)' } } // … resolved AUTHORITATIVELY in the same span\n // 5.5: the record BEFORE issuing — `bundlePending` marks the issuance\n // still owed (credential · sent card · bundle), resumable via resumeEncounter\n const tuple = commitRecord(p, buildTuple(p, ctx, peerCard, ownValue, peerValue, bind, when, { tuple: { bundleThread: threadId, bundlePending: true, tChOwn: when } }), when)\n return { tuple }\n },\n }, (err) => ({ error: err }))\n if (recorded.error) return recorded\n const out = await withLockSet(p, [ownValue], () => completeScan(p, recorded.tuple, when, ent))\n if (!out) return { error: 'stale-issuance (issuance window closed before the credential could be issued)' }\n return { ...out, ctx }\n}\n// the scanner's owed issuance after the record (idempotent, resumable):\n// credential → sent card → bundle into the outbox. Each piece that exists\n// is kept; only the missing ones are produced. Errors propagate — the\n// record stands and `bundlePending` keeps the duty visible to the resume.\nasync function completeScan (p: Person, tuple: any, when: number, ent: any = {}) {\n const ctx = tuple.channel.own, rec = recs(p).get(tuple.ownChallenge)\n const tCh = tuple.tChOwn ?? when\n // the credential carries its ACTUAL issuance time (7.2) — a resume long\n // after the record must not backdate; the issuance window (5.6 step 6)\n // is anchored at the SUBJECT's challenge — the one the credential binds\n // (c_B, whose t_ch the receiver's record holds) — not at our own c_A;\n // outside it no encounter credential is issued any more: the record\n // stands, the duty lapses honestly\n const now = C.iso(when)\n if (!tuple.credential) {\n if (!issuanceOpen(Date.parse(tuple.card.challenge.issuedAt), when)) { delete tuple.bundlePending; tuple.bundleLapsed = 'stale-issuance'; say(p, `${tuple.name}: Ausstellung nach dem Issuance-Window — kein Credential mehr (Record bleibt)`); return null }\n const cred = await C.issueCredential(ctx, tuple.card.anchor, C.CEREMONY, tuple.peerChallenge, tuple.bind, now)\n const d = await C.digestDoc(cred)\n if (!tuple.credential) { tuple.credential = cred; rec.accepted.out = d; tuple.state = edgeState(tuple) }\n }\n if (!tuple.sentCard) {\n // the sent challenge keeps ITS issuance time (t_ch); the card proof is dated now\n const sc = await C.signCard(ctx, C.cardBody(ctx, { name: displayName(p), challenge: { value: tuple.ownChallenge, issuedAt: C.iso(tCh) }, sentTo: tuple.card.anchor, boundTo: tuple.peerChallenge }), now)\n tuple.sentCard ??= sc\n }\n const existing = [...outboxOf(tuple).entries()].find(([, o]) => o.kind === 'encounter-bundle')\n if (existing) { delete tuple.bundlePending; return { to: tuple, kind: 'encounter-bundle/0.1', env: structuredClone(existing[1].env), threadId: existing[1].threadId, digest: existing[0], sentCard: tuple.sentCard, credential: tuple.credential } }\n say(p, `${tuple.name} verifiziert — Credential unterwegs (Ankunft ≠ Annahme)`)\n const out = await issueDoc(p, tuple, BUNDLE_TYPE, { card: tuple.sentCard, credential: tuple.credential }, when, tuple.bundleThread, 'encounter-bundle', ent, undefined, () => { delete tuple.bundlePending })\n return { ...out, sentCard: tuple.sentCard, credential: tuple.credential }\n}\n\n/**\n * Resume owed issuance after a failure between record and outbox (the\n * scanner's bundle, the deferred counter-step document). Idempotent; the\n * host calls it before flushEncounter. Returns the documents produced now.\n */\nexport async function resumeEncounter (p: Person, when: number) {\n const outbound: any[] = []\n for (const [anchor, t] of [...p.contacts]) {\n if (!t.ownChallenge) continue\n // only STANDING duties survive deactivation: an owed bundle (record\n // stands, 5.8 step 3) and an owed counter document (5.8 step 4)\n if (t.deactivated && !(t.credential && t.counterDocPending) && !t.bundlePending) continue\n try {\n if (t.bundlePending) { const o: any = await withLockSet(p, [t.ownChallenge], async () => t.bundlePending ? completeScan(p, t, when) : null); if (o?.env) outbound.push({ to: t, kind: o.kind + ' (resumed)', env: o.env, sentCard: o.sentCard, threadId: o.threadId, peerAnchor: t.card.anchor }) }\n if (t.counterDocPending && t.bundleThread) { const o: any = await counterEffect(p, anchor, when, {}, [t.ownChallenge]); if (o?.env) outbound.push({ to: t, kind: o.kind + ' (resumed)', env: o.env }) }\n } catch (err) { say(p, `resume: ${t.name}: ${String((err as any)?.message ?? err)} — bleibt ausstehend`) }\n }\n return { outbound }\n}\n\n// ── counter: the counter-step (5.8 trunk 4) → encounter-credential-delivery/0.1\n// Issues (and commits) our step credential binding c_peer at once; the\n// DELIVERY DOCUMENT carries step \"counter\" + enactment and the BUNDLE's\n// threadId (4.3) — when the record arose on the optical leg and the\n// bundle has not arrived yet, the document is deferred\n// (`counterDocPending`) and issued the moment the bundle lands. No\n// optical carrier exists for the counter-step (5.8 step 4; 5.3).\nexport async function counter (p: Person, peerAnchor: string, when: number, ent: any = {}) {\n if (ent.id !== undefined && !uuidOk(ent.id)) return { error: 'validation-failed (id must be UUID v4 — Delivery 3)' }\n const t0 = p.contacts.get(peerAnchor)\n if (!t0?.ownChallenge) return { error: 'no enactment record for this contact' }\n // a NEW issuance needs an active tuple; MATERIALIZING an already issued,\n // pending credential is a standing duty that deactivation never cancels\n if (t0.deactivated && !(t0.credential && t0.counterDocPending)) return { error: 'no enactment record for this contact' }\n return counterEffect(p, peerAnchor, when, ent, [t0.ownChallenge])\n}\n// the counter-step's body; `keys` = [] when the caller already holds the record key\nasync function counterEffect (p: Person, peerAnchor: string, when: number, ent: any, keys: string[]) {\n // the WHOLE step (credential commit + document issue) under the record\n // key: a concurrent caller sees the finished state, never the gap\n return withLockSet(p, keys, () => counterBody(p, peerAnchor, when, ent))\n}\nasync function counterBody (p: Person, peerAnchor: string, when: number, ent: any) {\n const issued = await effect<any, any>(p, [], {\n prepare: async () => {\n const t = p.contacts.get(peerAnchor)\n if (!t?.ownChallenge || !recs(p).has(t.ownChallenge)) return { error: 'no enactment record for this contact' }\n if (t.credential && !t.counterDocPending) return { error: 'counter-step already issued' }\n if (t.credential) return { prep: { t, cred: t.credential, fresh: false } } // materialization — allowed even when deactivated\n if (t.deactivated) return { error: 'no enactment record for this contact' } // no NEW issuance on a deactivated tuple\n // §9 issuance-window, anchored at the SUBJECT's challenge (c_A, the one\n // this credential binds — its t_ch is the sent card's challenge time):\n // past it, no counter credential is issued (it could never be accepted)\n if (!issuanceOpen(Date.parse(t.card.challenge.issuedAt), when)) return { error: 'stale-issuance (issuance window closed — no counter-step any more)' }\n const cred = await C.issueCredential(t.channel.own, peerAnchor, C.CEREMONY, t.peerChallenge, t.bind, C.iso(when))\n return { prep: { t, cred, d: await C.digestDoc(cred), fresh: true } }\n },\n verify: ({ t, fresh }) => {\n if (!recs(p).has(t.ownChallenge)) return 'no enactment record for this contact'\n if (fresh && t.deactivated) return 'no enactment record for this contact'\n if (fresh && t.credential) return 'counter-step already issued' // a concurrent issue won\n return null\n },\n commit: ({ t, cred, d, fresh }) => {\n if (fresh) { t.credential = cred; recs(p).get(t.ownChallenge).accepted.out = d; t.counterDocPending = true; t.state = edgeState(t) }\n return { t }\n },\n }, (err) => ({ error: err }))\n if (issued.error) return issued\n const t = issued.t\n if (!t.bundleThread) {\n say(p, `Gegenschritt an ${t.name} ausgestellt — das Zustelldokument wartet auf den Bundle-Thread (4.3: step \"counter\")`)\n return { deferred: true, credential: t.credential, to: t }\n }\n // a crash after the outbox write but before the flag fell: the document exists — take it, never a second one\n const existing = [...outboxOf(t).entries()].find(([, o]) => o.kind === 'encounter-credential-delivery' && o.threadId === t.bundleThread)\n if (existing) { delete t.counterDocPending; return { to: t, kind: 'encounter-credential-delivery/0.1', env: structuredClone(existing[1].env), threadId: existing[1].threadId, digest: existing[0], credential: t.credential } }\n const out = await issueDoc(p, t, DELIVERY_TYPE, { credential: t.credential }, when, t.bundleThread, 'encounter-credential-delivery', ent, { step: 'counter', enactment: t.bind }, () => { delete t.counterDocPending })\n say(p, `Gegenschritt an ${t.name} ausgestellt (counter)`)\n return { ...out, credential: t.credential }\n}\n\n// ── the optical leg (5.8): the SENT CARD as ceremony-level input ─────────\nexport async function captureSentCard (p: Person, cardIn: any, when: number) {\n const card = structuredClone(cardIn) // SNAPSHOT before the first await (TOCTOU): verified = recorded\n const ce = await cardOk(card)\n if (ce) return { error: `sent card invalid (${ce})` }\n if (typeof card.sentTo !== 'string' || typeof card.boundTo !== 'string') return { error: 'not a sent card' }\n if (card.challenge.value === card.boundTo) return { error: 'validation-failed (sent challenge equals the displayed challenge — 5.3)' }\n const ctx = p.contexts.get(card.sentTo)\n if (!ctx || ctx.anchor !== card.sentTo) return { error: 'sentTo ≠ own anchor' }\n // the 5.5 taxonomy for a bound challenge that resolves `recorded`\n const recordedTaxonomy = (): string | { handled: true, idempotent: true, to: string } => {\n const r = recs(p).get(card.boundTo)\n if (r.ctxAnchor !== ctx.anchor) return 'validation-failed (challenge bound to another anchor)'\n if (r.counterpart !== card.anchor) return 'consumed-challenge'\n if (jcs(r.card) !== jcs(card)) return 'validation-failed (card differs from record)'\n return { handled: true, idempotent: true, to: card.anchor }\n }\n return effect<any, any>(p, [card.boundTo], {\n // prepare is pure: the binding only — EVERY decision (unknown → gate-\n // expired · recorded → the 5.5 taxonomy · open → record) is produced at\n // the serialization point, inside the lock (5.5)\n prepare: async () => ({ prep: { bind: await C.binding(C.CEREMONY, card.boundTo, card.challenge.value), idem: false } }),\n verify: (q) => {\n const st = resolve(p, card.boundTo, when) // AUTHORITATIVE, same synchronous span as the commit\n if (st === 'unknown') return 'gate-expired'\n if (st === 'recorded') { const r = recordedTaxonomy(); if (typeof r === 'string') return r; q.idem = true; return null }\n if (chal(p).get(card.boundTo).ctxAnchor !== ctx.anchor) return 'validation-failed (challenge bound to another anchor)' // 4.4: sentTo = the anchor that displayed c_B\n if (!futureOk(chal(p).get(card.boundTo).tCh, when)) return 'gate-future'\n return null\n },\n commit: ({ bind, idem }) => {\n if (idem) return { handled: true, idempotent: true, to: card.anchor } // JCS-identical card on the existing record: no-op\n const tuple = commitRecord(p, buildTuple(p, ctx, card, card.boundTo, card.challenge.value, bind, when, { tuple: { credentialPending: true } }), when)\n say(p, `${card.name}'s sent card captured optically — same encounter, the confirmation follows over the network`)\n return { handled: true, recorded: true, to: card.anchor, name: tuple.name } // the record itself is never handed out\n },\n }, (err) => ({ error: err }))\n}\n\n// ── receive: encounter-bundle / encounter-credential-delivery ────────────\nexport async function receiveEncounter (p: Person, env: any, when: number, ent: any = {}) {\n const opened = await C.openEnvelope(p, env) // stages 1–4\n if (opened.error) return { handled: false }\n const ctx = p.contexts.get(env.rkid)\n if (!ctx) return { handled: false }\n const doc = opened.doc\n if (doc?.type !== BUNDLE_TYPE && doc?.type !== DELIVERY_TYPE) return { handled: false, doc }\n if (opened.duplicate) return reAck(p, opened.digest!)\n // stage 5: document profile (schema) + recipient = own anchor\n if (!schemaOk('rltp-delivery-document.schema.json', doc) || doc.proof !== undefined) return { handled: true, error: 'malformed document' }\n if (doc.recipient !== ctx.anchor) return { handled: true, error: 'wrong-recipient' } // 6.2 stage 5 disposition\n return doc.type === BUNDLE_TYPE ? receiveBundle(p, ctx, doc, opened.digest!, when, ent) : receiveDelivery(p, ctx, doc, opened.digest!, when, ent)\n}\n// 4.2 / 6.2 stage 4: duplicate-known → the STORED ack, byte-identical (a copy)\nfunction reAck (p: Person, digest: string) {\n const r = retained(p).get(digest)\n if (r) return { handled: true, duplicate: true, ack: { to: r.to, kind: 'delivery-ack/0.1 (Re-Ack, byte-identisch)', env: structuredClone(r.env) } }\n for (const t of p.contacts.values()) { const stored = t.ackStore?.get(digest); if (stored) return { handled: true, duplicate: true, ack: { to: t, kind: 'delivery-ack/0.1 (Re-Ack, byte-identisch)', env: structuredClone(stored) } } }\n return { handled: true, duplicate: true }\n}\n\n// ── the credential checks, in normative order ───────────────────────────\n// 5.6 step 1 — FORMAT: schema, format, ceremony AND version KNOWN\n// (registered: encounter-scan@0.25 only), calendar-valid timestamps,\n// digest parsed as a multihash, keys decode (2.3) — else ERR_VERSION\nfunction credFormat (cred: any, ceremonyHere = true): string | null {\n if (!schemaOk('encounter-credential-0.25.schema.json', cred) || cred.credentialSubject?.format !== C.CRED_FORMAT) return 'ERR_VERSION'\n // 5.6 step 1 knows the ceremony here; Delivery 4.1 places the ceremony\n // equality at its step 5 (after card proof, credential proof, addressee)\n if (ceremonyHere && cred.credentialSubject.ceremony !== C.CEREMONY) return 'ERR_VERSION'\n if (!C.calOK(cred.validFrom) || !C.calOK(cred.proof?.created)) return 'ERR_VERSION'\n if (!sameDigest(cred.credentialSubject.enactmentBinding, cred.credentialSubject.enactmentBinding)) return 'ERR_VERSION'\n if (!C.edRawOfAnchor(cred.issuer) || !C.edRawOfAnchor(cred.credentialSubject.id)) return 'ERR_VERSION'\n const vm = String(cred.proof?.verificationMethod ?? ''), hash = vm.indexOf('#')\n if (hash < 0 || !C.edRawOfAnchor(vm.slice(0, hash)) || !C.edRawOfAnchor('did:key:' + vm.slice(hash + 1))) return 'ERR_VERSION'\n return null\n}\n// steps 1–3: format · signature · addressee\nasync function credHead (cred: any, ctx: any, ceremonyHere = true): Promise<string | null> {\n const f = credFormat(cred, ceremonyHere)\n if (f) return f\n if (!(await C.diVerify(cred, cred.issuer))) return 'ERR_SIG'\n if (cred.credentialSubject.id !== ctx.anchor) return 'ERR_ADDRESSEE'\n return null\n}\n// step 6: the issuance window, whole seconds, inclusive, skew widens\nfunction windowOk (cred: any, tChMs: number): boolean {\n const tCh = sec(tChMs), vf = secIso(cred.validFrom), cr = secIso(cred.proof.created), skew = SKEW_TOLERANCE / 1000\n const lo = tCh - skew, hi = tCh + (CHALLENGE_MAX_AGE + ISSUANCE_WINDOW) / 1000 + skew\n return !(vf < lo || vf > hi || cr < lo || cr > hi || cr < vf - skew)\n}\n// steps 4–7 against a record (SYNCHRONOUS — usable inside verify). `order`:\n// 'credential' — 5.6: record · ceremony · WINDOW · BINDING\n// 'bundle' — Delivery 4.1 pre-lock: record · ceremony · BINDING · WINDOW\nfunction acceptTail (cred: any, rec: any, order: 'credential' | 'bundle'): string | null {\n if (!rec || rec.counterpart !== cred.issuer) return 'ERR_NO_RECORD'\n if (cred.credentialSubject.ceremony !== rec.ceremony) return 'ERR_CEREMONY'\n const bindOk = sameDigest(cred.credentialSubject.enactmentBinding, rec.bind)\n if (order === 'bundle' && !bindOk) return 'ERR_BINDING'\n if (!windowOk(cred, rec.tCh)) return 'ERR_STALE_ISSUANCE'\n if (!bindOk) return 'ERR_BINDING'\n return null\n}\nconst disposition = (e: string) => e === 'ERR_STALE_ISSUANCE' ? 'stale-issuance' : `validation-failed (${e})`\n\n// ── bundles ─────────────────────────────────────────────────────────────\n// stages 7–8 for a bundle (stage 5 ran in receiveEncounter): the pre-lock\n// checks of 4.1 IN ORDER. The only state read is the resolution (which\n// latches) and thread freshness — both re-checked synchronously in verify.\n// the ORIGINAL bundle re-evaluated after cache/ack retention (4.2: \"a bundle\n// whose enactment record still exists lands in the record-aware effect\") is\n// the same document, not a new one on a used thread\n// … the same holds for every re-issued bundle that landed record-aware on\n// its own fresh thread: the record keeps thread → document digest\nconst sameOpeningBundle = (p: Person, anchor: string, threadId: string, digest: string) => {\n const t = p.contacts.get(anchor)\n if (!t) return false\n if (t.bundleThread === threadId) return sameDigest(t.bundleDigest, digest)\n const d = t.inThreadDigests?.get(threadId)\n return d !== undefined && sameDigest(d, digest)\n}\nasync function bundleChecks (p: Person, ctx: any, doc: any, digest: string, when: number): Promise<any> {\n const pl = doc.payload\n if (!schemaOk('payload-encounter-bundle.schema.json', pl)) return { error: 'malformed bundle' } // stage 7\n const { card, credential } = pl\n // (1) profile/structure: calendars, outer/inner equalities, card version, keys decode, thread fresh, credential FORMAT\n if (!C.calOK(doc.issuedAt) || !C.calOK(card.challenge?.issuedAt) || !C.calOK(card.proof?.created)) return { error: 'calendar-invalid issuedAt' }\n if (doc.issuer !== card.anchor || card.anchor !== credential.issuer) return { error: 'outer binding (issuer = card.anchor = credential.issuer)' }\n if (credential.credentialSubject?.id !== doc.recipient) return { error: 'outer binding (recipient = subject)' }\n if (card.sentTo !== doc.recipient || card.boundTo !== credential.credentialSubject.challenge) return { error: 'sent card binding (sentTo/boundTo)' }\n if (card.challenge.value === card.boundTo) return { error: 'validation-failed (sent challenge equals the displayed challenge — 5.3)' }\n if (doc.ceremony?.enactment !== undefined && !sameDigest(doc.ceremony.enactment, credential.credentialSubject.enactmentBinding)) return { error: 'ceremony.enactment recomputes not (validation-failed)' }\n if (card.version !== C.CARD_VERSION || !card.challenge) return { error: 'validation-failed (card version/challenge)' }\n if (!C.xRawOfMk(card.keyAgreement) || !C.edRawOfAnchor(card.anchor)) return { error: 'validation-failed (card keys do not decode)' }\n if (threadInUse(p, doc.threadId) && !sameOpeningBundle(p, card.anchor, doc.threadId, digest)) return { error: 'validation-failed (threadId not fresh — a bundle opens its exchange)' }\n const f = credFormat(credential, false)\n if (f) return { error: disposition(f) }\n // (2) card proof · (3) credential proof · (4) addressee\n if (!(await C.diVerify(card, card.anchor))) return { error: 'card proof' }\n const h = await credHead(credential, ctx, false)\n if (h) return { error: disposition(h) }\n // (5) provisional RESOLUTION first (it latches an aged held value) → an\n // `unknown` ends the pre-lock checks and goes to the lock; otherwise\n // ceremony → binding · (6) window\n const own = credential.credentialSubject.challenge\n const bind = await C.binding(C.CEREMONY, own, card.challenge.value)\n const st = resolve(p, own, when)\n if (st !== 'unknown') {\n if (credential.credentialSubject.ceremony !== C.CEREMONY) return { error: 'validation-failed (ceremony)' }\n // the bound challenge belongs to THIS pair context (4.4: the enacting\n // anchor is the one that displayed it — never another local anchor)\n if (ctxOfChallenge(p, own, st) !== ctx.anchor) return { error: 'validation-failed (challenge bound to another anchor)' }\n // checks 5–6 with t_ch from the resolution — for a recorded value TOO,\n // whatever its counterparty (consumed-challenge is a stage-9 verdict;\n // 4.1: \"only after 1–6 pass does evaluation reach the final stage\")\n const tCh = st === 'recorded' ? recs(p).get(own).tCh : chal(p).get(own).tCh\n if (!sameDigest(credential.credentialSubject.enactmentBinding, bind)) return { error: 'validation-failed (ERR_BINDING)' }\n if (!windowOk(credential, tCh)) return { error: 'stale-issuance' }\n }\n return { own, bind, card, credential, st }\n}\nconst ctxOfChallenge = (p: Person, value: string, st: 'open' | 'recorded') => st === 'recorded' ? recs(p).get(value)?.ctxAnchor : chal(p).get(value)?.ctxAnchor\n\nasync function receiveBundle (p: Person, ctx: any, doc: any, digest: string, when: number, ent: any) {\n const pre = await bundleChecks(p, ctx, doc, digest, when)\n if (pre.error) return failed(pre.error)\n const { own, card } = pre\n // stage 9 under the LOCK SET {digest, record key}\n const res: any = await effect<any, any>(p, [digest, own], {\n prepare: async () => {\n if (cached(p, digest)) return { done: dupResult(p, digest, card.anchor) }\n const r = await bundleChecks(p, ctx, doc, digest, when) // re-entry at stage 4: every check under the state found\n if (r.error) return { error: r.error }\n const credDigest = await C.digestDoc(r.credential)\n if (r.st === 'unknown') return { prep: { ...r, credDigest, mode: 'unknown' } }\n if (r.st === 'open') {\n const tuple = buildTuple(p, ctx, card, own, card.challenge.value, r.bind, when, { tuple: { credentialIn: r.credential, bundleThread: doc.threadId } })\n const ackEnv = await mkAck(p, tuple, digest, doc.threadId, when, card.anchor)\n return { prep: { ...r, credDigest, mode: 'open', tuple, ackEnv } }\n }\n // recorded: the ack can only be built if OUR tuple exists; the verdict\n // (consumed-challenge / record-aware / moved) is verify's, under the lock\n const tuple = p.contacts.get(card.anchor)\n const ackEnv = tuple ? await mkAck(p, tuple, digest, doc.threadId, when) : undefined\n return { prep: { ...r, credDigest, mode: 'recorded', tuple, ackEnv } }\n },\n verify: (q) => {\n if (cached(p, digest)) return 'retry' // a concurrent identical document committed → duplicate-known\n const st = resolve(p, own, when) // AUTHORITATIVE — same synchronous span as the commit\n if (st === 'unknown') return 'validation-failed (challenge unknown)'\n if (st !== q.mode) return 'retry' // the state moved: re-enter at stage 4\n if (ctxOfChallenge(p, own, st) !== ctx.anchor) return 'validation-failed (challenge bound to another anchor)'\n if (threadInUse(p, doc.threadId) && !sameOpeningBundle(p, card.anchor, doc.threadId, digest)) return 'validation-failed (threadId not fresh — a bundle opens its exchange)'\n if (st === 'open') {\n if (!futureOk(chal(p).get(own).tCh, when)) return 'gate-future'\n const e = acceptTail(q.credential, { counterpart: card.anchor, ceremony: C.CEREMONY, tCh: chal(p).get(own).tCh, bind: q.bind }, 'bundle')\n return e ? disposition(e) : null\n }\n // recorded → the record decides\n const rec = recs(p).get(own)\n if (rec.counterpart !== card.anchor) return 'consumed-challenge'\n if (jcs(rec.card) !== jcs(card)) return 'validation-failed (card differs from record)'\n const e = acceptTail(q.credential, rec, 'bundle')\n if (e) return disposition(e)\n if (rec.accepted.in && !sameDigest(rec.accepted.in, q.credDigest)) return 'validation-failed (ERR_CONFLICT)'\n if (!q.tuple || !q.ackEnv || p.contacts.get(card.anchor) !== q.tuple) return 'retry' // tuple moved since prepare: re-enter\n return null\n },\n commit: (q) => {\n if (q.mode === 'open') {\n // record-creating effect: record + tuple + accepted credential + cache + retained ack\n commitRecord(p, q.tuple, when)\n q.tuple.bundleDigest = digest // the bundle that opened this exchange (retention-independent identity)\n recs(p).get(own).accepted.in = q.credDigest\n const ack = commitAck(p, q.tuple, digest, q.ackEnv)\n say(p, `${card.name} verified you — arrival, not acceptance: you decide`)\n return { handled: true, recorded: true, prompt: { peerAnchor: card.anchor, from: card.name }, ack }\n }\n // record-aware effect: credential accepted, no gate, no second record;\n // the record keeps the thread of the bundle that committed first\n const rec = recs(p).get(own), tuple = q.tuple\n rec.accepted.in = q.credDigest\n tuple.credentialIn = q.credential; tuple.bundleThread ??= doc.threadId; tuple.bundleDigest ??= digest\n if (tuple.bundleThread !== doc.threadId) { (tuple.inThreads ??= new Set()).add(doc.threadId); (tuple.inThreadDigests ??= new Map()).set(doc.threadId, digest) } // a re-issue's fresh thread is used now (4.1) — and remembered with its document\n delete tuple.credentialPending\n tuple.state = edgeState(tuple)\n carryToHead(p, tuple)\n const ack = commitAck(p, tuple, digest, q.ackEnv)\n say(p, `${card.name} — Credential angekommen (Record stand bereits, optischer Leg)`)\n return { handled: true, accepted: true, mutual: tuple.state === '✓', from: card.name, peerAnchor: card.anchor, ack, counterPending: !!tuple.counterDocPending }\n },\n }, failed)\n // a counter-step issued on the optical leg waited for this thread (4.3)\n if (res?.counterPending) {\n delete res.counterPending\n try { res.counterOut = await counterEffect(p, card.anchor, when, {}, [own]) } catch (err) { say(p, `Gegenschritt-Dokument: ${String((err as any)?.message ?? err)} — bleibt ausstehend`) }\n } else if (res) delete res.counterPending\n return res\n}\n\n// ── credential deliveries (4.3) ─────────────────────────────────────────\n// stage 7 + the 4.3 outer/inner consistency (MUST, before any effect) — a\n// violation is validation-failed and earns NO ack. SYNCHRONOUS, so it is\n// the verify step as well.\nfunction deliveryChecks (p: Person, ctx: any, doc: any): any {\n const pl = doc.payload\n if (!schemaOk('payload-encounter-credential-delivery.schema.json', pl)) return { error: 'malformed credential delivery' }\n const cred = pl.credential\n if (!C.calOK(doc.issuedAt)) return { error: 'calendar-invalid issuedAt' }\n if (doc.issuer !== cred.issuer) return { error: 'outer binding (issuer = credential.issuer)' }\n if (cred.credentialSubject?.id !== doc.recipient) return { error: 'outer binding (recipient = subject)' }\n if (doc.ceremony?.enactment !== undefined && !sameDigest(doc.ceremony.enactment, cred.credentialSubject.enactmentBinding)) return { error: 'ceremony.enactment recomputes not (validation-failed)' }\n // the relationship channel to the issuer — the ack's only legitimate\n // path; a DEACTIVATED (chained-away) tuple still takes a late credential\n // (Encounter 4.2: accepted against that enactment's record, harmlessly)\n const tuple = p.contacts.get(cred.issuer)\n if (!tuple?.channel?.own || tuple.channel.own.anchor !== ctx.anchor) return { error: 'validation-failed (no relationship channel to the issuer)' }\n // 4.3 thread rule: step \"counter\" = the bundle's threadId; step\n // \"deliver\" = a fresh thread; the step set is closed\n // Delivery §3: the ceremony member is \"entirely unconstrained\" — an\n // unknown `step` passes through unrejected; 4.3 gives MEANING to\n // \"counter\" and \"deliver\" only, and the thread rule binds those two\n const step = doc.ceremony?.step\n const isBundleThread = tuple.bundleThread !== undefined && doc.threadId === tuple.bundleThread\n if (step === 'counter' && !isBundleThread) return { error: 'validation-failed (counter-step outside the bundle thread)' }\n if (step === 'deliver' && isBundleThread) return { error: 'validation-failed (standalone delivery inside the bundle thread)' }\n if (!isBundleThread && threadInUse(p, doc.threadId)) return { error: 'validation-failed (threadId not fresh)' }\n return { cred, tuple, isBundleThread }\n}\n\n// 4.3: effect = durable BUFFERING; the ack is sent at buffering (lock set\n// = the document digest alone); acceptance (5.6) runs SEPARATELY in its\n// own record-key section and is never signaled (7.4).\nasync function receiveDelivery (p: Person, ctx: any, doc: any, digest: string, when: number, ent: any) {\n const pre = deliveryChecks(p, ctx, doc)\n if (pre.error) return failed(pre.error)\n const buffered: any = await effect<any, any>(p, [digest], {\n prepare: async () => {\n if (cached(p, digest)) return { done: dupResult(p, digest, pre.cred.issuer) }\n const r = deliveryChecks(p, ctx, doc)\n if (r.error) return { error: r.error }\n return { prep: { ...r, credDigest: await C.digestDoc(r.cred), ackEnv: await mkAck(p, r.tuple, digest, doc.threadId, when) } }\n },\n verify: (q) => {\n if (cached(p, digest)) return 'retry'\n const r = deliveryChecks(p, ctx, doc) // synchronous — every consistency + thread condition again\n if (r.error) return r.error\n if (r.tuple !== q.tuple) return 'retry'\n return null\n },\n commit: (q) => {\n // buffer + thread reservation + completed-effect cache + retained ack\n ;(q.tuple.buffered ??= new Map()).set(q.credDigest, q.cred)\n if (!q.isBundleThread) (q.tuple.inThreads ??= new Set()).add(doc.threadId)\n const ack = commitAck(p, q.tuple, digest, q.ackEnv)\n return { handled: true, buffered: true, ack, cred: q.cred, tuple: q.tuple, credDigest: q.credDigest }\n },\n }, failed)\n if (!buffered.buffered) return buffered\n const { cred, tuple, credDigest, ack } = buffered\n // the ack is available to the host NOW (4.3: sent at buffering); Encounter\n // acceptance runs separately — `acceptance` resolves with its local outcome\n // (never signaled to the issuer, 7.4)\n const acceptance = withLockSet(p, [cred.credentialSubject.challenge], () => acceptBuffered(p, tuple, cred, credDigest, ctx, when))\n .then((verdict) => ({ accepted: verdict === null, verdict, mutual: tuple.state === '✓' }))\n return { handled: true, buffered: true, from: tuple.name, peerAnchor: cred.issuer, ack, acceptance }\n}\nasync function acceptBuffered (p: Person, tuple: any, cred: any, credDigest: string, ctx: any, when: number): Promise<string | null> {\n // 5.6 IN ORDER: format · signature · addressee FIRST (steps 1–3, no\n // state touched); then — in ONE synchronous span — step 4 via 5.3\n // RESOLUTION (latching), steps 5–8 and the commit\n let e = await credHead(cred, ctx)\n const own = cred.credentialSubject.challenge\n // ── no await from here ──\n const rec = !e && resolve(p, own, when) === 'recorded' ? recs(p).get(own) : undefined\n if (!e) e = acceptTail(cred, rec, 'credential')\n if (!e && rec.accepted.in && !sameDigest(rec.accepted.in, credDigest)) e = 'ERR_CONFLICT' // step 8\n tuple.buffered.delete(credDigest) // evaluated — the buffer held it until now\n if (e) { say(p, `${tuple.name} — gepuffertes Credential nicht angenommen (${e}); der Aussteller erfährt davon nichts`); return e }\n rec.accepted.in = credDigest\n tuple.credentialIn = cred\n delete tuple.credentialPending\n tuple.state = edgeState(tuple)\n carryToHead(p, tuple)\n say(p, `${tuple.name} — Credential angekommen${tuple.state === '✓' ? ', ihr seid beidseitig verifiziert ✓' : ' (einseitig)'}`)\n return null\n}\n// one edge per relationship (4.2): mutuality reached on a chained-away link\n// is carried by the chain's active head (the continuity rule) — same for\n// both carriers of the credential (bundle and credential delivery)\nfunction carryToHead (p: Person, tuple: any) {\n if (!tuple.deactivated || tuple.state !== '✓') return\n const head = p.contacts.get(tuple.chainedInto)\n if (head && !head.deactivated) { head.state = '✓'; head.provenance = 'ceremony' }\n}\n\n// ── the host's producing call: byte-identical redelivery of unacked docs (4.2)\nexport function flushEncounter (p: Person) {\n const outbound: any[] = []\n for (const t of p.contacts.values()) for (const o of (t.outbox ?? new Map()).values()) {\n if ((o.kind === 'encounter-bundle' || o.kind === 'encounter-credential-delivery') && !o.acked) outbound.push({ to: t, kind: o.kind + '/0.1 (Retry, byte-identisch)', env: structuredClone(o.env) }) // the store keeps its own copy\n }\n return { outbound }\n}\n"]}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import * as C from './deps.js';
|
|
2
|
-
import type { Person } from './deps.js';
|
|
3
|
-
export declare function createPerson(name: string, rootIkm?: Uint8Array): Person;
|
|
4
|
-
export declare function freshCtx(p: Person, nonce?: Uint8Array): Promise<C.Context>;
|
|
5
|
-
export declare function ceremonyShow(p: Person, ent?: any): Promise<{
|
|
6
|
-
ctx: C.Context;
|
|
7
|
-
ch: string;
|
|
8
|
-
}>;
|
|
9
|
-
export declare function ceremonyComplete(a: Person, sa: any, b: Person, sb: any, when: number): Promise<{
|
|
10
|
-
ctxA: any;
|
|
11
|
-
ctxB: any;
|
|
12
|
-
bind: string;
|
|
13
|
-
}>;
|
|
14
|
-
export declare function ceremony(a: Person, b: Person, when: number, ent?: any): Promise<{
|
|
15
|
-
ctxA: any;
|
|
16
|
-
ctxB: any;
|
|
17
|
-
bind: string;
|
|
18
|
-
}>;
|
|
19
|
-
export declare function createDrop(): {
|
|
20
|
-
slots: Map<string, string>;
|
|
21
|
-
log: any[];
|
|
22
|
-
put(topic: string, blob: string, by: string): void;
|
|
23
|
-
get(topic: string, by: string): string | null;
|
|
24
|
-
};
|
|
25
|
-
export declare function introduce(m: Person, anchorA: string, anchorB: string, when: number, ent?: any): Promise<{
|
|
26
|
-
act: string;
|
|
27
|
-
offers: {
|
|
28
|
-
to: string;
|
|
29
|
-
env: C.Envelope;
|
|
30
|
-
}[];
|
|
31
|
-
}>;
|
|
32
|
-
export declare function receiveOffer(p: Person, env: any): Promise<{
|
|
33
|
-
entry: {
|
|
34
|
-
offer: any;
|
|
35
|
-
mediator: any;
|
|
36
|
-
mediatorAnchor: string;
|
|
37
|
-
decided: boolean;
|
|
38
|
-
};
|
|
39
|
-
error?: undefined;
|
|
40
|
-
} | {
|
|
41
|
-
duplicate: boolean;
|
|
42
|
-
error?: undefined;
|
|
43
|
-
} | {
|
|
44
|
-
error: string;
|
|
45
|
-
duplicate?: undefined;
|
|
46
|
-
}>;
|
|
47
|
-
export declare function consent(p: Person, entry: any, drop: any, when: number, ent?: any): Promise<any>;
|
|
48
|
-
export declare function checkDrop(p: Person, entry: any, drop: any): Promise<{
|
|
49
|
-
mutual: boolean;
|
|
50
|
-
error?: undefined;
|
|
51
|
-
card?: undefined;
|
|
52
|
-
} | {
|
|
53
|
-
error: string;
|
|
54
|
-
mutual?: undefined;
|
|
55
|
-
card?: undefined;
|
|
56
|
-
} | {
|
|
57
|
-
mutual: boolean;
|
|
58
|
-
card: any;
|
|
59
|
-
error?: undefined;
|
|
60
|
-
} | null>;
|
|
61
|
-
export declare function setOnline(p: Person, online: boolean, drop: any): Promise<void>;
|
|
62
|
-
//# sourceMappingURL=introduce.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"introduce.d.ts","sourceRoot":"","sources":["../../src/probe/introduce.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAOvC,wBAAgB,YAAY,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAexE;AAED,wBAAsB,QAAQ,CAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,sBAI5D;AAMD,wBAAsB,YAAY,CAAE,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ;;;GAG3D;AACD,wBAAsB,gBAAgB,CAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM;;;;GAc3F;AAED,wBAAsB,QAAQ,CAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ;;;;GAGhF;AAGD,wBAAgB,UAAU;;SAGX,GAAG,EAAE;eACJ,MAAM,QAAQ,MAAM,MAAM,MAAM;eAChC,MAAM,MAAM,MAAM;EAEjC;AAwBD,wBAAsB,SAAS,CAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ;;;;;;GAwBxG;AAGD,wBAAsB,YAAY,CAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG;;;;;;;;;;;;;;GAOtD;AA8BD,wBAAsB,OAAO,CAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ,gBAS3F;AA0BD,wBAAsB,SAAS,CAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;;;;;;;;;;;;UAkChE;AAGD,wBAAsB,SAAS,CAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,iBAQrE"}
|
package/dist/probe/introduce.js
DELETED
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
// introduce.mjs — the introduction act, PROBE for the §8 recast.
|
|
2
|
-
// DOM-free, deterministic-capable, on rltp-core + rltp-crypto.
|
|
3
|
-
//
|
|
4
|
-
// THE MODEL (Anton's cuts, 25.08. — supersedes converged §8@1's
|
|
5
|
-
// requester-initiated ferry):
|
|
6
|
-
// 1. MEDIATOR-INITIATED: only M can point at both parties (a requester
|
|
7
|
-
// has no in-app handle for the target; the verbal wish lives in real
|
|
8
|
-
// life). M opens a contact, taps "Vorstellen…", picks the other.
|
|
9
|
-
// 2. INDEPENDENT RELEASE (ceremony-parallel): both sides receive the
|
|
10
|
-
// offer simultaneously; EACH consent releases that person's OWN
|
|
11
|
-
// fresh card — one-sided outcomes stay first-class (◇), mutuality
|
|
12
|
-
// arises when both have released (⇄).
|
|
13
|
-
// 3. RENDEZVOUS DROP, not ferry: the offers carry a per-act secret;
|
|
14
|
-
// consenting devices deposit their sealed card at a derived topic
|
|
15
|
-
// and fetch the counterpart's — THE MEDIATOR IS NEVER NEEDED AGAIN
|
|
16
|
-
// after the initiating act (airplane-mode scenario). The drop is a
|
|
17
|
-
// PORT (put/get by derived topic, opaque blobs, TTL); relay-topic /
|
|
18
|
-
// DHT / iroh node / M's device are adapters below it.
|
|
19
|
-
// 4. The mediator VOUCHER binds the ACT, not the card (the drop model
|
|
20
|
-
// makes card-digest vouchers impossible — M never sees the cards;
|
|
21
|
-
// harvest finding for the recast). Each offer carries the voucher
|
|
22
|
-
// FOR THE COUNTERPART, signed under M's channel anchor toward that
|
|
23
|
-
// counterpart; the consenting side deposits it beside its card, so
|
|
24
|
-
// the fetcher verifies "this introduction came from MY M".
|
|
25
|
-
// Trust: M remains the authenticity anchor of the introduction either
|
|
26
|
-
// way; the systemic control is the first real encounter (◇→✓,
|
|
27
|
-
// continuity). Deniability/linkability hardening is RECAST WORK — this
|
|
28
|
-
// probe signs plainly and says so.
|
|
29
|
-
import { jcs, makeValidator, tsec } from '../core.js';
|
|
30
|
-
import { SCHEMAS } from '../schemas.js';
|
|
31
|
-
const VAL = makeValidator(SCHEMAS);
|
|
32
|
-
import * as C from './deps.js';
|
|
33
|
-
import { snapshotPriors } from './continuity.js';
|
|
34
|
-
const te = new TextEncoder(), td = new TextDecoder();
|
|
35
|
-
const S = globalThis.crypto.subtle;
|
|
36
|
-
// ── people ──────────────────────────────────────────────────────────────
|
|
37
|
-
export function createPerson(name, rootIkm) {
|
|
38
|
-
return {
|
|
39
|
-
name,
|
|
40
|
-
rootIkm: rootIkm ?? C.rand(64),
|
|
41
|
-
contexts: new Map(), // anchor/keyAgreement -> pair ctx (fresh-always)
|
|
42
|
-
contacts: new Map(), // counterpart anchor -> { name, card, provenance, state, channel }
|
|
43
|
-
inbox: [], // received offers/invites awaiting the human
|
|
44
|
-
groups: new Map(), // genesisDigest -> group state (Stage C, groups.mjs)
|
|
45
|
-
online: true,
|
|
46
|
-
queue: [], // actions deferred while offline (device ferry of ONESELF)
|
|
47
|
-
log: [],
|
|
48
|
-
// the demo community's genesis — a PROBE FIXTURE the person carries,
|
|
49
|
-
// so the strict identity layer never needs a default
|
|
50
|
-
communityGenesis: C.COMMUNITY_GENESIS,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
const say = (p, m) => p.log.push(m);
|
|
54
|
-
export async function freshCtx(p, nonce) {
|
|
55
|
-
const ctx = await C.pairContext(p.rootIkm, nonce ?? C.rand(32));
|
|
56
|
-
p.contexts.set(ctx.anchor, ctx);
|
|
57
|
-
p.contexts.set(ctx.keyAgreement, ctx);
|
|
58
|
-
return ctx;
|
|
59
|
-
}
|
|
60
|
-
// ── die Zeremonie in SCHRITTEN — die App-Choreografie (Encounter 5.2):
|
|
61
|
-
// Code zeigen → scannen → BEIDE bestätigen bewusst; erst dann entsteht
|
|
62
|
-
// das Enactment. Der gezeigte Anker ist immer frisch (4.4) und verrät
|
|
63
|
-
// nichts — wer ihn wirklich trifft, klärt hinterher die §6a-Probe.
|
|
64
|
-
export async function ceremonyShow(p, ent = {}) {
|
|
65
|
-
const ctx = await freshCtx(p, ent.nonce);
|
|
66
|
-
return { ctx, ch: C.challengeOf(ent.ch ?? C.rand(17)) };
|
|
67
|
-
}
|
|
68
|
-
export async function ceremonyComplete(a, sa, b, sb, when) {
|
|
69
|
-
const ctxA = sa.ctx, ctxB = sb.ctx, chA = sa.ch, chB = sb.ch;
|
|
70
|
-
const bind = await C.binding(C.CEREMONY, chA, chB);
|
|
71
|
-
const iso = C.iso(when);
|
|
72
|
-
const cardA = await C.signCard(ctxA, C.cardBody(ctxA, { name: a.name, challenge: { value: chA, issuedAt: iso } }), iso);
|
|
73
|
-
const cardB = await C.signCard(ctxB, C.cardBody(ctxB, { name: b.name, challenge: { value: chB, issuedAt: iso } }), iso);
|
|
74
|
-
const credA = await C.issueCredential(ctxA, ctxB.anchor, C.CEREMONY, chB, bind, iso);
|
|
75
|
-
const credB = await C.issueCredential(ctxB, ctxA.anchor, C.CEREMONY, chA, bind, iso);
|
|
76
|
-
const priorsA = snapshotPriors(a), priorsB = snapshotPriors(b); // Schnappschuss VOR dem frischen Tupel (6a)
|
|
77
|
-
a.contacts.set(ctxB.anchor, { name: b.name, card: cardB, credential: credA, provenance: 'ceremony', state: '✓', since: iso, channel: { own: ctxA, counterpartKa: cardB.keyAgreement }, priorCands: priorsA });
|
|
78
|
-
b.contacts.set(ctxA.anchor, { name: a.name, card: cardA, credential: credB, provenance: 'ceremony', state: '✓', since: iso, channel: { own: ctxB, counterpartKa: cardA.keyAgreement }, priorCands: priorsB });
|
|
79
|
-
say(a, `Zeremonie mit ${b.name}: ✓ verifiziert (frisches Tupel)`);
|
|
80
|
-
say(b, `Zeremonie mit ${a.name}: ✓ verifiziert (frisches Tupel)`);
|
|
81
|
-
return { ctxA, ctxB, bind };
|
|
82
|
-
}
|
|
83
|
-
// Test-Shortcut: beide Schritte in einem Zug (Vorgeschichte in Szenarien)
|
|
84
|
-
export async function ceremony(a, b, when, ent = {}) {
|
|
85
|
-
return ceremonyComplete(a, await ceremonyShow(a, { nonce: ent.nonceA, ch: ent.chA }), b, await ceremonyShow(b, { nonce: ent.nonceB, ch: ent.chB }), when);
|
|
86
|
-
}
|
|
87
|
-
// ── the rendezvous drop PORT: put/get by derived topic, opaque blobs ────
|
|
88
|
-
export function createDrop() {
|
|
89
|
-
return {
|
|
90
|
-
slots: new Map(), // topic -> b64u blob
|
|
91
|
-
log: [], // { n, op, topic, by }
|
|
92
|
-
put(topic, blob, by) { this.slots.set(topic, blob); this.log.push({ n: this.log.length, op: 'put', topic: topic.slice(0, 16) + '…', by }); },
|
|
93
|
-
get(topic, by) { this.log.push({ n: this.log.length, op: 'get', topic: topic.slice(0, 16) + '…', by }); return this.slots.get(topic) ?? null; },
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
const dropTopic = async (secret, dir) => C.b64uOf(await C.hkdf(secret, 'rltp/introduce/topic/' + dir));
|
|
97
|
-
const dropKey = async (secret, dir) => S.importKey('raw', await C.hkdf(secret, 'rltp/introduce/key/' + dir), { name: 'AES-GCM' }, false, ['encrypt', 'decrypt']);
|
|
98
|
-
async function dropSeal(secret, dir, obj, nonce) {
|
|
99
|
-
const n = nonce ?? C.rand(12);
|
|
100
|
-
const ct = new Uint8Array(await S.encrypt({ name: 'AES-GCM', iv: n }, await dropKey(secret, dir), te.encode(jcs(obj))));
|
|
101
|
-
return C.b64uOf(C.cat(n, ct));
|
|
102
|
-
}
|
|
103
|
-
async function dropOpen(secret, dir, blob) {
|
|
104
|
-
try {
|
|
105
|
-
const raw = C.fromB64u(blob);
|
|
106
|
-
const pt = await S.decrypt({ name: 'AES-GCM', iv: raw.subarray(0, 12) }, await dropKey(secret, dir), raw.subarray(12));
|
|
107
|
-
return JSON.parse(td.decode(new Uint8Array(pt)));
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// ── 1. the mediator's ONE act: "Vorstellen…" ────────────────────────────
|
|
114
|
-
// Produces two sealed offers over the EXISTING channels. After this, the
|
|
115
|
-
// mediator's device is done — nothing below ever touches it again.
|
|
116
|
-
// Introducible are ✓ AND ⇄ contacts (Anton's cut, 24.08.) — but the offer
|
|
117
|
-
// carries the mediator's OWN provenance toward the peer (met | introduced,
|
|
118
|
-
// the vouch@2 vocabulary): the recipient decides informed, and a chain of
|
|
119
|
-
// introductions never washes amber to blue — reach spreads, verification
|
|
120
|
-
// does not. ◇ cannot mediate: no own channel context exists.
|
|
121
|
-
export async function introduce(m, anchorA, anchorB, when, ent = {}) {
|
|
122
|
-
const A = m.contacts.get(anchorA), B = m.contacts.get(anchorB);
|
|
123
|
-
if (!A || !B)
|
|
124
|
-
throw new Error('mediator does not hold both contacts');
|
|
125
|
-
if (!A.channel?.own || !B.channel?.own)
|
|
126
|
-
throw new Error('introducing needs a mutual channel to BOTH (◇ cannot mediate)');
|
|
127
|
-
const secret = ent.secret ?? C.rand(32);
|
|
128
|
-
const act = await C.digestBytes(secret); // act id: public handle, secret stays sealed
|
|
129
|
-
const iso = C.iso(when);
|
|
130
|
-
const provOf = (c) => c.provenance === 'ceremony' ? 'met' : 'introduced';
|
|
131
|
-
const mk = async (mine, other, dir) => {
|
|
132
|
-
// voucher FOR the counterpart, under M's channel anchor toward the counterpart;
|
|
133
|
-
// it carries M's self-attested provenance toward the person it vouches for
|
|
134
|
-
const voucher = await C.diSign(other.channel.own, { type: 'introduction-voucher@2', act, direction: dir, provenance: provOf(mine), issuedAt: iso }, iso);
|
|
135
|
-
const offer = await C.diSign(mine.channel.own, {
|
|
136
|
-
type: 'introduction-offer@2', act, direction: dir, issuedAt: iso,
|
|
137
|
-
peer: { name: other.name, provenance: provOf(other) }, // M's LOCAL memory — words + honest basis, no anchors
|
|
138
|
-
rendezvous: C.b64uOf(secret),
|
|
139
|
-
voucherForCounterpart: voucher,
|
|
140
|
-
}, iso);
|
|
141
|
-
return C.seal(offer, mine.channel.counterpartKa, { ephSeed: ent.ephSeed, nonce: ent.sealNonce });
|
|
142
|
-
};
|
|
143
|
-
const envA = await mk(A, B, 'a');
|
|
144
|
-
const envB = await mk(B, A, 'b');
|
|
145
|
-
say(m, `Vorstellen: ${A.name} ⇠⇢ ${B.name} — zwei Angebote versiegelt, Akt ${act.slice(0, 12)}… · mein Gerät ist ab jetzt nicht mehr nötig`);
|
|
146
|
-
return { act, offers: [{ to: anchorA, env: envA }, { to: anchorB, env: envB }] };
|
|
147
|
-
}
|
|
148
|
-
// ── 2. receiving the offer (each side, independently) ───────────────────
|
|
149
|
-
export async function receiveOffer(p, env) {
|
|
150
|
-
const opened = await C.openEnvelope(p, env); // Stufen 1–4, Cache-Lesung
|
|
151
|
-
if (opened.duplicate)
|
|
152
|
-
return { duplicate: true }; // kein Fehler: der Effekt ist längst da
|
|
153
|
-
if (opened.error)
|
|
154
|
-
return { error: opened.error };
|
|
155
|
-
const r = await receiveOfferInner(p, env, opened.doc);
|
|
156
|
-
if (!r.error)
|
|
157
|
-
C.effectDone(p, opened.digest);
|
|
158
|
-
return r;
|
|
159
|
-
}
|
|
160
|
-
async function receiveOfferInner(p, env, offer) {
|
|
161
|
-
// form BEFORE fields (M-3; value forms per review 9, P-B1): the offer
|
|
162
|
-
// binds ITS artifact form before anything enters the inbox
|
|
163
|
-
if (!C.shaped(offer, { type: 'string', act: 'string', direction: 'string', rendezvous: 'string', issuedAt: 'string', peer: 'object', proof: 'object' })
|
|
164
|
-
|| offer.type !== 'introduction-offer@2'
|
|
165
|
-
|| (offer.direction !== 'a' && offer.direction !== 'b')
|
|
166
|
-
|| !C.calOK(offer.issuedAt)
|
|
167
|
-
|| !C.shaped(offer.peer, { name: 'string', provenance: 'string' })
|
|
168
|
-
|| (offer.peer.provenance !== 'met' && offer.peer.provenance !== 'introduced'))
|
|
169
|
-
return { error: 'malformed offer' };
|
|
170
|
-
try {
|
|
171
|
-
if (C.fromB64u(offer.rendezvous).length !== 32)
|
|
172
|
-
return { error: 'malformed offer' };
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
return { error: 'malformed offer' };
|
|
176
|
-
}
|
|
177
|
-
// der mitreisende Voucher ist Teil der Offer-Form (Review 10, P-B1-Rest):
|
|
178
|
-
// er wird beim Consent unbesehen ins Drop-Paket übernommen
|
|
179
|
-
const v = offer.voucherForCounterpart;
|
|
180
|
-
if (!C.shaped(v, { type: 'string', act: 'string', direction: 'string', provenance: 'string', issuedAt: 'string', proof: 'object' })
|
|
181
|
-
|| v.type !== 'introduction-voucher@2' || v.act !== offer.act || !C.calOK(v.issuedAt))
|
|
182
|
-
return { error: 'malformed offer' };
|
|
183
|
-
const from = [...p.contacts.entries()].find(([anchor, c]) => c.channel && offer.proof?.verificationMethod?.startsWith(anchor));
|
|
184
|
-
if (!from)
|
|
185
|
-
return { error: 'offer not from a held contact' };
|
|
186
|
-
if (!(await C.diVerify(offer, from[0])))
|
|
187
|
-
return { error: 'offer proof fails' };
|
|
188
|
-
const entry = { offer, mediator: from[1].name, mediatorAnchor: from[0], decided: false };
|
|
189
|
-
p.inbox.push(entry);
|
|
190
|
-
say(p, `${from[1].name} möchte dich mit ${offer.peer.name} verbinden`);
|
|
191
|
-
return { entry };
|
|
192
|
-
}
|
|
193
|
-
// ── 3. consent: release the OWN card — independent of the other side.
|
|
194
|
-
// Releasing and receiving are SEPARATE (ceremony-parallel): consent only
|
|
195
|
-
// controls the own card; the counterpart's card arrives via sync
|
|
196
|
-
// (checkDrop) whether or not this side ever consents.
|
|
197
|
-
export async function consent(p, entry, drop, when, ent = {}) {
|
|
198
|
-
// the release happens once: a repeated consent keeps the released context
|
|
199
|
-
// and card (a new pair would orphan the channel the counterpart holds);
|
|
200
|
-
// a call while the release is in flight shares it (single-flight, #8)
|
|
201
|
-
if (entry.released)
|
|
202
|
-
return { ctx: entry.ownCtx, mutual: !!entry.counterpartAnchor };
|
|
203
|
-
if (entry.releasing)
|
|
204
|
-
return entry.releasing;
|
|
205
|
-
if (!p.online) {
|
|
206
|
-
p.queue.push(() => consent(p, entry, drop, when, ent));
|
|
207
|
-
say(p, 'offline — Freigabe wartet auf Netz');
|
|
208
|
-
return { queued: true };
|
|
209
|
-
}
|
|
210
|
-
entry.releasing = release(p, entry, drop, when, ent).finally(() => { entry.releasing = null; });
|
|
211
|
-
return entry.releasing;
|
|
212
|
-
}
|
|
213
|
-
async function release(p, entry, drop, when, ent) {
|
|
214
|
-
const { offer } = entry;
|
|
215
|
-
const secret = C.fromB64u(offer.rendezvous);
|
|
216
|
-
const myDir = offer.direction;
|
|
217
|
-
const ctx = await freshCtx(p, ent.nonce);
|
|
218
|
-
const iso = C.iso(when);
|
|
219
|
-
const card = await C.signCard(ctx, C.cardBody(ctx, { name: p.name, challenge: { value: C.challengeOf(ent.ch ?? C.rand(17)), issuedAt: iso } }), iso);
|
|
220
|
-
drop.put(await dropTopic(secret, myDir), await dropSeal(secret, myDir, { card, voucher: offer.voucherForCounterpart }, ent.dropNonce), p.name);
|
|
221
|
-
entry.decided = true;
|
|
222
|
-
entry.released = true;
|
|
223
|
-
entry.ownCtx = ctx;
|
|
224
|
-
entry.ownCard = card;
|
|
225
|
-
say(p, `Verbinden mit ${offer.peer.name}: eigene Karte freigegeben (◇ gesendet)`);
|
|
226
|
-
// if the counterpart's card is already held, the relationship is mutual now
|
|
227
|
-
if (entry.counterpartAnchor) {
|
|
228
|
-
const c = p.contacts.get(entry.counterpartAnchor);
|
|
229
|
-
if (c) {
|
|
230
|
-
c.state = '⇄';
|
|
231
|
-
c.channel.own = ctx;
|
|
232
|
-
say(p, `⇄ verbunden mit ${c.name} — beide Karten liegen vor`);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
const fetched = await checkDrop(p, entry, drop);
|
|
236
|
-
return { ctx, mutual: !!(entry.released && entry.counterpartAnchor) };
|
|
237
|
-
}
|
|
238
|
-
// ── 4. sync: fetch the counterpart's card — PASSIVE receipt, independent
|
|
239
|
-
// of the own decision (like a shared contact arriving; ignoring the offer
|
|
240
|
-
// never blocks what the other side chose to release) ────────────────────
|
|
241
|
-
export async function checkDrop(p, entry, drop) {
|
|
242
|
-
if (!p.online || entry.done)
|
|
243
|
-
return null;
|
|
244
|
-
const { offer } = entry;
|
|
245
|
-
const secret = C.fromB64u(offer.rendezvous);
|
|
246
|
-
const otherDir = offer.direction === 'a' ? 'b' : 'a';
|
|
247
|
-
const blob = drop.get(await dropTopic(secret, otherDir), p.name);
|
|
248
|
-
if (!blob)
|
|
249
|
-
return { mutual: false };
|
|
250
|
-
const pkg = await dropOpen(secret, otherDir, blob);
|
|
251
|
-
if (!pkg) {
|
|
252
|
-
say(p, 'Drop-Blob unlesbar (falsches Geheimnis?)');
|
|
253
|
-
return { error: 'undecryptable' };
|
|
254
|
-
}
|
|
255
|
-
// form BEFORE fields (M-3), THEN the cryptography — and the card runs
|
|
256
|
-
// through its CLOSED wire-0.25 schema, not an ad-hoc field list
|
|
257
|
-
// (review 3, M-4: a valid signature binds a schema-violating card too)
|
|
258
|
-
if (!C.shaped(pkg, { card: 'object', voucher: 'object' })
|
|
259
|
-
|| !C.shaped(pkg.voucher, { act: 'string' })) {
|
|
260
|
-
say(p, 'Drop-Paket formwidrig');
|
|
261
|
-
return { error: 'malformed' };
|
|
262
|
-
}
|
|
263
|
-
{
|
|
264
|
-
const s = SCHEMAS['contact-card.schema.json'];
|
|
265
|
-
const errs = VAL.validate(pkg.card, s, s);
|
|
266
|
-
if (errs.length) {
|
|
267
|
-
say(p, 'Karte schema-widrig: ' + errs[0]);
|
|
268
|
-
return { error: 'card schema' };
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
// the counterpart card: schema + DI; the voucher: signed by MY mediator
|
|
272
|
-
if (!(await C.diVerify(pkg.card, pkg.card.anchor))) {
|
|
273
|
-
say(p, 'Karte verifiziert nicht');
|
|
274
|
-
return { error: 'card' };
|
|
275
|
-
}
|
|
276
|
-
if (!(await C.diVerify(pkg.voucher, entry.mediatorAnchor)) || pkg.voucher.act !== offer.act) {
|
|
277
|
-
say(p, 'Voucher verifiziert nicht unter meinem Vermittler');
|
|
278
|
-
return { error: 'voucher' };
|
|
279
|
-
}
|
|
280
|
-
entry.done = true;
|
|
281
|
-
entry.counterpartAnchor = pkg.card.anchor;
|
|
282
|
-
const mutual = !!entry.released;
|
|
283
|
-
const priors = snapshotPriors(p); // Schnappschuss VOR dem frischen Tupel (6a)
|
|
284
|
-
p.contacts.set(pkg.card.anchor, {
|
|
285
|
-
name: pkg.card.name, card: pkg.card, provenance: `introduced via ${entry.mediator}`, since: entry.offer.issuedAt,
|
|
286
|
-
mediatorProvenance: entry.offer.peer.provenance ?? 'met', priorCands: priors,
|
|
287
|
-
state: mutual ? '⇄' : '◇', channel: { own: entry.ownCtx ?? null, counterpartKa: pkg.card.keyAgreement },
|
|
288
|
-
voucher: pkg.voucher,
|
|
289
|
-
});
|
|
290
|
-
say(p, mutual ? `⇄ verbunden mit ${pkg.card.name} — via ${entry.mediator} (Voucher geprüft)` : `◇ ${pkg.card.name} erhalten — vorgestellt via ${entry.mediator} (einseitig; du hast nichts freigegeben)`);
|
|
291
|
-
return { mutual, card: pkg.card };
|
|
292
|
-
}
|
|
293
|
-
// ── device lifecycle ────────────────────────────────────────────────────
|
|
294
|
-
export async function setOnline(p, online, drop) {
|
|
295
|
-
p.online = online;
|
|
296
|
-
say(p, online ? 'online' : 'offline (Flugmodus)');
|
|
297
|
-
if (online) {
|
|
298
|
-
const q = p.queue.splice(0);
|
|
299
|
-
for (const fn of q)
|
|
300
|
-
await fn();
|
|
301
|
-
for (const e of p.inbox)
|
|
302
|
-
if (!e.kind)
|
|
303
|
-
await checkDrop(p, e, drop); // nur Vorstellungs-Angebote haben einen Drop
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
//# sourceMappingURL=introduce.js.map
|