@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,290 @@
|
|
|
1
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
2
|
+
import { encodeBroadcastArtifact, decodeBroadcastArtifact, verifyBroadcastArtifact, encodeRelayPostReceipt, decodeRelayPostReceipt, verifyRelayPostReceipt, } from "@cello-protocol/protocol-types";
|
|
3
|
+
export const CHANNEL_LOG_CREATE_SQL = `
|
|
4
|
+
-- \`post_cbor\` is AUTHORITATIVE: every read path decodes it. \`published_at\` and \`title\` are lifted
|
|
5
|
+
-- out of the signed bytes so a digest or an index query does not have to decode every row, and a
|
|
6
|
+
-- reader that needs certainty must still go through \`post_cbor\`.
|
|
7
|
+
CREATE TABLE IF NOT EXISTS channel_log (
|
|
8
|
+
channel_pubkey TEXT NOT NULL,
|
|
9
|
+
seq INTEGER NOT NULL,
|
|
10
|
+
published_at INTEGER NOT NULL,
|
|
11
|
+
title TEXT NOT NULL,
|
|
12
|
+
post_cbor BLOB NOT NULL,
|
|
13
|
+
PRIMARY KEY (channel_pubkey, seq)
|
|
14
|
+
);
|
|
15
|
+
CREATE TABLE IF NOT EXISTS channel_log_receipts (
|
|
16
|
+
channel_pubkey TEXT NOT NULL,
|
|
17
|
+
seq INTEGER NOT NULL,
|
|
18
|
+
relay_pubkey TEXT NOT NULL,
|
|
19
|
+
received_at INTEGER NOT NULL,
|
|
20
|
+
receipt_cbor BLOB NOT NULL,
|
|
21
|
+
PRIMARY KEY (channel_pubkey, seq, relay_pubkey)
|
|
22
|
+
);
|
|
23
|
+
CREATE TABLE IF NOT EXISTS channel_state (
|
|
24
|
+
channel_pubkey TEXT NOT NULL PRIMARY KEY,
|
|
25
|
+
next_seq INTEGER NOT NULL,
|
|
26
|
+
pruned_through INTEGER NOT NULL DEFAULT 0
|
|
27
|
+
);
|
|
28
|
+
`;
|
|
29
|
+
export class ChannelLogError extends Error {
|
|
30
|
+
code;
|
|
31
|
+
constructor(code, message) {
|
|
32
|
+
super(`${code}: ${message}`);
|
|
33
|
+
this.name = "ChannelLogError";
|
|
34
|
+
this.code = code;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const hexOf = (b) => Buffer.from(b).toString("hex");
|
|
38
|
+
export class ChannelLogStore {
|
|
39
|
+
#db;
|
|
40
|
+
#logger;
|
|
41
|
+
constructor(db, logger) {
|
|
42
|
+
this.#db = db;
|
|
43
|
+
this.#logger = logger;
|
|
44
|
+
this.#db.exec(CHANNEL_LOG_CREATE_SQL);
|
|
45
|
+
}
|
|
46
|
+
/** Idempotent: creates the state row {next_seq 1, pruned_through 0}. */
|
|
47
|
+
ensureChannel(channelPubkeyHex) {
|
|
48
|
+
this.#db
|
|
49
|
+
.prepare(`INSERT OR IGNORE INTO channel_state (channel_pubkey, next_seq, pruned_through) VALUES (?, 1, 0)`)
|
|
50
|
+
.run(channelPubkeyHex);
|
|
51
|
+
}
|
|
52
|
+
/** What the NEXT append will be assigned — the publisher signs with this before appending. */
|
|
53
|
+
nextPosition(channelPubkeyHex) {
|
|
54
|
+
return { seq: Number(this.#state(channelPubkeyHex).next_seq) };
|
|
55
|
+
}
|
|
56
|
+
/** Append an already-signed post. Throws ChannelLogError — never silently skips. */
|
|
57
|
+
append(channelPubkeyHex, post, correlationId) {
|
|
58
|
+
this.#state(channelPubkeyHex);
|
|
59
|
+
this.#db.exec("BEGIN IMMEDIATE");
|
|
60
|
+
try {
|
|
61
|
+
// The position check runs UNDER the write lock: a second daemon on this DB could otherwise
|
|
62
|
+
// append between the read and the insert, and both posts would claim one number.
|
|
63
|
+
const nextSeq = Number(this.#state(channelPubkeyHex).next_seq);
|
|
64
|
+
if (post.seq !== nextSeq) {
|
|
65
|
+
throw new ChannelLogError("seq_not_next", `post seq ${post.seq}, next is ${nextSeq}`);
|
|
66
|
+
}
|
|
67
|
+
// Never trust the in-memory object: it must survive its own wire encoding, and it must carry
|
|
68
|
+
// both valid signatures — an unsigned post in the log is one a subscriber would reject.
|
|
69
|
+
let cbor;
|
|
70
|
+
try {
|
|
71
|
+
cbor = encodeBroadcastArtifact(post);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
throw new ChannelLogError("post_invalid", extractErrorMessage(err));
|
|
75
|
+
}
|
|
76
|
+
const decoded = decodeBroadcastArtifact(cbor);
|
|
77
|
+
if (!decoded.ok) {
|
|
78
|
+
throw new ChannelLogError("post_invalid", `${decoded.reason}: ${decoded.detail}`);
|
|
79
|
+
}
|
|
80
|
+
const verdict = verifyBroadcastArtifact(decoded.artifact);
|
|
81
|
+
if (!verdict.ok) {
|
|
82
|
+
throw new ChannelLogError("post_invalid", verdict.reason);
|
|
83
|
+
}
|
|
84
|
+
// Verification proves the post was signed by the keys it NAMES — it says nothing about which
|
|
85
|
+
// channel's log it was handed to. Without this, a post signed by channel A files cleanly under
|
|
86
|
+
// channel B: every check passes, and B's relay is later refilled with A's posts, which every
|
|
87
|
+
// subscriber of B rejects for a key mismatch with nothing in B's log saying why.
|
|
88
|
+
if (hexOf(post.channel_pubkey) !== channelPubkeyHex) {
|
|
89
|
+
throw new ChannelLogError("post_invalid", `the post is signed by channel ${hexOf(post.channel_pubkey).slice(0, 16)}, not ${channelPubkeyHex.slice(0, 16)}`);
|
|
90
|
+
}
|
|
91
|
+
const inserted = this.#db
|
|
92
|
+
.prepare(`INSERT OR IGNORE INTO channel_log (channel_pubkey, seq, published_at, title, post_cbor)
|
|
93
|
+
VALUES (?, ?, ?, ?, ?)`)
|
|
94
|
+
.run(channelPubkeyHex, post.seq, post.published_at, post.title, Buffer.from(cbor));
|
|
95
|
+
if (Number(inserted.changes) === 0) {
|
|
96
|
+
throw new ChannelLogError("position_taken", `seq ${post.seq} is already in this channel's log`);
|
|
97
|
+
}
|
|
98
|
+
this.#db.prepare(`UPDATE channel_state SET next_seq = ? WHERE channel_pubkey = ?`).run(nextSeq + 1, channelPubkeyHex);
|
|
99
|
+
this.#db.exec("COMMIT");
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
this.#rollback(channelPubkeyHex, err);
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
105
|
+
this.#logger.info("channel.post.appended", {
|
|
106
|
+
...(correlationId !== undefined ? { correlationId } : {}),
|
|
107
|
+
channel_pubkey: channelPubkeyHex,
|
|
108
|
+
seq: post.seq,
|
|
109
|
+
published_at: post.published_at,
|
|
110
|
+
});
|
|
111
|
+
return { seq: post.seq };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Store one relay's receipt for a post this log holds. VERIFIES FIRST, against the stored post —
|
|
115
|
+
* not against whatever the caller passed alongside it — so a receipt for a different post at the
|
|
116
|
+
* same number is refused rather than filed as proof.
|
|
117
|
+
*
|
|
118
|
+
* WHAT THIS DOES NOT CHECK: that `relay_pubkey` is one of the relays this channel actually
|
|
119
|
+
* publishes to. Any keypair can sign a well-formed receipt for a post it has seen. The relay set
|
|
120
|
+
* lives with the channel's info record, so that check belongs to the publisher — order 018 —
|
|
121
|
+
* which knows which two relays it deposited on; here it would have nothing to compare against.
|
|
122
|
+
*/
|
|
123
|
+
recordReceipt(channelPubkeyHex, receipt, correlationId) {
|
|
124
|
+
const state = this.#state(channelPubkeyHex);
|
|
125
|
+
// Same binding check as `append`: the receipt names its channel inside the relay's signature, and
|
|
126
|
+
// a receipt for another channel filed here would sit in this log looking like proof.
|
|
127
|
+
if (hexOf(receipt.channel_pubkey) !== channelPubkeyHex) {
|
|
128
|
+
throw new ChannelLogError("receipt_invalid", `the receipt names channel ${hexOf(receipt.channel_pubkey).slice(0, 16)}, not ${channelPubkeyHex.slice(0, 16)}`);
|
|
129
|
+
}
|
|
130
|
+
const post = this.#postAt(channelPubkeyHex, receipt.seq);
|
|
131
|
+
if (!post) {
|
|
132
|
+
// A pruned post is NOT an invalid receipt. Reporting one as the other sends an operator to
|
|
133
|
+
// debug a relay's signing key when the answer is that this log no longer holds the bytes.
|
|
134
|
+
if (receipt.seq <= Number(state.pruned_through)) {
|
|
135
|
+
throw new ChannelLogError("post_pruned", `post ${receipt.seq} was pruned (pruned_through is ${Number(state.pruned_through)}); the receipt itself was not checked`);
|
|
136
|
+
}
|
|
137
|
+
throw new ChannelLogError("receipt_invalid", `no post at seq ${receipt.seq} in this channel's log`);
|
|
138
|
+
}
|
|
139
|
+
if (!verifyRelayPostReceipt(receipt, post)) {
|
|
140
|
+
throw new ChannelLogError("receipt_invalid", `the receipt does not verify against the post at seq ${receipt.seq}`);
|
|
141
|
+
}
|
|
142
|
+
const cbor = encodeRelayPostReceipt(receipt);
|
|
143
|
+
const inserted = this.#db
|
|
144
|
+
.prepare(`INSERT OR IGNORE INTO channel_log_receipts (channel_pubkey, seq, relay_pubkey, received_at, receipt_cbor)
|
|
145
|
+
VALUES (?, ?, ?, ?, ?)`)
|
|
146
|
+
.run(channelPubkeyHex, receipt.seq, hexOf(receipt.relay_pubkey), receipt.received_at, Buffer.from(cbor));
|
|
147
|
+
if (Number(inserted.changes) === 0) {
|
|
148
|
+
// One relay, one post, one stored receipt: the row is keyed on exactly that. A REPEAT of the
|
|
149
|
+
// same receipt is a no-op and says so. A DIFFERENT one — the same relay re-acking after a
|
|
150
|
+
// reconnect with a later time — is dropped by the same statement, so reporting it as stored
|
|
151
|
+
// would put a `received_at` in the log that disagrees with the bytes actually kept.
|
|
152
|
+
const held = this.receiptsFor(channelPubkeyHex, receipt.seq).find((r) => hexOf(r.relay_pubkey) === hexOf(receipt.relay_pubkey));
|
|
153
|
+
const identical = held !== undefined && Buffer.from(encodeRelayPostReceipt(held)).equals(Buffer.from(cbor));
|
|
154
|
+
this.#logger.info("channel.receipt.duplicate", {
|
|
155
|
+
...(correlationId !== undefined ? { correlationId } : {}),
|
|
156
|
+
channel_pubkey: channelPubkeyHex,
|
|
157
|
+
seq: receipt.seq,
|
|
158
|
+
relay_pubkey: hexOf(receipt.relay_pubkey),
|
|
159
|
+
identical,
|
|
160
|
+
held_received_at: held?.received_at ?? null,
|
|
161
|
+
offered_received_at: receipt.received_at,
|
|
162
|
+
});
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
this.#logger.info("channel.receipt.stored", {
|
|
166
|
+
...(correlationId !== undefined ? { correlationId } : {}),
|
|
167
|
+
channel_pubkey: channelPubkeyHex,
|
|
168
|
+
seq: receipt.seq,
|
|
169
|
+
relay_pubkey: hexOf(receipt.relay_pubkey),
|
|
170
|
+
received_at: receipt.received_at,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/** Every relay's receipt for one post, in relay order. Empty when none were stored. */
|
|
174
|
+
receiptsFor(channelPubkeyHex, seq) {
|
|
175
|
+
this.#state(channelPubkeyHex);
|
|
176
|
+
const rows = this.#db
|
|
177
|
+
.prepare(`SELECT receipt_cbor FROM channel_log_receipts WHERE channel_pubkey = ? AND seq = ? ORDER BY relay_pubkey ASC`)
|
|
178
|
+
.all(channelPubkeyHex, seq);
|
|
179
|
+
return rows.map((r) => {
|
|
180
|
+
const d = decodeRelayPostReceipt(new Uint8Array(r.receipt_cbor));
|
|
181
|
+
if (!d.ok) {
|
|
182
|
+
throw new ChannelLogError("log_row_corrupt", `a stored receipt for seq ${seq} does not decode: ${d.reason}`);
|
|
183
|
+
}
|
|
184
|
+
return d.receipt;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/** Range read, for refilling a relay and for verification. Inclusive, seq order. */
|
|
188
|
+
readRange(channelPubkeyHex, fromSeq, toSeq) {
|
|
189
|
+
this.#state(channelPubkeyHex);
|
|
190
|
+
const rows = this.#db
|
|
191
|
+
.prepare(`SELECT seq, post_cbor FROM channel_log WHERE channel_pubkey = ? AND seq BETWEEN ? AND ? ORDER BY seq ASC`)
|
|
192
|
+
.all(channelPubkeyHex, fromSeq, toSeq);
|
|
193
|
+
return rows.map((r) => this.#decodeRow(Number(r.seq), new Uint8Array(r.post_cbor)));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Delete every post at or below `throughSeq`, with its receipts. The OLDEST END ONLY: a prune
|
|
197
|
+
* below what is already pruned is refused rather than silently ignored, because a caller that
|
|
198
|
+
* believes it pruned something it did not would keep re-sending it.
|
|
199
|
+
*/
|
|
200
|
+
pruneThrough(channelPubkeyHex, throughSeq) {
|
|
201
|
+
const state = this.#state(channelPubkeyHex);
|
|
202
|
+
const prunedThrough = Number(state.pruned_through);
|
|
203
|
+
if (!Number.isSafeInteger(throughSeq) || throughSeq < 0) {
|
|
204
|
+
throw new ChannelLogError("prune_regression", "throughSeq must be a safe integer >= 0");
|
|
205
|
+
}
|
|
206
|
+
if (throughSeq < prunedThrough) {
|
|
207
|
+
throw new ChannelLogError("prune_regression", `asked to prune through ${throughSeq}, but ${prunedThrough} is already pruned`);
|
|
208
|
+
}
|
|
209
|
+
this.#db.exec("BEGIN IMMEDIATE");
|
|
210
|
+
let pruned;
|
|
211
|
+
try {
|
|
212
|
+
pruned = Number(this.#db.prepare(`DELETE FROM channel_log WHERE channel_pubkey = ? AND seq <= ?`).run(channelPubkeyHex, throughSeq).changes);
|
|
213
|
+
// The receipts go with the posts: they are proof about bytes that no longer exist here.
|
|
214
|
+
this.#db.prepare(`DELETE FROM channel_log_receipts WHERE channel_pubkey = ? AND seq <= ?`).run(channelPubkeyHex, throughSeq);
|
|
215
|
+
this.#db.prepare(`UPDATE channel_state SET pruned_through = ? WHERE channel_pubkey = ?`).run(throughSeq, channelPubkeyHex);
|
|
216
|
+
this.#db.exec("COMMIT");
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
this.#rollback(channelPubkeyHex, err);
|
|
220
|
+
throw err;
|
|
221
|
+
}
|
|
222
|
+
this.#logger.info("channel.log.pruned", {
|
|
223
|
+
channel_pubkey: channelPubkeyHex,
|
|
224
|
+
pruned_through: throughSeq,
|
|
225
|
+
posts_removed: pruned,
|
|
226
|
+
});
|
|
227
|
+
return { pruned };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* What this log holds. `pruned_through` is NOT `first_seq`: posts can also be absent because the
|
|
231
|
+
* log is empty, and a caller that conflated them would report gaps that are not gaps.
|
|
232
|
+
*/
|
|
233
|
+
head(channelPubkeyHex) {
|
|
234
|
+
const state = this.#state(channelPubkeyHex);
|
|
235
|
+
const row = this.#db
|
|
236
|
+
.prepare(`SELECT MIN(seq) AS first_seq, MAX(seq) AS last_seq FROM channel_log WHERE channel_pubkey = ?`)
|
|
237
|
+
.get(channelPubkeyHex);
|
|
238
|
+
return {
|
|
239
|
+
first_seq: row.first_seq === null ? null : Number(row.first_seq),
|
|
240
|
+
last_seq: row.last_seq === null ? null : Number(row.last_seq),
|
|
241
|
+
pruned_through: Number(state.pruned_through),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
#postAt(channelPubkeyHex, seq) {
|
|
245
|
+
const row = this.#db
|
|
246
|
+
.prepare(`SELECT post_cbor FROM channel_log WHERE channel_pubkey = ? AND seq = ?`)
|
|
247
|
+
.get(channelPubkeyHex, seq);
|
|
248
|
+
if (!row)
|
|
249
|
+
return null;
|
|
250
|
+
return this.#decodeRow(seq, new Uint8Array(row.post_cbor));
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* A stored row that no longer decodes, or no longer carries both valid signatures, is corruption —
|
|
254
|
+
* never something to skip past or hand to a relay being refilled.
|
|
255
|
+
*/
|
|
256
|
+
#decodeRow(seq, cbor) {
|
|
257
|
+
const d = decodeBroadcastArtifact(cbor);
|
|
258
|
+
if (!d.ok) {
|
|
259
|
+
throw new ChannelLogError("log_row_corrupt", `stored seq ${seq} does not decode: ${d.reason}`);
|
|
260
|
+
}
|
|
261
|
+
const verdict = verifyBroadcastArtifact(d.artifact);
|
|
262
|
+
if (!verdict.ok) {
|
|
263
|
+
throw new ChannelLogError("log_row_corrupt", `stored seq ${seq} no longer verifies: ${verdict.reason}`);
|
|
264
|
+
}
|
|
265
|
+
return d.artifact;
|
|
266
|
+
}
|
|
267
|
+
#rollback(channelPubkeyHex, original) {
|
|
268
|
+
try {
|
|
269
|
+
this.#db.exec("ROLLBACK");
|
|
270
|
+
}
|
|
271
|
+
catch (rollbackErr) {
|
|
272
|
+
// Usually harmless: the failing statement already ended the transaction. If it did not, the
|
|
273
|
+
// handle is still inside one, and the next write fails naming the wrong cause — so say so.
|
|
274
|
+
this.#logger.warn("channel.log.rollback_failed", {
|
|
275
|
+
channel_pubkey: channelPubkeyHex,
|
|
276
|
+
error: extractErrorMessage(rollbackErr),
|
|
277
|
+
original_error: extractErrorMessage(original),
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
#state(channelPubkeyHex) {
|
|
282
|
+
const row = this.#db
|
|
283
|
+
.prepare(`SELECT next_seq, pruned_through FROM channel_state WHERE channel_pubkey = ?`)
|
|
284
|
+
.get(channelPubkeyHex);
|
|
285
|
+
if (!row)
|
|
286
|
+
throw new ChannelLogError("channel_unknown", `no channel log for ${channelPubkeyHex.slice(0, 16)}; call ensureChannel first`);
|
|
287
|
+
return row;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=channel-log-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-log-store.js","sourceRoot":"","sources":["../src/channel-log-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-M15-CLOSEWAIT-1 — the answer a close gives at COMMITMENT, before notarization.
|
|
3
|
+
*
|
|
4
|
+
* ─── What this replaces ────────────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* `cello_close_session` used to block until the seal ceremony finished. Measured 2026-08-17: leaf
|
|
7
|
+
* submitted 16:48:55, ceremony completed 17:00:01 — **11 minutes 6 seconds of a frozen command.**
|
|
8
|
+
*
|
|
9
|
+
* It was working the whole time: the SEAL leaf was submitted, and it was waiting for the
|
|
10
|
+
* counterparty to close too, escalating to a unilateral seal if they never did. But an operator
|
|
11
|
+
* watching a dead terminal concluded it was broken and force-abandoned **seventeen sessions** —
|
|
12
|
+
* which forfeits the exact receipt the wait was earning. A UX failure that destroys the artifact is
|
|
13
|
+
* worse than the wait it was protecting.
|
|
14
|
+
*
|
|
15
|
+
* ─── The contract (Decisions Carried #4, decided before this code) ─────────────────────────────
|
|
16
|
+
*
|
|
17
|
+
* ANSWER ON COMMITMENT, NOT ON NOTARIZATION. Nothing about what is signed, by whom, or in what
|
|
18
|
+
* order changes; only the response stops waiting for it.
|
|
19
|
+
*
|
|
20
|
+
* ─── Crash safety, CORRECTED after review ──────────────────────────────────────────────────────
|
|
21
|
+
*
|
|
22
|
+
* I wrote that a daemon dying mid-wait is covered because `RestartSealResolver` resolves
|
|
23
|
+
* `seal_interrupted_pending`. **The conclusion holds; that mechanism is not the one.** During the
|
|
24
|
+
* background wait the row is still `status = 'active'` — nothing writes `seal_interrupted_pending`
|
|
25
|
+
* on this path.
|
|
26
|
+
*
|
|
27
|
+
* What actually covers it: the boot sweep flips `active → interrupted, interrupted_by = 'local'`,
|
|
28
|
+
* which is branch (1) of `listRestartOrphanedSessions`, and the resolver seals it from there. Two
|
|
29
|
+
* preconditions ride along and are worth knowing: `message_count > 0` (a never-messaged session is
|
|
30
|
+
* a dead handshake and is deliberately not sealed) and `restart_seal_gave_up_at IS NULL` (a session
|
|
31
|
+
* already exhausted is not retried forever).
|
|
32
|
+
*
|
|
33
|
+
* ─── The counterbalance this file exists to hold ───────────────────────────────────────────────
|
|
34
|
+
*
|
|
35
|
+
* The danger in answering early is the opposite of the one it fixes: an operator who believes a
|
|
36
|
+
* COMMITTED session is a SEALED one is worse off than one who is merely kept waiting, because they
|
|
37
|
+
* will never fetch the receipt. So this response:
|
|
38
|
+
*
|
|
39
|
+
* - carries NO `sealed_root` and NO `sealed` field — there is nothing notarized yet to name;
|
|
40
|
+
* - says `seal_status: "committed"`, a word that is not "closed" and not "sealed";
|
|
41
|
+
* - names `cello_sealed_receipt` — the TOOL, not the internal IPC method `cello_get_sealed_receipt`.
|
|
42
|
+
* The vocabulary audit caught that slip here: naming the wrong one hands the operator a dead
|
|
43
|
+
* command. Without the verb at all, "committed" is a status an agent can do nothing with;
|
|
44
|
+
* - says the receipt is NOT YET available, so an agent polling immediately does not read an empty
|
|
45
|
+
* answer as failure;
|
|
46
|
+
* - warns what `force` costs, because that is the move the 11-minute freeze actually provoked.
|
|
47
|
+
*
|
|
48
|
+
* ONE definition, exported, used at every call site — a second copy is how two surfaces come to
|
|
49
|
+
* disagree after one of them is reworded.
|
|
50
|
+
*/
|
|
51
|
+
/** The guidance string for a committed-not-yet-notarized close. */
|
|
52
|
+
export declare function CLOSE_COMMITTED_GUIDANCE(opts: {
|
|
53
|
+
sessionId: string;
|
|
54
|
+
deadlineMs: number;
|
|
55
|
+
}): string;
|
|
56
|
+
/**
|
|
57
|
+
* The full response body for a close that has committed but not yet notarized.
|
|
58
|
+
*
|
|
59
|
+
* Deliberately NOT `{ ok: true, sealed_root }`-shaped. `ok: true` is correct — the operation the
|
|
60
|
+
* caller asked for succeeded, their commitment is durable — but every field that would imply a
|
|
61
|
+
* finished seal is absent by construction rather than by remembering to omit it.
|
|
62
|
+
*/
|
|
63
|
+
export declare function describeSealCommitted(opts: {
|
|
64
|
+
sessionId: string;
|
|
65
|
+
deadlineMs: number;
|
|
66
|
+
}): Record<string, unknown>;
|
|
67
|
+
//# sourceMappingURL=close-commitment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close-commitment.d.ts","sourceRoot":"","sources":["../src/close-commitment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,mEAAmE;AACnE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAYhG;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO1B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-M15-CLOSEWAIT-1 — the answer a close gives at COMMITMENT, before notarization.
|
|
3
|
+
*
|
|
4
|
+
* ─── What this replaces ────────────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* `cello_close_session` used to block until the seal ceremony finished. Measured 2026-08-17: leaf
|
|
7
|
+
* submitted 16:48:55, ceremony completed 17:00:01 — **11 minutes 6 seconds of a frozen command.**
|
|
8
|
+
*
|
|
9
|
+
* It was working the whole time: the SEAL leaf was submitted, and it was waiting for the
|
|
10
|
+
* counterparty to close too, escalating to a unilateral seal if they never did. But an operator
|
|
11
|
+
* watching a dead terminal concluded it was broken and force-abandoned **seventeen sessions** —
|
|
12
|
+
* which forfeits the exact receipt the wait was earning. A UX failure that destroys the artifact is
|
|
13
|
+
* worse than the wait it was protecting.
|
|
14
|
+
*
|
|
15
|
+
* ─── The contract (Decisions Carried #4, decided before this code) ─────────────────────────────
|
|
16
|
+
*
|
|
17
|
+
* ANSWER ON COMMITMENT, NOT ON NOTARIZATION. Nothing about what is signed, by whom, or in what
|
|
18
|
+
* order changes; only the response stops waiting for it.
|
|
19
|
+
*
|
|
20
|
+
* ─── Crash safety, CORRECTED after review ──────────────────────────────────────────────────────
|
|
21
|
+
*
|
|
22
|
+
* I wrote that a daemon dying mid-wait is covered because `RestartSealResolver` resolves
|
|
23
|
+
* `seal_interrupted_pending`. **The conclusion holds; that mechanism is not the one.** During the
|
|
24
|
+
* background wait the row is still `status = 'active'` — nothing writes `seal_interrupted_pending`
|
|
25
|
+
* on this path.
|
|
26
|
+
*
|
|
27
|
+
* What actually covers it: the boot sweep flips `active → interrupted, interrupted_by = 'local'`,
|
|
28
|
+
* which is branch (1) of `listRestartOrphanedSessions`, and the resolver seals it from there. Two
|
|
29
|
+
* preconditions ride along and are worth knowing: `message_count > 0` (a never-messaged session is
|
|
30
|
+
* a dead handshake and is deliberately not sealed) and `restart_seal_gave_up_at IS NULL` (a session
|
|
31
|
+
* already exhausted is not retried forever).
|
|
32
|
+
*
|
|
33
|
+
* ─── The counterbalance this file exists to hold ───────────────────────────────────────────────
|
|
34
|
+
*
|
|
35
|
+
* The danger in answering early is the opposite of the one it fixes: an operator who believes a
|
|
36
|
+
* COMMITTED session is a SEALED one is worse off than one who is merely kept waiting, because they
|
|
37
|
+
* will never fetch the receipt. So this response:
|
|
38
|
+
*
|
|
39
|
+
* - carries NO `sealed_root` and NO `sealed` field — there is nothing notarized yet to name;
|
|
40
|
+
* - says `seal_status: "committed"`, a word that is not "closed" and not "sealed";
|
|
41
|
+
* - names `cello_sealed_receipt` — the TOOL, not the internal IPC method `cello_get_sealed_receipt`.
|
|
42
|
+
* The vocabulary audit caught that slip here: naming the wrong one hands the operator a dead
|
|
43
|
+
* command. Without the verb at all, "committed" is a status an agent can do nothing with;
|
|
44
|
+
* - says the receipt is NOT YET available, so an agent polling immediately does not read an empty
|
|
45
|
+
* answer as failure;
|
|
46
|
+
* - warns what `force` costs, because that is the move the 11-minute freeze actually provoked.
|
|
47
|
+
*
|
|
48
|
+
* ONE definition, exported, used at every call site — a second copy is how two surfaces come to
|
|
49
|
+
* disagree after one of them is reworded.
|
|
50
|
+
*/
|
|
51
|
+
/** The guidance string for a committed-not-yet-notarized close. */
|
|
52
|
+
export function CLOSE_COMMITTED_GUIDANCE(opts) {
|
|
53
|
+
const minutes = Math.max(1, Math.round(opts.deadlineMs / 60_000));
|
|
54
|
+
return (`Your SEAL commitment for session ${opts.sessionId} is recorded and the notarization is now ` +
|
|
55
|
+
`running in the background. The receipt is NOT YET available: the seal completes as soon as the ` +
|
|
56
|
+
`counterparty also closes, and if they never do it escalates to a unilateral seal after about ` +
|
|
57
|
+
`${minutes} minutes. Fetch it with cello_sealed_receipt (session_id ${opts.sessionId}) — an ` +
|
|
58
|
+
`empty answer before then means "still running", not "failed". Do NOT re-close with force:true ` +
|
|
59
|
+
`to hurry it: forcing ABANDONS the session and forfeits the receipt this is earning, which is ` +
|
|
60
|
+
`exactly how seventeen sessions were lost when this call used to block. If the daemon restarts ` +
|
|
61
|
+
`before the seal finishes, it resumes the notarization on its next start.`);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The full response body for a close that has committed but not yet notarized.
|
|
65
|
+
*
|
|
66
|
+
* Deliberately NOT `{ ok: true, sealed_root }`-shaped. `ok: true` is correct — the operation the
|
|
67
|
+
* caller asked for succeeded, their commitment is durable — but every field that would imply a
|
|
68
|
+
* finished seal is absent by construction rather than by remembering to omit it.
|
|
69
|
+
*/
|
|
70
|
+
export function describeSealCommitted(opts) {
|
|
71
|
+
return {
|
|
72
|
+
ok: true,
|
|
73
|
+
session_id: opts.sessionId,
|
|
74
|
+
seal_status: "committed",
|
|
75
|
+
guidance: CLOSE_COMMITTED_GUIDANCE(opts),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=close-commitment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close-commitment.js","sourceRoot":"","sources":["../src/close-commitment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,mEAAmE;AACnE,MAAM,UAAU,wBAAwB,CAAC,IAA+C;IACtF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;IAClE,OAAO,CACL,oCAAoC,IAAI,CAAC,SAAS,2CAA2C;QAC7F,iGAAiG;QACjG,+FAA+F;QAC/F,GAAG,OAAO,4DAA4D,IAAI,CAAC,SAAS,SAAS;QAC7F,gGAAgG;QAChG,+FAA+F;QAC/F,gGAAgG;QAChG,0EAA0E,CAC3E,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAGrC;IACC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,UAAU,EAAE,IAAI,CAAC,SAAS;QAC1B,WAAW,EAAE,WAAW;QACxB,QAAQ,EAAE,wBAAwB,CAAC,IAAI,CAAC;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { SignalingManager } from "@cello-protocol/transport";
|
|
2
|
+
import type { KeyProvider } from "@cello-protocol/crypto";
|
|
3
|
+
import type { IpcHandler } from "./ipc-server.js";
|
|
4
|
+
import type { SessionNodeManager } from "./session-node-manager.js";
|
|
5
|
+
import { type DiscoveryOutcome } from "./cross-node-negotiation.js";
|
|
6
|
+
import type { Logger, SessionRecord } from "./types.js";
|
|
7
|
+
import type { ConnState } from "./contact-handlers.js";
|
|
8
|
+
import type { SealFlowResult, ActiveSealResult } from "./seal-flows.js";
|
|
9
|
+
import type { SealCompletion, UnilateralResult } from "./seal-coordinator.js";
|
|
10
|
+
import type { DirectoryEndpoint } from "./signaling-connect.js";
|
|
11
|
+
import type { ConsortiumEndpoint } from "./directory-bootstrap.js";
|
|
12
|
+
export interface CloseSessionDeps {
|
|
13
|
+
handlers: Map<string, IpcHandler>;
|
|
14
|
+
logger: Logger;
|
|
15
|
+
sessionNodeManager: SessionNodeManager;
|
|
16
|
+
/** M12-P14: drain this agent's parked mailbox before judging seal readiness (contentPark.autoRecoverForAgent). */
|
|
17
|
+
recoverParkedContent?: (agentName: string, trigger: string) => Promise<void>;
|
|
18
|
+
getConnState: (connectionId: string) => ConnState | undefined;
|
|
19
|
+
resolveCurrentAgent: (connState: ConnState | undefined, explicitAgent?: string) => string | null;
|
|
20
|
+
NO_CURRENT_AGENT_RESPONSE: unknown;
|
|
21
|
+
getKeyProvider: (agentName: string) => KeyProvider | undefined;
|
|
22
|
+
signalingFor: (agentName: string) => SignalingManager | undefined;
|
|
23
|
+
sendOver: (agentName: string, frame: Record<string, unknown>) => Promise<{
|
|
24
|
+
ok: boolean;
|
|
25
|
+
reason?: string;
|
|
26
|
+
}>;
|
|
27
|
+
waitForSignalingConnected: (mgr: SignalingManager, timeoutMs: number) => Promise<boolean>;
|
|
28
|
+
openVisitingConnection: (agentName: string, agentKeyProvider: KeyProvider, agentPubkeyHex: string, endpoint: DirectoryEndpoint, correlationId: string, nodeId: string) => {
|
|
29
|
+
mgr: SignalingManager;
|
|
30
|
+
stop: (reason: string) => Promise<void>;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* ASK the directory for a seal certificate this daemon was never pushed
|
|
34
|
+
* (`DOD-TERMINAL-STATE-DIVERGENCE-1`).
|
|
35
|
+
*
|
|
36
|
+
* The `session_sealed` frame is pushed ONCE. If this daemon's stream was down at that instant it
|
|
37
|
+
* is gone — the re-delivery queue is per-node and clients roam. The session IS notarized and the
|
|
38
|
+
* counterparty holds a receipt; this side holds a non-terminal row and, without asking, can never
|
|
39
|
+
* produce one.
|
|
40
|
+
*
|
|
41
|
+
* Wired here because THIS is where the operator gets stuck: they run a close, it fails, and the
|
|
42
|
+
* failure is indistinguishable from "the seal has not happened". Asking turns that into "it
|
|
43
|
+
* happened, here is your receipt". The directory is not trusted for the answer — the certificate
|
|
44
|
+
* is re-verified against its FROST signature before anything is recorded.
|
|
45
|
+
*/
|
|
46
|
+
pullSealCertificate?: (agentName: string, sessionIdHex: string) => Promise<{
|
|
47
|
+
ok: boolean;
|
|
48
|
+
reason?: string;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Ask the directory where an agent is homed RIGHT NOW. Needed because `crossNodeBrokerBySession`
|
|
52
|
+
* is in-memory and a restart empties it — and a restart is what makes a session interrupted.
|
|
53
|
+
*/
|
|
54
|
+
runDiscoveryLookup?: (signaling: SignalingManager, targetHex: string, timeoutMs: number, correlationId: string) => Promise<DiscoveryOutcome>;
|
|
55
|
+
/** sessionId → the broker node id that brokered this cross-node session. */
|
|
56
|
+
crossNodeBrokerBySession: Map<string, string>;
|
|
57
|
+
/**
|
|
58
|
+
* DOD-M15-CLOSEWAIT-1 review MEDIUM-6: hand a detached seal tail to the daemon so `stop()` can
|
|
59
|
+
* drain it. Optional so an embedder or a test harness constructs without one — but when it is
|
|
60
|
+
* absent the tail is genuinely untracked, which is why the daemon always passes it.
|
|
61
|
+
*/
|
|
62
|
+
registerBackgroundSeal?: (p: Promise<unknown>) => void;
|
|
63
|
+
/**
|
|
64
|
+
* DOD-M15-SEAL-FAILED-TERMINAL-1: record/clear the last background ceremony failure, so
|
|
65
|
+
* `cello_sealed_receipt` can tell a DEAD seal from a slow one.
|
|
66
|
+
*
|
|
67
|
+
* REQUIRED, not optional — review HIGH-3. Optionality made a missing wiring silent: deleting the
|
|
68
|
+
* daemon's `getSealFailure` line left tests, lint and typecheck all green while the whole unit was
|
|
69
|
+
* inert. There is exactly one composition root, so optionality buys nothing and costs the compiler
|
|
70
|
+
* the ability to catch a wiring that was never done. (`RestartSealResolverDeps.markGaveUp` makes
|
|
71
|
+
* the same argument in its own docstring.)
|
|
72
|
+
*/
|
|
73
|
+
sealFailures: {
|
|
74
|
+
record: (a: string, s: string, reason: string, at: string, kind: "unresolved" | "threw") => void;
|
|
75
|
+
clear: (a: string, s: string) => void;
|
|
76
|
+
};
|
|
77
|
+
sealKey: (agentName: string, sessionId: string) => string;
|
|
78
|
+
sealInterruptedInProgress: Set<string>;
|
|
79
|
+
pendingSealWaiters: Map<string, (completion: SealCompletion) => void>;
|
|
80
|
+
pendingUnilateralWaiters: Map<string, (r: UnilateralResult) => void>;
|
|
81
|
+
/** The verified consortium roster, re-resolved at ceremony time. */
|
|
82
|
+
resolveConsortiumRoster: () => Promise<ConsortiumEndpoint[] | null>;
|
|
83
|
+
/**
|
|
84
|
+
* DOD-M12B-INTERRUPTED-ESCALATE-1: how long to wait for the directory's answer to a
|
|
85
|
+
* `seal_unilateral` request. Default 30_000. Injectable because this wait now sits on the
|
|
86
|
+
* INTERRUPTED close path too, and a suite that exercises it should not spend half a minute per
|
|
87
|
+
* case discovering that a stub never answers.
|
|
88
|
+
*/
|
|
89
|
+
unilateralTimeoutMs?: number;
|
|
90
|
+
handleSealInterruptedFlow: (sessionId: string, record: SessionRecord, correlationId: string, merkleRootAtInterruption: string, via?: SignalingManager) => Promise<SealFlowResult>;
|
|
91
|
+
handleActiveSealFlow: (sessionId: string, record: SessionRecord, correlationId: string) => Promise<ActiveSealResult>;
|
|
92
|
+
}
|
|
93
|
+
export declare function registerCloseSessionHandler(deps: CloseSessionDeps): void;
|
|
94
|
+
//# sourceMappingURL=close-session-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close-session-handler.d.ts","sourceRoot":"","sources":["../src/close-session-handler.ts"],"names":[],"mappings":"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"}
|