@cello-protocol/daemon 0.0.227 → 0.0.229
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-admin-handlers.d.ts +56 -0
- package/dist/agent-admin-handlers.d.ts.map +1 -0
- package/dist/agent-admin-handlers.js +73 -0
- package/dist/agent-admin-handlers.js.map +1 -0
- package/dist/agent-handlers.d.ts +72 -0
- package/dist/agent-handlers.d.ts.map +1 -0
- package/dist/agent-handlers.js +604 -0
- package/dist/agent-handlers.js.map +1 -0
- package/dist/agent-id-migration.d.ts +70 -0
- package/dist/agent-id-migration.d.ts.map +1 -0
- package/dist/agent-id-migration.js +468 -0
- package/dist/agent-id-migration.js.map +1 -0
- package/dist/agent-loader.d.ts +37 -0
- package/dist/agent-loader.d.ts.map +1 -0
- package/dist/agent-loader.js +37 -0
- package/dist/agent-loader.js.map +1 -0
- package/dist/agent-selection-root.d.ts +29 -0
- package/dist/agent-selection-root.d.ts.map +1 -0
- package/dist/agent-selection-root.js +126 -0
- package/dist/agent-selection-root.js.map +1 -0
- package/dist/agent-selection.d.ts +73 -0
- package/dist/agent-selection.d.ts.map +1 -0
- package/dist/agent-selection.js +80 -0
- package/dist/agent-selection.js.map +1 -0
- package/dist/agent-settings-keys.d.ts +52 -0
- package/dist/agent-settings-keys.d.ts.map +1 -0
- package/dist/agent-settings-keys.js +114 -0
- package/dist/agent-settings-keys.js.map +1 -0
- package/dist/agent-state.d.ts +67 -0
- package/dist/agent-state.d.ts.map +1 -0
- package/dist/agent-state.js +66 -0
- package/dist/agent-state.js.map +1 -0
- package/dist/assignment-verify.d.ts +90 -0
- package/dist/assignment-verify.d.ts.map +1 -0
- package/dist/assignment-verify.js +301 -0
- package/dist/assignment-verify.js.map +1 -0
- package/dist/attendance-wiring.d.ts +23 -0
- package/dist/attendance-wiring.d.ts.map +1 -0
- package/dist/attendance-wiring.js +248 -0
- package/dist/attendance-wiring.js.map +1 -0
- package/dist/attestation-body.d.ts +47 -0
- package/dist/attestation-body.d.ts.map +1 -0
- package/dist/attestation-body.js +71 -0
- package/dist/attestation-body.js.map +1 -0
- package/dist/authorship-verification.d.ts +91 -0
- package/dist/authorship-verification.d.ts.map +1 -0
- package/dist/authorship-verification.js +532 -0
- package/dist/authorship-verification.js.map +1 -0
- package/dist/away-detection.d.ts +139 -0
- package/dist/away-detection.d.ts.map +1 -0
- package/dist/away-detection.js +186 -0
- package/dist/away-detection.js.map +1 -0
- package/dist/away-inbox-oneshot.d.ts +40 -0
- package/dist/away-inbox-oneshot.d.ts.map +1 -0
- package/dist/away-inbox-oneshot.js +311 -0
- package/dist/away-inbox-oneshot.js.map +1 -0
- package/dist/backup-restore-handlers.d.ts +10 -0
- package/dist/backup-restore-handlers.d.ts.map +1 -0
- package/dist/backup-restore-handlers.js +82 -0
- package/dist/backup-restore-handlers.js.map +1 -0
- package/dist/backup-restore.d.ts +102 -0
- package/dist/backup-restore.d.ts.map +1 -0
- package/dist/backup-restore.js +341 -0
- package/dist/backup-restore.js.map +1 -0
- package/dist/bin/cello-daemon.d.ts +13 -0
- package/dist/bin/cello-daemon.d.ts.map +1 -0
- package/dist/bin/cello-daemon.js.map +1 -0
- package/dist/boot-agents.d.ts +64 -0
- package/dist/boot-agents.d.ts.map +1 -0
- package/dist/boot-agents.js +241 -0
- package/dist/boot-agents.js.map +1 -0
- package/dist/boot-connection-state.d.ts +38 -0
- package/dist/boot-connection-state.d.ts.map +1 -0
- package/dist/boot-connection-state.js +95 -0
- package/dist/boot-connection-state.js.map +1 -0
- package/dist/boot-core.d.ts +36 -0
- package/dist/boot-core.d.ts.map +1 -0
- package/dist/boot-core.js +293 -0
- package/dist/boot-core.js.map +1 -0
- package/dist/boot-parked-content.d.ts +34 -0
- package/dist/boot-parked-content.d.ts.map +1 -0
- package/dist/boot-parked-content.js +528 -0
- package/dist/boot-parked-content.js.map +1 -0
- package/dist/boot-sweeps.d.ts +22 -0
- package/dist/boot-sweeps.d.ts.map +1 -0
- package/dist/boot-sweeps.js +51 -0
- package/dist/boot-sweeps.js.map +1 -0
- package/dist/bundled-consortium-manifest.d.ts +47 -0
- package/dist/bundled-consortium-manifest.d.ts.map +1 -0
- package/dist/bundled-consortium-manifest.js +116 -0
- package/dist/bundled-consortium-manifest.js.map +1 -0
- package/dist/cbor-blob-migration.d.ts +8 -0
- package/dist/cbor-blob-migration.d.ts.map +1 -0
- package/dist/cbor-blob-migration.js +116 -0
- package/dist/cbor-blob-migration.js.map +1 -0
- package/dist/challenge-verifier.d.ts +12 -0
- package/dist/challenge-verifier.d.ts.map +1 -0
- package/dist/challenge-verifier.js +11 -0
- package/dist/challenge-verifier.js.map +1 -0
- package/dist/channel-log-store.d.ts +80 -0
- package/dist/channel-log-store.d.ts.map +1 -0
- package/dist/channel-log-store.js +290 -0
- package/dist/channel-log-store.js.map +1 -0
- package/dist/close-commitment.d.ts +67 -0
- package/dist/close-commitment.d.ts.map +1 -0
- package/dist/close-commitment.js +78 -0
- package/dist/close-commitment.js.map +1 -0
- package/dist/close-session-handler.d.ts +94 -0
- package/dist/close-session-handler.d.ts.map +1 -0
- package/dist/close-session-handler.js +1418 -0
- package/dist/close-session-handler.js.map +1 -0
- package/dist/co-attendance.d.ts +29 -0
- package/dist/co-attendance.d.ts.map +1 -0
- package/dist/co-attendance.js +32 -0
- package/dist/co-attendance.js.map +1 -0
- package/dist/column-birth.d.ts +40 -0
- package/dist/column-birth.d.ts.map +1 -0
- package/dist/column-birth.js +61 -0
- package/dist/column-birth.js.map +1 -0
- package/dist/connect-or-start.d.ts +25 -0
- package/dist/connect-or-start.d.ts.map +1 -0
- package/dist/connect-or-start.js +175 -0
- package/dist/connect-or-start.js.map +1 -0
- package/dist/connection-agents.d.ts +16 -0
- package/dist/connection-agents.d.ts.map +1 -0
- package/dist/connection-agents.js +68 -0
- package/dist/connection-agents.js.map +1 -0
- package/dist/consent-migration.d.ts +49 -0
- package/dist/consent-migration.d.ts.map +1 -0
- package/dist/consent-migration.js +128 -0
- package/dist/consent-migration.js.map +1 -0
- package/dist/consortium-bootstrap.d.ts +138 -0
- package/dist/consortium-bootstrap.d.ts.map +1 -0
- package/dist/consortium-bootstrap.js +339 -0
- package/dist/consortium-bootstrap.js.map +1 -0
- package/dist/consortium-fingerprint.d.ts +115 -0
- package/dist/consortium-fingerprint.d.ts.map +1 -0
- package/dist/consortium-fingerprint.js +175 -0
- package/dist/consortium-fingerprint.js.map +1 -0
- package/dist/contact-handlers.d.ts +59 -0
- package/dist/contact-handlers.d.ts.map +1 -0
- package/dist/contact-handlers.js +343 -0
- package/dist/contact-handlers.js.map +1 -0
- package/dist/contact-pubkey-case.d.ts +65 -0
- package/dist/contact-pubkey-case.d.ts.map +1 -0
- package/dist/contact-pubkey-case.js +136 -0
- package/dist/contact-pubkey-case.js.map +1 -0
- package/dist/contacts-tier-migration.d.ts +90 -0
- package/dist/contacts-tier-migration.d.ts.map +1 -0
- package/dist/contacts-tier-migration.js +150 -0
- package/dist/contacts-tier-migration.js.map +1 -0
- package/dist/content-encryption-status.d.ts +111 -0
- package/dist/content-encryption-status.d.ts.map +1 -0
- package/dist/content-encryption-status.js +158 -0
- package/dist/content-encryption-status.js.map +1 -0
- package/dist/content-park-client.d.ts +90 -0
- package/dist/content-park-client.d.ts.map +1 -0
- package/dist/content-park-client.js +362 -0
- package/dist/content-park-client.js.map +1 -0
- package/dist/content-park.d.ts +52 -0
- package/dist/content-park.d.ts.map +1 -0
- package/dist/content-park.js +1309 -0
- package/dist/content-park.js.map +1 -0
- package/dist/cross-node-negotiation.d.ts +44 -0
- package/dist/cross-node-negotiation.d.ts.map +1 -0
- package/dist/cross-node-negotiation.js +34 -0
- package/dist/cross-node-negotiation.js.map +1 -0
- package/dist/daemon-handle.d.ts +57 -0
- package/dist/daemon-handle.d.ts.map +1 -0
- package/dist/daemon-handle.js +2 -0
- package/dist/daemon-handle.js.map +1 -0
- package/dist/daemon-status-report.d.ts +50 -0
- package/dist/daemon-status-report.d.ts.map +1 -0
- package/dist/daemon-status-report.js +81 -0
- package/dist/daemon-status-report.js.map +1 -0
- package/dist/daemon.d.ts +45 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +1177 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db-identity-store.d.ts +159 -0
- package/dist/db-identity-store.d.ts.map +1 -0
- package/dist/db-identity-store.js +502 -0
- package/dist/db-identity-store.js.map +1 -0
- package/dist/delivery-open-registry.d.ts +92 -0
- package/dist/delivery-open-registry.d.ts.map +1 -0
- package/dist/delivery-open-registry.js +121 -0
- package/dist/delivery-open-registry.js.map +1 -0
- package/dist/delivery-session-suspects.d.ts +56 -0
- package/dist/delivery-session-suspects.d.ts.map +1 -0
- package/dist/delivery-session-suspects.js +94 -0
- package/dist/delivery-session-suspects.js.map +1 -0
- package/dist/directory-auth-posture.d.ts +87 -0
- package/dist/directory-auth-posture.d.ts.map +1 -0
- package/dist/directory-auth-posture.js +134 -0
- package/dist/directory-auth-posture.js.map +1 -0
- package/dist/directory-bootstrap.d.ts +310 -0
- package/dist/directory-bootstrap.d.ts.map +1 -0
- package/dist/directory-bootstrap.js +557 -0
- package/dist/directory-bootstrap.js.map +1 -0
- package/dist/directory-connect.d.ts +27 -0
- package/dist/directory-connect.d.ts.map +1 -0
- package/dist/directory-connect.js +106 -0
- package/dist/directory-connect.js.map +1 -0
- package/dist/disconnect-cleanup.d.ts +51 -0
- package/dist/disconnect-cleanup.d.ts.map +1 -0
- package/dist/disconnect-cleanup.js +72 -0
- package/dist/disconnect-cleanup.js.map +1 -0
- package/dist/document-amendment-store.d.ts +120 -0
- package/dist/document-amendment-store.d.ts.map +1 -0
- package/dist/document-amendment-store.js +266 -0
- package/dist/document-amendment-store.js.map +1 -0
- package/dist/document-delivery-transport.d.ts +168 -0
- package/dist/document-delivery-transport.d.ts.map +1 -0
- package/dist/document-delivery-transport.js +206 -0
- package/dist/document-delivery-transport.js.map +1 -0
- package/dist/document-engine.d.ts +134 -0
- package/dist/document-engine.d.ts.map +1 -0
- package/dist/document-engine.js +282 -0
- package/dist/document-engine.js.map +1 -0
- package/dist/document-flag.d.ts +58 -0
- package/dist/document-flag.d.ts.map +1 -0
- package/dist/document-flag.js +70 -0
- package/dist/document-flag.js.map +1 -0
- package/dist/document-frame-router.d.ts +245 -0
- package/dist/document-frame-router.d.ts.map +1 -0
- package/dist/document-frame-router.js +397 -0
- package/dist/document-frame-router.js.map +1 -0
- package/dist/document-gate-wiring.d.ts +61 -0
- package/dist/document-gate-wiring.d.ts.map +1 -0
- package/dist/document-gate-wiring.js +125 -0
- package/dist/document-gate-wiring.js.map +1 -0
- package/dist/document-gate.d.ts +149 -0
- package/dist/document-gate.d.ts.map +1 -0
- package/dist/document-gate.js +509 -0
- package/dist/document-gate.js.map +1 -0
- package/dist/document-handlers.d.ts +47 -0
- package/dist/document-handlers.d.ts.map +1 -0
- package/dist/document-handlers.js +2203 -0
- package/dist/document-handlers.js.map +1 -0
- package/dist/document-handshake.d.ts +176 -0
- package/dist/document-handshake.d.ts.map +1 -0
- package/dist/document-handshake.js +452 -0
- package/dist/document-handshake.js.map +1 -0
- package/dist/document-inbound.d.ts +162 -0
- package/dist/document-inbound.d.ts.map +1 -0
- package/dist/document-inbound.js +530 -0
- package/dist/document-inbound.js.map +1 -0
- package/dist/document-json.d.ts +120 -0
- package/dist/document-json.d.ts.map +1 -0
- package/dist/document-json.js +191 -0
- package/dist/document-json.js.map +1 -0
- package/dist/document-layer.d.ts +215 -0
- package/dist/document-layer.d.ts.map +1 -0
- package/dist/document-layer.js +1025 -0
- package/dist/document-layer.js.map +1 -0
- package/dist/document-lifecycle.d.ts +52 -0
- package/dist/document-lifecycle.d.ts.map +1 -0
- package/dist/document-lifecycle.js +134 -0
- package/dist/document-lifecycle.js.map +1 -0
- package/dist/document-live-docs.d.ts +58 -0
- package/dist/document-live-docs.d.ts.map +1 -0
- package/dist/document-live-docs.js +126 -0
- package/dist/document-live-docs.js.map +1 -0
- package/dist/document-notify.d.ts +228 -0
- package/dist/document-notify.d.ts.map +1 -0
- package/dist/document-notify.js +580 -0
- package/dist/document-notify.js.map +1 -0
- package/dist/document-profile.d.ts +61 -0
- package/dist/document-profile.d.ts.map +1 -0
- package/dist/document-profile.js +112 -0
- package/dist/document-profile.js.map +1 -0
- package/dist/document-publish.d.ts +87 -0
- package/dist/document-publish.d.ts.map +1 -0
- package/dist/document-publish.js +173 -0
- package/dist/document-publish.js.map +1 -0
- package/dist/document-reachability.d.ts +42 -0
- package/dist/document-reachability.d.ts.map +1 -0
- package/dist/document-reachability.js +80 -0
- package/dist/document-reachability.js.map +1 -0
- package/dist/document-reconcile-engine.d.ts +66 -0
- package/dist/document-reconcile-engine.d.ts.map +1 -0
- package/dist/document-reconcile-engine.js +225 -0
- package/dist/document-reconcile-engine.js.map +1 -0
- package/dist/document-reconcile-scheduler.d.ts +163 -0
- package/dist/document-reconcile-scheduler.d.ts.map +1 -0
- package/dist/document-reconcile-scheduler.js +303 -0
- package/dist/document-reconcile-scheduler.js.map +1 -0
- package/dist/document-rejection.d.ts +251 -0
- package/dist/document-rejection.d.ts.map +1 -0
- package/dist/document-rejection.js +435 -0
- package/dist/document-rejection.js.map +1 -0
- package/dist/document-screen.d.ts +114 -0
- package/dist/document-screen.d.ts.map +1 -0
- package/dist/document-screen.js +223 -0
- package/dist/document-screen.js.map +1 -0
- package/dist/document-store.d.ts +372 -0
- package/dist/document-store.d.ts.map +1 -0
- package/dist/document-store.js +931 -0
- package/dist/document-store.js.map +1 -0
- package/dist/document-surface.d.ts +32 -0
- package/dist/document-surface.d.ts.map +1 -0
- package/dist/document-surface.js +151 -0
- package/dist/document-surface.js.map +1 -0
- package/dist/document-types.d.ts +94 -0
- package/dist/document-types.d.ts.map +1 -0
- package/dist/document-types.js +90 -0
- package/dist/document-types.js.map +1 -0
- package/dist/document-watch.d.ts +69 -0
- package/dist/document-watch.d.ts.map +1 -0
- package/dist/document-watch.js +108 -0
- package/dist/document-watch.js.map +1 -0
- package/dist/document-wiring.d.ts +53 -0
- package/dist/document-wiring.d.ts.map +1 -0
- package/dist/document-wiring.js +323 -0
- package/dist/document-wiring.js.map +1 -0
- package/dist/document-write-guard.d.ts +66 -0
- package/dist/document-write-guard.d.ts.map +1 -0
- package/dist/document-write-guard.js +98 -0
- package/dist/document-write-guard.js.map +1 -0
- package/dist/document-write-path.d.ts +94 -0
- package/dist/document-write-path.d.ts.map +1 -0
- package/dist/document-write-path.js +530 -0
- package/dist/document-write-path.js.map +1 -0
- package/dist/error-message.d.ts +7 -0
- package/dist/error-message.d.ts.map +1 -0
- package/dist/error-message.js +19 -0
- package/dist/error-message.js.map +1 -0
- package/dist/file-manifest-provider.d.ts +37 -0
- package/dist/file-manifest-provider.d.ts.map +1 -0
- package/dist/file-manifest-provider.js +105 -0
- package/dist/file-manifest-provider.js.map +1 -0
- package/dist/frame-values.d.ts +3 -0
- package/dist/frame-values.d.ts.map +1 -0
- package/dist/frame-values.js +84 -0
- package/dist/frame-values.js.map +1 -0
- package/dist/frontier-mismatch.d.ts +73 -0
- package/dist/frontier-mismatch.d.ts.map +1 -0
- package/dist/frontier-mismatch.js +89 -0
- package/dist/frontier-mismatch.js.map +1 -0
- package/dist/gateway-config-handlers.d.ts +26 -0
- package/dist/gateway-config-handlers.d.ts.map +1 -0
- package/dist/gateway-config-handlers.js +454 -0
- package/dist/gateway-config-handlers.js.map +1 -0
- package/dist/held-content.d.ts +145 -0
- package/dist/held-content.d.ts.map +1 -0
- package/dist/held-content.js +389 -0
- package/dist/held-content.js.map +1 -0
- package/dist/http-manifest-poll.d.ts +67 -0
- package/dist/http-manifest-poll.d.ts.map +1 -0
- package/dist/http-manifest-poll.js +150 -0
- package/dist/http-manifest-poll.js.map +1 -0
- package/dist/identity-migration.d.ts +40 -0
- package/dist/identity-migration.d.ts.map +1 -0
- package/dist/identity-migration.js +461 -0
- package/dist/identity-migration.js.map +1 -0
- package/dist/inbound-refusals.d.ts +283 -0
- package/dist/inbound-refusals.d.ts.map +1 -0
- package/dist/inbound-refusals.js +919 -0
- package/dist/inbound-refusals.js.map +1 -0
- package/dist/inbound-seal-request.d.ts +32 -0
- package/dist/inbound-seal-request.d.ts.map +1 -0
- package/dist/inbound-seal-request.js +228 -0
- package/dist/inbound-seal-request.js.map +1 -0
- package/dist/inbound-sessions.d.ts +291 -0
- package/dist/inbound-sessions.d.ts.map +1 -0
- package/dist/inbound-sessions.js +1609 -0
- package/dist/inbound-sessions.js.map +1 -0
- package/dist/inclusion-proof-handlers.d.ts +43 -0
- package/dist/inclusion-proof-handlers.d.ts.map +1 -0
- package/dist/inclusion-proof-handlers.js +565 -0
- package/dist/inclusion-proof-handlers.js.map +1 -0
- package/dist/inclusion-proof.d.ts +151 -0
- package/dist/inclusion-proof.d.ts.map +1 -0
- package/dist/inclusion-proof.js +228 -0
- package/dist/inclusion-proof.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/initiate-session-handler.d.ts +55 -0
- package/dist/initiate-session-handler.d.ts.map +1 -0
- package/dist/initiate-session-handler.js +310 -0
- package/dist/initiate-session-handler.js.map +1 -0
- package/dist/ipc-client.d.ts +31 -0
- package/dist/ipc-client.d.ts.map +1 -0
- package/dist/ipc-client.js +113 -0
- package/dist/ipc-client.js.map +1 -0
- package/dist/ipc-server.d.ts +63 -0
- package/dist/ipc-server.d.ts.map +1 -0
- package/dist/ipc-server.js +429 -0
- package/dist/ipc-server.js.map +1 -0
- package/dist/ipc-surface.d.ts +44 -0
- package/dist/ipc-surface.d.ts.map +1 -0
- package/dist/ipc-surface.js +107 -0
- package/dist/ipc-surface.js.map +1 -0
- package/dist/line-lcs.d.ts +51 -0
- package/dist/line-lcs.d.ts.map +1 -0
- package/dist/line-lcs.js +71 -0
- package/dist/line-lcs.js.map +1 -0
- package/dist/lock-file.d.ts +39 -0
- package/dist/lock-file.d.ts.map +1 -0
- package/dist/lock-file.js +120 -0
- package/dist/lock-file.js.map +1 -0
- package/dist/log-collapse.d.ts +66 -0
- package/dist/log-collapse.d.ts.map +1 -0
- package/dist/log-collapse.js +244 -0
- package/dist/log-collapse.js.map +1 -0
- package/dist/log-rotate.d.ts +67 -0
- package/dist/log-rotate.d.ts.map +1 -0
- package/dist/log-rotate.js +134 -0
- package/dist/log-rotate.js.map +1 -0
- package/dist/manifest-deps.d.ts +25 -0
- package/dist/manifest-deps.d.ts.map +1 -0
- package/dist/manifest-deps.js +151 -0
- package/dist/manifest-deps.js.map +1 -0
- package/dist/manifest-poll-scheduler.d.ts +31 -0
- package/dist/manifest-poll-scheduler.d.ts.map +1 -0
- package/dist/manifest-poll-scheduler.js +59 -0
- package/dist/manifest-poll-scheduler.js.map +1 -0
- package/dist/manifest-validity.d.ts +153 -0
- package/dist/manifest-validity.d.ts.map +1 -0
- package/dist/manifest-validity.js +268 -0
- package/dist/manifest-validity.js.map +1 -0
- package/dist/manifest-version-store-db.d.ts +24 -0
- package/dist/manifest-version-store-db.d.ts.map +1 -0
- package/dist/manifest-version-store-db.js +58 -0
- package/dist/manifest-version-store-db.js.map +1 -0
- package/dist/manifest-version-store.d.ts +16 -0
- package/dist/manifest-version-store.d.ts.map +1 -0
- package/dist/manifest-version-store.js +15 -0
- package/dist/manifest-version-store.js.map +1 -0
- package/dist/network-directory-node.d.ts +136 -0
- package/dist/network-directory-node.d.ts.map +1 -0
- package/dist/network-directory-node.js +810 -0
- package/dist/network-directory-node.js.map +1 -0
- package/dist/nonce-dedup.d.ts +68 -0
- package/dist/nonce-dedup.d.ts.map +1 -0
- package/dist/nonce-dedup.js +205 -0
- package/dist/nonce-dedup.js.map +1 -0
- package/dist/notification-dispatcher.d.ts +92 -0
- package/dist/notification-dispatcher.d.ts.map +1 -0
- package/dist/notification-dispatcher.js +210 -0
- package/dist/notification-dispatcher.js.map +1 -0
- package/dist/notification-handlers.d.ts +53 -0
- package/dist/notification-handlers.d.ts.map +1 -0
- package/dist/notification-handlers.js +461 -0
- package/dist/notification-handlers.js.map +1 -0
- package/dist/onboarding-guidance.d.ts +79 -0
- package/dist/onboarding-guidance.d.ts.map +1 -0
- package/dist/onboarding-guidance.js +95 -0
- package/dist/onboarding-guidance.js.map +1 -0
- package/dist/operator-guidance.d.ts +25 -0
- package/dist/operator-guidance.d.ts.map +1 -0
- package/dist/operator-guidance.js +50 -0
- package/dist/operator-guidance.js.map +1 -0
- package/dist/orphan-triage.d.ts +130 -0
- package/dist/orphan-triage.d.ts.map +1 -0
- package/dist/orphan-triage.js +207 -0
- package/dist/orphan-triage.js.map +1 -0
- package/dist/outbound-sessions.d.ts +126 -0
- package/dist/outbound-sessions.d.ts.map +1 -0
- package/dist/outbound-sessions.js +1052 -0
- package/dist/outbound-sessions.js.map +1 -0
- package/dist/park-envelope.d.ts +329 -0
- package/dist/park-envelope.d.ts.map +1 -0
- package/dist/park-envelope.js +509 -0
- package/dist/park-envelope.js.map +1 -0
- package/dist/park-recovery.d.ts +273 -0
- package/dist/park-recovery.d.ts.map +1 -0
- package/dist/park-recovery.js +717 -0
- package/dist/park-recovery.js.map +1 -0
- package/dist/park-refusals.d.ts +147 -0
- package/dist/park-refusals.d.ts.map +1 -0
- package/dist/park-refusals.js +331 -0
- package/dist/park-refusals.js.map +1 -0
- package/dist/quarantine-framing.d.ts +92 -0
- package/dist/quarantine-framing.d.ts.map +1 -0
- package/dist/quarantine-framing.js +111 -0
- package/dist/quarantine-framing.js.map +1 -0
- package/dist/reconnect-drain.d.ts +22 -0
- package/dist/reconnect-drain.d.ts.map +1 -0
- package/dist/reconnect-drain.js +65 -0
- package/dist/reconnect-drain.js.map +1 -0
- package/dist/recovered-position.d.ts +14 -0
- package/dist/recovered-position.d.ts.map +1 -0
- package/dist/recovered-position.js +59 -0
- package/dist/recovered-position.js.map +1 -0
- package/dist/refusal-notices.d.ts +196 -0
- package/dist/refusal-notices.d.ts.map +1 -0
- package/dist/refusal-notices.js +516 -0
- package/dist/refusal-notices.js.map +1 -0
- package/dist/refusal-reasons.d.ts +245 -0
- package/dist/refusal-reasons.d.ts.map +1 -0
- package/dist/refusal-reasons.js +363 -0
- package/dist/refusal-reasons.js.map +1 -0
- package/dist/register-handler.d.ts +36 -0
- package/dist/register-handler.d.ts.map +1 -0
- package/dist/register-handler.js +285 -0
- package/dist/register-handler.js.map +1 -0
- package/dist/registration-context.d.ts +72 -0
- package/dist/registration-context.d.ts.map +1 -0
- package/dist/registration-context.js +126 -0
- package/dist/registration-context.js.map +1 -0
- package/dist/registration-manager.d.ts +94 -0
- package/dist/registration-manager.d.ts.map +1 -0
- package/dist/registration-manager.js +585 -0
- package/dist/registration-manager.js.map +1 -0
- package/dist/registration-persistence.d.ts +183 -0
- package/dist/registration-persistence.d.ts.map +1 -0
- package/dist/registration-persistence.js +263 -0
- package/dist/registration-persistence.js.map +1 -0
- package/dist/registry-poll.d.ts +52 -0
- package/dist/registry-poll.d.ts.map +1 -0
- package/dist/registry-poll.js +140 -0
- package/dist/registry-poll.js.map +1 -0
- package/dist/registry-version-store-db.d.ts +22 -0
- package/dist/registry-version-store-db.d.ts.map +1 -0
- package/dist/registry-version-store-db.js +50 -0
- package/dist/registry-version-store-db.js.map +1 -0
- package/dist/relay-endpoints.d.ts +18 -0
- package/dist/relay-endpoints.d.ts.map +1 -0
- package/dist/relay-endpoints.js +9 -0
- package/dist/relay-endpoints.js.map +1 -0
- package/dist/relay-only.d.ts +140 -0
- package/dist/relay-only.d.ts.map +1 -0
- package/dist/relay-only.js +193 -0
- package/dist/relay-only.js.map +1 -0
- package/dist/relay-receipt-store.d.ts +155 -0
- package/dist/relay-receipt-store.d.ts.map +1 -0
- package/dist/relay-receipt-store.js +284 -0
- package/dist/relay-receipt-store.js.map +1 -0
- package/dist/relay-reconnect.d.ts +32 -0
- package/dist/relay-reconnect.d.ts.map +1 -0
- package/dist/relay-reconnect.js +29 -0
- package/dist/relay-reconnect.js.map +1 -0
- package/dist/reply-lag.d.ts +11 -0
- package/dist/reply-lag.d.ts.map +1 -0
- package/dist/reply-lag.js +46 -0
- package/dist/reply-lag.js.map +1 -0
- package/dist/resolve-named-agent.d.ts +49 -0
- package/dist/resolve-named-agent.d.ts.map +1 -0
- package/dist/resolve-named-agent.js +77 -0
- package/dist/resolve-named-agent.js.map +1 -0
- package/dist/restart-seal-resolver.d.ts +110 -0
- package/dist/restart-seal-resolver.d.ts.map +1 -0
- package/dist/restart-seal-resolver.js +353 -0
- package/dist/restart-seal-resolver.js.map +1 -0
- package/dist/resume-last-seen.d.ts +15 -0
- package/dist/resume-last-seen.d.ts.map +1 -0
- package/dist/resume-last-seen.js +44 -0
- package/dist/resume-last-seen.js.map +1 -0
- package/dist/retry-queue.d.ts +203 -0
- package/dist/retry-queue.d.ts.map +1 -0
- package/dist/retry-queue.js +701 -0
- package/dist/retry-queue.js.map +1 -0
- package/dist/roster-freshness.d.ts +160 -0
- package/dist/roster-freshness.d.ts.map +1 -0
- package/dist/roster-freshness.js +250 -0
- package/dist/roster-freshness.js.map +1 -0
- package/dist/screening-status.d.ts +15 -0
- package/dist/screening-status.d.ts.map +1 -0
- package/dist/screening-status.js +65 -0
- package/dist/screening-status.js.map +1 -0
- package/dist/seal-carried-close.d.ts +37 -0
- package/dist/seal-carried-close.d.ts.map +1 -0
- package/dist/seal-carried-close.js +179 -0
- package/dist/seal-carried-close.js.map +1 -0
- package/dist/seal-certificate-pull.d.ts +79 -0
- package/dist/seal-certificate-pull.d.ts.map +1 -0
- package/dist/seal-certificate-pull.js +186 -0
- package/dist/seal-certificate-pull.js.map +1 -0
- package/dist/seal-certified-root-check.d.ts +37 -0
- package/dist/seal-certified-root-check.d.ts.map +1 -0
- package/dist/seal-certified-root-check.js +127 -0
- package/dist/seal-certified-root-check.js.map +1 -0
- package/dist/seal-coordinator.d.ts +118 -0
- package/dist/seal-coordinator.d.ts.map +1 -0
- package/dist/seal-coordinator.js +927 -0
- package/dist/seal-coordinator.js.map +1 -0
- package/dist/seal-escalation.d.ts +80 -0
- package/dist/seal-escalation.d.ts.map +1 -0
- package/dist/seal-escalation.js +283 -0
- package/dist/seal-escalation.js.map +1 -0
- package/dist/seal-evidence-root-check.d.ts +70 -0
- package/dist/seal-evidence-root-check.d.ts.map +1 -0
- package/dist/seal-evidence-root-check.js +199 -0
- package/dist/seal-evidence-root-check.js.map +1 -0
- package/dist/seal-failure-store.d.ts +139 -0
- package/dist/seal-failure-store.d.ts.map +1 -0
- package/dist/seal-failure-store.js +207 -0
- package/dist/seal-failure-store.js.map +1 -0
- package/dist/seal-flows.d.ts +107 -0
- package/dist/seal-flows.d.ts.map +1 -0
- package/dist/seal-flows.js +638 -0
- package/dist/seal-flows.js.map +1 -0
- package/dist/seal-frontier-verify.d.ts +103 -0
- package/dist/seal-frontier-verify.d.ts.map +1 -0
- package/dist/seal-frontier-verify.js +143 -0
- package/dist/seal-frontier-verify.js.map +1 -0
- package/dist/seal-leaf.d.ts +58 -0
- package/dist/seal-leaf.d.ts.map +1 -0
- package/dist/seal-leaf.js +112 -0
- package/dist/seal-leaf.js.map +1 -0
- package/dist/seal-legibility-tbs.d.ts +25 -0
- package/dist/seal-legibility-tbs.d.ts.map +1 -0
- package/dist/seal-legibility-tbs.js +77 -0
- package/dist/seal-legibility-tbs.js.map +1 -0
- package/dist/seal-local-terminus.d.ts +41 -0
- package/dist/seal-local-terminus.d.ts.map +1 -0
- package/dist/seal-local-terminus.js +170 -0
- package/dist/seal-local-terminus.js.map +1 -0
- package/dist/seal-receipt-upgrade.d.ts +30 -0
- package/dist/seal-receipt-upgrade.d.ts.map +1 -0
- package/dist/seal-receipt-upgrade.js +49 -0
- package/dist/seal-receipt-upgrade.js.map +1 -0
- package/dist/seal-relay-silence.d.ts +51 -0
- package/dist/seal-relay-silence.d.ts.map +1 -0
- package/dist/seal-relay-silence.js +76 -0
- package/dist/seal-relay-silence.js.map +1 -0
- package/dist/seal-settle.d.ts +38 -0
- package/dist/seal-settle.d.ts.map +1 -0
- package/dist/seal-settle.js +33 -0
- package/dist/seal-settle.js.map +1 -0
- package/dist/seal-upgrade.d.ts +107 -0
- package/dist/seal-upgrade.d.ts.map +1 -0
- package/dist/seal-upgrade.js +200 -0
- package/dist/seal-upgrade.js.map +1 -0
- package/dist/sealed-conversation.d.ts +36 -0
- package/dist/sealed-conversation.d.ts.map +1 -0
- package/dist/sealed-conversation.js +171 -0
- package/dist/sealed-conversation.js.map +1 -0
- package/dist/sealed-leaf-set.d.ts +92 -0
- package/dist/sealed-leaf-set.d.ts.map +1 -0
- package/dist/sealed-leaf-set.js +122 -0
- package/dist/sealed-leaf-set.js.map +1 -0
- package/dist/send-claims.d.ts +56 -0
- package/dist/send-claims.d.ts.map +1 -0
- package/dist/send-claims.js +50 -0
- package/dist/send-claims.js.map +1 -0
- package/dist/session-assignment-parser.d.ts +104 -0
- package/dist/session-assignment-parser.d.ts.map +1 -0
- package/dist/session-assignment-parser.js +345 -0
- package/dist/session-assignment-parser.js.map +1 -0
- package/dist/session-category.d.ts +19 -0
- package/dist/session-category.d.ts.map +1 -0
- package/dist/session-category.js +14 -0
- package/dist/session-category.js.map +1 -0
- package/dist/session-ceremony.d.ts +297 -0
- package/dist/session-ceremony.d.ts.map +1 -0
- package/dist/session-ceremony.js +964 -0
- package/dist/session-ceremony.js.map +1 -0
- package/dist/session-closed.d.ts +79 -0
- package/dist/session-closed.d.ts.map +1 -0
- package/dist/session-closed.js +189 -0
- package/dist/session-closed.js.map +1 -0
- package/dist/session-connection-gater.d.ts +148 -0
- package/dist/session-connection-gater.d.ts.map +1 -0
- package/dist/session-connection-gater.js +332 -0
- package/dist/session-connection-gater.js.map +1 -0
- package/dist/session-content-context.d.ts +162 -0
- package/dist/session-content-context.d.ts.map +1 -0
- package/dist/session-content-context.js +2 -0
- package/dist/session-content-context.js.map +1 -0
- package/dist/session-content-handlers.d.ts +82 -0
- package/dist/session-content-handlers.d.ts.map +1 -0
- package/dist/session-content-handlers.js +1382 -0
- package/dist/session-content-handlers.js.map +1 -0
- package/dist/session-content-ingest.d.ts +206 -0
- package/dist/session-content-ingest.d.ts.map +1 -0
- package/dist/session-content-ingest.js +2167 -0
- package/dist/session-content-ingest.js.map +1 -0
- package/dist/session-content-send.d.ts +191 -0
- package/dist/session-content-send.d.ts.map +1 -0
- package/dist/session-content-send.js +1360 -0
- package/dist/session-content-send.js.map +1 -0
- package/dist/session-delivery-acks.d.ts +169 -0
- package/dist/session-delivery-acks.d.ts.map +1 -0
- package/dist/session-delivery-acks.js +569 -0
- package/dist/session-delivery-acks.js.map +1 -0
- package/dist/session-ephemerals.d.ts +279 -0
- package/dist/session-ephemerals.d.ts.map +1 -0
- package/dist/session-ephemerals.js +591 -0
- package/dist/session-ephemerals.js.map +1 -0
- package/dist/session-leaf-records.d.ts +159 -0
- package/dist/session-leaf-records.d.ts.map +1 -0
- package/dist/session-leaf-records.js +408 -0
- package/dist/session-leaf-records.js.map +1 -0
- package/dist/session-lifecycle.d.ts +303 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +1679 -0
- package/dist/session-lifecycle.js.map +1 -0
- package/dist/session-liveness.d.ts +135 -0
- package/dist/session-liveness.d.ts.map +1 -0
- package/dist/session-liveness.js +347 -0
- package/dist/session-liveness.js.map +1 -0
- package/dist/session-name.d.ts +35 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +60 -0
- package/dist/session-name.js.map +1 -0
- package/dist/session-node-factory.d.ts +18 -0
- package/dist/session-node-factory.d.ts.map +1 -0
- package/dist/session-node-factory.js +182 -0
- package/dist/session-node-factory.js.map +1 -0
- package/dist/session-node-manager.d.ts +877 -0
- package/dist/session-node-manager.d.ts.map +1 -0
- package/dist/session-node-manager.js +2998 -0
- package/dist/session-node-manager.js.map +1 -0
- package/dist/session-node-types.d.ts +1057 -0
- package/dist/session-node-types.d.ts.map +1 -0
- package/dist/session-node-types.js +657 -0
- package/dist/session-node-types.js.map +1 -0
- package/dist/session-notify.d.ts +46 -0
- package/dist/session-notify.d.ts.map +1 -0
- package/dist/session-notify.js +116 -0
- package/dist/session-notify.js.map +1 -0
- package/dist/session-own-chain-store.d.ts +65 -0
- package/dist/session-own-chain-store.d.ts.map +1 -0
- package/dist/session-own-chain-store.js +75 -0
- package/dist/session-own-chain-store.js.map +1 -0
- package/dist/session-queries.d.ts +476 -0
- package/dist/session-queries.d.ts.map +1 -0
- package/dist/session-queries.js +1007 -0
- package/dist/session-queries.js.map +1 -0
- package/dist/session-read-handlers.d.ts +87 -0
- package/dist/session-read-handlers.d.ts.map +1 -0
- package/dist/session-read-handlers.js +689 -0
- package/dist/session-read-handlers.js.map +1 -0
- package/dist/session-records.d.ts +341 -0
- package/dist/session-records.d.ts.map +1 -0
- package/dist/session-records.js +858 -0
- package/dist/session-records.js.map +1 -0
- package/dist/session-relay-client.d.ts +659 -0
- package/dist/session-relay-client.d.ts.map +1 -0
- package/dist/session-relay-client.js +2876 -0
- package/dist/session-relay-client.js.map +1 -0
- package/dist/session-relay.d.ts +397 -0
- package/dist/session-relay.d.ts.map +1 -0
- package/dist/session-relay.js +1636 -0
- package/dist/session-relay.js.map +1 -0
- package/dist/session-salt-agreement.d.ts +331 -0
- package/dist/session-salt-agreement.d.ts.map +1 -0
- package/dist/session-salt-agreement.js +472 -0
- package/dist/session-salt-agreement.js.map +1 -0
- package/dist/session-salts.d.ts +432 -0
- package/dist/session-salts.d.ts.map +1 -0
- package/dist/session-salts.js +1540 -0
- package/dist/session-salts.js.map +1 -0
- package/dist/session-schema.d.ts +30 -0
- package/dist/session-schema.d.ts.map +1 -0
- package/dist/session-schema.js +877 -0
- package/dist/session-schema.js.map +1 -0
- package/dist/session-seal-leaf-store.d.ts +70 -0
- package/dist/session-seal-leaf-store.d.ts.map +1 -0
- package/dist/session-seal-leaf-store.js +105 -0
- package/dist/session-seal-leaf-store.js.map +1 -0
- package/dist/session-seal.d.ts +334 -0
- package/dist/session-seal.d.ts.map +1 -0
- package/dist/session-seal.js +1017 -0
- package/dist/session-seal.js.map +1 -0
- package/dist/session-terminal-refusal.d.ts +65 -0
- package/dist/session-terminal-refusal.d.ts.map +1 -0
- package/dist/session-terminal-refusal.js +87 -0
- package/dist/session-terminal-refusal.js.map +1 -0
- package/dist/session-tree.d.ts +110 -0
- package/dist/session-tree.d.ts.map +1 -0
- package/dist/session-tree.js +144 -0
- package/dist/session-tree.js.map +1 -0
- package/dist/session-views.d.ts +47 -0
- package/dist/session-views.d.ts.map +1 -0
- package/dist/session-views.js +278 -0
- package/dist/session-views.js.map +1 -0
- package/dist/signal-handlers.d.ts +63 -0
- package/dist/signal-handlers.d.ts.map +1 -0
- package/dist/signal-handlers.js +980 -0
- package/dist/signal-handlers.js.map +1 -0
- package/dist/signal-requirement-policy.d.ts +51 -0
- package/dist/signal-requirement-policy.d.ts.map +1 -0
- package/dist/signal-requirement-policy.js +89 -0
- package/dist/signal-requirement-policy.js.map +1 -0
- package/dist/signal-revocability.d.ts +49 -0
- package/dist/signal-revocability.d.ts.map +1 -0
- package/dist/signal-revocability.js +93 -0
- package/dist/signal-revocability.js.map +1 -0
- package/dist/signal-submission.d.ts +181 -0
- package/dist/signal-submission.d.ts.map +1 -0
- package/dist/signal-submission.js +368 -0
- package/dist/signal-submission.js.map +1 -0
- package/dist/signaling-connect.d.ts +118 -0
- package/dist/signaling-connect.d.ts.map +1 -0
- package/dist/signaling-connect.js +538 -0
- package/dist/signaling-connect.js.map +1 -0
- package/dist/signaling-wiring.d.ts +105 -0
- package/dist/signaling-wiring.d.ts.map +1 -0
- package/dist/signaling-wiring.js +393 -0
- package/dist/signaling-wiring.js.map +1 -0
- package/dist/singleton-lock.d.ts +85 -0
- package/dist/singleton-lock.d.ts.map +1 -0
- package/dist/singleton-lock.js +219 -0
- package/dist/singleton-lock.js.map +1 -0
- package/dist/sqlcipher-db.d.ts +139 -0
- package/dist/sqlcipher-db.d.ts.map +1 -0
- package/dist/sqlcipher-db.js +357 -0
- package/dist/sqlcipher-db.js.map +1 -0
- package/dist/standing-receivers.d.ts +319 -0
- package/dist/standing-receivers.d.ts.map +1 -0
- package/dist/standing-receivers.js +1295 -0
- package/dist/standing-receivers.js.map +1 -0
- package/dist/start-agent.d.ts +64 -0
- package/dist/start-agent.d.ts.map +1 -0
- package/dist/start-agent.js +136 -0
- package/dist/start-agent.js.map +1 -0
- package/dist/status-handler.d.ts +54 -0
- package/dist/status-handler.d.ts.map +1 -0
- package/dist/status-handler.js +61 -0
- package/dist/status-handler.js.map +1 -0
- package/dist/submission-retry.d.ts +208 -0
- package/dist/submission-retry.d.ts.map +1 -0
- package/dist/submission-retry.js +506 -0
- package/dist/submission-retry.js.map +1 -0
- package/dist/telegram-bot-client.d.ts +34 -0
- package/dist/telegram-bot-client.d.ts.map +1 -0
- package/dist/telegram-bot-client.js +36 -0
- package/dist/telegram-bot-client.js.map +1 -0
- package/dist/telegram-doorbell.d.ts +38 -0
- package/dist/telegram-doorbell.d.ts.map +1 -0
- package/dist/telegram-doorbell.js +140 -0
- package/dist/telegram-doorbell.js.map +1 -0
- package/dist/test-handlers.d.ts +62 -0
- package/dist/test-handlers.d.ts.map +1 -0
- package/dist/test-handlers.js +240 -0
- package/dist/test-handlers.js.map +1 -0
- package/dist/testing.d.ts +10 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +10 -0
- package/dist/testing.js.map +1 -0
- package/dist/transport-composition.d.ts +31 -0
- package/dist/transport-composition.d.ts.map +1 -0
- package/dist/transport-composition.js +55 -0
- package/dist/transport-composition.js.map +1 -0
- package/dist/transport-selector.d.ts +202 -0
- package/dist/transport-selector.d.ts.map +1 -0
- package/dist/transport-selector.js +196 -0
- package/dist/transport-selector.js.map +1 -0
- package/dist/trust-signal-pickup-listener.d.ts +43 -0
- package/dist/trust-signal-pickup-listener.d.ts.map +1 -0
- package/dist/trust-signal-pickup-listener.js +48 -0
- package/dist/trust-signal-pickup-listener.js.map +1 -0
- package/dist/trust-signal-store.d.ts +406 -0
- package/dist/trust-signal-store.d.ts.map +1 -0
- package/dist/trust-signal-store.js +939 -0
- package/dist/trust-signal-store.js.map +1 -0
- package/dist/trust-signal-sweep-tick.d.ts +60 -0
- package/dist/trust-signal-sweep-tick.d.ts.map +1 -0
- package/dist/trust-signal-sweep-tick.js +101 -0
- package/dist/trust-signal-sweep-tick.js.map +1 -0
- package/dist/trust-signal-sweep.d.ts +94 -0
- package/dist/trust-signal-sweep.d.ts.map +1 -0
- package/dist/trust-signal-sweep.js +147 -0
- package/dist/trust-signal-sweep.js.map +1 -0
- package/dist/type-registry.d.ts +42 -0
- package/dist/type-registry.d.ts.map +1 -0
- package/dist/type-registry.js +37 -0
- package/dist/type-registry.js.map +1 -0
- package/dist/types.d.ts +746 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/dist/unresolved-nodes-report.d.ts +14 -0
- package/dist/unresolved-nodes-report.d.ts.map +1 -0
- package/dist/unresolved-nodes-report.js +96 -0
- package/dist/unresolved-nodes-report.js.map +1 -0
- package/dist/vocabulary.d.ts +150 -0
- package/dist/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary.js +386 -0
- package/dist/vocabulary.js.map +1 -0
- package/dist/who-label.d.ts +28 -0
- package/dist/who-label.d.ts.map +1 -0
- package/dist/who-label.js +31 -0
- package/dist/who-label.js.map +1 -0
- package/dist/who-resolver.d.ts +15 -0
- package/dist/who-resolver.d.ts.map +1 -0
- package/dist/who-resolver.js +47 -0
- package/dist/who-resolver.js.map +1 -0
- package/dist/wire-content-hash.d.ts +93 -0
- package/dist/wire-content-hash.d.ts.map +1 -0
- package/dist/wire-content-hash.js +116 -0
- package/dist/wire-content-hash.js.map +1 -0
- package/dist/withheld-content.d.ts +13 -0
- package/dist/withheld-content.d.ts.map +1 -0
- package/dist/withheld-content.js +46 -0
- package/dist/withheld-content.js.map +1 -0
- package/dist/witness-alerts.d.ts +40 -0
- package/dist/witness-alerts.d.ts.map +1 -0
- package/dist/witness-alerts.js +102 -0
- package/dist/witness-alerts.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-M15-MANIFEST-EXPIRY-LIVE-1 — a running daemon notices its own trust anchor expiring.
|
|
3
|
+
*
|
|
4
|
+
* ─── The gap ───────────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
The consortium manifest's validity window is enforced at boot (`verifyStartupManifest`) and, after
|
|
7
|
+
* that, in exactly ONE consumer: `signal-submission.ts` re-checks the HELD manifest at request time
|
|
8
|
+
* and refuses. Nothing else does — not directory identity authentication, not the ceremony roster.
|
|
9
|
+
*
|
|
10
|
+
* (An earlier version of this header said nothing re-checked the held manifest at all. That was
|
|
11
|
+
* wrong — the third false claim I have shipped in three units — and the correction matters, because
|
|
12
|
+
* the real shape is not "unchecked" but INCONSISTENT: the daemon refuses the lowest-stakes consumer
|
|
13
|
+
* and permits the two highest-stakes ones, invisibly. See the decision note below.)
|
|
14
|
+
*
|
|
15
|
+
* There is also a check that reads like coverage and is not: `http-manifest-poll.ts` refuses to
|
|
16
|
+
* ADOPT an expired manifest. That checks the manifest being FETCHED, never the one already held — so
|
|
17
|
+
* a daemon whose anchor has lapsed keeps polling, keeps correctly refusing expired replacements, and
|
|
18
|
+
* keeps using the expired anchor it already has.
|
|
19
|
+
*
|
|
20
|
+
* On the PRODUCTION DEFAULT it is worse: the bundled-manifest path wires no poll scheduler at all
|
|
21
|
+
* ("the bundled roster is static"), so there is not even a fetch that might have noticed.
|
|
22
|
+
*
|
|
23
|
+
* ─── Why it matters, concretely ────────────────────────────────────────────────────────────────
|
|
24
|
+
*
|
|
25
|
+
The manifest is the trust anchor for directory identity authentication (step 6) and for the node
|
|
26
|
+
* roster a threshold ceremony draws from — both re-read `getCurrentManifest()` at request time, so
|
|
27
|
+
* both genuinely run on whatever is held.
|
|
28
|
+
*
|
|
29
|
+
* What expiry means precisely (review F10, correcting my own overstatement): it is the NOTICE that
|
|
30
|
+
* the anchor may be out of date, not the mechanism by which it becomes so. The daemon trusts the
|
|
31
|
+
* identical roster the day BEFORE expiry; what keeps a removed node trusted is never having adopted
|
|
32
|
+
* v+1. So the accurate statement is that past expiry there is NO ASSURANCE the enforced roster is
|
|
33
|
+
* current — a node removed since then would still be trusted, and nothing here can say whether one
|
|
34
|
+
* was.
|
|
35
|
+
*
|
|
36
|
+
* ─── Found the wrong way round ─────────────────────────────────────────────────────────────────
|
|
37
|
+
*
|
|
38
|
+
* `DOD-M15-STALEROSTER-1` shipped a guidance string blaming an expired manifest for a state an
|
|
39
|
+
* expired manifest cannot reach (that daemon refuses to start). Review corrected it and pointed at
|
|
40
|
+
* where the hazard actually lives — here. After that unit, a daemon in this state reports its roster
|
|
41
|
+
* reading as `stale: false`: a confidently fresh measurement taken against a dead anchor, which is
|
|
42
|
+
* worse than the stale reading that line existed to fix.
|
|
43
|
+
*
|
|
44
|
+
* ─── Decision: report, do not kill ─────────────────────────────────────────────────────────────
|
|
45
|
+
*
|
|
46
|
+
A daemon does NOT tear itself down at the expiry instant. §2b invariant 2 backs this explicitly —
|
|
47
|
+
* *"Loud does not mean blocking… treating every failure as fatal is its own defect."*
|
|
48
|
+
*
|
|
49
|
+
* But review corrected the FRAMING, and the correction is worth keeping: the availability argument I
|
|
50
|
+
* originally made does not survive. The fleet-wide stop I claimed to be avoiding happens anyway, at
|
|
51
|
+
* each operator's next restart, via ADV-002 — report-only DEFERS that outage, it does not prevent
|
|
52
|
+
* it. The honest reason to warn rather than kill is that a wall-clock boundary is a bad trigger for
|
|
53
|
+
* tearing down live conversations, not that it avoids the outage.
|
|
54
|
+
*
|
|
55
|
+
* The real question was never global report-vs-kill; it is PER CONSUMER, and the repo has already
|
|
56
|
+
* ruled on one of them inconsistently. `signal-submission.ts` refuses a trust-signal submission on
|
|
57
|
+
* expiry, while `register-handler.ts` deals a FROST share against a roster re-resolved from the same
|
|
58
|
+
* lapsed manifest with no gate, and the challenge verifier authenticates a directory against it with
|
|
59
|
+
* no gate. **The daemon refuses its lowest-stakes consumer and permits its two highest-stakes ones.**
|
|
60
|
+
* That is not defended anywhere; it is carried as `DOD-M15-EXPIRY-CONSUMER-POLICY-1` rather than
|
|
61
|
+
* settled inside a reporting unit.
|
|
62
|
+
*/
|
|
63
|
+
import type { ConsortiumManifest } from "@cello-protocol/protocol-types";
|
|
64
|
+
/**
|
|
65
|
+
* How long before expiry the warning starts.
|
|
66
|
+
*
|
|
67
|
+
* Warning at the expiry instant is useless — the operator finds out once they are already running
|
|
68
|
+
* on a dead anchor. Seven days is chosen to cover a weekend plus the working days either side, which
|
|
69
|
+
* is the realistic floor for noticing an alert and rotating a threshold-signed artefact.
|
|
70
|
+
*/
|
|
71
|
+
export declare const MANIFEST_EXPIRY_WARNING_MS: number;
|
|
72
|
+
export type ManifestValidity = {
|
|
73
|
+
state: "not_configured";
|
|
74
|
+
} | {
|
|
75
|
+
state: "not_yet_valid";
|
|
76
|
+
notBefore: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The window itself is unreadable — a `not_before` that does not parse.
|
|
80
|
+
*
|
|
81
|
+
* Its OWN state, deliberately not folded into `expired`: those need different words. "Expired"
|
|
82
|
+
* tells an operator to rotate a manifest that is stale; this tells them a field in the manifest is
|
|
83
|
+
* GARBAGE, which is a different problem with a different fix and is more likely to mean the
|
|
84
|
+
* artefact was hand-edited or produced by a broken generator.
|
|
85
|
+
*/
|
|
86
|
+
| {
|
|
87
|
+
state: "unreadable_window";
|
|
88
|
+
notBefore: string;
|
|
89
|
+
} | {
|
|
90
|
+
state: "valid";
|
|
91
|
+
expires: string;
|
|
92
|
+
secondsRemaining: number;
|
|
93
|
+
} | {
|
|
94
|
+
state: "expiring_soon";
|
|
95
|
+
expires: string;
|
|
96
|
+
secondsRemaining: number;
|
|
97
|
+
} | {
|
|
98
|
+
state: "expired";
|
|
99
|
+
expires: string;
|
|
100
|
+
secondsSince: number;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Where does this manifest sit in its validity window, as of `nowMs`?
|
|
104
|
+
*
|
|
105
|
+
* Clock injected so the boundaries are tested exactly rather than approximately.
|
|
106
|
+
*/
|
|
107
|
+
export declare function classifyManifestValidity(manifest: Pick<ConsortiumManifest, "not_before" | "expires"> | null | undefined, nowMs: number): ManifestValidity;
|
|
108
|
+
/**
|
|
109
|
+
* The operator-facing fields for `cello_status`, or `undefined` when there is nothing to say.
|
|
110
|
+
*
|
|
111
|
+
* A healthy manifest contributes NOTHING. A field that is present on every status read for the
|
|
112
|
+
* years a manifest is valid is not a warning — it is furniture, and it teaches the reader to skip
|
|
113
|
+
* the block that matters. This is the finding this milestone has produced more often than any other.
|
|
114
|
+
*/
|
|
115
|
+
/**
|
|
116
|
+
* WHERE the manifest came from, because it decides what the remedy even IS — review F5.
|
|
117
|
+
*
|
|
118
|
+
* `bundled` is a compiled-in constant: there is no file to replace and no poll to adopt a
|
|
119
|
+
* replacement, so "rotate the manifest" is not an action that operator can take. Telling them to do
|
|
120
|
+
* it anyway is worse than unhelpful, because the workaround they will reach for — repointing
|
|
121
|
+
* `CELLO_DIRECTORY_URL` at something not byte-equal to a bundled endpoint — makes `buildManifestDeps`
|
|
122
|
+
* return nothing, which starts the daemon with directory identity authentication SILENTLY OFF.
|
|
123
|
+
* Guidance that routes a stuck operator toward disabling a security control is a defect in the
|
|
124
|
+
* guidance.
|
|
125
|
+
*/
|
|
126
|
+
export type ManifestOrigin = "bundled" | "file";
|
|
127
|
+
/** What to actually DO about a manifest that needs replacing, given where it came from. */
|
|
128
|
+
export declare function remedyFor(origin: ManifestOrigin): string;
|
|
129
|
+
export declare function describeManifestValidity(v: ManifestValidity, origin?: ManifestOrigin): Record<string, unknown> | undefined;
|
|
130
|
+
/** Minimal structural logger — `domain.noun.verb` taxonomy, injected. */
|
|
131
|
+
export interface ManifestValidityLogger {
|
|
132
|
+
info(event: string, ctx?: Record<string, unknown>): void;
|
|
133
|
+
warn(event: string, ctx?: Record<string, unknown>): void;
|
|
134
|
+
error(event: string, ctx?: Record<string, unknown>): void;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* A check to call periodically, which logs each TRANSITION once.
|
|
138
|
+
*
|
|
139
|
+
* Returns a function rather than owning a timer: the roster sweep already ticks every 90–180 s on
|
|
140
|
+
* exactly the path where a manifest provider exists, so this rides it. A second timer measuring the
|
|
141
|
+
* same subsystem would be two things to stop, two things to test, and two places for the interval
|
|
142
|
+
* to drift out of agreement with the freshness bound.
|
|
143
|
+
*
|
|
144
|
+
* The latch is keyed on the STATE PLUS the expiry string, so rotating the manifest re-arms it. A
|
|
145
|
+
* bare boolean would mean an operator who rotated once could never be warned again — the warning
|
|
146
|
+
* would have been spent on a manifest that is no longer installed.
|
|
147
|
+
*/
|
|
148
|
+
export declare function startManifestValidityWatch(opts: {
|
|
149
|
+
getManifest: () => Pick<ConsortiumManifest, "not_before" | "expires"> | null | undefined;
|
|
150
|
+
logger: ManifestValidityLogger;
|
|
151
|
+
now?: () => number;
|
|
152
|
+
}): () => ManifestValidity;
|
|
153
|
+
//# sourceMappingURL=manifest-validity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-validity.d.ts","sourceRoot":"","sources":["../src/manifest-validity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,QAAiB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GACxB;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAC3B;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAC/C;;;;;;;GAOG;GACD;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/E,KAAK,EAAE,MAAM,GACZ,gBAAgB,CAgDlB;AAED;;;;;;GAMG;AACH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhD,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQxD;AAED,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,gBAAgB,EACnB,MAAM,GAAE,cAAuB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA+ErC;AAED,yEAAyE;AACzE,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,WAAW,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACzF,MAAM,EAAE,sBAAsB,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,MAAM,gBAAgB,CAqDzB"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-M15-MANIFEST-EXPIRY-LIVE-1 — a running daemon notices its own trust anchor expiring.
|
|
3
|
+
*
|
|
4
|
+
* ─── The gap ───────────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
The consortium manifest's validity window is enforced at boot (`verifyStartupManifest`) and, after
|
|
7
|
+
* that, in exactly ONE consumer: `signal-submission.ts` re-checks the HELD manifest at request time
|
|
8
|
+
* and refuses. Nothing else does — not directory identity authentication, not the ceremony roster.
|
|
9
|
+
*
|
|
10
|
+
* (An earlier version of this header said nothing re-checked the held manifest at all. That was
|
|
11
|
+
* wrong — the third false claim I have shipped in three units — and the correction matters, because
|
|
12
|
+
* the real shape is not "unchecked" but INCONSISTENT: the daemon refuses the lowest-stakes consumer
|
|
13
|
+
* and permits the two highest-stakes ones, invisibly. See the decision note below.)
|
|
14
|
+
*
|
|
15
|
+
* There is also a check that reads like coverage and is not: `http-manifest-poll.ts` refuses to
|
|
16
|
+
* ADOPT an expired manifest. That checks the manifest being FETCHED, never the one already held — so
|
|
17
|
+
* a daemon whose anchor has lapsed keeps polling, keeps correctly refusing expired replacements, and
|
|
18
|
+
* keeps using the expired anchor it already has.
|
|
19
|
+
*
|
|
20
|
+
* On the PRODUCTION DEFAULT it is worse: the bundled-manifest path wires no poll scheduler at all
|
|
21
|
+
* ("the bundled roster is static"), so there is not even a fetch that might have noticed.
|
|
22
|
+
*
|
|
23
|
+
* ─── Why it matters, concretely ────────────────────────────────────────────────────────────────
|
|
24
|
+
*
|
|
25
|
+
The manifest is the trust anchor for directory identity authentication (step 6) and for the node
|
|
26
|
+
* roster a threshold ceremony draws from — both re-read `getCurrentManifest()` at request time, so
|
|
27
|
+
* both genuinely run on whatever is held.
|
|
28
|
+
*
|
|
29
|
+
* What expiry means precisely (review F10, correcting my own overstatement): it is the NOTICE that
|
|
30
|
+
* the anchor may be out of date, not the mechanism by which it becomes so. The daemon trusts the
|
|
31
|
+
* identical roster the day BEFORE expiry; what keeps a removed node trusted is never having adopted
|
|
32
|
+
* v+1. So the accurate statement is that past expiry there is NO ASSURANCE the enforced roster is
|
|
33
|
+
* current — a node removed since then would still be trusted, and nothing here can say whether one
|
|
34
|
+
* was.
|
|
35
|
+
*
|
|
36
|
+
* ─── Found the wrong way round ─────────────────────────────────────────────────────────────────
|
|
37
|
+
*
|
|
38
|
+
* `DOD-M15-STALEROSTER-1` shipped a guidance string blaming an expired manifest for a state an
|
|
39
|
+
* expired manifest cannot reach (that daemon refuses to start). Review corrected it and pointed at
|
|
40
|
+
* where the hazard actually lives — here. After that unit, a daemon in this state reports its roster
|
|
41
|
+
* reading as `stale: false`: a confidently fresh measurement taken against a dead anchor, which is
|
|
42
|
+
* worse than the stale reading that line existed to fix.
|
|
43
|
+
*
|
|
44
|
+
* ─── Decision: report, do not kill ─────────────────────────────────────────────────────────────
|
|
45
|
+
*
|
|
46
|
+
A daemon does NOT tear itself down at the expiry instant. §2b invariant 2 backs this explicitly —
|
|
47
|
+
* *"Loud does not mean blocking… treating every failure as fatal is its own defect."*
|
|
48
|
+
*
|
|
49
|
+
* But review corrected the FRAMING, and the correction is worth keeping: the availability argument I
|
|
50
|
+
* originally made does not survive. The fleet-wide stop I claimed to be avoiding happens anyway, at
|
|
51
|
+
* each operator's next restart, via ADV-002 — report-only DEFERS that outage, it does not prevent
|
|
52
|
+
* it. The honest reason to warn rather than kill is that a wall-clock boundary is a bad trigger for
|
|
53
|
+
* tearing down live conversations, not that it avoids the outage.
|
|
54
|
+
*
|
|
55
|
+
* The real question was never global report-vs-kill; it is PER CONSUMER, and the repo has already
|
|
56
|
+
* ruled on one of them inconsistently. `signal-submission.ts` refuses a trust-signal submission on
|
|
57
|
+
* expiry, while `register-handler.ts` deals a FROST share against a roster re-resolved from the same
|
|
58
|
+
* lapsed manifest with no gate, and the challenge verifier authenticates a directory against it with
|
|
59
|
+
* no gate. **The daemon refuses its lowest-stakes consumer and permits its two highest-stakes ones.**
|
|
60
|
+
* That is not defended anywhere; it is carried as `DOD-M15-EXPIRY-CONSUMER-POLICY-1` rather than
|
|
61
|
+
* settled inside a reporting unit.
|
|
62
|
+
*/
|
|
63
|
+
/**
|
|
64
|
+
* How long before expiry the warning starts.
|
|
65
|
+
*
|
|
66
|
+
* Warning at the expiry instant is useless — the operator finds out once they are already running
|
|
67
|
+
* on a dead anchor. Seven days is chosen to cover a weekend plus the working days either side, which
|
|
68
|
+
* is the realistic floor for noticing an alert and rotating a threshold-signed artefact.
|
|
69
|
+
*/
|
|
70
|
+
export const MANIFEST_EXPIRY_WARNING_MS = 7 * 86_400_000;
|
|
71
|
+
/**
|
|
72
|
+
* Where does this manifest sit in its validity window, as of `nowMs`?
|
|
73
|
+
*
|
|
74
|
+
* Clock injected so the boundaries are tested exactly rather than approximately.
|
|
75
|
+
*/
|
|
76
|
+
export function classifyManifestValidity(manifest, nowMs) {
|
|
77
|
+
if (!manifest)
|
|
78
|
+
return { state: "not_configured" };
|
|
79
|
+
const expiresMs = Date.parse(manifest.expires);
|
|
80
|
+
/**
|
|
81
|
+
* AN UNREADABLE EXPIRY IS EXPIRED.
|
|
82
|
+
*
|
|
83
|
+
* `new Date("nonsense") <= now` is FALSE — every comparison against NaN is false — so the
|
|
84
|
+
* startup check's own shape waves a garbage timestamp through as though it were in-window. Valid
|
|
85
|
+
* is the answer that costs security here, so nothing unmeasurable may reach it.
|
|
86
|
+
*/
|
|
87
|
+
if (Number.isNaN(expiresMs))
|
|
88
|
+
return { state: "expired", expires: manifest.expires, secondsSince: 0 };
|
|
89
|
+
/**
|
|
90
|
+
* AN UNREADABLE `not_before` FAILS CLOSED TOO — review F3, and it was my own defect sitting
|
|
91
|
+
* directly under the comment above claiming it could not happen.
|
|
92
|
+
*
|
|
93
|
+
* The first cut wrote `if (!Number.isNaN(notBeforeMs) && nowMs < notBeforeMs)`, which SKIPS the
|
|
94
|
+
* window-open check entirely when the field is garbage and falls through to a possible `valid`.
|
|
95
|
+
* So `not_before: "2026-13-01T00:00:00Z"` — month thirteen, the shape a hand-edited or
|
|
96
|
+
* generator-bugged artefact actually has — classified as valid, contributed nothing to the status
|
|
97
|
+
* surface, and logged nothing. I handled the same case correctly for `expires` eleven lines up and
|
|
98
|
+
* then wrote the inverted guard for `not_before`, under a comment asserting the property.
|
|
99
|
+
*
|
|
100
|
+
* `signal-submission.ts` already had this right (`!Number.isFinite(expiresAt) || expiresAt <= now`)
|
|
101
|
+
* and is the precedent.
|
|
102
|
+
*/
|
|
103
|
+
const notBeforeMs = Date.parse(manifest.not_before);
|
|
104
|
+
if (Number.isNaN(notBeforeMs)) {
|
|
105
|
+
return { state: "unreadable_window", notBefore: manifest.not_before };
|
|
106
|
+
}
|
|
107
|
+
if (nowMs < notBeforeMs) {
|
|
108
|
+
return { state: "not_yet_valid", notBefore: manifest.not_before };
|
|
109
|
+
}
|
|
110
|
+
if (expiresMs <= nowMs) {
|
|
111
|
+
return { state: "expired", expires: manifest.expires, secondsSince: Math.floor((nowMs - expiresMs) / 1000) };
|
|
112
|
+
}
|
|
113
|
+
const remainingMs = expiresMs - nowMs;
|
|
114
|
+
const secondsRemaining = Math.floor(remainingMs / 1000);
|
|
115
|
+
// The constant directly, not an injectable parameter — review F9. A `warningMs` argument had no
|
|
116
|
+
// caller anywhere, and it was the ONE seam by which the two surfaces could ever disagree: the
|
|
117
|
+
// status path could not pass a custom window while the watch could. An unused knob whose only
|
|
118
|
+
// possible effect is drift between two readings of the same fact.
|
|
119
|
+
return remainingMs <= MANIFEST_EXPIRY_WARNING_MS
|
|
120
|
+
? { state: "expiring_soon", expires: manifest.expires, secondsRemaining }
|
|
121
|
+
: { state: "valid", expires: manifest.expires, secondsRemaining };
|
|
122
|
+
}
|
|
123
|
+
/** What to actually DO about a manifest that needs replacing, given where it came from. */
|
|
124
|
+
export function remedyFor(origin) {
|
|
125
|
+
return origin === "bundled"
|
|
126
|
+
? "This daemon uses the COMPILED-IN consortium manifest, so there is no file to replace: " +
|
|
127
|
+
"upgrade the @cello-protocol/connect package to get a newer one. Do NOT repoint " +
|
|
128
|
+
"CELLO_DIRECTORY_URL to get past this — an endpoint that is not byte-equal to a bundled one " +
|
|
129
|
+
"makes the daemon start with directory identity authentication switched off, which is a " +
|
|
130
|
+
"weaker client than the one you are trying to fix."
|
|
131
|
+
: "Replace the manifest file at CELLO_CONSORTIUM_MANIFEST with a current one.";
|
|
132
|
+
}
|
|
133
|
+
export function describeManifestValidity(v, origin = "file") {
|
|
134
|
+
/**
|
|
135
|
+
* `valid` contributes nothing — correct, and the rule this milestone repeats most.
|
|
136
|
+
*
|
|
137
|
+
* `not_configured` USED TO collapse into that silence, and it was the same defect one spread
|
|
138
|
+
* above: a daemon holding NO consortium manifest at all rendered byte-identically to one holding
|
|
139
|
+
* a fully valid, in-window trust anchor. Found by `DOD-M15-DIRAUTH-1`'s review, which noticed it
|
|
140
|
+
* is the exact condition that unit was writing 100+ lines to expose — same daemon, same boot.
|
|
141
|
+
*
|
|
142
|
+
* "Absent" and "healthy" must not look alike. That is `STALEROSTER-1`'s rule and it applies to the
|
|
143
|
+
* anchor as much as to the roster reading.
|
|
144
|
+
*/
|
|
145
|
+
if (v.state === "valid")
|
|
146
|
+
return undefined;
|
|
147
|
+
if (v.state === "not_configured") {
|
|
148
|
+
return {
|
|
149
|
+
manifest_anchor: "none",
|
|
150
|
+
manifest_validity_guidance: "There is NO consortium manifest on this daemon, so there is no trust anchor to have a " +
|
|
151
|
+
"validity window at all — the absence of an expiry warning here is not evidence of a healthy " +
|
|
152
|
+
"one. Directory identity authentication is off for the same reason; see " +
|
|
153
|
+
"directory_authentication for what that costs and how to turn it on.",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (v.state === "unreadable_window") {
|
|
157
|
+
return {
|
|
158
|
+
manifest_expired: false,
|
|
159
|
+
manifest_window_unreadable: true,
|
|
160
|
+
manifest_valid_from: v.notBefore,
|
|
161
|
+
manifest_validity_guidance: `The consortium manifest's not_before field cannot be parsed as a date (got ` +
|
|
162
|
+
`${JSON.stringify(v.notBefore)}), so this daemon cannot tell whether its trust anchor's ` +
|
|
163
|
+
"validity window has even opened. This is a MALFORMED manifest rather than a stale one — " +
|
|
164
|
+
"the usual causes are a hand-edited file or a broken generator. " + remedyFor(origin),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
if (v.state === "not_yet_valid") {
|
|
168
|
+
return {
|
|
169
|
+
manifest_expired: false,
|
|
170
|
+
manifest_not_yet_valid: true,
|
|
171
|
+
manifest_valid_from: v.notBefore,
|
|
172
|
+
manifest_validity_guidance: `The consortium manifest does not become valid until ${v.notBefore}, and this daemon is ` +
|
|
173
|
+
"still running against it. Either this machine's clock is wrong — the common cause, and the " +
|
|
174
|
+
"one to check first — or a manifest was rotated in ahead of its window. " + remedyFor(origin),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (v.state === "expiring_soon") {
|
|
178
|
+
const days = Math.floor(v.secondsRemaining / 86_400);
|
|
179
|
+
return {
|
|
180
|
+
manifest_expired: false,
|
|
181
|
+
manifest_expires_at: v.expires,
|
|
182
|
+
manifest_expires_in_days: days,
|
|
183
|
+
manifest_validity_guidance: `The consortium manifest expires in ${days} day(s), at ${v.expires}. Rotate it before then. ` +
|
|
184
|
+
"After expiry this daemon KEEPS RUNNING on the old manifest — it does not fail closed the " +
|
|
185
|
+
"way startup does — so nothing will stop working at the deadline and nothing will announce " +
|
|
186
|
+
"it except this field and one log line. A daemon RESTARTED after expiry will refuse to " +
|
|
187
|
+
"start, which is how this usually gets discovered, at the worst moment. " + remedyFor(origin),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
const days = Math.floor(v.secondsSince / 86_400);
|
|
191
|
+
return {
|
|
192
|
+
manifest_expired: true,
|
|
193
|
+
manifest_expires_at: v.expires,
|
|
194
|
+
manifest_expired_days_ago: days,
|
|
195
|
+
manifest_validity_guidance: `The consortium manifest EXPIRED at ${v.expires} (${days} day(s) ago) and this daemon is ` +
|
|
196
|
+
"still running on it. Its signatures no longer warrant the current consortium, so directory " +
|
|
197
|
+
"identity authentication and the threshold-ceremony roster are both being drawn from an " +
|
|
198
|
+
"anchor that has lapsed, so this daemon has NO ASSURANCE that the roster it enforces is the " +
|
|
199
|
+
"current one. A node removed from the consortium since then would still be trusted here, and " +
|
|
200
|
+
"nothing in this daemon can tell you whether one was. " + remedyFor(origin) + " Do NOT simply " +
|
|
201
|
+
"restart to clear this — a restart will REFUSE to start (startup fails closed on an expired " +
|
|
202
|
+
"manifest), so restarting without a fresh manifest turns a degraded daemon into a dead one.",
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* A check to call periodically, which logs each TRANSITION once.
|
|
207
|
+
*
|
|
208
|
+
* Returns a function rather than owning a timer: the roster sweep already ticks every 90–180 s on
|
|
209
|
+
* exactly the path where a manifest provider exists, so this rides it. A second timer measuring the
|
|
210
|
+
* same subsystem would be two things to stop, two things to test, and two places for the interval
|
|
211
|
+
* to drift out of agreement with the freshness bound.
|
|
212
|
+
*
|
|
213
|
+
* The latch is keyed on the STATE PLUS the expiry string, so rotating the manifest re-arms it. A
|
|
214
|
+
* bare boolean would mean an operator who rotated once could never be warned again — the warning
|
|
215
|
+
* would have been spent on a manifest that is no longer installed.
|
|
216
|
+
*/
|
|
217
|
+
export function startManifestValidityWatch(opts) {
|
|
218
|
+
const { getManifest, logger, now = Date.now } = opts;
|
|
219
|
+
let lastReported = null;
|
|
220
|
+
return () => {
|
|
221
|
+
const v = classifyManifestValidity(getManifest(), now());
|
|
222
|
+
const key = v.state === "not_configured" ? "not_configured"
|
|
223
|
+
: v.state === "not_yet_valid" || v.state === "unreadable_window" ? `${v.state}:${v.notBefore}`
|
|
224
|
+
: `${v.state}:${v.expires}`;
|
|
225
|
+
if (key === lastReported)
|
|
226
|
+
return v;
|
|
227
|
+
lastReported = key;
|
|
228
|
+
if (v.state === "expired") {
|
|
229
|
+
logger.error("directory.auth.manifest.expired.live", {
|
|
230
|
+
expiresAt: v.expires,
|
|
231
|
+
expiredDaysAgo: Math.floor(v.secondsSince / 86_400),
|
|
232
|
+
impact: "the daemon is STILL RUNNING on this manifest. Directory identity authentication and the " +
|
|
233
|
+
"threshold-ceremony roster are drawn from it at request time, so there is NO ASSURANCE " +
|
|
234
|
+
"the enforced roster is the current one — a node removed since then would still be " +
|
|
235
|
+
"trusted, and nothing here can say whether one was.",
|
|
236
|
+
guidance: "Replace the manifest (a file at CELLO_CONSORTIUM_MANIFEST, or an @cello-protocol/connect " +
|
|
237
|
+
"upgrade if this daemon uses the compiled-in one). Do not restart to clear it: startup " +
|
|
238
|
+
"fails closed on an expired manifest, so a restart without a fresh one turns a degraded " +
|
|
239
|
+
"daemon into a dead one.",
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
else if (v.state === "expiring_soon") {
|
|
243
|
+
logger.warn("directory.auth.manifest.expiring", {
|
|
244
|
+
expiresAt: v.expires,
|
|
245
|
+
daysRemaining: Math.floor(v.secondsRemaining / 86_400),
|
|
246
|
+
impact: "after this date the daemon keeps running on the expired manifest rather than failing closed.",
|
|
247
|
+
guidance: "Rotate before the date. A daemon RESTARTED after it will refuse to start.",
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
else if (v.state === "unreadable_window") {
|
|
251
|
+
logger.error("directory.auth.manifest.window.unreadable", {
|
|
252
|
+
notBefore: v.notBefore,
|
|
253
|
+
impact: "the manifest's not_before field does not parse as a date, so this daemon cannot tell " +
|
|
254
|
+
"whether its trust anchor's validity window has opened. It is running against it anyway.",
|
|
255
|
+
guidance: "The manifest is MALFORMED, not stale — a hand-edited file or a broken generator. Replace it.",
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
else if (v.state === "not_yet_valid") {
|
|
259
|
+
logger.error("directory.auth.manifest.not.yet.valid.live", {
|
|
260
|
+
notBefore: v.notBefore,
|
|
261
|
+
impact: "the daemon is running against a manifest whose validity window has not opened.",
|
|
262
|
+
guidance: "Check this machine's clock first — that is the common cause.",
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
return v;
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=manifest-validity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-validity.js","sourceRoot":"","sources":["../src/manifest-validity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO-M7-PERSIST-002 (AC-008): DB-backed IManifestVersionStore.
|
|
3
|
+
*
|
|
4
|
+
* The last-seen manifest version (which backs the anti-rollback monotonicity invariant across daemon
|
|
5
|
+
* restarts) lives in the `manifest_state` singleton row of the SQLCipher-encrypted daemon DB — not a
|
|
6
|
+
* plaintext `manifest-version.json` file. Same interface as the old FileManifestVersionStore, so the
|
|
7
|
+
* SignalingManager that consumes it is unchanged.
|
|
8
|
+
*
|
|
9
|
+
* Crypto reference: RFC 8032 context — the version number is not itself cryptographic, but its
|
|
10
|
+
* correct, durable persistence is load-bearing for anti-rollback security (a reset enables a manifest
|
|
11
|
+
* downgrade attack). Whole-DB SQLCipher now protects it at rest along with all other client state.
|
|
12
|
+
*/
|
|
13
|
+
import type { IManifestVersionStore } from "@cello-protocol/transport";
|
|
14
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
15
|
+
import type { Logger } from "./types.js";
|
|
16
|
+
/** Idempotent schema for the singleton manifest-version row. */
|
|
17
|
+
export declare function ensureManifestSchema(db: DaemonDatabase): void;
|
|
18
|
+
export declare class DbManifestVersionStore implements IManifestVersionStore {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(db: DaemonDatabase, logger: Logger);
|
|
21
|
+
getLastSeenVersion(): Promise<number | null>;
|
|
22
|
+
persistVersion(version: number): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=manifest-version-store-db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-version-store-db.d.ts","sourceRoot":"","sources":["../src/manifest-version-store-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAQ7D;AAED,qBAAa,sBAAuB,YAAW,qBAAqB;;gBAItD,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM;IAMxC,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAO5C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBrD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO-M7-PERSIST-002 (AC-008): DB-backed IManifestVersionStore.
|
|
3
|
+
*
|
|
4
|
+
* The last-seen manifest version (which backs the anti-rollback monotonicity invariant across daemon
|
|
5
|
+
* restarts) lives in the `manifest_state` singleton row of the SQLCipher-encrypted daemon DB — not a
|
|
6
|
+
* plaintext `manifest-version.json` file. Same interface as the old FileManifestVersionStore, so the
|
|
7
|
+
* SignalingManager that consumes it is unchanged.
|
|
8
|
+
*
|
|
9
|
+
* Crypto reference: RFC 8032 context — the version number is not itself cryptographic, but its
|
|
10
|
+
* correct, durable persistence is load-bearing for anti-rollback security (a reset enables a manifest
|
|
11
|
+
* downgrade attack). Whole-DB SQLCipher now protects it at rest along with all other client state.
|
|
12
|
+
*/
|
|
13
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
14
|
+
/** Idempotent schema for the singleton manifest-version row. */
|
|
15
|
+
export function ensureManifestSchema(db) {
|
|
16
|
+
db.exec(`
|
|
17
|
+
CREATE TABLE IF NOT EXISTS manifest_state (
|
|
18
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
19
|
+
last_seen_version INTEGER,
|
|
20
|
+
updated_at INTEGER NOT NULL
|
|
21
|
+
)
|
|
22
|
+
`);
|
|
23
|
+
}
|
|
24
|
+
export class DbManifestVersionStore {
|
|
25
|
+
#db;
|
|
26
|
+
#logger;
|
|
27
|
+
constructor(db, logger) {
|
|
28
|
+
this.#db = db;
|
|
29
|
+
this.#logger = logger;
|
|
30
|
+
ensureManifestSchema(db);
|
|
31
|
+
}
|
|
32
|
+
async getLastSeenVersion() {
|
|
33
|
+
const row = this.#db
|
|
34
|
+
.prepare("SELECT last_seen_version FROM manifest_state WHERE id = 1")
|
|
35
|
+
.get();
|
|
36
|
+
return row && row.last_seen_version != null ? Number(row.last_seen_version) : null;
|
|
37
|
+
}
|
|
38
|
+
async persistVersion(version) {
|
|
39
|
+
// Upsert the singleton row. Atomic within the encrypted DB — no temp-file rename dance.
|
|
40
|
+
try {
|
|
41
|
+
this.#db
|
|
42
|
+
.prepare(`INSERT INTO manifest_state (id, last_seen_version, updated_at)
|
|
43
|
+
VALUES (1, ?, ?)
|
|
44
|
+
ON CONFLICT(id) DO UPDATE SET last_seen_version = excluded.last_seen_version, updated_at = excluded.updated_at`)
|
|
45
|
+
.run(version, Date.now());
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
// AC-012: a distinct, actionable failure — never a silent no-op (a lost anti-rollback version
|
|
49
|
+
// would re-open a manifest-downgrade window).
|
|
50
|
+
this.#logger.error("persist.manifest.persist.failed", { version, error: extractErrorMessage(err) });
|
|
51
|
+
const e = new Error(`manifest_persist_failed: ${extractErrorMessage(err)}`);
|
|
52
|
+
e.code = "manifest_persist_failed";
|
|
53
|
+
throw e;
|
|
54
|
+
}
|
|
55
|
+
this.#logger.info("persist.manifest.version.persisted", { version });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=manifest-version-store-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-version-store-db.js","sourceRoot":"","sources":["../src/manifest-version-store-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,gEAAgE;AAChE,MAAM,UAAU,oBAAoB,CAAC,EAAkB;IACrD,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,sBAAsB;IACxB,GAAG,CAAiB;IACpB,OAAO,CAAS;IAEzB,YAAY,EAAkB,EAAE,MAAc;QAC5C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;aACjB,OAAO,CAAC,2DAA2D,CAAC;aACpE,GAAG,EAAsD,CAAC;QAC7D,OAAO,GAAG,IAAI,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,wFAAwF;QACxF,IAAI,CAAC;YACH,IAAI,CAAC,GAAG;iBACL,OAAO,CACN;;0HAEgH,CACjH;iBACA,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,8FAA8F;YAC9F,8CAA8C;YAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpG,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,4BAA4B,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3E,CAA+B,CAAC,IAAI,GAAG,yBAAyB,CAAC;YAClE,MAAM,CAAC,CAAC;QACV,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M7-MANIFEST-002 — Manifest version store re-exports.
|
|
3
|
+
*
|
|
4
|
+
* IManifestVersionStore persists the last-seen manifest version number to enforce
|
|
5
|
+
* version monotonicity across daemon restarts. A manifest with a lower version
|
|
6
|
+
* number than the last-seen version is rejected as a potential rollback attack.
|
|
7
|
+
*
|
|
8
|
+
* InMemoryManifestVersionStore: stub for tests and initial deployments.
|
|
9
|
+
* DbManifestVersionStore (manifest-version-store-db.ts): the production store — the version lives in
|
|
10
|
+
* the SQLCipher-encrypted manifest_state table (PERSIST-002 AC-008). The old file-backed store was
|
|
11
|
+
* removed.
|
|
12
|
+
*/
|
|
13
|
+
import type { IManifestVersionStore } from "@cello-protocol/transport";
|
|
14
|
+
export { InMemoryManifestVersionStore } from "@cello-protocol/transport";
|
|
15
|
+
export type { IManifestVersionStore };
|
|
16
|
+
//# sourceMappingURL=manifest-version-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-version-store.d.ts","sourceRoot":"","sources":["../src/manifest-version-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAEzE,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M7-MANIFEST-002 — Manifest version store re-exports.
|
|
3
|
+
*
|
|
4
|
+
* IManifestVersionStore persists the last-seen manifest version number to enforce
|
|
5
|
+
* version monotonicity across daemon restarts. A manifest with a lower version
|
|
6
|
+
* number than the last-seen version is rejected as a potential rollback attack.
|
|
7
|
+
*
|
|
8
|
+
* InMemoryManifestVersionStore: stub for tests and initial deployments.
|
|
9
|
+
* DbManifestVersionStore (manifest-version-store-db.ts): the production store — the version lives in
|
|
10
|
+
* the SQLCipher-encrypted manifest_state table (PERSIST-002 AC-008). The old file-backed store was
|
|
11
|
+
* removed.
|
|
12
|
+
*/
|
|
13
|
+
// Re-export from transport stubs for convenience
|
|
14
|
+
export { InMemoryManifestVersionStore } from "@cello-protocol/transport";
|
|
15
|
+
//# sourceMappingURL=manifest-version-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-version-store.js","sourceRoot":"","sources":["../src/manifest-version-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,iDAAiD;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC"}
|