@cello-protocol/daemon 0.0.227 → 0.0.228
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-admin-handlers.d.ts +56 -0
- package/dist/agent-admin-handlers.d.ts.map +1 -0
- package/dist/agent-admin-handlers.js +73 -0
- package/dist/agent-admin-handlers.js.map +1 -0
- package/dist/agent-handlers.d.ts +72 -0
- package/dist/agent-handlers.d.ts.map +1 -0
- package/dist/agent-handlers.js +604 -0
- package/dist/agent-handlers.js.map +1 -0
- package/dist/agent-id-migration.d.ts +70 -0
- package/dist/agent-id-migration.d.ts.map +1 -0
- package/dist/agent-id-migration.js +468 -0
- package/dist/agent-id-migration.js.map +1 -0
- package/dist/agent-loader.d.ts +37 -0
- package/dist/agent-loader.d.ts.map +1 -0
- package/dist/agent-loader.js +37 -0
- package/dist/agent-loader.js.map +1 -0
- package/dist/agent-selection-root.d.ts +29 -0
- package/dist/agent-selection-root.d.ts.map +1 -0
- package/dist/agent-selection-root.js +126 -0
- package/dist/agent-selection-root.js.map +1 -0
- package/dist/agent-selection.d.ts +73 -0
- package/dist/agent-selection.d.ts.map +1 -0
- package/dist/agent-selection.js +80 -0
- package/dist/agent-selection.js.map +1 -0
- package/dist/agent-settings-keys.d.ts +52 -0
- package/dist/agent-settings-keys.d.ts.map +1 -0
- package/dist/agent-settings-keys.js +114 -0
- package/dist/agent-settings-keys.js.map +1 -0
- package/dist/agent-state.d.ts +67 -0
- package/dist/agent-state.d.ts.map +1 -0
- package/dist/agent-state.js +66 -0
- package/dist/agent-state.js.map +1 -0
- package/dist/assignment-verify.d.ts +90 -0
- package/dist/assignment-verify.d.ts.map +1 -0
- package/dist/assignment-verify.js +301 -0
- package/dist/assignment-verify.js.map +1 -0
- package/dist/attendance-wiring.d.ts +23 -0
- package/dist/attendance-wiring.d.ts.map +1 -0
- package/dist/attendance-wiring.js +248 -0
- package/dist/attendance-wiring.js.map +1 -0
- package/dist/attestation-body.d.ts +47 -0
- package/dist/attestation-body.d.ts.map +1 -0
- package/dist/attestation-body.js +71 -0
- package/dist/attestation-body.js.map +1 -0
- package/dist/authorship-verification.d.ts +91 -0
- package/dist/authorship-verification.d.ts.map +1 -0
- package/dist/authorship-verification.js +532 -0
- package/dist/authorship-verification.js.map +1 -0
- package/dist/away-detection.d.ts +139 -0
- package/dist/away-detection.d.ts.map +1 -0
- package/dist/away-detection.js +186 -0
- package/dist/away-detection.js.map +1 -0
- package/dist/away-inbox-oneshot.d.ts +40 -0
- package/dist/away-inbox-oneshot.d.ts.map +1 -0
- package/dist/away-inbox-oneshot.js +311 -0
- package/dist/away-inbox-oneshot.js.map +1 -0
- package/dist/backup-restore-handlers.d.ts +10 -0
- package/dist/backup-restore-handlers.d.ts.map +1 -0
- package/dist/backup-restore-handlers.js +82 -0
- package/dist/backup-restore-handlers.js.map +1 -0
- package/dist/backup-restore.d.ts +102 -0
- package/dist/backup-restore.d.ts.map +1 -0
- package/dist/backup-restore.js +341 -0
- package/dist/backup-restore.js.map +1 -0
- package/dist/bin/cello-daemon.d.ts +13 -0
- package/dist/bin/cello-daemon.d.ts.map +1 -0
- package/dist/bin/cello-daemon.js.map +1 -0
- package/dist/boot-agents.d.ts +64 -0
- package/dist/boot-agents.d.ts.map +1 -0
- package/dist/boot-agents.js +241 -0
- package/dist/boot-agents.js.map +1 -0
- package/dist/boot-connection-state.d.ts +38 -0
- package/dist/boot-connection-state.d.ts.map +1 -0
- package/dist/boot-connection-state.js +95 -0
- package/dist/boot-connection-state.js.map +1 -0
- package/dist/boot-core.d.ts +36 -0
- package/dist/boot-core.d.ts.map +1 -0
- package/dist/boot-core.js +293 -0
- package/dist/boot-core.js.map +1 -0
- package/dist/boot-parked-content.d.ts +34 -0
- package/dist/boot-parked-content.d.ts.map +1 -0
- package/dist/boot-parked-content.js +528 -0
- package/dist/boot-parked-content.js.map +1 -0
- package/dist/boot-sweeps.d.ts +22 -0
- package/dist/boot-sweeps.d.ts.map +1 -0
- package/dist/boot-sweeps.js +51 -0
- package/dist/boot-sweeps.js.map +1 -0
- package/dist/bundled-consortium-manifest.d.ts +47 -0
- package/dist/bundled-consortium-manifest.d.ts.map +1 -0
- package/dist/bundled-consortium-manifest.js +116 -0
- package/dist/bundled-consortium-manifest.js.map +1 -0
- package/dist/cbor-blob-migration.d.ts +8 -0
- package/dist/cbor-blob-migration.d.ts.map +1 -0
- package/dist/cbor-blob-migration.js +116 -0
- package/dist/cbor-blob-migration.js.map +1 -0
- package/dist/challenge-verifier.d.ts +12 -0
- package/dist/challenge-verifier.d.ts.map +1 -0
- package/dist/challenge-verifier.js +11 -0
- package/dist/challenge-verifier.js.map +1 -0
- package/dist/channel-log-store.d.ts +80 -0
- package/dist/channel-log-store.d.ts.map +1 -0
- package/dist/channel-log-store.js +290 -0
- package/dist/channel-log-store.js.map +1 -0
- package/dist/close-commitment.d.ts +67 -0
- package/dist/close-commitment.d.ts.map +1 -0
- package/dist/close-commitment.js +78 -0
- package/dist/close-commitment.js.map +1 -0
- package/dist/close-session-handler.d.ts +94 -0
- package/dist/close-session-handler.d.ts.map +1 -0
- package/dist/close-session-handler.js +1418 -0
- package/dist/close-session-handler.js.map +1 -0
- package/dist/co-attendance.d.ts +29 -0
- package/dist/co-attendance.d.ts.map +1 -0
- package/dist/co-attendance.js +32 -0
- package/dist/co-attendance.js.map +1 -0
- package/dist/column-birth.d.ts +40 -0
- package/dist/column-birth.d.ts.map +1 -0
- package/dist/column-birth.js +61 -0
- package/dist/column-birth.js.map +1 -0
- package/dist/connect-or-start.d.ts +25 -0
- package/dist/connect-or-start.d.ts.map +1 -0
- package/dist/connect-or-start.js +175 -0
- package/dist/connect-or-start.js.map +1 -0
- package/dist/connection-agents.d.ts +16 -0
- package/dist/connection-agents.d.ts.map +1 -0
- package/dist/connection-agents.js +68 -0
- package/dist/connection-agents.js.map +1 -0
- package/dist/consent-migration.d.ts +49 -0
- package/dist/consent-migration.d.ts.map +1 -0
- package/dist/consent-migration.js +128 -0
- package/dist/consent-migration.js.map +1 -0
- package/dist/consortium-bootstrap.d.ts +138 -0
- package/dist/consortium-bootstrap.d.ts.map +1 -0
- package/dist/consortium-bootstrap.js +339 -0
- package/dist/consortium-bootstrap.js.map +1 -0
- package/dist/consortium-fingerprint.d.ts +115 -0
- package/dist/consortium-fingerprint.d.ts.map +1 -0
- package/dist/consortium-fingerprint.js +175 -0
- package/dist/consortium-fingerprint.js.map +1 -0
- package/dist/contact-handlers.d.ts +59 -0
- package/dist/contact-handlers.d.ts.map +1 -0
- package/dist/contact-handlers.js +343 -0
- package/dist/contact-handlers.js.map +1 -0
- package/dist/contact-pubkey-case.d.ts +65 -0
- package/dist/contact-pubkey-case.d.ts.map +1 -0
- package/dist/contact-pubkey-case.js +136 -0
- package/dist/contact-pubkey-case.js.map +1 -0
- package/dist/contacts-tier-migration.d.ts +90 -0
- package/dist/contacts-tier-migration.d.ts.map +1 -0
- package/dist/contacts-tier-migration.js +150 -0
- package/dist/contacts-tier-migration.js.map +1 -0
- package/dist/content-encryption-status.d.ts +111 -0
- package/dist/content-encryption-status.d.ts.map +1 -0
- package/dist/content-encryption-status.js +158 -0
- package/dist/content-encryption-status.js.map +1 -0
- package/dist/content-park-client.d.ts +90 -0
- package/dist/content-park-client.d.ts.map +1 -0
- package/dist/content-park-client.js +362 -0
- package/dist/content-park-client.js.map +1 -0
- package/dist/content-park.d.ts +52 -0
- package/dist/content-park.d.ts.map +1 -0
- package/dist/content-park.js +1309 -0
- package/dist/content-park.js.map +1 -0
- package/dist/cross-node-negotiation.d.ts +44 -0
- package/dist/cross-node-negotiation.d.ts.map +1 -0
- package/dist/cross-node-negotiation.js +34 -0
- package/dist/cross-node-negotiation.js.map +1 -0
- package/dist/daemon-handle.d.ts +57 -0
- package/dist/daemon-handle.d.ts.map +1 -0
- package/dist/daemon-handle.js +2 -0
- package/dist/daemon-handle.js.map +1 -0
- package/dist/daemon-status-report.d.ts +50 -0
- package/dist/daemon-status-report.d.ts.map +1 -0
- package/dist/daemon-status-report.js +81 -0
- package/dist/daemon-status-report.js.map +1 -0
- package/dist/daemon.d.ts +45 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +1177 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db-identity-store.d.ts +159 -0
- package/dist/db-identity-store.d.ts.map +1 -0
- package/dist/db-identity-store.js +502 -0
- package/dist/db-identity-store.js.map +1 -0
- package/dist/delivery-open-registry.d.ts +92 -0
- package/dist/delivery-open-registry.d.ts.map +1 -0
- package/dist/delivery-open-registry.js +121 -0
- package/dist/delivery-open-registry.js.map +1 -0
- package/dist/delivery-session-suspects.d.ts +56 -0
- package/dist/delivery-session-suspects.d.ts.map +1 -0
- package/dist/delivery-session-suspects.js +94 -0
- package/dist/delivery-session-suspects.js.map +1 -0
- package/dist/directory-auth-posture.d.ts +87 -0
- package/dist/directory-auth-posture.d.ts.map +1 -0
- package/dist/directory-auth-posture.js +134 -0
- package/dist/directory-auth-posture.js.map +1 -0
- package/dist/directory-bootstrap.d.ts +310 -0
- package/dist/directory-bootstrap.d.ts.map +1 -0
- package/dist/directory-bootstrap.js +557 -0
- package/dist/directory-bootstrap.js.map +1 -0
- package/dist/directory-connect.d.ts +27 -0
- package/dist/directory-connect.d.ts.map +1 -0
- package/dist/directory-connect.js +106 -0
- package/dist/directory-connect.js.map +1 -0
- package/dist/disconnect-cleanup.d.ts +51 -0
- package/dist/disconnect-cleanup.d.ts.map +1 -0
- package/dist/disconnect-cleanup.js +72 -0
- package/dist/disconnect-cleanup.js.map +1 -0
- package/dist/document-amendment-store.d.ts +120 -0
- package/dist/document-amendment-store.d.ts.map +1 -0
- package/dist/document-amendment-store.js +266 -0
- package/dist/document-amendment-store.js.map +1 -0
- package/dist/document-delivery-transport.d.ts +168 -0
- package/dist/document-delivery-transport.d.ts.map +1 -0
- package/dist/document-delivery-transport.js +206 -0
- package/dist/document-delivery-transport.js.map +1 -0
- package/dist/document-engine.d.ts +134 -0
- package/dist/document-engine.d.ts.map +1 -0
- package/dist/document-engine.js +282 -0
- package/dist/document-engine.js.map +1 -0
- package/dist/document-flag.d.ts +58 -0
- package/dist/document-flag.d.ts.map +1 -0
- package/dist/document-flag.js +70 -0
- package/dist/document-flag.js.map +1 -0
- package/dist/document-frame-router.d.ts +245 -0
- package/dist/document-frame-router.d.ts.map +1 -0
- package/dist/document-frame-router.js +397 -0
- package/dist/document-frame-router.js.map +1 -0
- package/dist/document-gate-wiring.d.ts +61 -0
- package/dist/document-gate-wiring.d.ts.map +1 -0
- package/dist/document-gate-wiring.js +125 -0
- package/dist/document-gate-wiring.js.map +1 -0
- package/dist/document-gate.d.ts +149 -0
- package/dist/document-gate.d.ts.map +1 -0
- package/dist/document-gate.js +509 -0
- package/dist/document-gate.js.map +1 -0
- package/dist/document-handlers.d.ts +47 -0
- package/dist/document-handlers.d.ts.map +1 -0
- package/dist/document-handlers.js +2203 -0
- package/dist/document-handlers.js.map +1 -0
- package/dist/document-handshake.d.ts +176 -0
- package/dist/document-handshake.d.ts.map +1 -0
- package/dist/document-handshake.js +452 -0
- package/dist/document-handshake.js.map +1 -0
- package/dist/document-inbound.d.ts +162 -0
- package/dist/document-inbound.d.ts.map +1 -0
- package/dist/document-inbound.js +530 -0
- package/dist/document-inbound.js.map +1 -0
- package/dist/document-json.d.ts +120 -0
- package/dist/document-json.d.ts.map +1 -0
- package/dist/document-json.js +191 -0
- package/dist/document-json.js.map +1 -0
- package/dist/document-layer.d.ts +215 -0
- package/dist/document-layer.d.ts.map +1 -0
- package/dist/document-layer.js +1025 -0
- package/dist/document-layer.js.map +1 -0
- package/dist/document-lifecycle.d.ts +52 -0
- package/dist/document-lifecycle.d.ts.map +1 -0
- package/dist/document-lifecycle.js +134 -0
- package/dist/document-lifecycle.js.map +1 -0
- package/dist/document-live-docs.d.ts +58 -0
- package/dist/document-live-docs.d.ts.map +1 -0
- package/dist/document-live-docs.js +126 -0
- package/dist/document-live-docs.js.map +1 -0
- package/dist/document-notify.d.ts +228 -0
- package/dist/document-notify.d.ts.map +1 -0
- package/dist/document-notify.js +580 -0
- package/dist/document-notify.js.map +1 -0
- package/dist/document-profile.d.ts +61 -0
- package/dist/document-profile.d.ts.map +1 -0
- package/dist/document-profile.js +112 -0
- package/dist/document-profile.js.map +1 -0
- package/dist/document-publish.d.ts +87 -0
- package/dist/document-publish.d.ts.map +1 -0
- package/dist/document-publish.js +173 -0
- package/dist/document-publish.js.map +1 -0
- package/dist/document-reachability.d.ts +42 -0
- package/dist/document-reachability.d.ts.map +1 -0
- package/dist/document-reachability.js +80 -0
- package/dist/document-reachability.js.map +1 -0
- package/dist/document-reconcile-engine.d.ts +66 -0
- package/dist/document-reconcile-engine.d.ts.map +1 -0
- package/dist/document-reconcile-engine.js +225 -0
- package/dist/document-reconcile-engine.js.map +1 -0
- package/dist/document-reconcile-scheduler.d.ts +163 -0
- package/dist/document-reconcile-scheduler.d.ts.map +1 -0
- package/dist/document-reconcile-scheduler.js +303 -0
- package/dist/document-reconcile-scheduler.js.map +1 -0
- package/dist/document-rejection.d.ts +251 -0
- package/dist/document-rejection.d.ts.map +1 -0
- package/dist/document-rejection.js +435 -0
- package/dist/document-rejection.js.map +1 -0
- package/dist/document-screen.d.ts +114 -0
- package/dist/document-screen.d.ts.map +1 -0
- package/dist/document-screen.js +223 -0
- package/dist/document-screen.js.map +1 -0
- package/dist/document-store.d.ts +372 -0
- package/dist/document-store.d.ts.map +1 -0
- package/dist/document-store.js +931 -0
- package/dist/document-store.js.map +1 -0
- package/dist/document-surface.d.ts +32 -0
- package/dist/document-surface.d.ts.map +1 -0
- package/dist/document-surface.js +151 -0
- package/dist/document-surface.js.map +1 -0
- package/dist/document-types.d.ts +94 -0
- package/dist/document-types.d.ts.map +1 -0
- package/dist/document-types.js +90 -0
- package/dist/document-types.js.map +1 -0
- package/dist/document-watch.d.ts +69 -0
- package/dist/document-watch.d.ts.map +1 -0
- package/dist/document-watch.js +108 -0
- package/dist/document-watch.js.map +1 -0
- package/dist/document-wiring.d.ts +53 -0
- package/dist/document-wiring.d.ts.map +1 -0
- package/dist/document-wiring.js +323 -0
- package/dist/document-wiring.js.map +1 -0
- package/dist/document-write-guard.d.ts +66 -0
- package/dist/document-write-guard.d.ts.map +1 -0
- package/dist/document-write-guard.js +98 -0
- package/dist/document-write-guard.js.map +1 -0
- package/dist/document-write-path.d.ts +94 -0
- package/dist/document-write-path.d.ts.map +1 -0
- package/dist/document-write-path.js +530 -0
- package/dist/document-write-path.js.map +1 -0
- package/dist/error-message.d.ts +7 -0
- package/dist/error-message.d.ts.map +1 -0
- package/dist/error-message.js +19 -0
- package/dist/error-message.js.map +1 -0
- package/dist/file-manifest-provider.d.ts +37 -0
- package/dist/file-manifest-provider.d.ts.map +1 -0
- package/dist/file-manifest-provider.js +105 -0
- package/dist/file-manifest-provider.js.map +1 -0
- package/dist/frame-values.d.ts +3 -0
- package/dist/frame-values.d.ts.map +1 -0
- package/dist/frame-values.js +84 -0
- package/dist/frame-values.js.map +1 -0
- package/dist/frontier-mismatch.d.ts +73 -0
- package/dist/frontier-mismatch.d.ts.map +1 -0
- package/dist/frontier-mismatch.js +89 -0
- package/dist/frontier-mismatch.js.map +1 -0
- package/dist/gateway-config-handlers.d.ts +26 -0
- package/dist/gateway-config-handlers.d.ts.map +1 -0
- package/dist/gateway-config-handlers.js +429 -0
- package/dist/gateway-config-handlers.js.map +1 -0
- package/dist/held-content.d.ts +145 -0
- package/dist/held-content.d.ts.map +1 -0
- package/dist/held-content.js +389 -0
- package/dist/held-content.js.map +1 -0
- package/dist/http-manifest-poll.d.ts +67 -0
- package/dist/http-manifest-poll.d.ts.map +1 -0
- package/dist/http-manifest-poll.js +150 -0
- package/dist/http-manifest-poll.js.map +1 -0
- package/dist/identity-migration.d.ts +40 -0
- package/dist/identity-migration.d.ts.map +1 -0
- package/dist/identity-migration.js +461 -0
- package/dist/identity-migration.js.map +1 -0
- package/dist/inbound-refusals.d.ts +283 -0
- package/dist/inbound-refusals.d.ts.map +1 -0
- package/dist/inbound-refusals.js +919 -0
- package/dist/inbound-refusals.js.map +1 -0
- package/dist/inbound-seal-request.d.ts +32 -0
- package/dist/inbound-seal-request.d.ts.map +1 -0
- package/dist/inbound-seal-request.js +228 -0
- package/dist/inbound-seal-request.js.map +1 -0
- package/dist/inbound-sessions.d.ts +291 -0
- package/dist/inbound-sessions.d.ts.map +1 -0
- package/dist/inbound-sessions.js +1609 -0
- package/dist/inbound-sessions.js.map +1 -0
- package/dist/inclusion-proof-handlers.d.ts +43 -0
- package/dist/inclusion-proof-handlers.d.ts.map +1 -0
- package/dist/inclusion-proof-handlers.js +565 -0
- package/dist/inclusion-proof-handlers.js.map +1 -0
- package/dist/inclusion-proof.d.ts +151 -0
- package/dist/inclusion-proof.d.ts.map +1 -0
- package/dist/inclusion-proof.js +228 -0
- package/dist/inclusion-proof.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/initiate-session-handler.d.ts +55 -0
- package/dist/initiate-session-handler.d.ts.map +1 -0
- package/dist/initiate-session-handler.js +310 -0
- package/dist/initiate-session-handler.js.map +1 -0
- package/dist/ipc-client.d.ts +31 -0
- package/dist/ipc-client.d.ts.map +1 -0
- package/dist/ipc-client.js +113 -0
- package/dist/ipc-client.js.map +1 -0
- package/dist/ipc-server.d.ts +63 -0
- package/dist/ipc-server.d.ts.map +1 -0
- package/dist/ipc-server.js +429 -0
- package/dist/ipc-server.js.map +1 -0
- package/dist/ipc-surface.d.ts +44 -0
- package/dist/ipc-surface.d.ts.map +1 -0
- package/dist/ipc-surface.js +107 -0
- package/dist/ipc-surface.js.map +1 -0
- package/dist/line-lcs.d.ts +51 -0
- package/dist/line-lcs.d.ts.map +1 -0
- package/dist/line-lcs.js +71 -0
- package/dist/line-lcs.js.map +1 -0
- package/dist/lock-file.d.ts +39 -0
- package/dist/lock-file.d.ts.map +1 -0
- package/dist/lock-file.js +120 -0
- package/dist/lock-file.js.map +1 -0
- package/dist/log-collapse.d.ts +66 -0
- package/dist/log-collapse.d.ts.map +1 -0
- package/dist/log-collapse.js +244 -0
- package/dist/log-collapse.js.map +1 -0
- package/dist/log-rotate.d.ts +67 -0
- package/dist/log-rotate.d.ts.map +1 -0
- package/dist/log-rotate.js +134 -0
- package/dist/log-rotate.js.map +1 -0
- package/dist/manifest-deps.d.ts +25 -0
- package/dist/manifest-deps.d.ts.map +1 -0
- package/dist/manifest-deps.js +151 -0
- package/dist/manifest-deps.js.map +1 -0
- package/dist/manifest-poll-scheduler.d.ts +31 -0
- package/dist/manifest-poll-scheduler.d.ts.map +1 -0
- package/dist/manifest-poll-scheduler.js +59 -0
- package/dist/manifest-poll-scheduler.js.map +1 -0
- package/dist/manifest-validity.d.ts +153 -0
- package/dist/manifest-validity.d.ts.map +1 -0
- package/dist/manifest-validity.js +268 -0
- package/dist/manifest-validity.js.map +1 -0
- package/dist/manifest-version-store-db.d.ts +24 -0
- package/dist/manifest-version-store-db.d.ts.map +1 -0
- package/dist/manifest-version-store-db.js +58 -0
- package/dist/manifest-version-store-db.js.map +1 -0
- package/dist/manifest-version-store.d.ts +16 -0
- package/dist/manifest-version-store.d.ts.map +1 -0
- package/dist/manifest-version-store.js +15 -0
- package/dist/manifest-version-store.js.map +1 -0
- package/dist/network-directory-node.d.ts +136 -0
- package/dist/network-directory-node.d.ts.map +1 -0
- package/dist/network-directory-node.js +810 -0
- package/dist/network-directory-node.js.map +1 -0
- package/dist/nonce-dedup.d.ts +68 -0
- package/dist/nonce-dedup.d.ts.map +1 -0
- package/dist/nonce-dedup.js +205 -0
- package/dist/nonce-dedup.js.map +1 -0
- package/dist/notification-dispatcher.d.ts +92 -0
- package/dist/notification-dispatcher.d.ts.map +1 -0
- package/dist/notification-dispatcher.js +210 -0
- package/dist/notification-dispatcher.js.map +1 -0
- package/dist/notification-handlers.d.ts +53 -0
- package/dist/notification-handlers.d.ts.map +1 -0
- package/dist/notification-handlers.js +461 -0
- package/dist/notification-handlers.js.map +1 -0
- package/dist/onboarding-guidance.d.ts +79 -0
- package/dist/onboarding-guidance.d.ts.map +1 -0
- package/dist/onboarding-guidance.js +95 -0
- package/dist/onboarding-guidance.js.map +1 -0
- package/dist/operator-guidance.d.ts +25 -0
- package/dist/operator-guidance.d.ts.map +1 -0
- package/dist/operator-guidance.js +50 -0
- package/dist/operator-guidance.js.map +1 -0
- package/dist/orphan-triage.d.ts +130 -0
- package/dist/orphan-triage.d.ts.map +1 -0
- package/dist/orphan-triage.js +207 -0
- package/dist/orphan-triage.js.map +1 -0
- package/dist/outbound-sessions.d.ts +126 -0
- package/dist/outbound-sessions.d.ts.map +1 -0
- package/dist/outbound-sessions.js +1052 -0
- package/dist/outbound-sessions.js.map +1 -0
- package/dist/park-envelope.d.ts +329 -0
- package/dist/park-envelope.d.ts.map +1 -0
- package/dist/park-envelope.js +509 -0
- package/dist/park-envelope.js.map +1 -0
- package/dist/park-recovery.d.ts +273 -0
- package/dist/park-recovery.d.ts.map +1 -0
- package/dist/park-recovery.js +717 -0
- package/dist/park-recovery.js.map +1 -0
- package/dist/park-refusals.d.ts +147 -0
- package/dist/park-refusals.d.ts.map +1 -0
- package/dist/park-refusals.js +331 -0
- package/dist/park-refusals.js.map +1 -0
- package/dist/quarantine-framing.d.ts +92 -0
- package/dist/quarantine-framing.d.ts.map +1 -0
- package/dist/quarantine-framing.js +111 -0
- package/dist/quarantine-framing.js.map +1 -0
- package/dist/reconnect-drain.d.ts +22 -0
- package/dist/reconnect-drain.d.ts.map +1 -0
- package/dist/reconnect-drain.js +65 -0
- package/dist/reconnect-drain.js.map +1 -0
- package/dist/recovered-position.d.ts +14 -0
- package/dist/recovered-position.d.ts.map +1 -0
- package/dist/recovered-position.js +59 -0
- package/dist/recovered-position.js.map +1 -0
- package/dist/refusal-notices.d.ts +196 -0
- package/dist/refusal-notices.d.ts.map +1 -0
- package/dist/refusal-notices.js +516 -0
- package/dist/refusal-notices.js.map +1 -0
- package/dist/refusal-reasons.d.ts +245 -0
- package/dist/refusal-reasons.d.ts.map +1 -0
- package/dist/refusal-reasons.js +363 -0
- package/dist/refusal-reasons.js.map +1 -0
- package/dist/register-handler.d.ts +36 -0
- package/dist/register-handler.d.ts.map +1 -0
- package/dist/register-handler.js +285 -0
- package/dist/register-handler.js.map +1 -0
- package/dist/registration-context.d.ts +72 -0
- package/dist/registration-context.d.ts.map +1 -0
- package/dist/registration-context.js +126 -0
- package/dist/registration-context.js.map +1 -0
- package/dist/registration-manager.d.ts +94 -0
- package/dist/registration-manager.d.ts.map +1 -0
- package/dist/registration-manager.js +585 -0
- package/dist/registration-manager.js.map +1 -0
- package/dist/registration-persistence.d.ts +183 -0
- package/dist/registration-persistence.d.ts.map +1 -0
- package/dist/registration-persistence.js +263 -0
- package/dist/registration-persistence.js.map +1 -0
- package/dist/registry-poll.d.ts +52 -0
- package/dist/registry-poll.d.ts.map +1 -0
- package/dist/registry-poll.js +140 -0
- package/dist/registry-poll.js.map +1 -0
- package/dist/registry-version-store-db.d.ts +22 -0
- package/dist/registry-version-store-db.d.ts.map +1 -0
- package/dist/registry-version-store-db.js +50 -0
- package/dist/registry-version-store-db.js.map +1 -0
- package/dist/relay-endpoints.d.ts +18 -0
- package/dist/relay-endpoints.d.ts.map +1 -0
- package/dist/relay-endpoints.js +9 -0
- package/dist/relay-endpoints.js.map +1 -0
- package/dist/relay-only.d.ts +140 -0
- package/dist/relay-only.d.ts.map +1 -0
- package/dist/relay-only.js +193 -0
- package/dist/relay-only.js.map +1 -0
- package/dist/relay-receipt-store.d.ts +155 -0
- package/dist/relay-receipt-store.d.ts.map +1 -0
- package/dist/relay-receipt-store.js +284 -0
- package/dist/relay-receipt-store.js.map +1 -0
- package/dist/relay-reconnect.d.ts +32 -0
- package/dist/relay-reconnect.d.ts.map +1 -0
- package/dist/relay-reconnect.js +29 -0
- package/dist/relay-reconnect.js.map +1 -0
- package/dist/reply-lag.d.ts +11 -0
- package/dist/reply-lag.d.ts.map +1 -0
- package/dist/reply-lag.js +46 -0
- package/dist/reply-lag.js.map +1 -0
- package/dist/resolve-named-agent.d.ts +49 -0
- package/dist/resolve-named-agent.d.ts.map +1 -0
- package/dist/resolve-named-agent.js +77 -0
- package/dist/resolve-named-agent.js.map +1 -0
- package/dist/restart-seal-resolver.d.ts +110 -0
- package/dist/restart-seal-resolver.d.ts.map +1 -0
- package/dist/restart-seal-resolver.js +353 -0
- package/dist/restart-seal-resolver.js.map +1 -0
- package/dist/resume-last-seen.d.ts +15 -0
- package/dist/resume-last-seen.d.ts.map +1 -0
- package/dist/resume-last-seen.js +44 -0
- package/dist/resume-last-seen.js.map +1 -0
- package/dist/retry-queue.d.ts +203 -0
- package/dist/retry-queue.d.ts.map +1 -0
- package/dist/retry-queue.js +701 -0
- package/dist/retry-queue.js.map +1 -0
- package/dist/roster-freshness.d.ts +160 -0
- package/dist/roster-freshness.d.ts.map +1 -0
- package/dist/roster-freshness.js +250 -0
- package/dist/roster-freshness.js.map +1 -0
- package/dist/screening-status.d.ts +15 -0
- package/dist/screening-status.d.ts.map +1 -0
- package/dist/screening-status.js +65 -0
- package/dist/screening-status.js.map +1 -0
- package/dist/seal-carried-close.d.ts +37 -0
- package/dist/seal-carried-close.d.ts.map +1 -0
- package/dist/seal-carried-close.js +179 -0
- package/dist/seal-carried-close.js.map +1 -0
- package/dist/seal-certificate-pull.d.ts +79 -0
- package/dist/seal-certificate-pull.d.ts.map +1 -0
- package/dist/seal-certificate-pull.js +186 -0
- package/dist/seal-certificate-pull.js.map +1 -0
- package/dist/seal-certified-root-check.d.ts +37 -0
- package/dist/seal-certified-root-check.d.ts.map +1 -0
- package/dist/seal-certified-root-check.js +127 -0
- package/dist/seal-certified-root-check.js.map +1 -0
- package/dist/seal-coordinator.d.ts +118 -0
- package/dist/seal-coordinator.d.ts.map +1 -0
- package/dist/seal-coordinator.js +927 -0
- package/dist/seal-coordinator.js.map +1 -0
- package/dist/seal-escalation.d.ts +80 -0
- package/dist/seal-escalation.d.ts.map +1 -0
- package/dist/seal-escalation.js +283 -0
- package/dist/seal-escalation.js.map +1 -0
- package/dist/seal-evidence-root-check.d.ts +70 -0
- package/dist/seal-evidence-root-check.d.ts.map +1 -0
- package/dist/seal-evidence-root-check.js +199 -0
- package/dist/seal-evidence-root-check.js.map +1 -0
- package/dist/seal-failure-store.d.ts +139 -0
- package/dist/seal-failure-store.d.ts.map +1 -0
- package/dist/seal-failure-store.js +207 -0
- package/dist/seal-failure-store.js.map +1 -0
- package/dist/seal-flows.d.ts +107 -0
- package/dist/seal-flows.d.ts.map +1 -0
- package/dist/seal-flows.js +638 -0
- package/dist/seal-flows.js.map +1 -0
- package/dist/seal-frontier-verify.d.ts +103 -0
- package/dist/seal-frontier-verify.d.ts.map +1 -0
- package/dist/seal-frontier-verify.js +143 -0
- package/dist/seal-frontier-verify.js.map +1 -0
- package/dist/seal-leaf.d.ts +58 -0
- package/dist/seal-leaf.d.ts.map +1 -0
- package/dist/seal-leaf.js +112 -0
- package/dist/seal-leaf.js.map +1 -0
- package/dist/seal-legibility-tbs.d.ts +25 -0
- package/dist/seal-legibility-tbs.d.ts.map +1 -0
- package/dist/seal-legibility-tbs.js +77 -0
- package/dist/seal-legibility-tbs.js.map +1 -0
- package/dist/seal-local-terminus.d.ts +41 -0
- package/dist/seal-local-terminus.d.ts.map +1 -0
- package/dist/seal-local-terminus.js +170 -0
- package/dist/seal-local-terminus.js.map +1 -0
- package/dist/seal-receipt-upgrade.d.ts +30 -0
- package/dist/seal-receipt-upgrade.d.ts.map +1 -0
- package/dist/seal-receipt-upgrade.js +49 -0
- package/dist/seal-receipt-upgrade.js.map +1 -0
- package/dist/seal-relay-silence.d.ts +51 -0
- package/dist/seal-relay-silence.d.ts.map +1 -0
- package/dist/seal-relay-silence.js +76 -0
- package/dist/seal-relay-silence.js.map +1 -0
- package/dist/seal-settle.d.ts +38 -0
- package/dist/seal-settle.d.ts.map +1 -0
- package/dist/seal-settle.js +33 -0
- package/dist/seal-settle.js.map +1 -0
- package/dist/seal-upgrade.d.ts +107 -0
- package/dist/seal-upgrade.d.ts.map +1 -0
- package/dist/seal-upgrade.js +200 -0
- package/dist/seal-upgrade.js.map +1 -0
- package/dist/sealed-conversation.d.ts +36 -0
- package/dist/sealed-conversation.d.ts.map +1 -0
- package/dist/sealed-conversation.js +171 -0
- package/dist/sealed-conversation.js.map +1 -0
- package/dist/sealed-leaf-set.d.ts +92 -0
- package/dist/sealed-leaf-set.d.ts.map +1 -0
- package/dist/sealed-leaf-set.js +122 -0
- package/dist/sealed-leaf-set.js.map +1 -0
- package/dist/send-claims.d.ts +56 -0
- package/dist/send-claims.d.ts.map +1 -0
- package/dist/send-claims.js +50 -0
- package/dist/send-claims.js.map +1 -0
- package/dist/session-assignment-parser.d.ts +104 -0
- package/dist/session-assignment-parser.d.ts.map +1 -0
- package/dist/session-assignment-parser.js +345 -0
- package/dist/session-assignment-parser.js.map +1 -0
- package/dist/session-category.d.ts +19 -0
- package/dist/session-category.d.ts.map +1 -0
- package/dist/session-category.js +14 -0
- package/dist/session-category.js.map +1 -0
- package/dist/session-ceremony.d.ts +297 -0
- package/dist/session-ceremony.d.ts.map +1 -0
- package/dist/session-ceremony.js +964 -0
- package/dist/session-ceremony.js.map +1 -0
- package/dist/session-closed.d.ts +79 -0
- package/dist/session-closed.d.ts.map +1 -0
- package/dist/session-closed.js +189 -0
- package/dist/session-closed.js.map +1 -0
- package/dist/session-connection-gater.d.ts +148 -0
- package/dist/session-connection-gater.d.ts.map +1 -0
- package/dist/session-connection-gater.js +332 -0
- package/dist/session-connection-gater.js.map +1 -0
- package/dist/session-content-context.d.ts +162 -0
- package/dist/session-content-context.d.ts.map +1 -0
- package/dist/session-content-context.js +2 -0
- package/dist/session-content-context.js.map +1 -0
- package/dist/session-content-handlers.d.ts +82 -0
- package/dist/session-content-handlers.d.ts.map +1 -0
- package/dist/session-content-handlers.js +1382 -0
- package/dist/session-content-handlers.js.map +1 -0
- package/dist/session-content-ingest.d.ts +206 -0
- package/dist/session-content-ingest.d.ts.map +1 -0
- package/dist/session-content-ingest.js +2167 -0
- package/dist/session-content-ingest.js.map +1 -0
- package/dist/session-content-send.d.ts +191 -0
- package/dist/session-content-send.d.ts.map +1 -0
- package/dist/session-content-send.js +1360 -0
- package/dist/session-content-send.js.map +1 -0
- package/dist/session-delivery-acks.d.ts +169 -0
- package/dist/session-delivery-acks.d.ts.map +1 -0
- package/dist/session-delivery-acks.js +569 -0
- package/dist/session-delivery-acks.js.map +1 -0
- package/dist/session-ephemerals.d.ts +279 -0
- package/dist/session-ephemerals.d.ts.map +1 -0
- package/dist/session-ephemerals.js +591 -0
- package/dist/session-ephemerals.js.map +1 -0
- package/dist/session-leaf-records.d.ts +159 -0
- package/dist/session-leaf-records.d.ts.map +1 -0
- package/dist/session-leaf-records.js +408 -0
- package/dist/session-leaf-records.js.map +1 -0
- package/dist/session-lifecycle.d.ts +303 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +1679 -0
- package/dist/session-lifecycle.js.map +1 -0
- package/dist/session-liveness.d.ts +135 -0
- package/dist/session-liveness.d.ts.map +1 -0
- package/dist/session-liveness.js +347 -0
- package/dist/session-liveness.js.map +1 -0
- package/dist/session-name.d.ts +35 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +60 -0
- package/dist/session-name.js.map +1 -0
- package/dist/session-node-factory.d.ts +18 -0
- package/dist/session-node-factory.d.ts.map +1 -0
- package/dist/session-node-factory.js +182 -0
- package/dist/session-node-factory.js.map +1 -0
- package/dist/session-node-manager.d.ts +877 -0
- package/dist/session-node-manager.d.ts.map +1 -0
- package/dist/session-node-manager.js +2998 -0
- package/dist/session-node-manager.js.map +1 -0
- package/dist/session-node-types.d.ts +1057 -0
- package/dist/session-node-types.d.ts.map +1 -0
- package/dist/session-node-types.js +657 -0
- package/dist/session-node-types.js.map +1 -0
- package/dist/session-notify.d.ts +46 -0
- package/dist/session-notify.d.ts.map +1 -0
- package/dist/session-notify.js +116 -0
- package/dist/session-notify.js.map +1 -0
- package/dist/session-own-chain-store.d.ts +65 -0
- package/dist/session-own-chain-store.d.ts.map +1 -0
- package/dist/session-own-chain-store.js +75 -0
- package/dist/session-own-chain-store.js.map +1 -0
- package/dist/session-queries.d.ts +476 -0
- package/dist/session-queries.d.ts.map +1 -0
- package/dist/session-queries.js +1007 -0
- package/dist/session-queries.js.map +1 -0
- package/dist/session-read-handlers.d.ts +87 -0
- package/dist/session-read-handlers.d.ts.map +1 -0
- package/dist/session-read-handlers.js +689 -0
- package/dist/session-read-handlers.js.map +1 -0
- package/dist/session-records.d.ts +341 -0
- package/dist/session-records.d.ts.map +1 -0
- package/dist/session-records.js +858 -0
- package/dist/session-records.js.map +1 -0
- package/dist/session-relay-client.d.ts +659 -0
- package/dist/session-relay-client.d.ts.map +1 -0
- package/dist/session-relay-client.js +2876 -0
- package/dist/session-relay-client.js.map +1 -0
- package/dist/session-relay.d.ts +397 -0
- package/dist/session-relay.d.ts.map +1 -0
- package/dist/session-relay.js +1636 -0
- package/dist/session-relay.js.map +1 -0
- package/dist/session-salt-agreement.d.ts +331 -0
- package/dist/session-salt-agreement.d.ts.map +1 -0
- package/dist/session-salt-agreement.js +472 -0
- package/dist/session-salt-agreement.js.map +1 -0
- package/dist/session-salts.d.ts +432 -0
- package/dist/session-salts.d.ts.map +1 -0
- package/dist/session-salts.js +1540 -0
- package/dist/session-salts.js.map +1 -0
- package/dist/session-schema.d.ts +30 -0
- package/dist/session-schema.d.ts.map +1 -0
- package/dist/session-schema.js +877 -0
- package/dist/session-schema.js.map +1 -0
- package/dist/session-seal-leaf-store.d.ts +70 -0
- package/dist/session-seal-leaf-store.d.ts.map +1 -0
- package/dist/session-seal-leaf-store.js +105 -0
- package/dist/session-seal-leaf-store.js.map +1 -0
- package/dist/session-seal.d.ts +334 -0
- package/dist/session-seal.d.ts.map +1 -0
- package/dist/session-seal.js +1017 -0
- package/dist/session-seal.js.map +1 -0
- package/dist/session-terminal-refusal.d.ts +65 -0
- package/dist/session-terminal-refusal.d.ts.map +1 -0
- package/dist/session-terminal-refusal.js +87 -0
- package/dist/session-terminal-refusal.js.map +1 -0
- package/dist/session-tree.d.ts +110 -0
- package/dist/session-tree.d.ts.map +1 -0
- package/dist/session-tree.js +144 -0
- package/dist/session-tree.js.map +1 -0
- package/dist/session-views.d.ts +47 -0
- package/dist/session-views.d.ts.map +1 -0
- package/dist/session-views.js +278 -0
- package/dist/session-views.js.map +1 -0
- package/dist/signal-handlers.d.ts +63 -0
- package/dist/signal-handlers.d.ts.map +1 -0
- package/dist/signal-handlers.js +980 -0
- package/dist/signal-handlers.js.map +1 -0
- package/dist/signal-requirement-policy.d.ts +51 -0
- package/dist/signal-requirement-policy.d.ts.map +1 -0
- package/dist/signal-requirement-policy.js +89 -0
- package/dist/signal-requirement-policy.js.map +1 -0
- package/dist/signal-revocability.d.ts +49 -0
- package/dist/signal-revocability.d.ts.map +1 -0
- package/dist/signal-revocability.js +93 -0
- package/dist/signal-revocability.js.map +1 -0
- package/dist/signal-submission.d.ts +181 -0
- package/dist/signal-submission.d.ts.map +1 -0
- package/dist/signal-submission.js +368 -0
- package/dist/signal-submission.js.map +1 -0
- package/dist/signaling-connect.d.ts +118 -0
- package/dist/signaling-connect.d.ts.map +1 -0
- package/dist/signaling-connect.js +538 -0
- package/dist/signaling-connect.js.map +1 -0
- package/dist/signaling-wiring.d.ts +105 -0
- package/dist/signaling-wiring.d.ts.map +1 -0
- package/dist/signaling-wiring.js +393 -0
- package/dist/signaling-wiring.js.map +1 -0
- package/dist/singleton-lock.d.ts +85 -0
- package/dist/singleton-lock.d.ts.map +1 -0
- package/dist/singleton-lock.js +219 -0
- package/dist/singleton-lock.js.map +1 -0
- package/dist/sqlcipher-db.d.ts +139 -0
- package/dist/sqlcipher-db.d.ts.map +1 -0
- package/dist/sqlcipher-db.js +357 -0
- package/dist/sqlcipher-db.js.map +1 -0
- package/dist/standing-receivers.d.ts +319 -0
- package/dist/standing-receivers.d.ts.map +1 -0
- package/dist/standing-receivers.js +1295 -0
- package/dist/standing-receivers.js.map +1 -0
- package/dist/start-agent.d.ts +64 -0
- package/dist/start-agent.d.ts.map +1 -0
- package/dist/start-agent.js +136 -0
- package/dist/start-agent.js.map +1 -0
- package/dist/status-handler.d.ts +54 -0
- package/dist/status-handler.d.ts.map +1 -0
- package/dist/status-handler.js +61 -0
- package/dist/status-handler.js.map +1 -0
- package/dist/submission-retry.d.ts +208 -0
- package/dist/submission-retry.d.ts.map +1 -0
- package/dist/submission-retry.js +506 -0
- package/dist/submission-retry.js.map +1 -0
- package/dist/telegram-bot-client.d.ts +34 -0
- package/dist/telegram-bot-client.d.ts.map +1 -0
- package/dist/telegram-bot-client.js +36 -0
- package/dist/telegram-bot-client.js.map +1 -0
- package/dist/telegram-doorbell.d.ts +38 -0
- package/dist/telegram-doorbell.d.ts.map +1 -0
- package/dist/telegram-doorbell.js +140 -0
- package/dist/telegram-doorbell.js.map +1 -0
- package/dist/test-handlers.d.ts +62 -0
- package/dist/test-handlers.d.ts.map +1 -0
- package/dist/test-handlers.js +240 -0
- package/dist/test-handlers.js.map +1 -0
- package/dist/testing.d.ts +10 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +10 -0
- package/dist/testing.js.map +1 -0
- package/dist/transport-composition.d.ts +31 -0
- package/dist/transport-composition.d.ts.map +1 -0
- package/dist/transport-composition.js +55 -0
- package/dist/transport-composition.js.map +1 -0
- package/dist/transport-selector.d.ts +202 -0
- package/dist/transport-selector.d.ts.map +1 -0
- package/dist/transport-selector.js +196 -0
- package/dist/transport-selector.js.map +1 -0
- package/dist/trust-signal-pickup-listener.d.ts +43 -0
- package/dist/trust-signal-pickup-listener.d.ts.map +1 -0
- package/dist/trust-signal-pickup-listener.js +48 -0
- package/dist/trust-signal-pickup-listener.js.map +1 -0
- package/dist/trust-signal-store.d.ts +406 -0
- package/dist/trust-signal-store.d.ts.map +1 -0
- package/dist/trust-signal-store.js +939 -0
- package/dist/trust-signal-store.js.map +1 -0
- package/dist/trust-signal-sweep-tick.d.ts +60 -0
- package/dist/trust-signal-sweep-tick.d.ts.map +1 -0
- package/dist/trust-signal-sweep-tick.js +101 -0
- package/dist/trust-signal-sweep-tick.js.map +1 -0
- package/dist/trust-signal-sweep.d.ts +94 -0
- package/dist/trust-signal-sweep.d.ts.map +1 -0
- package/dist/trust-signal-sweep.js +147 -0
- package/dist/trust-signal-sweep.js.map +1 -0
- package/dist/type-registry.d.ts +42 -0
- package/dist/type-registry.d.ts.map +1 -0
- package/dist/type-registry.js +37 -0
- package/dist/type-registry.js.map +1 -0
- package/dist/types.d.ts +746 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/dist/unresolved-nodes-report.d.ts +14 -0
- package/dist/unresolved-nodes-report.d.ts.map +1 -0
- package/dist/unresolved-nodes-report.js +96 -0
- package/dist/unresolved-nodes-report.js.map +1 -0
- package/dist/vocabulary.d.ts +150 -0
- package/dist/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary.js +386 -0
- package/dist/vocabulary.js.map +1 -0
- package/dist/who-label.d.ts +28 -0
- package/dist/who-label.d.ts.map +1 -0
- package/dist/who-label.js +31 -0
- package/dist/who-label.js.map +1 -0
- package/dist/who-resolver.d.ts +15 -0
- package/dist/who-resolver.d.ts.map +1 -0
- package/dist/who-resolver.js +47 -0
- package/dist/who-resolver.js.map +1 -0
- package/dist/wire-content-hash.d.ts +93 -0
- package/dist/wire-content-hash.d.ts.map +1 -0
- package/dist/wire-content-hash.js +116 -0
- package/dist/wire-content-hash.js.map +1 -0
- package/dist/withheld-content.d.ts +13 -0
- package/dist/withheld-content.d.ts.map +1 -0
- package/dist/withheld-content.js +46 -0
- package/dist/withheld-content.js.map +1 -0
- package/dist/witness-alerts.d.ts +40 -0
- package/dist/witness-alerts.d.ts.map +1 -0
- package/dist/witness-alerts.js +102 -0
- package/dist/witness-alerts.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How this daemon reaches a directory, and what it tells a relay about itself when it gets there.
|
|
3
|
+
*
|
|
4
|
+
* The relay-witness connect parameters — who is asking, over which circuit, with which online token
|
|
5
|
+
* — and the default signaling connect that carries them. Also the single shared signaling manager,
|
|
6
|
+
* which exists ONLY on the in-process test path: in production every agent dials its own, because
|
|
7
|
+
* the directory routes by the pubkey that authenticated the stream.
|
|
8
|
+
*/
|
|
9
|
+
import { SignalingManager } from "@cello-protocol/transport";
|
|
10
|
+
export function createDirectoryConnect(deps) {
|
|
11
|
+
const { logger, keyProviders, signalingConnect, directoryEndpointResolver } = deps;
|
|
12
|
+
// M7 DOD-SPINE-6 / MSG-001-3b: assemble the relay-witness connect params for a
|
|
13
|
+
// session node from the FROST-signed assignment (relay endpoint + 16-byte session id)
|
|
14
|
+
// and the acting agent's K_local. Returns undefined when the agent key or relay
|
|
15
|
+
// endpoint is missing — the session then runs on the direct content path without a
|
|
16
|
+
// relay witness (degraded, never blocked).
|
|
17
|
+
const buildRelayConnectParams = async (agentName, assignment) => {
|
|
18
|
+
const kp = keyProviders.get(agentName);
|
|
19
|
+
const endpoint = assignment.relay_endpoint;
|
|
20
|
+
if (!kp || !endpoint || !endpoint.peer_id || !endpoint.multiaddrs || endpoint.multiaddrs.length === 0) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
// FED-OPTIONB-SETUP-001 (Option B): when the directory included the per-node relay-assignment
|
|
24
|
+
// signature, carry the assignment so the client presents it to its chosen relay (replacing the
|
|
25
|
+
// directory→relay dial). Built only for relay-mode assignments that carry relay_directory_signature;
|
|
26
|
+
// absent ⇒ the client skips client_record_assignment (direct/legacy/pre-M8B).
|
|
27
|
+
const relayDirSig = assignment.relay_directory_signature;
|
|
28
|
+
// FED-OPTIONB-SETUP-001 (fallback-finder #1/#5): a relay-mode assignment MUST carry a
|
|
29
|
+
// relay_directory_signature — the directory always signs one. If it is absent or malformed (the
|
|
30
|
+
// parser dropped it to undefined) for a relay-mode session, the session silently degrades to "no
|
|
31
|
+
// relay witness" and looks indistinguishable from a legitimate direct-mode session. Warn LOUD so the
|
|
32
|
+
// missing/corrupt witness has a named cause (this is the only diagnosable signal on a PURE RECEIVER,
|
|
33
|
+
// which never submits and so never surfaces relay_unavailable). Unwitnessed is an allowed sovereign-
|
|
34
|
+
// redundancy state, but it must not be invisible.
|
|
35
|
+
if (assignment.transport_mode === "relay" && !relayDirSig) {
|
|
36
|
+
logger.warn("session.relay.assignment.signature.missing", {
|
|
37
|
+
agentName,
|
|
38
|
+
sessionId: Buffer.from(assignment.session_id).toString("hex").slice(0, 16),
|
|
39
|
+
reason: "relay_mode_assignment_without_directory_signature",
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 069-ORDERPROOF: the carry now exists for EITHER of two independent reasons — something to
|
|
44
|
+
* present to the relay, or the name of the relay whose ordering attestations this session will
|
|
45
|
+
* accept. Requiring both would mean a session that knows its relay but has no per-node
|
|
46
|
+
* signature verifies nothing at all, which hands the relay a way to opt out of being checked.
|
|
47
|
+
*/
|
|
48
|
+
const relayAnchorHex = assignment.relay_id && /^[0-9a-f]{64}$/i.test(assignment.relay_id) ? assignment.relay_id : undefined;
|
|
49
|
+
const carry = relayDirSig || relayAnchorHex
|
|
50
|
+
? {
|
|
51
|
+
participantA: assignment.participant_a.pubkey,
|
|
52
|
+
participantB: assignment.participant_b.pubkey,
|
|
53
|
+
sessionTimestamp: assignment.session_timestamp, sessionSignature: assignment.directory_signature,
|
|
54
|
+
initiatorSessionPeerId: assignment.initiator_session_peer_id,
|
|
55
|
+
counterpartySessionPeerId: assignment.counterparty_session_peer_id,
|
|
56
|
+
...(relayDirSig ? { assignmentSignature: relayDirSig } : {}),
|
|
57
|
+
...(relayAnchorHex ? { relayPubkeyHex: relayAnchorHex } : {}),
|
|
58
|
+
}
|
|
59
|
+
: undefined;
|
|
60
|
+
return {
|
|
61
|
+
relayPeerId: endpoint.peer_id,
|
|
62
|
+
relayAddrs: endpoint.multiaddrs,
|
|
63
|
+
keyProvider: kp,
|
|
64
|
+
senderPubkey: await kp.getPublicKey(),
|
|
65
|
+
sessionIdBytes: assignment.session_id,
|
|
66
|
+
assignment: carry,
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
// M7-SIGNAL-001: Instantiate SignalingManager — owns directory signaling stream lifecycle.
|
|
70
|
+
const defaultConnect = async () => {
|
|
71
|
+
throw new Error("directory_signaling_not_configured");
|
|
72
|
+
};
|
|
73
|
+
// CELLO-M7-CONN-001 (DOD-CONN-1): the keystone is DELETED. There is no shared directory
|
|
74
|
+
// connection borrowing the "primary" agent's identity. In PRODUCTION every agent operates its
|
|
75
|
+
// OWN directory signaling connection authenticated as itself (getAgentSignaling / signalingFor);
|
|
76
|
+
// removing any agent tears down only that agent's own connection, so the daemon never holds a
|
|
77
|
+
// connection authenticated as a removed agent (the Demo1 stranding bug). A single SHARED manager
|
|
78
|
+
// exists ONLY for the IN-PROCESS TEST path (NOT back-compat — there is no old client, and Rule F deletes back-compat on sight) (a single injected signalingConnect,
|
|
79
|
+
// no per-agent isolation) — in production it is undefined.
|
|
80
|
+
//
|
|
81
|
+
// The SHARED (in-process test / pre-resolver) signaling path has no directory-facing node of its
|
|
82
|
+
// own: nodes are per-agent, published by each agent's manager (getAgentSignaling → `nodeRef`).
|
|
83
|
+
// There is nothing to return here, and saying so explicitly is the point.
|
|
84
|
+
//
|
|
85
|
+
// Consequence, and it is load-bearing: session-ceremony's hydrateShareAndStubs leaves
|
|
86
|
+
// `directoryNodeStubs` UNDEFINED when getNode() is null, so FrostThresholdSigner runs with an
|
|
87
|
+
// EMPTY set of counterparties and its pre-check (reachable < threshold-1) REFUSES. That is the
|
|
88
|
+
// sovereign-node invariant holding — a daemon with no directory nodes must never sign alone. Do
|
|
89
|
+
// NOT "fix" an empty stub set by substituting in-process stubs; that converts a refusal into a
|
|
90
|
+
// forged seal. Pinned by frost.test.ts, "SOVEREIGN-NODE INVARIANT".
|
|
91
|
+
const noSharedDirectoryNode = () => null;
|
|
92
|
+
// H1: a long-running daemon must ride out directory outages — notably the 25-30 min multi-region
|
|
93
|
+
// directory deploy. Use an effectively-unbounded reconnect budget with a capped backoff so each
|
|
94
|
+
// connection keeps retrying and reconnects within ~maxBackoffMs of the directory returning.
|
|
95
|
+
const sharedSignaling = directoryEndpointResolver
|
|
96
|
+
? undefined
|
|
97
|
+
: new SignalingManager({
|
|
98
|
+
connect: signalingConnect ?? defaultConnect,
|
|
99
|
+
logger,
|
|
100
|
+
maxReconnectAttempts: Number.MAX_SAFE_INTEGER,
|
|
101
|
+
maxBackoffMs: 30_000,
|
|
102
|
+
});
|
|
103
|
+
// `defaultConnect` is not returned: its only consumer is the shared manager built here.
|
|
104
|
+
return { buildRelayConnectParams, noSharedDirectoryNode, sharedSignaling };
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=directory-connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-connect.js","sourceRoot":"","sources":["../src/directory-connect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,gBAAgB,EAAsC,MAAM,2BAA2B,CAAC;AAgBjG,MAAM,UAAU,sBAAsB,CAAC,IAA0B;IAC/D,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAAC;IAEnF,+EAA+E;IAC/E,sFAAsF;IACtF,gFAAgF;IAChF,mFAAmF;IACnF,2CAA2C;IAC3C,MAAM,uBAAuB,GAAG,KAAK,EACnC,SAAiB,EACjB,UAAkE,EACzB,EAAE;QAC3C,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtG,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,8FAA8F;QAC9F,+FAA+F;QAC/F,qGAAqG;QACrG,8EAA8E;QAC9E,MAAM,WAAW,GAAG,UAAU,CAAC,yBAAyB,CAAC;QACzD,sFAAsF;QACtF,gGAAgG;QAChG,iGAAiG;QACjG,qGAAqG;QACrG,qGAAqG;QACrG,qGAAqG;QACrG,kDAAkD;QAClD,IAAI,UAAU,CAAC,cAAc,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACxD,SAAS;gBACT,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1E,MAAM,EAAE,mDAAmD;aAC5D,CAAC,CAAC;QACL,CAAC;QACD;;;;;WAKG;QACH,MAAM,cAAc,GAClB,UAAU,CAAC,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,MAAM,KAAK,GAAqC,WAAW,IAAI,cAAc;YAC3E,CAAC,CAAC;gBACE,YAAY,EAAE,UAAU,CAAC,aAAa,CAAC,MAAM;gBAC7C,YAAY,EAAE,UAAU,CAAC,aAAa,CAAC,MAAM;gBAC7C,gBAAgB,EAAE,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,CAAC,mBAAmB;gBAChG,sBAAsB,EAAE,UAAU,CAAC,yBAAyB;gBAC5D,yBAAyB,EAAE,UAAU,CAAC,4BAA4B;gBAClE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D;YACH,CAAC,CAAC,SAAS,CAAC;QACd,OAAO;YACL,WAAW,EAAE,QAAQ,CAAC,OAAO;YAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE;YACrC,cAAc,EAAE,UAAU,CAAC,UAAU;YACrC,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC,CAAC;IAEF,2FAA2F;IAC3F,MAAM,cAAc,GAAG,KAAK,IAA4B,EAAE;QACxD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,wFAAwF;IACxF,8FAA8F;IAC9F,iGAAiG;IACjG,8FAA8F;IAC9F,iGAAiG;IACjG,oKAAoK;IACpK,2DAA2D;IAC3D,EAAE;IACF,iGAAiG;IACjG,+FAA+F;IAC/F,0EAA0E;IAC1E,EAAE;IACF,sFAAsF;IACtF,8FAA8F;IAC9F,+FAA+F;IAC/F,gGAAgG;IAChG,+FAA+F;IAC/F,oEAAoE;IACpE,MAAM,qBAAqB,GAAG,GAAqB,EAAE,CAAC,IAAI,CAAC;IAE3D,iGAAiG;IACjG,gGAAgG;IAChG,4FAA4F;IAC5F,MAAM,eAAe,GAAiC,yBAAyB;QAC7E,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,gBAAgB,CAAC;YACnB,OAAO,EAAE,gBAAgB,IAAI,cAAc;YAC3C,MAAM;YACN,oBAAoB,EAAE,MAAM,CAAC,gBAAgB;YAC7C,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;IAEP,wFAAwF;IACxF,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,eAAe,EAAE,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the daemon forgets, and what it says, when an IPC connection closes.
|
|
3
|
+
*
|
|
4
|
+
* Why the close is reported at all — `DOD-M15-IPCVISIBLE-1` — is written below, at the code that
|
|
5
|
+
* builds the report. It is not repeated here: a paragraph kept in two places is one someone corrects
|
|
6
|
+
* in one of them.
|
|
7
|
+
*
|
|
8
|
+
* The three per-connection maps are released by the module that owns them; this is the reporting
|
|
9
|
+
* half, and it returns its context rather than logging its own line, because the IPC server merges
|
|
10
|
+
* it into the single `daemon.ipc.disconnected` entry. A second line under the same name left
|
|
11
|
+
* neither carrying the whole picture and doubled every count.
|
|
12
|
+
*/
|
|
13
|
+
import type { IpcServer } from "./ipc-server.js";
|
|
14
|
+
import type { NotificationDispatcher } from "./notification-dispatcher.js";
|
|
15
|
+
import type { InboundSessionWaiter } from "./inbound-sessions.js";
|
|
16
|
+
export interface DisconnectCleanupDeps {
|
|
17
|
+
ipcServer: IpcServer;
|
|
18
|
+
/** Read this connection's selection before it is forgotten — the log needs what it was attending. */
|
|
19
|
+
getConnState: (connectionId: string) => {
|
|
20
|
+
currentAgent: string | null;
|
|
21
|
+
clientType?: string;
|
|
22
|
+
} | undefined;
|
|
23
|
+
/** How many connections still attend an agent, after this one goes. */
|
|
24
|
+
countAttendanceFor: (agentName: string) => number;
|
|
25
|
+
/**
|
|
26
|
+
* DOD-M15-AWAYSCOPE-1 — tell this agent's counterparties that the last attendee just left.
|
|
27
|
+
*
|
|
28
|
+
* Injected as a function rather than the whole manager: this module's job is releasing
|
|
29
|
+
* connection-scoped state, and handing it a session manager would invite it to grow one.
|
|
30
|
+
*/
|
|
31
|
+
announceAttendance: (agentName: string, attendance: "attended" | "unattended" | "offline") => void;
|
|
32
|
+
/** Releases the three per-connection maps. Lives with the maps, not here. */
|
|
33
|
+
forgetConnection: (connectionId: string) => void;
|
|
34
|
+
/** Callers blocked in `cello_await_session` for an agent, so a dying connection releases them. */
|
|
35
|
+
inboundSessionWaiters: Map<string, InboundSessionWaiter[]>;
|
|
36
|
+
/**
|
|
37
|
+
* ⚠️ A GETTER, AND THE REASON IS NOT THE OBVIOUS ONE. The dispatcher is a `const` 82 lines ABOVE
|
|
38
|
+
* this wiring, so passing it by value would work today. The getter is there so that moving the
|
|
39
|
+
* construction below cannot break the disconnect path silently — the same shape as `getStop` in
|
|
40
|
+
* `ipc-surface.ts`.
|
|
41
|
+
*
|
|
42
|
+
* An earlier version of this comment said the dispatcher was constructed BELOW. It was not, and a
|
|
43
|
+
* false worked example of late binding is worse than none: the rule this order paid for is that a
|
|
44
|
+
* value assigned below a call site must be read through a getter, and the silent shape is a `let`
|
|
45
|
+
* (a `const` crashes loudly on TDZ). Teaching "getter because it is below" from a value that is
|
|
46
|
+
* above hands the next reader the wrong discriminator.
|
|
47
|
+
*/
|
|
48
|
+
getNotificationDispatcher: () => NotificationDispatcher;
|
|
49
|
+
}
|
|
50
|
+
export declare function wireDisconnectCleanup(deps: DisconnectCleanupDeps): void;
|
|
51
|
+
//# sourceMappingURL=disconnect-cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disconnect-cleanup.d.ts","sourceRoot":"","sources":["../src/disconnect-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,qGAAqG;IACrG,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACzG,uEAAuE;IACvE,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD;;;;;OAKG;IACH,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,KAAK,IAAI,CAAC;IACnG,6EAA6E;IAC7E,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kGAAkG;IAClG,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC3D;;;;;;;;;;;OAWG;IACH,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;CACzD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAwEvE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export function wireDisconnectCleanup(deps) {
|
|
2
|
+
const { ipcServer, getConnState, countAttendanceFor, forgetConnection, announceAttendance, inboundSessionWaiters, getNotificationDispatcher, } = deps;
|
|
3
|
+
// MCP-001: Clean up per-connection state when a connection disconnects
|
|
4
|
+
// MCP-002: Also unregister from notification dispatcher
|
|
5
|
+
ipcServer.onDisconnect((connectionId) => {
|
|
6
|
+
/**
|
|
7
|
+
* DOD-M15-IPCVISIBLE-1: SAY THAT IT CLOSED, and say what it was attending.
|
|
8
|
+
*
|
|
9
|
+
* `daemon.ipc.connected` fired on every open and nothing on close, so a live client and a dead
|
|
10
|
+
* one that was never cleaned up looked identical in the log. The attended agent is the field
|
|
11
|
+
* that matters: attendance dropping was silent, and an agent losing its last attendee changes
|
|
12
|
+
* whether away-messages fire and who receives doorbells — so a session that stopped waking is
|
|
13
|
+
* diagnosable from the log rather than by guesswork.
|
|
14
|
+
*/
|
|
15
|
+
const closing = getConnState(connectionId);
|
|
16
|
+
const stillAttending = closing?.currentAgent
|
|
17
|
+
? countAttendanceFor(closing.currentAgent) - 1
|
|
18
|
+
: null;
|
|
19
|
+
// RETURNED, not logged here — `ipcServer` merges this into its single
|
|
20
|
+
// `daemon.ipc.disconnected` line. A second line under the same name left neither carrying the
|
|
21
|
+
// whole picture and doubled every count (review F8).
|
|
22
|
+
const disconnectContext = {
|
|
23
|
+
clientType: closing?.clientType ?? "unknown",
|
|
24
|
+
attendedAgent: closing?.currentAgent ?? null,
|
|
25
|
+
...(stillAttending !== null ? { remainingAttendance: stillAttending } : {}),
|
|
26
|
+
...(stillAttending === 0
|
|
27
|
+
? {
|
|
28
|
+
impact: "that agent has no attending session left — inbound sessions are now answered with " +
|
|
29
|
+
"its away message rather than a live reply, and its doorbells reach nobody",
|
|
30
|
+
}
|
|
31
|
+
: {}),
|
|
32
|
+
};
|
|
33
|
+
// The three per-connection maps are released by the module that owns them; the reasons each
|
|
34
|
+
// must die with its connection live there, beside the containers.
|
|
35
|
+
forgetConnection(connectionId);
|
|
36
|
+
/**
|
|
37
|
+
* DOD-M15-AWAYSCOPE-1 — the counterparty is told, the moment the LAST attendee leaves.
|
|
38
|
+
*
|
|
39
|
+
* ⚠️ AFTER `forgetConnection`, and that ordering is the whole correctness of this line. The count
|
|
40
|
+
* above is computed as "minus one" precisely because this connection is still in the map; here
|
|
41
|
+
* it is gone, so `countAttendanceFor` reads the truth and a co-attended agent — legitimate and
|
|
42
|
+
* permanent — does not get reported as unattended because one of several clients closed.
|
|
43
|
+
*
|
|
44
|
+
* This is what the away reply used to do by sending a message into the conversation, which took
|
|
45
|
+
* a hash-chain leaf and cost a completed exchange its receipt. Saying it out of band costs
|
|
46
|
+
* nothing and is readable by the counterparty whenever they ask.
|
|
47
|
+
*/
|
|
48
|
+
if (closing?.currentAgent && countAttendanceFor(closing.currentAgent) === 0) {
|
|
49
|
+
announceAttendance(closing.currentAgent, "unattended");
|
|
50
|
+
}
|
|
51
|
+
getNotificationDispatcher().unregisterConnection(connectionId);
|
|
52
|
+
// Seam 2 (review H2): evict any cello_await_session waiters owned by this connection.
|
|
53
|
+
// Otherwise enqueueInboundSession would hand the next inbound session to a closed
|
|
54
|
+
// connection's waiter and the event would be lost. deliver(null) clears the waiter's
|
|
55
|
+
// timer and resolves its (now-orphaned) promise as a timeout.
|
|
56
|
+
for (const [agentName, waiters] of inboundSessionWaiters) {
|
|
57
|
+
const survivors = [];
|
|
58
|
+
for (const w of waiters) {
|
|
59
|
+
if (w.connectionId === connectionId)
|
|
60
|
+
w.deliver(null);
|
|
61
|
+
else
|
|
62
|
+
survivors.push(w);
|
|
63
|
+
}
|
|
64
|
+
if (survivors.length > 0)
|
|
65
|
+
inboundSessionWaiters.set(agentName, survivors);
|
|
66
|
+
else
|
|
67
|
+
inboundSessionWaiters.delete(agentName);
|
|
68
|
+
}
|
|
69
|
+
return disconnectContext;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=disconnect-cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disconnect-cleanup.js","sourceRoot":"","sources":["../src/disconnect-cleanup.ts"],"names":[],"mappings":"AAgDA,MAAM,UAAU,qBAAqB,CAAC,IAA2B;IAC/D,MAAM,EACJ,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EACjF,qBAAqB,EACrB,yBAAyB,GAC1B,GAAG,IAAI,CAAC;IAET,uEAAuE;IACvE,wDAAwD;IACxD,SAAS,CAAC,YAAY,CAAC,CAAC,YAAY,EAAE,EAAE;QACtC;;;;;;;;WAQG;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAG,OAAO,EAAE,YAAY;YAC1C,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC;QACT,sEAAsE;QACtE,8FAA8F;QAC9F,qDAAqD;QACrD,MAAM,iBAAiB,GAA4B;YACjD,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,SAAS;YAC5C,aAAa,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI;YAC5C,GAAG,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,cAAc,KAAK,CAAC;gBACtB,CAAC,CAAC;oBACE,MAAM,EACJ,oFAAoF;wBACpF,2EAA2E;iBAC9E;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,4FAA4F;QAC5F,kEAAkE;QAClE,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC/B;;;;;;;;;;;WAWG;QACH,IAAI,OAAO,EAAE,YAAY,IAAI,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5E,kBAAkB,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;QACD,yBAAyB,EAAE,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAC/D,sFAAsF;QACtF,kFAAkF;QAClF,qFAAqF;QACrF,8DAA8D;QAC9D,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,qBAAqB,EAAE,CAAC;YACzD,MAAM,SAAS,GAAmB,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY;oBAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;oBAChD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;gBACrE,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SYNC-P1 (daemon half) — the fork-tolerant entry store.
|
|
3
|
+
*
|
|
4
|
+
* One row per ENTRY (keyed by entry hash — never by an epoch slot), holding the entry AS
|
|
5
|
+
* RECEIVED — the wire bytes, never a re-encode. The bytes are the truth: `chain` decodes them on
|
|
6
|
+
* read, so what the fold consumes is exactly what was signed, and a codec asymmetry can never
|
|
7
|
+
* silently rewrite an agreed record (the class of defect TRACE-1 found in the proposal codec).
|
|
8
|
+
*
|
|
9
|
+
* The store owns persistence and ANCESTRY CLOSURE:
|
|
10
|
+
* - **Held until whole (R14)** — an entry lands in `document_entries` only when every parent has
|
|
11
|
+
* landed. Otherwise it waits in `document_entries_pending`: recorded, never applied, never in a
|
|
12
|
+
* watermark, promoted the moment its ancestry completes — cascade included. The invariant this
|
|
13
|
+
* buys: everything in `document_entries` has its FULL ancestry there too.
|
|
14
|
+
* - **Fork tolerance** — two entries claiming the same epoch or the same author seq are BOTH
|
|
15
|
+
* stored. Ruling on conflicts is the causal fold's job (`deriveDocumentState`), not the
|
|
16
|
+
* store's; the old chain-gap and epoch-conflict refusals are gone WITH the epoch spine.
|
|
17
|
+
* - **Idempotent redelivery** — the same bytes again is `recorded: false`, not an error and not
|
|
18
|
+
* a second row.
|
|
19
|
+
* - **Watermarks** — per author, the highest CONTIGUOUS seq with its head hash(es). Two heads at
|
|
20
|
+
* one seq is an equivocation made visible for the exchange to resolve, never silently picked.
|
|
21
|
+
*
|
|
22
|
+
* What the store does NOT judge: signatures, policy, subject semantics. The fold rules on those
|
|
23
|
+
* at every consumption, and the inbound path rules BEFORE appending. A row in these tables is a
|
|
24
|
+
* claim to be folded, not an admitted fact.
|
|
25
|
+
*/
|
|
26
|
+
import { type DocumentAmendmentEnvelope } from "@cello-protocol/protocol-types";
|
|
27
|
+
import type { DaemonDatabase } from "./sqlcipher-db.js";
|
|
28
|
+
import type { Logger } from "./types.js";
|
|
29
|
+
/**
|
|
30
|
+
* The PRE-PIVOT table, epoch-keyed. Still created because `DocumentStore` execs this too and the
|
|
31
|
+
* pre-pivot readers live until P4 deletes them (SYNC-D2); the entry store neither reads nor
|
|
32
|
+
* writes it. Rows predating the pivot stay untouched — old-shape bytes are not decodable by the
|
|
33
|
+
* v2 codec and are not migrated (no compatibility owed; essentially no documents exist).
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Shared with `DocumentStore` (the :352 shared-definition precedent): its membership walk and
|
|
37
|
+
* epoch read consume `document_entries`, so the tables must exist whichever module constructs
|
|
38
|
+
* first. Keep both consumers on THIS string.
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* D7 — the epoch spine is deleted. A database born before that carries a NOT NULL `epoch_id`
|
|
42
|
+
* with no default, which would refuse every insert from this build. Dropped in place (SQLite
|
|
43
|
+
* ≥3.35 / SQLCipher 4.5); a fresh database never has it.
|
|
44
|
+
*/
|
|
45
|
+
type ColumnDropper = {
|
|
46
|
+
exec(sql: string): void;
|
|
47
|
+
prepare(sql: string): {
|
|
48
|
+
all(...a: unknown[]): unknown[];
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Drop columns a previous milestone left behind, birth-gated: only what the table actually still
|
|
53
|
+
* has is touched, so this is safe on a database created yesterday and on one created before the
|
|
54
|
+
* column existed. Dead schema is not free — it is the design a future author reads and rebuilds.
|
|
55
|
+
*/
|
|
56
|
+
export declare function dropLegacyColumns(db: ColumnDropper, table: string, columns: readonly string[]): void;
|
|
57
|
+
export declare function dropLegacyEpochColumn(db: ColumnDropper, table: string): void;
|
|
58
|
+
export declare const DOCUMENT_ENTRIES_CREATE_SQL = "\n CREATE TABLE IF NOT EXISTS document_entries (\n owner_agent_id TEXT NOT NULL,\n document_id TEXT NOT NULL,\n entry_hash TEXT NOT NULL,\n author_agent_id TEXT NOT NULL,\n author_seq INTEGER NOT NULL,\n received_bytes BLOB NOT NULL,\n recorded_at INTEGER NOT NULL,\n PRIMARY KEY (owner_agent_id, document_id, entry_hash)\n );\n CREATE INDEX IF NOT EXISTS idx_document_entries_author\n ON document_entries (owner_agent_id, document_id, author_agent_id, author_seq);\n CREATE TABLE IF NOT EXISTS document_entries_pending (\n owner_agent_id TEXT NOT NULL,\n document_id TEXT NOT NULL,\n entry_hash TEXT NOT NULL,\n author_agent_id TEXT NOT NULL,\n received_bytes BLOB NOT NULL,\n recorded_at INTEGER NOT NULL,\n PRIMARY KEY (owner_agent_id, document_id, entry_hash)\n );\n";
|
|
59
|
+
export interface AmendmentAppendResult {
|
|
60
|
+
/** False on an idempotent redelivery — the entry (or its pending row) already existed. */
|
|
61
|
+
recorded: boolean;
|
|
62
|
+
/** True when the entry is waiting on missing parents (R14) — recorded but not yet applied. */
|
|
63
|
+
held: boolean;
|
|
64
|
+
/** Hex of the entry's TBS hash. */
|
|
65
|
+
entryHash: string;
|
|
66
|
+
/** Previously-held entries this arrival completed, now applied — envelopes included, so the
|
|
67
|
+
* caller can run the same post-apply surfacing it runs for a direct arrival (review F2: the
|
|
68
|
+
* held path silently dropped removal notices and lifecycle completion). */
|
|
69
|
+
promoted: PromotedEntry[];
|
|
70
|
+
}
|
|
71
|
+
export interface PromotedEntry {
|
|
72
|
+
entryHash: string;
|
|
73
|
+
envelope: DocumentAmendmentEnvelope;
|
|
74
|
+
}
|
|
75
|
+
export interface PendingEntry {
|
|
76
|
+
entryHash: string;
|
|
77
|
+
/** The parents not yet held — the exchange asks for exactly these. */
|
|
78
|
+
missingParents: string[];
|
|
79
|
+
recordedAtMs: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Ceiling on HELD entries per (document, author). An honest author's pending set is a short gap
|
|
83
|
+
* awaiting one delivery; a hostile known author fabricating parents could otherwise grow the
|
|
84
|
+
* pending table without bound (review F4).
|
|
85
|
+
*/
|
|
86
|
+
export declare const MAX_PENDING_PER_AUTHOR = 64;
|
|
87
|
+
export interface AuthorWatermark {
|
|
88
|
+
/** Highest CONTIGUOUS seq held from this author. */
|
|
89
|
+
seq: number;
|
|
90
|
+
/** Entry hash(es) at that seq — more than one is an equivocation, visible by design. */
|
|
91
|
+
headHashes: string[];
|
|
92
|
+
}
|
|
93
|
+
export declare class DocumentAmendmentStore {
|
|
94
|
+
#private;
|
|
95
|
+
constructor(db: DaemonDatabase, logger: Logger);
|
|
96
|
+
/**
|
|
97
|
+
* Append one entry from its wire bytes. Decodes first — malformed bytes refuse with the
|
|
98
|
+
* decoder's named reason and nothing is stored. An entry with missing parents is HELD; an
|
|
99
|
+
* arrival that completes held ancestry promotes the whole cascade.
|
|
100
|
+
*/
|
|
101
|
+
append(ownerAgentId: string, documentId: string, receivedBytes: Uint8Array, nowMs: number): AmendmentAppendResult;
|
|
102
|
+
/** Every applied entry, decoded from the stored received bytes. The set is ancestry-closed. */
|
|
103
|
+
chain(ownerAgentId: string, documentId: string): DocumentAmendmentEnvelope[];
|
|
104
|
+
/** Held entries and exactly which parents they still wait on (R37's receiver-side record). */
|
|
105
|
+
pending(ownerAgentId: string, documentId: string): PendingEntry[];
|
|
106
|
+
/**
|
|
107
|
+
* This author's applied entries with seq strictly beyond `afterSeq`, as WIRE BYTES in seq
|
|
108
|
+
* order — what a reconcile reply carries to a peer whose watermark for this author is behind
|
|
109
|
+
* ours (R10 step 2/3). Forked seqs both ship: the peer's fold rules on them like ours did.
|
|
110
|
+
*/
|
|
111
|
+
entriesByAuthorAfter(ownerAgentId: string, documentId: string, authorAgentId: string, afterSeq: number): Uint8Array[];
|
|
112
|
+
/**
|
|
113
|
+
* Per-author position: the highest CONTIGUOUS seq held and the head hash(es) at it. A held
|
|
114
|
+
* (pending) entry is not counted — a gap ends the walk (R13: report contiguous, never highest
|
|
115
|
+
* received).
|
|
116
|
+
*/
|
|
117
|
+
watermarks(ownerAgentId: string, documentId: string): Map<string, AuthorWatermark>;
|
|
118
|
+
}
|
|
119
|
+
export {};
|
|
120
|
+
//# sourceMappingURL=document-amendment-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-amendment-store.d.ts","sourceRoot":"","sources":["../src/document-amendment-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;GAKG;AACH;;;;GAIG;AACH;;;;GAIG;AACH,KAAK,aAAa,GAAG;IAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAE5G;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAOpG;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5E;AAED,eAAO,MAAM,2BAA2B,63BAsBvC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,0FAA0F;IAC1F,QAAQ,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB;;gFAE4E;IAC5E,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,yBAAyB,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,wFAAwF;IACxF,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,sBAAsB;;gBAIrB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM;IAW9C;;;;OAIG;IACH,MAAM,CACJ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,UAAU,EACzB,KAAK,EAAE,MAAM,GACZ,qBAAqB;IA0DxB,+FAA+F;IAC/F,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,yBAAyB,EAAE;IAW5E,8FAA8F;IAC9F,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE;IAwBjE;;;;OAIG;IACH,oBAAoB,CAClB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,UAAU,EAAE;IAaf;;;;OAIG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;CAqInF"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SYNC-P1 (daemon half) — the fork-tolerant entry store.
|
|
3
|
+
*
|
|
4
|
+
* One row per ENTRY (keyed by entry hash — never by an epoch slot), holding the entry AS
|
|
5
|
+
* RECEIVED — the wire bytes, never a re-encode. The bytes are the truth: `chain` decodes them on
|
|
6
|
+
* read, so what the fold consumes is exactly what was signed, and a codec asymmetry can never
|
|
7
|
+
* silently rewrite an agreed record (the class of defect TRACE-1 found in the proposal codec).
|
|
8
|
+
*
|
|
9
|
+
* The store owns persistence and ANCESTRY CLOSURE:
|
|
10
|
+
* - **Held until whole (R14)** — an entry lands in `document_entries` only when every parent has
|
|
11
|
+
* landed. Otherwise it waits in `document_entries_pending`: recorded, never applied, never in a
|
|
12
|
+
* watermark, promoted the moment its ancestry completes — cascade included. The invariant this
|
|
13
|
+
* buys: everything in `document_entries` has its FULL ancestry there too.
|
|
14
|
+
* - **Fork tolerance** — two entries claiming the same epoch or the same author seq are BOTH
|
|
15
|
+
* stored. Ruling on conflicts is the causal fold's job (`deriveDocumentState`), not the
|
|
16
|
+
* store's; the old chain-gap and epoch-conflict refusals are gone WITH the epoch spine.
|
|
17
|
+
* - **Idempotent redelivery** — the same bytes again is `recorded: false`, not an error and not
|
|
18
|
+
* a second row.
|
|
19
|
+
* - **Watermarks** — per author, the highest CONTIGUOUS seq with its head hash(es). Two heads at
|
|
20
|
+
* one seq is an equivocation made visible for the exchange to resolve, never silently picked.
|
|
21
|
+
*
|
|
22
|
+
* What the store does NOT judge: signatures, policy, subject semantics. The fold rules on those
|
|
23
|
+
* at every consumption, and the inbound path rules BEFORE appending. A row in these tables is a
|
|
24
|
+
* claim to be folded, not an admitted fact.
|
|
25
|
+
*/
|
|
26
|
+
import { decodeDocumentAmendment, documentAmendmentHash, } from "@cello-protocol/protocol-types";
|
|
27
|
+
/**
|
|
28
|
+
* Drop columns a previous milestone left behind, birth-gated: only what the table actually still
|
|
29
|
+
* has is touched, so this is safe on a database created yesterday and on one created before the
|
|
30
|
+
* column existed. Dead schema is not free — it is the design a future author reads and rebuilds.
|
|
31
|
+
*/
|
|
32
|
+
export function dropLegacyColumns(db, table, columns) {
|
|
33
|
+
const held = new Set(db.prepare(`PRAGMA table_info(${table})`).all().map((c) => c.name));
|
|
34
|
+
for (const column of columns) {
|
|
35
|
+
if (held.has(column))
|
|
36
|
+
db.exec(`ALTER TABLE ${table} DROP COLUMN ${column}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function dropLegacyEpochColumn(db, table) {
|
|
40
|
+
dropLegacyColumns(db, table, ["epoch_id"]);
|
|
41
|
+
}
|
|
42
|
+
export const DOCUMENT_ENTRIES_CREATE_SQL = `
|
|
43
|
+
CREATE TABLE IF NOT EXISTS document_entries (
|
|
44
|
+
owner_agent_id TEXT NOT NULL,
|
|
45
|
+
document_id TEXT NOT NULL,
|
|
46
|
+
entry_hash TEXT NOT NULL,
|
|
47
|
+
author_agent_id TEXT NOT NULL,
|
|
48
|
+
author_seq INTEGER NOT NULL,
|
|
49
|
+
received_bytes BLOB NOT NULL,
|
|
50
|
+
recorded_at INTEGER NOT NULL,
|
|
51
|
+
PRIMARY KEY (owner_agent_id, document_id, entry_hash)
|
|
52
|
+
);
|
|
53
|
+
CREATE INDEX IF NOT EXISTS idx_document_entries_author
|
|
54
|
+
ON document_entries (owner_agent_id, document_id, author_agent_id, author_seq);
|
|
55
|
+
CREATE TABLE IF NOT EXISTS document_entries_pending (
|
|
56
|
+
owner_agent_id TEXT NOT NULL,
|
|
57
|
+
document_id TEXT NOT NULL,
|
|
58
|
+
entry_hash TEXT NOT NULL,
|
|
59
|
+
author_agent_id TEXT NOT NULL,
|
|
60
|
+
received_bytes BLOB NOT NULL,
|
|
61
|
+
recorded_at INTEGER NOT NULL,
|
|
62
|
+
PRIMARY KEY (owner_agent_id, document_id, entry_hash)
|
|
63
|
+
);
|
|
64
|
+
`;
|
|
65
|
+
/**
|
|
66
|
+
* Ceiling on HELD entries per (document, author). An honest author's pending set is a short gap
|
|
67
|
+
* awaiting one delivery; a hostile known author fabricating parents could otherwise grow the
|
|
68
|
+
* pending table without bound (review F4).
|
|
69
|
+
*/
|
|
70
|
+
export const MAX_PENDING_PER_AUTHOR = 64;
|
|
71
|
+
export class DocumentAmendmentStore {
|
|
72
|
+
#db;
|
|
73
|
+
#logger;
|
|
74
|
+
constructor(db, logger) {
|
|
75
|
+
this.#db = db;
|
|
76
|
+
this.#logger = logger;
|
|
77
|
+
// D7/D9 residue sweep (review F5/F6): the epoch-keyed legacy table and the withdrawals
|
|
78
|
+
// table have no reader or writer left — never born on a fresh database, dropped in place
|
|
79
|
+
// on one that predates the pivot.
|
|
80
|
+
this.#db.exec(`DROP TABLE IF EXISTS document_amendments`);
|
|
81
|
+
this.#db.exec(DOCUMENT_ENTRIES_CREATE_SQL);
|
|
82
|
+
dropLegacyEpochColumn(this.#db, "document_entries");
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Append one entry from its wire bytes. Decodes first — malformed bytes refuse with the
|
|
86
|
+
* decoder's named reason and nothing is stored. An entry with missing parents is HELD; an
|
|
87
|
+
* arrival that completes held ancestry promotes the whole cascade.
|
|
88
|
+
*/
|
|
89
|
+
append(ownerAgentId, documentId, receivedBytes, nowMs) {
|
|
90
|
+
const env = decodeDocumentAmendment(receivedBytes);
|
|
91
|
+
if (env.body.document_id !== documentId) {
|
|
92
|
+
throw new Error(`document_amendment_wrong_document: the bytes name ${env.body.document_id}, appending ` +
|
|
93
|
+
`under ${documentId}`);
|
|
94
|
+
}
|
|
95
|
+
const hash = Buffer.from(documentAmendmentHash(env.body)).toString("hex");
|
|
96
|
+
if (this.#hasEntry(ownerAgentId, documentId, hash)) {
|
|
97
|
+
return { recorded: false, held: false, entryHash: hash, promoted: [] };
|
|
98
|
+
}
|
|
99
|
+
if (this.#hasPending(ownerAgentId, documentId, hash)) {
|
|
100
|
+
return { recorded: false, held: true, entryHash: hash, promoted: [] };
|
|
101
|
+
}
|
|
102
|
+
const missing = env.body.parents.filter((p) => !this.#hasEntry(ownerAgentId, documentId, p));
|
|
103
|
+
if (missing.length > 0) {
|
|
104
|
+
const author = env.body.author_agent_id;
|
|
105
|
+
const backlog = this.#db
|
|
106
|
+
.prepare(`SELECT COUNT(*) AS n FROM document_entries_pending
|
|
107
|
+
WHERE owner_agent_id = ? AND document_id = ? AND author_agent_id = ?`)
|
|
108
|
+
.get(ownerAgentId, documentId, author);
|
|
109
|
+
if (backlog.n >= MAX_PENDING_PER_AUTHOR) {
|
|
110
|
+
throw new Error(`document_pending_cap: ${author} already has ${backlog.n} entries held awaiting ` +
|
|
111
|
+
`parents — the ceiling is ${MAX_PENDING_PER_AUTHOR}, and an honest gap is never ` +
|
|
112
|
+
`this deep; deliver the missing ancestry first`);
|
|
113
|
+
}
|
|
114
|
+
this.#db
|
|
115
|
+
.prepare(`INSERT INTO document_entries_pending
|
|
116
|
+
(owner_agent_id, document_id, entry_hash, author_agent_id, received_bytes, recorded_at)
|
|
117
|
+
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
118
|
+
.run(ownerAgentId, documentId, hash, author, Buffer.from(receivedBytes), nowMs);
|
|
119
|
+
this.#logger.info("document.entry.held", {
|
|
120
|
+
documentId,
|
|
121
|
+
entryHash: hash,
|
|
122
|
+
author: env.body.author_agent_id,
|
|
123
|
+
authorSeq: env.body.author_seq,
|
|
124
|
+
kind: env.body.kind,
|
|
125
|
+
missingParents: missing,
|
|
126
|
+
});
|
|
127
|
+
return { recorded: true, held: true, entryHash: hash, promoted: [] };
|
|
128
|
+
}
|
|
129
|
+
this.#insertEntry(ownerAgentId, documentId, hash, env, receivedBytes, nowMs);
|
|
130
|
+
const promoted = this.#promoteReady(ownerAgentId, documentId, nowMs);
|
|
131
|
+
return { recorded: true, held: false, entryHash: hash, promoted };
|
|
132
|
+
}
|
|
133
|
+
/** Every applied entry, decoded from the stored received bytes. The set is ancestry-closed. */
|
|
134
|
+
chain(ownerAgentId, documentId) {
|
|
135
|
+
const rows = this.#db
|
|
136
|
+
.prepare(`SELECT received_bytes FROM document_entries
|
|
137
|
+
WHERE owner_agent_id = ? AND document_id = ?
|
|
138
|
+
ORDER BY author_seq ASC, entry_hash ASC`)
|
|
139
|
+
.all(ownerAgentId, documentId);
|
|
140
|
+
return rows.map((r) => decodeDocumentAmendment(new Uint8Array(r.received_bytes)));
|
|
141
|
+
}
|
|
142
|
+
/** Held entries and exactly which parents they still wait on (R37's receiver-side record). */
|
|
143
|
+
pending(ownerAgentId, documentId) {
|
|
144
|
+
const rows = this.#db
|
|
145
|
+
.prepare(`SELECT entry_hash, received_bytes, recorded_at FROM document_entries_pending
|
|
146
|
+
WHERE owner_agent_id = ? AND document_id = ?
|
|
147
|
+
ORDER BY recorded_at ASC, entry_hash ASC`)
|
|
148
|
+
.all(ownerAgentId, documentId);
|
|
149
|
+
return rows.map((r) => {
|
|
150
|
+
const env = decodeDocumentAmendment(new Uint8Array(r.received_bytes));
|
|
151
|
+
return {
|
|
152
|
+
entryHash: r.entry_hash,
|
|
153
|
+
missingParents: env.body.parents.filter((p) => !this.#hasEntry(ownerAgentId, documentId, p)),
|
|
154
|
+
recordedAtMs: r.recorded_at,
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* This author's applied entries with seq strictly beyond `afterSeq`, as WIRE BYTES in seq
|
|
160
|
+
* order — what a reconcile reply carries to a peer whose watermark for this author is behind
|
|
161
|
+
* ours (R10 step 2/3). Forked seqs both ship: the peer's fold rules on them like ours did.
|
|
162
|
+
*/
|
|
163
|
+
entriesByAuthorAfter(ownerAgentId, documentId, authorAgentId, afterSeq) {
|
|
164
|
+
const rows = this.#db
|
|
165
|
+
.prepare(`SELECT received_bytes FROM document_entries
|
|
166
|
+
WHERE owner_agent_id = ? AND document_id = ? AND author_agent_id = ? AND author_seq > ?
|
|
167
|
+
ORDER BY author_seq ASC, entry_hash ASC`)
|
|
168
|
+
.all(ownerAgentId, documentId, authorAgentId, afterSeq);
|
|
169
|
+
return rows.map((r) => new Uint8Array(r.received_bytes));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Per-author position: the highest CONTIGUOUS seq held and the head hash(es) at it. A held
|
|
173
|
+
* (pending) entry is not counted — a gap ends the walk (R13: report contiguous, never highest
|
|
174
|
+
* received).
|
|
175
|
+
*/
|
|
176
|
+
watermarks(ownerAgentId, documentId) {
|
|
177
|
+
const rows = this.#db
|
|
178
|
+
.prepare(`SELECT author_agent_id, author_seq, entry_hash FROM document_entries
|
|
179
|
+
WHERE owner_agent_id = ? AND document_id = ?
|
|
180
|
+
ORDER BY author_agent_id ASC, author_seq ASC, entry_hash ASC`)
|
|
181
|
+
.all(ownerAgentId, documentId);
|
|
182
|
+
const byAuthor = new Map();
|
|
183
|
+
for (const r of rows) {
|
|
184
|
+
let seqs = byAuthor.get(r.author_agent_id);
|
|
185
|
+
if (!seqs) {
|
|
186
|
+
seqs = new Map();
|
|
187
|
+
byAuthor.set(r.author_agent_id, seqs);
|
|
188
|
+
}
|
|
189
|
+
const at = seqs.get(r.author_seq);
|
|
190
|
+
if (at)
|
|
191
|
+
at.push(r.entry_hash);
|
|
192
|
+
else
|
|
193
|
+
seqs.set(r.author_seq, [r.entry_hash]);
|
|
194
|
+
}
|
|
195
|
+
const out = new Map();
|
|
196
|
+
for (const [author, seqs] of byAuthor) {
|
|
197
|
+
let seq = 0;
|
|
198
|
+
while (seqs.has(seq + 1))
|
|
199
|
+
seq++;
|
|
200
|
+
if (seq === 0)
|
|
201
|
+
continue;
|
|
202
|
+
out.set(author, { seq, headHashes: seqs.get(seq) });
|
|
203
|
+
}
|
|
204
|
+
return out;
|
|
205
|
+
}
|
|
206
|
+
#hasEntry(ownerAgentId, documentId, hash) {
|
|
207
|
+
return (this.#db
|
|
208
|
+
.prepare(`SELECT 1 FROM document_entries
|
|
209
|
+
WHERE owner_agent_id = ? AND document_id = ? AND entry_hash = ?`)
|
|
210
|
+
.get(ownerAgentId, documentId, hash) !== undefined);
|
|
211
|
+
}
|
|
212
|
+
#hasPending(ownerAgentId, documentId, hash) {
|
|
213
|
+
return (this.#db
|
|
214
|
+
.prepare(`SELECT 1 FROM document_entries_pending
|
|
215
|
+
WHERE owner_agent_id = ? AND document_id = ? AND entry_hash = ?`)
|
|
216
|
+
.get(ownerAgentId, documentId, hash) !== undefined);
|
|
217
|
+
}
|
|
218
|
+
#insertEntry(ownerAgentId, documentId, hash, env, bytes, nowMs) {
|
|
219
|
+
this.#db
|
|
220
|
+
.prepare(`INSERT INTO document_entries
|
|
221
|
+
(owner_agent_id, document_id, entry_hash, author_agent_id, author_seq,
|
|
222
|
+
received_bytes, recorded_at)
|
|
223
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`)
|
|
224
|
+
.run(ownerAgentId, documentId, hash, env.body.author_agent_id, env.body.author_seq,
|
|
225
|
+
// Copied — the caller may reuse or zero its buffer after we return.
|
|
226
|
+
Buffer.from(bytes), nowMs);
|
|
227
|
+
this.#logger.info("document.entry.recorded", {
|
|
228
|
+
documentId,
|
|
229
|
+
entryHash: hash,
|
|
230
|
+
author: env.body.author_agent_id,
|
|
231
|
+
authorSeq: env.body.author_seq,
|
|
232
|
+
kind: env.body.kind,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
/** Move every pending entry whose ancestry is now complete — repeated until a pass moves none. */
|
|
236
|
+
#promoteReady(ownerAgentId, documentId, nowMs) {
|
|
237
|
+
const promoted = [];
|
|
238
|
+
for (;;) {
|
|
239
|
+
const rows = this.#db
|
|
240
|
+
.prepare(`SELECT entry_hash, received_bytes FROM document_entries_pending
|
|
241
|
+
WHERE owner_agent_id = ? AND document_id = ?`)
|
|
242
|
+
.all(ownerAgentId, documentId);
|
|
243
|
+
let movedThisPass = false;
|
|
244
|
+
for (const row of rows) {
|
|
245
|
+
const env = decodeDocumentAmendment(new Uint8Array(row.received_bytes));
|
|
246
|
+
const ready = env.body.parents.every((p) => this.#hasEntry(ownerAgentId, documentId, p));
|
|
247
|
+
if (!ready)
|
|
248
|
+
continue;
|
|
249
|
+
this.#insertEntry(ownerAgentId, documentId, row.entry_hash, env, new Uint8Array(row.received_bytes), nowMs);
|
|
250
|
+
this.#db
|
|
251
|
+
.prepare(`DELETE FROM document_entries_pending
|
|
252
|
+
WHERE owner_agent_id = ? AND document_id = ? AND entry_hash = ?`)
|
|
253
|
+
.run(ownerAgentId, documentId, row.entry_hash);
|
|
254
|
+
this.#logger.info("document.entry.promoted", {
|
|
255
|
+
documentId,
|
|
256
|
+
entryHash: row.entry_hash,
|
|
257
|
+
});
|
|
258
|
+
promoted.push({ entryHash: row.entry_hash, envelope: env });
|
|
259
|
+
movedThisPass = true;
|
|
260
|
+
}
|
|
261
|
+
if (!movedThisPass)
|
|
262
|
+
return promoted;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=document-amendment-store.js.map
|