@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 @@
|
|
|
1
|
+
{"version":3,"file":"registry-poll.js","sourceRoot":"","sources":["../src/registry-poll.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-REGISTRY-1 — DB-backed registry version store (anti-rollback).
|
|
3
|
+
*
|
|
4
|
+
* Same shape as DbManifestVersionStore — a singleton row in the encrypted daemon DB
|
|
5
|
+
* holding the last-seen registry version. A registry fetch whose version is <= the
|
|
6
|
+
* persisted version is refused (monotonicity across restarts prevents rollback attacks
|
|
7
|
+
* where a compromised directory serves an older registry to un-classify a new type).
|
|
8
|
+
*/
|
|
9
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
10
|
+
import type { Logger } from "./types.js";
|
|
11
|
+
export interface IRegistryVersionStore {
|
|
12
|
+
getLastSeenVersion(): number | null;
|
|
13
|
+
persistVersion(version: number): void;
|
|
14
|
+
}
|
|
15
|
+
export declare function ensureRegistrySchema(db: DaemonDatabase): void;
|
|
16
|
+
export declare class DbRegistryVersionStore implements IRegistryVersionStore {
|
|
17
|
+
#private;
|
|
18
|
+
constructor(db: DaemonDatabase, logger: Logger);
|
|
19
|
+
getLastSeenVersion(): number | null;
|
|
20
|
+
persistVersion(version: number): void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=registry-version-store-db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-version-store-db.d.ts","sourceRoot":"","sources":["../src/registry-version-store-db.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAQ7D;AAED,qBAAa,sBAAuB,YAAW,qBAAqB;;gBAItD,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM;IAM9C,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAOnC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAiBtC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-REGISTRY-1 — DB-backed registry version store (anti-rollback).
|
|
3
|
+
*
|
|
4
|
+
* Same shape as DbManifestVersionStore — a singleton row in the encrypted daemon DB
|
|
5
|
+
* holding the last-seen registry version. A registry fetch whose version is <= the
|
|
6
|
+
* persisted version is refused (monotonicity across restarts prevents rollback attacks
|
|
7
|
+
* where a compromised directory serves an older registry to un-classify a new type).
|
|
8
|
+
*/
|
|
9
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
10
|
+
export function ensureRegistrySchema(db) {
|
|
11
|
+
db.exec(`
|
|
12
|
+
CREATE TABLE IF NOT EXISTS registry_state (
|
|
13
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
14
|
+
last_seen_version INTEGER,
|
|
15
|
+
updated_at INTEGER NOT NULL
|
|
16
|
+
)
|
|
17
|
+
`);
|
|
18
|
+
}
|
|
19
|
+
export class DbRegistryVersionStore {
|
|
20
|
+
#db;
|
|
21
|
+
#logger;
|
|
22
|
+
constructor(db, logger) {
|
|
23
|
+
this.#db = db;
|
|
24
|
+
this.#logger = logger;
|
|
25
|
+
ensureRegistrySchema(db);
|
|
26
|
+
}
|
|
27
|
+
getLastSeenVersion() {
|
|
28
|
+
const row = this.#db
|
|
29
|
+
.prepare("SELECT last_seen_version FROM registry_state WHERE id = 1")
|
|
30
|
+
.get();
|
|
31
|
+
return row && row.last_seen_version != null ? Number(row.last_seen_version) : null;
|
|
32
|
+
}
|
|
33
|
+
persistVersion(version) {
|
|
34
|
+
try {
|
|
35
|
+
this.#db
|
|
36
|
+
.prepare(`INSERT INTO registry_state (id, last_seen_version, updated_at)
|
|
37
|
+
VALUES (1, ?, ?)
|
|
38
|
+
ON CONFLICT(id) DO UPDATE SET last_seen_version = excluded.last_seen_version, updated_at = excluded.updated_at`)
|
|
39
|
+
.run(version, Date.now());
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
this.#logger.error("registry.version.persist.failed", { version, error: extractErrorMessage(err) });
|
|
43
|
+
const e = new Error(`registry_persist_failed: ${extractErrorMessage(err)}`);
|
|
44
|
+
e.code = "registry_persist_failed";
|
|
45
|
+
throw e;
|
|
46
|
+
}
|
|
47
|
+
this.#logger.info("registry.version.persisted", { version });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=registry-version-store-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-version-store-db.js","sourceRoot":"","sources":["../src/registry-version-store-db.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAOzD,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,kBAAkB;QAChB,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,cAAc,CAAC,OAAe;QAC5B,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,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,4BAA4B,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a relay is, decided in ONE place.
|
|
3
|
+
*
|
|
4
|
+
* The directory hands this daemon the current relay pool on every signaling connect. Past session
|
|
5
|
+
* rows also carry relay addresses, frozen at whatever the relay advertised when that session began.
|
|
6
|
+
* Those two disagree after any fleet change — on 2026-09-15 a saved row still held the pre-TLS
|
|
7
|
+
* `/ip4/…:4001/ws` address, and the mailbox pull, which read saved rows alone, dialled it 1,904
|
|
8
|
+
* times while three parked messages waited behind it.
|
|
9
|
+
*
|
|
10
|
+
* So the directory's pool comes first, per relay peer id, and saved rows only add relays the
|
|
11
|
+
* directory did not list. Reservation and mailbox pull both use this, so they cannot disagree.
|
|
12
|
+
*/
|
|
13
|
+
export interface RelayEndpoint {
|
|
14
|
+
relayPeerId: string;
|
|
15
|
+
relayAddrs: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare function mergeRelayEndpoints(directoryPool: readonly RelayEndpoint[] | undefined, persisted: readonly RelayEndpoint[]): RelayEndpoint[];
|
|
18
|
+
//# sourceMappingURL=relay-endpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-endpoints.d.ts","sourceRoot":"","sources":["../src/relay-endpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,EACnD,SAAS,EAAE,SAAS,aAAa,EAAE,GAClC,aAAa,EAAE,CAMjB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function mergeRelayEndpoints(directoryPool, persisted) {
|
|
2
|
+
const merged = new Map();
|
|
3
|
+
for (const ep of [...(directoryPool ?? []), ...persisted]) {
|
|
4
|
+
if (!merged.has(ep.relayPeerId))
|
|
5
|
+
merged.set(ep.relayPeerId, ep);
|
|
6
|
+
}
|
|
7
|
+
return [...merged.values()];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=relay-endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-endpoints.js","sourceRoot":"","sources":["../src/relay-endpoints.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,mBAAmB,CACjC,aAAmD,EACnD,SAAmC;IAEnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO Daemon — relay-only routing (`DOD-M15-RELAYONLY-1`).
|
|
3
|
+
*
|
|
4
|
+
* The feature half of the IP disclosure. A direct session reveals the operator's IP permanently;
|
|
5
|
+
* relay routing is the mitigation, and until now it was a footnote in an architecture document
|
|
6
|
+
* rather than something an operator could switch on.
|
|
7
|
+
*
|
|
8
|
+
* ─── ⚠️ WHY THIS IS NOT A `transport_mode` SETTING ─────────────────────────────────────────────
|
|
9
|
+
*
|
|
10
|
+
* `transport_mode` DOES NOT CONTROL WHETHER A DIRECT CONNECTION HAPPENS, and a setting that wrote it
|
|
11
|
+
* would be a privacy control that does not protect privacy:
|
|
12
|
+
*
|
|
13
|
+
* - The directory already defaults the label to relay (`requestedTransportMode ?? "relay"`), so in
|
|
14
|
+
* the ordinary case the label ALREADY reads "relay".
|
|
15
|
+
* - And the client dials directly anyway — the gate is `counterparty_session_addrs.length > 0`,
|
|
16
|
+
* *"regardless of the transport_mode LABEL"*, in `initiate-session-handler.ts`'s own words.
|
|
17
|
+
*
|
|
18
|
+
* So the IP is exposed today on a path whose label already claims otherwise, and an operator who set
|
|
19
|
+
* a label-only flag would be told they were protected while they were not.
|
|
20
|
+
*
|
|
21
|
+
* ─── The two halves, and why the second is the one that makes it a control ────────────────────
|
|
22
|
+
*
|
|
23
|
+
* A direct connection leaks the IP in BOTH directions:
|
|
24
|
+
*
|
|
25
|
+
* 1. **We dial only their CIRCUIT** — `dialableAddrs`. Dialling their direct address hands them
|
|
26
|
+
* ours; dialling the circuit terminates at the relay and reveals nothing.
|
|
27
|
+
* 2. **We publish only our own CIRCUIT** — `publishableEndpoint`. The only route they hold points
|
|
28
|
+
* at the relay, which protects the operator **even against a counterparty who ignores the flag**.
|
|
29
|
+
*
|
|
30
|
+
* The second is load-bearing: *a control that depends on the other side honouring it is not a
|
|
31
|
+
* control.* The first alone would leave us reachable by anyone who kept our address.
|
|
32
|
+
*
|
|
33
|
+
* ⚠️ **AND NEITHER HALF IS SUFFICIENT WHILE libp2p CAN SPEAK FOR US.** These functions filter what
|
|
34
|
+
* the DIRECTORY is told. `identify` hands a peer our listen addresses on the first relayed
|
|
35
|
+
* connection, and `dcutr` actively hole-punches a relayed connection into a direct one — the inbound
|
|
36
|
+
* side starts that upgrade, and a relay-only responder IS the inbound side. Both bypass everything
|
|
37
|
+
* here, peer-to-peer. `createNode`'s `holePunch: { enabled: false }` closes the second; the announce
|
|
38
|
+
* filter closes the first. **Without those, this file filters the paperwork and leaves the wire
|
|
39
|
+
* open** — see `DOD-M15-RELAYONLY-1`.
|
|
40
|
+
*
|
|
41
|
+
* `publishableEndpoint` is applied INSIDE `getStandingReceiverInfo` — the single method both publish
|
|
42
|
+
* paths draw from — rather than at its call sites. Suppressing at call sites would be a hand-kept
|
|
43
|
+
* list, and a fourth publish path added later would leak while every test stayed green. At the choke
|
|
44
|
+
* point a new caller inherits the protection instead of having to be told about it.
|
|
45
|
+
*/
|
|
46
|
+
/** The per-agent settings key. Lower-snake, dotted namespace, per `agent-settings-keys.ts`. */
|
|
47
|
+
export declare const RELAY_ONLY_KEY = "transport.relay_only";
|
|
48
|
+
/**
|
|
49
|
+
* Is relay-only routing ON for this agent?
|
|
50
|
+
*
|
|
51
|
+
* ⚠️ THE FAILURE DIRECTION IS CHOSEN, not incidental. **Only the exact string `"true"` is ON.**
|
|
52
|
+
* Unset reads OFF because the daemon must run correctly on defaults alone; a corrupt or unparseable
|
|
53
|
+
* value also reads OFF, because reading a value nobody validated as ON would silently break every
|
|
54
|
+
* ordinary direct session.
|
|
55
|
+
*
|
|
56
|
+
* That leaves one hazard — a typo'd value that the operator believes turned the control on — and it
|
|
57
|
+
* is closed at the WRITE boundary instead: `validateSettingValue` refuses anything but `"true"` and
|
|
58
|
+
* `"false"`, loudly, so a mistyped value can never be stored to be misread here.
|
|
59
|
+
*/
|
|
60
|
+
export declare function isRelayOnly(getSetting: (key: string) => string | null): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* The setting's state when the read itself may fail — `"on" | "off" | "unknown"`.
|
|
63
|
+
*
|
|
64
|
+
* ⚠️ **"THE DATABASE IS GONE" IS NOT A VALUE, AND TREATING IT AS ONE FAILS TOWARD DISCLOSURE.**
|
|
65
|
+
* `getSetting` returns `null` both for *unset* and for *no database*, and `isRelayOnly` reads both
|
|
66
|
+
* as OFF. Unset-means-off is right; **db-gone-means-off is not** — the standing receiver outlives
|
|
67
|
+
* the database during shutdown, so an offer arriving in that window would publish the operator's
|
|
68
|
+
* real addresses with relay-only switched on.
|
|
69
|
+
*
|
|
70
|
+
* A read that THROWS is also `"unknown"` rather than an escaping exception: this sits on a ceremony
|
|
71
|
+
* path with no catch, where a throw becomes an unhandled rejection and the offer vanishes with no
|
|
72
|
+
* local log — the initiator then sees `counterparty_did_not_accept` and blames its own subsystem.
|
|
73
|
+
*
|
|
74
|
+
* The caller decides what `"unknown"` costs. For publishing, it must cost a refusal, never a guess.
|
|
75
|
+
*/
|
|
76
|
+
export declare function relayOnlyState(getSetting: (key: string) => string | null, readable: boolean): "on" | "off" | "unknown";
|
|
77
|
+
/** A session-transport endpoint as published to a counterparty. */
|
|
78
|
+
export interface PublishableEndpoint {
|
|
79
|
+
peerId: string;
|
|
80
|
+
addrs: string[];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* A relay-CIRCUIT multiaddr — the address that discloses nothing about the operator.
|
|
84
|
+
*
|
|
85
|
+
* ⚠️ THIS IS THE DISTINCTION THE WHOLE UNIT TURNS ON, and getting it wrong the first time took the
|
|
86
|
+
* operator OFF THE NETWORK rather than making them private. A `/p2p-circuit` address names the
|
|
87
|
+
* **RELAY's** address and our peer id. It terminates at the relay. Publishing one tells a
|
|
88
|
+
* counterparty how to reach us *through* the relay and tells them nothing about where we are;
|
|
89
|
+
* dialing one reveals us to the relay we already chose, not to them.
|
|
90
|
+
*
|
|
91
|
+
* So relay-only is not "no addresses". It is "circuit addresses only".
|
|
92
|
+
*/
|
|
93
|
+
export declare function isCircuitAddr(addr: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* The endpoint as it may leave this machine.
|
|
96
|
+
*
|
|
97
|
+
* ⚠️ **AN EMPTY ADDRESS ARRAY IS NOT A PRIVATE FRAME, IT IS A MALFORMED ONE.** The first build of
|
|
98
|
+
* this published `addrs: []` and the directory refuses exactly that on both sides — a
|
|
99
|
+
* `session_request` whose `initiator_session_addrs` is empty is rejected outright, and a
|
|
100
|
+
* `session_offer_accept` is only folded in `if (counterparty_session_addrs.length > 0)`, **with no
|
|
101
|
+
* `else`**, so the accept was silently dropped and the offer waiter never resolved. The operator
|
|
102
|
+
* switched on a privacy control and was told their counterparty was offline.
|
|
103
|
+
*
|
|
104
|
+
* So we publish the **circuit-only subset**: enough for the directory to build a real assignment and
|
|
105
|
+
* for the counterparty to reach us over the relay, and nothing that points at the operator.
|
|
106
|
+
*
|
|
107
|
+
* A genuinely empty result is meaningful and is NOT silently published — see `relayOnlyReachable`.
|
|
108
|
+
* A null endpoint stays null: "no standing receiver" and "a receiver at no address" are different
|
|
109
|
+
* facts, and collapsing them would let a caller advertise an endpoint that does not exist.
|
|
110
|
+
*/
|
|
111
|
+
export declare function publishableEndpoint<T extends PublishableEndpoint>(endpoint: T | null, relayOnly: boolean): T | PublishableEndpoint | null;
|
|
112
|
+
/**
|
|
113
|
+
* Can a relay-only agent actually be reached with what it is about to publish?
|
|
114
|
+
*
|
|
115
|
+
* FALSE means it holds **no relay reservation**, so the circuit-only subset is empty.
|
|
116
|
+
*
|
|
117
|
+
* ⚠️ **"YET" WAS DROPPED FROM THAT SENTENCE ON PURPOSE — 056-SLOTDEAD.** It meant "the login walk
|
|
118
|
+
* has not got there yet", i.e. wait and it will become true on its own. Since 055-ONDEMAND an idle
|
|
119
|
+
* agent holds none and never will: the slot is taken at offer time, so this is asked AFTER the
|
|
120
|
+
* on-demand reserve and a FALSE here means that reserve genuinely failed. Reading it as "not yet"
|
|
121
|
+
* would argue for retrying rather than refusing, on a call that is waiting for an answer now.
|
|
122
|
+
*
|
|
123
|
+
* That must be a LOUD LOCAL REFUSAL rather than an empty publish: an empty publish is refused by the
|
|
124
|
+
* directory as malformed and surfaces to the operator as "the counterparty is offline", which is a
|
|
125
|
+
* lie about someone else's state caused by a setting on this machine.
|
|
126
|
+
*/
|
|
127
|
+
export declare function relayOnlyReachable(endpoint: PublishableEndpoint | null, relayOnly: boolean): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Which of the counterparty's advertised addresses may we dial?
|
|
130
|
+
*
|
|
131
|
+
* ⚠️ Returns the FILTERED LIST, not a boolean, because "relay-only" does not mean "do not connect" —
|
|
132
|
+
* it means "connect only over the circuit". The first build refused every address including the
|
|
133
|
+
* `/p2p-circuit` one, which is the relay route this setting exists to force everything onto, so it
|
|
134
|
+
* dropped every session onto the store-and-forward backstop.
|
|
135
|
+
*
|
|
136
|
+
* The counterparty may not be relay-only themselves, so they will still advertise direct addresses:
|
|
137
|
+
* those are dropped, because dialing one hands them our IP with our own setting switched on.
|
|
138
|
+
*/
|
|
139
|
+
export declare function dialableAddrs(addrs: readonly string[], relayOnly: boolean): string[];
|
|
140
|
+
//# sourceMappingURL=relay-only.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-only.d.ts","sourceRoot":"","sources":["../src/relay-only.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAGH,+FAA+F;AAC/F,eAAO,MAAM,cAAc,yBAAyB,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAE/E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,EAC1C,QAAQ,EAAE,OAAO,GAChB,IAAI,GAAG,KAAK,GAAG,SAAS,CAO1B;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA+BnD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,mBAAmB,EAC/D,QAAQ,EAAE,CAAC,GAAG,IAAI,EAClB,SAAS,EAAE,OAAO,GACjB,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAIhC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAIpG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,EAAE,CAGpF"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO Daemon — relay-only routing (`DOD-M15-RELAYONLY-1`).
|
|
3
|
+
*
|
|
4
|
+
* The feature half of the IP disclosure. A direct session reveals the operator's IP permanently;
|
|
5
|
+
* relay routing is the mitigation, and until now it was a footnote in an architecture document
|
|
6
|
+
* rather than something an operator could switch on.
|
|
7
|
+
*
|
|
8
|
+
* ─── ⚠️ WHY THIS IS NOT A `transport_mode` SETTING ─────────────────────────────────────────────
|
|
9
|
+
*
|
|
10
|
+
* `transport_mode` DOES NOT CONTROL WHETHER A DIRECT CONNECTION HAPPENS, and a setting that wrote it
|
|
11
|
+
* would be a privacy control that does not protect privacy:
|
|
12
|
+
*
|
|
13
|
+
* - The directory already defaults the label to relay (`requestedTransportMode ?? "relay"`), so in
|
|
14
|
+
* the ordinary case the label ALREADY reads "relay".
|
|
15
|
+
* - And the client dials directly anyway — the gate is `counterparty_session_addrs.length > 0`,
|
|
16
|
+
* *"regardless of the transport_mode LABEL"*, in `initiate-session-handler.ts`'s own words.
|
|
17
|
+
*
|
|
18
|
+
* So the IP is exposed today on a path whose label already claims otherwise, and an operator who set
|
|
19
|
+
* a label-only flag would be told they were protected while they were not.
|
|
20
|
+
*
|
|
21
|
+
* ─── The two halves, and why the second is the one that makes it a control ────────────────────
|
|
22
|
+
*
|
|
23
|
+
* A direct connection leaks the IP in BOTH directions:
|
|
24
|
+
*
|
|
25
|
+
* 1. **We dial only their CIRCUIT** — `dialableAddrs`. Dialling their direct address hands them
|
|
26
|
+
* ours; dialling the circuit terminates at the relay and reveals nothing.
|
|
27
|
+
* 2. **We publish only our own CIRCUIT** — `publishableEndpoint`. The only route they hold points
|
|
28
|
+
* at the relay, which protects the operator **even against a counterparty who ignores the flag**.
|
|
29
|
+
*
|
|
30
|
+
* The second is load-bearing: *a control that depends on the other side honouring it is not a
|
|
31
|
+
* control.* The first alone would leave us reachable by anyone who kept our address.
|
|
32
|
+
*
|
|
33
|
+
* ⚠️ **AND NEITHER HALF IS SUFFICIENT WHILE libp2p CAN SPEAK FOR US.** These functions filter what
|
|
34
|
+
* the DIRECTORY is told. `identify` hands a peer our listen addresses on the first relayed
|
|
35
|
+
* connection, and `dcutr` actively hole-punches a relayed connection into a direct one — the inbound
|
|
36
|
+
* side starts that upgrade, and a relay-only responder IS the inbound side. Both bypass everything
|
|
37
|
+
* here, peer-to-peer. `createNode`'s `holePunch: { enabled: false }` closes the second; the announce
|
|
38
|
+
* filter closes the first. **Without those, this file filters the paperwork and leaves the wire
|
|
39
|
+
* open** — see `DOD-M15-RELAYONLY-1`.
|
|
40
|
+
*
|
|
41
|
+
* `publishableEndpoint` is applied INSIDE `getStandingReceiverInfo` — the single method both publish
|
|
42
|
+
* paths draw from — rather than at its call sites. Suppressing at call sites would be a hand-kept
|
|
43
|
+
* list, and a fourth publish path added later would leak while every test stayed green. At the choke
|
|
44
|
+
* point a new caller inherits the protection instead of having to be told about it.
|
|
45
|
+
*/
|
|
46
|
+
/** The per-agent settings key. Lower-snake, dotted namespace, per `agent-settings-keys.ts`. */
|
|
47
|
+
export const RELAY_ONLY_KEY = "transport.relay_only";
|
|
48
|
+
/**
|
|
49
|
+
* Is relay-only routing ON for this agent?
|
|
50
|
+
*
|
|
51
|
+
* ⚠️ THE FAILURE DIRECTION IS CHOSEN, not incidental. **Only the exact string `"true"` is ON.**
|
|
52
|
+
* Unset reads OFF because the daemon must run correctly on defaults alone; a corrupt or unparseable
|
|
53
|
+
* value also reads OFF, because reading a value nobody validated as ON would silently break every
|
|
54
|
+
* ordinary direct session.
|
|
55
|
+
*
|
|
56
|
+
* That leaves one hazard — a typo'd value that the operator believes turned the control on — and it
|
|
57
|
+
* is closed at the WRITE boundary instead: `validateSettingValue` refuses anything but `"true"` and
|
|
58
|
+
* `"false"`, loudly, so a mistyped value can never be stored to be misread here.
|
|
59
|
+
*/
|
|
60
|
+
export function isRelayOnly(getSetting) {
|
|
61
|
+
return getSetting(RELAY_ONLY_KEY) === "true";
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The setting's state when the read itself may fail — `"on" | "off" | "unknown"`.
|
|
65
|
+
*
|
|
66
|
+
* ⚠️ **"THE DATABASE IS GONE" IS NOT A VALUE, AND TREATING IT AS ONE FAILS TOWARD DISCLOSURE.**
|
|
67
|
+
* `getSetting` returns `null` both for *unset* and for *no database*, and `isRelayOnly` reads both
|
|
68
|
+
* as OFF. Unset-means-off is right; **db-gone-means-off is not** — the standing receiver outlives
|
|
69
|
+
* the database during shutdown, so an offer arriving in that window would publish the operator's
|
|
70
|
+
* real addresses with relay-only switched on.
|
|
71
|
+
*
|
|
72
|
+
* A read that THROWS is also `"unknown"` rather than an escaping exception: this sits on a ceremony
|
|
73
|
+
* path with no catch, where a throw becomes an unhandled rejection and the offer vanishes with no
|
|
74
|
+
* local log — the initiator then sees `counterparty_did_not_accept` and blames its own subsystem.
|
|
75
|
+
*
|
|
76
|
+
* The caller decides what `"unknown"` costs. For publishing, it must cost a refusal, never a guess.
|
|
77
|
+
*/
|
|
78
|
+
export function relayOnlyState(getSetting, readable) {
|
|
79
|
+
if (!readable)
|
|
80
|
+
return "unknown";
|
|
81
|
+
try {
|
|
82
|
+
return getSetting(RELAY_ONLY_KEY) === "true" ? "on" : "off";
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return "unknown";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* A relay-CIRCUIT multiaddr — the address that discloses nothing about the operator.
|
|
90
|
+
*
|
|
91
|
+
* ⚠️ THIS IS THE DISTINCTION THE WHOLE UNIT TURNS ON, and getting it wrong the first time took the
|
|
92
|
+
* operator OFF THE NETWORK rather than making them private. A `/p2p-circuit` address names the
|
|
93
|
+
* **RELAY's** address and our peer id. It terminates at the relay. Publishing one tells a
|
|
94
|
+
* counterparty how to reach us *through* the relay and tells them nothing about where we are;
|
|
95
|
+
* dialing one reveals us to the relay we already chose, not to them.
|
|
96
|
+
*
|
|
97
|
+
* So relay-only is not "no addresses". It is "circuit addresses only".
|
|
98
|
+
*/
|
|
99
|
+
export function isCircuitAddr(addr) {
|
|
100
|
+
// ⚠️ PARSED, never substring-matched. `addr.includes("/p2p-circuit")` was defeatable by the
|
|
101
|
+
// COUNTERPARTY, who controls these strings — the directory copies them verbatim and the FROST
|
|
102
|
+
// signature attests that the quorum agreed on the assignment, NOT that its contents are circuits.
|
|
103
|
+
//
|
|
104
|
+
// /dns4/p2p-circuit.attacker.example/tcp/443/p2p/12D3KooWTheirs
|
|
105
|
+
//
|
|
106
|
+
// contains the literal text, resolves through the DNS transport, and would have been dialled
|
|
107
|
+
// directly — handing over the operator's IP with relay-only switched ON, while the suppression log
|
|
108
|
+
// reported `suppressed: 0`. A control a peer can defeat by naming a host is precisely what this
|
|
109
|
+
// line rules out.
|
|
110
|
+
//
|
|
111
|
+
// EXACT SEGMENT match on the multiaddr's own `/`-delimited components. `p2p-circuit` is a
|
|
112
|
+
// standalone protocol with no value, so it appears as a whole segment; a hostname that merely
|
|
113
|
+
// CONTAINS the text appears as `p2p-circuit.attacker.example`, which is a different segment and is
|
|
114
|
+
// correctly rejected.
|
|
115
|
+
//
|
|
116
|
+
// Deliberately NOT `multiaddr().protoNames()`, which would be the stricter parse: that lives in
|
|
117
|
+
// `@multiformats/multiaddr`, a dependency `core/daemon` does not have. Reaching for it here would
|
|
118
|
+
// add a package to the daemon to make one boolean stricter, and this client is installed on
|
|
119
|
+
// operators' machines where install weight is a user-facing cost. The exact-segment test defeats
|
|
120
|
+
// the demonstrated bypass with no new dependency.
|
|
121
|
+
//
|
|
122
|
+
// ⚠️ RESIDUAL, stated rather than left implied, and TRACKED as `DOD-M15-CIRCUIT-RELAY-BIND-1`:
|
|
123
|
+
// this proves the address CLAIMS a circuit hop, not that the circuit runs through a relay we
|
|
124
|
+
// chose. A counterparty can name a relay we hold no reservation with — including one they run —
|
|
125
|
+
// and `dialableAddrs` will pass it, so the relay they named learns our IP with relay-only on.
|
|
126
|
+
// The stronger check is binding the embedded relay peer id to our own reservations, and it needs
|
|
127
|
+
// the reservation set here, which this module does not have. Do not narrow the bound by editing
|
|
128
|
+
// this sentence; close it at the call site that holds the reservations.
|
|
129
|
+
return addr.split("/").includes("p2p-circuit");
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The endpoint as it may leave this machine.
|
|
133
|
+
*
|
|
134
|
+
* ⚠️ **AN EMPTY ADDRESS ARRAY IS NOT A PRIVATE FRAME, IT IS A MALFORMED ONE.** The first build of
|
|
135
|
+
* this published `addrs: []` and the directory refuses exactly that on both sides — a
|
|
136
|
+
* `session_request` whose `initiator_session_addrs` is empty is rejected outright, and a
|
|
137
|
+
* `session_offer_accept` is only folded in `if (counterparty_session_addrs.length > 0)`, **with no
|
|
138
|
+
* `else`**, so the accept was silently dropped and the offer waiter never resolved. The operator
|
|
139
|
+
* switched on a privacy control and was told their counterparty was offline.
|
|
140
|
+
*
|
|
141
|
+
* So we publish the **circuit-only subset**: enough for the directory to build a real assignment and
|
|
142
|
+
* for the counterparty to reach us over the relay, and nothing that points at the operator.
|
|
143
|
+
*
|
|
144
|
+
* A genuinely empty result is meaningful and is NOT silently published — see `relayOnlyReachable`.
|
|
145
|
+
* A null endpoint stays null: "no standing receiver" and "a receiver at no address" are different
|
|
146
|
+
* facts, and collapsing them would let a caller advertise an endpoint that does not exist.
|
|
147
|
+
*/
|
|
148
|
+
export function publishableEndpoint(endpoint, relayOnly) {
|
|
149
|
+
if (endpoint === null)
|
|
150
|
+
return null;
|
|
151
|
+
if (!relayOnly)
|
|
152
|
+
return endpoint;
|
|
153
|
+
return { peerId: endpoint.peerId, addrs: endpoint.addrs.filter(isCircuitAddr) };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Can a relay-only agent actually be reached with what it is about to publish?
|
|
157
|
+
*
|
|
158
|
+
* FALSE means it holds **no relay reservation**, so the circuit-only subset is empty.
|
|
159
|
+
*
|
|
160
|
+
* ⚠️ **"YET" WAS DROPPED FROM THAT SENTENCE ON PURPOSE — 056-SLOTDEAD.** It meant "the login walk
|
|
161
|
+
* has not got there yet", i.e. wait and it will become true on its own. Since 055-ONDEMAND an idle
|
|
162
|
+
* agent holds none and never will: the slot is taken at offer time, so this is asked AFTER the
|
|
163
|
+
* on-demand reserve and a FALSE here means that reserve genuinely failed. Reading it as "not yet"
|
|
164
|
+
* would argue for retrying rather than refusing, on a call that is waiting for an answer now.
|
|
165
|
+
*
|
|
166
|
+
* That must be a LOUD LOCAL REFUSAL rather than an empty publish: an empty publish is refused by the
|
|
167
|
+
* directory as malformed and surfaces to the operator as "the counterparty is offline", which is a
|
|
168
|
+
* lie about someone else's state caused by a setting on this machine.
|
|
169
|
+
*/
|
|
170
|
+
export function relayOnlyReachable(endpoint, relayOnly) {
|
|
171
|
+
if (!relayOnly)
|
|
172
|
+
return true;
|
|
173
|
+
if (endpoint === null)
|
|
174
|
+
return false;
|
|
175
|
+
return endpoint.addrs.some(isCircuitAddr);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Which of the counterparty's advertised addresses may we dial?
|
|
179
|
+
*
|
|
180
|
+
* ⚠️ Returns the FILTERED LIST, not a boolean, because "relay-only" does not mean "do not connect" —
|
|
181
|
+
* it means "connect only over the circuit". The first build refused every address including the
|
|
182
|
+
* `/p2p-circuit` one, which is the relay route this setting exists to force everything onto, so it
|
|
183
|
+
* dropped every session onto the store-and-forward backstop.
|
|
184
|
+
*
|
|
185
|
+
* The counterparty may not be relay-only themselves, so they will still advertise direct addresses:
|
|
186
|
+
* those are dropped, because dialing one hands them our IP with our own setting switched on.
|
|
187
|
+
*/
|
|
188
|
+
export function dialableAddrs(addrs, relayOnly) {
|
|
189
|
+
if (!relayOnly)
|
|
190
|
+
return [...addrs];
|
|
191
|
+
return addrs.filter(isCircuitAddr);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=relay-only.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-only.js","sourceRoot":"","sources":["../src/relay-only.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAGH,+FAA+F;AAC/F,MAAM,CAAC,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,UAA0C;IACpE,OAAO,UAAU,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC5B,UAA0C,EAC1C,QAAiB;IAEjB,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAQD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,4FAA4F;IAC5F,8FAA8F;IAC9F,kGAAkG;IAClG,EAAE;IACF,oEAAoE;IACpE,EAAE;IACF,6FAA6F;IAC7F,mGAAmG;IACnG,gGAAgG;IAChG,kBAAkB;IAClB,EAAE;IACF,0FAA0F;IAC1F,8FAA8F;IAC9F,mGAAmG;IACnG,sBAAsB;IACtB,EAAE;IACF,gGAAgG;IAChG,kGAAkG;IAClG,4FAA4F;IAC5F,iGAAiG;IACjG,kDAAkD;IAClD,EAAE;IACF,+FAA+F;IAC/F,6FAA6F;IAC7F,gGAAgG;IAChG,8FAA8F;IAC9F,iGAAiG;IACjG,gGAAgG;IAChG,wEAAwE;IACxE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAkB,EAClB,SAAkB;IAElB,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,SAAS;QAAE,OAAO,QAAQ,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;AAClF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAoC,EAAE,SAAkB;IACzF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,KAAwB,EAAE,SAAkB;IACxE,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
2
|
+
import type { Logger } from "./types.js";
|
|
3
|
+
/** A relay's signed ACK for a submitted content hash, stored as an immutable receipt. */
|
|
4
|
+
export interface RelayReceipt {
|
|
5
|
+
/** Hex of the 32-byte content hash the relay witnessed + sequenced (payload, NOT the unique key). */
|
|
6
|
+
hashHex: string;
|
|
7
|
+
/** Hex of the agent (K_local pubkey) this receipt belongs to. */
|
|
8
|
+
agentPubkeyHex: string;
|
|
9
|
+
/** Session this hash belonged to (hex) — part of the unique attestation position. */
|
|
10
|
+
sessionIdHex: string;
|
|
11
|
+
/** Stable relay identifier (relay-node sets relayId = hex of its ACK-signing pubkey). */
|
|
12
|
+
relayId: string;
|
|
13
|
+
/** Hex of the 32-byte Ed25519 pubkey that signed this ACK (= relayId; the directory confirms it at seal). */
|
|
14
|
+
relayPubkeyHex: string;
|
|
15
|
+
/** Relay-assigned canonical sequence number — part of the unique attestation position. */
|
|
16
|
+
sequenceNumber: number;
|
|
17
|
+
/** Unix ms timestamp embedded in the ACK TBS. */
|
|
18
|
+
timestamp: number;
|
|
19
|
+
/**
|
|
20
|
+
* 069-ORDERPROOF — hex of the 32-byte running root of this session's tree AFTER this leaf was
|
|
21
|
+
* appended, as the relay signed it. The position alone says where a leaf sits in a COUNTER; the
|
|
22
|
+
* root says where it sits in a CHAIN, which is what lets a party prove a prefix once the relay is
|
|
23
|
+
* gone. Optional on the TYPE only so rows written before this order still read; every row this
|
|
24
|
+
* build writes has one.
|
|
25
|
+
*/
|
|
26
|
+
runningRootHex?: string;
|
|
27
|
+
/** Hex of the 64-byte Ed25519 signature over the ACK TBS. */
|
|
28
|
+
signatureHex: string;
|
|
29
|
+
/** The relay's committed Structure2 (CBOR) for this leaf (DOD-MSG-4 hash_submit_ack). */
|
|
30
|
+
structure2Cbor?: Uint8Array;
|
|
31
|
+
/** The sender-signed Structure1 (CBOR) for this leaf. */
|
|
32
|
+
structure1Cbor?: Uint8Array;
|
|
33
|
+
/** Leaf kind: 0x00 message, 0x02 control (SEAL). */
|
|
34
|
+
leafKind?: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* FED-OPTIONB-SEAL-001: a fully-carried leaf for the unilateral-seal offline rebuild — a receipt that has
|
|
38
|
+
* its Structure2/Structure1 carry bytes. `getSealLeaves` returns these (the chain the directory can rebuild
|
|
39
|
+
* + verify offline), narrowing the optional carry fields to required.
|
|
40
|
+
*/
|
|
41
|
+
export interface SealLeaf extends RelayReceipt {
|
|
42
|
+
structure2Cbor: Uint8Array;
|
|
43
|
+
structure1Cbor: Uint8Array;
|
|
44
|
+
leafKind: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Verify a relay ordering attestation against a relay pubkey the CALLER supplies — and the caller
|
|
48
|
+
* must have got it from the directory-signed assignment, never from the frame.
|
|
49
|
+
*
|
|
50
|
+
* Returns true iff every field is well-formed and the 64-byte Ed25519 signature verifies over
|
|
51
|
+
* TBS = SHA-256(DOMAIN ‖ session_id ‖ content_hash ‖ seq_BE4 ‖ running_root ‖ ts_BE8) — the same
|
|
52
|
+
* statement the relay signs. A forged sequence, a swapped session or a rewritten prefix all change
|
|
53
|
+
* the TBS, so each fails.
|
|
54
|
+
*
|
|
55
|
+
* A wrong-length field returns FALSE rather than throwing: these bytes come off a wire the relay
|
|
56
|
+
* controls, and a malformed length must refuse this attestation, not take down the frame handler.
|
|
57
|
+
*/
|
|
58
|
+
export declare function verifyRelayAck(sessionId: Uint8Array, contentHash: Uint8Array, sequenceNumber: number, runningRoot: Uint8Array, timestamp: number, signature: Uint8Array, relayPubkey: Uint8Array): boolean;
|
|
59
|
+
/** Why an attestation was refused. For the LOG — the protocol outcome is identical for all of them. */
|
|
60
|
+
export type AckRefusalCause =
|
|
61
|
+
/** This session has no directory-named relay key recorded, so nothing can anchor the check. */
|
|
62
|
+
"no_anchor"
|
|
63
|
+
/** The frame named a relay other than the one the directory assigned to this session. */
|
|
64
|
+
| "relay_not_assigned"
|
|
65
|
+
/** `relay_id` was present but is not a 64-hex Ed25519 pubkey. */
|
|
66
|
+
| "bad_relay_id"
|
|
67
|
+
/** No signature, no timestamp, or no running root — the relay attested nothing. */
|
|
68
|
+
| "attestation_absent"
|
|
69
|
+
/** The signature does not bind (session, hash, sequence, root, timestamp) under the assigned key. */
|
|
70
|
+
| "signature_invalid";
|
|
71
|
+
/** The decision for one `hash_submit_ack` — pure + directly unit-testable (the verify-gates-store wiring). */
|
|
72
|
+
export type AckEvaluation = {
|
|
73
|
+
kind: "store";
|
|
74
|
+
receipt: RelayReceipt;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* REFUSED. One outcome for missing, malformed and mismatched — the caller must treat all three
|
|
78
|
+
* identically, and `cause` exists so the LOG can still name which one it was. A caller that
|
|
79
|
+
* branches on `cause` to soften any of them reintroduces exactly the hole this closes.
|
|
80
|
+
*/
|
|
81
|
+
| {
|
|
82
|
+
kind: "refused";
|
|
83
|
+
cause: AckRefusalCause;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Read back the leaf we just submitted, so the relay's attestation has something to be checked
|
|
87
|
+
* against — the step BEFORE `evaluateRelayAck`, and the one that decides whether the check can run
|
|
88
|
+
* at all.
|
|
89
|
+
*
|
|
90
|
+
* ⚠️ "COULD NOT RUN THE CHECK" IS NOT "THE CHECK PASSED" — 069-ORDERPROOF.
|
|
91
|
+
*
|
|
92
|
+
* Both failures here used to be waved through by the caller, which settled the send `ok` having
|
|
93
|
+
* verified nothing: the absent-versus-verified collapse this unit exists to remove, reproduced at
|
|
94
|
+
* the one point where nothing was left to verify with. These are our OWN just-signed bytes, so a
|
|
95
|
+
* hostile relay cannot steer into either — unreachable in practice, which is a different claim from
|
|
96
|
+
* safe to wave through, and the distinction is the one that decays under later edits.
|
|
97
|
+
*
|
|
98
|
+
* `"none"` is the honest third answer: no submit was made, so no attestation is owed and none is
|
|
99
|
+
* missing. It is the only one of the three that does not reject.
|
|
100
|
+
*/
|
|
101
|
+
export declare function readSubmittedLeaf(structure1Cbor: Uint8Array | undefined, seq: number): {
|
|
102
|
+
kind: "none";
|
|
103
|
+
} | {
|
|
104
|
+
kind: "unreadable";
|
|
105
|
+
event: string;
|
|
106
|
+
reason?: string;
|
|
107
|
+
} | {
|
|
108
|
+
kind: "ok";
|
|
109
|
+
contentHash: Uint8Array;
|
|
110
|
+
sessionId: Uint8Array;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Evaluate a relay ordering attestation: decide whether it yields a storable, signature-verified
|
|
114
|
+
* receipt. This is the verify-gates-store decision in isolation, so it is unit-testable without the
|
|
115
|
+
* relay stream.
|
|
116
|
+
*
|
|
117
|
+
* `expectedRelayPubkeyHex` is the anchor and it is REQUIRED in substance: `undefined` refuses. It
|
|
118
|
+
* must come from `relay_id` on an assignment whose FROST signature has been verified.
|
|
119
|
+
*/
|
|
120
|
+
export declare function evaluateRelayAck(params: {
|
|
121
|
+
sessionId: Uint8Array;
|
|
122
|
+
contentHash: Uint8Array;
|
|
123
|
+
runningRoot: Uint8Array | undefined;
|
|
124
|
+
sessionIdHex: string;
|
|
125
|
+
agentPubkeyHex: string;
|
|
126
|
+
/** The relay the DIRECTORY assigned to this session, hex. Absent ⇒ nothing to anchor to ⇒ refuse. */
|
|
127
|
+
expectedRelayPubkeyHex: string | undefined;
|
|
128
|
+
relayId: string | undefined;
|
|
129
|
+
relaySignature: Uint8Array | undefined;
|
|
130
|
+
timestamp: number | undefined;
|
|
131
|
+
sequenceNumber: number;
|
|
132
|
+
}): AckEvaluation;
|
|
133
|
+
export declare class RelayReceiptStore {
|
|
134
|
+
#private;
|
|
135
|
+
constructor(db: DaemonDatabase, logger: Logger);
|
|
136
|
+
/**
|
|
137
|
+
* Persist a VERIFIED receipt. IMMUTABLE: keyed on the attestation POSITION (agent, session, sequence) —
|
|
138
|
+
* `INSERT OR IGNORE` keeps the FIRST hash recorded for a position, so a relay cannot rewrite the hash it
|
|
139
|
+
* already attested at that (session, sequence). Returns true if a new row was written, false if the
|
|
140
|
+
* position was already recorded (logged distinctly when the existing hash DIFFERS — a relay equivocation).
|
|
141
|
+
*/
|
|
142
|
+
store(receipt: RelayReceipt, storedAtMs: number): boolean;
|
|
143
|
+
/** The stored receipt at an attestation position (agent, session, sequence), or undefined. */
|
|
144
|
+
get(agentPubkeyHex: string, sessionIdHex: string, sequenceNumber: number): RelayReceipt | undefined;
|
|
145
|
+
/** All receipts for an agent (optionally a single session), in canonical sequence order (ascending). */
|
|
146
|
+
getAll(agentPubkeyHex: string, sessionIdHex?: string): RelayReceipt[];
|
|
147
|
+
/**
|
|
148
|
+
* FED-OPTIONB-SEAL-001: the complete carried leaf chain for a session's UNILATERAL seal — every receipt
|
|
149
|
+
* that has its Structure2/Structure1 carry bytes, ordered by canonical sequence. The directory rebuilds +
|
|
150
|
+
* verifies this tree OFFLINE (no directory→relay getSealLeaves dial). Rows without carry bytes
|
|
151
|
+
* (pre-migration / receipt-only) are omitted: the caller carries only what the directory can rebuild.
|
|
152
|
+
*/
|
|
153
|
+
getSealLeaves(agentPubkeyHex: string, sessionIdHex: string): SealLeaf[];
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=relay-receipt-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-receipt-store.d.ts","sourceRoot":"","sources":["../src/relay-receipt-store.ts"],"names":[],"mappings":"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"}
|