@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,528 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 4 of boot: parked content, and every path that gets it moving again.
|
|
3
|
+
*
|
|
4
|
+
* The retry queue and its durable rows, the park retry timers, the startup park sweep, and the flush
|
|
5
|
+
* that drains what was waiting once an agent's link comes back. One topic: content that could not be
|
|
6
|
+
* delivered when it was written, and the several distinct ways it stops being stuck.
|
|
7
|
+
*
|
|
8
|
+
* Nine dependencies, under the order's bound — counted after the extraction, not before: an earlier
|
|
9
|
+
* draft carried a seal-failure store and a `stop` getter the moved code never calls.
|
|
10
|
+
*
|
|
11
|
+
* ⚠️ AN EARLIER VERSION OF THIS HEADER CLAIMED TWO OF THEM HAD TO BE GETTERS "because the
|
|
12
|
+
* outbound-session module is constructed BELOW this phase". It is constructed 27 lines ABOVE it.
|
|
13
|
+
* Both are plain values now. The wrong version is recorded rather than deleted because of what it
|
|
14
|
+
* would have taught the next phase: "getter by default", when the rule that catches the real defect
|
|
15
|
+
* is narrower — check whether the value is ASSIGNED BELOW the call site, and a `let` that is, is the
|
|
16
|
+
* only shape that fails silently.
|
|
17
|
+
*/
|
|
18
|
+
import { randomUUID } from "node:crypto";
|
|
19
|
+
import { RetryQueue } from "./retry-queue.js";
|
|
20
|
+
import { ContentParkClient } from "./content-park-client.js";
|
|
21
|
+
import { AgentRelayClient } from "./session-relay-client.js";
|
|
22
|
+
import { sealParkEnvelope } from "./park-envelope.js";
|
|
23
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
24
|
+
export function startBootParkedContent(deps) {
|
|
25
|
+
const { config, logger, sessionNodeManager, agents, keyProviders, resolveConsortiumRoster, waitForSignalingConnected, openVisitingConnection, crossNodeBrokerBySession, } = deps;
|
|
26
|
+
// Both use the same SQLite DB as the SessionNodeManager (daemon.db equivalent).
|
|
27
|
+
// loadFromDb() must complete BEFORE IPC socket opens (AC-007).
|
|
28
|
+
const retryQueue = new RetryQueue(sessionNodeManager.getDb(), logger);
|
|
29
|
+
retryQueue.loadFromDb();
|
|
30
|
+
// DOD-RETRYQ-STRAND-1: the terminal-transition hook below only fires for sessions that go
|
|
31
|
+
// terminal while this daemon runs. A session already sealed/abandoned before boot never
|
|
32
|
+
// transitions again — close-session returns `already_abandoned` without reaching abandonSession —
|
|
33
|
+
// so without this its rows are unreachable by every removal path and retryQueueDepth stays pinned
|
|
34
|
+
// forever. That is exactly the row found on the live daemon, 25.6h old. Runs after loadFromDb so
|
|
35
|
+
// the in-memory queues are dropped in step with the rows, and before the IPC socket opens so no
|
|
36
|
+
// client ever observes the stale depth.
|
|
37
|
+
retryQueue.reapAlreadyTerminalSessions();
|
|
38
|
+
// CELLO-M7-MSG-001 (AC-001/AC-003/AC-019): wire the awaiting-ACK lifecycle's durable
|
|
39
|
+
// side effects to the retry_queue. A `persisted` delivery ACK clears the durable
|
|
40
|
+
// entry; a TTF expiry records the un-acked content for the crash backstop (the relay
|
|
41
|
+
// park deposit itself is added in 3b). Both side effects are best-effort and never
|
|
42
|
+
// throw into the content stream handler.
|
|
43
|
+
// DOD-AGENT-ID-JOINKEY-1: RetryQueue owns an agent-scoped table, so it is handed the STABLE
|
|
44
|
+
// agent_id. The daemon resolves the operator-facing name ONCE, here at its own boundary.
|
|
45
|
+
// M12-P15: let a session with NO in-memory node still reach its relay to seal. The manager
|
|
46
|
+
// deliberately holds no K_local, so the client is built here where the keys live. This is what
|
|
47
|
+
// makes the detached path work after a RESTART — the exact situation that marked the session
|
|
48
|
+
// interrupted and then left it unsealable, with force-abandon (no receipt) as the only exit.
|
|
49
|
+
sessionNodeManager.setDetachedRelayClientBuilder((agentName, relayPeerId, relayAddrs, stores) => {
|
|
50
|
+
const kp = keyProviders.get(agentName);
|
|
51
|
+
const agent = agents.find((a) => a.name === agentName);
|
|
52
|
+
if (!kp || !agent?.pubkey)
|
|
53
|
+
return undefined;
|
|
54
|
+
return new AgentRelayClient({
|
|
55
|
+
relayPeerId,
|
|
56
|
+
relayAddrs,
|
|
57
|
+
keyProvider: kp,
|
|
58
|
+
senderPubkey: Buffer.from(agent.pubkey, "hex"),
|
|
59
|
+
logger,
|
|
60
|
+
// Review HIGH-1: a client that can submit but cannot RECORD drops the durable evidence the
|
|
61
|
+
// seal depends on — silently, while reporting success.
|
|
62
|
+
receiptStore: stores.receiptStore,
|
|
63
|
+
sealLeafStore: stores.sealLeafStore,
|
|
64
|
+
// `DOD-M15-SELFCHAIN-1` — without this the client cannot chain a message to this agent's own
|
|
65
|
+
// previous one, and says so rather than signing an unlinked claim.
|
|
66
|
+
ownChainStore: stores.ownChainStore,
|
|
67
|
+
// DOD-M15-RELAYSLOTS-1: the manager owns the current token and hands the accessor down, so
|
|
68
|
+
// this client reads a fresh one at every auth instead of a snapshot taken here at build time.
|
|
69
|
+
onlineToken: stores.onlineToken,
|
|
70
|
+
// DOD-M15-CORROBORATE-1: the DETACHED client needs this as much as the live one — a session
|
|
71
|
+
// being sealed after a restart is exactly when its operator is not watching.
|
|
72
|
+
onWitnessAlert: (alert) => { sessionNodeManager.recordRelayWitnessAlert(agentName, alert); },
|
|
73
|
+
onWitnessUnreadable: (peerId, why) => { sessionNodeManager.recordRelayWitnessUnreadable(agentName, peerId, why); },
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
// DOD-RETRYQ-STRAND-1: a direct-resend row is reachable only by drainSession, which has no
|
|
77
|
+
// production caller — so once its session can never drain again the row is unreachable by every
|
|
78
|
+
// removal path that exists, and pins retryQueueDepth forever. Found live: one row stranded 25.6h,
|
|
79
|
+
// after which the metric could no longer tell a real delivery backlog from a corpse.
|
|
80
|
+
sessionNodeManager.setSessionTerminalHook((sessionId, terminalStatus) => {
|
|
81
|
+
retryQueue.reapTerminalSession(sessionId, terminalStatus);
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* DOD-M12B-SESSION-SEED-1 — the retry drain is DELIBERATELY NOT WIRED. Review HIGH-1.
|
|
85
|
+
*
|
|
86
|
+
* It was wired, and it was worse than the problem it solved. `retryQueue.enqueue` runs only on the
|
|
87
|
+
* `!sendResult.durable` branch — content that got NO local leaf and NO transcript row, because as
|
|
88
|
+
* that branch's own comment says, *"A LOST message gets no leaf — that would commit a sequence no
|
|
89
|
+
* content will ever fill."*
|
|
90
|
+
*
|
|
91
|
+
* The hook re-sent those rows with `sendContent`, which is wire-and-witness only: it consumes a
|
|
92
|
+
* canonical relay sequence and returns one, and the hook discarded it without calling
|
|
93
|
+
* `placeOwnLeaf` or writing the transcript. So the counterparty would silently receive the message
|
|
94
|
+
* while OUR tree kept a permanent hole at that sequence. Every later message would be held behind
|
|
95
|
+
* the gap with guidance blaming the counterparty for a message they already sent, the two roots
|
|
96
|
+
* would have parted, and the session could never seal.
|
|
97
|
+
*
|
|
98
|
+
* A stranded queue row is recoverable. A parted hash chain is not. So this stays unwired until the
|
|
99
|
+
* drain routes through the same commit path `cello_send` uses (place the leaf at the returned
|
|
100
|
+
* sequence, write the transcript, keep the row on failure) rather than calling `sendContent` raw.
|
|
101
|
+
*
|
|
102
|
+
* The operator-facing consequence of leaving it unwired is unchanged from before this milestone:
|
|
103
|
+
* a message that fails this way is reported lost and must be re-sent by hand. That is honest, and
|
|
104
|
+
* it is what the guidance already says.
|
|
105
|
+
*/
|
|
106
|
+
sessionNodeManager.setAwaitingAckHooks({
|
|
107
|
+
onPersisted: (agentName, sessionId, contentHashHex) => {
|
|
108
|
+
retryQueue.markContentAcked(sessionNodeManager.resolveAgentId(agentName), sessionId, Buffer.from(contentHashHex, "hex"));
|
|
109
|
+
},
|
|
110
|
+
// `DOD-M15-SEALWIRE-1` B2b-1 review F1 — `contentHashAlg` is the DURABLE WRITER for the column
|
|
111
|
+
// this unit added. Without it every queued row carries NULL, the crash backstop re-parks a salted
|
|
112
|
+
// message as sha256, and the recipient refuses it and re-pulls it forever. The commit that added
|
|
113
|
+
// the column said the producer "passes it"; the producer was passing a value nothing supplied,
|
|
114
|
+
// because these two hooks were never widened.
|
|
115
|
+
onTtf: (agentName, sessionId, contentHashHex, content, structure1Cbor, structure2Cbor, contentHashAlg, structure1Signature, leafKind) => {
|
|
116
|
+
retryQueue.enqueueAwaitingContent(sessionNodeManager.resolveAgentId(agentName), sessionId, Buffer.from(contentHashHex, "hex"), content, structure1Cbor, structure2Cbor, contentHashAlg, structure1Signature, leafKind);
|
|
117
|
+
},
|
|
118
|
+
// M12-P12: same durable destination, different cause — a park deposit the relay refused. The
|
|
119
|
+
// TTF timer is already cancelled on this path, so this is the only thing holding the content.
|
|
120
|
+
// M12-P13 (review HIGH-1): the enqueue's own answer is returned, never a bare `true`. A dropped
|
|
121
|
+
// copy that reports success now buys a committed hash-chain leaf for content that is gone.
|
|
122
|
+
onParkFailed: (agentName, sessionId, contentHashHex, content, structure1Cbor, structure2Cbor, contentHashAlg, structure1Signature, leafKind) => {
|
|
123
|
+
return retryQueue.enqueueAwaitingContent(sessionNodeManager.resolveAgentId(agentName), sessionId, Buffer.from(contentHashHex, "hex"), content, structure1Cbor, structure2Cbor, contentHashAlg, structure1Signature, leafKind);
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
// MSG-001-3b (2b): the LIVE content-park deposit. On a not-confirmed send (direct delivery
|
|
127
|
+
// failed, or TTF with no `persisted` ACK) the session manager calls this with the recipient +
|
|
128
|
+
// the session's relay endpoint; we seal the content to the recipient (E2E — the relay never sees
|
|
129
|
+
// plaintext, INV-3) and deposit it to that relay's store-and-forward mailbox via the standing
|
|
130
|
+
// receiver node. The recipient pulls + recovers it at the witnessed sequence (R1) on next online.
|
|
131
|
+
// Fix #1 EXTENSION (cross-node seal-liveness) — the AUTO-ACKNOWLEDGE half.
|
|
132
|
+
//
|
|
133
|
+
// close-session-handler already re-opens a transient visiting connection to the broker for its
|
|
134
|
+
// own path. The auto-ack path had no such guard, and it is the one that fires FIRST whenever the
|
|
135
|
+
// counterparty closes first: it submits a seal leaf, the directory answers within ~60ms by pushing
|
|
136
|
+
// `seal_verified` to the INITIATOR, finds no stream (the initiator released its visiting
|
|
137
|
+
// connection after setup), ENQUEUES the frame, and then blocks waiting for a co-signature it never
|
|
138
|
+
// asked for. Proven on GCP — leaf 18:41:56.555, directory `seal.certificate.deferred`
|
|
139
|
+
// (initiator_stream_absent) 18:41:56.615, broker reconnect 18:42:01.529: five seconds too late.
|
|
140
|
+
//
|
|
141
|
+
// Returns null for same-node sessions (no broker entry) — those reach the initiator on its home
|
|
142
|
+
// stream and need no visiting connection.
|
|
143
|
+
sessionNodeManager.setEnsureSealBroker(async (agentName, sessionId) => {
|
|
144
|
+
const brokerNode = crossNodeBrokerBySession.get(`${agentName}:${sessionId}`);
|
|
145
|
+
if (!brokerNode)
|
|
146
|
+
return null;
|
|
147
|
+
const kp = keyProviders.get(agentName);
|
|
148
|
+
if (!kp) {
|
|
149
|
+
logger.warn("session.seal.autoack.broker.no_keyprovider", { agentName, brokerNode });
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
const pubHex = Buffer.from(await kp.getPublicKey()).toString("hex");
|
|
153
|
+
const roster = await resolveConsortiumRoster();
|
|
154
|
+
const target = roster?.find((e) => e.nodeId === brokerNode) ?? null;
|
|
155
|
+
if (!target) {
|
|
156
|
+
logger.warn("session.seal.autoack.broker.unresolved", { agentName, brokerNode });
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const correlationId = randomUUID();
|
|
160
|
+
const conn = openVisitingConnection(agentName, kp, pubHex, { peerId: target.peerId, multiaddr: target.multiaddr }, correlationId, brokerNode);
|
|
161
|
+
if (await waitForSignalingConnected(conn.mgr, 10_000)) {
|
|
162
|
+
logger.info("session.seal.autoack.broker.reconnected", { agentName, brokerNode, correlationId });
|
|
163
|
+
return conn;
|
|
164
|
+
}
|
|
165
|
+
await conn.stop("autoack-seal-broker-unreachable");
|
|
166
|
+
logger.warn("session.seal.autoack.broker.unreachable", { agentName, brokerNode, correlationId });
|
|
167
|
+
return null;
|
|
168
|
+
});
|
|
169
|
+
/**
|
|
170
|
+
* DOD-M15-RELAYABUSE-1: scheduled park-retry timers, tracked so shutdown can clear them.
|
|
171
|
+
*
|
|
172
|
+
* ⚠️ Every other daemon timer is cleared in `stop()`; an untracked one lets an in-process restart
|
|
173
|
+
* leave a stale timer that drains into a torn-down manager. Unref'd already, so it cannot hold the
|
|
174
|
+
* process open — this is about a clean teardown, not about exiting.
|
|
175
|
+
*/
|
|
176
|
+
const parkRetryTimers = new Set();
|
|
177
|
+
/**
|
|
178
|
+
* DOD-M15-RELAYABUSE-1: schedule ONE drain at the delay the relay asked for.
|
|
179
|
+
*
|
|
180
|
+
* ⚠️ ONE implementation, used by both park paths. The live-send path and the drain path both need
|
|
181
|
+
* this and a second copy is how the clamp ends up on only one of them — which is exactly the shape
|
|
182
|
+
* review found here (the number had a consumer on one path and was dropped on the other).
|
|
183
|
+
*
|
|
184
|
+
* CLAMPED, because the value comes from another party's software and an unclamped one inverts the
|
|
185
|
+
* fix: Node's `setTimeout` holds an int32, so a relay reporting `3_000_000_000` overflows it and
|
|
186
|
+
* fires in about ONE MILLISECOND — re-parking instantly into the limit that just refused, and
|
|
187
|
+
* printing a `TimeoutOverflowWarning` from a daemon whose convention forbids console output.
|
|
188
|
+
*/
|
|
189
|
+
function scheduleParkRetry(retryAfterMs, filterAgentName, source) {
|
|
190
|
+
const MIN_RETRY_MS = 1_000;
|
|
191
|
+
const MAX_RETRY_MS = 5 * 60_000;
|
|
192
|
+
const delay = Math.min(Math.max(retryAfterMs, MIN_RETRY_MS), MAX_RETRY_MS);
|
|
193
|
+
if (delay !== retryAfterMs) {
|
|
194
|
+
logger.warn("content.park.retry.clamped", {
|
|
195
|
+
source,
|
|
196
|
+
requestedMs: retryAfterMs,
|
|
197
|
+
usedMs: delay,
|
|
198
|
+
impact: "the relay asked for a retry delay outside the range this daemon will schedule, so it was " +
|
|
199
|
+
"clamped — an unclamped value can overflow the timer and fire immediately, which would " +
|
|
200
|
+
"re-park straight into the limit that just refused",
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
logger.info("content.park.retry.scheduled", { source, delayMs: delay, ...(filterAgentName !== undefined ? { agentName: filterAgentName } : {}) });
|
|
204
|
+
const timer = setTimeout(() => {
|
|
205
|
+
parkRetryTimers.delete(timer);
|
|
206
|
+
void flushAwaitingContent(filterAgentName).catch((err) => {
|
|
207
|
+
logger.warn("content.park.retry.timer.failed", {
|
|
208
|
+
source,
|
|
209
|
+
reason: extractErrorMessage(err),
|
|
210
|
+
impact: "the scheduled drain threw; the ordinary event triggers (boot, agent start, reconnect) still apply",
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
}, delay);
|
|
214
|
+
timer.unref?.();
|
|
215
|
+
parkRetryTimers.add(timer);
|
|
216
|
+
}
|
|
217
|
+
sessionNodeManager.setContentParkHook(async ({ agentName, sessionId, recipientPubkeyHex, relayPeerId, relayAddrs, contentHashHex, content, structure1Cbor, structure2Cbor, structure1Signature, leafKind, contentHashAlg }) => {
|
|
218
|
+
const node = sessionNodeManager.getStandingReceiverNode();
|
|
219
|
+
if (!node) {
|
|
220
|
+
const reason = "standing_receiver_unavailable";
|
|
221
|
+
// M12-P12 (review F4): `standing_receiver_unavailable` is the exit-point label that already
|
|
222
|
+
// misnamed this incident 102 times; standingReceiverAbsenceReason() names WHICH of the four
|
|
223
|
+
// causes it is. That distinction is what separates "mid-rebuild, a retry in seconds works"
|
|
224
|
+
// from "agent offline, this will never work" — the difference between a backstop that helps
|
|
225
|
+
// and one that spins. The wire reason stays put; the cause rides alongside.
|
|
226
|
+
const cause = sessionNodeManager.standingReceiverAbsenceReason(agentName);
|
|
227
|
+
logger.warn("content.park.deposit.failed", { sessionId, contentHash: contentHashHex, reason, cause });
|
|
228
|
+
// DOD-LEAVEMSG-1 (reviewer HIGH fix): return the typed failure, never resolve as if this
|
|
229
|
+
// were a success — #parkContent's caller (sendContent) shapes a live "dispatched to relay"
|
|
230
|
+
// response from this, and a silently-resolved void here would report a message as safely
|
|
231
|
+
// parked when nothing was ever deposited.
|
|
232
|
+
return { ok: false, reason, cause };
|
|
233
|
+
}
|
|
234
|
+
// SEC-1: sign the entry as the SENDING agent. Without a key we cannot produce an envelope the
|
|
235
|
+
// recipient will accept, so fail LOUD rather than depositing something that will be refused on
|
|
236
|
+
// recovery (a deposit the recipient must reject is worse than no deposit — it looks delivered).
|
|
237
|
+
const senderKp = keyProviders.get(agentName);
|
|
238
|
+
if (!senderKp) {
|
|
239
|
+
const reason = "signing_key_unavailable";
|
|
240
|
+
logger.warn("content.park.deposit.failed", { agentName, sessionId, contentHash: contentHashHex, reason });
|
|
241
|
+
return { ok: false, reason };
|
|
242
|
+
}
|
|
243
|
+
const recipientPubkey = Buffer.from(recipientPubkeyHex, "hex");
|
|
244
|
+
const contentHashBytes = Buffer.from(contentHashHex, "hex");
|
|
245
|
+
logger.info("content.park.signed", { agentName, sessionId, contentHash: contentHashHex });
|
|
246
|
+
// DOD-MSG-4 (2b): seal the ORDERING ENVELOPE (content + the relay's signed Structure2), not bare
|
|
247
|
+
// content, so the parked entry is self-ordering on recover. The relay still holds only ciphertext.
|
|
248
|
+
// SEC-1: sealParkEnvelope is the SOLE producer — it signs (sender's K_local, over the
|
|
249
|
+
// session/recipient/content binding) and seals in one place, so the two park sites cannot drift
|
|
250
|
+
// apart on what gets signed.
|
|
251
|
+
//
|
|
252
|
+
// `DOD-M15-SEALWIRE-1` PART B2b — the algorithm is threaded through, and it is the value THIS
|
|
253
|
+
// MESSAGE was hashed under, never one re-derived from the session's current row. Whether a hash
|
|
254
|
+
// is salted is a fact about the message that was sent; what this side holds now says nothing
|
|
255
|
+
// about it.
|
|
256
|
+
//
|
|
257
|
+
// ⛔ THIS COMMENT USED TO SAY "Still `sha256` everywhere, because no send path salts yet — the
|
|
258
|
+
// plumbing is proven carrying the value that cannot break anything, and only then does the value
|
|
259
|
+
// change." That described B2b, and B2b-2 then CHANGED THE VALUE: a session holding an agreed
|
|
260
|
+
// salt hashes under `hmac-sha256-salt-v1`, so this path really does carry a salted algorithm
|
|
261
|
+
// now. Rewritten rather than deleted — a stale reassurance is what `CLAIM-COMMENTS-1` is for,
|
|
262
|
+
// and on 2026-08-24 a test declared `sha256` on the strength of this sentence and got a tamper
|
|
263
|
+
// verdict on an honest message.
|
|
264
|
+
const ciphertext = await sealParkEnvelope({
|
|
265
|
+
signer: senderKp,
|
|
266
|
+
sessionIdHex: sessionId,
|
|
267
|
+
recipientPubkey,
|
|
268
|
+
contentHash: contentHashBytes,
|
|
269
|
+
content,
|
|
270
|
+
// The algorithm the DIRECT frame named for this same message. The park copy must claim what
|
|
271
|
+
// the message actually is, not what this side would choose for it now.
|
|
272
|
+
contentHashAlg,
|
|
273
|
+
structure1Cbor,
|
|
274
|
+
structure2Cbor,
|
|
275
|
+
// 034-CARRYLEAF: promotes the envelope to v4 when present, which is what lets the recipient
|
|
276
|
+
// witness this leaf if its author never does.
|
|
277
|
+
structure1Signature,
|
|
278
|
+
leafKind,
|
|
279
|
+
});
|
|
280
|
+
const client = new ContentParkClient({ relayPeerId, relayAddrs: [...relayAddrs], logger });
|
|
281
|
+
const res = await client.deposit(node, {
|
|
282
|
+
recipientPubkey,
|
|
283
|
+
contentHash: Buffer.from(contentHashHex, "hex"),
|
|
284
|
+
sessionId: Buffer.from(sessionId, "hex"),
|
|
285
|
+
ciphertext,
|
|
286
|
+
});
|
|
287
|
+
if (res.ok) {
|
|
288
|
+
logger.info("content.park.deposited", { sessionId, contentHash: contentHashHex, recipientPubkey: recipientPubkeyHex.slice(0, 16) });
|
|
289
|
+
return { ok: true };
|
|
290
|
+
}
|
|
291
|
+
logger.warn("content.park.deposit.failed", {
|
|
292
|
+
sessionId,
|
|
293
|
+
contentHash: contentHashHex,
|
|
294
|
+
reason: res.reason,
|
|
295
|
+
...(res.retryAfterMs !== undefined ? { retryAfterMs: res.retryAfterMs } : {}),
|
|
296
|
+
});
|
|
297
|
+
/**
|
|
298
|
+
* DOD-M15-RELAYABUSE-1 — **GIVE THE RELAY'S "WHEN" A CONSUMER.**
|
|
299
|
+
*
|
|
300
|
+
* A deferred park is otherwise retried only on EVENTS — boot, agent start, the drain hook, a
|
|
301
|
+
* signaling reconnect. None of those is coming for a throttle: the relay is healthy, the link
|
|
302
|
+
* never dropped, and the condition clears on a timer nobody is watching. So the one refusal that
|
|
303
|
+
* self-heals in about a minute was the one that waited longest, purely because the number the
|
|
304
|
+
* relay had already computed had no reader.
|
|
305
|
+
*
|
|
306
|
+
* Scheduled ONCE per refusal, unref'd so it can never hold the process open, and best-effort:
|
|
307
|
+
* the existing event triggers remain the guarantee, and this is a shortcut on top of them. It
|
|
308
|
+
* deliberately does not retry-on-retry — a timer that reschedules itself on failure is a
|
|
309
|
+
* self-inflicted flood, which is what the limiter exists to stop.
|
|
310
|
+
*/
|
|
311
|
+
if (res.retryAfterMs !== undefined && res.retryAfterMs > 0) {
|
|
312
|
+
/**
|
|
313
|
+
* ⚠️ CLAMPED, because the number comes from ANOTHER PARTY'S SOFTWARE and an unclamped one is
|
|
314
|
+
* not merely wrong — it inverts the fix. Node's `setTimeout` holds an int32: a relay reporting
|
|
315
|
+
* `3_000_000_000` overflows it and the timer fires in about **one millisecond**, re-parking
|
|
316
|
+
* instantly into the limit that just refused, and printing a `TimeoutOverflowWarning` on
|
|
317
|
+
* stderr from a daemon whose convention forbids console output. A reported `1` does the same
|
|
318
|
+
* thing 250 ms later.
|
|
319
|
+
*
|
|
320
|
+
* The floor is a second and the ceiling five minutes: long enough that a shortcut is a
|
|
321
|
+
* shortcut, short enough that it stays one. A clamp is announced rather than silent — a relay
|
|
322
|
+
* asking us to wait 35 days is a fact an operator wants.
|
|
323
|
+
*/
|
|
324
|
+
scheduleParkRetry(res.retryAfterMs, agentName, "send");
|
|
325
|
+
}
|
|
326
|
+
return {
|
|
327
|
+
ok: false,
|
|
328
|
+
reason: res.reason ?? "relay_deposit_failed",
|
|
329
|
+
// DOD-M15-RELAYABUSE-1 review MEDIUM-6: the guidance quotes the relay's OWN window instead of
|
|
330
|
+
// guessing "about a minute", which is a hardcoded assumption about a configurable value.
|
|
331
|
+
...(res.retryAfterMs !== undefined ? { retryAfterMs: res.retryAfterMs } : {}),
|
|
332
|
+
};
|
|
333
|
+
});
|
|
334
|
+
// CELLO-M7-MSG-001 (AC-004/AC-005, D-d): startup flush of locally-persisted un-acked
|
|
335
|
+
// content (the crash backstop). Runs HERE — before the IPC socket opens, consistent
|
|
336
|
+
// with DAEMON-003 startup loading (AC-007) — so a sender that crashed before its TTF
|
|
337
|
+
// park confirmed re-parks its un-acked content to the relay store-and-forward queue on
|
|
338
|
+
// restart. Best-effort: a failed park stays queued (drainAwaitingToPark does not evict
|
|
339
|
+
// on failure), to be retried at the next startup flush or reconnect.
|
|
340
|
+
//
|
|
341
|
+
// Re-home note (Option A): the park target (config.contentParkFn) is supplied natively
|
|
342
|
+
// by the daemon's own send path — NOT by a hosted CelloClient. When it is absent (e.g.
|
|
343
|
+
// a daemon started without the content send path wired, or unit tests), the flush is a
|
|
344
|
+
// documented no-op (content.park.flush.deferred at WARN) and the durable awaiting
|
|
345
|
+
// entries simply remain queued for the next startup that has a park target.
|
|
346
|
+
// MSG-2 startup-flush park target: seal + deposit an un-acked awaiting entry sourced from
|
|
347
|
+
// PERSISTED session state (the in-memory entry is gone after a restart). Same seal + deposit
|
|
348
|
+
// as the live hook above; the endpoint + recipient come from the sessions row.
|
|
349
|
+
const startupParkFn = async (entry) => {
|
|
350
|
+
// The durable row carries the OWNING agent's stable id. Resolve it back to a name for the
|
|
351
|
+
// name-addressed session/standing-receiver lookups. A retired owner resolves fine and then has no
|
|
352
|
+
// standing receiver, so the park fails loudly below rather than silently re-parking as someone else.
|
|
353
|
+
const ownerName = sessionNodeManager.agentNameForId(entry.agentId);
|
|
354
|
+
if (ownerName === null)
|
|
355
|
+
return { parked: false, error: "owning_agent_not_found" };
|
|
356
|
+
const ep = sessionNodeManager.getPersistedRelayEndpoint(ownerName, entry.sessionId);
|
|
357
|
+
const record = sessionNodeManager.getSessionRecord(ownerName, entry.sessionId);
|
|
358
|
+
if (!ep)
|
|
359
|
+
return { parked: false, error: "no_persisted_relay_endpoint" };
|
|
360
|
+
if (!record?.counterparty_pubkey)
|
|
361
|
+
return { parked: false, error: "no_counterparty" };
|
|
362
|
+
// DOD-LOOP-1: the re-park must originate from the session's OWNING agent (the original
|
|
363
|
+
// sender), so use THAT agent's standing-receiver node — not "any" agent's. Post-DOD-LOOP-1 the
|
|
364
|
+
// owning agent's SR exists only once it is online, which is why the native flush is
|
|
365
|
+
// (re-)triggered per-agent on agent-online (see flushAwaitingContent / cello_start_agent), not
|
|
366
|
+
// only at pre-IPC startup when no agent is online yet.
|
|
367
|
+
const node = sessionNodeManager.getStandingReceiverNode(record.agent_name);
|
|
368
|
+
if (!node)
|
|
369
|
+
return { parked: false, error: "standing_receiver_unavailable" };
|
|
370
|
+
// SEC-1: the crash backstop must sign too — an unsigned re-park would be REFUSED on recovery,
|
|
371
|
+
// which would turn the message-loss backstop into a message-loss cause. The SEC-1 signature
|
|
372
|
+
// binds to the sender's own K_local, which the owning agent still holds after a crash.
|
|
373
|
+
// M12-P12 (review F2): the ordering record IS now persisted (retry_queue.structure{1,2}_cbor),
|
|
374
|
+
// so a re-park is self-ordering whenever the row carries one. Rows written before that column
|
|
375
|
+
// existed carry none and still recover in arrival order — the pre-existing behaviour, now the
|
|
376
|
+
// exception rather than the rule.
|
|
377
|
+
const senderKp = keyProviders.get(ownerName);
|
|
378
|
+
if (!senderKp)
|
|
379
|
+
return { parked: false, error: "signing_key_unavailable" };
|
|
380
|
+
const recipientPubkey = Buffer.from(record.counterparty_pubkey, "hex");
|
|
381
|
+
const contentHashBytes = Buffer.from(entry.contentHashHex, "hex");
|
|
382
|
+
logger.info("content.park.signed", { agentName: ownerName, sessionId: entry.sessionId, contentHash: entry.contentHashHex, source: "startup_flush" });
|
|
383
|
+
// DOD-MSG-4 (2b): ONE envelope format on the recover side. M12-P12 (F2): carry the persisted
|
|
384
|
+
// ordering record when the row has one, so the recipient places the content at its WITNESSED
|
|
385
|
+
// sequence rather than its arrival index — the receiver's #witnessedSeq map is in-memory and
|
|
386
|
+
// empty after a restart, so arrival order there means a wrong leaf index and a divergent tree.
|
|
387
|
+
// SEC-1: same sole producer as the live hook — the backstop signs from the persisted
|
|
388
|
+
// (sessionId, recipient, contentHash).
|
|
389
|
+
//
|
|
390
|
+
// `DOD-M15-SEALWIRE-1` PART B2b — the algorithm is threaded through, and it is the value THIS
|
|
391
|
+
// MESSAGE was hashed under, never one re-derived from the session's current row. Whether a hash
|
|
392
|
+
// is salted is a fact about the message that was sent; what this side holds now says nothing
|
|
393
|
+
// about it.
|
|
394
|
+
//
|
|
395
|
+
// ⛔ THIS COMMENT USED TO SAY "Still `sha256` everywhere, because no send path salts yet — the
|
|
396
|
+
// plumbing is proven carrying the value that cannot break anything, and only then does the value
|
|
397
|
+
// change." That described B2b, and B2b-2 then CHANGED THE VALUE: a session holding an agreed
|
|
398
|
+
// salt hashes under `hmac-sha256-salt-v1`, so this path really does carry a salted algorithm
|
|
399
|
+
// now. Rewritten rather than deleted — a stale reassurance is what `CLAIM-COMMENTS-1` is for,
|
|
400
|
+
// and on 2026-08-24 a test declared `sha256` on the strength of this sentence and got a tamper
|
|
401
|
+
// verdict on an honest message.
|
|
402
|
+
const ciphertext = await sealParkEnvelope({
|
|
403
|
+
signer: senderKp,
|
|
404
|
+
sessionIdHex: entry.sessionId,
|
|
405
|
+
recipientPubkey,
|
|
406
|
+
contentHash: contentHashBytes,
|
|
407
|
+
content: entry.contentBlob,
|
|
408
|
+
// The queued row's own record of how it was hashed. `undefined` for a row written before the
|
|
409
|
+
// column existed, which resolves to `sha256` — exactly what such a row actually used.
|
|
410
|
+
contentHashAlg: entry.contentHashAlg,
|
|
411
|
+
structure1Cbor: entry.structure1Cbor,
|
|
412
|
+
structure2Cbor: entry.structure2Cbor,
|
|
413
|
+
// 034-CARRYLEAF: a re-parked message must reach its recipient in a shape they can WITNESS on
|
|
414
|
+
// the sender's behalf, or a crash re-opens the withholding hole on the mailbox route.
|
|
415
|
+
structure1Signature: entry.structure1Signature,
|
|
416
|
+
leafKind: entry.leafKind,
|
|
417
|
+
});
|
|
418
|
+
const client = new ContentParkClient({ relayPeerId: ep.relayPeerId, relayAddrs: [...ep.relayAddrs], logger });
|
|
419
|
+
const res = await client.deposit(node, {
|
|
420
|
+
recipientPubkey,
|
|
421
|
+
contentHash: Buffer.from(entry.contentHashHex, "hex"),
|
|
422
|
+
sessionId: Buffer.from(entry.sessionId, "hex"),
|
|
423
|
+
ciphertext,
|
|
424
|
+
});
|
|
425
|
+
if (res.ok) {
|
|
426
|
+
logger.info("content.park.deposited", { sessionId: entry.sessionId, contentHash: entry.contentHashHex, source: "startup_flush" });
|
|
427
|
+
return { parked: true };
|
|
428
|
+
}
|
|
429
|
+
return {
|
|
430
|
+
parked: false,
|
|
431
|
+
error: res.reason ?? "deposit_failed",
|
|
432
|
+
// DOD-M15-RELAYABUSE-1 review HIGH-2: carry the relay's own "when" out of the DRAIN path too.
|
|
433
|
+
...(res.retryAfterMs !== undefined ? { retryAfterMs: res.retryAfterMs } : {}),
|
|
434
|
+
};
|
|
435
|
+
};
|
|
436
|
+
// Re-park un-acked awaiting content to the relay store-and-forward queue. Runs once pre-IPC
|
|
437
|
+
// (the crash backstop) and again per-agent when an agent comes online — because post-DOD-LOOP-1
|
|
438
|
+
// the native `startupParkFn` needs the OWNING agent's standing receiver, which exists only once
|
|
439
|
+
// that agent is online. `filterAgentName` scopes the drain to one agent's sessions on the agent-
|
|
440
|
+
// online re-run; with no filter it attempts all (the pre-IPC pass / injected-target test path).
|
|
441
|
+
// M12-P12 (review pass 2): the sender flush now has FOUR triggers (boot, agent start, the parked-
|
|
442
|
+
// drain hook, signaling reconnect), and two of them fire deterministically together on agent start
|
|
443
|
+
// — the drain hook runs inside ensureStandingReceiver, whose own .then() then calls this again
|
|
444
|
+
// while the first pass is still dialling the relay. The receiver twin (contentPark) already
|
|
445
|
+
// coalesces for exactly this reason; adding triggers to the sender half without the same guard was
|
|
446
|
+
// an asymmetry, not a decision. Re-run once at the end if a trigger arrived mid-flight, so a
|
|
447
|
+
// coalesced call never DROPS work — it defers it.
|
|
448
|
+
const flushInFlight = new Set();
|
|
449
|
+
const flushRerunRequested = new Set();
|
|
450
|
+
async function flushAwaitingContent(filterAgentName) {
|
|
451
|
+
const flushKey = filterAgentName ?? "*";
|
|
452
|
+
if (flushInFlight.has(flushKey)) {
|
|
453
|
+
flushRerunRequested.add(flushKey);
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
flushInFlight.add(flushKey);
|
|
457
|
+
try {
|
|
458
|
+
await flushAwaitingContentInner(filterAgentName);
|
|
459
|
+
}
|
|
460
|
+
finally {
|
|
461
|
+
flushInFlight.delete(flushKey);
|
|
462
|
+
}
|
|
463
|
+
if (flushRerunRequested.delete(flushKey)) {
|
|
464
|
+
await flushAwaitingContent(filterAgentName);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
async function flushAwaitingContentInner(filterAgentName) {
|
|
468
|
+
// DOD-AGENT-ID-JOINKEY-1: the queue is keyed by the STABLE agent_id, but the caller (and the
|
|
469
|
+
// human-readable log) speak the NAME. Resolve once here; log the name, filter by the id.
|
|
470
|
+
const filterAgentId = filterAgentName !== undefined
|
|
471
|
+
? sessionNodeManager.resolveAgentId(filterAgentName)
|
|
472
|
+
: undefined;
|
|
473
|
+
const all = retryQueue.getAwaitingSessions();
|
|
474
|
+
const sessions = filterAgentId === undefined
|
|
475
|
+
? all
|
|
476
|
+
: all.filter((s) => s.agentId === filterAgentId);
|
|
477
|
+
if (sessions.length === 0)
|
|
478
|
+
return;
|
|
479
|
+
const parkFn = config.contentParkFn ?? startupParkFn;
|
|
480
|
+
if (!parkFn) {
|
|
481
|
+
const pendingCount = sessions.reduce((n, s) => n + retryQueue.getAwaitingDepth(s.agentId, s.sessionId), 0);
|
|
482
|
+
logger.warn("content.park.flush.deferred", {
|
|
483
|
+
sessionCount: sessions.length,
|
|
484
|
+
pendingCount,
|
|
485
|
+
reason: "no_content_park_target",
|
|
486
|
+
});
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
let parkedTotal = 0;
|
|
490
|
+
for (const s of sessions) {
|
|
491
|
+
try {
|
|
492
|
+
parkedTotal += await retryQueue.drainAwaitingToPark(s.agentId, s.sessionId, parkFn, (retryAfterMs) => {
|
|
493
|
+
/**
|
|
494
|
+
* DOD-M15-RELAYABUSE-1 review HIGH-2 — **the drain path can now schedule its own
|
|
495
|
+
* follow-up, which is what makes the retry work for a BACKLOG rather than one message.**
|
|
496
|
+
*
|
|
497
|
+
* Before this, only the live send path heard the relay's delay. With a backlog larger than
|
|
498
|
+
* one rate-limit window, the drain deposited what the window allowed, every remaining item
|
|
499
|
+
* was refused, and all of them fell back to waiting for an unrelated reconnect — the exact
|
|
500
|
+
* condition the retry timer was added to remove.
|
|
501
|
+
*
|
|
502
|
+
* ONE timer per pass (the drain reports the largest delay it saw, not one per item), and
|
|
503
|
+
* it deliberately does not chain beyond that: the next pass schedules the next one only if
|
|
504
|
+
* it is refused again, so a permanently-full relay costs one timer per window rather than
|
|
505
|
+
* an accelerating stream of them.
|
|
506
|
+
*/
|
|
507
|
+
scheduleParkRetry(retryAfterMs, filterAgentName, "drain");
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
catch (err) {
|
|
511
|
+
logger.error("content.park.flush.failed", {
|
|
512
|
+
sessionId: s.sessionId,
|
|
513
|
+
error: extractErrorMessage(err),
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
logger.info("content.park.flush.completed", {
|
|
518
|
+
sessionCount: sessions.length,
|
|
519
|
+
parkedCount: parkedTotal,
|
|
520
|
+
...(filterAgentName !== undefined ? { agentName: filterAgentName } : {}),
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
// `scheduleParkRetry` and `startupParkFn` are NOT returned: their only callers moved with them.
|
|
524
|
+
// A returned name implies a consumer, and widening the surface for none is the same claim about
|
|
525
|
+
// coupling that an unused dependency makes.
|
|
526
|
+
return { retryQueue, parkRetryTimers, flushAwaitingContent };
|
|
527
|
+
}
|
|
528
|
+
//# sourceMappingURL=boot-parked-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-parked-content.js","sourceRoot":"","sources":["../src/boot-parked-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ONE of the daemon's two background sweeps — the revival-bound sweep — and the timer that re-arms
|
|
3
|
+
* it. The other, the document reconcile sweep, is still in the composition root beside the document
|
|
4
|
+
* wiring it drives.
|
|
5
|
+
*
|
|
6
|
+
* A sweep is not a one-off: a session interrupted at 09:00 on a daemon that stays up all week would
|
|
7
|
+
* otherwise be swept only at the next boot, and a long-lived daemon is the normal case. The timer
|
|
8
|
+
* `unref`s so a pending tick never holds the process open.
|
|
9
|
+
*
|
|
10
|
+
* The timer is returned rather than started-and-forgotten because shutdown has to clear it, and a
|
|
11
|
+
* timer nobody holds a handle to is a process that will not exit.
|
|
12
|
+
*/
|
|
13
|
+
import type { Logger } from "./types.js";
|
|
14
|
+
import { type SessionNodeManager } from "./session-node-manager.js";
|
|
15
|
+
export interface BootSweepsDeps {
|
|
16
|
+
logger: Logger;
|
|
17
|
+
sessionNodeManager: SessionNodeManager;
|
|
18
|
+
}
|
|
19
|
+
export declare function startBootSweeps(deps: BootSweepsDeps): {
|
|
20
|
+
revivalBoundSweepTimer: NodeJS.Timeout;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=boot-sweeps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-sweeps.d.ts","sourceRoot":"","sources":["../src/boot-sweeps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAA6C,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/G,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc;;EAkDnD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { REVIVAL_WINDOW_MS, REVIVAL_BOUND_SWEEP_MS } from "./session-node-manager.js";
|
|
2
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
3
|
+
export function startBootSweeps(deps) {
|
|
4
|
+
const { logger, sessionNodeManager } = deps;
|
|
5
|
+
/**
|
|
6
|
+
* DOD-M12B-REVIVAL-BOUND-1 — close the interrupted sessions the revival window has expired.
|
|
7
|
+
*
|
|
8
|
+
* Runs at boot beside the restart-seal resolver, and is its complement: the resolver takes the
|
|
9
|
+
* sessions we can describe truthfully (`interrupted_by = 'local'`) and gets them a receipt; this
|
|
10
|
+
* takes everything else and shuts the door without asserting a cause.
|
|
11
|
+
*
|
|
12
|
+
* It must run even though nothing has revived a session yet — the reason is Andre's 2026-08-18
|
|
13
|
+
* tenet, *"leave nothing open that is no longer needed."* `ingestReceivedContent` accepts content
|
|
14
|
+
* into an `interrupted` session by design, so a session that can never be revived is a write
|
|
15
|
+
* surface a reprogrammed peer can use for as long as the row exists. Boot is where the store is
|
|
16
|
+
* swept for exactly that.
|
|
17
|
+
*
|
|
18
|
+
* NOT AWAITED, and caught: this is a best-effort sweep over rows that have already waited a day.
|
|
19
|
+
* Blocking the daemon's startup on a directory-free DB walk buys nothing, and a throw here would
|
|
20
|
+
* take down a daemon that is otherwise healthy.
|
|
21
|
+
*/
|
|
22
|
+
const runRevivalBoundSweep = () => {
|
|
23
|
+
void sessionNodeManager
|
|
24
|
+
.closeExpiredUnrevivableSessions(Date.now(), REVIVAL_WINDOW_MS)
|
|
25
|
+
.catch((err) => {
|
|
26
|
+
logger.warn("session.revival_bound.sweep.failed", {
|
|
27
|
+
error: extractErrorMessage(err),
|
|
28
|
+
impact: "expired sessions were not closed this pass and still accept content",
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
runRevivalBoundSweep();
|
|
33
|
+
/**
|
|
34
|
+
* RE-ARMED, because boot alone is not a bound.
|
|
35
|
+
*
|
|
36
|
+
* A session interrupted at 09:00 on a daemon that stays up all week would otherwise be writable
|
|
37
|
+
* for the whole week — and a long-lived daemon is the normal case, not the exception. Boot-only
|
|
38
|
+
* would have made the control fire exactly when it is least needed (a machine that restarts often
|
|
39
|
+
* is a machine whose sessions get swept often) and never when it is most needed.
|
|
40
|
+
*
|
|
41
|
+
* Hourly against a 24-hour window: the overshoot is at most an hour on a bound measured in days,
|
|
42
|
+
* and the pass is a single indexed DB walk with no network in it. `unref` so a pending timer
|
|
43
|
+
* never holds the process open, matching `reconcileSweepTimer` beside it.
|
|
44
|
+
*/
|
|
45
|
+
const revivalBoundSweepTimer = setInterval(runRevivalBoundSweep, REVIVAL_BOUND_SWEEP_MS);
|
|
46
|
+
revivalBoundSweepTimer.unref?.();
|
|
47
|
+
// The sweep function itself is not returned — its only callers are here (once at construction,
|
|
48
|
+
// then on the timer). Only the timer escapes, because shutdown has to clear it.
|
|
49
|
+
return { revivalBoundSweepTimer };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=boot-sweeps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-sweeps.js","sourceRoot":"","sources":["../src/boot-sweeps.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAA2B,MAAM,2BAA2B,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAOzD,MAAM,UAAU,eAAe,CAAC,IAAoB;IAClD,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;IAE5C;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,oBAAoB,GAAG,GAAS,EAAE;QACtC,KAAK,kBAAkB;aACpB,+BAA+B,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;aAC9D,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;gBAChD,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC;gBAC/B,MAAM,EAAE,qEAAqE;aAC9E,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IACF,oBAAoB,EAAE,CAAC;IAEvB;;;;;;;;;;;OAWG;IACH,MAAM,sBAAsB,GAAG,WAAW,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;IACzF,sBAAsB,CAAC,KAAK,EAAE,EAAE,CAAC;IAEjC,+FAA+F;IAC/F,gFAAgF;IAChF,OAAO,EAAE,sBAAsB,EAAE,CAAC;AACpC,CAAC"}
|