@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,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO Daemon — contacts tier metadata (DOD-TIER-1, address-book Step 1).
|
|
3
|
+
*
|
|
4
|
+
* `contacts` was re-keyed to the stable `agent_id` in daemon@0.0.45 (DOD-AGENT-ID-JOINKEY-1). This
|
|
5
|
+
* module lands the address-book's per-contact metadata ON that key: a reachability `tier`, the
|
|
6
|
+
* `provenance` of the relationship, the last self-declared name a peer offered (for Option-C rename
|
|
7
|
+
* detection, Step 3), and a per-contact `away_message` (Step 4). All four are pure ADD COLUMN — no
|
|
8
|
+
* table rebuild, no PK change — so, unlike the join-key migration, this one is simple and idempotent
|
|
9
|
+
* and never has to appear in that migration's pinned DDL. It runs AFTER `migrateSessionTablesToAgentId`.
|
|
10
|
+
*
|
|
11
|
+
* Design source: docs/planning/user-stories/m8c/2026-07-10_contact-address-book-design.md (§1).
|
|
12
|
+
*/
|
|
13
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
14
|
+
import type { Logger } from "./types.js";
|
|
15
|
+
/**
|
|
16
|
+
* The five reachability tiers, ordered so `>=` is meaningful (blocked < unknown < known < whitelisted
|
|
17
|
+
* < vip). Stored as the INTEGER `contacts.tier`. This const map is the SINGLE source of the numbers;
|
|
18
|
+
* no bare tier integer may appear at a call site (DOD-TIER-1 AC2).
|
|
19
|
+
*
|
|
20
|
+
* BLOCKED is a real, meaningful ZERO — see `normalizeTier` for why that matters.
|
|
21
|
+
*/
|
|
22
|
+
export declare const TIER: Readonly<{
|
|
23
|
+
readonly BLOCKED: 0;
|
|
24
|
+
readonly UNKNOWN: 1;
|
|
25
|
+
readonly KNOWN: 2;
|
|
26
|
+
readonly WHITELISTED: 3;
|
|
27
|
+
readonly VIP: 4;
|
|
28
|
+
}>;
|
|
29
|
+
export type TierName = keyof typeof TIER;
|
|
30
|
+
export type TierValue = (typeof TIER)[TierName];
|
|
31
|
+
/** True iff `n` is exactly one of the five defined tier integers (0..4). The validation gate for
|
|
32
|
+
* `cello_contact_set_tier` (Step 3) — an unknown value is refused, never coerced. */
|
|
33
|
+
export declare function isKnownTierValue(n: number): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The read-side default, and the single most safety-critical function in this unit.
|
|
36
|
+
*
|
|
37
|
+
* A contact's effective tier is UNKNOWN when there is NO row (undefined) OR when the row's `tier`
|
|
38
|
+
* column is NULL (a row that predates a tier being set, or a stray never-stamped row). Both collapse
|
|
39
|
+
* to UNKNOWN — the tighter default: a caller must never accidentally treat an unresolved contact as
|
|
40
|
+
* reachable.
|
|
41
|
+
*
|
|
42
|
+
* It is written with EXPLICIT null/undefined checks, never `tier || UNKNOWN`, for two reasons that
|
|
43
|
+
* are both live bugs otherwise:
|
|
44
|
+
* - `0 || 1 === 1`: a `|| UNKNOWN` would swallow BLOCKED(0) and silently un-block a blocked contact.
|
|
45
|
+
* - `null >= 0 === true`: a NULL reaching a `>=` bound check reads as "not blocked", and a NULL
|
|
46
|
+
* reaching a `grid[tier]` lookup is `grid[null]` → undefined → crash. Normalizing NULL→UNKNOWN
|
|
47
|
+
* here keeps every downstream comparison and lookup total.
|
|
48
|
+
*/
|
|
49
|
+
export declare function normalizeTier(tier: number | null | undefined): number;
|
|
50
|
+
/** DOD-TIER-2: the abuse bounds for one tier. INV-TIER-BOUND — every field is FINITE (no tier is
|
|
51
|
+
* unbounded; `vip` is a large but real number, never Infinity). Step 4 lets settings OVERRIDE these
|
|
52
|
+
* defaults, but a setting may only raise/lower within finite bounds, never remove one. */
|
|
53
|
+
export interface TierBound {
|
|
54
|
+
/** Max concurrent (active|interrupted) sessions this agent will hold from ONE sender at this tier. */
|
|
55
|
+
readonly maxSessionsPerSender: number;
|
|
56
|
+
/** Max cumulative RECEIVED bytes for a single session at this tier (anti-drip-feed). */
|
|
57
|
+
readonly maxBytesPerSession: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The hardcoded default bounds grid (DOD-TIER-2). One named map — the SINGLE source; call sites
|
|
61
|
+
* reference it via `tierBoundsFor`, never inline a number. Step 4 (DOD-TIER-BOUNDS-SETTINGS) makes
|
|
62
|
+
* these overridable per agent; until then they are the policy.
|
|
63
|
+
*
|
|
64
|
+
* INV-TIER-BOUND: a HIGHER tier only RAISES a bound — no tier removes one. `vip` is 50 sessions / 2 GiB,
|
|
65
|
+
* deliberately finite. `blocked` is 0/0, which is what makes DOD-TIER-3 fall out for free: a 0 session
|
|
66
|
+
* cap refuses a blocked sender through the SAME per-sender-cap path an over-cap unknown takes, with no
|
|
67
|
+
* separate branch and therefore no distinguishing oracle.
|
|
68
|
+
*/
|
|
69
|
+
export declare const DEFAULT_TIER_BOUNDS: Readonly<Record<number, TierBound>>;
|
|
70
|
+
/** The bounds for a tier, TOTAL: any input is normalized to a defined tier first, so the return is
|
|
71
|
+
* always a real `TierBound` — a corrupt/out-of-range tier gets UNKNOWN's bounds, never `undefined`
|
|
72
|
+
* (the `grid[99]` crash the whole tier design guards against). */
|
|
73
|
+
export declare function tierBoundsFor(tier: number | null | undefined): TierBound;
|
|
74
|
+
/**
|
|
75
|
+
* Idempotently add the tier-metadata columns to `contacts` and grandfather existing contacts.
|
|
76
|
+
*
|
|
77
|
+
* SQLite has no `ADD COLUMN IF NOT EXISTS`, so each ALTER is PRAGMA-guarded. Crucially the columns
|
|
78
|
+
* are added with NO DEFAULT: a `DEFAULT` would give every existing row a value the instant the column
|
|
79
|
+
* is created, so the grandfather backfill (`UPDATE … WHERE tier IS NULL`) would then match NOTHING —
|
|
80
|
+
* every auto-accepting contact would silently drop to UNKNOWN. No default → existing rows read NULL →
|
|
81
|
+
* the explicit backfill promotes them to WHITELISTED, preserving today's binary-whitelist behaviour
|
|
82
|
+
* (design §1). Silently revoking access people already rely on is a worse failure than grandfathering
|
|
83
|
+
* a permissive default for a handful of contacts they can list and demote at leisure.
|
|
84
|
+
*
|
|
85
|
+
* The grandfather is ONE-TIME: it runs only in the invocation that first adds the `tier` column. A
|
|
86
|
+
* NULL that appears later (a stray un-stamped row) is NOT promoted — it is read as UNKNOWN by
|
|
87
|
+
* `normalizeTier`, the tighter default. The promotion is tied to the column's birth, not to NULL-ness.
|
|
88
|
+
*/
|
|
89
|
+
export declare function migrateContactsAddTierMetadata(db: DaemonDatabase, logger: Logger): void;
|
|
90
|
+
//# sourceMappingURL=contacts-tier-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts-tier-migration.d.ts","sourceRoot":"","sources":["../src/contacts-tier-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;EAMN,CAAC;AAEZ,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,IAAI,CAAC;AACzC,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AAIhD;sFACsF;AACtF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQrE;AAED;;2FAE2F;AAC3F,MAAM,WAAW,SAAS;IACxB,sGAAsG;IACtG,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,wFAAwF;IACxF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAMlE,CAAC;AAEH;;mEAEmE;AACnE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAExE;AAeD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA8CvF"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO Daemon — contacts tier metadata (DOD-TIER-1, address-book Step 1).
|
|
3
|
+
*
|
|
4
|
+
* `contacts` was re-keyed to the stable `agent_id` in daemon@0.0.45 (DOD-AGENT-ID-JOINKEY-1). This
|
|
5
|
+
* module lands the address-book's per-contact metadata ON that key: a reachability `tier`, the
|
|
6
|
+
* `provenance` of the relationship, the last self-declared name a peer offered (for Option-C rename
|
|
7
|
+
* detection, Step 3), and a per-contact `away_message` (Step 4). All four are pure ADD COLUMN — no
|
|
8
|
+
* table rebuild, no PK change — so, unlike the join-key migration, this one is simple and idempotent
|
|
9
|
+
* and never has to appear in that migration's pinned DDL. It runs AFTER `migrateSessionTablesToAgentId`.
|
|
10
|
+
*
|
|
11
|
+
* Design source: docs/planning/user-stories/m8c/2026-07-10_contact-address-book-design.md (§1).
|
|
12
|
+
*/
|
|
13
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
14
|
+
/**
|
|
15
|
+
* The five reachability tiers, ordered so `>=` is meaningful (blocked < unknown < known < whitelisted
|
|
16
|
+
* < vip). Stored as the INTEGER `contacts.tier`. This const map is the SINGLE source of the numbers;
|
|
17
|
+
* no bare tier integer may appear at a call site (DOD-TIER-1 AC2).
|
|
18
|
+
*
|
|
19
|
+
* BLOCKED is a real, meaningful ZERO — see `normalizeTier` for why that matters.
|
|
20
|
+
*/
|
|
21
|
+
export const TIER = Object.freeze({
|
|
22
|
+
BLOCKED: 0,
|
|
23
|
+
UNKNOWN: 1,
|
|
24
|
+
KNOWN: 2,
|
|
25
|
+
WHITELISTED: 3,
|
|
26
|
+
VIP: 4,
|
|
27
|
+
});
|
|
28
|
+
const TIER_VALUES = Object.freeze(Object.values(TIER));
|
|
29
|
+
/** True iff `n` is exactly one of the five defined tier integers (0..4). The validation gate for
|
|
30
|
+
* `cello_contact_set_tier` (Step 3) — an unknown value is refused, never coerced. */
|
|
31
|
+
export function isKnownTierValue(n) {
|
|
32
|
+
return Number.isInteger(n) && TIER_VALUES.includes(n);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The read-side default, and the single most safety-critical function in this unit.
|
|
36
|
+
*
|
|
37
|
+
* A contact's effective tier is UNKNOWN when there is NO row (undefined) OR when the row's `tier`
|
|
38
|
+
* column is NULL (a row that predates a tier being set, or a stray never-stamped row). Both collapse
|
|
39
|
+
* to UNKNOWN — the tighter default: a caller must never accidentally treat an unresolved contact as
|
|
40
|
+
* reachable.
|
|
41
|
+
*
|
|
42
|
+
* It is written with EXPLICIT null/undefined checks, never `tier || UNKNOWN`, for two reasons that
|
|
43
|
+
* are both live bugs otherwise:
|
|
44
|
+
* - `0 || 1 === 1`: a `|| UNKNOWN` would swallow BLOCKED(0) and silently un-block a blocked contact.
|
|
45
|
+
* - `null >= 0 === true`: a NULL reaching a `>=` bound check reads as "not blocked", and a NULL
|
|
46
|
+
* reaching a `grid[tier]` lookup is `grid[null]` → undefined → crash. Normalizing NULL→UNKNOWN
|
|
47
|
+
* here keeps every downstream comparison and lookup total.
|
|
48
|
+
*/
|
|
49
|
+
export function normalizeTier(tier) {
|
|
50
|
+
if (tier === null || tier === undefined)
|
|
51
|
+
return TIER.UNKNOWN;
|
|
52
|
+
// TOTAL over ALL inputs: a stored value that is not one of the five defined tiers (a corrupt or
|
|
53
|
+
// future-version row) also collapses to UNKNOWN, so `getTier` is guaranteed to return a value in
|
|
54
|
+
// 0..4 and every downstream `grid[tier]` lookup / `>=` comparison is total. Without this, a corrupt
|
|
55
|
+
// `tier = 99` would sail through and become the `grid[99] → undefined` crash the bound grid fears.
|
|
56
|
+
if (!isKnownTierValue(tier))
|
|
57
|
+
return TIER.UNKNOWN;
|
|
58
|
+
return tier;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The hardcoded default bounds grid (DOD-TIER-2). One named map — the SINGLE source; call sites
|
|
62
|
+
* reference it via `tierBoundsFor`, never inline a number. Step 4 (DOD-TIER-BOUNDS-SETTINGS) makes
|
|
63
|
+
* these overridable per agent; until then they are the policy.
|
|
64
|
+
*
|
|
65
|
+
* INV-TIER-BOUND: a HIGHER tier only RAISES a bound — no tier removes one. `vip` is 50 sessions / 2 GiB,
|
|
66
|
+
* deliberately finite. `blocked` is 0/0, which is what makes DOD-TIER-3 fall out for free: a 0 session
|
|
67
|
+
* cap refuses a blocked sender through the SAME per-sender-cap path an over-cap unknown takes, with no
|
|
68
|
+
* separate branch and therefore no distinguishing oracle.
|
|
69
|
+
*/
|
|
70
|
+
export const DEFAULT_TIER_BOUNDS = Object.freeze({
|
|
71
|
+
[TIER.BLOCKED]: { maxSessionsPerSender: 0, maxBytesPerSession: 0 },
|
|
72
|
+
[TIER.UNKNOWN]: { maxSessionsPerSender: 3, maxBytesPerSession: 25 * 1024 * 1024 },
|
|
73
|
+
[TIER.KNOWN]: { maxSessionsPerSender: 5, maxBytesPerSession: 100 * 1024 * 1024 },
|
|
74
|
+
[TIER.WHITELISTED]: { maxSessionsPerSender: 20, maxBytesPerSession: 500 * 1024 * 1024 },
|
|
75
|
+
[TIER.VIP]: { maxSessionsPerSender: 50, maxBytesPerSession: 2 * 1024 * 1024 * 1024 },
|
|
76
|
+
});
|
|
77
|
+
/** The bounds for a tier, TOTAL: any input is normalized to a defined tier first, so the return is
|
|
78
|
+
* always a real `TierBound` — a corrupt/out-of-range tier gets UNKNOWN's bounds, never `undefined`
|
|
79
|
+
* (the `grid[99]` crash the whole tier design guards against). */
|
|
80
|
+
export function tierBoundsFor(tier) {
|
|
81
|
+
return DEFAULT_TIER_BOUNDS[normalizeTier(tier)];
|
|
82
|
+
}
|
|
83
|
+
const TIER_METADATA_COLUMNS = [
|
|
84
|
+
{ name: "tier", ddl: "tier INTEGER" },
|
|
85
|
+
{ name: "provenance", ddl: "provenance TEXT" },
|
|
86
|
+
{ name: "last_offered_moniker", ddl: "last_offered_moniker TEXT" },
|
|
87
|
+
{ name: "away_message", ddl: "away_message TEXT" },
|
|
88
|
+
];
|
|
89
|
+
/**
|
|
90
|
+
* Idempotently add the tier-metadata columns to `contacts` and grandfather existing contacts.
|
|
91
|
+
*
|
|
92
|
+
* SQLite has no `ADD COLUMN IF NOT EXISTS`, so each ALTER is PRAGMA-guarded. Crucially the columns
|
|
93
|
+
* are added with NO DEFAULT: a `DEFAULT` would give every existing row a value the instant the column
|
|
94
|
+
* is created, so the grandfather backfill (`UPDATE … WHERE tier IS NULL`) would then match NOTHING —
|
|
95
|
+
* every auto-accepting contact would silently drop to UNKNOWN. No default → existing rows read NULL →
|
|
96
|
+
* the explicit backfill promotes them to WHITELISTED, preserving today's binary-whitelist behaviour
|
|
97
|
+
* (design §1). Silently revoking access people already rely on is a worse failure than grandfathering
|
|
98
|
+
* a permissive default for a handful of contacts they can list and demote at leisure.
|
|
99
|
+
*
|
|
100
|
+
* The grandfather is ONE-TIME: it runs only in the invocation that first adds the `tier` column. A
|
|
101
|
+
* NULL that appears later (a stray un-stamped row) is NOT promoted — it is read as UNKNOWN by
|
|
102
|
+
* `normalizeTier`, the tighter default. The promotion is tied to the column's birth, not to NULL-ness.
|
|
103
|
+
*/
|
|
104
|
+
export function migrateContactsAddTierMetadata(db, logger) {
|
|
105
|
+
const existing = new Set(db.prepare("PRAGMA table_info(contacts)").all().map((c) => c.name));
|
|
106
|
+
const toAdd = TIER_METADATA_COLUMNS.filter((c) => !existing.has(c.name));
|
|
107
|
+
if (toAdd.length === 0)
|
|
108
|
+
return; // idempotent: every column already present → nothing to do
|
|
109
|
+
// The ADD COLUMNs and the grandfather backfill MUST commit atomically, in ONE transaction (SQLite
|
|
110
|
+
// DDL is transactional — the same reason the join-key migration uses one BEGIN…COMMIT). If a crash
|
|
111
|
+
// landed between the `tier` ALTER committing and the backfill, the next init would see the column
|
|
112
|
+
// exists, skip the one-time grandfather FOREVER, and silently demote every legacy contact to
|
|
113
|
+
// UNKNOWN — the exact "silently revoking access people already rely on" failure this file exists to
|
|
114
|
+
// avoid, with no log and no error. Wrapping both makes "column added" and "existing rows
|
|
115
|
+
// grandfathered" inseparable: a crash rolls back BOTH, and the clean re-run does the whole thing —
|
|
116
|
+
// which is what makes column-existence a VALID durability marker for the one-time gate.
|
|
117
|
+
const addsTier = toAdd.some((c) => c.name === "tier");
|
|
118
|
+
let grandfathered = 0;
|
|
119
|
+
db.exec("BEGIN");
|
|
120
|
+
try {
|
|
121
|
+
for (const col of toAdd)
|
|
122
|
+
db.exec(`ALTER TABLE contacts ADD COLUMN ${col.ddl}`);
|
|
123
|
+
// Grandfather EXISTING contacts to WHITELISTED — but ONLY on the migration that first adds `tier`
|
|
124
|
+
// (a one-time, column-birth event). A NULL written AFTER the column exists is never promoted here;
|
|
125
|
+
// it is a read-time UNKNOWN via normalizeTier, the tighter default.
|
|
126
|
+
if (addsTier) {
|
|
127
|
+
grandfathered = Number(db.prepare("UPDATE contacts SET tier = ? WHERE tier IS NULL").run(TIER.WHITELISTED).changes);
|
|
128
|
+
}
|
|
129
|
+
db.exec("COMMIT");
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
// SQLite may have already aborted the transaction; a failing ROLLBACK must not mask the real error.
|
|
133
|
+
try {
|
|
134
|
+
db.exec("ROLLBACK");
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
/* the failing statement may have already aborted the txn */
|
|
138
|
+
}
|
|
139
|
+
logger.error("contacts.tier.migration.failed", {
|
|
140
|
+
columns: toAdd.map((c) => c.name),
|
|
141
|
+
reason: extractErrorMessage(err),
|
|
142
|
+
});
|
|
143
|
+
throw err;
|
|
144
|
+
}
|
|
145
|
+
logger.info("contacts.tier.columns.added", { columns: toAdd.map((c) => c.name) });
|
|
146
|
+
if (grandfathered > 0) {
|
|
147
|
+
logger.info("contacts.tier.grandfathered", { count: grandfathered, tier: TIER.WHITELISTED });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=contacts-tier-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts-tier-migration.js","sourceRoot":"","sources":["../src/contacts-tier-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,WAAW,EAAE,CAAC;IACd,GAAG,EAAE,CAAC;CACE,CAAC,CAAC;AAKZ,MAAM,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAE1E;sFACsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAAC,IAA+B;IAC3D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IAC7D,gGAAgG;IAChG,iGAAiG;IACjG,oGAAoG;IACpG,mGAAmG;IACnG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwC,MAAM,CAAC,MAAM,CAAC;IACpF,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE;IAClE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,kBAAkB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE;IACjF,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,kBAAkB,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE;IAChF,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,kBAAkB,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE;IACvF,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE;CACrF,CAAC,CAAC;AAEH;;mEAEmE;AACnE,MAAM,UAAU,aAAa,CAAC,IAA+B;IAC3D,OAAO,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAQD,MAAM,qBAAqB,GAA0B;IACnD,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE;IACrC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAAE;IAC9C,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,2BAA2B,EAAE;IAClE,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,mBAAmB,EAAE;CACnD,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAAkB,EAAE,MAAc;IAC/E,MAAM,QAAQ,GAAG,IAAI,GAAG,CACrB,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GAAG,EAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAChG,CAAC;IAEF,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,2DAA2D;IAE3F,kGAAkG;IAClG,mGAAmG;IACnG,kGAAkG;IAClG,6FAA6F;IAC7F,oGAAoG;IACpG,yFAAyF;IACzF,mGAAmG;IACnG,wFAAwF;IACxF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACtD,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,KAAK;YAAE,EAAE,CAAC,IAAI,CAAC,mCAAmC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/E,kGAAkG;QAClG,mGAAmG;QACnG,oEAAoE;QACpE,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;QACtH,CAAC;QACD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oGAAoG;QACpG,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;YAC7C,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjC,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHY A SESSION HAS NO AGREED CONTENT KEY — `DOD-M15-EPHEMERAL-AUTH-1` (007-CRYPTO).
|
|
3
|
+
*
|
|
4
|
+
* ─── The rule, and it is deliberately absolute ─────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* **A live message body is encrypted under the agreed session key, or it is not sent.** There is no
|
|
7
|
+
* degraded mode, no "unencrypted but visibly so", and no negotiation.
|
|
8
|
+
*
|
|
9
|
+
* That is not strictness for its own sake — it is what removes an entire class of defect. A
|
|
10
|
+
* fallback to plaintext is a thing an attacker steers a session into: strip the key frame, and a
|
|
11
|
+
* system that "carries on, visibly degraded" hands over exactly the plaintext the attacker wanted,
|
|
12
|
+
* while the operator sees a warning they have learned to scroll past. The salt can degrade because
|
|
13
|
+
* a missing salt costs a correlation property; a missing KEY costs the message.
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ AND THERE IS NO COMPATIBILITY CASE TO SERVE. CELLO is pre-launch with no external installs, so
|
|
16
|
+
* "the counterparty is on a build that predates this" is not a state anything is in. Every reason
|
|
17
|
+
* below is a FAULT — local, transient, or a counterparty that did not complete an exchange it is
|
|
18
|
+
* running the code for. None of them is an accepted steady state, and none of them may be described
|
|
19
|
+
* to an operator as one.
|
|
20
|
+
*
|
|
21
|
+
* ─── Not the same question as the salt ─────────────────────────────────────────────────────────
|
|
22
|
+
*
|
|
23
|
+
* `content_hashes_salted` is about a relay CONFIRMING a guess at a stored hash. This is about a
|
|
24
|
+
* relay READING the message. A session can be salted and unencrypted; it cannot send while
|
|
25
|
+
* unencrypted.
|
|
26
|
+
*
|
|
27
|
+
* ─── Why a closed set and a total map ──────────────────────────────────────────────────────────
|
|
28
|
+
*
|
|
29
|
+
* Copied from `refusal-reasons.ts`, which exists because a free-form `reason: string` let a new code
|
|
30
|
+
* slip past every test in its own guard file. A `Record` over the union means a reason cannot be
|
|
31
|
+
* added without something for the reader to do about it.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* The `content_encryption` marker on a `content_frame`, naming the scheme its body is under.
|
|
35
|
+
*
|
|
36
|
+
* On the WIRE rather than inferred, so a receiver never has to guess a layout from a length — and
|
|
37
|
+
* ABSENT is refused rather than read as plaintext. There is no unencrypted sender to accommodate, so
|
|
38
|
+
* a missing marker is not "an old peer", it is a frame something rewrote.
|
|
39
|
+
*/
|
|
40
|
+
export declare const SESSION_CONTENT_ENCRYPTION_V1 = "session-aes-256-gcm-v1";
|
|
41
|
+
export declare const CONTENT_ENCRYPTION_REASONS: {
|
|
42
|
+
/**
|
|
43
|
+
* The exchange has not finished yet. Transient, and the ordinary state for the instant between a
|
|
44
|
+
* session opening and its first connect completing.
|
|
45
|
+
*/
|
|
46
|
+
readonly NOT_YET_AGREED: "not_yet_agreed";
|
|
47
|
+
/**
|
|
48
|
+
* THIS machine has no identity key to sign its half with, so it cannot take part at all.
|
|
49
|
+
*
|
|
50
|
+
* Local setup fault — a signing-only or threshold provider, or an agent loaded without one. Named
|
|
51
|
+
* apart from the peer cases because "we could not sign" and "they did not answer" send the
|
|
52
|
+
* operator to opposite machines.
|
|
53
|
+
*/
|
|
54
|
+
readonly NO_LOCAL_IDENTITY: "no_local_identity";
|
|
55
|
+
/** THIS side's half never left the machine. Local and transient; the next connect re-announces. */
|
|
56
|
+
readonly OUR_ANNOUNCE_FAILED: "our_announce_failed";
|
|
57
|
+
/**
|
|
58
|
+
* TERMINAL. The peer's key could not be tied to them and the session was stopped.
|
|
59
|
+
*
|
|
60
|
+
* ⚠️ THIS MUST SURVIVE THE TEARDOWN THAT FOLLOWS IT — review F2. The freeze destroys the session's
|
|
61
|
+
* key material, and clearing the reason with it left the listing recomputing `NOT_YET_AGREED`, so
|
|
62
|
+
* the one detection in this unit that means *someone may be substituting keys on your connection*
|
|
63
|
+
* reached the agent as "still agreeing, please wait". A security refusal that reads as a
|
|
64
|
+
* reassurance is worse than silence.
|
|
65
|
+
*/
|
|
66
|
+
readonly KEY_REFUSED: "key_refused";
|
|
67
|
+
/**
|
|
68
|
+
* The counterparty never sent their half.
|
|
69
|
+
*
|
|
70
|
+
* NOT "they are on an old build" — they are running this code. Something between the two of you
|
|
71
|
+
* dropped the frame, or their daemon is not answering.
|
|
72
|
+
*/
|
|
73
|
+
readonly PEER_SILENT: "peer_silent";
|
|
74
|
+
};
|
|
75
|
+
export type ContentEncryptionReason = (typeof CONTENT_ENCRYPTION_REASONS)[keyof typeof CONTENT_ENCRYPTION_REASONS];
|
|
76
|
+
/**
|
|
77
|
+
* What the operator should DO. TOTAL over the union by construction.
|
|
78
|
+
*
|
|
79
|
+
* ⚠️ EVERY ENTRY NAMES A VERB THE READER CAN PERFORM, and none of them says "this is expected" —
|
|
80
|
+
* because none of these is. An affordance that resolves to nothing is worse than none, and a
|
|
81
|
+
* reassurance attached to a fault is worse than both.
|
|
82
|
+
*/
|
|
83
|
+
export declare const CONTENT_ENCRYPTION_GUIDANCE: Record<ContentEncryptionReason, string>;
|
|
84
|
+
/**
|
|
85
|
+
* ⚠️ **THE SAME REASONS, TOLD TO THE OTHER DIRECTION** — `029c` review F6.
|
|
86
|
+
*
|
|
87
|
+
* `CONTENT_ENCRYPTION_GUIDANCE` above is written for the SEND path: it explains what became of a
|
|
88
|
+
* message THIS operator tried to send. The inbound refusal (`no_session_key`) was reusing it
|
|
89
|
+
* verbatim, so an operator who could not open an INCOMING message read advice about their own
|
|
90
|
+
* outbound mail — *"A message sent before it completes … goes to your counterparty's relay
|
|
91
|
+
* mailbox"* — two directions and two mailboxes in one paragraph.
|
|
92
|
+
*
|
|
93
|
+
* The CAUSE is identical, so the reason set is shared; only the consequence differs, so only the
|
|
94
|
+
* prose is. Total over the union for the same reason the other map is: a new reason cannot be added
|
|
95
|
+
* without deciding what it means to the receiving side.
|
|
96
|
+
*/
|
|
97
|
+
export declare const CONTENT_ENCRYPTION_INBOUND_GUIDANCE: Record<ContentEncryptionReason, string>;
|
|
98
|
+
/**
|
|
99
|
+
* Render a reason for an agent.
|
|
100
|
+
*
|
|
101
|
+
* ⚠️ NO UNKNOWN-REASON FALLBACK, deliberately. The value is produced and consumed in one process
|
|
102
|
+
* from the closed set above — there is no column it is read back from and no other build writing
|
|
103
|
+
* one, so a "reason this version does not recognise" is a state nothing can be in. An earlier cut
|
|
104
|
+
* carried that branch anyway and described the value as coming off a database row, which was simply
|
|
105
|
+
* untrue. Unreachable defensive code that states a false provenance is worse than no code: it reads
|
|
106
|
+
* as a considered case and it is scaffolding for a world that does not exist.
|
|
107
|
+
*
|
|
108
|
+
* The map is TOTAL over the union, so the type is the check.
|
|
109
|
+
*/
|
|
110
|
+
export declare function contentEncryptionGuidanceFor(reason: ContentEncryptionReason): string;
|
|
111
|
+
//# sourceMappingURL=content-encryption-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-encryption-status.d.ts","sourceRoot":"","sources":["../src/content-encryption-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AAEtE,eAAO,MAAM,0BAA0B;IACrC;;;OAGG;;IAEH;;;;;;OAMG;;IAEH,mGAAmG;;IAEnG;;;;;;;;OAQG;;IAEH;;;;;OAKG;;CAEK,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,OAAO,0BAA0B,CAAC,CAAC;AAE/E;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,uBAAuB,EAAE,MAAM,CA6B/E,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mCAAmC,EAAE,MAAM,CAAC,uBAAuB,EAAE,MAAM,CA2BvF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAEpF"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHY A SESSION HAS NO AGREED CONTENT KEY — `DOD-M15-EPHEMERAL-AUTH-1` (007-CRYPTO).
|
|
3
|
+
*
|
|
4
|
+
* ─── The rule, and it is deliberately absolute ─────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* **A live message body is encrypted under the agreed session key, or it is not sent.** There is no
|
|
7
|
+
* degraded mode, no "unencrypted but visibly so", and no negotiation.
|
|
8
|
+
*
|
|
9
|
+
* That is not strictness for its own sake — it is what removes an entire class of defect. A
|
|
10
|
+
* fallback to plaintext is a thing an attacker steers a session into: strip the key frame, and a
|
|
11
|
+
* system that "carries on, visibly degraded" hands over exactly the plaintext the attacker wanted,
|
|
12
|
+
* while the operator sees a warning they have learned to scroll past. The salt can degrade because
|
|
13
|
+
* a missing salt costs a correlation property; a missing KEY costs the message.
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ AND THERE IS NO COMPATIBILITY CASE TO SERVE. CELLO is pre-launch with no external installs, so
|
|
16
|
+
* "the counterparty is on a build that predates this" is not a state anything is in. Every reason
|
|
17
|
+
* below is a FAULT — local, transient, or a counterparty that did not complete an exchange it is
|
|
18
|
+
* running the code for. None of them is an accepted steady state, and none of them may be described
|
|
19
|
+
* to an operator as one.
|
|
20
|
+
*
|
|
21
|
+
* ─── Not the same question as the salt ─────────────────────────────────────────────────────────
|
|
22
|
+
*
|
|
23
|
+
* `content_hashes_salted` is about a relay CONFIRMING a guess at a stored hash. This is about a
|
|
24
|
+
* relay READING the message. A session can be salted and unencrypted; it cannot send while
|
|
25
|
+
* unencrypted.
|
|
26
|
+
*
|
|
27
|
+
* ─── Why a closed set and a total map ──────────────────────────────────────────────────────────
|
|
28
|
+
*
|
|
29
|
+
* Copied from `refusal-reasons.ts`, which exists because a free-form `reason: string` let a new code
|
|
30
|
+
* slip past every test in its own guard file. A `Record` over the union means a reason cannot be
|
|
31
|
+
* added without something for the reader to do about it.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* The `content_encryption` marker on a `content_frame`, naming the scheme its body is under.
|
|
35
|
+
*
|
|
36
|
+
* On the WIRE rather than inferred, so a receiver never has to guess a layout from a length — and
|
|
37
|
+
* ABSENT is refused rather than read as plaintext. There is no unencrypted sender to accommodate, so
|
|
38
|
+
* a missing marker is not "an old peer", it is a frame something rewrote.
|
|
39
|
+
*/
|
|
40
|
+
export const SESSION_CONTENT_ENCRYPTION_V1 = "session-aes-256-gcm-v1";
|
|
41
|
+
export const CONTENT_ENCRYPTION_REASONS = {
|
|
42
|
+
/**
|
|
43
|
+
* The exchange has not finished yet. Transient, and the ordinary state for the instant between a
|
|
44
|
+
* session opening and its first connect completing.
|
|
45
|
+
*/
|
|
46
|
+
NOT_YET_AGREED: "not_yet_agreed",
|
|
47
|
+
/**
|
|
48
|
+
* THIS machine has no identity key to sign its half with, so it cannot take part at all.
|
|
49
|
+
*
|
|
50
|
+
* Local setup fault — a signing-only or threshold provider, or an agent loaded without one. Named
|
|
51
|
+
* apart from the peer cases because "we could not sign" and "they did not answer" send the
|
|
52
|
+
* operator to opposite machines.
|
|
53
|
+
*/
|
|
54
|
+
NO_LOCAL_IDENTITY: "no_local_identity",
|
|
55
|
+
/** THIS side's half never left the machine. Local and transient; the next connect re-announces. */
|
|
56
|
+
OUR_ANNOUNCE_FAILED: "our_announce_failed",
|
|
57
|
+
/**
|
|
58
|
+
* TERMINAL. The peer's key could not be tied to them and the session was stopped.
|
|
59
|
+
*
|
|
60
|
+
* ⚠️ THIS MUST SURVIVE THE TEARDOWN THAT FOLLOWS IT — review F2. The freeze destroys the session's
|
|
61
|
+
* key material, and clearing the reason with it left the listing recomputing `NOT_YET_AGREED`, so
|
|
62
|
+
* the one detection in this unit that means *someone may be substituting keys on your connection*
|
|
63
|
+
* reached the agent as "still agreeing, please wait". A security refusal that reads as a
|
|
64
|
+
* reassurance is worse than silence.
|
|
65
|
+
*/
|
|
66
|
+
KEY_REFUSED: "key_refused",
|
|
67
|
+
/**
|
|
68
|
+
* The counterparty never sent their half.
|
|
69
|
+
*
|
|
70
|
+
* NOT "they are on an old build" — they are running this code. Something between the two of you
|
|
71
|
+
* dropped the frame, or their daemon is not answering.
|
|
72
|
+
*/
|
|
73
|
+
PEER_SILENT: "peer_silent",
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* What the operator should DO. TOTAL over the union by construction.
|
|
77
|
+
*
|
|
78
|
+
* ⚠️ EVERY ENTRY NAMES A VERB THE READER CAN PERFORM, and none of them says "this is expected" —
|
|
79
|
+
* because none of these is. An affordance that resolves to nothing is worse than none, and a
|
|
80
|
+
* reassurance attached to a fault is worse than both.
|
|
81
|
+
*/
|
|
82
|
+
export const CONTENT_ENCRYPTION_GUIDANCE = {
|
|
83
|
+
[CONTENT_ENCRYPTION_REASONS.NOT_YET_AGREED]: "This session has not finished agreeing its encryption key with your counterparty, which happens " +
|
|
84
|
+
"as soon as you are both connected. A message sent before it completes is NOT held and is NOT " +
|
|
85
|
+
"sent in the open: it goes to your counterparty's relay mailbox instead, encrypted to their " +
|
|
86
|
+
"long-term key, and they receive it when they next collect. It arrives — it just takes the slow " +
|
|
87
|
+
"route, and that copy does not have the forward secrecy the direct path gives you. If this " +
|
|
88
|
+
"persists, your counterparty is not reachable right now.",
|
|
89
|
+
[CONTENT_ENCRYPTION_REASONS.NO_LOCAL_IDENTITY]: "THIS machine has no identity key available for this agent, so it cannot sign its half of the " +
|
|
90
|
+
"session encryption key — and every session it opens has the same problem. Your counterparty did " +
|
|
91
|
+
"nothing and does not need to change anything. Check that this agent was loaded with its identity " +
|
|
92
|
+
"key, then start a new session.",
|
|
93
|
+
[CONTENT_ENCRYPTION_REASONS.OUR_ANNOUNCE_FAILED]: "THIS side could not send its half of the session encryption key — the frame never left this " +
|
|
94
|
+
"machine, so your counterparty was never asked. Do not raise it with them. Look for " +
|
|
95
|
+
"session.key.announce.failed immediately above this line for the connection error; most often the " +
|
|
96
|
+
"direct link dropped between connecting and sending. It re-announces on the next connect.",
|
|
97
|
+
[CONTENT_ENCRYPTION_REASONS.KEY_REFUSED]: "STOPPED ON PURPOSE. The session encryption key your counterparty sent could not be tied to " +
|
|
98
|
+
"them, so this session was stopped rather than carried on in the open. The ordinary cause is a " +
|
|
99
|
+
"build mismatch. The one that matters is something between you substituting its own key so it " +
|
|
100
|
+
"can read what you send — which is exactly what this check exists to catch. Confirm with your " +
|
|
101
|
+
"counterparty OUT OF BAND, not over CELLO, before opening another session with them.",
|
|
102
|
+
[CONTENT_ENCRYPTION_REASONS.PEER_SILENT]: "Your counterparty never sent their half of the session encryption key. They are running the same " +
|
|
103
|
+
"protocol, so this is not a version difference — either the frame was dropped between you, or " +
|
|
104
|
+
"their daemon is not answering. Check they are online, then start a new session. Nothing was sent " +
|
|
105
|
+
"in the open in the meantime.",
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* ⚠️ **THE SAME REASONS, TOLD TO THE OTHER DIRECTION** — `029c` review F6.
|
|
109
|
+
*
|
|
110
|
+
* `CONTENT_ENCRYPTION_GUIDANCE` above is written for the SEND path: it explains what became of a
|
|
111
|
+
* message THIS operator tried to send. The inbound refusal (`no_session_key`) was reusing it
|
|
112
|
+
* verbatim, so an operator who could not open an INCOMING message read advice about their own
|
|
113
|
+
* outbound mail — *"A message sent before it completes … goes to your counterparty's relay
|
|
114
|
+
* mailbox"* — two directions and two mailboxes in one paragraph.
|
|
115
|
+
*
|
|
116
|
+
* The CAUSE is identical, so the reason set is shared; only the consequence differs, so only the
|
|
117
|
+
* prose is. Total over the union for the same reason the other map is: a new reason cannot be added
|
|
118
|
+
* without deciding what it means to the receiving side.
|
|
119
|
+
*/
|
|
120
|
+
export const CONTENT_ENCRYPTION_INBOUND_GUIDANCE = {
|
|
121
|
+
[CONTENT_ENCRYPTION_REASONS.NOT_YET_AGREED]: "This conversation had not finished agreeing its encryption key when their message arrived, " +
|
|
122
|
+
"which normally completes within a second of you both being connected. Nothing is wrong with " +
|
|
123
|
+
"their message or their build. If it keeps happening, one of you is not staying connected long " +
|
|
124
|
+
"enough for the exchange to finish.",
|
|
125
|
+
[CONTENT_ENCRYPTION_REASONS.NO_LOCAL_IDENTITY]: "THIS machine has no identity key available for this agent, so it cannot take part in the " +
|
|
126
|
+
"encryption exchange at all — and every conversation it opens has the same problem. Your " +
|
|
127
|
+
"counterparty did nothing and does not need to change anything. Check that this agent was " +
|
|
128
|
+
"loaded with its identity key, then start a new conversation.",
|
|
129
|
+
[CONTENT_ENCRYPTION_REASONS.OUR_ANNOUNCE_FAILED]: "THIS side never sent its half of the encryption key, so your counterparty could not finish the " +
|
|
130
|
+
"exchange and you cannot open what they sent. The fault is local — do not raise it with them. " +
|
|
131
|
+
"Look for session.key.announce.failed for the connection error; it re-announces on the next " +
|
|
132
|
+
"connect, so a new conversation usually clears it.",
|
|
133
|
+
[CONTENT_ENCRYPTION_REASONS.KEY_REFUSED]: "STOPPED ON PURPOSE. The encryption key your counterparty sent could not be tied to them, so " +
|
|
134
|
+
"this conversation was stopped rather than carried on in the open — which is why their message " +
|
|
135
|
+
"cannot be opened now. The ordinary cause is a build mismatch. The one that matters is " +
|
|
136
|
+
"something between you substituting its own key so it can read what you exchange. Confirm with " +
|
|
137
|
+
"them OUT OF BAND, not over CELLO, before opening another conversation.",
|
|
138
|
+
[CONTENT_ENCRYPTION_REASONS.PEER_SILENT]: "Your counterparty never sent their half of the encryption key, so there is nothing here to " +
|
|
139
|
+
"open their message with. They are running the same protocol, so this is not a version " +
|
|
140
|
+
"difference — either the frame was dropped between you, or their daemon is not answering. " +
|
|
141
|
+
"Check they are online, then start a new conversation.",
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Render a reason for an agent.
|
|
145
|
+
*
|
|
146
|
+
* ⚠️ NO UNKNOWN-REASON FALLBACK, deliberately. The value is produced and consumed in one process
|
|
147
|
+
* from the closed set above — there is no column it is read back from and no other build writing
|
|
148
|
+
* one, so a "reason this version does not recognise" is a state nothing can be in. An earlier cut
|
|
149
|
+
* carried that branch anyway and described the value as coming off a database row, which was simply
|
|
150
|
+
* untrue. Unreachable defensive code that states a false provenance is worse than no code: it reads
|
|
151
|
+
* as a considered case and it is scaffolding for a world that does not exist.
|
|
152
|
+
*
|
|
153
|
+
* The map is TOTAL over the union, so the type is the check.
|
|
154
|
+
*/
|
|
155
|
+
export function contentEncryptionGuidanceFor(reason) {
|
|
156
|
+
return CONTENT_ENCRYPTION_GUIDANCE[reason];
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=content-encryption-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-encryption-status.js","sourceRoot":"","sources":["../src/content-encryption-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,wBAAwB,CAAC;AAEtE,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC;;;OAGG;IACH,cAAc,EAAE,gBAAgB;IAChC;;;;;;OAMG;IACH,iBAAiB,EAAE,mBAAmB;IACtC,mGAAmG;IACnG,mBAAmB,EAAE,qBAAqB;IAC1C;;;;;;;;OAQG;IACH,WAAW,EAAE,aAAa;IAC1B;;;;;OAKG;IACH,WAAW,EAAE,aAAa;CAClB,CAAC;AAKX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAA4C;IAClF,CAAC,0BAA0B,CAAC,cAAc,CAAC,EACzC,kGAAkG;QAClG,+FAA+F;QAC/F,6FAA6F;QAC7F,iGAAiG;QACjG,4FAA4F;QAC5F,yDAAyD;IAC3D,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,EAC5C,+FAA+F;QAC/F,kGAAkG;QAClG,mGAAmG;QACnG,gCAAgC;IAClC,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,EAC9C,8FAA8F;QAC9F,qFAAqF;QACrF,mGAAmG;QACnG,0FAA0F;IAC5F,CAAC,0BAA0B,CAAC,WAAW,CAAC,EACtC,6FAA6F;QAC7F,gGAAgG;QAChG,+FAA+F;QAC/F,+FAA+F;QAC/F,qFAAqF;IACvF,CAAC,0BAA0B,CAAC,WAAW,CAAC,EACtC,mGAAmG;QACnG,+FAA+F;QAC/F,mGAAmG;QACnG,8BAA8B;CACjC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAA4C;IAC1F,CAAC,0BAA0B,CAAC,cAAc,CAAC,EACzC,6FAA6F;QAC7F,8FAA8F;QAC9F,gGAAgG;QAChG,oCAAoC;IACtC,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,EAC5C,2FAA2F;QAC3F,0FAA0F;QAC1F,2FAA2F;QAC3F,8DAA8D;IAChE,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,EAC9C,iGAAiG;QACjG,+FAA+F;QAC/F,6FAA6F;QAC7F,mDAAmD;IACrD,CAAC,0BAA0B,CAAC,WAAW,CAAC,EACtC,8FAA8F;QAC9F,gGAAgG;QAChG,wFAAwF;QACxF,gGAAgG;QAChG,wEAAwE;IAC1E,CAAC,0BAA0B,CAAC,WAAW,CAAC,EACtC,6FAA6F;QAC7F,wFAAwF;QACxF,2FAA2F;QAC3F,uDAAuD;CAC1D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAA+B;IAC1E,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { CelloNode } from "@cello-protocol/transport";
|
|
2
|
+
import type { KeyProvider } from "@cello-protocol/crypto";
|
|
3
|
+
import type { Logger } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* DOD-M15-RELAYAUTH-1 review HIGH-3: the relay REFUSED to release parked content, as distinct from
|
|
6
|
+
* having none. Thrown rather than returned so it cannot be mistaken for an empty result — the whole
|
|
7
|
+
* defect was a refusal flattening into `[]`, which reads to an operator as "nothing was waiting".
|
|
8
|
+
*/
|
|
9
|
+
export declare class ContentParkRefusedError extends Error {
|
|
10
|
+
readonly reason: string;
|
|
11
|
+
constructor(reason: string);
|
|
12
|
+
}
|
|
13
|
+
/** One relay address `#open` tried to dial, and why that dial failed. */
|
|
14
|
+
export interface ParkDialFailure {
|
|
15
|
+
addr: string;
|
|
16
|
+
error: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* DOD-M15-PARKCONN-1 — the content-park stream could not be opened, WITH the reason there was
|
|
20
|
+
* nothing to open it on.
|
|
21
|
+
*
|
|
22
|
+
* `#open` dials before it opens a stream, and it used to discard every dial failure in an empty
|
|
23
|
+
* `catch`. That catch was the only place the reason for a missing connection ever existed, so an
|
|
24
|
+
* operator messaging an offline counterparty was told `No open connection to peer 12D3Koo…` — that
|
|
25
|
+
* there was no connection, never why — and the same action parked or failed with nothing to tell
|
|
26
|
+
* the two apart.
|
|
27
|
+
*
|
|
28
|
+
* A real `Error` (so `instanceof Error` and `extractErrorMessage` both work on it — the transport
|
|
29
|
+
* throws plain object literals, which stringify to "[object Object]") carrying the transport's own
|
|
30
|
+
* `reason` under the same field name the literal used, so existing `err.reason` readers are
|
|
31
|
+
* unaffected.
|
|
32
|
+
*/
|
|
33
|
+
export declare class ContentParkUnreachableError extends Error {
|
|
34
|
+
readonly reason: string;
|
|
35
|
+
readonly relayPeerId: string;
|
|
36
|
+
readonly dialFailures: readonly ParkDialFailure[];
|
|
37
|
+
constructor(args: {
|
|
38
|
+
reason: string;
|
|
39
|
+
relayPeerId: string;
|
|
40
|
+
dialFailures: readonly ParkDialFailure[];
|
|
41
|
+
cause: string;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/** A single parked entry returned by pull(). */
|
|
45
|
+
export interface ParkedEntry {
|
|
46
|
+
contentHashHex: string;
|
|
47
|
+
sessionIdHex: string;
|
|
48
|
+
ciphertext: Uint8Array;
|
|
49
|
+
}
|
|
50
|
+
export interface ContentParkClientOptions {
|
|
51
|
+
/** Relay libp2p peer id (12D3Koo…) — from the session assignment's relay endpoint. */
|
|
52
|
+
relayPeerId: string;
|
|
53
|
+
/** Relay multiaddrs to dial. */
|
|
54
|
+
relayAddrs: string[];
|
|
55
|
+
logger: Logger;
|
|
56
|
+
}
|
|
57
|
+
export declare class ContentParkClient {
|
|
58
|
+
#private;
|
|
59
|
+
constructor(opts: ContentParkClientOptions);
|
|
60
|
+
/**
|
|
61
|
+
* Deposit ciphertext into the recipient's relay mailbox (sender side). Deposit is OPEN by
|
|
62
|
+
* design — the blob is E2E-encrypted to the recipient, so an unauthenticated deposit cannot
|
|
63
|
+
* leak plaintext.
|
|
64
|
+
*/
|
|
65
|
+
deposit(node: CelloNode, args: {
|
|
66
|
+
recipientPubkey: Uint8Array;
|
|
67
|
+
contentHash: Uint8Array;
|
|
68
|
+
sessionId: Uint8Array;
|
|
69
|
+
ciphertext: Uint8Array;
|
|
70
|
+
}): Promise<{
|
|
71
|
+
ok: boolean;
|
|
72
|
+
reason?: string;
|
|
73
|
+
retryAfterMs?: number;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* Pull the recipient's parked entries (recipient side). Runs the relay's auth challenge:
|
|
77
|
+
* sign buildContentParkAuthMsg(nonce, recipientPubkey) with the recipient's K_local to prove
|
|
78
|
+
* ownership before the relay releases anything.
|
|
79
|
+
*/
|
|
80
|
+
pull(node: CelloNode, recipientPubkey: Uint8Array, signer: KeyProvider): Promise<ParkedEntry[]>;
|
|
81
|
+
/**
|
|
82
|
+
* Confirm-delete one parked entry (recipient side). The relay is delete-on-CONFIRM, not
|
|
83
|
+
* delete-on-pull, so without this the mailbox never drains and every reconnect re-pulls the whole
|
|
84
|
+
* history. Mirrors pull's I1 auth (sign buildContentParkAuthMsg(nonce, recipientPubkey)). Called
|
|
85
|
+
* after a parked entry is durably ingested. Best-effort: a failed confirm leaves the entry (it will
|
|
86
|
+
* be re-pulled + deduped next time, and the relay TTL eventually evicts it) — never loses content.
|
|
87
|
+
*/
|
|
88
|
+
confirm(node: CelloNode, recipientPubkey: Uint8Array, contentHash: Uint8Array, signer: KeyProvider): Promise<boolean>;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=content-park-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-park-client.d.ts","sourceRoot":"","sources":["../src/content-park-client.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAiBzC;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM;CAK3B;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;gBAEtC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAUnH;AAED,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAiB;;gBAKhB,IAAI,EAAE,wBAAwB;IAM1C;;;;OAIG;IACG,OAAO,CACX,IAAI,EAAE,SAAS,EACf,IAAI,EAAE;QAAE,eAAe,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,GAC5G,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA8CnE;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAiFrG;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CA2I5H"}
|