@cello-protocol/daemon 0.0.227 → 0.0.229
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/dist/agent-admin-handlers.d.ts +56 -0
- package/dist/agent-admin-handlers.d.ts.map +1 -0
- package/dist/agent-admin-handlers.js +73 -0
- package/dist/agent-admin-handlers.js.map +1 -0
- package/dist/agent-handlers.d.ts +72 -0
- package/dist/agent-handlers.d.ts.map +1 -0
- package/dist/agent-handlers.js +604 -0
- package/dist/agent-handlers.js.map +1 -0
- package/dist/agent-id-migration.d.ts +70 -0
- package/dist/agent-id-migration.d.ts.map +1 -0
- package/dist/agent-id-migration.js +468 -0
- package/dist/agent-id-migration.js.map +1 -0
- package/dist/agent-loader.d.ts +37 -0
- package/dist/agent-loader.d.ts.map +1 -0
- package/dist/agent-loader.js +37 -0
- package/dist/agent-loader.js.map +1 -0
- package/dist/agent-selection-root.d.ts +29 -0
- package/dist/agent-selection-root.d.ts.map +1 -0
- package/dist/agent-selection-root.js +126 -0
- package/dist/agent-selection-root.js.map +1 -0
- package/dist/agent-selection.d.ts +73 -0
- package/dist/agent-selection.d.ts.map +1 -0
- package/dist/agent-selection.js +80 -0
- package/dist/agent-selection.js.map +1 -0
- package/dist/agent-settings-keys.d.ts +52 -0
- package/dist/agent-settings-keys.d.ts.map +1 -0
- package/dist/agent-settings-keys.js +114 -0
- package/dist/agent-settings-keys.js.map +1 -0
- package/dist/agent-state.d.ts +67 -0
- package/dist/agent-state.d.ts.map +1 -0
- package/dist/agent-state.js +66 -0
- package/dist/agent-state.js.map +1 -0
- package/dist/assignment-verify.d.ts +90 -0
- package/dist/assignment-verify.d.ts.map +1 -0
- package/dist/assignment-verify.js +301 -0
- package/dist/assignment-verify.js.map +1 -0
- package/dist/attendance-wiring.d.ts +23 -0
- package/dist/attendance-wiring.d.ts.map +1 -0
- package/dist/attendance-wiring.js +248 -0
- package/dist/attendance-wiring.js.map +1 -0
- package/dist/attestation-body.d.ts +47 -0
- package/dist/attestation-body.d.ts.map +1 -0
- package/dist/attestation-body.js +71 -0
- package/dist/attestation-body.js.map +1 -0
- package/dist/authorship-verification.d.ts +91 -0
- package/dist/authorship-verification.d.ts.map +1 -0
- package/dist/authorship-verification.js +532 -0
- package/dist/authorship-verification.js.map +1 -0
- package/dist/away-detection.d.ts +139 -0
- package/dist/away-detection.d.ts.map +1 -0
- package/dist/away-detection.js +186 -0
- package/dist/away-detection.js.map +1 -0
- package/dist/away-inbox-oneshot.d.ts +40 -0
- package/dist/away-inbox-oneshot.d.ts.map +1 -0
- package/dist/away-inbox-oneshot.js +311 -0
- package/dist/away-inbox-oneshot.js.map +1 -0
- package/dist/backup-restore-handlers.d.ts +10 -0
- package/dist/backup-restore-handlers.d.ts.map +1 -0
- package/dist/backup-restore-handlers.js +82 -0
- package/dist/backup-restore-handlers.js.map +1 -0
- package/dist/backup-restore.d.ts +102 -0
- package/dist/backup-restore.d.ts.map +1 -0
- package/dist/backup-restore.js +341 -0
- package/dist/backup-restore.js.map +1 -0
- package/dist/bin/cello-daemon.d.ts +13 -0
- package/dist/bin/cello-daemon.d.ts.map +1 -0
- package/dist/bin/cello-daemon.js.map +1 -0
- package/dist/boot-agents.d.ts +64 -0
- package/dist/boot-agents.d.ts.map +1 -0
- package/dist/boot-agents.js +241 -0
- package/dist/boot-agents.js.map +1 -0
- package/dist/boot-connection-state.d.ts +38 -0
- package/dist/boot-connection-state.d.ts.map +1 -0
- package/dist/boot-connection-state.js +95 -0
- package/dist/boot-connection-state.js.map +1 -0
- package/dist/boot-core.d.ts +36 -0
- package/dist/boot-core.d.ts.map +1 -0
- package/dist/boot-core.js +293 -0
- package/dist/boot-core.js.map +1 -0
- package/dist/boot-parked-content.d.ts +34 -0
- package/dist/boot-parked-content.d.ts.map +1 -0
- package/dist/boot-parked-content.js +528 -0
- package/dist/boot-parked-content.js.map +1 -0
- package/dist/boot-sweeps.d.ts +22 -0
- package/dist/boot-sweeps.d.ts.map +1 -0
- package/dist/boot-sweeps.js +51 -0
- package/dist/boot-sweeps.js.map +1 -0
- package/dist/bundled-consortium-manifest.d.ts +47 -0
- package/dist/bundled-consortium-manifest.d.ts.map +1 -0
- package/dist/bundled-consortium-manifest.js +116 -0
- package/dist/bundled-consortium-manifest.js.map +1 -0
- package/dist/cbor-blob-migration.d.ts +8 -0
- package/dist/cbor-blob-migration.d.ts.map +1 -0
- package/dist/cbor-blob-migration.js +116 -0
- package/dist/cbor-blob-migration.js.map +1 -0
- package/dist/challenge-verifier.d.ts +12 -0
- package/dist/challenge-verifier.d.ts.map +1 -0
- package/dist/challenge-verifier.js +11 -0
- package/dist/challenge-verifier.js.map +1 -0
- package/dist/channel-log-store.d.ts +80 -0
- package/dist/channel-log-store.d.ts.map +1 -0
- package/dist/channel-log-store.js +290 -0
- package/dist/channel-log-store.js.map +1 -0
- package/dist/close-commitment.d.ts +67 -0
- package/dist/close-commitment.d.ts.map +1 -0
- package/dist/close-commitment.js +78 -0
- package/dist/close-commitment.js.map +1 -0
- package/dist/close-session-handler.d.ts +94 -0
- package/dist/close-session-handler.d.ts.map +1 -0
- package/dist/close-session-handler.js +1418 -0
- package/dist/close-session-handler.js.map +1 -0
- package/dist/co-attendance.d.ts +29 -0
- package/dist/co-attendance.d.ts.map +1 -0
- package/dist/co-attendance.js +32 -0
- package/dist/co-attendance.js.map +1 -0
- package/dist/column-birth.d.ts +40 -0
- package/dist/column-birth.d.ts.map +1 -0
- package/dist/column-birth.js +61 -0
- package/dist/column-birth.js.map +1 -0
- package/dist/connect-or-start.d.ts +25 -0
- package/dist/connect-or-start.d.ts.map +1 -0
- package/dist/connect-or-start.js +175 -0
- package/dist/connect-or-start.js.map +1 -0
- package/dist/connection-agents.d.ts +16 -0
- package/dist/connection-agents.d.ts.map +1 -0
- package/dist/connection-agents.js +68 -0
- package/dist/connection-agents.js.map +1 -0
- package/dist/consent-migration.d.ts +49 -0
- package/dist/consent-migration.d.ts.map +1 -0
- package/dist/consent-migration.js +128 -0
- package/dist/consent-migration.js.map +1 -0
- package/dist/consortium-bootstrap.d.ts +138 -0
- package/dist/consortium-bootstrap.d.ts.map +1 -0
- package/dist/consortium-bootstrap.js +339 -0
- package/dist/consortium-bootstrap.js.map +1 -0
- package/dist/consortium-fingerprint.d.ts +115 -0
- package/dist/consortium-fingerprint.d.ts.map +1 -0
- package/dist/consortium-fingerprint.js +175 -0
- package/dist/consortium-fingerprint.js.map +1 -0
- package/dist/contact-handlers.d.ts +59 -0
- package/dist/contact-handlers.d.ts.map +1 -0
- package/dist/contact-handlers.js +343 -0
- package/dist/contact-handlers.js.map +1 -0
- package/dist/contact-pubkey-case.d.ts +65 -0
- package/dist/contact-pubkey-case.d.ts.map +1 -0
- package/dist/contact-pubkey-case.js +136 -0
- package/dist/contact-pubkey-case.js.map +1 -0
- package/dist/contacts-tier-migration.d.ts +90 -0
- package/dist/contacts-tier-migration.d.ts.map +1 -0
- package/dist/contacts-tier-migration.js +150 -0
- package/dist/contacts-tier-migration.js.map +1 -0
- package/dist/content-encryption-status.d.ts +111 -0
- package/dist/content-encryption-status.d.ts.map +1 -0
- package/dist/content-encryption-status.js +158 -0
- package/dist/content-encryption-status.js.map +1 -0
- package/dist/content-park-client.d.ts +90 -0
- package/dist/content-park-client.d.ts.map +1 -0
- package/dist/content-park-client.js +362 -0
- package/dist/content-park-client.js.map +1 -0
- package/dist/content-park.d.ts +52 -0
- package/dist/content-park.d.ts.map +1 -0
- package/dist/content-park.js +1309 -0
- package/dist/content-park.js.map +1 -0
- package/dist/cross-node-negotiation.d.ts +44 -0
- package/dist/cross-node-negotiation.d.ts.map +1 -0
- package/dist/cross-node-negotiation.js +34 -0
- package/dist/cross-node-negotiation.js.map +1 -0
- package/dist/daemon-handle.d.ts +57 -0
- package/dist/daemon-handle.d.ts.map +1 -0
- package/dist/daemon-handle.js +2 -0
- package/dist/daemon-handle.js.map +1 -0
- package/dist/daemon-status-report.d.ts +50 -0
- package/dist/daemon-status-report.d.ts.map +1 -0
- package/dist/daemon-status-report.js +81 -0
- package/dist/daemon-status-report.js.map +1 -0
- package/dist/daemon.d.ts +45 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +1177 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db-identity-store.d.ts +159 -0
- package/dist/db-identity-store.d.ts.map +1 -0
- package/dist/db-identity-store.js +502 -0
- package/dist/db-identity-store.js.map +1 -0
- package/dist/delivery-open-registry.d.ts +92 -0
- package/dist/delivery-open-registry.d.ts.map +1 -0
- package/dist/delivery-open-registry.js +121 -0
- package/dist/delivery-open-registry.js.map +1 -0
- package/dist/delivery-session-suspects.d.ts +56 -0
- package/dist/delivery-session-suspects.d.ts.map +1 -0
- package/dist/delivery-session-suspects.js +94 -0
- package/dist/delivery-session-suspects.js.map +1 -0
- package/dist/directory-auth-posture.d.ts +87 -0
- package/dist/directory-auth-posture.d.ts.map +1 -0
- package/dist/directory-auth-posture.js +134 -0
- package/dist/directory-auth-posture.js.map +1 -0
- package/dist/directory-bootstrap.d.ts +310 -0
- package/dist/directory-bootstrap.d.ts.map +1 -0
- package/dist/directory-bootstrap.js +557 -0
- package/dist/directory-bootstrap.js.map +1 -0
- package/dist/directory-connect.d.ts +27 -0
- package/dist/directory-connect.d.ts.map +1 -0
- package/dist/directory-connect.js +106 -0
- package/dist/directory-connect.js.map +1 -0
- package/dist/disconnect-cleanup.d.ts +51 -0
- package/dist/disconnect-cleanup.d.ts.map +1 -0
- package/dist/disconnect-cleanup.js +72 -0
- package/dist/disconnect-cleanup.js.map +1 -0
- package/dist/document-amendment-store.d.ts +120 -0
- package/dist/document-amendment-store.d.ts.map +1 -0
- package/dist/document-amendment-store.js +266 -0
- package/dist/document-amendment-store.js.map +1 -0
- package/dist/document-delivery-transport.d.ts +168 -0
- package/dist/document-delivery-transport.d.ts.map +1 -0
- package/dist/document-delivery-transport.js +206 -0
- package/dist/document-delivery-transport.js.map +1 -0
- package/dist/document-engine.d.ts +134 -0
- package/dist/document-engine.d.ts.map +1 -0
- package/dist/document-engine.js +282 -0
- package/dist/document-engine.js.map +1 -0
- package/dist/document-flag.d.ts +58 -0
- package/dist/document-flag.d.ts.map +1 -0
- package/dist/document-flag.js +70 -0
- package/dist/document-flag.js.map +1 -0
- package/dist/document-frame-router.d.ts +245 -0
- package/dist/document-frame-router.d.ts.map +1 -0
- package/dist/document-frame-router.js +397 -0
- package/dist/document-frame-router.js.map +1 -0
- package/dist/document-gate-wiring.d.ts +61 -0
- package/dist/document-gate-wiring.d.ts.map +1 -0
- package/dist/document-gate-wiring.js +125 -0
- package/dist/document-gate-wiring.js.map +1 -0
- package/dist/document-gate.d.ts +149 -0
- package/dist/document-gate.d.ts.map +1 -0
- package/dist/document-gate.js +509 -0
- package/dist/document-gate.js.map +1 -0
- package/dist/document-handlers.d.ts +47 -0
- package/dist/document-handlers.d.ts.map +1 -0
- package/dist/document-handlers.js +2203 -0
- package/dist/document-handlers.js.map +1 -0
- package/dist/document-handshake.d.ts +176 -0
- package/dist/document-handshake.d.ts.map +1 -0
- package/dist/document-handshake.js +452 -0
- package/dist/document-handshake.js.map +1 -0
- package/dist/document-inbound.d.ts +162 -0
- package/dist/document-inbound.d.ts.map +1 -0
- package/dist/document-inbound.js +530 -0
- package/dist/document-inbound.js.map +1 -0
- package/dist/document-json.d.ts +120 -0
- package/dist/document-json.d.ts.map +1 -0
- package/dist/document-json.js +191 -0
- package/dist/document-json.js.map +1 -0
- package/dist/document-layer.d.ts +215 -0
- package/dist/document-layer.d.ts.map +1 -0
- package/dist/document-layer.js +1025 -0
- package/dist/document-layer.js.map +1 -0
- package/dist/document-lifecycle.d.ts +52 -0
- package/dist/document-lifecycle.d.ts.map +1 -0
- package/dist/document-lifecycle.js +134 -0
- package/dist/document-lifecycle.js.map +1 -0
- package/dist/document-live-docs.d.ts +58 -0
- package/dist/document-live-docs.d.ts.map +1 -0
- package/dist/document-live-docs.js +126 -0
- package/dist/document-live-docs.js.map +1 -0
- package/dist/document-notify.d.ts +228 -0
- package/dist/document-notify.d.ts.map +1 -0
- package/dist/document-notify.js +580 -0
- package/dist/document-notify.js.map +1 -0
- package/dist/document-profile.d.ts +61 -0
- package/dist/document-profile.d.ts.map +1 -0
- package/dist/document-profile.js +112 -0
- package/dist/document-profile.js.map +1 -0
- package/dist/document-publish.d.ts +87 -0
- package/dist/document-publish.d.ts.map +1 -0
- package/dist/document-publish.js +173 -0
- package/dist/document-publish.js.map +1 -0
- package/dist/document-reachability.d.ts +42 -0
- package/dist/document-reachability.d.ts.map +1 -0
- package/dist/document-reachability.js +80 -0
- package/dist/document-reachability.js.map +1 -0
- package/dist/document-reconcile-engine.d.ts +66 -0
- package/dist/document-reconcile-engine.d.ts.map +1 -0
- package/dist/document-reconcile-engine.js +225 -0
- package/dist/document-reconcile-engine.js.map +1 -0
- package/dist/document-reconcile-scheduler.d.ts +163 -0
- package/dist/document-reconcile-scheduler.d.ts.map +1 -0
- package/dist/document-reconcile-scheduler.js +303 -0
- package/dist/document-reconcile-scheduler.js.map +1 -0
- package/dist/document-rejection.d.ts +251 -0
- package/dist/document-rejection.d.ts.map +1 -0
- package/dist/document-rejection.js +435 -0
- package/dist/document-rejection.js.map +1 -0
- package/dist/document-screen.d.ts +114 -0
- package/dist/document-screen.d.ts.map +1 -0
- package/dist/document-screen.js +223 -0
- package/dist/document-screen.js.map +1 -0
- package/dist/document-store.d.ts +372 -0
- package/dist/document-store.d.ts.map +1 -0
- package/dist/document-store.js +931 -0
- package/dist/document-store.js.map +1 -0
- package/dist/document-surface.d.ts +32 -0
- package/dist/document-surface.d.ts.map +1 -0
- package/dist/document-surface.js +151 -0
- package/dist/document-surface.js.map +1 -0
- package/dist/document-types.d.ts +94 -0
- package/dist/document-types.d.ts.map +1 -0
- package/dist/document-types.js +90 -0
- package/dist/document-types.js.map +1 -0
- package/dist/document-watch.d.ts +69 -0
- package/dist/document-watch.d.ts.map +1 -0
- package/dist/document-watch.js +108 -0
- package/dist/document-watch.js.map +1 -0
- package/dist/document-wiring.d.ts +53 -0
- package/dist/document-wiring.d.ts.map +1 -0
- package/dist/document-wiring.js +323 -0
- package/dist/document-wiring.js.map +1 -0
- package/dist/document-write-guard.d.ts +66 -0
- package/dist/document-write-guard.d.ts.map +1 -0
- package/dist/document-write-guard.js +98 -0
- package/dist/document-write-guard.js.map +1 -0
- package/dist/document-write-path.d.ts +94 -0
- package/dist/document-write-path.d.ts.map +1 -0
- package/dist/document-write-path.js +530 -0
- package/dist/document-write-path.js.map +1 -0
- package/dist/error-message.d.ts +7 -0
- package/dist/error-message.d.ts.map +1 -0
- package/dist/error-message.js +19 -0
- package/dist/error-message.js.map +1 -0
- package/dist/file-manifest-provider.d.ts +37 -0
- package/dist/file-manifest-provider.d.ts.map +1 -0
- package/dist/file-manifest-provider.js +105 -0
- package/dist/file-manifest-provider.js.map +1 -0
- package/dist/frame-values.d.ts +3 -0
- package/dist/frame-values.d.ts.map +1 -0
- package/dist/frame-values.js +84 -0
- package/dist/frame-values.js.map +1 -0
- package/dist/frontier-mismatch.d.ts +73 -0
- package/dist/frontier-mismatch.d.ts.map +1 -0
- package/dist/frontier-mismatch.js +89 -0
- package/dist/frontier-mismatch.js.map +1 -0
- package/dist/gateway-config-handlers.d.ts +26 -0
- package/dist/gateway-config-handlers.d.ts.map +1 -0
- package/dist/gateway-config-handlers.js +454 -0
- package/dist/gateway-config-handlers.js.map +1 -0
- package/dist/held-content.d.ts +145 -0
- package/dist/held-content.d.ts.map +1 -0
- package/dist/held-content.js +389 -0
- package/dist/held-content.js.map +1 -0
- package/dist/http-manifest-poll.d.ts +67 -0
- package/dist/http-manifest-poll.d.ts.map +1 -0
- package/dist/http-manifest-poll.js +150 -0
- package/dist/http-manifest-poll.js.map +1 -0
- package/dist/identity-migration.d.ts +40 -0
- package/dist/identity-migration.d.ts.map +1 -0
- package/dist/identity-migration.js +461 -0
- package/dist/identity-migration.js.map +1 -0
- package/dist/inbound-refusals.d.ts +283 -0
- package/dist/inbound-refusals.d.ts.map +1 -0
- package/dist/inbound-refusals.js +919 -0
- package/dist/inbound-refusals.js.map +1 -0
- package/dist/inbound-seal-request.d.ts +32 -0
- package/dist/inbound-seal-request.d.ts.map +1 -0
- package/dist/inbound-seal-request.js +228 -0
- package/dist/inbound-seal-request.js.map +1 -0
- package/dist/inbound-sessions.d.ts +291 -0
- package/dist/inbound-sessions.d.ts.map +1 -0
- package/dist/inbound-sessions.js +1609 -0
- package/dist/inbound-sessions.js.map +1 -0
- package/dist/inclusion-proof-handlers.d.ts +43 -0
- package/dist/inclusion-proof-handlers.d.ts.map +1 -0
- package/dist/inclusion-proof-handlers.js +565 -0
- package/dist/inclusion-proof-handlers.js.map +1 -0
- package/dist/inclusion-proof.d.ts +151 -0
- package/dist/inclusion-proof.d.ts.map +1 -0
- package/dist/inclusion-proof.js +228 -0
- package/dist/inclusion-proof.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/initiate-session-handler.d.ts +55 -0
- package/dist/initiate-session-handler.d.ts.map +1 -0
- package/dist/initiate-session-handler.js +310 -0
- package/dist/initiate-session-handler.js.map +1 -0
- package/dist/ipc-client.d.ts +31 -0
- package/dist/ipc-client.d.ts.map +1 -0
- package/dist/ipc-client.js +113 -0
- package/dist/ipc-client.js.map +1 -0
- package/dist/ipc-server.d.ts +63 -0
- package/dist/ipc-server.d.ts.map +1 -0
- package/dist/ipc-server.js +429 -0
- package/dist/ipc-server.js.map +1 -0
- package/dist/ipc-surface.d.ts +44 -0
- package/dist/ipc-surface.d.ts.map +1 -0
- package/dist/ipc-surface.js +107 -0
- package/dist/ipc-surface.js.map +1 -0
- package/dist/line-lcs.d.ts +51 -0
- package/dist/line-lcs.d.ts.map +1 -0
- package/dist/line-lcs.js +71 -0
- package/dist/line-lcs.js.map +1 -0
- package/dist/lock-file.d.ts +39 -0
- package/dist/lock-file.d.ts.map +1 -0
- package/dist/lock-file.js +120 -0
- package/dist/lock-file.js.map +1 -0
- package/dist/log-collapse.d.ts +66 -0
- package/dist/log-collapse.d.ts.map +1 -0
- package/dist/log-collapse.js +244 -0
- package/dist/log-collapse.js.map +1 -0
- package/dist/log-rotate.d.ts +67 -0
- package/dist/log-rotate.d.ts.map +1 -0
- package/dist/log-rotate.js +134 -0
- package/dist/log-rotate.js.map +1 -0
- package/dist/manifest-deps.d.ts +25 -0
- package/dist/manifest-deps.d.ts.map +1 -0
- package/dist/manifest-deps.js +151 -0
- package/dist/manifest-deps.js.map +1 -0
- package/dist/manifest-poll-scheduler.d.ts +31 -0
- package/dist/manifest-poll-scheduler.d.ts.map +1 -0
- package/dist/manifest-poll-scheduler.js +59 -0
- package/dist/manifest-poll-scheduler.js.map +1 -0
- package/dist/manifest-validity.d.ts +153 -0
- package/dist/manifest-validity.d.ts.map +1 -0
- package/dist/manifest-validity.js +268 -0
- package/dist/manifest-validity.js.map +1 -0
- package/dist/manifest-version-store-db.d.ts +24 -0
- package/dist/manifest-version-store-db.d.ts.map +1 -0
- package/dist/manifest-version-store-db.js +58 -0
- package/dist/manifest-version-store-db.js.map +1 -0
- package/dist/manifest-version-store.d.ts +16 -0
- package/dist/manifest-version-store.d.ts.map +1 -0
- package/dist/manifest-version-store.js +15 -0
- package/dist/manifest-version-store.js.map +1 -0
- package/dist/network-directory-node.d.ts +136 -0
- package/dist/network-directory-node.d.ts.map +1 -0
- package/dist/network-directory-node.js +810 -0
- package/dist/network-directory-node.js.map +1 -0
- package/dist/nonce-dedup.d.ts +68 -0
- package/dist/nonce-dedup.d.ts.map +1 -0
- package/dist/nonce-dedup.js +205 -0
- package/dist/nonce-dedup.js.map +1 -0
- package/dist/notification-dispatcher.d.ts +92 -0
- package/dist/notification-dispatcher.d.ts.map +1 -0
- package/dist/notification-dispatcher.js +210 -0
- package/dist/notification-dispatcher.js.map +1 -0
- package/dist/notification-handlers.d.ts +53 -0
- package/dist/notification-handlers.d.ts.map +1 -0
- package/dist/notification-handlers.js +461 -0
- package/dist/notification-handlers.js.map +1 -0
- package/dist/onboarding-guidance.d.ts +79 -0
- package/dist/onboarding-guidance.d.ts.map +1 -0
- package/dist/onboarding-guidance.js +95 -0
- package/dist/onboarding-guidance.js.map +1 -0
- package/dist/operator-guidance.d.ts +25 -0
- package/dist/operator-guidance.d.ts.map +1 -0
- package/dist/operator-guidance.js +50 -0
- package/dist/operator-guidance.js.map +1 -0
- package/dist/orphan-triage.d.ts +130 -0
- package/dist/orphan-triage.d.ts.map +1 -0
- package/dist/orphan-triage.js +207 -0
- package/dist/orphan-triage.js.map +1 -0
- package/dist/outbound-sessions.d.ts +126 -0
- package/dist/outbound-sessions.d.ts.map +1 -0
- package/dist/outbound-sessions.js +1052 -0
- package/dist/outbound-sessions.js.map +1 -0
- package/dist/park-envelope.d.ts +329 -0
- package/dist/park-envelope.d.ts.map +1 -0
- package/dist/park-envelope.js +509 -0
- package/dist/park-envelope.js.map +1 -0
- package/dist/park-recovery.d.ts +273 -0
- package/dist/park-recovery.d.ts.map +1 -0
- package/dist/park-recovery.js +717 -0
- package/dist/park-recovery.js.map +1 -0
- package/dist/park-refusals.d.ts +147 -0
- package/dist/park-refusals.d.ts.map +1 -0
- package/dist/park-refusals.js +331 -0
- package/dist/park-refusals.js.map +1 -0
- package/dist/quarantine-framing.d.ts +92 -0
- package/dist/quarantine-framing.d.ts.map +1 -0
- package/dist/quarantine-framing.js +111 -0
- package/dist/quarantine-framing.js.map +1 -0
- package/dist/reconnect-drain.d.ts +22 -0
- package/dist/reconnect-drain.d.ts.map +1 -0
- package/dist/reconnect-drain.js +65 -0
- package/dist/reconnect-drain.js.map +1 -0
- package/dist/recovered-position.d.ts +14 -0
- package/dist/recovered-position.d.ts.map +1 -0
- package/dist/recovered-position.js +59 -0
- package/dist/recovered-position.js.map +1 -0
- package/dist/refusal-notices.d.ts +196 -0
- package/dist/refusal-notices.d.ts.map +1 -0
- package/dist/refusal-notices.js +516 -0
- package/dist/refusal-notices.js.map +1 -0
- package/dist/refusal-reasons.d.ts +245 -0
- package/dist/refusal-reasons.d.ts.map +1 -0
- package/dist/refusal-reasons.js +363 -0
- package/dist/refusal-reasons.js.map +1 -0
- package/dist/register-handler.d.ts +36 -0
- package/dist/register-handler.d.ts.map +1 -0
- package/dist/register-handler.js +285 -0
- package/dist/register-handler.js.map +1 -0
- package/dist/registration-context.d.ts +72 -0
- package/dist/registration-context.d.ts.map +1 -0
- package/dist/registration-context.js +126 -0
- package/dist/registration-context.js.map +1 -0
- package/dist/registration-manager.d.ts +94 -0
- package/dist/registration-manager.d.ts.map +1 -0
- package/dist/registration-manager.js +585 -0
- package/dist/registration-manager.js.map +1 -0
- package/dist/registration-persistence.d.ts +183 -0
- package/dist/registration-persistence.d.ts.map +1 -0
- package/dist/registration-persistence.js +263 -0
- package/dist/registration-persistence.js.map +1 -0
- package/dist/registry-poll.d.ts +52 -0
- package/dist/registry-poll.d.ts.map +1 -0
- package/dist/registry-poll.js +140 -0
- package/dist/registry-poll.js.map +1 -0
- package/dist/registry-version-store-db.d.ts +22 -0
- package/dist/registry-version-store-db.d.ts.map +1 -0
- package/dist/registry-version-store-db.js +50 -0
- package/dist/registry-version-store-db.js.map +1 -0
- package/dist/relay-endpoints.d.ts +18 -0
- package/dist/relay-endpoints.d.ts.map +1 -0
- package/dist/relay-endpoints.js +9 -0
- package/dist/relay-endpoints.js.map +1 -0
- package/dist/relay-only.d.ts +140 -0
- package/dist/relay-only.d.ts.map +1 -0
- package/dist/relay-only.js +193 -0
- package/dist/relay-only.js.map +1 -0
- package/dist/relay-receipt-store.d.ts +155 -0
- package/dist/relay-receipt-store.d.ts.map +1 -0
- package/dist/relay-receipt-store.js +284 -0
- package/dist/relay-receipt-store.js.map +1 -0
- package/dist/relay-reconnect.d.ts +32 -0
- package/dist/relay-reconnect.d.ts.map +1 -0
- package/dist/relay-reconnect.js +29 -0
- package/dist/relay-reconnect.js.map +1 -0
- package/dist/reply-lag.d.ts +11 -0
- package/dist/reply-lag.d.ts.map +1 -0
- package/dist/reply-lag.js +46 -0
- package/dist/reply-lag.js.map +1 -0
- package/dist/resolve-named-agent.d.ts +49 -0
- package/dist/resolve-named-agent.d.ts.map +1 -0
- package/dist/resolve-named-agent.js +77 -0
- package/dist/resolve-named-agent.js.map +1 -0
- package/dist/restart-seal-resolver.d.ts +110 -0
- package/dist/restart-seal-resolver.d.ts.map +1 -0
- package/dist/restart-seal-resolver.js +353 -0
- package/dist/restart-seal-resolver.js.map +1 -0
- package/dist/resume-last-seen.d.ts +15 -0
- package/dist/resume-last-seen.d.ts.map +1 -0
- package/dist/resume-last-seen.js +44 -0
- package/dist/resume-last-seen.js.map +1 -0
- package/dist/retry-queue.d.ts +203 -0
- package/dist/retry-queue.d.ts.map +1 -0
- package/dist/retry-queue.js +701 -0
- package/dist/retry-queue.js.map +1 -0
- package/dist/roster-freshness.d.ts +160 -0
- package/dist/roster-freshness.d.ts.map +1 -0
- package/dist/roster-freshness.js +250 -0
- package/dist/roster-freshness.js.map +1 -0
- package/dist/screening-status.d.ts +15 -0
- package/dist/screening-status.d.ts.map +1 -0
- package/dist/screening-status.js +65 -0
- package/dist/screening-status.js.map +1 -0
- package/dist/seal-carried-close.d.ts +37 -0
- package/dist/seal-carried-close.d.ts.map +1 -0
- package/dist/seal-carried-close.js +179 -0
- package/dist/seal-carried-close.js.map +1 -0
- package/dist/seal-certificate-pull.d.ts +79 -0
- package/dist/seal-certificate-pull.d.ts.map +1 -0
- package/dist/seal-certificate-pull.js +186 -0
- package/dist/seal-certificate-pull.js.map +1 -0
- package/dist/seal-certified-root-check.d.ts +37 -0
- package/dist/seal-certified-root-check.d.ts.map +1 -0
- package/dist/seal-certified-root-check.js +127 -0
- package/dist/seal-certified-root-check.js.map +1 -0
- package/dist/seal-coordinator.d.ts +118 -0
- package/dist/seal-coordinator.d.ts.map +1 -0
- package/dist/seal-coordinator.js +927 -0
- package/dist/seal-coordinator.js.map +1 -0
- package/dist/seal-escalation.d.ts +80 -0
- package/dist/seal-escalation.d.ts.map +1 -0
- package/dist/seal-escalation.js +283 -0
- package/dist/seal-escalation.js.map +1 -0
- package/dist/seal-evidence-root-check.d.ts +70 -0
- package/dist/seal-evidence-root-check.d.ts.map +1 -0
- package/dist/seal-evidence-root-check.js +199 -0
- package/dist/seal-evidence-root-check.js.map +1 -0
- package/dist/seal-failure-store.d.ts +139 -0
- package/dist/seal-failure-store.d.ts.map +1 -0
- package/dist/seal-failure-store.js +207 -0
- package/dist/seal-failure-store.js.map +1 -0
- package/dist/seal-flows.d.ts +107 -0
- package/dist/seal-flows.d.ts.map +1 -0
- package/dist/seal-flows.js +638 -0
- package/dist/seal-flows.js.map +1 -0
- package/dist/seal-frontier-verify.d.ts +103 -0
- package/dist/seal-frontier-verify.d.ts.map +1 -0
- package/dist/seal-frontier-verify.js +143 -0
- package/dist/seal-frontier-verify.js.map +1 -0
- package/dist/seal-leaf.d.ts +58 -0
- package/dist/seal-leaf.d.ts.map +1 -0
- package/dist/seal-leaf.js +112 -0
- package/dist/seal-leaf.js.map +1 -0
- package/dist/seal-legibility-tbs.d.ts +25 -0
- package/dist/seal-legibility-tbs.d.ts.map +1 -0
- package/dist/seal-legibility-tbs.js +77 -0
- package/dist/seal-legibility-tbs.js.map +1 -0
- package/dist/seal-local-terminus.d.ts +41 -0
- package/dist/seal-local-terminus.d.ts.map +1 -0
- package/dist/seal-local-terminus.js +170 -0
- package/dist/seal-local-terminus.js.map +1 -0
- package/dist/seal-receipt-upgrade.d.ts +30 -0
- package/dist/seal-receipt-upgrade.d.ts.map +1 -0
- package/dist/seal-receipt-upgrade.js +49 -0
- package/dist/seal-receipt-upgrade.js.map +1 -0
- package/dist/seal-relay-silence.d.ts +51 -0
- package/dist/seal-relay-silence.d.ts.map +1 -0
- package/dist/seal-relay-silence.js +76 -0
- package/dist/seal-relay-silence.js.map +1 -0
- package/dist/seal-settle.d.ts +38 -0
- package/dist/seal-settle.d.ts.map +1 -0
- package/dist/seal-settle.js +33 -0
- package/dist/seal-settle.js.map +1 -0
- package/dist/seal-upgrade.d.ts +107 -0
- package/dist/seal-upgrade.d.ts.map +1 -0
- package/dist/seal-upgrade.js +200 -0
- package/dist/seal-upgrade.js.map +1 -0
- package/dist/sealed-conversation.d.ts +36 -0
- package/dist/sealed-conversation.d.ts.map +1 -0
- package/dist/sealed-conversation.js +171 -0
- package/dist/sealed-conversation.js.map +1 -0
- package/dist/sealed-leaf-set.d.ts +92 -0
- package/dist/sealed-leaf-set.d.ts.map +1 -0
- package/dist/sealed-leaf-set.js +122 -0
- package/dist/sealed-leaf-set.js.map +1 -0
- package/dist/send-claims.d.ts +56 -0
- package/dist/send-claims.d.ts.map +1 -0
- package/dist/send-claims.js +50 -0
- package/dist/send-claims.js.map +1 -0
- package/dist/session-assignment-parser.d.ts +104 -0
- package/dist/session-assignment-parser.d.ts.map +1 -0
- package/dist/session-assignment-parser.js +345 -0
- package/dist/session-assignment-parser.js.map +1 -0
- package/dist/session-category.d.ts +19 -0
- package/dist/session-category.d.ts.map +1 -0
- package/dist/session-category.js +14 -0
- package/dist/session-category.js.map +1 -0
- package/dist/session-ceremony.d.ts +297 -0
- package/dist/session-ceremony.d.ts.map +1 -0
- package/dist/session-ceremony.js +964 -0
- package/dist/session-ceremony.js.map +1 -0
- package/dist/session-closed.d.ts +79 -0
- package/dist/session-closed.d.ts.map +1 -0
- package/dist/session-closed.js +189 -0
- package/dist/session-closed.js.map +1 -0
- package/dist/session-connection-gater.d.ts +148 -0
- package/dist/session-connection-gater.d.ts.map +1 -0
- package/dist/session-connection-gater.js +332 -0
- package/dist/session-connection-gater.js.map +1 -0
- package/dist/session-content-context.d.ts +162 -0
- package/dist/session-content-context.d.ts.map +1 -0
- package/dist/session-content-context.js +2 -0
- package/dist/session-content-context.js.map +1 -0
- package/dist/session-content-handlers.d.ts +82 -0
- package/dist/session-content-handlers.d.ts.map +1 -0
- package/dist/session-content-handlers.js +1382 -0
- package/dist/session-content-handlers.js.map +1 -0
- package/dist/session-content-ingest.d.ts +206 -0
- package/dist/session-content-ingest.d.ts.map +1 -0
- package/dist/session-content-ingest.js +2167 -0
- package/dist/session-content-ingest.js.map +1 -0
- package/dist/session-content-send.d.ts +191 -0
- package/dist/session-content-send.d.ts.map +1 -0
- package/dist/session-content-send.js +1360 -0
- package/dist/session-content-send.js.map +1 -0
- package/dist/session-delivery-acks.d.ts +169 -0
- package/dist/session-delivery-acks.d.ts.map +1 -0
- package/dist/session-delivery-acks.js +569 -0
- package/dist/session-delivery-acks.js.map +1 -0
- package/dist/session-ephemerals.d.ts +279 -0
- package/dist/session-ephemerals.d.ts.map +1 -0
- package/dist/session-ephemerals.js +591 -0
- package/dist/session-ephemerals.js.map +1 -0
- package/dist/session-leaf-records.d.ts +159 -0
- package/dist/session-leaf-records.d.ts.map +1 -0
- package/dist/session-leaf-records.js +408 -0
- package/dist/session-leaf-records.js.map +1 -0
- package/dist/session-lifecycle.d.ts +303 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +1679 -0
- package/dist/session-lifecycle.js.map +1 -0
- package/dist/session-liveness.d.ts +135 -0
- package/dist/session-liveness.d.ts.map +1 -0
- package/dist/session-liveness.js +347 -0
- package/dist/session-liveness.js.map +1 -0
- package/dist/session-name.d.ts +35 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +60 -0
- package/dist/session-name.js.map +1 -0
- package/dist/session-node-factory.d.ts +18 -0
- package/dist/session-node-factory.d.ts.map +1 -0
- package/dist/session-node-factory.js +182 -0
- package/dist/session-node-factory.js.map +1 -0
- package/dist/session-node-manager.d.ts +877 -0
- package/dist/session-node-manager.d.ts.map +1 -0
- package/dist/session-node-manager.js +2998 -0
- package/dist/session-node-manager.js.map +1 -0
- package/dist/session-node-types.d.ts +1057 -0
- package/dist/session-node-types.d.ts.map +1 -0
- package/dist/session-node-types.js +657 -0
- package/dist/session-node-types.js.map +1 -0
- package/dist/session-notify.d.ts +46 -0
- package/dist/session-notify.d.ts.map +1 -0
- package/dist/session-notify.js +116 -0
- package/dist/session-notify.js.map +1 -0
- package/dist/session-own-chain-store.d.ts +65 -0
- package/dist/session-own-chain-store.d.ts.map +1 -0
- package/dist/session-own-chain-store.js +75 -0
- package/dist/session-own-chain-store.js.map +1 -0
- package/dist/session-queries.d.ts +476 -0
- package/dist/session-queries.d.ts.map +1 -0
- package/dist/session-queries.js +1007 -0
- package/dist/session-queries.js.map +1 -0
- package/dist/session-read-handlers.d.ts +87 -0
- package/dist/session-read-handlers.d.ts.map +1 -0
- package/dist/session-read-handlers.js +689 -0
- package/dist/session-read-handlers.js.map +1 -0
- package/dist/session-records.d.ts +341 -0
- package/dist/session-records.d.ts.map +1 -0
- package/dist/session-records.js +858 -0
- package/dist/session-records.js.map +1 -0
- package/dist/session-relay-client.d.ts +659 -0
- package/dist/session-relay-client.d.ts.map +1 -0
- package/dist/session-relay-client.js +2876 -0
- package/dist/session-relay-client.js.map +1 -0
- package/dist/session-relay.d.ts +397 -0
- package/dist/session-relay.d.ts.map +1 -0
- package/dist/session-relay.js +1636 -0
- package/dist/session-relay.js.map +1 -0
- package/dist/session-salt-agreement.d.ts +331 -0
- package/dist/session-salt-agreement.d.ts.map +1 -0
- package/dist/session-salt-agreement.js +472 -0
- package/dist/session-salt-agreement.js.map +1 -0
- package/dist/session-salts.d.ts +432 -0
- package/dist/session-salts.d.ts.map +1 -0
- package/dist/session-salts.js +1540 -0
- package/dist/session-salts.js.map +1 -0
- package/dist/session-schema.d.ts +30 -0
- package/dist/session-schema.d.ts.map +1 -0
- package/dist/session-schema.js +877 -0
- package/dist/session-schema.js.map +1 -0
- package/dist/session-seal-leaf-store.d.ts +70 -0
- package/dist/session-seal-leaf-store.d.ts.map +1 -0
- package/dist/session-seal-leaf-store.js +105 -0
- package/dist/session-seal-leaf-store.js.map +1 -0
- package/dist/session-seal.d.ts +334 -0
- package/dist/session-seal.d.ts.map +1 -0
- package/dist/session-seal.js +1017 -0
- package/dist/session-seal.js.map +1 -0
- package/dist/session-terminal-refusal.d.ts +65 -0
- package/dist/session-terminal-refusal.d.ts.map +1 -0
- package/dist/session-terminal-refusal.js +87 -0
- package/dist/session-terminal-refusal.js.map +1 -0
- package/dist/session-tree.d.ts +110 -0
- package/dist/session-tree.d.ts.map +1 -0
- package/dist/session-tree.js +144 -0
- package/dist/session-tree.js.map +1 -0
- package/dist/session-views.d.ts +47 -0
- package/dist/session-views.d.ts.map +1 -0
- package/dist/session-views.js +278 -0
- package/dist/session-views.js.map +1 -0
- package/dist/signal-handlers.d.ts +63 -0
- package/dist/signal-handlers.d.ts.map +1 -0
- package/dist/signal-handlers.js +980 -0
- package/dist/signal-handlers.js.map +1 -0
- package/dist/signal-requirement-policy.d.ts +51 -0
- package/dist/signal-requirement-policy.d.ts.map +1 -0
- package/dist/signal-requirement-policy.js +89 -0
- package/dist/signal-requirement-policy.js.map +1 -0
- package/dist/signal-revocability.d.ts +49 -0
- package/dist/signal-revocability.d.ts.map +1 -0
- package/dist/signal-revocability.js +93 -0
- package/dist/signal-revocability.js.map +1 -0
- package/dist/signal-submission.d.ts +181 -0
- package/dist/signal-submission.d.ts.map +1 -0
- package/dist/signal-submission.js +368 -0
- package/dist/signal-submission.js.map +1 -0
- package/dist/signaling-connect.d.ts +118 -0
- package/dist/signaling-connect.d.ts.map +1 -0
- package/dist/signaling-connect.js +538 -0
- package/dist/signaling-connect.js.map +1 -0
- package/dist/signaling-wiring.d.ts +105 -0
- package/dist/signaling-wiring.d.ts.map +1 -0
- package/dist/signaling-wiring.js +393 -0
- package/dist/signaling-wiring.js.map +1 -0
- package/dist/singleton-lock.d.ts +85 -0
- package/dist/singleton-lock.d.ts.map +1 -0
- package/dist/singleton-lock.js +219 -0
- package/dist/singleton-lock.js.map +1 -0
- package/dist/sqlcipher-db.d.ts +139 -0
- package/dist/sqlcipher-db.d.ts.map +1 -0
- package/dist/sqlcipher-db.js +357 -0
- package/dist/sqlcipher-db.js.map +1 -0
- package/dist/standing-receivers.d.ts +319 -0
- package/dist/standing-receivers.d.ts.map +1 -0
- package/dist/standing-receivers.js +1295 -0
- package/dist/standing-receivers.js.map +1 -0
- package/dist/start-agent.d.ts +64 -0
- package/dist/start-agent.d.ts.map +1 -0
- package/dist/start-agent.js +136 -0
- package/dist/start-agent.js.map +1 -0
- package/dist/status-handler.d.ts +54 -0
- package/dist/status-handler.d.ts.map +1 -0
- package/dist/status-handler.js +61 -0
- package/dist/status-handler.js.map +1 -0
- package/dist/submission-retry.d.ts +208 -0
- package/dist/submission-retry.d.ts.map +1 -0
- package/dist/submission-retry.js +506 -0
- package/dist/submission-retry.js.map +1 -0
- package/dist/telegram-bot-client.d.ts +34 -0
- package/dist/telegram-bot-client.d.ts.map +1 -0
- package/dist/telegram-bot-client.js +36 -0
- package/dist/telegram-bot-client.js.map +1 -0
- package/dist/telegram-doorbell.d.ts +38 -0
- package/dist/telegram-doorbell.d.ts.map +1 -0
- package/dist/telegram-doorbell.js +140 -0
- package/dist/telegram-doorbell.js.map +1 -0
- package/dist/test-handlers.d.ts +62 -0
- package/dist/test-handlers.d.ts.map +1 -0
- package/dist/test-handlers.js +240 -0
- package/dist/test-handlers.js.map +1 -0
- package/dist/testing.d.ts +10 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +10 -0
- package/dist/testing.js.map +1 -0
- package/dist/transport-composition.d.ts +31 -0
- package/dist/transport-composition.d.ts.map +1 -0
- package/dist/transport-composition.js +55 -0
- package/dist/transport-composition.js.map +1 -0
- package/dist/transport-selector.d.ts +202 -0
- package/dist/transport-selector.d.ts.map +1 -0
- package/dist/transport-selector.js +196 -0
- package/dist/transport-selector.js.map +1 -0
- package/dist/trust-signal-pickup-listener.d.ts +43 -0
- package/dist/trust-signal-pickup-listener.d.ts.map +1 -0
- package/dist/trust-signal-pickup-listener.js +48 -0
- package/dist/trust-signal-pickup-listener.js.map +1 -0
- package/dist/trust-signal-store.d.ts +406 -0
- package/dist/trust-signal-store.d.ts.map +1 -0
- package/dist/trust-signal-store.js +939 -0
- package/dist/trust-signal-store.js.map +1 -0
- package/dist/trust-signal-sweep-tick.d.ts +60 -0
- package/dist/trust-signal-sweep-tick.d.ts.map +1 -0
- package/dist/trust-signal-sweep-tick.js +101 -0
- package/dist/trust-signal-sweep-tick.js.map +1 -0
- package/dist/trust-signal-sweep.d.ts +94 -0
- package/dist/trust-signal-sweep.d.ts.map +1 -0
- package/dist/trust-signal-sweep.js +147 -0
- package/dist/trust-signal-sweep.js.map +1 -0
- package/dist/type-registry.d.ts +42 -0
- package/dist/type-registry.d.ts.map +1 -0
- package/dist/type-registry.js +37 -0
- package/dist/type-registry.js.map +1 -0
- package/dist/types.d.ts +746 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/dist/unresolved-nodes-report.d.ts +14 -0
- package/dist/unresolved-nodes-report.d.ts.map +1 -0
- package/dist/unresolved-nodes-report.js +96 -0
- package/dist/unresolved-nodes-report.js.map +1 -0
- package/dist/vocabulary.d.ts +150 -0
- package/dist/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary.js +386 -0
- package/dist/vocabulary.js.map +1 -0
- package/dist/who-label.d.ts +28 -0
- package/dist/who-label.d.ts.map +1 -0
- package/dist/who-label.js +31 -0
- package/dist/who-label.js.map +1 -0
- package/dist/who-resolver.d.ts +15 -0
- package/dist/who-resolver.d.ts.map +1 -0
- package/dist/who-resolver.js +47 -0
- package/dist/who-resolver.js.map +1 -0
- package/dist/wire-content-hash.d.ts +93 -0
- package/dist/wire-content-hash.d.ts.map +1 -0
- package/dist/wire-content-hash.js +116 -0
- package/dist/wire-content-hash.js.map +1 -0
- package/dist/withheld-content.d.ts +13 -0
- package/dist/withheld-content.d.ts.map +1 -0
- package/dist/withheld-content.js +46 -0
- package/dist/withheld-content.js.map +1 -0
- package/dist/witness-alerts.d.ts +40 -0
- package/dist/witness-alerts.d.ts.map +1 -0
- package/dist/witness-alerts.js +102 -0
- package/dist/witness-alerts.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The returning-absent-party seal upgrade. It lives outside daemon.ts so the KERNEL (content-
|
|
3
|
+
* possession gate) and the dual-attestation verify run under adversarial unit tests with the REAL
|
|
4
|
+
* bodies, not just the happy path.
|
|
5
|
+
*
|
|
6
|
+
* When the previously-ABSENT party B returns, it RATIFIES the existing unilateral sealed root R1 (it
|
|
7
|
+
* does NOT re-seal a new root). B signs an ack over CBOR([SEAL_UPGRADE_ACK_DOMAIN, session_id,
|
|
8
|
+
* sealed_root]) with its K_local. The directory verifies it and writes a SUPERSEDING bilateral
|
|
9
|
+
* notarization. Both parties verify the dual-attestation cert before accepting bilateral.
|
|
10
|
+
*/
|
|
11
|
+
import { encodeCbor } from "@cello-protocol/protocol-types";
|
|
12
|
+
import { verify as ed25519Verify } from "@cello-protocol/crypto";
|
|
13
|
+
import { verifyUnilateralCertificate } from "./session-ceremony.js";
|
|
14
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
15
|
+
/**
|
|
16
|
+
* Domain separator for the upgrade-ack TBS. B's daemon and the directory MUST build byte-identical
|
|
17
|
+
* bytes — same domain string, same cbor-x encoder options (tagUint8Array:false); the directory side
|
|
18
|
+
* must be kept byte-identical. Domain separation prevents replay as any other CELLO signature.
|
|
19
|
+
*/
|
|
20
|
+
export const SEAL_UPGRADE_ACK_DOMAIN = "cello-seal-upgrade-ack-v1";
|
|
21
|
+
/** The exact upgrade-ack TBS B signs / the directory + present party verify. */
|
|
22
|
+
export function buildSealUpgradeAckTbs(sessionId, sealedRoot) {
|
|
23
|
+
return encodeCbor([SEAL_UPGRADE_ACK_DOMAIN, sessionId, sealedRoot]);
|
|
24
|
+
}
|
|
25
|
+
function toU8(v) {
|
|
26
|
+
return v instanceof Uint8Array ? v : Buffer.isBuffer(v) ? new Uint8Array(v) : null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* THE KERNEL DECISION. B may sign its ratification ONLY when it genuinely possesses + integrity-
|
|
30
|
+
* verified the content behind R1. A session B has no record of (content_unrecoverable) or whose
|
|
31
|
+
* content it could not verify is REFUSED. Verified-but-disliked content is NOT a refusal —
|
|
32
|
+
* disagreement ≠ unverifiable.
|
|
33
|
+
*
|
|
34
|
+
* ⚠️ THE REFUSAL IS THE SAME FOR BOTH CAUSES; ONLY THE NAME DIFFERS. Never ratify content you could
|
|
35
|
+
* not verify — that is binary and it is the kernel. But `content_tamper` is a SECURITY claim, and
|
|
36
|
+
* emitting it for an honest peer on a newer build is the defect this split exists to remove: an
|
|
37
|
+
* alarm that fires on the benign case teaches an operator to dismiss the one that matters.
|
|
38
|
+
*/
|
|
39
|
+
export function evaluateSealUpgrade(readiness) {
|
|
40
|
+
if (!readiness.known)
|
|
41
|
+
return { proceed: false, refuseReason: "content_unrecoverable" };
|
|
42
|
+
if (readiness.unverifiable === "tampered")
|
|
43
|
+
return { proceed: false, refuseReason: "content_tamper" };
|
|
44
|
+
if (readiness.unverifiable)
|
|
45
|
+
return { proceed: false, refuseReason: "content_verification_unavailable" };
|
|
46
|
+
return { proceed: true };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* THE KERNEL, wired. Recover content → consult the gate → REFUSE (no signature, no request) on
|
|
50
|
+
* content_unrecoverable / content_tamper → else sign the ack over R1 with B's OWN K_local and send
|
|
51
|
+
* seal_upgrade_request. Returns whether a request was sent (and the refuse reason if not) so a unit
|
|
52
|
+
* test asserts the gate is genuinely consulted, not bypassed. Never throws.
|
|
53
|
+
*/
|
|
54
|
+
export async function attemptSealUpgrade(deps, sessionIdHex, frame) {
|
|
55
|
+
try {
|
|
56
|
+
const sessionId = toU8(frame["session_id"]);
|
|
57
|
+
const sealedRoot = toU8(frame["sealed_root"]);
|
|
58
|
+
const leafCount = typeof frame["leaf_count"] === "number" ? frame["leaf_count"] : null;
|
|
59
|
+
if (!sessionId || !sealedRoot || leafCount === null) {
|
|
60
|
+
deps.logger.warn("session.seal.upgrade.refused", { sessionId: sessionIdHex, reason: "malformed_notification" });
|
|
61
|
+
return { sent: false, reason: "malformed_notification" };
|
|
62
|
+
}
|
|
63
|
+
// B (responder) CANNOT channel-independently verify the unilateral cert's signature — that is the
|
|
64
|
+
// INITIATOR's group key, which B does not hold. B accepts R1 on the AUTHENTICATED daemon↔directory
|
|
65
|
+
// Noise channel (as the responder accepts session_sealed). Its real protection is the gate below;
|
|
66
|
+
// a wrong R1 yields a B-ack that doesn't match A's real seal → no coherent bilateral forms.
|
|
67
|
+
// Recover any parked content so B holds everything behind R1, THEN gate.
|
|
68
|
+
await deps.recoverContent(deps.agentName).catch(() => { });
|
|
69
|
+
const decision = evaluateSealUpgrade(deps.getReadiness(deps.agentName, sessionIdHex));
|
|
70
|
+
if (!decision.proceed) {
|
|
71
|
+
/**
|
|
72
|
+
* KERNEL refusal. ERROR is reserved for the SECURITY case (review F-A): `content_tamper` is
|
|
73
|
+
* the only one of the three that says someone altered something. A version skew and a missing
|
|
74
|
+
* salt are WARN — they refuse just as hard, and paging on them would be crying wolf.
|
|
75
|
+
*/
|
|
76
|
+
const level = decision.refuseReason === "content_tamper" ? "error" : "warn";
|
|
77
|
+
deps.logger[level]("session.seal.upgrade.refused", {
|
|
78
|
+
sessionId: sessionIdHex,
|
|
79
|
+
reason: decision.refuseReason,
|
|
80
|
+
// The refusal used to carry a bare reason and nothing else, so an operator paging on
|
|
81
|
+
// `content_tamper` was sent hunting an attacker with no next step. Both fields are now
|
|
82
|
+
// present for every cause, and neither asserts what the counterparty did.
|
|
83
|
+
impact: "this side refused to countersign the other party's seal, because it could not verify the content behind it. Nothing was signed. The transcript you already hold is unaffected.",
|
|
84
|
+
guidance: decision.refuseReason === "content_tamper"
|
|
85
|
+
? "A message on this session failed its integrity check. Look for session.content.cross_check.failed with reason content_hash_mismatch. Do NOT ratify this seal; confirm out of band with your counterparty before starting a new session."
|
|
86
|
+
: decision.refuseReason === "content_verification_unavailable"
|
|
87
|
+
? "A message on this session could not be checked — usually their CELLO build is newer than this one, sometimes the salt agreement had not completed. Look for session.content.cross_check.failed just above; its reason names which. Upgrading this daemon and starting a new session is the normal remedy. This is not evidence anyone did anything wrong."
|
|
88
|
+
: "This side holds no record of the content behind their seal, so there is nothing to ratify against. Start a new session; nothing was signed.",
|
|
89
|
+
});
|
|
90
|
+
return { sent: false, reason: decision.refuseReason };
|
|
91
|
+
}
|
|
92
|
+
// KERNEL completeness: B must hold the FULL content behind R1, not merely a tamper-free subset.
|
|
93
|
+
// R1 = root over [content leaves..., A's SEAL ctrl leaf], so leaf_count counts the content leaves
|
|
94
|
+
// + 1; B's content tree must hold >= leaf_count-1. Refuse if B recovered an INCOMPLETE transcript —
|
|
95
|
+
// never over-attest to content B did not fully receive. This count gate is the bar until exact
|
|
96
|
+
// root-reproduction (canonical-sequence reconciliation) lands.
|
|
97
|
+
const contentLeaves = deps.getContentLeafCount(deps.agentName, sessionIdHex);
|
|
98
|
+
if (contentLeaves < leafCount - 1) {
|
|
99
|
+
deps.logger.warn("session.seal.upgrade.refused", {
|
|
100
|
+
sessionId: sessionIdHex, reason: "content_incomplete", have: contentLeaves, need: leafCount - 1,
|
|
101
|
+
});
|
|
102
|
+
return { sent: false, reason: "content_incomplete" };
|
|
103
|
+
}
|
|
104
|
+
// KERNEL passed — sign the ack over R1 with B's OWN K_local and request the upgrade.
|
|
105
|
+
const keyProvider = deps.getKeyProvider(deps.agentName);
|
|
106
|
+
if (!keyProvider) {
|
|
107
|
+
deps.logger.warn("session.seal.upgrade.refused", { sessionId: sessionIdHex, reason: "no_key_provider" });
|
|
108
|
+
return { sent: false, reason: "no_key_provider" };
|
|
109
|
+
}
|
|
110
|
+
const ackTbs = buildSealUpgradeAckTbs(sessionId, sealedRoot);
|
|
111
|
+
const ackSig = new Uint8Array(await keyProvider.sign(ackTbs));
|
|
112
|
+
const returningPubkey = new Uint8Array(Buffer.from(deps.agentPubkeyHex, "hex"));
|
|
113
|
+
const sent = await deps.sendRaw({
|
|
114
|
+
type: "seal_upgrade_request",
|
|
115
|
+
session_id: sessionId,
|
|
116
|
+
returning_pubkey: returningPubkey,
|
|
117
|
+
ack_signature: ackSig,
|
|
118
|
+
// forwarded (from the notification cert) so the directory relays it → the present party rebuilds
|
|
119
|
+
// the seal TBS and verifies its own attestation.
|
|
120
|
+
leaf_count: leafCount,
|
|
121
|
+
});
|
|
122
|
+
if (!sent.ok) {
|
|
123
|
+
deps.logger.warn("session.seal.upgrade.refused", { sessionId: sessionIdHex, reason: "request_send_failed" });
|
|
124
|
+
return { sent: false, reason: "request_send_failed" };
|
|
125
|
+
}
|
|
126
|
+
deps.logger.info("session.seal.upgrade.requested", { sessionId: sessionIdHex, agentName: deps.agentName });
|
|
127
|
+
return { sent: true };
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
deps.logger.warn("session.seal.upgrade.refused", {
|
|
131
|
+
sessionId: sessionIdHex,
|
|
132
|
+
reason: extractErrorMessage(err),
|
|
133
|
+
});
|
|
134
|
+
return { sent: false, reason: "exception" };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Dual-attestation verify. NEVER trust the directory's "bilateral" claim.
|
|
139
|
+
*
|
|
140
|
+
* - ALWAYS verify the RETURNING attestation (B's ack) over R1 — proves B genuinely ratified, catches
|
|
141
|
+
* a directory that fabricated or swapped B's signature. The load-bearing check (anyone can do it).
|
|
142
|
+
* - If THIS agent is the PRESENT party (A, holds its primary key), ALSO verify the present attestation
|
|
143
|
+
* over the rebuilt seal TBS (leaf_count-bound). The responder (B) cannot (no initiator key).
|
|
144
|
+
*
|
|
145
|
+
* Returns { ok:false, reason } on any malformed/forged cert — the caller must NOT mark the session
|
|
146
|
+
* bilateral in that case. Returns the party so the caller can log accurately.
|
|
147
|
+
*/
|
|
148
|
+
export async function verifyUpgradeConfirmedCert(deps, sessionIdHex, frame) {
|
|
149
|
+
const sessionId = toU8(frame["session_id"]);
|
|
150
|
+
const sealedRoot = toU8(frame["sealed_root"]);
|
|
151
|
+
const leafCount = typeof frame["leaf_count"] === "number" ? frame["leaf_count"] : null;
|
|
152
|
+
const tsRaw = frame["close_timestamp"];
|
|
153
|
+
const closeTs = typeof tsRaw === "number" ? tsRaw : typeof tsRaw === "bigint" ? Number(tsRaw) : null;
|
|
154
|
+
const presentPubkey = toU8(frame["present_pubkey"]);
|
|
155
|
+
const presentSig = toU8(frame["present_signature"]);
|
|
156
|
+
const presentSigType = frame["present_signature_type"];
|
|
157
|
+
const returningPubkey = toU8(frame["returning_pubkey"]);
|
|
158
|
+
const returningSig = toU8(frame["returning_signature"]);
|
|
159
|
+
if (!sessionId || !sealedRoot || leafCount === null || closeTs === null || !presentPubkey ||
|
|
160
|
+
!presentSig || !returningPubkey || !returningSig ||
|
|
161
|
+
(presentSigType !== "frost" && presentSigType !== "single")) {
|
|
162
|
+
deps.logger.warn("session.seal.upgrade.cert.invalid", { sessionId: sessionIdHex, reason: "malformed_confirmed" });
|
|
163
|
+
return { ok: false, reason: "malformed_confirmed" };
|
|
164
|
+
}
|
|
165
|
+
// Bind the cert's present/returning pubkeys to the REAL participants of OUR session record.
|
|
166
|
+
// The pair {present, returning} must equal {self, our counterparty}; otherwise a single untrusted
|
|
167
|
+
// directory could sign the ack with an attacker-chosen key and drive a B-side state transition, or
|
|
168
|
+
// push a confirmed frame for a session we never had. We must hold the session locally to accept.
|
|
169
|
+
const presentHex = Buffer.from(presentPubkey).toString("hex");
|
|
170
|
+
const returningHex = Buffer.from(returningPubkey).toString("hex");
|
|
171
|
+
const selfHex = deps.agentPubkeyHex;
|
|
172
|
+
const counterpartyHex = deps.getCounterpartyHex(deps.agentName, sessionIdHex);
|
|
173
|
+
if (!counterpartyHex) {
|
|
174
|
+
deps.logger.warn("session.seal.upgrade.cert.invalid", { sessionId: sessionIdHex, reason: "unknown_session" });
|
|
175
|
+
return { ok: false, reason: "unknown_session" };
|
|
176
|
+
}
|
|
177
|
+
const expected = new Set([selfHex, counterpartyHex]);
|
|
178
|
+
if (presentHex === returningHex || !expected.has(presentHex) || !expected.has(returningHex)) {
|
|
179
|
+
deps.logger.warn("session.seal.upgrade.cert.invalid", { sessionId: sessionIdHex, reason: "participant_mismatch" });
|
|
180
|
+
return { ok: false, reason: "participant_mismatch" };
|
|
181
|
+
}
|
|
182
|
+
// 1. Returning attestation (the returning party's ack) over R1 — the kernel check. returningPubkey
|
|
183
|
+
// is now proven to be a real participant of this session (self or counterparty), not attacker-chosen.
|
|
184
|
+
const ackTbs = buildSealUpgradeAckTbs(sessionId, sealedRoot);
|
|
185
|
+
if (!ed25519Verify(returningPubkey, ackTbs, returningSig)) {
|
|
186
|
+
deps.logger.warn("session.seal.upgrade.cert.invalid", { sessionId: sessionIdHex, reason: "returning_signature_invalid" });
|
|
187
|
+
return { ok: false, reason: "returning_signature_invalid" };
|
|
188
|
+
}
|
|
189
|
+
// 2. Present attestation (A's seal sig) — only the present party holds the key to verify it.
|
|
190
|
+
const isPresent = selfHex === presentHex;
|
|
191
|
+
if (isPresent) {
|
|
192
|
+
const presentResult = await verifyUnilateralCertificate({ persistence: deps.persistence, agentPubkeyHex: deps.agentPubkeyHex, logger: deps.logger }, { sessionId, sealedRoot, leafCount, closeTimestamp: closeTs, frostSignature: presentSig, signatureType: presentSigType });
|
|
193
|
+
if (!presentResult.ok) {
|
|
194
|
+
deps.logger.warn("session.seal.upgrade.cert.invalid", { sessionId: sessionIdHex, reason: `present_signature_invalid:${presentResult.reason}` });
|
|
195
|
+
return { ok: false, reason: `present_signature_invalid:${presentResult.reason}` };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return { ok: true, party: isPresent ? "present" : "returning" };
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=seal-upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seal-upgrade.js","sourceRoot":"","sources":["../src/seal-upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
2
|
+
import type { Logger } from "./types.js";
|
|
3
|
+
export interface SealedLeaf {
|
|
4
|
+
/** The relay's sequence number (from 1). Null only for a message the relay never numbered. */
|
|
5
|
+
seq: number | null;
|
|
6
|
+
/** `unknown` only when this side holds no signed record of the leaf's kind. */
|
|
7
|
+
kind: "message" | "close" | "document" | "refusal" | "unknown";
|
|
8
|
+
from: string | null;
|
|
9
|
+
from_pubkey: string | null;
|
|
10
|
+
/** Messages only. Null when this side holds no text for it. */
|
|
11
|
+
text?: string | null;
|
|
12
|
+
content_hash: string;
|
|
13
|
+
/** When the relay numbered it (ISO 8601), the one independent time in the record. */
|
|
14
|
+
at: string | null;
|
|
15
|
+
/** The relay's signature over this position. */
|
|
16
|
+
relay_ack: string | null;
|
|
17
|
+
/** Messages only: the recipient's signature that their machine received it. */
|
|
18
|
+
delivery_ack?: string | null;
|
|
19
|
+
}
|
|
20
|
+
export type RootMismatchReason = "unnumbered_messages" | "sequence_gap" | "no_relay_record" | "root_differs";
|
|
21
|
+
export interface SealedConversation {
|
|
22
|
+
leaves: SealedLeaf[];
|
|
23
|
+
closed_by: string[];
|
|
24
|
+
root_matches_my_transcript: boolean;
|
|
25
|
+
root_mismatch_reason?: RootMismatchReason;
|
|
26
|
+
}
|
|
27
|
+
export declare function readSealedConversation(db: DaemonDatabase, logger: Logger, a: {
|
|
28
|
+
agentId: string;
|
|
29
|
+
agentPubkey: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
sealedRoot: string;
|
|
32
|
+
/** Transcript text by local sequence (already redacted for quarantined messages). */
|
|
33
|
+
texts: ReadonlyMap<number, string>;
|
|
34
|
+
nameFor: (pubkeyHex: string) => string;
|
|
35
|
+
}): SealedConversation;
|
|
36
|
+
//# sourceMappingURL=sealed-conversation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealed-conversation.d.ts","sourceRoot":"","sources":["../src/sealed-conversation.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,WAAW,UAAU;IACzB,8FAA8F;IAC9F,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,+EAA+E;IAC/E,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,gDAAgD;IAChD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,GAAG,cAAc,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAE7G,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0BAA0B,EAAE,OAAO,CAAC;IACpC,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;CAC3C;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,MAAM,EACd,CAAC,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC,GACA,kBAAkB,CAiJpB"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The seal answer's conversation — every leaf the seal covers, in the relay's numbering.
|
|
3
|
+
*
|
|
4
|
+
* Three stores, each supplying what only it holds:
|
|
5
|
+
* - `relay_ack_receipts`: the relay's countersignature for every numbered position, both sides'
|
|
6
|
+
* leaves and both closes. This is the spine: one row per position.
|
|
7
|
+
* - `session_seal_leaves`: the signed Structure 1 and leaf kind at each position — the AUTHOR.
|
|
8
|
+
* Receipts never carry these, so the author must come from here.
|
|
9
|
+
* - the transcript and the two acknowledgement tables: text, and the delivery signature for each
|
|
10
|
+
* message, whichever side sent it.
|
|
11
|
+
*
|
|
12
|
+
* Matching a position to a message is done IN ORDER, never by hash alone: both sides can send
|
|
13
|
+
* identical bytes ("ok"), and a hash lookup would hand one side's message to the other.
|
|
14
|
+
*/
|
|
15
|
+
import { decodeStructure1 } from "@cello-protocol/protocol-types";
|
|
16
|
+
import { SessionTree } from "./session-tree.js";
|
|
17
|
+
/** Relay leaf kind bytes other than a message (session-relay-client.ts), named for an operator. */
|
|
18
|
+
const NON_MESSAGE_KINDS = { 2: "close", 4: "document", 5: "refusal" };
|
|
19
|
+
export function readSealedConversation(db, logger, a) {
|
|
20
|
+
const messages = db
|
|
21
|
+
.prepare(`SELECT l.leaf_index AS idx, l.leaf_hash_hex AS hash, t.direction AS direction
|
|
22
|
+
FROM session_tree_leaves l
|
|
23
|
+
JOIN transcript t
|
|
24
|
+
ON t.agent_id = l.agent_id AND t.session_id = l.session_id AND t.sequence = l.leaf_index
|
|
25
|
+
WHERE l.agent_id = ? AND l.session_id = ?
|
|
26
|
+
ORDER BY l.leaf_index ASC`)
|
|
27
|
+
.all(a.agentId, a.sessionId);
|
|
28
|
+
// The two relay stores are created by their own classes the first time a session goes through a
|
|
29
|
+
// relay, not by the session schema, so on a daemon that has never used one they do not exist yet.
|
|
30
|
+
// That is the same fact as holding no relay record, not a degraded read.
|
|
31
|
+
const receipts = tableExists(db, "relay_ack_receipts")
|
|
32
|
+
? db
|
|
33
|
+
.prepare(`SELECT sequence_number AS seq, hash_hex AS hash, relay_timestamp AS ts, signature_hex AS sig
|
|
34
|
+
FROM relay_ack_receipts WHERE agent_pubkey = ? AND session_id = ?
|
|
35
|
+
ORDER BY sequence_number ASC`)
|
|
36
|
+
.all(a.agentPubkey, a.sessionId)
|
|
37
|
+
: [];
|
|
38
|
+
const signed = new Map();
|
|
39
|
+
if (tableExists(db, "session_seal_leaves")) {
|
|
40
|
+
for (const r of db
|
|
41
|
+
.prepare(`SELECT sequence_number AS seq, leaf_kind AS kind, structure1_cbor AS s1
|
|
42
|
+
FROM session_seal_leaves WHERE agent_pubkey = ? AND session_id = ?`)
|
|
43
|
+
.all(a.agentPubkey, a.sessionId)) {
|
|
44
|
+
// The author is read from the bytes they signed, not from the stored sender column.
|
|
45
|
+
const d = decodeStructure1(r.s1 instanceof Uint8Array ? r.s1 : new Uint8Array(r.s1));
|
|
46
|
+
signed.set(r.seq, { author: d.ok ? Buffer.from(d.fields.senderPubkey).toString("hex") : null, kind: r.kind });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* POSITIONS FOR MESSAGES NO RELAY ACKNOWLEDGEMENT REACHED — see `recovered-position.ts`.
|
|
51
|
+
*
|
|
52
|
+
* Live 2026-09-15: a laptop slept while the counterparty sent two messages. The relay wrote both
|
|
53
|
+
* `leaf_deliver` frames onto the dead connection, and the text came later from the mailbox. Reading
|
|
54
|
+
* acknowledgements alone listed both as unnumbered and reported a mismatch on a correct seal.
|
|
55
|
+
*
|
|
56
|
+
* A recovered position is the SENDER's claim, not the relay's, so it fills only a position with no
|
|
57
|
+
* acknowledgement, carries `relay_ack: null`, and is trusted only as far as the root check below:
|
|
58
|
+
* the sealed root was computed from relay-signed leaves, so a wrong claim cannot reproduce it. One
|
|
59
|
+
* that disagrees with an acknowledgement at the same position is reported, never papered over.
|
|
60
|
+
*/
|
|
61
|
+
const bySeq = new Map();
|
|
62
|
+
for (const r of receipts)
|
|
63
|
+
bySeq.set(r.seq, r);
|
|
64
|
+
let recoveredConflict = false;
|
|
65
|
+
const recoveredAuthor = new Map();
|
|
66
|
+
for (const p of db
|
|
67
|
+
.prepare("SELECT relay_seq AS seq, hash_hex AS hash, sender_hex AS sender FROM session_recovered_positions WHERE agent_id = ? AND session_id = ?")
|
|
68
|
+
.all(a.agentId, a.sessionId)) {
|
|
69
|
+
const acked = bySeq.get(p.seq);
|
|
70
|
+
if (acked === undefined) {
|
|
71
|
+
bySeq.set(p.seq, { seq: p.seq, hash: p.hash, ts: null, sig: null });
|
|
72
|
+
recoveredAuthor.set(p.seq, p.sender);
|
|
73
|
+
}
|
|
74
|
+
else if (acked.hash !== p.hash)
|
|
75
|
+
recoveredConflict = true;
|
|
76
|
+
}
|
|
77
|
+
const positions = [...bySeq.values()].sort((x, y) => x.seq - y.seq);
|
|
78
|
+
const acksReceived = ackMap(db, "delivery_acks", a.agentId, a.sessionId);
|
|
79
|
+
const acksGiven = ackMap(db, "delivery_acks_given", a.agentId, a.sessionId);
|
|
80
|
+
const messageLeaf = (m, r) => {
|
|
81
|
+
const received = m.direction !== "sent";
|
|
82
|
+
const pubkey = (r ? signed.get(r.seq)?.author ?? recoveredAuthor.get(r.seq) : null) ?? (received ? null : a.agentPubkey);
|
|
83
|
+
return {
|
|
84
|
+
seq: r?.seq ?? null,
|
|
85
|
+
kind: "message",
|
|
86
|
+
from: pubkey ? a.nameFor(pubkey) : null,
|
|
87
|
+
from_pubkey: pubkey,
|
|
88
|
+
text: a.texts.get(m.idx) ?? null,
|
|
89
|
+
content_hash: m.hash,
|
|
90
|
+
at: r?.ts != null ? new Date(r.ts).toISOString() : null,
|
|
91
|
+
relay_ack: r?.sig ?? null,
|
|
92
|
+
delivery_ack: (received ? acksGiven : acksReceived).get(m.hash) ?? null,
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
const leaves = [];
|
|
96
|
+
const unnumbered = [];
|
|
97
|
+
let next = 0;
|
|
98
|
+
for (const r of positions) {
|
|
99
|
+
const s = signed.get(r.seq);
|
|
100
|
+
let matched = -1;
|
|
101
|
+
if (s === undefined || NON_MESSAGE_KINDS[s.kind] === undefined) {
|
|
102
|
+
for (let i = next; i < messages.length; i++) {
|
|
103
|
+
if (messages[i].hash === r.hash) {
|
|
104
|
+
matched = i;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (matched >= 0) {
|
|
110
|
+
// Any message passed over here was never numbered by the relay.
|
|
111
|
+
for (let i = next; i < matched; i++)
|
|
112
|
+
unnumbered.push(messageLeaf(messages[i], null));
|
|
113
|
+
leaves.push(messageLeaf(messages[matched], r));
|
|
114
|
+
next = matched + 1;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const author = s?.author ?? null;
|
|
118
|
+
leaves.push({
|
|
119
|
+
seq: r.seq,
|
|
120
|
+
kind: s ? (NON_MESSAGE_KINDS[s.kind] ?? "unknown") : "unknown",
|
|
121
|
+
from: author ? a.nameFor(author) : null,
|
|
122
|
+
from_pubkey: author,
|
|
123
|
+
content_hash: r.hash,
|
|
124
|
+
at: r.ts != null ? new Date(r.ts).toISOString() : null,
|
|
125
|
+
relay_ack: r.sig,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
for (let i = next; i < messages.length; i++)
|
|
130
|
+
unnumbered.push(messageLeaf(messages[i], null));
|
|
131
|
+
const tree = SessionTree.empty();
|
|
132
|
+
for (const r of positions)
|
|
133
|
+
tree.appendLeafHash("msg", r.hash);
|
|
134
|
+
const computedRoot = tree.rootHex();
|
|
135
|
+
const reason = positions.length === 0 ? "no_relay_record"
|
|
136
|
+
: unnumbered.length > 0 ? "unnumbered_messages"
|
|
137
|
+
: !positions.every((r, i) => r.seq === i + 1) ? "sequence_gap"
|
|
138
|
+
: recoveredConflict || computedRoot !== a.sealedRoot ? "root_differs"
|
|
139
|
+
: undefined;
|
|
140
|
+
if (reason) {
|
|
141
|
+
logger.warn("session.sealed_conversation.root_mismatch", {
|
|
142
|
+
sessionId: a.sessionId,
|
|
143
|
+
reason,
|
|
144
|
+
receiptCount: receipts.length,
|
|
145
|
+
unnumberedMessages: unnumbered.length,
|
|
146
|
+
computedRoot,
|
|
147
|
+
sealedRoot: a.sealedRoot,
|
|
148
|
+
impact: "the seal answer reports that the sealed root does not match this side's record of the conversation",
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
leaves: [...leaves, ...unnumbered],
|
|
153
|
+
closed_by: leaves.filter((l) => l.kind === "close").map((l) => l.from ?? "unknown"),
|
|
154
|
+
root_matches_my_transcript: reason === undefined,
|
|
155
|
+
...(reason ? { root_mismatch_reason: reason } : {}),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function tableExists(db, name) {
|
|
159
|
+
return db.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(name) !== undefined;
|
|
160
|
+
}
|
|
161
|
+
/** Both acknowledgement tables are created by the session schema, so a missing one throws. */
|
|
162
|
+
function ackMap(db, table, agentId, sessionId) {
|
|
163
|
+
const out = new Map();
|
|
164
|
+
for (const r of db
|
|
165
|
+
.prepare(`SELECT content_hash_hex AS hash, signature AS sig FROM ${table} WHERE agent_id = ? AND session_id = ?`)
|
|
166
|
+
.all(agentId, sessionId)) {
|
|
167
|
+
out.set(r.hash, Buffer.from(r.sig).toString("hex"));
|
|
168
|
+
}
|
|
169
|
+
return out;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=sealed-conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealed-conversation.js","sourceRoot":"","sources":["../src/sealed-conversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE LEAF SET THE DIRECTORY NOTARIZED — recovered from the seal frame, checked against the signed
|
|
3
|
+
* root, and kept so a message can later be proved to sit under it.
|
|
4
|
+
*
|
|
5
|
+
* ─── WHY THIS EXISTS AND WHY THE LOCAL TREE CANNOT DO THE JOB ─────────────────────────────────
|
|
6
|
+
*
|
|
7
|
+
* The daemon's `SessionTree` is NOT the tree the certified root covers, and the difference is not a
|
|
8
|
+
* rounding error:
|
|
9
|
+
*
|
|
10
|
+
* - the certified root is `merkleRoot` over **every** leaf's content hash in the relay's canonical
|
|
11
|
+
* order, **control leaves included** (`directory-node.ts` — "THE CERTIFIED ROOT —
|
|
12
|
+
* client-reproducible, and the one every signature below binds");
|
|
13
|
+
* - `SessionTree` holds **content leaves only**. Nothing appends a SEAL ctrl leaf to it —
|
|
14
|
+
* `submitSealLeaf` deliberately computes its root without mutating the durable tree, and the
|
|
15
|
+
* inbound handler routes a counterparty ctrl leaf to the auto-acknowledge path, never to an
|
|
16
|
+
* append.
|
|
17
|
+
*
|
|
18
|
+
* So `SessionTree.rootHex()` equals the SEAL payload's `final_root` (the root over the non-ctrl
|
|
19
|
+
* leaves, which is what each party signs), and it does **not** equal `sealed_root`. An audit path
|
|
20
|
+
* built from the local tree therefore lands on a root no certificate names — which is precisely the
|
|
21
|
+
* "a proof against your own root proves nothing" trap, reached by accident rather than by design.
|
|
22
|
+
*
|
|
23
|
+
* ─── WHAT MAKES THE STORED SET TRUSTWORTHY ────────────────────────────────────────────────────
|
|
24
|
+
*
|
|
25
|
+
* It is never stored on the directory's word. `recordSealedLeafSet` rebuilds the Merkle root over
|
|
26
|
+
* the hashes and refuses unless it reproduces the `sealed_root` the FROST signature covers. A
|
|
27
|
+
* directory that reorders, adds, drops or alters a single leaf produces a different root and the set
|
|
28
|
+
* is refused — so what lands on disk is, by construction, the leaf set the consortium signed.
|
|
29
|
+
*
|
|
30
|
+
* ⚠️ THE PARAGRAPH THAT USED TO SIT HERE OVERSTATED IT, and it is rewritten rather than deleted
|
|
31
|
+
* because it is what a future reader would have reasoned from. It said: *"the hashes come out of
|
|
32
|
+
* `structure1_cbor`, each leaf's participant-signed to-be-signed bytes; `reDeriveFrontiers` has
|
|
33
|
+
* already verified those signatures on this same array before we are called, so the content hashes
|
|
34
|
+
* are the senders' own, not the directory's."*
|
|
35
|
+
*
|
|
36
|
+
* **That holds on the BILATERAL path only.** There, `seal-coordinator.ts` returns outright when
|
|
37
|
+
* `reDeriveFrontiers` fails, so nothing unverified reaches this module. On the UNILATERAL path
|
|
38
|
+
* `checkUnilateralFrontier` deliberately never rejects — a forged or cross-session leaf yields
|
|
39
|
+
* `leaves_invalid`, the frontier is corrected DOWN to zero, and the seal proceeds rather than
|
|
40
|
+
* dead-ending — and those same leaves are then handed here.
|
|
41
|
+
*
|
|
42
|
+
* **What is true on EVERY path is the root comparison below, and it is the load-bearing one.** A
|
|
43
|
+
* leaf set only lands if it reproduces the FROST-signed `sealed_root`, so forged leaves cannot enter
|
|
44
|
+
* the store unless they hash to a root the consortium already signed. The per-leaf signature check is
|
|
45
|
+
* a second, path-dependent line of defence, not the guarantee — and stating it as the guarantee is
|
|
46
|
+
* exactly the shape `DOD-M15-CLAIM-COMMENTS-1` exists to catch.
|
|
47
|
+
*
|
|
48
|
+
* The hashes still come out of `structure1_cbor`, each leaf's to-be-signed bytes — that part was
|
|
49
|
+
* always accurate, and it is why the hashes are the ones a sender's signature would cover.
|
|
50
|
+
*
|
|
51
|
+
* Crypto refs: RFC 6962 §2.1 (Merkle hash trees).
|
|
52
|
+
*/
|
|
53
|
+
import type { SealFrontierLeaf } from "./seal-frontier-verify.js";
|
|
54
|
+
/**
|
|
55
|
+
* Every leaf's content hash, hex, in the order the directory certified.
|
|
56
|
+
*
|
|
57
|
+
* Structure 1 TBS is `[version, content_hash, sender_pubkey, session_id, last_seen_seq, timestamp]`,
|
|
58
|
+
* plus `last_seen_hash` at index 6 on a v2 claim (020-ACKHASH). Index 1 is the content hash in both,
|
|
59
|
+
* and it is the same value the directory feeds to `buildMerkleTree`. Decoded here rather than taken
|
|
60
|
+
* from any other field so the hashes are the ones the sender's signature actually covers.
|
|
61
|
+
*
|
|
62
|
+
* Returns null on ANY undecodable or wrong-width leaf rather than skipping it. Skipping would build
|
|
63
|
+
* a SHORTER leaf set that still hashes to something, and that something would then be compared to
|
|
64
|
+
* the certified root — a comparison that fails for the right reason today and would silently start
|
|
65
|
+
* passing the moment a dropped leaf happened to be the last one.
|
|
66
|
+
*/
|
|
67
|
+
export declare function sealedLeafHashesFromSignedLeaves(leaves: readonly SealFrontierLeaf[]): string[] | null;
|
|
68
|
+
/** Why a candidate leaf set was not accepted as the notarized one. */
|
|
69
|
+
export declare const SEALED_LEAF_SET_REASONS: {
|
|
70
|
+
/** A leaf's Structure 1 bytes did not decode, or carried no 32-byte content hash. */
|
|
71
|
+
readonly LEAVES_MALFORMED: "sealed_leaves_malformed";
|
|
72
|
+
/** The Merkle root over these hashes is not the root the certificate is signed over. */
|
|
73
|
+
readonly ROOT_DISAGREES: "sealed_leaves_root_disagrees";
|
|
74
|
+
};
|
|
75
|
+
export type SealedLeafSetReason = (typeof SEALED_LEAF_SET_REASONS)[keyof typeof SEALED_LEAF_SET_REASONS];
|
|
76
|
+
export type SealedLeafSetResult = {
|
|
77
|
+
ok: true;
|
|
78
|
+
leafHashes: string[];
|
|
79
|
+
} | {
|
|
80
|
+
ok: false;
|
|
81
|
+
reason: SealedLeafSetReason;
|
|
82
|
+
detail: string;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Recover the certified leaf set from the seal frame's signed leaves, and prove it against the
|
|
86
|
+
* certified root before handing it back.
|
|
87
|
+
*
|
|
88
|
+
* The root comparison is the ONLY thing that makes the result usable, so it is not optional and not
|
|
89
|
+
* a warning: a set that does not reproduce `sealedRootHex` is refused outright.
|
|
90
|
+
*/
|
|
91
|
+
export declare function certifiedLeafSetFrom(leaves: readonly SealFrontierLeaf[], sealedRootHex: string): SealedLeafSetResult;
|
|
92
|
+
//# sourceMappingURL=sealed-leaf-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealed-leaf-set.d.ts","sourceRoot":"","sources":["../src/sealed-leaf-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAiBrG;AAED,sEAAsE;AACtE,eAAO,MAAM,uBAAuB;IAClC,qFAAqF;;IAErF,wFAAwF;;CAEhF,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,OAAO,uBAAuB,CAAC,CAAC;AAEzE,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,aAAa,EAAE,MAAM,GACpB,mBAAmB,CAmBrB"}
|