@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,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One directory signaling stream per agent, authenticated as that agent.
|
|
3
|
+
*
|
|
4
|
+
* The directory routes EVERY frame — `dkg_complete`, `register_success`, an inbound
|
|
5
|
+
* `session_assignment`, a seal — by the pubkey that authenticated the stream it arrived on. So each
|
|
6
|
+
* agent must hold its own; there is no shared connection borrowing one agent's identity. The single
|
|
7
|
+
* shared manager that appears below exists only for the in-process test path.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ NINETEEN DEPENDENCIES — seven over the order's bound, and the number is COUNTED, not typed:
|
|
10
|
+
* `signaling-wiring-deps.test.ts` asserts it against the interface, because the first two versions
|
|
11
|
+
* of this sentence said fourteen and eighteen and disagreed with each other.
|
|
12
|
+
*
|
|
13
|
+
* It is one constructor, not a missed seam. `getAgentSignaling` is the sole entry point that touches
|
|
14
|
+
* all nineteen, and it is not a lookup: for an unknown agent it CONSTRUCTS a manager and wires seven
|
|
15
|
+
* things onto it in one uninterruptible sequence — connect, session ceremony, seal ceremony, seal
|
|
16
|
+
* listeners, session offer, and the two inbound handlers. Any split leaves a manager observably
|
|
17
|
+
* half-wired between two calls, which is the failure the CONN-001 comments below spend forty lines
|
|
18
|
+
* describing. The four small returns look separable and are not: three of them read
|
|
19
|
+
* `perAgentSignaling`, which only `getAgentSignaling` fills, so extracting them means exporting the
|
|
20
|
+
* map instead.
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ TWO VALUES ARE GETTERS, AND THE REASON IS **CORRECTNESS, NOT BLAST RADIUS**.
|
|
23
|
+
* `getWirePerAgentSessionInbound` and `getHandleTrustSignalPickup` come from `createInboundSessions`,
|
|
24
|
+
* built ~1,200 lines BELOW this wiring. They are `const`, so passing them by value does not go
|
|
25
|
+
* quiet — it throws `ReferenceError: Cannot access ... before initialization` and the daemon dies at
|
|
26
|
+
* boot with the right name in the message. **The silent shape is a `let x;` that is still
|
|
27
|
+
* `undefined`**, which is what unit 4 hit and why its defect survived 5,003 green tests. Do not read
|
|
28
|
+
* this comment as "late binding is always silent"; the detection rule is the DECLARATION, and `let`
|
|
29
|
+
* is the one that hides.
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ ONE CONSUMER IS BUILT BEFORE THIS MODULE. `createSealFlows` takes `signalingFor` and `sendOver`,
|
|
32
|
+
* and it is constructed above this call, so those two arrive as lambdas that resolve here at call
|
|
33
|
+
* time. `dropAgentSignaling` is passed by value — its consumers are built ~1,900 lines below, so
|
|
34
|
+
* there is nothing to defer.
|
|
35
|
+
*/
|
|
36
|
+
import { SignalingManager } from "@cello-protocol/transport";
|
|
37
|
+
import type { CelloNode, IDirectoryChallengeVerifier } from "@cello-protocol/transport";
|
|
38
|
+
import type { SessionNodeManager } from "./session-node-manager.js";
|
|
39
|
+
import type { LoadedAgent } from "./agent-loader.js";
|
|
40
|
+
import type { DirectorySignalingState, Logger } from "./types.js";
|
|
41
|
+
import { type DbRegistrationPersistence } from "./db-identity-store.js";
|
|
42
|
+
import type { ConsortiumEndpoint } from "./directory-bootstrap.js";
|
|
43
|
+
import type { DirectoryEndpoint } from "./signaling-connect.js";
|
|
44
|
+
import type { SubmissionRetryQueue } from "./submission-retry.js";
|
|
45
|
+
import type { SealFailureStore } from "./seal-failure-store.js";
|
|
46
|
+
import type { KeyProvider } from "@cello-protocol/crypto";
|
|
47
|
+
import { type TrustSignalPickupHandler } from "./trust-signal-pickup-listener.js";
|
|
48
|
+
/** One agent's directory stream and the libp2p node behind it. */
|
|
49
|
+
export interface AgentSignaling {
|
|
50
|
+
signaling: SignalingManager;
|
|
51
|
+
getNode: () => CelloNode | null;
|
|
52
|
+
}
|
|
53
|
+
export interface SignalingWiringDeps {
|
|
54
|
+
logger: Logger;
|
|
55
|
+
sessionNodeManager: SessionNodeManager;
|
|
56
|
+
/** The LIVE registry — a manager is built for an agent created after boot without a restart. */
|
|
57
|
+
loadedAgents: ReadonlyArray<LoadedAgent>;
|
|
58
|
+
keyProviders: Map<string, KeyProvider>;
|
|
59
|
+
/** Present ONLY on the in-process test path; undefined in production, where every agent dials. */
|
|
60
|
+
sharedSignaling: SignalingManager | undefined;
|
|
61
|
+
noSharedDirectoryNode: () => CelloNode | null;
|
|
62
|
+
verifiedManifestVersion: number;
|
|
63
|
+
getPersistence: (agentName: string) => DbRegistrationPersistence;
|
|
64
|
+
onSignalingConnected: (agentName: string) => void | Promise<void>;
|
|
65
|
+
/** C2, late-bound; built in outbound-sessions. See trust-signal-sweep.ts. */
|
|
66
|
+
getSweepTrustSignals: () => ((n: string, k: KeyProvider, p: string) => Promise<unknown>) | undefined;
|
|
67
|
+
resolveConsortiumRoster: () => Promise<ConsortiumEndpoint[] | null>;
|
|
68
|
+
failoverEndpointResolver: (() => Promise<DirectoryEndpoint | null>) | undefined;
|
|
69
|
+
/** Wired onto each new manager so a seal that arrives on it is heard. */
|
|
70
|
+
registerSealListeners: (mgr: SignalingManager, agentName: string, agentPubkeyHex: string) => void;
|
|
71
|
+
getFailoverEndpoint: () => Promise<{
|
|
72
|
+
peerId: string;
|
|
73
|
+
multiaddr?: string;
|
|
74
|
+
} | null>;
|
|
75
|
+
sealFailures: SealFailureStore;
|
|
76
|
+
submissionRetries: SubmissionRetryQueue;
|
|
77
|
+
challengeVerifier: IDirectoryChallengeVerifier | undefined;
|
|
78
|
+
directoryEndpointResolver: (() => Promise<DirectoryEndpoint | null>) | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* ⚠️ GETTERS, NOT VALUES, AND THE REASON IS THE DEFECT UNIT 4 SHIPPED. Both come from
|
|
81
|
+
* `createInboundSessions`, constructed roughly 1,200 lines BELOW this wiring, so at construction
|
|
82
|
+
* they do not exist. `getAgentSignaling` reads them only when it BUILDS a manager, which is always
|
|
83
|
+
* later, so resolving at call time is both correct and the only thing that works. Passed by value
|
|
84
|
+
* they would be `undefined` forever, and a non-primary agent would never receive an inbound session
|
|
85
|
+
* on its own stream — the exact failure the CONN-001 block below exists to prevent.
|
|
86
|
+
*/
|
|
87
|
+
getWirePerAgentSessionInbound: () => (mgr: SignalingManager, agentName: string) => void;
|
|
88
|
+
/** Resolved at FRAME time: the handler is built after this wiring, so an eager read is undefined. */
|
|
89
|
+
getHandleTrustSignalPickup: () => TrustSignalPickupHandler;
|
|
90
|
+
}
|
|
91
|
+
export declare function createSignalingWiring(deps: SignalingWiringDeps): {
|
|
92
|
+
perAgentSignaling: Map<string, AgentSignaling>;
|
|
93
|
+
getAgentSignaling: (agentName: string, agentKeyProvider: import("@cello-protocol/crypto").KeyProvider, agentPubkeyHex: string) => AgentSignaling;
|
|
94
|
+
waitForSignalingConnected: (mgr: SignalingManager, timeoutMs: number) => Promise<boolean>;
|
|
95
|
+
dropAgentSignaling: (agentName: string) => Promise<void>;
|
|
96
|
+
signalingFor: (agentName: string) => SignalingManager | undefined;
|
|
97
|
+
sendOver: (agentName: string, frame: Record<string, unknown>) => Promise<{
|
|
98
|
+
ok: boolean;
|
|
99
|
+
reason?: string;
|
|
100
|
+
}>;
|
|
101
|
+
directorySignalingStatus: () => DirectorySignalingState;
|
|
102
|
+
stopAllSignaling: () => Promise<void>;
|
|
103
|
+
registerPickupListener: import("./trust-signal-pickup-listener.js").PickupListenerRegistrar;
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=signaling-wiring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signaling-wiring.d.ts","sourceRoot":"","sources":["../src/signaling-wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One directory signaling stream per agent, authenticated as that agent.
|
|
3
|
+
*
|
|
4
|
+
* The directory routes EVERY frame — `dkg_complete`, `register_success`, an inbound
|
|
5
|
+
* `session_assignment`, a seal — by the pubkey that authenticated the stream it arrived on. So each
|
|
6
|
+
* agent must hold its own; there is no shared connection borrowing one agent's identity. The single
|
|
7
|
+
* shared manager that appears below exists only for the in-process test path.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ NINETEEN DEPENDENCIES — seven over the order's bound, and the number is COUNTED, not typed:
|
|
10
|
+
* `signaling-wiring-deps.test.ts` asserts it against the interface, because the first two versions
|
|
11
|
+
* of this sentence said fourteen and eighteen and disagreed with each other.
|
|
12
|
+
*
|
|
13
|
+
* It is one constructor, not a missed seam. `getAgentSignaling` is the sole entry point that touches
|
|
14
|
+
* all nineteen, and it is not a lookup: for an unknown agent it CONSTRUCTS a manager and wires seven
|
|
15
|
+
* things onto it in one uninterruptible sequence — connect, session ceremony, seal ceremony, seal
|
|
16
|
+
* listeners, session offer, and the two inbound handlers. Any split leaves a manager observably
|
|
17
|
+
* half-wired between two calls, which is the failure the CONN-001 comments below spend forty lines
|
|
18
|
+
* describing. The four small returns look separable and are not: three of them read
|
|
19
|
+
* `perAgentSignaling`, which only `getAgentSignaling` fills, so extracting them means exporting the
|
|
20
|
+
* map instead.
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ TWO VALUES ARE GETTERS, AND THE REASON IS **CORRECTNESS, NOT BLAST RADIUS**.
|
|
23
|
+
* `getWirePerAgentSessionInbound` and `getHandleTrustSignalPickup` come from `createInboundSessions`,
|
|
24
|
+
* built ~1,200 lines BELOW this wiring. They are `const`, so passing them by value does not go
|
|
25
|
+
* quiet — it throws `ReferenceError: Cannot access ... before initialization` and the daemon dies at
|
|
26
|
+
* boot with the right name in the message. **The silent shape is a `let x;` that is still
|
|
27
|
+
* `undefined`**, which is what unit 4 hit and why its defect survived 5,003 green tests. Do not read
|
|
28
|
+
* this comment as "late binding is always silent"; the detection rule is the DECLARATION, and `let`
|
|
29
|
+
* is the one that hides.
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ ONE CONSUMER IS BUILT BEFORE THIS MODULE. `createSealFlows` takes `signalingFor` and `sendOver`,
|
|
32
|
+
* and it is constructed above this call, so those two arrive as lambdas that resolve here at call
|
|
33
|
+
* time. `dropAgentSignaling` is passed by value — its consumers are built ~1,900 lines below, so
|
|
34
|
+
* there is nothing to defer.
|
|
35
|
+
*/
|
|
36
|
+
import { SignalingManager } from "@cello-protocol/transport";
|
|
37
|
+
import { channelAgentLookup } from "./db-identity-store.js";
|
|
38
|
+
import { createPickupListenerRegistrar } from "./trust-signal-pickup-listener.js";
|
|
39
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
40
|
+
import { createSignalingConnect } from "./signaling-connect.js";
|
|
41
|
+
import { wireSessionCeremonyHandler, wireSessionOfferHandler, wireSealCeremonyHandler } from "./session-ceremony.js";
|
|
42
|
+
import { relayOnlyState } from "./relay-only.js";
|
|
43
|
+
export function createSignalingWiring(deps) {
|
|
44
|
+
const { logger, sessionNodeManager, loadedAgents, keyProviders, sharedSignaling, noSharedDirectoryNode, verifiedManifestVersion, getPersistence, onSignalingConnected, resolveConsortiumRoster, failoverEndpointResolver, getFailoverEndpoint, sealFailures, submissionRetries, challengeVerifier, directoryEndpointResolver, registerSealListeners, getWirePerAgentSessionInbound, getHandleTrustSignalPickup, getSweepTrustSignals, } = deps;
|
|
45
|
+
const registerPickupListener = createPickupListenerRegistrar(getHandleTrustSignalPickup);
|
|
46
|
+
// ─── Per-agent directory signaling (CONN-001: one signaling stream per agent) ──
|
|
47
|
+
// CELLO-M7-CONN-001 (DOD-CONN-1): the directory routes EVERY signaling frame —
|
|
48
|
+
// dkg_complete, register_success, inbound session_assignment, seal — by the pubkey that
|
|
49
|
+
// AUTHENTICATED the stream it arrived on. So each agent MUST get its OWN directory stream,
|
|
50
|
+
// authenticated as itself. There is no shared "keystone" connection borrowing one agent's
|
|
51
|
+
// identity. In production every agent has its own manager (built below); the only shared
|
|
52
|
+
// manager is the in-process test path's `sharedSignaling`. Managers are created lazily (on
|
|
53
|
+
// first registration / online / create) and kept connected for the agent's directory presence.
|
|
54
|
+
const perAgentSignaling = new Map();
|
|
55
|
+
/**
|
|
56
|
+
* Return the directory signaling stream for `agentName`, authenticated as that agent.
|
|
57
|
+
* Production: a dedicated per-agent manager (created + cached on first use). Test /
|
|
58
|
+
* backward-compat path (no directoryEndpointResolver): the single shared manager.
|
|
59
|
+
*
|
|
60
|
+
* CONN-001 (DOD-CONN-2): the per-agent manager wires BOTH registration AND inbound session
|
|
61
|
+
* handlers (session_assignment / seal_interrupted_request) via wirePerAgentSessionInbound,
|
|
62
|
+
* so a non-primary agent RECEIVES inbound sessions on its own stream. Attaching them to the
|
|
63
|
+
* primary (keystone) only would leave every other agent unable to receive.
|
|
64
|
+
*/
|
|
65
|
+
function getAgentSignaling(agentName, agentKeyProvider, agentPubkeyHex) {
|
|
66
|
+
// CONN-001: test / backward-compat path — a single shared manager (no per-agent isolation;
|
|
67
|
+
// a single injected signalingConnect). In production sharedSignaling is undefined and every
|
|
68
|
+
// agent builds its own dedicated manager below.
|
|
69
|
+
if (sharedSignaling) {
|
|
70
|
+
return { signaling: sharedSignaling, getNode: noSharedDirectoryNode };
|
|
71
|
+
}
|
|
72
|
+
const existing = perAgentSignaling.get(agentName);
|
|
73
|
+
if (existing)
|
|
74
|
+
return existing;
|
|
75
|
+
// Unreachable in practice: sharedSignaling is defined iff directoryEndpointResolver is absent, and
|
|
76
|
+
// the sharedSignaling branch above already returned. This narrows the resolver for the type-checker
|
|
77
|
+
// and is a defensive guard.
|
|
78
|
+
if (!directoryEndpointResolver) {
|
|
79
|
+
throw new Error("getAgentSignaling: no directory endpoint resolver configured (and no shared manager)");
|
|
80
|
+
}
|
|
81
|
+
// FINDING-4: dial through the roster-aware failover resolver so this agent's signaling
|
|
82
|
+
// stream routes around a down primary node. (failoverEndpointResolver is defined here
|
|
83
|
+
// because it is built iff directoryEndpointResolver is — guarded non-null just above.)
|
|
84
|
+
const resolver = failoverEndpointResolver ?? directoryEndpointResolver;
|
|
85
|
+
let nodeRef = null;
|
|
86
|
+
const connect = createSignalingConnect({
|
|
87
|
+
getDirectoryEndpoint: resolver,
|
|
88
|
+
getAuthIdentity: () => ({ keyProvider: agentKeyProvider, pubkeyHex: agentPubkeyHex }),
|
|
89
|
+
logger,
|
|
90
|
+
challengeVerifier,
|
|
91
|
+
getManifestVersion: () => verifiedManifestVersion,
|
|
92
|
+
publishNode: (n) => {
|
|
93
|
+
nodeRef = n;
|
|
94
|
+
},
|
|
95
|
+
// DOD-NAT-REACHABILITY-1 (Phase 2): the directory's relay pool arrives with signaling_auth_ok.
|
|
96
|
+
// 056-SLOTDEAD — this used to say the receiver "reserves with those relays (and rebuilds if it
|
|
97
|
+
// came up deaf)". It does neither since 055-ONDEMAND: the pool is a CANDIDATE LIST, and a slot
|
|
98
|
+
// is taken at offer time. Nothing is reserved on receipt of it.
|
|
99
|
+
onRelayEndpoints: (endpoints) => {
|
|
100
|
+
sessionNodeManager.setDirectoryRelayEndpoints(agentName, endpoints.map((e) => ({ relayPeerId: e.peerId, relayAddrs: e.addrs })));
|
|
101
|
+
},
|
|
102
|
+
// DOD-M15-RELAYSLOTS-1: and the credential those relays require. Same frame, same cadence as
|
|
103
|
+
// the endpoints above — every connect and every reconnect, which is what keeps a token that
|
|
104
|
+
// expires within the hour current for a receiver that lives much longer than that.
|
|
105
|
+
onOnlineToken: (token) => {
|
|
106
|
+
sessionNodeManager.setDirectoryOnlineToken(agentName, token);
|
|
107
|
+
},
|
|
108
|
+
// Review M1: and when there is none, WHY — so the operator surface can say "this directory
|
|
109
|
+
// does not know this agent" instead of "check your directory connection" about a connection
|
|
110
|
+
// that just succeeded.
|
|
111
|
+
onOnlineTokenAbsent: (reason) => {
|
|
112
|
+
sessionNodeManager.setDirectoryOnlineTokenAbsent(agentName, reason);
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
const mgr = new SignalingManager({
|
|
116
|
+
connect,
|
|
117
|
+
logger,
|
|
118
|
+
maxReconnectAttempts: Number.MAX_SAFE_INTEGER,
|
|
119
|
+
maxBackoffMs: 30_000,
|
|
120
|
+
// Two things happen when this agent's directory signaling reaches 'connected' (the first
|
|
121
|
+
// connect AND every reconnect after a drop), and the ORDER is the contract — see
|
|
122
|
+
// reconnect-drain.ts.
|
|
123
|
+
//
|
|
124
|
+
// RE-REGISTER THE STANDING RECEIVER (2026-07-31 incident). The receiver's LIFETIME is tied to
|
|
125
|
+
// this daemon; its REGISTRATION is tied to this stream, and the stream turns over roughly
|
|
126
|
+
// every 70 seconds. ensureStandingReceiverForAgent ran only at agent start, so 46 of 48
|
|
127
|
+
// reconnects in one hour left every agent unregistered — the directory then answers
|
|
128
|
+
// `targetStreamFound: false` and a session request fails with `target_offline`, while
|
|
129
|
+
// `cello status`, `agent.online` and the directory's own agent_presence all still report the
|
|
130
|
+
// agent healthy. Only a daemon restart recovered it.
|
|
131
|
+
//
|
|
132
|
+
// THEN DRAIN (M8C-RELAYWAKE-1, "check relay on wakeup"): re-pull this agent's parked mailbox
|
|
133
|
+
// from every relay it has session history with, so a message parked while signaling was down
|
|
134
|
+
// is not left until the next agent start. The drain needs the node the ensure builds.
|
|
135
|
+
//
|
|
136
|
+
// AND THIRD, DOD-M15-ENDORSE-RETRY-1: re-send any sealed submission that reached no node.
|
|
137
|
+
// After `createReconnectDrain`: the drain needs the receiver the ensure rebuilds; this does not.
|
|
138
|
+
onConnected: () => {
|
|
139
|
+
onSignalingConnected(agentName);
|
|
140
|
+
submissionRetries.onSignalingConnected(agentName);
|
|
141
|
+
// C2: background, never awaited; the catch LOGS — silence is what hid this bug for weeks.
|
|
142
|
+
void getSweepTrustSignals()?.(agentName, agentKeyProvider, agentPubkeyHex)?.catch((e) => logger.warn("trust_signal.sweep.failed", { agentName, reason: extractErrorMessage(e) }));
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
const entry = { signaling: mgr, getNode: () => nodeRef };
|
|
146
|
+
perAgentSignaling.set(agentName, entry);
|
|
147
|
+
logger.info("agent.signaling.created", { agentName, agentPubkey: agentPubkeyHex });
|
|
148
|
+
// DOD-SPINE-5: answer the directory's delegated-signing `ceremony_request` on THIS
|
|
149
|
+
// agent's stream (the session FROST ceremony — the per-agent counterpart to SPINE-4's
|
|
150
|
+
// registration routing). Unregistered implicitly when the manager is stopped.
|
|
151
|
+
wireSessionCeremonyHandler({
|
|
152
|
+
agentName,
|
|
153
|
+
persistence: getPersistence(agentName),
|
|
154
|
+
agentPubkeyHex,
|
|
155
|
+
// DOD-M15-SEALWIRE-1 bullet 2 (review F1): the co-sign path must check the root before this
|
|
156
|
+
// agent's key endorses it. Same predicate as the receiving path — one implementation, so the
|
|
157
|
+
// two halves cannot drift about what a mismatch is.
|
|
158
|
+
verifyCertifiedRoot: (pub, sid, root, leaves, evidence) => sessionNodeManager.verifyCertifiedRoot(pub, sid, root, leaves, evidence),
|
|
159
|
+
keyProvider: agentKeyProvider,
|
|
160
|
+
getNode: entry.getNode,
|
|
161
|
+
getDirectoryEndpoint: getFailoverEndpoint,
|
|
162
|
+
getConsortiumEndpoints: resolveConsortiumRoster,
|
|
163
|
+
signaling: mgr,
|
|
164
|
+
logger,
|
|
165
|
+
// DOD-M15-SEALPARTIES-1: where a dead seal ceremony leaves its mark, so `cello_sealed_receipt`
|
|
166
|
+
// can say it FAILED and why instead of falling through to "no receipt yet".
|
|
167
|
+
recordSealFailure: (name, sid, reason, kind) => sealFailures.record(name, sid, reason, new Date().toISOString(), kind),
|
|
168
|
+
});
|
|
169
|
+
// DOD-SPINE-7: coordinate the SEAL FROST ceremony on this agent's stream too.
|
|
170
|
+
wireSealCeremonyHandler({
|
|
171
|
+
agentName,
|
|
172
|
+
persistence: getPersistence(agentName),
|
|
173
|
+
agentPubkeyHex,
|
|
174
|
+
// DOD-M15-SEALWIRE-1 bullet 2 (review F1): the co-sign path must check the root before this
|
|
175
|
+
// agent's key endorses it. Same predicate as the receiving path — one implementation, so the
|
|
176
|
+
// two halves cannot drift about what a mismatch is.
|
|
177
|
+
verifyCertifiedRoot: (pub, sid, root, leaves, evidence) => sessionNodeManager.verifyCertifiedRoot(pub, sid, root, leaves, evidence),
|
|
178
|
+
keyProvider: agentKeyProvider,
|
|
179
|
+
getNode: entry.getNode,
|
|
180
|
+
getDirectoryEndpoint: getFailoverEndpoint,
|
|
181
|
+
getConsortiumEndpoints: resolveConsortiumRoster,
|
|
182
|
+
signaling: mgr,
|
|
183
|
+
logger,
|
|
184
|
+
// DOD-M15-SEALPARTIES-1: where a dead seal ceremony leaves its mark, so `cello_sealed_receipt`
|
|
185
|
+
// can say it FAILED and why instead of falling through to "no receipt yet".
|
|
186
|
+
recordSealFailure: (name, sid, reason, kind) => sealFailures.record(name, sid, reason, new Date().toISOString(), kind),
|
|
187
|
+
});
|
|
188
|
+
// DOD-SPINE-7: and resolve session_sealed for this agent's sessions on its own stream.
|
|
189
|
+
registerSealListeners(mgr, agentName, agentPubkeyHex);
|
|
190
|
+
// WIRE-002: answer the directory's session_offer on this agent's stream (advertise the
|
|
191
|
+
// standing-receiver session endpoint so the assignment carries a reachable counterparty).
|
|
192
|
+
wireSessionOfferHandler({
|
|
193
|
+
agentName,
|
|
194
|
+
getStandingReceiverEndpoint: () => sessionNodeManager.getStandingReceiverInfo(agentName),
|
|
195
|
+
admitOfferedDialer: (peerId, sessionIdHex) => sessionNodeManager.admitOfferedDialer(agentName, peerId, sessionIdHex),
|
|
196
|
+
// RELAYONLY-1: tells "relay-only emptied the addresses" from "none yet" — opposite answers. M16: a channel rejects first.
|
|
197
|
+
reserveOnDemand: (c, sid) => sessionNodeManager.takeReservationForSession(agentName, c, sid, sid), isChannelAgent: () => channelAgentLookup(sessionNodeManager, logger)(agentName),
|
|
198
|
+
isRelayOnly: () => relayOnlyState((key) => sessionNodeManager.getSetting(agentName, key), sessionNodeManager.hasDatabase()) !== "off",
|
|
199
|
+
signaling: mgr,
|
|
200
|
+
logger,
|
|
201
|
+
});
|
|
202
|
+
// CELLO-M8-TRUST-001: sealed trust signals pushed from the directory pickup queue. Open with
|
|
203
|
+
// k_local, verify the hash against the anchor, store, ACK. Shared registrar (C) so the visiting
|
|
204
|
+
// stream gets the identical listener.
|
|
205
|
+
registerPickupListener(mgr, agentName, agentKeyProvider, "home");
|
|
206
|
+
/**
|
|
207
|
+
* DOD-M15-SEALPARTIES-1 Part 0: take the relay credential off `register_success`.
|
|
208
|
+
*
|
|
209
|
+
* `onOnlineToken` above catches every signaling auth and reconnect, and misses the one case that
|
|
210
|
+
* matters most: a brand-new agent. Its daemon opens this very stream in order TO register (the
|
|
211
|
+
* DKG runs over it), so the auth that created the stream happened while the directory still had
|
|
212
|
+
* no profile for the key and correctly issued nothing. A healthy stream never re-authenticates,
|
|
213
|
+
* so without this the agent holds no relay credential for the life of the daemon — no circuit
|
|
214
|
+
* reservation, unwitnessed leaves, and a close that fails with `seal_persist_failed`.
|
|
215
|
+
*
|
|
216
|
+
* A frame with no token is left alone rather than clearing what is held: the directory that
|
|
217
|
+
* issues here is the same one whose auth_ok issues, so overwriting a good token with an absence
|
|
218
|
+
* would turn one directory's minting failure into a reachability outage the operator cannot
|
|
219
|
+
* explain. The absence is already reported by the directory's own `online_token.failed`.
|
|
220
|
+
*/
|
|
221
|
+
mgr.registerInboundHandler((frame) => {
|
|
222
|
+
if (frame["type"] !== "register_success")
|
|
223
|
+
return;
|
|
224
|
+
const raw = frame["online_token"];
|
|
225
|
+
const token = raw instanceof Uint8Array ? raw : Buffer.isBuffer(raw) ? new Uint8Array(raw) : undefined;
|
|
226
|
+
if (token && token.length > 0) {
|
|
227
|
+
sessionNodeManager.setDirectoryOnlineToken(agentName, token);
|
|
228
|
+
logger.info("directory.online_token.received", { agentName, source: "register_success", bytes: token.length });
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
logger.warn("directory.online_token.absent", {
|
|
232
|
+
agentName,
|
|
233
|
+
source: "register_success",
|
|
234
|
+
impact: "this agent just registered and was handed no relay online token, so no relay will " +
|
|
235
|
+
"let it hold a circuit reservation until its directory signaling stream reconnects and " +
|
|
236
|
+
"re-issues one. Until then it is reachable only over a direct connection, and a session " +
|
|
237
|
+
"it does hold cannot get its leaves witnessed.",
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
// CELLO-M7-CONN-001 (DOD-CONN-2): inbound session_assignment + seal_interrupted_request
|
|
241
|
+
// on THIS agent's own stream, so a non-primary agent receives inbound sessions (SPINE-5).
|
|
242
|
+
getWirePerAgentSessionInbound()(mgr, agentName);
|
|
243
|
+
return entry;
|
|
244
|
+
}
|
|
245
|
+
/** Resolve once `mgr` reaches "connected", or false on timeout. */
|
|
246
|
+
async function waitForSignalingConnected(mgr, timeoutMs) {
|
|
247
|
+
const deadline = Date.now() + timeoutMs;
|
|
248
|
+
while (mgr.status !== "connected" && Date.now() < deadline) {
|
|
249
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
250
|
+
}
|
|
251
|
+
return mgr.status === "connected";
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Stop and forget a dedicated per-agent signaling manager. Called when an agent's
|
|
255
|
+
* registration fails terminally — otherwise the lazily-created manager (and its
|
|
256
|
+
* libp2p node + effectively-unbounded reconnect loop) would keep reconnecting forever
|
|
257
|
+
* for an agent that is not registered/online. No-op on the test path (the shared manager is not
|
|
258
|
+
* stored in perAgentSignaling) and for agents with no dedicated manager. On a later retry,
|
|
259
|
+
* getAgentSignaling re-creates it.
|
|
260
|
+
*/
|
|
261
|
+
async function dropAgentSignaling(agentName) {
|
|
262
|
+
const entry = perAgentSignaling.get(agentName);
|
|
263
|
+
if (!entry)
|
|
264
|
+
return;
|
|
265
|
+
perAgentSignaling.delete(agentName);
|
|
266
|
+
await entry.signaling.stop();
|
|
267
|
+
logger.info("agent.signaling.dropped", { agentName });
|
|
268
|
+
}
|
|
269
|
+
// CONN-001: wire a manager's session/seal/offer handlers for `agent`. Used ONLY for the
|
|
270
|
+
// in-process test path's shared manager — production wires these PER-AGENT in getAgentSignaling.
|
|
271
|
+
function wireSharedHandlers(agent, mgr) {
|
|
272
|
+
wireSessionCeremonyHandler({
|
|
273
|
+
agentName: agent.name,
|
|
274
|
+
persistence: getPersistence(agent.name),
|
|
275
|
+
agentPubkeyHex: agent.pubkey,
|
|
276
|
+
// DOD-M15-SEALWIRE-1 bullet 2 (review F1): gate the co-signature on the root check.
|
|
277
|
+
verifyCertifiedRoot: (pub, sid, root, leaves, evidence) => sessionNodeManager.verifyCertifiedRoot(pub, sid, root, leaves, evidence),
|
|
278
|
+
keyProvider: agent.keyProvider,
|
|
279
|
+
getNode: noSharedDirectoryNode,
|
|
280
|
+
getDirectoryEndpoint: getFailoverEndpoint,
|
|
281
|
+
getConsortiumEndpoints: resolveConsortiumRoster,
|
|
282
|
+
signaling: mgr,
|
|
283
|
+
logger,
|
|
284
|
+
// DOD-M15-SEALPARTIES-1: where a dead seal ceremony leaves its mark, so `cello_sealed_receipt`
|
|
285
|
+
// can say it FAILED and why instead of falling through to "no receipt yet".
|
|
286
|
+
recordSealFailure: (name, sid, reason, kind) => sealFailures.record(name, sid, reason, new Date().toISOString(), kind),
|
|
287
|
+
});
|
|
288
|
+
wireSealCeremonyHandler({
|
|
289
|
+
agentName: agent.name,
|
|
290
|
+
persistence: getPersistence(agent.name),
|
|
291
|
+
agentPubkeyHex: agent.pubkey,
|
|
292
|
+
// DOD-M15-SEALWIRE-1 bullet 2 (review F1): gate the co-signature on the root check.
|
|
293
|
+
verifyCertifiedRoot: (pub, sid, root, leaves, evidence) => sessionNodeManager.verifyCertifiedRoot(pub, sid, root, leaves, evidence),
|
|
294
|
+
keyProvider: agent.keyProvider,
|
|
295
|
+
getNode: noSharedDirectoryNode,
|
|
296
|
+
getDirectoryEndpoint: getFailoverEndpoint,
|
|
297
|
+
getConsortiumEndpoints: resolveConsortiumRoster,
|
|
298
|
+
signaling: mgr,
|
|
299
|
+
logger,
|
|
300
|
+
// DOD-M15-SEALPARTIES-1: where a dead seal ceremony leaves its mark, so `cello_sealed_receipt`
|
|
301
|
+
// can say it FAILED and why instead of falling through to "no receipt yet".
|
|
302
|
+
recordSealFailure: (name, sid, reason, kind) => sealFailures.record(name, sid, reason, new Date().toISOString(), kind),
|
|
303
|
+
});
|
|
304
|
+
wireSessionOfferHandler({
|
|
305
|
+
agentName: agent.name,
|
|
306
|
+
getStandingReceiverEndpoint: () => sessionNodeManager.getStandingReceiverInfo(agent.name),
|
|
307
|
+
admitOfferedDialer: (peerId, sessionIdHex) => sessionNodeManager.admitOfferedDialer(agent.name, peerId, sessionIdHex),
|
|
308
|
+
reserveOnDemand: (c, sid) => sessionNodeManager.takeReservationForSession(agent.name, c, sid, sid), isChannelAgent: () => channelAgentLookup(sessionNodeManager, logger)(agent.name), // 055-ONDEMAND + M16: both sites
|
|
309
|
+
isRelayOnly: () => relayOnlyState((key) => sessionNodeManager.getSetting(agent.name, key), sessionNodeManager.hasDatabase()) !== "off",
|
|
310
|
+
signaling: mgr,
|
|
311
|
+
logger,
|
|
312
|
+
});
|
|
313
|
+
registerSealListeners(mgr, agent.name, agent.pubkey);
|
|
314
|
+
}
|
|
315
|
+
// CONN-001: the directory signaling manager that OWNS operations for `agentName`. In production
|
|
316
|
+
// that is the agent's OWN per-agent manager (authenticated as itself); on the in-process test
|
|
317
|
+
// path it is the single shared manager (agentName ignored). Returns undefined only when the agent
|
|
318
|
+
// is not loaded in production (e.g. removed mid-flow) — callers treat that as a send failure.
|
|
319
|
+
function signalingFor(agentName) {
|
|
320
|
+
if (sharedSignaling)
|
|
321
|
+
return sharedSignaling;
|
|
322
|
+
const kp = keyProviders.get(agentName);
|
|
323
|
+
const agent = loadedAgents.find((a) => a.name === agentName);
|
|
324
|
+
if (!kp || !agent)
|
|
325
|
+
return undefined;
|
|
326
|
+
return getAgentSignaling(agentName, kp, agent.pubkey).signaling;
|
|
327
|
+
}
|
|
328
|
+
// CONN-001: send a frame over the OWNING agent's directory manager (per-agent in production, the
|
|
329
|
+
// shared manager in tests). If the agent has no manager (e.g. removed mid-flow), return a send
|
|
330
|
+
// failure rather than throw — callers already branch on `!result.ok`.
|
|
331
|
+
async function sendOver(agentName, frame) {
|
|
332
|
+
const mgr = signalingFor(agentName);
|
|
333
|
+
if (!mgr)
|
|
334
|
+
return { ok: false, reason: "directory_unreachable" };
|
|
335
|
+
return mgr.sendRaw(frame);
|
|
336
|
+
}
|
|
337
|
+
// CONN-001: aggregate directory signaling status for `cello status`. Test path → the shared
|
|
338
|
+
// manager's status. Production → connected if ANY online agent's connection is connected; else
|
|
339
|
+
// reconnecting if any per-agent connection exists; else disconnected (no agents online → no
|
|
340
|
+
// connections, which is correct — there is no shared connection to be "reconnecting").
|
|
341
|
+
function directorySignalingStatus() {
|
|
342
|
+
if (sharedSignaling)
|
|
343
|
+
return sharedSignaling.status;
|
|
344
|
+
const managers = [...perAgentSignaling.values()];
|
|
345
|
+
// CONN-001 (fallback-finder MED): a single daemon-level field cannot fully represent N independent
|
|
346
|
+
// per-agent connections, but it must NOT show "connected" while any agent is severed (that would
|
|
347
|
+
// mask a partial directory outage — the severed agent silently never receives inbound). So report
|
|
348
|
+
// "connected" ONLY when every per-agent manager is connected; otherwise "reconnecting" (degraded or
|
|
349
|
+
// none). No managers (no agent online) → "reconnecting", matching pre-CONN-001 fresh-install
|
|
350
|
+
// behavior. (Per-agent connection state is the future faithful surface.)
|
|
351
|
+
if (managers.length === 0)
|
|
352
|
+
return "reconnecting";
|
|
353
|
+
return managers.every((m) => m.signaling.status === "connected") ? "connected" : "reconnecting";
|
|
354
|
+
}
|
|
355
|
+
// CONN-001: stop every directory signaling connection on shutdown — the shared test manager AND
|
|
356
|
+
// every per-agent manager — so no reconnect loop is orphaned past shutdown.
|
|
357
|
+
async function stopAllSignaling() {
|
|
358
|
+
if (sharedSignaling) {
|
|
359
|
+
try {
|
|
360
|
+
await sharedSignaling.stop();
|
|
361
|
+
}
|
|
362
|
+
catch { /* best-effort */ }
|
|
363
|
+
}
|
|
364
|
+
for (const entry of perAgentSignaling.values()) {
|
|
365
|
+
try {
|
|
366
|
+
await entry.signaling.stop();
|
|
367
|
+
}
|
|
368
|
+
catch { /* best-effort */ }
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
// CONN-001: test path only — wire the shared manager's session/seal handlers for the first loaded
|
|
372
|
+
// agent. Production wires them per-agent (getAgentSignaling). There is NO keystone identity to
|
|
373
|
+
// elect and no re-election machinery: the shared test manager is never removed, and in production
|
|
374
|
+
// a fresh create-agent brings up that agent's OWN connection (no shared door to elect into).
|
|
375
|
+
if (sharedSignaling && loadedAgents.length > 0) {
|
|
376
|
+
const first = [...loadedAgents].sort((a, b) => a.name.localeCompare(b.name))[0];
|
|
377
|
+
wireSharedHandlers(first, sharedSignaling);
|
|
378
|
+
}
|
|
379
|
+
return {
|
|
380
|
+
perAgentSignaling,
|
|
381
|
+
getAgentSignaling,
|
|
382
|
+
waitForSignalingConnected,
|
|
383
|
+
dropAgentSignaling,
|
|
384
|
+
signalingFor,
|
|
385
|
+
sendOver,
|
|
386
|
+
directorySignalingStatus,
|
|
387
|
+
stopAllSignaling,
|
|
388
|
+
// 043-SIGNALDELIVERY C: handed out so the VISITING connection registers the identical listener.
|
|
389
|
+
// It had none, so a visited node's pickups were pushed and dropped on every visit.
|
|
390
|
+
registerPickupListener,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=signaling-wiring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signaling-wiring.js","sourceRoot":"","sources":["../src/signaling-wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-SINGLE-DAEMON-1 — the daemon singleton, enforced by the kernel.
|
|
3
|
+
*
|
|
4
|
+
* `daemon.lock` is a JSON file, and a file cannot answer "is a daemon running?". Anyone may delete
|
|
5
|
+
* it; a `kill -9` leaves it behind naming a pid that is dead — or, worse, one the OS has since REUSED
|
|
6
|
+
* for an unrelated process, which makes `isProcessAlive()` say "yes" forever. Every stale-lock
|
|
7
|
+
* heuristic ever written is an attempt to guess what only the kernel actually knows.
|
|
8
|
+
*
|
|
9
|
+
* So we ask the kernel. The daemon takes a real POSIX write lock (`fcntl`) on a dedicated file and
|
|
10
|
+
* holds it for its entire lifetime. Two processes cannot hold it at once, and the kernel drops it the
|
|
11
|
+
* instant the holder dies — SIGKILL, panic, `kill -9`, however it goes. There is no stale state to
|
|
12
|
+
* clean up and no recovery step to get wrong.
|
|
13
|
+
*
|
|
14
|
+
* ## Why SQLite is the lock
|
|
15
|
+
*
|
|
16
|
+
* Node has no `flock`. `fs.constants.O_EXLOCK` exists only on macOS/BSD — using it would leave every
|
|
17
|
+
* Linux operator (including the EC2 demo agent) with NO lock at all, which is worse than none because
|
|
18
|
+
* it looks like one. A native `flock` addon (`fs-ext`) compiles from source, and install time is a
|
|
19
|
+
* cost every operator pays on every version bump (see CLAUDE.md — the client is a heavy local node,
|
|
20
|
+
* not a thin wrapper).
|
|
21
|
+
*
|
|
22
|
+
* `@signalapp/sqlcipher` is already a daemon dependency, ships prebuilt (no compile), and SQLite's
|
|
23
|
+
* whole business is taking correct `fcntl` locks on every POSIX platform. `locking_mode = exclusive`
|
|
24
|
+
* plus one header write acquires the exclusive lock and holds it until the connection closes. A
|
|
25
|
+
* second process gets SQLITE_BUSY immediately (`busy_timeout = 0`). SQLite also tracks locks per
|
|
26
|
+
* inode inside the process, so this correctly refuses a second daemon in the SAME process too —
|
|
27
|
+
* which raw `fcntl`, whose locks are per-process, would not.
|
|
28
|
+
*
|
|
29
|
+
* The lock database holds no rows and never will. It is a mutex that happens to be spelled in SQL.
|
|
30
|
+
*
|
|
31
|
+
* ## The division of labour with daemon.lock (AC4)
|
|
32
|
+
*
|
|
33
|
+
* The OS lock DECIDES whether a daemon may start. `daemon.lock` only SUPPLIES METADATA — it is how we
|
|
34
|
+
* learn the holder's pid to name in the error, because `fcntl` will not tell us. If the JSON is
|
|
35
|
+
* missing, stale, or lying, the worst outcome is a less specific error message. It can never admit a
|
|
36
|
+
* second daemon, and it can never wedge a legitimate one out.
|
|
37
|
+
*
|
|
38
|
+
* ## The one constraint
|
|
39
|
+
*
|
|
40
|
+
* `~/.cello` must live on a LOCAL filesystem. POSIX `fcntl` locks are advisory-but-honoured on local
|
|
41
|
+
* filesystems (APFS, ext4, xfs — macOS and the Linux hosts we run on); on NFSv3 without a working
|
|
42
|
+
* `lockd`, and on some 9p/WSL2 setups, they can silently degrade to no-ops. There, two daemons would
|
|
43
|
+
* both "acquire" and the singleton would be absent while appearing present. We do not attempt to
|
|
44
|
+
* detect this — a real self-test needs a second process, which is far too much to do at every startup.
|
|
45
|
+
* The lock path is logged in `daemon.singleton.acquired` so an operator debugging a two-daemon
|
|
46
|
+
* situation can see exactly which file the kernel was asked about.
|
|
47
|
+
*/
|
|
48
|
+
import type { Logger } from "./types.js";
|
|
49
|
+
/** The file the kernel lock is taken on. Holds no data — see the note above. */
|
|
50
|
+
export declare const SINGLETON_LOCK_FILENAME = "daemon.singleton";
|
|
51
|
+
export declare class DaemonAlreadyRunningError extends Error {
|
|
52
|
+
/** The pid from `daemon.lock`, or null when that file is absent/unreadable/malformed. */
|
|
53
|
+
readonly holderPid: number | null;
|
|
54
|
+
constructor(holderPid: number | null);
|
|
55
|
+
}
|
|
56
|
+
export interface SingletonLock {
|
|
57
|
+
/** Release the lock. The kernel would do this on process exit anyway; this is for in-process use. */
|
|
58
|
+
release(): void;
|
|
59
|
+
}
|
|
60
|
+
/** The daemon binary's exit code when it loses the singleton race — distinct from 1 = "broken". */
|
|
61
|
+
export declare const EXIT_ALREADY_RUNNING = 3;
|
|
62
|
+
export declare function acquireSingletonLock(celloDir: string, logger: Logger, busyTimeoutMs?: number): SingletonLock;
|
|
63
|
+
/**
|
|
64
|
+
* Is a daemon holding the lock for `celloDir` right now?
|
|
65
|
+
*
|
|
66
|
+
* "held" — a daemon is alive. Connect to it; never spawn beside it.
|
|
67
|
+
* "free" — no daemon is running, whatever `daemon.lock` claims. Spawning is correct.
|
|
68
|
+
* "unknown" — we could not ask the kernel (native module missing, directory unreadable).
|
|
69
|
+
*
|
|
70
|
+
* The third answer is the point. "I could not determine whether a daemon is running" and "no daemon is
|
|
71
|
+
* running" are different facts, and collapsing them into one boolean means the caller spawns on both —
|
|
72
|
+
* so the one case where we are blind becomes the one case we start a second daemon. Callers must
|
|
73
|
+
* refuse to spawn on "unknown" and surface the underlying error instead.
|
|
74
|
+
*
|
|
75
|
+
* Asking the kernel rather than trusting `daemon.lock` is also what makes a REUSED pid harmless: a
|
|
76
|
+
* stale lock file naming a live-but-unrelated process would otherwise wedge `cello login` forever.
|
|
77
|
+
*
|
|
78
|
+
* The probe takes the lock and immediately drops it. The gap between the probe and a subsequent spawn
|
|
79
|
+
* is safe: the daemon we spawn acquires the lock authoritatively and exits EXIT_ALREADY_RUNNING if it
|
|
80
|
+
* loses that race — and the caller reads that exit code as "someone else won, connect to them", never
|
|
81
|
+
* as a failure. Two probes can therefore both say "free" and both spawn, and exactly one daemon
|
|
82
|
+
* survives.
|
|
83
|
+
*/
|
|
84
|
+
export declare function probeSingletonLock(celloDir: string, logger: Logger): "held" | "free" | "unknown";
|
|
85
|
+
//# sourceMappingURL=singleton-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleton-lock.d.ts","sourceRoot":"","sources":["../src/singleton-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEtB,SAAS,EAAE,MAAM,GAAG,IAAI;CASrC;AAED,MAAM,WAAW,aAAa;IAC5B,qGAAqG;IACrG,OAAO,IAAI,IAAI,CAAC;CACjB;AA0DD,mGAAmG;AACnG,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAgBtC,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,MAAuC,GACrD,aAAa,CAyCf;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAqBhG"}
|