@cello-protocol/daemon 0.0.227 → 0.0.228
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 +429 -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,1057 @@
|
|
|
1
|
+
import type { RefusalKind } from "./refusal-reasons.js";
|
|
2
|
+
import { SessionConnectionGater } from "./session-connection-gater.js";
|
|
3
|
+
import { NodeAutoNatService, type CelloNode } from "@cello-protocol/transport";
|
|
4
|
+
import type { KeyProvider, LeafInput } from "@cello-protocol/crypto";
|
|
5
|
+
import { AgentRelayClient, type RelayAssignmentCarry, type RelayWitnessAlert } from "./session-relay-client.js";
|
|
6
|
+
import type { SealCarryLeaf } from "./session-seal-leaf-store.js";
|
|
7
|
+
export interface WitnessAlertNotice {
|
|
8
|
+
/** `${relayId}::${sessionIdHex}` — the dedupe key, not shown to anyone. */
|
|
9
|
+
key: string;
|
|
10
|
+
alert: RelayWitnessAlert;
|
|
11
|
+
occurrences: number;
|
|
12
|
+
/**
|
|
13
|
+
* When this witness first said it. Held SEPARATELY from `alert.observedAt`, because a later
|
|
14
|
+
* repeat can replace `alert` (a provable one supersedes an unprovable one) and that must not
|
|
15
|
+
* silently move the first sighting forward — an operator reading "first observed" wants to know
|
|
16
|
+
* when this started, not when the strongest version of it arrived.
|
|
17
|
+
*/
|
|
18
|
+
firstObservedAt: number;
|
|
19
|
+
lastObservedAt: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* How long the auto-acknowledge path holds its broker visiting connection AFTER submitting the seal
|
|
23
|
+
* leaf. The directory pushes `seal_verified` back ~60ms later (measured on GCP), so releasing on
|
|
24
|
+
* submit closed the stream before the frame it was opened for. Generous against 60ms, and bounded so
|
|
25
|
+
* a stalled seal cannot leak the connection.
|
|
26
|
+
*/
|
|
27
|
+
export declare const AUTOACK_BROKER_GRACE_MS = 30000;
|
|
28
|
+
/** SEC-1 / review M4: cap on the refused-parked-entry memo (remote-fed → must be bounded). */
|
|
29
|
+
export declare const MAX_REFUSED_PARKED_ENTRIES = 512;
|
|
30
|
+
/**
|
|
31
|
+
* Per-session cap on remembered unreadable-algorithm frames (`DOD-M15-SEALWIRE-1` part B1).
|
|
32
|
+
*
|
|
33
|
+
* Fed by a REMOTE party — a peer on a newer build refuses every frame it sends — so it needs a
|
|
34
|
+
* bound for the same reason `MAX_REFUSED_PARKED_ENTRIES` does. Small on purpose: the entries exist
|
|
35
|
+
* only to reconcile a refusal with its park-route redelivery, which happens within seconds, and
|
|
36
|
+
* losing an old one costs a log line rather than correctness.
|
|
37
|
+
*/
|
|
38
|
+
export declare const MAX_UNREADABLE_ALG_FRAMES = 64;
|
|
39
|
+
/**
|
|
40
|
+
* How many consumers' read positions a single refusal notice remembers.
|
|
41
|
+
*
|
|
42
|
+
* A consumer id is an IPC connection id, so every reconnect mints a new one and the read state would
|
|
43
|
+
* otherwise grow without bound in a durable table. Sixteen is far above the real number of windows
|
|
44
|
+
* attending one agent; past that the OLDEST reader is evicted, which costs at worst one repeated
|
|
45
|
+
* announcement to a window that has already gone.
|
|
46
|
+
*/
|
|
47
|
+
export declare const MAX_REFUSAL_READERS = 16;
|
|
48
|
+
/**
|
|
49
|
+
* How many refusal notices one read returns, newest first.
|
|
50
|
+
*
|
|
51
|
+
* Review F3. The store is never emptied for an agent — a refusal records something that happened —
|
|
52
|
+
* and read state is per IPC connection, so a fresh window after a restart is entitled to every
|
|
53
|
+
* notice ever recorded. Uncapped, the answer to "why did this conversation go quiet?" was at the
|
|
54
|
+
* bottom of an archive. Capped and newest-first, the recent cause leads and the caller is TOLD the
|
|
55
|
+
* list was cut (`refusals_incomplete`), rather than the tail vanishing silently.
|
|
56
|
+
*/
|
|
57
|
+
export declare const MAX_REFUSALS_PER_READ = 25;
|
|
58
|
+
/**
|
|
59
|
+
* How long the first send waits for an in-flight salt agreement before giving up on it —
|
|
60
|
+
* `DOD-M15-SEALWIRE-1` B2b-2 constraint 2.
|
|
61
|
+
*
|
|
62
|
+
* The agreement is ONE round trip on a stream that is already open, so a healthy exchange finishes
|
|
63
|
+
* in milliseconds; this bound is not sized for the normal case, it is sized for how long an operator
|
|
64
|
+
* should wait before their message goes out unsalted instead of not going out.
|
|
65
|
+
*
|
|
66
|
+
* Five seconds because both errors cost real things. Too short and a merely slow counterparty makes
|
|
67
|
+
* the session permanently unsalted for no reason — the decision is irreversible, so the bound should
|
|
68
|
+
* be generous relative to the round trip. Too long and the first message of every conversation with
|
|
69
|
+
* a peer on an older build visibly hangs, which is the failure a user actually notices and blames
|
|
70
|
+
* the product for. This is only ever paid by a session that HAS an agreement outstanding: a
|
|
71
|
+
* park-only session never starts one and never waits (constraint 5).
|
|
72
|
+
*/
|
|
73
|
+
export declare const SALT_AGREEMENT_WAIT_MS = 5000;
|
|
74
|
+
/**
|
|
75
|
+
* How many times this side re-attempts its session-key announce, and the base delay between them.
|
|
76
|
+
*
|
|
77
|
+
* Bounded on purpose (review F5): the announce rides `onPeerConnect`, so a connection that stays up
|
|
78
|
+
* after one failed attempt would never produce another — encryption off for the life of the session,
|
|
79
|
+
* with guidance pointing at a reconnect that never comes.
|
|
80
|
+
*/
|
|
81
|
+
export declare const SESSION_KEY_ANNOUNCE_RETRIES = 4;
|
|
82
|
+
export declare const SESSION_KEY_ANNOUNCE_RETRY_MS = 250;
|
|
83
|
+
/**
|
|
84
|
+
* WHY a session is hashing unsalted — review Finding 1, and this exists because one sentence was
|
|
85
|
+
* carrying five different situations.
|
|
86
|
+
*
|
|
87
|
+
* `#saltForHashing` returns null for five distinct upstream conditions, and the single guidance
|
|
88
|
+
* string asserted one of them: *"expected when your counterparty runs a build that predates the salt
|
|
89
|
+
* agreement… start a new session once they upgrade."* An operator whose counterparty was merely
|
|
90
|
+
* OFFLINE when they sent their first message — the most common case by far, since a parked first
|
|
91
|
+
* message unsalts the session by design — read that and went and told a fully up-to-date
|
|
92
|
+
* counterparty to upgrade.
|
|
93
|
+
*
|
|
94
|
+
* That is the `directory_unreachable` shape this project keeps re-learning: the message names the
|
|
95
|
+
* exit point and points at the wrong machine. A closed set of reasons with its own guidance per
|
|
96
|
+
* reason is the fix, and a closed set is what stops a sixth condition quietly inheriting a fifth's
|
|
97
|
+
* explanation.
|
|
98
|
+
*/
|
|
99
|
+
export declare const UNSALTED_REASONS: {
|
|
100
|
+
/** No agreement was ever started — the counterparty has not connected. The park-only case. */
|
|
101
|
+
readonly NO_AGREEMENT_STARTED: "no_agreement_started";
|
|
102
|
+
/** We announced and they did not answer inside the bound. */
|
|
103
|
+
readonly AGREEMENT_TIMED_OUT: "agreement_timed_out";
|
|
104
|
+
/**
|
|
105
|
+
* They answered, terminally: they have already hashed content and can never adopt.
|
|
106
|
+
*
|
|
107
|
+
* ⚠️ THIS IS ONE OF FOUR THINGS THE PEER CAN SAY, AND IT USED TO BE ALL OF THEM — 006-CRYPTO
|
|
108
|
+
* finding 2. The wire frame carries WHICH reason, and `SaltAgreementFrame.adoptionClosed` is a
|
|
109
|
+
* label rather than a boolean precisely so a caller cannot say `closed` without saying why. That
|
|
110
|
+
* distinction reached the log and was then dropped one call before the operator, who was told
|
|
111
|
+
* "they had already hashed messages" no matter which of the four it was.
|
|
112
|
+
*/
|
|
113
|
+
readonly PEER_CLOSED_ADOPTION: "peer_closed_adoption";
|
|
114
|
+
/**
|
|
115
|
+
* They answered terminally because their side could NOT READ its own frontier — local storage
|
|
116
|
+
* trouble on their machine, not a conversation that started early.
|
|
117
|
+
*
|
|
118
|
+
* Kept apart from `PEER_CLOSED_ADOPTION` because the remedies are opposites: a new session fixes
|
|
119
|
+
* the already-hashing case and does nothing at all for this one.
|
|
120
|
+
*/
|
|
121
|
+
readonly PEER_FRONTIER_UNREADABLE: "peer_frontier_unreadable";
|
|
122
|
+
/** They answered terminally because the two sides could not converge — 006-CRYPTO finding 1. */
|
|
123
|
+
readonly PEER_EXCHANGE_STALLED: "peer_exchange_stalled";
|
|
124
|
+
/**
|
|
125
|
+
* They closed adoption naming a reason THIS build does not recognise.
|
|
126
|
+
*
|
|
127
|
+
* Deliberately non-asserting. The peer chooses this string, so the safe rendering states what we
|
|
128
|
+
* know — they declined, and the label is in the log line above — and asserts nothing about why.
|
|
129
|
+
* Guessing here is how an operator ends up asking a counterparty to change something that was
|
|
130
|
+
* never the problem.
|
|
131
|
+
*/
|
|
132
|
+
readonly PEER_CLOSED_UNSPECIFIED: "peer_closed_unspecified";
|
|
133
|
+
/** The session was torn down while the first send was still waiting. */
|
|
134
|
+
readonly SESSION_TORN_DOWN: "session_torn_down";
|
|
135
|
+
/** This side already hashed, leafed, held or has in flight — adoption closed here. */
|
|
136
|
+
readonly ADOPTION_CLOSED_LOCALLY: "adoption_closed_locally";
|
|
137
|
+
/** They answered in time and OUR OWN write failed. Nothing about their build is involved. */
|
|
138
|
+
readonly OUR_PERSIST_FAILED: "our_persist_failed";
|
|
139
|
+
/**
|
|
140
|
+
* OUR announce never left this machine — review pass 2, F2. Reusing `AGREEMENT_TIMED_OUT` here
|
|
141
|
+
* told the operator *"your counterparty did not answer"* about a frame we never sent, which is the
|
|
142
|
+
* exact substitution this closed set was created to end, re-entering through the settle site the
|
|
143
|
+
* previous pass asked for.
|
|
144
|
+
*/
|
|
145
|
+
readonly ANNOUNCE_FAILED: "our_announce_failed";
|
|
146
|
+
/**
|
|
147
|
+
* They answered, we stored it, and reading it back FAILED — review pass 2, F4. Distinct from
|
|
148
|
+
* `OUR_PERSIST_FAILED` because the two point at different log lines, and the guidance names one.
|
|
149
|
+
*/
|
|
150
|
+
readonly OUR_READ_FAILED: "our_read_failed";
|
|
151
|
+
};
|
|
152
|
+
export type UnsaltedReason = (typeof UNSALTED_REASONS)[keyof typeof UNSALTED_REASONS];
|
|
153
|
+
/**
|
|
154
|
+
* What the operator should DO about each. TOTAL by construction — a `Record` over the union, so a
|
|
155
|
+
* new reason cannot be added without something for the reader to act on. Same shape, and the same
|
|
156
|
+
* reason, as `refusal-reasons.ts`: that file exists because a free-form `reason: string` let a new
|
|
157
|
+
* code slip past every test in its own guard file.
|
|
158
|
+
*/
|
|
159
|
+
export declare const UNSALTED_GUIDANCE: Record<UnsaltedReason, string>;
|
|
160
|
+
/**
|
|
161
|
+
* DOD-M12B-ACK-1 — inbound `/cello/content/1.0.0` streams allowed per connection.
|
|
162
|
+
*
|
|
163
|
+
* libp2p's registrar default is 32, and it enforces the cap AFTER protocol negotiation has already
|
|
164
|
+
* answered, so exceeding it resets a stream the sender believes it just opened and the sender's
|
|
165
|
+
* next write fails with a message that names nothing. Content delivery is bursty by design (a
|
|
166
|
+
* document sweep opened 99 events in one second on a live daemon), and a slot stays occupied for
|
|
167
|
+
* the whole of ingest — which awaits SQLCipher and the security gateway. 32 is simply too close to
|
|
168
|
+
* normal traffic to be a safety limit.
|
|
169
|
+
*
|
|
170
|
+
* This is headroom, NOT the fix. The fix is that #handleContentStream now closes what it opens; a
|
|
171
|
+
* raised cap without that would only move the cliff. Kept finite on purpose: an unbounded cap would
|
|
172
|
+
* let a peer pin memory by opening streams it never uses, and the ceiling is what makes a future
|
|
173
|
+
* leak of this shape show up as a bounded failure instead of a heap.
|
|
174
|
+
*/
|
|
175
|
+
export declare const CONTENT_MAX_INBOUND_STREAMS = 512;
|
|
176
|
+
/**
|
|
177
|
+
* DOD-M12B-ACK-1 — how long an inbound content stream may stay open after we have closed our end.
|
|
178
|
+
*
|
|
179
|
+
* Closing our write end retires the stream only once the PEER has closed its end too, so a peer
|
|
180
|
+
* that opens streams and never closes them still fills our inbound slots — a guard that runs only
|
|
181
|
+
* on the party it constrains is not a guard. After this window we reset it ourselves, which the
|
|
182
|
+
* muxer honours unilaterally.
|
|
183
|
+
*
|
|
184
|
+
* It cannot be zero: an immediate reset would land while a well-behaved sender is still inside its
|
|
185
|
+
* own `await stream.close()`, rejecting that close and turning every ordinary send into a park.
|
|
186
|
+
* The frame is already ingested long before this fires, so nothing waits on it.
|
|
187
|
+
*/
|
|
188
|
+
export declare const CONTENT_STREAM_LINGER_MS = 30000;
|
|
189
|
+
/**
|
|
190
|
+
* DOD-M12B-SHUTDOWN-1 — how long one teardown step may block the daemon's exit.
|
|
191
|
+
*
|
|
192
|
+
* Chosen against the surface that complains: `cello logout` gives up and reports the daemon still
|
|
193
|
+
* running after 5 s, so a step that can burn longer than that guarantees the message the operator
|
|
194
|
+
* saw. Two steps at 2 s each stay inside it.
|
|
195
|
+
*/
|
|
196
|
+
export declare const SHUTDOWN_STEP_DEADLINE_MS = 2000;
|
|
197
|
+
/**
|
|
198
|
+
* DOD-M12B-REDIAL-1 — the shortest gap between two re-dials of one session.
|
|
199
|
+
*
|
|
200
|
+
* Long enough that a burst of sends against a peer that is genuinely gone costs one dial rather
|
|
201
|
+
* than one per message; short enough that a peer coming back is picked up on the next thing the
|
|
202
|
+
* operator says. It is cleared on a successful dial, so it never delays a live counterparty.
|
|
203
|
+
*/
|
|
204
|
+
export declare const REDIAL_COOLDOWN_MS = 15000;
|
|
205
|
+
/**
|
|
206
|
+
* DOD-CAP-SELF-HEAL-1 — how long an interrupted session keeps consuming a cap slot.
|
|
207
|
+
*
|
|
208
|
+
* ATTRIBUTION ALONE DID NOT FIX THIS, and the reason is worth keeping. Recording who ended a
|
|
209
|
+
* session only works for sessions ended after the recording started: every row written before the
|
|
210
|
+
* column existed is unlabelled, and an unlabelled row counts. So the operator's actual backlog —
|
|
211
|
+
* five finished conversations that were blocking two of their own agents — was untouched by it.
|
|
212
|
+
* Attribution can never clear history, and history is what fills a cap.
|
|
213
|
+
*
|
|
214
|
+
* Age can. An interrupted session nobody has touched for hours is debris, not a live obligation,
|
|
215
|
+
* and that is true whether our restart or their disconnect produced it.
|
|
216
|
+
*
|
|
217
|
+
* D18 SURVIVES BECAUSE THE ATTACK IS A RATE. The disconnect-evasion peer has to drop and reopen
|
|
218
|
+
* faster than this window to gain anything, so everything it churns is recent and everything it
|
|
219
|
+
* churns still counts. What ages out is the thing that was never an attack: a conversation that
|
|
220
|
+
* finished. An attacker who waits out the window to gain one slot per window is not evading the
|
|
221
|
+
* bound, they are obeying a slower one — and the global anti-swarm cap still applies on top.
|
|
222
|
+
*
|
|
223
|
+
* Two hours: comfortably longer than any churn worth attacking with, comfortably shorter than
|
|
224
|
+
* "yesterday's conversation still blocks me".
|
|
225
|
+
*/
|
|
226
|
+
/**
|
|
227
|
+
* DOD-M12B-RESERVATION-RETRY-1 — how many times to re-ask for a refused reservation before saying
|
|
228
|
+
* the agent is undialable and stopping. Bounded because a reservation is scarce and a fleet that
|
|
229
|
+
* retries forever is how a relay is exhausted. With the 5-minute base and doubling, five retries
|
|
230
|
+
* span about 2.5 hours.
|
|
231
|
+
*/
|
|
232
|
+
export declare const SR_RESERVATION_MAX_RETRIES = 5;
|
|
233
|
+
/** The relay peer id inside a `/…/p2p/<relay>/p2p-circuit/…` address. */
|
|
234
|
+
export declare const CIRCUIT_RELAY_ID: RegExp;
|
|
235
|
+
/**
|
|
236
|
+
* 032-RELAYSPREAD — the relays a node ACTUALLY HOLDS a circuit with, read off the addresses it is
|
|
237
|
+
* announcing. One entry per relay, deduped.
|
|
238
|
+
*
|
|
239
|
+
* This is the single definition of "a reservation is held", and it is deliberately the strictest
|
|
240
|
+
* one available: an ANNOUNCED circuit address. `start()` resolving is not enough — a relay out of
|
|
241
|
+
* reservation slots completes the handshake, grants nothing, and leaves a node that looks started
|
|
242
|
+
* and is dialable by nobody. Nor is a candidate address enough: a candidate is a relay we asked.
|
|
243
|
+
*/
|
|
244
|
+
export declare function heldRelayIdsOf(node: CelloNode): string[];
|
|
245
|
+
/**
|
|
246
|
+
* DOD-M15-RELAYSLOTS-1 — how long an agent skips a relay that refused it for a relay-side fault.
|
|
247
|
+
*
|
|
248
|
+
* Ten minutes: long enough that the agent is not re-asking a relay that cannot serve it every time
|
|
249
|
+
* its receiver rebuilds, short enough that when someone fixes that relay the agent finds it again
|
|
250
|
+
* without needing its own restart. The fault is on somebody else's machine and nobody tells us when
|
|
251
|
+
* it is fixed, so this has to expire on its own.
|
|
252
|
+
*/
|
|
253
|
+
export declare const RELAY_QUARANTINE_MS: number;
|
|
254
|
+
export declare const CAP_INTERRUPTED_TTL_MS: number;
|
|
255
|
+
/**
|
|
256
|
+
* DOD-CAP-SELF-HEAL-1 — what counts against a per-sender acceptance bound.
|
|
257
|
+
*
|
|
258
|
+
* `active` always. `interrupted` ONLY when the counterparty caused it.
|
|
259
|
+
*
|
|
260
|
+
* D18 is why `interrupted` has to count at all: a peer can flip a session to `interrupted` for free
|
|
261
|
+
* by dropping its stream, then open a fresh one, indefinitely. Those are theirs and still count.
|
|
262
|
+
*
|
|
263
|
+
* What broke was charging them for OURS. A daemon restart flips every live session to
|
|
264
|
+
* `interrupted`, nothing resolves them, and the reaper correctly refuses to take any with received
|
|
265
|
+
* content — so the bound became all-time instead of concurrent. Measured 2026-08-17: two of one
|
|
266
|
+
* operator's own agents could not open a session, because one held five finished conversations with
|
|
267
|
+
* the other against a stranger cap of three.
|
|
268
|
+
*
|
|
269
|
+
* NULL counts as the counterparty's. The column is new, so every pre-existing row is unlabelled,
|
|
270
|
+
* and the safe default for an anti-abuse bound is to count rather than to excuse.
|
|
271
|
+
*/
|
|
272
|
+
export declare const CAP_COUNTS: (alias?: string) => string;
|
|
273
|
+
export declare const CAP_COUNT_SQL: (where: string) => string;
|
|
274
|
+
/** The cutoff an interrupted session must be newer than to still count. */
|
|
275
|
+
export declare const capStaleBefore: () => number;
|
|
276
|
+
/**
|
|
277
|
+
* DOD-M12B-ABANDON-NOTIFY-1 — what happened when we tried to tell the counterparty we hung up.
|
|
278
|
+
*
|
|
279
|
+
* A REASON, not a boolean. The three causes are not interchangeable, and collapsing them made the
|
|
280
|
+
* operator's guidance blame the network for a session this side had already torn down — which is
|
|
281
|
+
* the most common case, since force-abandon is largely used on `interrupted` sessions and those
|
|
282
|
+
* have no node left to send on.
|
|
283
|
+
*
|
|
284
|
+
* `told: true` means the bytes left this node. There is no acknowledgement, so it is not proof the
|
|
285
|
+
* far side acted — a counterparty on an older client does not understand the frame and keeps
|
|
286
|
+
* calling. The guidance says so rather than promising they will stop.
|
|
287
|
+
*/
|
|
288
|
+
export interface AbandonNoticeResult {
|
|
289
|
+
told: boolean;
|
|
290
|
+
reason: "sent" | "no_local_node" | "send_failed";
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* DOD-M12B-ACK-1 — why a session is impaired, and what became of the content that revealed it.
|
|
294
|
+
*
|
|
295
|
+
* `cause` separates "your own message did not reach them" (`direct_send`) from "our acknowledgement
|
|
296
|
+
* to them did not go out" (`delivery_ack`) — on the second the operator sent nothing at all, so a
|
|
297
|
+
* surface that talks about their last send is describing a message they never wrote.
|
|
298
|
+
*
|
|
299
|
+
* `retained` is what makes it safe to advise. A parked or durably-queued message must NOT be
|
|
300
|
+
* resent — a resend takes a second canonical position, which is this milestone's founding defect.
|
|
301
|
+
* A LOST one must be, and `cello_send` has already said so. `unknown` means do not claim either.
|
|
302
|
+
*/
|
|
303
|
+
export interface SessionImpairment {
|
|
304
|
+
/**
|
|
305
|
+
* `content_key` added by `029c` review F7: a send that failed because this machine had no content
|
|
306
|
+
* encryption key — never agreed, or gone between the preflight and the seal — is a LOCAL key
|
|
307
|
+
* fault, not a transport one. Reported as `direct_send` it sent the operator to inspect a
|
|
308
|
+
* connection that was working.
|
|
309
|
+
*/
|
|
310
|
+
cause: "direct_send" | "delivery_ack" | "content_key";
|
|
311
|
+
retained: "parked" | "durable" | "lost" | "unknown";
|
|
312
|
+
}
|
|
313
|
+
/** Anti-drip-feed: cumulative RECEIVED bytes per session at the UNKNOWN tier (= the grid's UNKNOWN
|
|
314
|
+
* byte cap). Higher tiers get more (DEFAULT_TIER_BOUNDS); no tier is unbounded (INV-TIER-BOUND). */
|
|
315
|
+
export declare const ABUSE_MAX_SESSION_RECEIVED_BYTES: number;
|
|
316
|
+
/** Anti-drip-feed via many sessions: active sessions an UNKNOWN counterparty may hold open at once
|
|
317
|
+
* (= the grid's UNKNOWN per-sender cap). */
|
|
318
|
+
export declare const ABUSE_MAX_SESSIONS_PER_UNKNOWN_SENDER: number;
|
|
319
|
+
/** Anti-swarm: total active sessions from ALL UNKNOWN-tier counterparties combined, per agent. A
|
|
320
|
+
* scalar across the whole unknown pool — not per-tier — so it stays a standalone const. */
|
|
321
|
+
export declare const ABUSE_MAX_UNKNOWN_SESSIONS_GLOBAL = 50;
|
|
322
|
+
/**
|
|
323
|
+
* M7 DOD-SPINE-6 / MSG-001-3b: the inputs a session node needs to connect to the relay
|
|
324
|
+
* as the Structure-2 witness (relay endpoint from the FROST-signed assignment + the
|
|
325
|
+
* agent's K_local identity + the 16-byte session id). Optional on node creation: when
|
|
326
|
+
* absent (or connect fails), the session still works over the direct content path — the
|
|
327
|
+
* relay just doesn't witness the leaf yet.
|
|
328
|
+
*/
|
|
329
|
+
export interface RelayConnectParams {
|
|
330
|
+
relayPeerId: string;
|
|
331
|
+
relayAddrs: string[];
|
|
332
|
+
keyProvider: KeyProvider;
|
|
333
|
+
senderPubkey: Uint8Array;
|
|
334
|
+
sessionIdBytes: Uint8Array;
|
|
335
|
+
/**
|
|
336
|
+
* FED-OPTIONB-SETUP-001 (Option B): the directory-signed relay assignment the client presents to its
|
|
337
|
+
* chosen relay (replaces the directory→relay dial). Absent for direct-mode and on the restart/persisted
|
|
338
|
+
* reconnect path (the relay already recorded the session at first establishment) — the client then just
|
|
339
|
+
* reconnects without re-recording.
|
|
340
|
+
*/
|
|
341
|
+
assignment?: RelayAssignmentCarry;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* DOD-PARK-DRAIN-1: why the parked-mailbox drain is being asked to run.
|
|
345
|
+
*
|
|
346
|
+
* `standing_receiver_ready` — a receiver was just installed. First time only, now: 056-SLOTDEAD
|
|
347
|
+
* deleted the watchdog rebuild, and `reservation_lost` below carries the case that used to ride it.
|
|
348
|
+
* `periodic_backstop` — nothing happened; this is the slow sweep that keeps a missed trigger from
|
|
349
|
+
* stranding content until someone restarts the daemon. Drains are deduped and delete-on-confirm,
|
|
350
|
+
* so an extra one costs a pull.
|
|
351
|
+
*/
|
|
352
|
+
export type ParkedDrainReason = "standing_receiver_ready"
|
|
353
|
+
/**
|
|
354
|
+
* ⚠️ **THE DRAIN THAT USED TO BE A SIDE EFFECT OF A REBUILD — 056-SLOTDEAD.**
|
|
355
|
+
*
|
|
356
|
+
* Content parks precisely because a relay link died, so the moment worth draining on is the loss.
|
|
357
|
+
* That was never what the code said: it drained because losing every reservation REBUILT the
|
|
358
|
+
* receiver, and the new receiver announced itself ready. Deleting the rebuild would therefore have
|
|
359
|
+
* silently taken the drain with it — the agent would have waited for the periodic backstop, which
|
|
360
|
+
* is the strand this trigger exists to prevent. Naming the real cause also fixes a smaller lie:
|
|
361
|
+
* nothing was installed, so `standing_receiver_ready` was the wrong word for it.
|
|
362
|
+
*/
|
|
363
|
+
| "reservation_lost"
|
|
364
|
+
/**
|
|
365
|
+
* ⚠️ **THE OTHER HALF OF `reservation_lost`, and without it that trigger aims at a dead relay —
|
|
366
|
+
* 056-SLOTDEAD, review F4.** The loss fires while the link is DOWN, so the pull it starts cannot
|
|
367
|
+
* succeed. This fires when a circuit comes back, which is the first moment a pull can work. The
|
|
368
|
+
* pair is the point: one notices the outage, the other notices the recovery, and the slow
|
|
369
|
+
* periodic backstop stops being the only thing that closes the gap between them.
|
|
370
|
+
*/
|
|
371
|
+
| "reservation_regained" | "periodic_backstop"
|
|
372
|
+
/**
|
|
373
|
+
* DOD-M12B-SESSION-SEED-1 (case B): a session that was interrupted has just been revived, so the
|
|
374
|
+
* content the counterparty parked while we had no node can finally be fetched. Reviving the node
|
|
375
|
+
* without draining leaves the operator looking at a healthy session with no new mail.
|
|
376
|
+
*/
|
|
377
|
+
| "session_revived"
|
|
378
|
+
/**
|
|
379
|
+
* DOD-M12B-LEAF-TRIGGERS-FETCH-1: the relay told us a specific message exists — we hold its hash
|
|
380
|
+
* and its canonical sequence — and its plaintext never arrived on the direct path. Measured live
|
|
381
|
+
* 2026-08-18: the leaf landed in ONE second and the bytes took 102, because nothing connected the
|
|
382
|
+
* two facts.
|
|
383
|
+
*/
|
|
384
|
+
| "witnessed_leaf_unresolved";
|
|
385
|
+
/**
|
|
386
|
+
* Adapter interface for session node creation. Allows test injection of a
|
|
387
|
+
* failing factory (AC-007) without touching the real libp2p stack.
|
|
388
|
+
* The adapter pattern is mandatory per outline.md constraints.
|
|
389
|
+
*/
|
|
390
|
+
export interface ISessionNodeFactory {
|
|
391
|
+
createNode(config: SessionNodeConfig): Promise<CelloNode>;
|
|
392
|
+
}
|
|
393
|
+
export interface SessionNodeConfig {
|
|
394
|
+
sessionId: string;
|
|
395
|
+
connectionGater?: SessionConnectionGater;
|
|
396
|
+
/**
|
|
397
|
+
* DOD-M15-RELAYONLY-1: this agent has asked never to be directly reachable, so the factory must
|
|
398
|
+
* omit dcutr from the node's service set.
|
|
399
|
+
*
|
|
400
|
+
* ⚠️ NOT a duplicate of filtering the published addresses. Those two things stop DIFFERENT
|
|
401
|
+
* disclosures: the filter controls what the DIRECTORY is told, and dcutr talks to the peer
|
|
402
|
+
* directly. Its whole job is to upgrade a relayed connection into a direct one, and the inbound
|
|
403
|
+
* side starts the upgrade — which is exactly a standing receiver. Leaving it on means the agent
|
|
404
|
+
* routes over the relay precisely as asked and then hole-punches to a direct connection anyway,
|
|
405
|
+
* with every test still green because the leak happens inside libp2p after the assertions.
|
|
406
|
+
*/
|
|
407
|
+
relayOnly?: boolean;
|
|
408
|
+
/**
|
|
409
|
+
* CELLO-M7-TRANSPORT-001: role of the node, forwarded to createNode to tune the
|
|
410
|
+
* libp2p service set (dcutr is included for 'session' dialers, omitted for the
|
|
411
|
+
* 'standing_receiver'). AutoNAT is present for both.
|
|
412
|
+
*/
|
|
413
|
+
nodeType?: "session" | "standing_receiver";
|
|
414
|
+
/**
|
|
415
|
+
* M7-SESSION-003 (AC-005): keepalive ping interval for the session node so a
|
|
416
|
+
* counterparty that vanishes without a clean close is detected within a bounded
|
|
417
|
+
* window. Factories should forward this to createNode({ keepAliveIntervalMs }).
|
|
418
|
+
*/
|
|
419
|
+
keepAliveIntervalMs?: number;
|
|
420
|
+
/**
|
|
421
|
+
* DOD-M12B-SESSION-SEED-1: the 32-byte Ed25519 seed this node's transport identity is derived
|
|
422
|
+
* from, so a node that is torn down can be rebuilt at the SAME peer id.
|
|
423
|
+
*
|
|
424
|
+
* Without it libp2p generates the key internally and the id is unrecoverable — which is why a
|
|
425
|
+
* laptop-close session cannot come back today: a rebuilt node could dial the counterparty, but
|
|
426
|
+
* the counterparty holds an id that no longer exists.
|
|
427
|
+
*
|
|
428
|
+
* PER SESSION, NEVER PER AGENT. Each standing receiver mints its own; at handoff the seed becomes
|
|
429
|
+
* that session's and the replacement receiver mints a fresh one. That preserves the recorded
|
|
430
|
+
* 2026-04-11 rationale for ephemeral ids (a passive observer must not be able to correlate one
|
|
431
|
+
* agent's sessions across days) while making the id stable WITHIN the one session an observer can
|
|
432
|
+
* already correlate by watching the connection.
|
|
433
|
+
*/
|
|
434
|
+
transportPrivateKey?: Uint8Array;
|
|
435
|
+
/**
|
|
436
|
+
* DOD-M12B-SESSION-SEED-1 (case B review HIGH-1): bind a ROUTABLE interface, not loopback.
|
|
437
|
+
*
|
|
438
|
+
* Ordinary session nodes dial OUT and need no inbound reachability, so the factory gives them
|
|
439
|
+
* `127.0.0.1`. But a session node that reached its role by PROMOTION inherited the standing
|
|
440
|
+
* receiver's `0.0.0.0` bind and its circuit-relay reservation — which is every session node in
|
|
441
|
+
* production. A REBUILT one does not inherit anything, so without this it comes back on loopback
|
|
442
|
+
* with no relay address: the peer id is preserved and the counterparty still cannot reach us,
|
|
443
|
+
* which is precisely the half of the promise revival exists to keep. Preserving the id only
|
|
444
|
+
* matters because the circuit address `/p2p/<relay>/p2p-circuit/p2p/<sessionPeerId>` embeds it —
|
|
445
|
+
* and that is the address that was not being taken.
|
|
446
|
+
*/
|
|
447
|
+
inboundReachable?: boolean;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* DOD-M12B-SESSION-SEED-1 — everything needed to bring one session back, and nothing else.
|
|
451
|
+
*
|
|
452
|
+
* Deliberately minimal: a revival re-establishes the SAME session with the SAME two parties, so it
|
|
453
|
+
* needs our identity and theirs and no more. Anything else added here would be state that has to be
|
|
454
|
+
* destroyed on the same edge, and each addition is another way to leave something open.
|
|
455
|
+
*/
|
|
456
|
+
export interface SessionRevivalIdentity {
|
|
457
|
+
/** The 32-byte Ed25519 seed our session node's peer id derives from. Zeroed on destruction. */
|
|
458
|
+
seed: Uint8Array;
|
|
459
|
+
/** The counterparty's SESSION-layer peer id — the gater's allowed peer, and our dial target. */
|
|
460
|
+
counterpartyPeerId: string;
|
|
461
|
+
/** Their agent pubkey, for the rebuilt content handler's authentication check. */
|
|
462
|
+
counterpartyPubkey: string;
|
|
463
|
+
/**
|
|
464
|
+
* DOD-M12B-SESSION-SEED-1 — the counterparty's transport addresses, so a revived session can DIAL
|
|
465
|
+
* them. Measured live 2026-08-18: without this the rebuild succeeded in 1ms and the very next send
|
|
466
|
+
* failed and was LOST, because `#evictSessionCaches` clears `#counterpartyAddrs` on teardown and
|
|
467
|
+
* the re-dial then has nothing to dial. A revived node with no way to reach the other side is a
|
|
468
|
+
* session that is "active" and cannot speak.
|
|
469
|
+
*/
|
|
470
|
+
counterpartyAddrs: string[];
|
|
471
|
+
}
|
|
472
|
+
export interface ActiveSessionEntry {
|
|
473
|
+
node: CelloNode;
|
|
474
|
+
agentName: string;
|
|
475
|
+
/** DOD-LOOP-1: the bare session id (hex). The map key is composite (agentName, sessionId), so
|
|
476
|
+
* iteration/logging reads the real session id from here, not from the map key. */
|
|
477
|
+
sessionId: string;
|
|
478
|
+
counterpartyPubkey: string;
|
|
479
|
+
gater: SessionConnectionGater;
|
|
480
|
+
correlationId: string;
|
|
481
|
+
/**
|
|
482
|
+
* DAEMON-004: the counterparty's SESSION-layer Peer ID — the dial target for
|
|
483
|
+
* the direct content stream (/cello/content/1.0.0). Set when the node is
|
|
484
|
+
* created (outbound: the gater-allowed peer) or accepted (inbound: initiator).
|
|
485
|
+
*/
|
|
486
|
+
counterpartySessionPeerId: string;
|
|
487
|
+
/**
|
|
488
|
+
* CELLO-M7-TRANSPORT-001: the AutoNAT service wrapping this session node. Emits
|
|
489
|
+
* transport.autonat.result on each probe cycle; stopped when the node is torn
|
|
490
|
+
* down so its node subscription is released.
|
|
491
|
+
*/
|
|
492
|
+
autoNat: NodeAutoNatService;
|
|
493
|
+
/**
|
|
494
|
+
* M7 DOD-SPINE-6 / MSG-001-3b: the agent's shared relay witness client (one stream per
|
|
495
|
+
* agent, multiplexing all that agent's sessions — the relay keys delivery by agent
|
|
496
|
+
* pubkey). The leaf submit path uses it on cello_send. Absent when the relay is
|
|
497
|
+
* unreachable — the direct content path still delivers.
|
|
498
|
+
*/
|
|
499
|
+
relayClient?: AgentRelayClient;
|
|
500
|
+
/** The 16-byte session id, for relay leaf submission (the relay frame carries it). */
|
|
501
|
+
relaySessionIdBytes?: Uint8Array;
|
|
502
|
+
/** The `#relayClients` map key (agentName + relay peer id) — federation-safe teardown. */
|
|
503
|
+
relayClientKey?: string;
|
|
504
|
+
/**
|
|
505
|
+
* MSG-001-3b (2b): the session's relay endpoint (peer id + addrs) from the FROST assignment.
|
|
506
|
+
* Held so the content-park backstop can deposit to the SAME relay this session is witnessed by
|
|
507
|
+
* when direct delivery fails. In-memory only (not persisted — the startup-flush park is the
|
|
508
|
+
* separate schema concern; this live park has the endpoint in hand).
|
|
509
|
+
*/
|
|
510
|
+
relayPeerId?: string;
|
|
511
|
+
relayAddrs?: string[];
|
|
512
|
+
/**
|
|
513
|
+
* DOD-M15-RELAYAUTH-1 review H1: the session's directory-signed assignment, held so the DIAL path
|
|
514
|
+
* can present it to whichever relay is about to be asked to allow the dial. Without it here, the
|
|
515
|
+
* dialer has no credential in hand at the moment it needs one and the gate refuses a legitimate
|
|
516
|
+
* dial. Self-authenticating, so holding it grants nothing that forging it would not already require.
|
|
517
|
+
*/
|
|
518
|
+
relayAssignment?: RelayAssignmentCarry;
|
|
519
|
+
/**
|
|
520
|
+
* DOD-M15-RELAYAUTH-1 review M4: `#relayClients` keys for the ADDITIONAL relay clients this
|
|
521
|
+
* session opened beyond its witness relay — the relays that gate circuit dials. `relayClientKey`
|
|
522
|
+
* only ever names the witness one, so without this list these clients and their `#sessions`
|
|
523
|
+
* entries are never released and accumulate for the life of the daemon.
|
|
524
|
+
*/
|
|
525
|
+
extraRelayClientKeys?: string[];
|
|
526
|
+
}
|
|
527
|
+
export type CreateSessionResult = {
|
|
528
|
+
ok: true;
|
|
529
|
+
peerId: string;
|
|
530
|
+
addrs: string[];
|
|
531
|
+
} | {
|
|
532
|
+
ok: false;
|
|
533
|
+
reason: string;
|
|
534
|
+
guidance: string;
|
|
535
|
+
};
|
|
536
|
+
/**
|
|
537
|
+
* `RECEIVED_BUFFER_CAP` AND `ReceivedContentEntry` WERE HERE, and both are gone with the buffer.
|
|
538
|
+
*
|
|
539
|
+
* DOD-COATTEND-1 moved delivery onto the durable transcript and left an in-memory copy of every
|
|
540
|
+
* arriving message behind it, plaintext, capped at 32 per session, held for the daemon's life. The
|
|
541
|
+
* cap was all that bounded it. Nothing read it after DOD-M15-AWAYSCOPE-1 removed the away
|
|
542
|
+
* responder's peek, so there is no buffer left to bound.
|
|
543
|
+
*/
|
|
544
|
+
/**
|
|
545
|
+
* M12-P12 (review F6): the outcome of one park-deposit attempt. A bare boolean conflated
|
|
546
|
+
* "this session has no relay to park to" with "the relay refused the deposit" — only the latter is
|
|
547
|
+
* worth queuing for a later retry, and queuing the former grows the durable queue with rows that
|
|
548
|
+
* can never drain.
|
|
549
|
+
*/
|
|
550
|
+
/**
|
|
551
|
+
* M12-P13 (review MEDIUM-5): the outcome AND the cause. `standing_receiver_unavailable` is an
|
|
552
|
+
* exit-point label; `cause` is the four-way answer from `standingReceiverAbsenceReason()` that says
|
|
553
|
+
* WHICH state the receiver was in — the distinction M12-P12 added precisely because the label had
|
|
554
|
+
* misnamed this incident. It used to be logged here and then discarded at the mapping site, so the
|
|
555
|
+
* caller (and the operator reading `reason`) was sent to the transport when the blocker was the
|
|
556
|
+
* standing receiver.
|
|
557
|
+
*/
|
|
558
|
+
/**
|
|
559
|
+
* ⚠️ `retryAfterMs` — `DOD-M15-RELAYABUSE-1` review MEDIUM-6. The guidance told operators the
|
|
560
|
+
* throttle clears *"in about a minute"*, which is a hardcoded guess about the RELAY's configurable
|
|
561
|
+
* window: a relay run at ten minutes makes that sentence a wrong promise. The real number was in
|
|
562
|
+
* hand two frames away and died here, which is the value-with-no-reader defect one layer further
|
|
563
|
+
* out from where it was just fixed twice.
|
|
564
|
+
*/
|
|
565
|
+
export type ParkAttempt = {
|
|
566
|
+
outcome: "parked" | "refused" | "unconfigured";
|
|
567
|
+
cause?: string;
|
|
568
|
+
retryAfterMs?: number;
|
|
569
|
+
};
|
|
570
|
+
/**
|
|
571
|
+
* DOD-M12B-REVIVAL-BOUND-1 — how long an interrupted session stays revivable before it is closed.
|
|
572
|
+
*
|
|
573
|
+
* 24 hours. The bound exists because of Andre's 2026-08-18 tenet — *"leave nothing open that is no
|
|
574
|
+
* longer needed"* — and its value is set by the case it must not break: a laptop closed for the
|
|
575
|
+
* night. A window shorter than a night's sleep would abandon exactly the sessions case A/B exist to
|
|
576
|
+
* rescue, which is why this is not zero and not an hour.
|
|
577
|
+
*
|
|
578
|
+
* It is deliberately a plain constant and not a setting. A per-operator knob here is a knob that
|
|
579
|
+
* turns the guarantee off, and the guarantee is the security property, not a preference.
|
|
580
|
+
*/
|
|
581
|
+
export declare const REVIVAL_WINDOW_MS: number;
|
|
582
|
+
/**
|
|
583
|
+
* DOD-M12B-REVIVAL-BOUND-1 — how often the revival bound is applied.
|
|
584
|
+
*
|
|
585
|
+
* Hourly. The window is 24 hours, so the worst-case overshoot is ~4% of the bound, and the pass is
|
|
586
|
+
* one DB walk with no network in it. Boot-only was the first build and it is not a bound at all: a
|
|
587
|
+
* daemon left up for a week never applies it, and a long-lived daemon is the normal case.
|
|
588
|
+
*/
|
|
589
|
+
export declare const REVIVAL_BOUND_SWEEP_MS: number;
|
|
590
|
+
/** DOD-M12B-SESSION-SEED-1: per-relay deadline when a revived node asks for a circuit reservation.
|
|
591
|
+
* Three seconds — a relay that has a slot answers well inside it, and one that does not never
|
|
592
|
+
* answers at all (measured: 10,002ms and still waiting). */
|
|
593
|
+
/**
|
|
594
|
+
* 055-ONDEMAND — how long a seal will wait to TELL a relay its slot is free.
|
|
595
|
+
*
|
|
596
|
+
* Short on purpose. Releasing is a courtesy that frees capacity; a seal is the thing the operator
|
|
597
|
+
* is waiting for. An undelivered release costs one slot until its reservation TTL, and that is a
|
|
598
|
+
* far better trade than a seal that waits on an unreachable relay's dial.
|
|
599
|
+
*/
|
|
600
|
+
export declare const RELEASE_TELL_BUDGET_MS = 3000;
|
|
601
|
+
/**
|
|
602
|
+
* 055-ONDEMAND — how long a slot taken to answer an OFFER may sit before the offer is called dead.
|
|
603
|
+
*
|
|
604
|
+
* ⚠️ **NOT the directory's 2-second accept clock.** The accept only starts the ceremony: the
|
|
605
|
+
* assignment still has to be FROST-signed by a threshold of directory nodes and delivered to both
|
|
606
|
+
* parties before either builds a session node. Releasing on 2 s would take the slot out from under
|
|
607
|
+
* a session that was about to begin, turning a rare abandoned offer into a common broken session.
|
|
608
|
+
* Sixty seconds is far past any healthy ceremony and far short of the relay's two-hour TTL.
|
|
609
|
+
*/
|
|
610
|
+
export declare const OFFER_RESERVATION_GRACE_MS = 60000;
|
|
611
|
+
export declare const REVIVE_RESERVATION_TIMEOUT_MS = 3000;
|
|
612
|
+
/** How many relays a revival will ask before settling for a plain node. Two: the worst case is then
|
|
613
|
+
* ~6s to a usable session, against a measured "never" for the unbounded form. */
|
|
614
|
+
export declare const REVIVE_RESERVATION_CANDIDATES = 2;
|
|
615
|
+
/**
|
|
616
|
+
* DOD-M12B-LEAF-TRIGGERS-FETCH-1 — how long the DIRECT path gets before we go and fetch content the
|
|
617
|
+
* relay has already told us about.
|
|
618
|
+
*
|
|
619
|
+
* Two seconds. The witness leaf and the plaintext are separate deliveries, and on a healthy session
|
|
620
|
+
* the direct content normally lands within milliseconds of the leaf — so fetching the instant a leaf
|
|
621
|
+
* arrives would put a relay round trip on the hot path of every message in every session, which is a
|
|
622
|
+
* self-inflicted load problem. Waiting forever is what cost 102 seconds. Two seconds is far above
|
|
623
|
+
* the healthy direct latency and far below anything a person would notice.
|
|
624
|
+
*/
|
|
625
|
+
export declare const LEAF_FETCH_GRACE_MS = 2000;
|
|
626
|
+
/**
|
|
627
|
+
* DOD-M15-REFUSALTERMINAL-1 — the refusal reasons no retry can ever get past.
|
|
628
|
+
*
|
|
629
|
+
* MEASURED LIVE 2026-09-04: one message aimed at a conversation the counterparty had already
|
|
630
|
+
* closed, refused `session_committed` and re-fetched roughly twice a second for 62 hours across
|
|
631
|
+
* several daemon restarts — 232,056 refusal events on that one session and a 484 MB `daemon.log`.
|
|
632
|
+
*
|
|
633
|
+
* **WHY `session_committed` QUALIFIES.** A committed session carries a signature over its contents.
|
|
634
|
+
* Nothing can be appended to it by anyone — not the counterparty, not us — so there is no future
|
|
635
|
+
* state in which this content is accepted. That is the bar, and it is the whole bar.
|
|
636
|
+
*
|
|
637
|
+
* **⚠️ DO NOT ADD A REASON WITHOUT MEETING IT.** A reason wrongly called terminal silently drops a
|
|
638
|
+
* message that would have arrived on the next try, which is worse than the loop this set exists to
|
|
639
|
+
* end. The tempting ones and why each fails:
|
|
640
|
+
*
|
|
641
|
+
* - `content_hash_mismatch` — the fetch is BY CONTENT HASH, and a later fetch may retrieve a
|
|
642
|
+
* correct copy from a different relay. Retrying can succeed.
|
|
643
|
+
* - `sender_unresolved` — the sender may become resolvable when a profile arrives or a directory
|
|
644
|
+
* syncs. Retrying can succeed.
|
|
645
|
+
* - `session_orphaned` — `024-ORPHANTRIAGE` owns that path and decides its disposition.
|
|
646
|
+
* - `session_size_limit_exceeded` — the cap IS monotonic, but its bound is a setting, and an
|
|
647
|
+
* operator who raises it must be able to un-stick the conversation.
|
|
648
|
+
* - a transient screener block — transient is in its name.
|
|
649
|
+
*/
|
|
650
|
+
/**
|
|
651
|
+
* ⚠️ NOT the same concept as `session-terminal-refusal.ts` (`DOD-MP-SESSION-RETIRE-1`), which is the
|
|
652
|
+
* RELAY terminally refusing one of OUR SENDS. This set is about INBOUND content this side will
|
|
653
|
+
* never accept. Two "terminal refusal" ideas live in this daemon and they point in opposite
|
|
654
|
+
* directions — review F9.
|
|
655
|
+
*/
|
|
656
|
+
export declare const TERMINAL_REFUSAL_REASONS: ReadonlySet<string>;
|
|
657
|
+
/**
|
|
658
|
+
* DOD-M15-REFUSALTERMINAL-1 review F3 — how long a FAILED read of the terminal-refusal rows is
|
|
659
|
+
* backed off for, per session.
|
|
660
|
+
*
|
|
661
|
+
* A minute: long enough that a database throwing on every witnessed leaf produces one ERROR rather
|
|
662
|
+
* than one per message (the exact log growth this unit exists to end), short enough that a disk
|
|
663
|
+
* which recovers is noticed within a message or two rather than at the next restart.
|
|
664
|
+
*/
|
|
665
|
+
export declare const TERMINAL_REFUSAL_READ_RETRY_MS = 60000;
|
|
666
|
+
/**
|
|
667
|
+
* DOD-M15-REFUSALTERMINAL-1 review F7 — how many terminally-refused content hashes are remembered
|
|
668
|
+
* per session.
|
|
669
|
+
*
|
|
670
|
+
* The counterparty chooses how many rows this table gets: one per distinct message aimed at a
|
|
671
|
+
* closed conversation, written even after the byte cap has stopped retaining evidence. 512 matches
|
|
672
|
+
* `MAX_REFUSED_PARKED_ENTRIES`, is far above any honest volume for a conversation that has ENDED,
|
|
673
|
+
* and bounds the table at (sessions × 512) small rows.
|
|
674
|
+
*/
|
|
675
|
+
export declare const MAX_TERMINAL_REFUSALS_PER_SESSION = 512;
|
|
676
|
+
/**
|
|
677
|
+
* DOD-M15-REFUSALTERMINAL-1 — ONE refusal, TWO counts, and the NAMES are the fix.
|
|
678
|
+
*
|
|
679
|
+
* The inbox reported `times: 58` for a refusal that had fired tens of thousands of times, and the
|
|
680
|
+
* code was not wrong — the sentence describing it was. One number is "since you last dismissed this
|
|
681
|
+
* conversation" and the other is "ever". Neither may be called `times`, because that is the word an
|
|
682
|
+
* operator, and an agent deciding whether to escalate, reads as a lifetime figure.
|
|
683
|
+
*/
|
|
684
|
+
export interface RefusalNotice {
|
|
685
|
+
sessionId: string;
|
|
686
|
+
reason: string;
|
|
687
|
+
kind: RefusalKind;
|
|
688
|
+
impact: string;
|
|
689
|
+
guidance: string;
|
|
690
|
+
/** Refusals of this reason on this session since the last `cello_dismiss` — which DELETES the
|
|
691
|
+
* notice row, restarting this counter at 1. Zero dismissals and it equals `timesTotal`. */
|
|
692
|
+
timesSinceDismissed: number;
|
|
693
|
+
/**
|
|
694
|
+
* Every refusal of this reason on this session, from the first one, untouched by dismissal.
|
|
695
|
+
*
|
|
696
|
+
* OMITTED, never guessed, when the notice is served from the in-memory fallback — that path
|
|
697
|
+
* exists precisely because the database write failed, so no durable total was ever written, and
|
|
698
|
+
* reporting the smaller number twice would put the original lie back with two names on it.
|
|
699
|
+
*
|
|
700
|
+
* MUTUALLY EXCLUSIVE with `timesTotalAtLeast`: a figure and a floor are different claims and
|
|
701
|
+
* must not share a name.
|
|
702
|
+
*/
|
|
703
|
+
timesTotal?: number;
|
|
704
|
+
/**
|
|
705
|
+
* A LOWER BOUND on the lifetime count, for a row SEEDED at upgrade from a notice that already
|
|
706
|
+
* existed — review F1c.
|
|
707
|
+
*
|
|
708
|
+
* The seed is that notice's `count`, which is refusals since the last dismissal, so the true
|
|
709
|
+
* figure is at least this and may be far more: on the machine this unit was written for, the
|
|
710
|
+
* notice read 58 and the log held 232,056 refusal events. Reporting 58 as `timesTotal` would be
|
|
711
|
+
* the original defect with the new name on it. "At least 58" is true; "58" is not.
|
|
712
|
+
*/
|
|
713
|
+
timesTotalAtLeast?: number;
|
|
714
|
+
/**
|
|
715
|
+
* `041-PARKSTUCK` — that this refusal REPEATS, and roughly how often, in a sentence.
|
|
716
|
+
*
|
|
717
|
+
* A lifetime count on its own is read as that many separate events. On the daemon this was
|
|
718
|
+
* written for, one message had been refused 731 times over 64 hours and the notice said `731`.
|
|
719
|
+
* Absent below three refusals or across a zero span, because two points are not a cadence.
|
|
720
|
+
*/
|
|
721
|
+
recurrence?: string;
|
|
722
|
+
repeat?: boolean;
|
|
723
|
+
}
|
|
724
|
+
/**
|
|
725
|
+
* DOD-M15-SEALWIRE-1 bullet 5, SENT half — our own authorship proof for a message we sent.
|
|
726
|
+
*
|
|
727
|
+
* Deliberately the SAME shape as the received half's `verifiedAuthorship`, because the transcript
|
|
728
|
+
* column pair is the same and a second shape would invite a second meaning. What differs is the
|
|
729
|
+
* ATTRIBUTION the row records: a sent row is `self_authored` (we PRODUCED this signature), never
|
|
730
|
+
* `verified_signature` (we CHECKED someone else's). Same bytes, different claim.
|
|
731
|
+
*/
|
|
732
|
+
export interface SentAuthorship {
|
|
733
|
+
senderPubkey: Uint8Array;
|
|
734
|
+
senderSig: Uint8Array;
|
|
735
|
+
}
|
|
736
|
+
/**
|
|
737
|
+
* One message that has been sent and is waiting for the counterparty's delivery acknowledgement.
|
|
738
|
+
*
|
|
739
|
+
* Named rather than inline because the map it lives in is now shared between the manager and the
|
|
740
|
+
* content pipeline, and a shared shape spelled out twice is a shape that stops agreeing.
|
|
741
|
+
*
|
|
742
|
+
* ⚠️ **EVERYTHING NEEDED TO RE-PARK THIS MESSAGE IS HERE, and that is why the entry is this fat.**
|
|
743
|
+
* When the acknowledgement never comes, the retry has to reproduce the message the peer would have
|
|
744
|
+
* refused — the same bytes, the same hash algorithm, the same signed Structure 1 and the same leaf
|
|
745
|
+
* kind. A retry that rebuilds any of those from what the session holds NOW answers "how would we
|
|
746
|
+
* send this today", which is a different message with a different hash, and the peer refuses it.
|
|
747
|
+
*/
|
|
748
|
+
export interface AwaitingAckEntry {
|
|
749
|
+
timer: ReturnType<typeof setTimeout>;
|
|
750
|
+
content: Uint8Array;
|
|
751
|
+
correlationId?: string;
|
|
752
|
+
structure1Cbor?: Uint8Array;
|
|
753
|
+
structure2Cbor?: Uint8Array;
|
|
754
|
+
contentHashAlg?: string;
|
|
755
|
+
structure1Signature?: Uint8Array;
|
|
756
|
+
leafKind?: number;
|
|
757
|
+
/**
|
|
758
|
+
* DOD-M15-DELIVERYACK-1: has a REFUSED acknowledgement for this message already been logged loudly?
|
|
759
|
+
*
|
|
760
|
+
* The awaiting entry survives a refusal — it must, because a bad acknowledgement has to leave the
|
|
761
|
+
* message in exactly the state no acknowledgement would. So without this a counterparty can send
|
|
762
|
+
* the same malformed acknowledgement ten thousand times and get ten thousand WARN lines out of
|
|
763
|
+
* this machine. It lives HERE rather than in a map of its own so it is freed with the entry, and
|
|
764
|
+
* because an entry exists only for a message THIS side sent: the other party cannot spend a
|
|
765
|
+
* budget they cannot create. Nothing reads it but the choice of log level.
|
|
766
|
+
*/
|
|
767
|
+
ackRefusalLogged?: boolean;
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
770
|
+
* `DOD-M15-AUTHORSHIP-ABSENT-1` — the answer to "did the sender prove they wrote this message?",
|
|
771
|
+
* with the three NOT-YES cases kept apart because they are three different facts about the peer.
|
|
772
|
+
*
|
|
773
|
+
* The distinction that matters is between `refuted` and `unusable`, and getting it backwards is the
|
|
774
|
+
* trap this unit was written against:
|
|
775
|
+
*
|
|
776
|
+
* - `refuted` — a proof was supplied and it FAILED. That is evidence about the counterparty's
|
|
777
|
+
* key, and it freezes the session (`#freezeOnIdentityFailure`).
|
|
778
|
+
* - `unusable` — there is nothing here that could be checked against this message. Almost always
|
|
779
|
+
* a peer on an older build; possibly someone stripping the field. It refuses THE
|
|
780
|
+
* MESSAGE and leaves the session alone, because freezing on it would turn every
|
|
781
|
+
* version skew into an incident only a new session can clear.
|
|
782
|
+
*
|
|
783
|
+
* Absent is not a fourth case: a frame with no `sender_signature` never reaches the verifier, and
|
|
784
|
+
* its caller refuses it on the same path an `unusable` verdict takes. Missing, malformed and
|
|
785
|
+
* mismatched arrive at one outcome, which is the rule this whole class of defect comes from.
|
|
786
|
+
*/
|
|
787
|
+
export type AuthorshipVerdict =
|
|
788
|
+
/** Signature verified against the key inside the signed bytes, and that key IS this session's counterparty. */
|
|
789
|
+
{
|
|
790
|
+
verdict: "verified";
|
|
791
|
+
senderPubkey: Uint8Array;
|
|
792
|
+
senderSig: Uint8Array;
|
|
793
|
+
}
|
|
794
|
+
/**
|
|
795
|
+
* 024-ORPHANTRIAGE: the signature VERIFIED and there was no session record to match it against.
|
|
796
|
+
*
|
|
797
|
+
* ⚠️ **DELIBERATELY A SEPARATE VERDICT, NOT A `verified` WITH A FLAG.** `verified` means *verified
|
|
798
|
+
* AND matched to this session's counterparty*; the transcript column it feeds is documented as
|
|
799
|
+
* exactly that ("verified, never claimed") and seal-time attribution rests on it. Returning an
|
|
800
|
+
* unmatched signer under that name would silently widen a proof the rest of the system reads as
|
|
801
|
+
* stronger. This one carries the weaker fact under its own name, and has exactly one consumer:
|
|
802
|
+
* the orphan branch, which needs to tell an operator whether anything at all is known about who
|
|
803
|
+
* sent a message for a conversation that does not exist here.
|
|
804
|
+
*/
|
|
805
|
+
| {
|
|
806
|
+
verdict: "verified_unmatched";
|
|
807
|
+
senderPubkey: Uint8Array;
|
|
808
|
+
}
|
|
809
|
+
/** A proof was supplied and it is WRONG. Identity failure — fatal for the session. */
|
|
810
|
+
| {
|
|
811
|
+
verdict: "refuted";
|
|
812
|
+
reason: "bad_signature" | "signer_not_counterparty";
|
|
813
|
+
}
|
|
814
|
+
/** Nothing checkable arrived. Refuses the message; says nothing about the counterparty's key. */
|
|
815
|
+
| {
|
|
816
|
+
verdict: "unusable";
|
|
817
|
+
reason: string;
|
|
818
|
+
};
|
|
819
|
+
/**
|
|
820
|
+
* The `unusable` reason for a proof that is real and describes some OTHER message.
|
|
821
|
+
*
|
|
822
|
+
* ⚠️ NOT `"content_hash_mismatch"` — review §6. That string is already the refusal reason for the
|
|
823
|
+
* RECEIVER's own recompute failing (`ingestReceivedContent`), which is a tamper signal about the
|
|
824
|
+
* BODY. This one says the sender's signed claim is about different content. Two different failures
|
|
825
|
+
* sharing one name is a collision an operator grepping the log walks straight into.
|
|
826
|
+
*/
|
|
827
|
+
export declare const AUTHORSHIP_CONTENT_HASH_MISMATCH = "authorship_hash_mismatch";
|
|
828
|
+
/**
|
|
829
|
+
* The `unusable` reason for a proof that is real, is by the right signer, describes this content —
|
|
830
|
+
* and was signed for a DIFFERENT conversation. A replay, not a forgery.
|
|
831
|
+
*
|
|
832
|
+
* Every one of those properties has been ESTABLISHED by the time this is returned; see the ordering
|
|
833
|
+
* note in `#verifyAuthorshipClaim`. An earlier version of this sentence was true of the intent and
|
|
834
|
+
* not of the code, because the check ran before the signature was verified.
|
|
835
|
+
*/
|
|
836
|
+
export declare const AUTHORSHIP_SESSION_MISMATCH = "session_mismatch";
|
|
837
|
+
/**
|
|
838
|
+
* ─── 033-ACKEMIT: the three things that can be wrong with an ACKNOWLEDGEMENT ─────────────────────
|
|
839
|
+
*
|
|
840
|
+
* All three are `unusable` — the message is refused and the session lives. None of them is an
|
|
841
|
+
* identity fault: by the time any is returned the signature has verified, the signer IS this
|
|
842
|
+
* session's counterparty, and the claim is about this content in this conversation. What is wrong is
|
|
843
|
+
* what the claim says the sender had SEEN.
|
|
844
|
+
*
|
|
845
|
+
* They are three names and not one because the operator's next move differs for each, and because an
|
|
846
|
+
* investigator who cannot tell "your counterparty is on an older build" from "your counterparty
|
|
847
|
+
* acknowledged something you never sent" is looking at the wrong half of the problem.
|
|
848
|
+
*
|
|
849
|
+
* ⚠️ **NAME WHAT WAS OBSERVED, NEVER AN INFERRED CONCLUSION** (`DOD-M15-ERRSTRING-1`). Not one of
|
|
850
|
+
* these says "peer is malicious" — a mismatch is equally what a genuine software fault on the other
|
|
851
|
+
* side looks like, and an error that names a party the code did not check is this milestone's
|
|
852
|
+
* founding defect.
|
|
853
|
+
*/
|
|
854
|
+
/**
|
|
855
|
+
* `DOD-M15-SELFCHAIN-1` — the sender's link to their OWN previous message names content this side
|
|
856
|
+
* did not receive from them as their last one.
|
|
857
|
+
*
|
|
858
|
+
* ⚠️ THIS IS THE ONE THAT MEANS THE ORDER OF THE CONVERSATION IS IN DISPUTE, and it is why it is
|
|
859
|
+
* named apart from the acknowledgement reasons above rather than folded in with them. Those say the
|
|
860
|
+
* sender is wrong about what WE said; this says they are wrong about what THEY said, which is the
|
|
861
|
+
* only thing they cannot be honestly mistaken about for long.
|
|
862
|
+
*
|
|
863
|
+
* ⚠️ AND IT STILL NAMES WHAT WAS OBSERVED, NEVER A CONCLUSION. The same signal is produced by a
|
|
864
|
+
* peer reordering a conversation and by a peer whose own chain record went out of step after a
|
|
865
|
+
* restart, and this side cannot tell them apart.
|
|
866
|
+
*/
|
|
867
|
+
export declare const AUTHORSHIP_SELF_CHAIN_MISMATCH = "self_chain_mismatch";
|
|
868
|
+
/**
|
|
869
|
+
* DOD-M15-SELFCHAIN-GAP-1 — **HOW LONG A MISSING PREDECESSOR IS TREATED AS IN FLIGHT.**
|
|
870
|
+
*
|
|
871
|
+
* The frame is REFUSED throughout this window, exactly as before. What waits is the FREEZE, and
|
|
872
|
+
* that distinction is the whole design: nothing is accepted on evidence we cannot check, so the
|
|
873
|
+
* standing ruling ("defer until evidence exists, never accept because we have evidence") holds.
|
|
874
|
+
*
|
|
875
|
+
* ⚠️ DERIVED FROM THE PARK BACKSTOP, NOT CHOSEN — AND DERIVED IN CODE (review F4). A refused frame
|
|
876
|
+
* gets no acknowledgement, so the sender parks a copy and it is re-delivered, and the slowest
|
|
877
|
+
* re-delivery path is the periodic backstop sweep. A grace shorter than one sweep freezes a healthy
|
|
878
|
+
* session whose predecessor was going to arrive on the next one. This used to say "derived" beside
|
|
879
|
+
* a hardcoded 360_000 while the sweep was an injectable option — raise the sweep and the grace
|
|
880
|
+
* silently drops below it. The arithmetic is now the definition.
|
|
881
|
+
*
|
|
882
|
+
* The measured worst case that motivates it: `witnessed_leaf_unresolved` records a leaf landing in
|
|
883
|
+
* ONE second while its bytes took 102 (2026-08-18), and session `dab46e16` (2026-09-08) lost its
|
|
884
|
+
* receipt to exactly this — three of the counterparty's messages arrived before their own
|
|
885
|
+
* predecessors, were read as a disputed order, and froze the session while the predecessors were
|
|
886
|
+
* still in the mailbox.
|
|
887
|
+
*/
|
|
888
|
+
export declare const PARKED_DRAIN_BACKSTOP_DEFAULT_MS = 300000;
|
|
889
|
+
export declare const SELF_CHAIN_GAP_GRACE_MS: number;
|
|
890
|
+
/** The hash names content this side does not hold at the position the claim names. */
|
|
891
|
+
export declare const AUTHORSHIP_ACK_HASH_MISMATCH = "ack_hash_mismatch";
|
|
892
|
+
/** The hash names content this side has never held — not in the tree, and not held pending a gap. */
|
|
893
|
+
export declare const AUTHORSHIP_ACK_HASH_UNKNOWN = "ack_hash_unknown_content";
|
|
894
|
+
/**
|
|
895
|
+
* The set that routes an `unusable` reason to the acknowledgement wording rather than the generic
|
|
896
|
+
* one. A SET, not a string prefix test: a name-shaped check would silently adopt any future reason
|
|
897
|
+
* someone happens to call `ack_*`, and give it a sentence written for the two that are in it.
|
|
898
|
+
*
|
|
899
|
+
* (The count in this sentence has been wrong twice — it said "four" when the set held three, and
|
|
900
|
+
* the deletion of `ack_hash_absent` decremented the wrong number rather than recounting. It is a
|
|
901
|
+
* count of the SET below, so read that rather than trusting this.)
|
|
902
|
+
*/
|
|
903
|
+
export type AckHashReason = typeof AUTHORSHIP_ACK_HASH_MISMATCH | typeof AUTHORSHIP_ACK_HASH_UNKNOWN;
|
|
904
|
+
export declare const ACK_HASH_REASONS: ReadonlySet<string>;
|
|
905
|
+
/**
|
|
906
|
+
* ⚠️ **THE REFUSALS THAT SAY THIS ARE THE ONES WHERE THE REFUSAL DOES NOT HOLD — NOT ALL OF THEM.**
|
|
907
|
+
*
|
|
908
|
+
* It said "EVERY INBOUND REFUSAL SAYS THIS", and review F5 measured that: fifteen call sites file a
|
|
909
|
+
* refusal notice in this file and four carry this sentence — the three encryption causes and the
|
|
910
|
+
* authorship one. The rest MUST NOT. A screened-out message is deliberately never delivered by any
|
|
911
|
+
* route, and a transcript write failure lost content that was already accepted; promising either
|
|
912
|
+
* operator a second chance would be a lie in the opposite direction. Rewritten rather than deleted,
|
|
913
|
+
* because "EVERY" read as a rule and the next person to add a refusal would have applied it blindly.
|
|
914
|
+
*
|
|
915
|
+
* Where it DOES apply: refusing an inbound frame sends back no delivery acknowledgement, so a CELLO
|
|
916
|
+
* sender's TTF backstop parks a copy in the relay mailbox — sealed to this agent's LONG-TERM
|
|
917
|
+
* IDENTITY key, not the session key — and recovery opens that one whatever went wrong with the
|
|
918
|
+
* direct copy.
|
|
919
|
+
*
|
|
920
|
+
* ⚠️ AND ONLY WHEN THIS MACHINE CAN OPEN ONE. See `REFUSAL_NO_OTHER_ROUTE`; the choice is made by
|
|
921
|
+
* `#mailboxRouteAvailable`, never by a caller writing the sentence into a literal.
|
|
922
|
+
*/
|
|
923
|
+
export declare const REFUSAL_MAY_STILL_ARRIVE: string;
|
|
924
|
+
/**
|
|
925
|
+
* ⚠️ **THE OTHER ROUTE DOES NOT EXIST ON THIS MACHINE, AND SAYING SO IS THE POINT** — review F2.
|
|
926
|
+
*
|
|
927
|
+
* Opening a mailbox copy needs `KeyProvider.openContentSeal`, which is OPTIONAL: a threshold or
|
|
928
|
+
* signing-only provider does not implement it, and an agent loaded without a provider has none at
|
|
929
|
+
* all. `content-park.ts` refuses both — `signing_key_unavailable`, `cannot_unseal`.
|
|
930
|
+
*
|
|
931
|
+
* That is the SAME condition `CONTENT_ENCRYPTION_REASONS.NO_LOCAL_IDENTITY` reports. So on the one
|
|
932
|
+
* refusal that names a missing local identity, the reassurance above was false: both routes are shut
|
|
933
|
+
* by one cause, permanently, for every message on every session of that agent — and the operator was
|
|
934
|
+
* told to wait for a delivery that cannot happen. That is the H1 defect exactly: a refusal
|
|
935
|
+
* announcing a better outcome than it delivers.
|
|
936
|
+
*/
|
|
937
|
+
export declare const REFUSAL_NO_OTHER_ROUTE: string;
|
|
938
|
+
/**
|
|
939
|
+
* Constant-shape byte equality for the two binding checks. Lifted rather than hand-rolled a second
|
|
940
|
+
* time — `seal-frontier-verify` has the same helper for the same comparison, and two copies of
|
|
941
|
+
* "are these the same bytes" is two things to keep true.
|
|
942
|
+
*/
|
|
943
|
+
export declare function bytesEqual(a: Uint8Array, b: Uint8Array): boolean;
|
|
944
|
+
/**
|
|
945
|
+
* One row of a session's durable transcript as a reader sees it.
|
|
946
|
+
*
|
|
947
|
+
* DOD-M15-REFUSEDEVIDENCE-1: `'quarantined'` is a message that was received and REFUSED. Its `text`
|
|
948
|
+
* is the withholding statement, never the payload — the storage is complete and only the READ is
|
|
949
|
+
* redacted. `withheld` is present exactly on those rows so a caller can style or skip them without
|
|
950
|
+
* string-matching the statement.
|
|
951
|
+
*/
|
|
952
|
+
export interface TranscriptEntry {
|
|
953
|
+
sequence: number;
|
|
954
|
+
direction: "sent" | "received" | "quarantined";
|
|
955
|
+
text: string;
|
|
956
|
+
createdAt: number;
|
|
957
|
+
refusalReason?: string;
|
|
958
|
+
withheld?: true;
|
|
959
|
+
/** Named to end in `guidance` on purpose: that suffix is what the vocabulary layer rewrites, so a
|
|
960
|
+
* CLI reader is told `cello quarantined` and an MCP reader `cello_quarantined`. */
|
|
961
|
+
withheld_guidance?: string;
|
|
962
|
+
}
|
|
963
|
+
/** A retained refused message, read back whole. The payload is handed out FRAMED, never raw. */
|
|
964
|
+
export interface QuarantinedRecord {
|
|
965
|
+
sequence: number;
|
|
966
|
+
reason: string;
|
|
967
|
+
content: Uint8Array;
|
|
968
|
+
senderPubkeyHex: string | null;
|
|
969
|
+
senderSig: Uint8Array | null;
|
|
970
|
+
attribution: string;
|
|
971
|
+
createdAt: number;
|
|
972
|
+
}
|
|
973
|
+
/**
|
|
974
|
+
* The relay's peer id out of a circuit listen address, or `null` if the address does not name one.
|
|
975
|
+
*
|
|
976
|
+
* Returns null rather than throwing or guessing: an unreadable address means we cannot tell which
|
|
977
|
+
* relay this candidate was for, and every caller has a real thing to do with that answer.
|
|
978
|
+
*/
|
|
979
|
+
export declare function relayPeerIdOf(circuitAddr: string): string | null;
|
|
980
|
+
/**
|
|
981
|
+
* The Merkle leaf inputs for a seal carry: each leaf's `content_hash`, read out of the bytes its
|
|
982
|
+
* SENDER SIGNED (`structure1_cbor`), never out of an envelope field somebody else filled in.
|
|
983
|
+
*
|
|
984
|
+
* `null` when any leaf is unreadable — the caller must then answer "I cannot judge", never "we
|
|
985
|
+
* disagree". A decode failure is this daemon's limitation, not evidence against anyone.
|
|
986
|
+
*
|
|
987
|
+
* Canonical Structure 1 is `[version, content_hash, sender_pubkey, session_id, last_seen_seq,
|
|
988
|
+
* timestamp]`, plus `last_seen_hash` at index 6 on a v2 claim (020-ACKHASH). The content hash is at
|
|
989
|
+
* index 1 in both and is used AS the leaf hash (RFC 6962 §2.1 "hash" leaves are taken as-is), which
|
|
990
|
+
* is the domain the certified root lives in.
|
|
991
|
+
*/
|
|
992
|
+
export declare function carryContentHashInputs(carry: readonly SealCarryLeaf[]): LeafInput[] | null;
|
|
993
|
+
/**
|
|
994
|
+
* How many of the counterparty's content hashes a session remembers for the self-link check.
|
|
995
|
+
*
|
|
996
|
+
* Bounded because a peer feeds it. 256 covers any realistic gap in our own copy of a conversation —
|
|
997
|
+
* a held message, one the inbound screen refused, one lost in flight — while keeping the memory a
|
|
998
|
+
* single session can cost fixed. Past the cap the check gets STRICTER, never looser.
|
|
999
|
+
*/
|
|
1000
|
+
export declare const SELF_CHAIN_MEMORY = 256;
|
|
1001
|
+
/**
|
|
1002
|
+
* The ONE definition of "unread" in this daemon: a RECEIVED transcript row whose sequence is
|
|
1003
|
+
* beyond the agent's persisted read watermark. A constant, not a copy-pasted string, so the
|
|
1004
|
+
* INBOX unread count and the DOD-CURSOR-DURABLE-1 read-before-write gate can never drift into
|
|
1005
|
+
* disagreeing about what "unread" means — the gate deciding one thing while the inbox shows
|
|
1006
|
+
* another is precisely the bug this shape prevents. Interpolated SQL only (no user input).
|
|
1007
|
+
*
|
|
1008
|
+
* ⚠️ IT LIVES HERE, NOT ON A CLASS, BECAUSE 036-GODFILE MOVED ITS READERS OUT. All three unread
|
|
1009
|
+
* queries went to `session-records.ts`, so today there is exactly ONE importer. It is exported
|
|
1010
|
+
* rather than left a `static #private` because a `#private` cannot cross a file boundary at all —
|
|
1011
|
+
* so the moment a second reader appears in another module, the only way to give it the value would
|
|
1012
|
+
* be to copy the string, which is precisely the drift the paragraph above forbids. Exported now so
|
|
1013
|
+
* that nobody is ever tempted.
|
|
1014
|
+
*/
|
|
1015
|
+
export declare const UNREAD_RECEIVED_WHERE = "\n t.direction = 'received'\n AND t.sequence > COALESCE(w.last_delivered_seq, -1)";
|
|
1016
|
+
export declare const REFUSED_SESSIONS_CAP = 200;
|
|
1017
|
+
export declare const TERMINAL_STATUSES = "('sealed','abandoned','seal_interrupted_pending','interrupted')";
|
|
1018
|
+
/**
|
|
1019
|
+
* A reservation ask that failed for a CLIENT-SIDE reason, named by the transport.
|
|
1020
|
+
*
|
|
1021
|
+
* ⚠️ **REVIEW HIGH-2 — WITHOUT THIS, A LIBP2P RENAME READS AS A CAPACITY OUTAGE.** When
|
|
1022
|
+
* `listenOnCircuit` throws `transport_manager_unavailable`, the ask never reached the relay at all —
|
|
1023
|
+
* but the generic decline below infers its reason from the connection state, finds the proof
|
|
1024
|
+
* connection still open, and reports `relay_granted_no_reservation` on every relay in the pool. That
|
|
1025
|
+
* string means *"relay CAPACITY, a trustless-cello problem"* in this daemon's own taxonomy, so an
|
|
1026
|
+
* upstream API change would send an operator into the relay fleet while the real cause survived only
|
|
1027
|
+
* as an `error` field on a warn line nothing surfaces.
|
|
1028
|
+
*
|
|
1029
|
+
* These faults are ours. They must be described in our vocabulary, not the relay's.
|
|
1030
|
+
*/
|
|
1031
|
+
export declare const CLIENT_SIDE_ASK_FAULTS: Set<string>;
|
|
1032
|
+
export declare function clientSideAskFault(err: unknown): string | undefined;
|
|
1033
|
+
/**
|
|
1034
|
+
* Whether this node holds a granted reservation — i.e. announces a circuit address.
|
|
1035
|
+
*
|
|
1036
|
+
* Review LOW-5: `p2p-circuit` is read as a SEGMENT, the same rule `listenOnCircuit` applies to its
|
|
1037
|
+
* own input. A substring test also matches a host or peer id that happens to contain the text, and
|
|
1038
|
+
* the file should not argue one rule and apply another two lines later.
|
|
1039
|
+
*/
|
|
1040
|
+
export declare function holdsCircuit(node: CelloNode): boolean;
|
|
1041
|
+
/**
|
|
1042
|
+
* Wait for an abandoned candidate's outstanding work to settle, then stop it — but never wait
|
|
1043
|
+
* forever.
|
|
1044
|
+
*
|
|
1045
|
+
* ⚠️ **REVIEW MEDIUM-4 — `allSettled` ON A PROMISE THAT CANNOT SETTLE NEVER RUNS THE TEARDOWN.**
|
|
1046
|
+
* The teardown is chained onto the candidate's own work because `libp2p.stop()` returns immediately
|
|
1047
|
+
* unless the node is `started`, so stopping a node mid-flight stops nothing. But a relay that
|
|
1048
|
+
* accepts the stream and never answers leaves `listen()` pending forever — that is exactly the case
|
|
1049
|
+
* `msg-027`'s fixture models — and the chained stop would then never fire at all, leaving a live
|
|
1050
|
+
* node on the receiver's seed while the walk builds more nodes on that same seed.
|
|
1051
|
+
*
|
|
1052
|
+
* So: settle OR expire. The grace is generous relative to the ask's own deadline, because the point
|
|
1053
|
+
* is to bound the wait, not to race it — a node that finishes at the last moment must still be
|
|
1054
|
+
* stopped by its own settlement rather than while it is starting.
|
|
1055
|
+
*/
|
|
1056
|
+
export declare function stopWhenSettled(node: CelloNode, work: Array<Promise<unknown> | undefined>, graceMs: number): void;
|
|
1057
|
+
//# sourceMappingURL=session-node-types.d.ts.map
|