@cello-protocol/daemon 0.0.212 → 0.0.213

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.
Files changed (71) hide show
  1. package/dist/close-session-handler.d.ts.map +1 -1
  2. package/dist/close-session-handler.js +32 -5
  3. package/dist/close-session-handler.js.map +1 -1
  4. package/dist/daemon.js +16 -14
  5. package/dist/daemon.js.map +1 -1
  6. package/dist/document-flag.d.ts +58 -0
  7. package/dist/document-flag.d.ts.map +1 -0
  8. package/dist/document-flag.js +70 -0
  9. package/dist/document-flag.js.map +1 -0
  10. package/dist/document-gate-wiring.d.ts +61 -0
  11. package/dist/document-gate-wiring.d.ts.map +1 -0
  12. package/dist/document-gate-wiring.js +119 -0
  13. package/dist/document-gate-wiring.js.map +1 -0
  14. package/dist/index.d.ts +2 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +6 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/ipc-server.d.ts.map +1 -1
  19. package/dist/ipc-server.js +52 -2
  20. package/dist/ipc-server.js.map +1 -1
  21. package/dist/relay-receipt-store.d.ts +27 -0
  22. package/dist/relay-receipt-store.d.ts.map +1 -1
  23. package/dist/relay-receipt-store.js +32 -0
  24. package/dist/relay-receipt-store.js.map +1 -1
  25. package/dist/seal-carried-close.d.ts +37 -0
  26. package/dist/seal-carried-close.d.ts.map +1 -0
  27. package/dist/seal-carried-close.js +179 -0
  28. package/dist/seal-carried-close.js.map +1 -0
  29. package/dist/seal-certified-root-check.d.ts +37 -0
  30. package/dist/seal-certified-root-check.d.ts.map +1 -0
  31. package/dist/seal-certified-root-check.js +127 -0
  32. package/dist/seal-certified-root-check.js.map +1 -0
  33. package/dist/seal-coordinator.d.ts +6 -1
  34. package/dist/seal-coordinator.d.ts.map +1 -1
  35. package/dist/seal-coordinator.js +2 -1
  36. package/dist/seal-coordinator.js.map +1 -1
  37. package/dist/seal-escalation.d.ts.map +1 -1
  38. package/dist/seal-escalation.js +30 -1
  39. package/dist/seal-escalation.js.map +1 -1
  40. package/dist/seal-local-terminus.d.ts +41 -0
  41. package/dist/seal-local-terminus.d.ts.map +1 -0
  42. package/dist/seal-local-terminus.js +170 -0
  43. package/dist/seal-local-terminus.js.map +1 -0
  44. package/dist/seal-relay-silence.d.ts +51 -0
  45. package/dist/seal-relay-silence.d.ts.map +1 -0
  46. package/dist/seal-relay-silence.js +76 -0
  47. package/dist/seal-relay-silence.js.map +1 -0
  48. package/dist/session-leaf-records.d.ts +9 -0
  49. package/dist/session-leaf-records.d.ts.map +1 -1
  50. package/dist/session-leaf-records.js +19 -0
  51. package/dist/session-leaf-records.js.map +1 -1
  52. package/dist/session-lifecycle.js +9 -9
  53. package/dist/session-lifecycle.js.map +1 -1
  54. package/dist/session-node-manager.d.ts +13 -1
  55. package/dist/session-node-manager.d.ts.map +1 -1
  56. package/dist/session-node-manager.js +14 -13
  57. package/dist/session-node-manager.js.map +1 -1
  58. package/dist/session-relay-client.d.ts.map +1 -1
  59. package/dist/session-relay-client.js +11 -14
  60. package/dist/session-relay-client.js.map +1 -1
  61. package/dist/session-relay.js +3 -3
  62. package/dist/session-relay.js.map +1 -1
  63. package/dist/session-seal.d.ts +18 -32
  64. package/dist/session-seal.d.ts.map +1 -1
  65. package/dist/session-seal.js +53 -113
  66. package/dist/session-seal.js.map +1 -1
  67. package/dist/vocabulary.d.ts +22 -4
  68. package/dist/vocabulary.d.ts.map +1 -1
  69. package/dist/vocabulary.js +66 -21
  70. package/dist/vocabulary.js.map +1 -1
  71. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"seal-escalation.js","sourceRoot":"","sources":["../src/seal-escalation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seal-escalation.js","sourceRoot":"","sources":["../src/seal-escalation.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAejD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAwB;AACxB;;yDAEyD;AACzD,SAAiB,EACjB,SAAiB,EACjB,UAA+D,EAC/D,aAAqB;AACrB;;;;;;;GAOG;AACH,OAA2C,EAAE,qBAAqB,EAAE,KAAK,EAAE;IAK3E,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,wBAAwB,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACnH,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC;IAC7C,IAAI,UAA0C,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,OAAO,CAAmB,CAAC,CAAC,EAAE,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;IACxE,oGAAoG;IACpG,kGAAkG;IAClG,+FAA+F;IAC/F,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5G,wFAAwF;IACxF,8FAA8F;IAC9F,8FAA8F;IAC9F,sFAAsF;IACtF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,4BAA4B;YACpC,QAAQ,EACN,iOAAiO;SACpO,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,eAAe,EAAE,CAAC,CAAC,cAAc;QACjC,SAAS,EAAE,CAAC,CAAC,QAAQ;QACrB,eAAe,EAAE,CAAC,CAAC,cAAc;QACjC,eAAe,EAAE,CAAC,CAAC,cAAc;QACjC,2FAA2F;QAC3F,QAAQ,EAAE,CAAC,CAAC,OAAO;QACnB,eAAe,EAAE,CAAC,CAAC,cAAc;QACjC,eAAe,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1G,6FAA6F;QAC7F,iGAAiG;QACjG,kBAAkB,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;KAClH,CAAC,CAAC,CAAC;IACJ,+FAA+F;IAC/F,EAAE;IACF,oGAAoG;IACpG,mGAAmG;IACnG,+FAA+F;IAC/F,+FAA+F;IAC/F,2FAA2F;IAC3F,wFAAwF;IACxF,EAAE;IACF,8FAA8F;IAC9F,8FAA8F;IAC9F,oCAAoC;IACpC,IAAI,IAAI,CAAC,qBAAqB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,kBAAkB;YAC1B,QAAQ,EACN,+UAA+U;SAClV,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,qBAAqB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrD,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,0BAA0B;YAClC,QAAQ,EACN,sEAAsE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,4RAA4R;SACzX,CAAC;IACJ,CAAC;IAED,gGAAgG;IAChG,8FAA8F;IAC9F,0FAA0F;IAC1F,8FAA8F;IAC9F,6FAA6F;IAC7F,yFAAyF;IACzF,gGAAgG;IAChG,6FAA6F;IAC7F,yFAAyF;IACzF,sDAAsD;IACtD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,eAAe,KAAK,kBAAkB,CAAC,CAAC;IACzG,IAAI,IAAI,CAAC,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,oCAAoC;YAC5C,QAAQ,EACN,+BAA+B,OAAO,CAAC,MAAM,iWAAiW;SACjZ,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,gGAAgG;IAChG,8FAA8F;IAC9F,6FAA6F;IAC7F,2FAA2F;IAC3F,+FAA+F;IAC/F,4FAA4F;IAC5F,8FAA8F;IAC9F,wFAAwF;IACxF,yFAAyF;IACzF,yDAAyD;IACzD,EAAE;IACF,2FAA2F;IAC3F,0FAA0F;IAC1F,8FAA8F;IAC9F,wCAAwC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAChH,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,kCAAkC;YAC1C,QAAQ,EACN,oTAAoT;SACvT,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,CAAC,kBAAkB,KAAK,SAAS,CAC7E,CAAC;IACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,2BAA2B;YACnC,QAAQ,EACN,uVAAuV;SAC1V,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE;QACrC,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACzD,aAAa,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC7E,YAAY,EAAE,UAAU,CAAC,cAAc;QACvC,WAAW;KACZ,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,6BAA6B;YACrC,QAAQ,EAAE,8IAA8I;SACzJ,CAAC;IACJ,CAAC;IACD,IAAI,QAAwC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,OAAO,CAAmB,CAAC,CAAC,EAAE,EAAE;QACtD,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/D,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;QAC7H,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,2HAA2H;QAC7J,0FAA0F;QAC1F,yFAAyF;QACzF,qFAAqF;QACrF,OAAO;YACL,EAAE,EAAE,IAAI;YACR,WAAW,EAAE,SAAS,CAAC,aAAa;YACpC,SAAS,EAAE,YAAY;YACvB,GAAG,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,2BAA2B,EAAE,CAAC;QACrD;;;;;;;;;;;WAWG;QACH,IAAI,SAAS,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;YAC/C,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,uFAAuF;gBACvF,oCAAoC;gBACpC,MAAM,EAAE,2BAA2B;gBACnC,QAAQ,EACN,oVAAoV;aACvV,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;YACzC;;;;;;;;;;eAUG;YACH,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,qBAAqB;gBAC7B,QAAQ,EACN,gWAAgW;aACnW,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,KAAK,+BAA+B,EAAE,CAAC;YACxD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,oCAAoC;gBAC5C,QAAQ,EACN,8bAA8b;aACjc,CAAC;QACJ,CAAC;QACD,uFAAuF;QACvF,MAAM,IAAI,GACR,OAAO,SAAS,CAAC,gBAAgB,KAAK,QAAQ;YAC5C,CAAC,CAAC,2CAA2C,SAAS,CAAC,gBAAgB,KAAK;YAC5E,CAAC,CAAC,EAAE,CAAC;QACT,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,2BAA2B;YACnC,uFAAuF;YACvF,4FAA4F;YAC5F,6EAA6E;YAC7E,GAAG,CAAC,OAAO,SAAS,CAAC,gBAAgB,KAAK,QAAQ;gBAChD,CAAC,CAAC,EAAE,mBAAmB,EAAE,SAAS,CAAC,gBAAgB,EAAE;gBACrD,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ,EAAE,2KAA2K,IAAI,oFAAoF;SAC9Q,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,QAAQ,EAAE,gOAAgO;KAC3O,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { SealCarryLeaf } from "./session-seal-leaf-store.js";
2
+ export interface LocalSealTerminusInput {
3
+ /** The relay's ordered log as this side holds it, ascending. Both parties' leaves. */
4
+ carry: readonly SealCarryLeaf[];
5
+ /** This agent's K_local pubkey, hex — who the terminus is authored by. */
6
+ ownPubkeyHex: string;
7
+ /** The same key as bytes, for the Structure 1 claim. */
8
+ ownPubkey: Uint8Array;
9
+ /** The RELAY session id the carried leaves are recorded under. */
10
+ sessionIdBytes: Uint8Array;
11
+ /** The session's agreed starting point — what both links fall back to before anyone has spoken. */
12
+ genesis: Uint8Array;
13
+ /** The content-only root this side signs, hex. */
14
+ finalRootHex: string;
15
+ closeTimestamp: number;
16
+ sign: (bytes: Uint8Array) => Promise<Uint8Array>;
17
+ }
18
+ export type LocalSealTerminusResult = {
19
+ ok: true;
20
+ leaf: SealCarryLeaf;
21
+ payload: Uint8Array;
22
+ contentHashHex: string;
23
+ } | {
24
+ ok: false;
25
+ reason: string;
26
+ };
27
+ /**
28
+ * Refusals, and each one is a case where writing a leaf anyway would make things worse:
29
+ *
30
+ * `seal_carry_empty` nothing was ever witnessed, so there is no record to close.
31
+ * `seal_carry_noncontiguous` a witnessed leaf never reached us; a terminus over a record with a
32
+ * hole in it would be signing a history we know is not the history.
33
+ * `seal_carry_own_ctrl_present` we already closed. A SECOND control leaf from one party makes the
34
+ * session unsealable by any directory, permanently — the caller must
35
+ * reuse the one that is there, never add to it.
36
+ * `seal_carry_unreadable` a leaf this daemon cannot decode is one it cannot chain onto.
37
+ * `seal_carry_leaf_kind_unknown` a leaf kind this build cannot name has no domain to hash in, and
38
+ * a guessed one yields a root nobody else computes.
39
+ */
40
+ export declare function buildLocalSealTerminus(input: LocalSealTerminusInput): Promise<LocalSealTerminusResult>;
41
+ //# sourceMappingURL=seal-local-terminus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seal-local-terminus.d.ts","sourceRoot":"","sources":["../src/seal-local-terminus.ts"],"names":[],"mappings":"AA6CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AA2BlE,MAAM,WAAW,sBAAsB;IACrC,sFAAsF;IACtF,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IAChC,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,SAAS,EAAE,UAAU,CAAC;IACtB,kEAAkE;IAClE,cAAc,EAAE,UAAU,CAAC;IAC3B,mGAAmG;IACnG,OAAO,EAAE,UAAU,CAAC;IACpB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAClD;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC9E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA6FlC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * `DOD-M15-CARRIEDSEAL-1` — THE CLOSING LEAF THIS SIDE WRITES WHEN THERE IS NO RELAY LEFT TO ASK.
3
+ *
4
+ * ─── What this exists to fix ───────────────────────────────────────────────────────────────────
5
+ *
6
+ * A seal needed the relay alive, and for exactly one reason. Every message in a conversation is
7
+ * countersigned by the relay when it is ordered and held by BOTH parties from that moment
8
+ * (`069-ORDERPROOF`), so the record itself survives the relay being restarted, rolled or deleted.
9
+ * What did not survive was the last line: the SEAL control leaf that ends the record was handed to
10
+ * the relay for a sequence number like any other leaf, so a relay that was gone at close time cost
11
+ * the conversation its receipt — a record that was fully witnessed, fully held, and unusable.
12
+ *
13
+ * This writes that one leaf here instead.
14
+ *
15
+ * ─── Why nothing is being taken on trust ───────────────────────────────────────────────────────
16
+ *
17
+ * The leaf invents no facts. **Every field is read out of the carry it closes over**, which is the
18
+ * relay's own ordered log as both parties received it:
19
+ *
20
+ * - **position** — one past the last carried leaf. Contiguity from 1 is checked first, so there is
21
+ * no position to choose.
22
+ * - **`prev_root`** — the RFC 6962 fold over the carried leaves in the Structure 2 domain. This is
23
+ * the value the directory's own chain walk arrives at when it reaches this leaf, so naming any
24
+ * other one breaks the walk rather than fooling it.
25
+ * - **`last_seen`** — the counterparty's newest carried leaf, sequence and content hash.
26
+ * - **`prev_own`** — this side's newest carried leaf.
27
+ * - **`final_root`** — the content-only root, which is what each party signs and what the
28
+ * counterparty's copy must agree with.
29
+ *
30
+ * So the only thing this side supplies that is genuinely its own is the CHOICE TO STOP HERE. That is
31
+ * truncation, it is bounded by design, the counterparty refutes it from their own copy, and the work
32
+ * order says in terms not to chase it.
33
+ *
34
+ * ⚠️ **THE RECEIPT FIELDS ARE ABSENT, AND ABSENT IS NOT THE SAME AS EMPTY.** A leaf carrying a blank
35
+ * relay id would be CLAIMING a witness it cannot produce, and the directory judges that as a
36
+ * malformed receipt — correctly, because missing and malformed must not be told apart. The
37
+ * directory's exemption is for a terminal control leaf with no receipt AT ALL, so this writes none.
38
+ *
39
+ * Crypto refs: RFC 8032 (Ed25519, the sender signature), RFC 6962 §2.1 (the Merkle fold).
40
+ */
41
+ import { createHash } from "node:crypto";
42
+ import { buildMerkleTree, merkleRoot } from "@cello-protocol/crypto";
43
+ import { encodeSealPayload, encodeStructure1, encodeStructure2, decodeStructure1, SCAN_RESULT_SENTINEL, } from "@cello-protocol/protocol-types";
44
+ /** The SEAL control leaf's kind byte — the same 0x02 the relay path hashes under. */
45
+ const LEAF_KIND_CTRL = 0x02;
46
+ /**
47
+ * ⚠️ FOUR DOMAINS, NOT TWO — review HIGH-2, and the collapsed form is a trust-boundary bug the
48
+ * directory's own `LEAF_KINDS` table already carries a comment about having removed.
49
+ *
50
+ * `prev_root` is a fold over `leafHashFor(kind, structure2)`, and that function prefixes each leaf
51
+ * with its own domain byte. Writing "anything but 0x02 is a message" here makes every session that
52
+ * ever exchanged a DOCUMENT (0x04) or carried a refusal leaf (0x05) compute a prefix root the
53
+ * directory cannot reproduce. It fails as a broken chain and reaches the operator as
54
+ * `unilateral_root_unverifiable`, whose guidance tells them their transcript ORDER is in dispute
55
+ * with their counterparty and to compare copies out of band — a hash-domain bug on this machine,
56
+ * reported as the other person's fault, on exactly the sessions where the receipt matters most.
57
+ *
58
+ * `undefined` for a byte this build cannot name. Guessing a domain for it produces a root nobody
59
+ * else computes, which is the same failure reached by coercion instead of by a refusal.
60
+ */
61
+ const LEAF_DOMAINS = {
62
+ 0x00: "msg",
63
+ 0x02: "ctrl",
64
+ 0x04: "doc",
65
+ 0x05: "reject",
66
+ };
67
+ /**
68
+ * Refusals, and each one is a case where writing a leaf anyway would make things worse:
69
+ *
70
+ * `seal_carry_empty` nothing was ever witnessed, so there is no record to close.
71
+ * `seal_carry_noncontiguous` a witnessed leaf never reached us; a terminus over a record with a
72
+ * hole in it would be signing a history we know is not the history.
73
+ * `seal_carry_own_ctrl_present` we already closed. A SECOND control leaf from one party makes the
74
+ * session unsealable by any directory, permanently — the caller must
75
+ * reuse the one that is there, never add to it.
76
+ * `seal_carry_unreadable` a leaf this daemon cannot decode is one it cannot chain onto.
77
+ * `seal_carry_leaf_kind_unknown` a leaf kind this build cannot name has no domain to hash in, and
78
+ * a guessed one yields a root nobody else computes.
79
+ */
80
+ export async function buildLocalSealTerminus(input) {
81
+ const { carry, ownPubkeyHex, sessionIdBytes, genesis, finalRootHex, closeTimestamp, sign } = input;
82
+ if (carry.length === 0)
83
+ return { ok: false, reason: "seal_carry_empty" };
84
+ // Ascending and exactly 1..N. Sorted rather than assumed: the store returns rows ordered, and a
85
+ // terminus that trusted that ordering would be depending on a detail of a query it does not own.
86
+ const ordered = [...carry].sort((a, b) => a.sequenceNumber - b.sequenceNumber);
87
+ for (let i = 0; i < ordered.length; i++) {
88
+ if (ordered[i].sequenceNumber !== i + 1)
89
+ return { ok: false, reason: "seal_carry_noncontiguous" };
90
+ }
91
+ if (ordered.some((l) => l.leafKind === LEAF_KIND_CTRL && l.senderPubkeyHex === ownPubkeyHex)) {
92
+ return { ok: false, reason: "seal_carry_own_ctrl_present" };
93
+ }
94
+ // ── The links, read out of the leaves each party actually authored ──
95
+ // `ordered` is ascending, so the LAST match in each direction is that party's newest leaf. A
96
+ // decode failure anywhere refuses: this side cannot honestly say what it has seen if it cannot
97
+ // read what it holds.
98
+ let lastSeenSeq = 0;
99
+ let lastSeenHash = genesis;
100
+ let prevOwnHash = genesis;
101
+ for (const leaf of ordered) {
102
+ const s1 = decodeStructure1(leaf.structure1Cbor);
103
+ if (!s1.ok)
104
+ return { ok: false, reason: "seal_carry_unreadable" };
105
+ if (leaf.senderPubkeyHex === ownPubkeyHex) {
106
+ prevOwnHash = s1.fields.contentHash;
107
+ }
108
+ else {
109
+ lastSeenSeq = leaf.sequenceNumber;
110
+ lastSeenHash = s1.fields.contentHash;
111
+ }
112
+ }
113
+ /**
114
+ * The prefix root, in the STRUCTURE 2 domain — which is not the domain the certified root lives
115
+ * in, and conflating the two is the easiest mistake available here. `prev_root` is checked by the
116
+ * directory's incremental walk over `leafHashFor(kind, encodeStructure2(s2))`; the certified root
117
+ * is the fold over raw content hashes. Same leaves, different pre-images, different values.
118
+ */
119
+ const prefixInputs = [];
120
+ for (const l of ordered) {
121
+ const domain = LEAF_DOMAINS[l.leafKind];
122
+ if (!domain)
123
+ return { ok: false, reason: "seal_carry_leaf_kind_unknown" };
124
+ prefixInputs.push({ kind: domain, data: l.structure2Cbor });
125
+ }
126
+ const prevRoot = merkleRoot(buildMerkleTree(prefixInputs));
127
+ // The payload and its hash come from ONE derivation, deliberately. When they diverge the directory
128
+ // answers `seal_payload_unbound`, whose guidance accuses the relay of altering bytes — a correct
129
+ // relay named as an attacker for a mismatch made on this machine.
130
+ const payload = encodeSealPayload({
131
+ session_id: sessionIdBytes,
132
+ final_root: new Uint8Array(Buffer.from(finalRootHex, "hex")),
133
+ close_timestamp: closeTimestamp,
134
+ attestation: "PENDING",
135
+ });
136
+ const contentHash = new Uint8Array(createHash("sha256").update(new Uint8Array([LEAF_KIND_CTRL])).update(payload).digest());
137
+ const structure1Cbor = encodeStructure1({
138
+ contentHash,
139
+ senderPubkey: input.ownPubkey,
140
+ sessionId: sessionIdBytes,
141
+ lastSeenSeq,
142
+ timestamp: closeTimestamp,
143
+ lastSeenHash,
144
+ prevOwnHash,
145
+ });
146
+ const senderSignature = await sign(structure1Cbor);
147
+ const sequenceNumber = ordered.length + 1;
148
+ const structure2Cbor = encodeStructure2({
149
+ sequence_number: sequenceNumber,
150
+ sender_pubkey: input.ownPubkey,
151
+ content_hash: contentHash,
152
+ sender_signature: senderSignature,
153
+ scan_result: SCAN_RESULT_SENTINEL,
154
+ prev_root: prevRoot,
155
+ });
156
+ return {
157
+ ok: true,
158
+ payload,
159
+ contentHashHex: Buffer.from(contentHash).toString("hex"),
160
+ // No relay fields. See the header — absent, never blank.
161
+ leaf: {
162
+ sequenceNumber,
163
+ leafKind: LEAF_KIND_CTRL,
164
+ senderPubkeyHex: ownPubkeyHex,
165
+ structure2Cbor,
166
+ structure1Cbor,
167
+ },
168
+ };
169
+ }
170
+ //# sourceMappingURL=seal-local-terminus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seal-local-terminus.js","sourceRoot":"","sources":["../src/seal-local-terminus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * `DOD-M15-CARRIEDSEAL-1` — WHEN THE RELAY GAVE NO ANSWER, as opposed to giving a bad one.
3
+ *
4
+ * The seal writes its own closing leaf only when there was nobody to ask. That is a narrower
5
+ * condition than "the submit failed", and the difference is load-bearing: a relay that REFUSED a
6
+ * leaf has ruled on it, and routing around a ruling is exactly the behaviour a trust layer must not
7
+ * have. A relay that never answered has ruled on nothing.
8
+ *
9
+ * ⚠️ **THE LIST IS AN ALLOW-SET, AND THE DEFAULT IS THE OLD BEHAVIOUR.** A reason that is not here
10
+ * does not unlock the local terminus — the close fails as it does today. That asymmetry is the whole
11
+ * design: a new relay refusal reason added next year cannot silently widen this, because widening
12
+ * requires someone to come here and add it. The reverse default — "fall back unless the reason is
13
+ * one of these known refusals" — would have let every future refusal become a bypass.
14
+ *
15
+ * Every reason below is produced by THIS daemon, in `session-relay-client.ts` or
16
+ * `session-seal.ts`'s transport resolution, at a point where no `hash_submit_ack` came back.
17
+ *
18
+ * Three that are deliberately NOT here, and why each one is an answer rather than a silence:
19
+ * - `relay_assignment_rejected` — the relay considered the session and declined it.
20
+ * - `relay_ack_unverified` / `relay_ack_malformed` — the relay ANSWERED and the answer did not
21
+ * check out. That is a relay to distrust, and letting distrust promote us onto a path with
22
+ * weaker evidence is the wrong direction entirely.
23
+ * - `standing_receiver_unavailable` — this agent is not started. Local, fixable, and the existing
24
+ * guidance ("start the agent and retry") is the correct thing to tell someone.
25
+ */
26
+ /**
27
+ * ⚠️ THE ALLOW-SET IS NOT SUFFICIENT ON ITS OWN, AND THIS IS THE HALF THAT MAKES IT SOUND.
28
+ *
29
+ * The submit boundary COLLAPSES almost every relay refusal into `relay_unavailable`. Only three
30
+ * token faults survive under their own names (`DOD-M15-TOKENSTALE-1` split those out); everything
31
+ * else the relay actually said — rate limited, over its slot cap, this agent's token rejected as
32
+ * invalid, and by that code's own documented default every future relay-side reason — arrives at
33
+ * this file wearing the label for an outage.
34
+ *
35
+ * So the reason string alone cannot tell "nobody was there" from "they authenticated me and said
36
+ * no". A relay exercising judgement about this agent would have been read as silence and sealed
37
+ * around, which is the one thing this whole design says must never happen.
38
+ *
39
+ * The standing refusal is the signal the boundary drops, and the client still holds it. Ask for it
40
+ * directly rather than trying to infer it from a label that was never going to carry it.
41
+ *
42
+ * **A ruling is anything the relay answered with.** Not a list of known-bad reasons: a set like that
43
+ * defaults to "silence" for anything unfamiliar, which is the wrong direction here — a reason added
44
+ * next year would quietly become a bypass. Present means refused.
45
+ */
46
+ export declare function relayRefusedUs(refusal: {
47
+ reason: string;
48
+ } | null | undefined): boolean;
49
+ /** The relay never ruled. See the header — this is an allow-set and the default is to fail as before. */
50
+ export declare const RELAY_GAVE_NO_ANSWER: ReadonlySet<string>;
51
+ //# sourceMappingURL=seal-relay-silence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seal-relay-silence.d.ts","sourceRoot":"","sources":["../src/seal-relay-silence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEtF;AAED,yGAAyG;AACzG,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAyBnD,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * `DOD-M15-CARRIEDSEAL-1` — WHEN THE RELAY GAVE NO ANSWER, as opposed to giving a bad one.
3
+ *
4
+ * The seal writes its own closing leaf only when there was nobody to ask. That is a narrower
5
+ * condition than "the submit failed", and the difference is load-bearing: a relay that REFUSED a
6
+ * leaf has ruled on it, and routing around a ruling is exactly the behaviour a trust layer must not
7
+ * have. A relay that never answered has ruled on nothing.
8
+ *
9
+ * ⚠️ **THE LIST IS AN ALLOW-SET, AND THE DEFAULT IS THE OLD BEHAVIOUR.** A reason that is not here
10
+ * does not unlock the local terminus — the close fails as it does today. That asymmetry is the whole
11
+ * design: a new relay refusal reason added next year cannot silently widen this, because widening
12
+ * requires someone to come here and add it. The reverse default — "fall back unless the reason is
13
+ * one of these known refusals" — would have let every future refusal become a bypass.
14
+ *
15
+ * Every reason below is produced by THIS daemon, in `session-relay-client.ts` or
16
+ * `session-seal.ts`'s transport resolution, at a point where no `hash_submit_ack` came back.
17
+ *
18
+ * Three that are deliberately NOT here, and why each one is an answer rather than a silence:
19
+ * - `relay_assignment_rejected` — the relay considered the session and declined it.
20
+ * - `relay_ack_unverified` / `relay_ack_malformed` — the relay ANSWERED and the answer did not
21
+ * check out. That is a relay to distrust, and letting distrust promote us onto a path with
22
+ * weaker evidence is the wrong direction entirely.
23
+ * - `standing_receiver_unavailable` — this agent is not started. Local, fixable, and the existing
24
+ * guidance ("start the agent and retry") is the correct thing to tell someone.
25
+ */
26
+ /**
27
+ * ⚠️ THE ALLOW-SET IS NOT SUFFICIENT ON ITS OWN, AND THIS IS THE HALF THAT MAKES IT SOUND.
28
+ *
29
+ * The submit boundary COLLAPSES almost every relay refusal into `relay_unavailable`. Only three
30
+ * token faults survive under their own names (`DOD-M15-TOKENSTALE-1` split those out); everything
31
+ * else the relay actually said — rate limited, over its slot cap, this agent's token rejected as
32
+ * invalid, and by that code's own documented default every future relay-side reason — arrives at
33
+ * this file wearing the label for an outage.
34
+ *
35
+ * So the reason string alone cannot tell "nobody was there" from "they authenticated me and said
36
+ * no". A relay exercising judgement about this agent would have been read as silence and sealed
37
+ * around, which is the one thing this whole design says must never happen.
38
+ *
39
+ * The standing refusal is the signal the boundary drops, and the client still holds it. Ask for it
40
+ * directly rather than trying to infer it from a label that was never going to carry it.
41
+ *
42
+ * **A ruling is anything the relay answered with.** Not a list of known-bad reasons: a set like that
43
+ * defaults to "silence" for anything unfamiliar, which is the wrong direction here — a reason added
44
+ * next year would quietly become a bypass. Present means refused.
45
+ */
46
+ export function relayRefusedUs(refusal) {
47
+ return refusal != null;
48
+ }
49
+ /** The relay never ruled. See the header — this is an allow-set and the default is to fail as before. */
50
+ export const RELAY_GAVE_NO_ANSWER = new Set([
51
+ // No relay client, no stream, or the session is gone from the relay's side.
52
+ "relay_unavailable",
53
+ "relay_client_unavailable",
54
+ "relay_client_closed",
55
+ "relay_stream_closed",
56
+ /**
57
+ * ⚠️ KEPT DELIBERATELY, against a review finding that called it "a relay answer". It is one, and
58
+ * it is still the right side of this line.
59
+ *
60
+ * The relay answers `session_not_found` for a session it no longer holds — and a relay that has
61
+ * RESTARTED holds nothing, because its leaf log is a map in process memory. That is precisely the
62
+ * scenario this order exists for: the witness is gone even though the process is up and talking.
63
+ * Excluding it would mean a restarted relay still costs a conversation its receipt, which is the
64
+ * defect, not the fix.
65
+ *
66
+ * The refusals that must NOT unlock this path are the relay exercising judgement about this agent,
67
+ * and those are caught by `relayRefusedUs` above rather than by this list.
68
+ */
69
+ "relay_session_gone",
70
+ // The frame never left, or left and was never answered.
71
+ "relay_submit_send_failed",
72
+ "relay_submit_timeout",
73
+ // This daemon has no endpoint to dial any more — the relay is gone as far as it can tell.
74
+ "no_persisted_relay_endpoint",
75
+ ]);
76
+ //# sourceMappingURL=seal-relay-silence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seal-relay-silence.js","sourceRoot":"","sources":["../src/seal-relay-silence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,cAAc,CAAC,OAA8C;IAC3E,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IAC/D,4EAA4E;IAC5E,mBAAmB;IACnB,0BAA0B;IAC1B,qBAAqB;IACrB,qBAAqB;IACrB;;;;;;;;;;;;OAYG;IACH,oBAAoB;IACpB,wDAAwD;IACxD,0BAA0B;IAC1B,sBAAsB;IACtB,0FAA0F;IAC1F,6BAA6B;CAC9B,CAAC,CAAC"}
@@ -146,5 +146,14 @@ export declare class SessionLeafRecords {
146
146
  } | null;
147
147
  /** The in-memory genesis prev-root for a session, when one has been recorded. */
148
148
  genesisFor(agentName: string, sessionId: string): Uint8Array | undefined;
149
+ /**
150
+ * The in-memory relay anchor for a session — the counterpart of `genesisFor`, and read at the
151
+ * same moment for the same reason: the session ROW is inserted after the anchor is recorded, so
152
+ * the INSERT carries the value rather than an UPDATE trying to find a row that is not there yet.
153
+ *
154
+ * Deliberately NOT `sessionRelayAnchor`: that one reads the row as its last resort, which at
155
+ * insert time is the row being written. This is the memory copy only.
156
+ */
157
+ relayAnchorFor(agentName: string, sessionId: string): string | undefined;
149
158
  }
150
159
  //# sourceMappingURL=session-leaf-records.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-leaf-records.d.ts","sourceRoot":"","sources":["../src/session-leaf-records.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAKlE,4FAA4F;AAC5F,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,gGAAgG;IAChG,EAAE,IAAI,cAAc,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACzD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;CAC1D;AAED,qBAAa,kBAAkB;;gBAGjB,GAAG,EAAE,wBAAwB;IAmCzC;;;;;;;;;;;;;;;;OAgBG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAsCpF;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAc5E;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAyBlG,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,GAAG,IAAI;IAmDpG;;;;;;OAMG;IACH;;;;;;;;;;;;;;;;;OAiBG;IACH,oBAAoB,CAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,UAAU,EACxB,YAAY,EAAE,UAAU,EACxB,gBAAgB,EAAE,MAAM,EACxB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI;IAQP;;;;;;;;;;;;;OAaG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IA0BzF;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,SAAS,gBAAgB,EAAE,EACzC,aAAa,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO;IAqFV;;;;;;OAMG;IACH,+BAA+B,CAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,0BAA0B,GAAG,2BAA2B,EAC/D,MAAM,EAAE,MAAM,GACb,IAAI;IAGP,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAC1E,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAE/G,iFAAiF;IACjF,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;CAGzE"}
1
+ {"version":3,"file":"session-leaf-records.d.ts","sourceRoot":"","sources":["../src/session-leaf-records.ts"],"names":[],"mappings":"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"}
@@ -125,6 +125,14 @@ export class SessionLeafRecords {
125
125
  this.#sessionRelayAnchor.set(this.#ctx.sessionKey(agentName, sessionId), relayAnchorHex);
126
126
  if (!this.#db)
127
127
  return;
128
+ /**
129
+ * WRITE-ONCE ON DISK, overwritable in memory — an asymmetry worth naming rather than leaving to
130
+ * be discovered. If a session is ever handed to a SECOND relay (resume/handover, which nothing
131
+ * requests today), the row keeps the FIRST relay's key. Read order prefers the live assignment,
132
+ * so this only shows after a restart, and it shows as a named refusal — attestations checked
133
+ * against the old key fail loud — never as evidence accepted against the wrong witness. Whoever
134
+ * ships handover owns making this follow the handover.
135
+ */
128
136
  try {
129
137
  this.#db
130
138
  .prepare("UPDATE sessions SET relay_anchor_hex = ? WHERE agent_id = ? AND session_id = ? AND relay_anchor_hex IS NULL")
@@ -382,5 +390,16 @@ export class SessionLeafRecords {
382
390
  genesisFor(agentName, sessionId) {
383
391
  return this.#sessionGenesis.get(this.#ctx.sessionKey(agentName, sessionId));
384
392
  }
393
+ /**
394
+ * The in-memory relay anchor for a session — the counterpart of `genesisFor`, and read at the
395
+ * same moment for the same reason: the session ROW is inserted after the anchor is recorded, so
396
+ * the INSERT carries the value rather than an UPDATE trying to find a row that is not there yet.
397
+ *
398
+ * Deliberately NOT `sessionRelayAnchor`: that one reads the row as its last resort, which at
399
+ * insert time is the row being written. This is the memory copy only.
400
+ */
401
+ relayAnchorFor(agentName, sessionId) {
402
+ return this.#sessionRelayAnchor.get(this.#ctx.sessionKey(agentName, sessionId));
403
+ }
385
404
  }
386
405
  //# sourceMappingURL=session-leaf-records.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-leaf-records.js","sourceRoot":"","sources":["../src/session-leaf-records.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-leaf-records.js","sourceRoot":"","sources":["../src/session-leaf-records.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAa5D,MAAM,OAAO,kBAAkB;IACpB,IAAI,CAA2B;IAExC,YAAY,GAA6B;QACvC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,0FAA0F;IAC1F,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACM,eAAe,GAAG,IAAI,GAAG,EAAsB,CAAC;IACzD;;;;OAIG;IACM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzD;;;;;;;;;;;;;;;;OAgBG;IACH,sBAAsB,CAAC,SAAiB,EAAE,SAAiB;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC;QACtG,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,sBAAsB,CAC3B,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAC9C,UAAU,CAAC,gBAAgB,CAC5B,CAAC;QACJ,CAAC;QACD;;;;;;;;;WASG;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACtF,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B;;;;;WAKG;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;YAClB,EAAE,OAAO,CAAC,8EAA8E,CAAC;aACxF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAgD,CAAC;QACtG,MAAM,MAAM,GAAG,GAAG,EAAE,iBAAiB,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,YAAY,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9G,iGAAiG;QACjG,4FAA4F;QAC5F,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,SAAiB,EAAE,SAAiB;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC;QAChH,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1F,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;YAClB,EAAE,OAAO,CAAC,6EAA6E,CAAC;aACvF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAA+C,CAAC;QACrG,MAAM,MAAM,GAAG,GAAG,EAAE,gBAAgB,CAAC;QACrC,6FAA6F;QAC7F,uEAAuE;QACvE,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,SAAiB,EAAE,SAAiB,EAAE,cAAkC;QACzF,IAAI,CAAC,cAAc,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC;YAAE,OAAO;QACvE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO;QACtB;;;;;;;WAOG;QACH,IAAI,CAAC;YACH,IAAI,CAAC,GAAG;iBACL,OAAO,CAAC,6GAA6G,CAAC;iBACtH,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB;;;;eAIG;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;gBAC5D,SAAS,EAAE,SAAS;gBACpB,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC;gBAC/B,MAAM,EACJ,2FAA2F;oBAC3F,0FAA0F;oBAC1F,kEAAkE;aACrE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sBAAsB,CAAC,SAAiB,EAAE,SAAiB,EAAE,UAAgC;QAC3F,IAAI,OAAmB,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,sBAAsB,CAC9B,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAC9C,UAAU,CAAC,gBAAgB,CAC5B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB;;;;eAIG;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBACtD,SAAS,EAAE,SAAS;gBACpB,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC;gBAC/B,MAAM,EACJ,sFAAsF;oBACtF,qFAAqF;oBACrF,qCAAqC;aACxC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,6FAA6F;QAC7F,8EAA8E;QAC9E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,GAAG;iBACL,OAAO,CAAC,+GAA+G,CAAC;iBACxH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB;;;;;eAKG;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;gBACvD,SAAS,EAAE,SAAS;gBACpB,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC;gBAC/B,MAAM,EACJ,wFAAwF;oBACxF,gFAAgF;oBAChF,wFAAwF;oBACxF,eAAe;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD;;;;;;OAMG;IACH;;;;;;;;;;;;;;;;;OAiBG;IACH,oBAAoB,CAClB,SAAiB,EACjB,SAAiB,EACjB,YAAwB,EACxB,YAAwB,EACxB,gBAAwB,EACxB,cAAuB;QAEvB,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE;YAChD,YAAY,EAAE,YAAY,EAAE,gBAAgB;SACrB,CAAC,CAAC;QAC3B,qFAAqF;QACrF,iEAAiE;QACjE,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IACD;;;;;;;;;;;;;OAaG;IACH,wBAAwB,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAmB;QAChF;;;;;;;;;;;WAWG;QACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/F;;;;;WAKG;QACH,IAAI,CAAC;YACH,IAAI,CAAC,GAAG;gBACN,EAAE,OAAO,CAAC,iFAAiF,CAAC;iBAC3F,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC,CAAC,4DAA4D,CAAC,CAAC;IAC1E,CAAC;IACD;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CACpB,SAAiB,EACjB,SAAiB,EACjB,YAAyC,EACzC,aAAqB,EACrB,aAAsB;QAEtB,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAC5B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,gGAAgG;YAChG,+FAA+F;YAC/F,6FAA6F;YAC7F,cAAc;YACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjG,6FAA6F;YAC7F,6FAA6F;YAC7F,yFAAyF;YACzF,oEAAoE;YACpE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBACtD,SAAS;gBACT,SAAS;gBACT,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,aAAa;gBACb,MAAM,EACJ,2FAA2F;oBAC3F,yFAAyF;gBAC3F,QAAQ,EACN,6FAA6F;oBAC7F,yFAAyF;oBACzF,cAAc;aACjB,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACpD;;;;;;;;;eASG;YACH,6FAA6F;YAC7F,8FAA8F;YAC9F,6FAA6F;YAC7F,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,4EAA4E,CAAC;qBAC3F,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAC3B;;kCAEwB,CACzB,CAAC;gBACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC/D,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,CAAC;oBAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,uDAAuD,CAAC,CAAC;gBACpG,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3G,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE;gBAC7D,SAAS;gBACT,SAAS;gBACT,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC;gBAChC,aAAa;gBACb,MAAM,EACJ,+FAA+F;oBAC/F,qEAAqE;aACxE,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;YACtD,SAAS;YACT,SAAS;YACT,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;YACrC,UAAU,EAAE,aAAa;YACzB,aAAa;SACd,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;OAMG;IACH,+BAA+B,CAC7B,SAAiB,EACjB,SAAiB,EACjB,KAA+D,EAC/D,MAAc;QAEd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IACD,mBAAmB,CAAC,SAAiB,EAAE,SAAiB,IAAqB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAClJ,wBAAwB,CAAC,SAAiB,EAAE,SAAiB,IAAqD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAE5L,iFAAiF;IACjF,UAAU,CAAC,SAAiB,EAAE,SAAiB;QAC7C,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;;;;;;OAOG;IACH,cAAc,CAAC,SAAiB,EAAE,SAAiB;QACjD,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAClF,CAAC;CACF"}
@@ -1483,19 +1483,19 @@ export class SessionLifecycle {
1483
1483
  const now = Date.now();
1484
1484
  try {
1485
1485
  /**
1486
- * ⚠️ THE SESSION'S STARTING POINT GOES IN AT INSERT — `DOD-M15-SELFCHAIN-1`.
1487
- *
1488
- * It is recorded before this row exists (the session open needs it before the node is built),
1489
- * so an UPDATE at that moment has nothing to match. Writing it here is what puts it on disk,
1490
- * and on disk is what lets the chain be resumed after a restart. `null` when nothing recorded
1491
- * one, which is a session whose sends will be refused by name rather than silently unlinked.
1486
+ * ⚠️ THE STARTING POINT AND THE RELAY ANCHOR BOTH GO IN AT INSERT — `DOD-M15-SELFCHAIN-1` and
1487
+ * `DOD-M15-ORDERPROOF-1`, one rule, one reason. Both are recorded before this row exists, so
1488
+ * an UPDATE then matches nothing as the anchor, written that way first, found. On disk is
1489
+ * what survives a restart: without the genesis the chain cannot resume, without the anchor
1490
+ * there is no key to check the relay against. `null` when none — refused by name, not unlinked.
1492
1491
  */
1493
1492
  const genesis = this.#ctx.leafRecords.genesisFor(agentName, sessionId);
1493
+ const relayAnchor = this.#ctx.leafRecords.relayAnchorFor(agentName, sessionId);
1494
1494
  this.#db
1495
1495
  .prepare(`INSERT INTO sessions
1496
- (session_id, agent_id, counterparty_pubkey, status, created_at, updated_at, genesis_prev_root)
1497
- VALUES (?, ?, ?, ?, ?, ?, ?)`)
1498
- .run(sessionId, this.#ctx.requireAgentId(agentName), counterpartyPubkey, status, now, now, genesis ? Buffer.from(genesis) : null);
1496
+ (session_id, agent_id, counterparty_pubkey, status, created_at, updated_at, genesis_prev_root, relay_anchor_hex)
1497
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
1498
+ .run(sessionId, this.#ctx.requireAgentId(agentName), counterpartyPubkey, status, now, now, genesis ? Buffer.from(genesis) : null, relayAnchor ?? null);
1499
1499
  return true;
1500
1500
  }
1501
1501
  catch (err) {