@cello-protocol/daemon 0.0.227 → 0.0.228
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-admin-handlers.d.ts +56 -0
- package/dist/agent-admin-handlers.d.ts.map +1 -0
- package/dist/agent-admin-handlers.js +73 -0
- package/dist/agent-admin-handlers.js.map +1 -0
- package/dist/agent-handlers.d.ts +72 -0
- package/dist/agent-handlers.d.ts.map +1 -0
- package/dist/agent-handlers.js +604 -0
- package/dist/agent-handlers.js.map +1 -0
- package/dist/agent-id-migration.d.ts +70 -0
- package/dist/agent-id-migration.d.ts.map +1 -0
- package/dist/agent-id-migration.js +468 -0
- package/dist/agent-id-migration.js.map +1 -0
- package/dist/agent-loader.d.ts +37 -0
- package/dist/agent-loader.d.ts.map +1 -0
- package/dist/agent-loader.js +37 -0
- package/dist/agent-loader.js.map +1 -0
- package/dist/agent-selection-root.d.ts +29 -0
- package/dist/agent-selection-root.d.ts.map +1 -0
- package/dist/agent-selection-root.js +126 -0
- package/dist/agent-selection-root.js.map +1 -0
- package/dist/agent-selection.d.ts +73 -0
- package/dist/agent-selection.d.ts.map +1 -0
- package/dist/agent-selection.js +80 -0
- package/dist/agent-selection.js.map +1 -0
- package/dist/agent-settings-keys.d.ts +52 -0
- package/dist/agent-settings-keys.d.ts.map +1 -0
- package/dist/agent-settings-keys.js +114 -0
- package/dist/agent-settings-keys.js.map +1 -0
- package/dist/agent-state.d.ts +67 -0
- package/dist/agent-state.d.ts.map +1 -0
- package/dist/agent-state.js +66 -0
- package/dist/agent-state.js.map +1 -0
- package/dist/assignment-verify.d.ts +90 -0
- package/dist/assignment-verify.d.ts.map +1 -0
- package/dist/assignment-verify.js +301 -0
- package/dist/assignment-verify.js.map +1 -0
- package/dist/attendance-wiring.d.ts +23 -0
- package/dist/attendance-wiring.d.ts.map +1 -0
- package/dist/attendance-wiring.js +248 -0
- package/dist/attendance-wiring.js.map +1 -0
- package/dist/attestation-body.d.ts +47 -0
- package/dist/attestation-body.d.ts.map +1 -0
- package/dist/attestation-body.js +71 -0
- package/dist/attestation-body.js.map +1 -0
- package/dist/authorship-verification.d.ts +91 -0
- package/dist/authorship-verification.d.ts.map +1 -0
- package/dist/authorship-verification.js +532 -0
- package/dist/authorship-verification.js.map +1 -0
- package/dist/away-detection.d.ts +139 -0
- package/dist/away-detection.d.ts.map +1 -0
- package/dist/away-detection.js +186 -0
- package/dist/away-detection.js.map +1 -0
- package/dist/away-inbox-oneshot.d.ts +40 -0
- package/dist/away-inbox-oneshot.d.ts.map +1 -0
- package/dist/away-inbox-oneshot.js +311 -0
- package/dist/away-inbox-oneshot.js.map +1 -0
- package/dist/backup-restore-handlers.d.ts +10 -0
- package/dist/backup-restore-handlers.d.ts.map +1 -0
- package/dist/backup-restore-handlers.js +82 -0
- package/dist/backup-restore-handlers.js.map +1 -0
- package/dist/backup-restore.d.ts +102 -0
- package/dist/backup-restore.d.ts.map +1 -0
- package/dist/backup-restore.js +341 -0
- package/dist/backup-restore.js.map +1 -0
- package/dist/bin/cello-daemon.d.ts +13 -0
- package/dist/bin/cello-daemon.d.ts.map +1 -0
- package/dist/bin/cello-daemon.js.map +1 -0
- package/dist/boot-agents.d.ts +64 -0
- package/dist/boot-agents.d.ts.map +1 -0
- package/dist/boot-agents.js +241 -0
- package/dist/boot-agents.js.map +1 -0
- package/dist/boot-connection-state.d.ts +38 -0
- package/dist/boot-connection-state.d.ts.map +1 -0
- package/dist/boot-connection-state.js +95 -0
- package/dist/boot-connection-state.js.map +1 -0
- package/dist/boot-core.d.ts +36 -0
- package/dist/boot-core.d.ts.map +1 -0
- package/dist/boot-core.js +293 -0
- package/dist/boot-core.js.map +1 -0
- package/dist/boot-parked-content.d.ts +34 -0
- package/dist/boot-parked-content.d.ts.map +1 -0
- package/dist/boot-parked-content.js +528 -0
- package/dist/boot-parked-content.js.map +1 -0
- package/dist/boot-sweeps.d.ts +22 -0
- package/dist/boot-sweeps.d.ts.map +1 -0
- package/dist/boot-sweeps.js +51 -0
- package/dist/boot-sweeps.js.map +1 -0
- package/dist/bundled-consortium-manifest.d.ts +47 -0
- package/dist/bundled-consortium-manifest.d.ts.map +1 -0
- package/dist/bundled-consortium-manifest.js +116 -0
- package/dist/bundled-consortium-manifest.js.map +1 -0
- package/dist/cbor-blob-migration.d.ts +8 -0
- package/dist/cbor-blob-migration.d.ts.map +1 -0
- package/dist/cbor-blob-migration.js +116 -0
- package/dist/cbor-blob-migration.js.map +1 -0
- package/dist/challenge-verifier.d.ts +12 -0
- package/dist/challenge-verifier.d.ts.map +1 -0
- package/dist/challenge-verifier.js +11 -0
- package/dist/challenge-verifier.js.map +1 -0
- package/dist/channel-log-store.d.ts +80 -0
- package/dist/channel-log-store.d.ts.map +1 -0
- package/dist/channel-log-store.js +290 -0
- package/dist/channel-log-store.js.map +1 -0
- package/dist/close-commitment.d.ts +67 -0
- package/dist/close-commitment.d.ts.map +1 -0
- package/dist/close-commitment.js +78 -0
- package/dist/close-commitment.js.map +1 -0
- package/dist/close-session-handler.d.ts +94 -0
- package/dist/close-session-handler.d.ts.map +1 -0
- package/dist/close-session-handler.js +1418 -0
- package/dist/close-session-handler.js.map +1 -0
- package/dist/co-attendance.d.ts +29 -0
- package/dist/co-attendance.d.ts.map +1 -0
- package/dist/co-attendance.js +32 -0
- package/dist/co-attendance.js.map +1 -0
- package/dist/column-birth.d.ts +40 -0
- package/dist/column-birth.d.ts.map +1 -0
- package/dist/column-birth.js +61 -0
- package/dist/column-birth.js.map +1 -0
- package/dist/connect-or-start.d.ts +25 -0
- package/dist/connect-or-start.d.ts.map +1 -0
- package/dist/connect-or-start.js +175 -0
- package/dist/connect-or-start.js.map +1 -0
- package/dist/connection-agents.d.ts +16 -0
- package/dist/connection-agents.d.ts.map +1 -0
- package/dist/connection-agents.js +68 -0
- package/dist/connection-agents.js.map +1 -0
- package/dist/consent-migration.d.ts +49 -0
- package/dist/consent-migration.d.ts.map +1 -0
- package/dist/consent-migration.js +128 -0
- package/dist/consent-migration.js.map +1 -0
- package/dist/consortium-bootstrap.d.ts +138 -0
- package/dist/consortium-bootstrap.d.ts.map +1 -0
- package/dist/consortium-bootstrap.js +339 -0
- package/dist/consortium-bootstrap.js.map +1 -0
- package/dist/consortium-fingerprint.d.ts +115 -0
- package/dist/consortium-fingerprint.d.ts.map +1 -0
- package/dist/consortium-fingerprint.js +175 -0
- package/dist/consortium-fingerprint.js.map +1 -0
- package/dist/contact-handlers.d.ts +59 -0
- package/dist/contact-handlers.d.ts.map +1 -0
- package/dist/contact-handlers.js +343 -0
- package/dist/contact-handlers.js.map +1 -0
- package/dist/contact-pubkey-case.d.ts +65 -0
- package/dist/contact-pubkey-case.d.ts.map +1 -0
- package/dist/contact-pubkey-case.js +136 -0
- package/dist/contact-pubkey-case.js.map +1 -0
- package/dist/contacts-tier-migration.d.ts +90 -0
- package/dist/contacts-tier-migration.d.ts.map +1 -0
- package/dist/contacts-tier-migration.js +150 -0
- package/dist/contacts-tier-migration.js.map +1 -0
- package/dist/content-encryption-status.d.ts +111 -0
- package/dist/content-encryption-status.d.ts.map +1 -0
- package/dist/content-encryption-status.js +158 -0
- package/dist/content-encryption-status.js.map +1 -0
- package/dist/content-park-client.d.ts +90 -0
- package/dist/content-park-client.d.ts.map +1 -0
- package/dist/content-park-client.js +362 -0
- package/dist/content-park-client.js.map +1 -0
- package/dist/content-park.d.ts +52 -0
- package/dist/content-park.d.ts.map +1 -0
- package/dist/content-park.js +1309 -0
- package/dist/content-park.js.map +1 -0
- package/dist/cross-node-negotiation.d.ts +44 -0
- package/dist/cross-node-negotiation.d.ts.map +1 -0
- package/dist/cross-node-negotiation.js +34 -0
- package/dist/cross-node-negotiation.js.map +1 -0
- package/dist/daemon-handle.d.ts +57 -0
- package/dist/daemon-handle.d.ts.map +1 -0
- package/dist/daemon-handle.js +2 -0
- package/dist/daemon-handle.js.map +1 -0
- package/dist/daemon-status-report.d.ts +50 -0
- package/dist/daemon-status-report.d.ts.map +1 -0
- package/dist/daemon-status-report.js +81 -0
- package/dist/daemon-status-report.js.map +1 -0
- package/dist/daemon.d.ts +45 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +1177 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db-identity-store.d.ts +159 -0
- package/dist/db-identity-store.d.ts.map +1 -0
- package/dist/db-identity-store.js +502 -0
- package/dist/db-identity-store.js.map +1 -0
- package/dist/delivery-open-registry.d.ts +92 -0
- package/dist/delivery-open-registry.d.ts.map +1 -0
- package/dist/delivery-open-registry.js +121 -0
- package/dist/delivery-open-registry.js.map +1 -0
- package/dist/delivery-session-suspects.d.ts +56 -0
- package/dist/delivery-session-suspects.d.ts.map +1 -0
- package/dist/delivery-session-suspects.js +94 -0
- package/dist/delivery-session-suspects.js.map +1 -0
- package/dist/directory-auth-posture.d.ts +87 -0
- package/dist/directory-auth-posture.d.ts.map +1 -0
- package/dist/directory-auth-posture.js +134 -0
- package/dist/directory-auth-posture.js.map +1 -0
- package/dist/directory-bootstrap.d.ts +310 -0
- package/dist/directory-bootstrap.d.ts.map +1 -0
- package/dist/directory-bootstrap.js +557 -0
- package/dist/directory-bootstrap.js.map +1 -0
- package/dist/directory-connect.d.ts +27 -0
- package/dist/directory-connect.d.ts.map +1 -0
- package/dist/directory-connect.js +106 -0
- package/dist/directory-connect.js.map +1 -0
- package/dist/disconnect-cleanup.d.ts +51 -0
- package/dist/disconnect-cleanup.d.ts.map +1 -0
- package/dist/disconnect-cleanup.js +72 -0
- package/dist/disconnect-cleanup.js.map +1 -0
- package/dist/document-amendment-store.d.ts +120 -0
- package/dist/document-amendment-store.d.ts.map +1 -0
- package/dist/document-amendment-store.js +266 -0
- package/dist/document-amendment-store.js.map +1 -0
- package/dist/document-delivery-transport.d.ts +168 -0
- package/dist/document-delivery-transport.d.ts.map +1 -0
- package/dist/document-delivery-transport.js +206 -0
- package/dist/document-delivery-transport.js.map +1 -0
- package/dist/document-engine.d.ts +134 -0
- package/dist/document-engine.d.ts.map +1 -0
- package/dist/document-engine.js +282 -0
- package/dist/document-engine.js.map +1 -0
- package/dist/document-flag.d.ts +58 -0
- package/dist/document-flag.d.ts.map +1 -0
- package/dist/document-flag.js +70 -0
- package/dist/document-flag.js.map +1 -0
- package/dist/document-frame-router.d.ts +245 -0
- package/dist/document-frame-router.d.ts.map +1 -0
- package/dist/document-frame-router.js +397 -0
- package/dist/document-frame-router.js.map +1 -0
- package/dist/document-gate-wiring.d.ts +61 -0
- package/dist/document-gate-wiring.d.ts.map +1 -0
- package/dist/document-gate-wiring.js +125 -0
- package/dist/document-gate-wiring.js.map +1 -0
- package/dist/document-gate.d.ts +149 -0
- package/dist/document-gate.d.ts.map +1 -0
- package/dist/document-gate.js +509 -0
- package/dist/document-gate.js.map +1 -0
- package/dist/document-handlers.d.ts +47 -0
- package/dist/document-handlers.d.ts.map +1 -0
- package/dist/document-handlers.js +2203 -0
- package/dist/document-handlers.js.map +1 -0
- package/dist/document-handshake.d.ts +176 -0
- package/dist/document-handshake.d.ts.map +1 -0
- package/dist/document-handshake.js +452 -0
- package/dist/document-handshake.js.map +1 -0
- package/dist/document-inbound.d.ts +162 -0
- package/dist/document-inbound.d.ts.map +1 -0
- package/dist/document-inbound.js +530 -0
- package/dist/document-inbound.js.map +1 -0
- package/dist/document-json.d.ts +120 -0
- package/dist/document-json.d.ts.map +1 -0
- package/dist/document-json.js +191 -0
- package/dist/document-json.js.map +1 -0
- package/dist/document-layer.d.ts +215 -0
- package/dist/document-layer.d.ts.map +1 -0
- package/dist/document-layer.js +1025 -0
- package/dist/document-layer.js.map +1 -0
- package/dist/document-lifecycle.d.ts +52 -0
- package/dist/document-lifecycle.d.ts.map +1 -0
- package/dist/document-lifecycle.js +134 -0
- package/dist/document-lifecycle.js.map +1 -0
- package/dist/document-live-docs.d.ts +58 -0
- package/dist/document-live-docs.d.ts.map +1 -0
- package/dist/document-live-docs.js +126 -0
- package/dist/document-live-docs.js.map +1 -0
- package/dist/document-notify.d.ts +228 -0
- package/dist/document-notify.d.ts.map +1 -0
- package/dist/document-notify.js +580 -0
- package/dist/document-notify.js.map +1 -0
- package/dist/document-profile.d.ts +61 -0
- package/dist/document-profile.d.ts.map +1 -0
- package/dist/document-profile.js +112 -0
- package/dist/document-profile.js.map +1 -0
- package/dist/document-publish.d.ts +87 -0
- package/dist/document-publish.d.ts.map +1 -0
- package/dist/document-publish.js +173 -0
- package/dist/document-publish.js.map +1 -0
- package/dist/document-reachability.d.ts +42 -0
- package/dist/document-reachability.d.ts.map +1 -0
- package/dist/document-reachability.js +80 -0
- package/dist/document-reachability.js.map +1 -0
- package/dist/document-reconcile-engine.d.ts +66 -0
- package/dist/document-reconcile-engine.d.ts.map +1 -0
- package/dist/document-reconcile-engine.js +225 -0
- package/dist/document-reconcile-engine.js.map +1 -0
- package/dist/document-reconcile-scheduler.d.ts +163 -0
- package/dist/document-reconcile-scheduler.d.ts.map +1 -0
- package/dist/document-reconcile-scheduler.js +303 -0
- package/dist/document-reconcile-scheduler.js.map +1 -0
- package/dist/document-rejection.d.ts +251 -0
- package/dist/document-rejection.d.ts.map +1 -0
- package/dist/document-rejection.js +435 -0
- package/dist/document-rejection.js.map +1 -0
- package/dist/document-screen.d.ts +114 -0
- package/dist/document-screen.d.ts.map +1 -0
- package/dist/document-screen.js +223 -0
- package/dist/document-screen.js.map +1 -0
- package/dist/document-store.d.ts +372 -0
- package/dist/document-store.d.ts.map +1 -0
- package/dist/document-store.js +931 -0
- package/dist/document-store.js.map +1 -0
- package/dist/document-surface.d.ts +32 -0
- package/dist/document-surface.d.ts.map +1 -0
- package/dist/document-surface.js +151 -0
- package/dist/document-surface.js.map +1 -0
- package/dist/document-types.d.ts +94 -0
- package/dist/document-types.d.ts.map +1 -0
- package/dist/document-types.js +90 -0
- package/dist/document-types.js.map +1 -0
- package/dist/document-watch.d.ts +69 -0
- package/dist/document-watch.d.ts.map +1 -0
- package/dist/document-watch.js +108 -0
- package/dist/document-watch.js.map +1 -0
- package/dist/document-wiring.d.ts +53 -0
- package/dist/document-wiring.d.ts.map +1 -0
- package/dist/document-wiring.js +323 -0
- package/dist/document-wiring.js.map +1 -0
- package/dist/document-write-guard.d.ts +66 -0
- package/dist/document-write-guard.d.ts.map +1 -0
- package/dist/document-write-guard.js +98 -0
- package/dist/document-write-guard.js.map +1 -0
- package/dist/document-write-path.d.ts +94 -0
- package/dist/document-write-path.d.ts.map +1 -0
- package/dist/document-write-path.js +530 -0
- package/dist/document-write-path.js.map +1 -0
- package/dist/error-message.d.ts +7 -0
- package/dist/error-message.d.ts.map +1 -0
- package/dist/error-message.js +19 -0
- package/dist/error-message.js.map +1 -0
- package/dist/file-manifest-provider.d.ts +37 -0
- package/dist/file-manifest-provider.d.ts.map +1 -0
- package/dist/file-manifest-provider.js +105 -0
- package/dist/file-manifest-provider.js.map +1 -0
- package/dist/frame-values.d.ts +3 -0
- package/dist/frame-values.d.ts.map +1 -0
- package/dist/frame-values.js +84 -0
- package/dist/frame-values.js.map +1 -0
- package/dist/frontier-mismatch.d.ts +73 -0
- package/dist/frontier-mismatch.d.ts.map +1 -0
- package/dist/frontier-mismatch.js +89 -0
- package/dist/frontier-mismatch.js.map +1 -0
- package/dist/gateway-config-handlers.d.ts +26 -0
- package/dist/gateway-config-handlers.d.ts.map +1 -0
- package/dist/gateway-config-handlers.js +429 -0
- package/dist/gateway-config-handlers.js.map +1 -0
- package/dist/held-content.d.ts +145 -0
- package/dist/held-content.d.ts.map +1 -0
- package/dist/held-content.js +389 -0
- package/dist/held-content.js.map +1 -0
- package/dist/http-manifest-poll.d.ts +67 -0
- package/dist/http-manifest-poll.d.ts.map +1 -0
- package/dist/http-manifest-poll.js +150 -0
- package/dist/http-manifest-poll.js.map +1 -0
- package/dist/identity-migration.d.ts +40 -0
- package/dist/identity-migration.d.ts.map +1 -0
- package/dist/identity-migration.js +461 -0
- package/dist/identity-migration.js.map +1 -0
- package/dist/inbound-refusals.d.ts +283 -0
- package/dist/inbound-refusals.d.ts.map +1 -0
- package/dist/inbound-refusals.js +919 -0
- package/dist/inbound-refusals.js.map +1 -0
- package/dist/inbound-seal-request.d.ts +32 -0
- package/dist/inbound-seal-request.d.ts.map +1 -0
- package/dist/inbound-seal-request.js +228 -0
- package/dist/inbound-seal-request.js.map +1 -0
- package/dist/inbound-sessions.d.ts +291 -0
- package/dist/inbound-sessions.d.ts.map +1 -0
- package/dist/inbound-sessions.js +1609 -0
- package/dist/inbound-sessions.js.map +1 -0
- package/dist/inclusion-proof-handlers.d.ts +43 -0
- package/dist/inclusion-proof-handlers.d.ts.map +1 -0
- package/dist/inclusion-proof-handlers.js +565 -0
- package/dist/inclusion-proof-handlers.js.map +1 -0
- package/dist/inclusion-proof.d.ts +151 -0
- package/dist/inclusion-proof.d.ts.map +1 -0
- package/dist/inclusion-proof.js +228 -0
- package/dist/inclusion-proof.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/initiate-session-handler.d.ts +55 -0
- package/dist/initiate-session-handler.d.ts.map +1 -0
- package/dist/initiate-session-handler.js +310 -0
- package/dist/initiate-session-handler.js.map +1 -0
- package/dist/ipc-client.d.ts +31 -0
- package/dist/ipc-client.d.ts.map +1 -0
- package/dist/ipc-client.js +113 -0
- package/dist/ipc-client.js.map +1 -0
- package/dist/ipc-server.d.ts +63 -0
- package/dist/ipc-server.d.ts.map +1 -0
- package/dist/ipc-server.js +429 -0
- package/dist/ipc-server.js.map +1 -0
- package/dist/ipc-surface.d.ts +44 -0
- package/dist/ipc-surface.d.ts.map +1 -0
- package/dist/ipc-surface.js +107 -0
- package/dist/ipc-surface.js.map +1 -0
- package/dist/line-lcs.d.ts +51 -0
- package/dist/line-lcs.d.ts.map +1 -0
- package/dist/line-lcs.js +71 -0
- package/dist/line-lcs.js.map +1 -0
- package/dist/lock-file.d.ts +39 -0
- package/dist/lock-file.d.ts.map +1 -0
- package/dist/lock-file.js +120 -0
- package/dist/lock-file.js.map +1 -0
- package/dist/log-collapse.d.ts +66 -0
- package/dist/log-collapse.d.ts.map +1 -0
- package/dist/log-collapse.js +244 -0
- package/dist/log-collapse.js.map +1 -0
- package/dist/log-rotate.d.ts +67 -0
- package/dist/log-rotate.d.ts.map +1 -0
- package/dist/log-rotate.js +134 -0
- package/dist/log-rotate.js.map +1 -0
- package/dist/manifest-deps.d.ts +25 -0
- package/dist/manifest-deps.d.ts.map +1 -0
- package/dist/manifest-deps.js +151 -0
- package/dist/manifest-deps.js.map +1 -0
- package/dist/manifest-poll-scheduler.d.ts +31 -0
- package/dist/manifest-poll-scheduler.d.ts.map +1 -0
- package/dist/manifest-poll-scheduler.js +59 -0
- package/dist/manifest-poll-scheduler.js.map +1 -0
- package/dist/manifest-validity.d.ts +153 -0
- package/dist/manifest-validity.d.ts.map +1 -0
- package/dist/manifest-validity.js +268 -0
- package/dist/manifest-validity.js.map +1 -0
- package/dist/manifest-version-store-db.d.ts +24 -0
- package/dist/manifest-version-store-db.d.ts.map +1 -0
- package/dist/manifest-version-store-db.js +58 -0
- package/dist/manifest-version-store-db.js.map +1 -0
- package/dist/manifest-version-store.d.ts +16 -0
- package/dist/manifest-version-store.d.ts.map +1 -0
- package/dist/manifest-version-store.js +15 -0
- package/dist/manifest-version-store.js.map +1 -0
- package/dist/network-directory-node.d.ts +136 -0
- package/dist/network-directory-node.d.ts.map +1 -0
- package/dist/network-directory-node.js +810 -0
- package/dist/network-directory-node.js.map +1 -0
- package/dist/nonce-dedup.d.ts +68 -0
- package/dist/nonce-dedup.d.ts.map +1 -0
- package/dist/nonce-dedup.js +205 -0
- package/dist/nonce-dedup.js.map +1 -0
- package/dist/notification-dispatcher.d.ts +92 -0
- package/dist/notification-dispatcher.d.ts.map +1 -0
- package/dist/notification-dispatcher.js +210 -0
- package/dist/notification-dispatcher.js.map +1 -0
- package/dist/notification-handlers.d.ts +53 -0
- package/dist/notification-handlers.d.ts.map +1 -0
- package/dist/notification-handlers.js +461 -0
- package/dist/notification-handlers.js.map +1 -0
- package/dist/onboarding-guidance.d.ts +79 -0
- package/dist/onboarding-guidance.d.ts.map +1 -0
- package/dist/onboarding-guidance.js +95 -0
- package/dist/onboarding-guidance.js.map +1 -0
- package/dist/operator-guidance.d.ts +25 -0
- package/dist/operator-guidance.d.ts.map +1 -0
- package/dist/operator-guidance.js +50 -0
- package/dist/operator-guidance.js.map +1 -0
- package/dist/orphan-triage.d.ts +130 -0
- package/dist/orphan-triage.d.ts.map +1 -0
- package/dist/orphan-triage.js +207 -0
- package/dist/orphan-triage.js.map +1 -0
- package/dist/outbound-sessions.d.ts +126 -0
- package/dist/outbound-sessions.d.ts.map +1 -0
- package/dist/outbound-sessions.js +1052 -0
- package/dist/outbound-sessions.js.map +1 -0
- package/dist/park-envelope.d.ts +329 -0
- package/dist/park-envelope.d.ts.map +1 -0
- package/dist/park-envelope.js +509 -0
- package/dist/park-envelope.js.map +1 -0
- package/dist/park-recovery.d.ts +273 -0
- package/dist/park-recovery.d.ts.map +1 -0
- package/dist/park-recovery.js +717 -0
- package/dist/park-recovery.js.map +1 -0
- package/dist/park-refusals.d.ts +147 -0
- package/dist/park-refusals.d.ts.map +1 -0
- package/dist/park-refusals.js +331 -0
- package/dist/park-refusals.js.map +1 -0
- package/dist/quarantine-framing.d.ts +92 -0
- package/dist/quarantine-framing.d.ts.map +1 -0
- package/dist/quarantine-framing.js +111 -0
- package/dist/quarantine-framing.js.map +1 -0
- package/dist/reconnect-drain.d.ts +22 -0
- package/dist/reconnect-drain.d.ts.map +1 -0
- package/dist/reconnect-drain.js +65 -0
- package/dist/reconnect-drain.js.map +1 -0
- package/dist/recovered-position.d.ts +14 -0
- package/dist/recovered-position.d.ts.map +1 -0
- package/dist/recovered-position.js +59 -0
- package/dist/recovered-position.js.map +1 -0
- package/dist/refusal-notices.d.ts +196 -0
- package/dist/refusal-notices.d.ts.map +1 -0
- package/dist/refusal-notices.js +516 -0
- package/dist/refusal-notices.js.map +1 -0
- package/dist/refusal-reasons.d.ts +245 -0
- package/dist/refusal-reasons.d.ts.map +1 -0
- package/dist/refusal-reasons.js +363 -0
- package/dist/refusal-reasons.js.map +1 -0
- package/dist/register-handler.d.ts +36 -0
- package/dist/register-handler.d.ts.map +1 -0
- package/dist/register-handler.js +285 -0
- package/dist/register-handler.js.map +1 -0
- package/dist/registration-context.d.ts +72 -0
- package/dist/registration-context.d.ts.map +1 -0
- package/dist/registration-context.js +126 -0
- package/dist/registration-context.js.map +1 -0
- package/dist/registration-manager.d.ts +94 -0
- package/dist/registration-manager.d.ts.map +1 -0
- package/dist/registration-manager.js +585 -0
- package/dist/registration-manager.js.map +1 -0
- package/dist/registration-persistence.d.ts +183 -0
- package/dist/registration-persistence.d.ts.map +1 -0
- package/dist/registration-persistence.js +263 -0
- package/dist/registration-persistence.js.map +1 -0
- package/dist/registry-poll.d.ts +52 -0
- package/dist/registry-poll.d.ts.map +1 -0
- package/dist/registry-poll.js +140 -0
- package/dist/registry-poll.js.map +1 -0
- package/dist/registry-version-store-db.d.ts +22 -0
- package/dist/registry-version-store-db.d.ts.map +1 -0
- package/dist/registry-version-store-db.js +50 -0
- package/dist/registry-version-store-db.js.map +1 -0
- package/dist/relay-endpoints.d.ts +18 -0
- package/dist/relay-endpoints.d.ts.map +1 -0
- package/dist/relay-endpoints.js +9 -0
- package/dist/relay-endpoints.js.map +1 -0
- package/dist/relay-only.d.ts +140 -0
- package/dist/relay-only.d.ts.map +1 -0
- package/dist/relay-only.js +193 -0
- package/dist/relay-only.js.map +1 -0
- package/dist/relay-receipt-store.d.ts +155 -0
- package/dist/relay-receipt-store.d.ts.map +1 -0
- package/dist/relay-receipt-store.js +284 -0
- package/dist/relay-receipt-store.js.map +1 -0
- package/dist/relay-reconnect.d.ts +32 -0
- package/dist/relay-reconnect.d.ts.map +1 -0
- package/dist/relay-reconnect.js +29 -0
- package/dist/relay-reconnect.js.map +1 -0
- package/dist/reply-lag.d.ts +11 -0
- package/dist/reply-lag.d.ts.map +1 -0
- package/dist/reply-lag.js +46 -0
- package/dist/reply-lag.js.map +1 -0
- package/dist/resolve-named-agent.d.ts +49 -0
- package/dist/resolve-named-agent.d.ts.map +1 -0
- package/dist/resolve-named-agent.js +77 -0
- package/dist/resolve-named-agent.js.map +1 -0
- package/dist/restart-seal-resolver.d.ts +110 -0
- package/dist/restart-seal-resolver.d.ts.map +1 -0
- package/dist/restart-seal-resolver.js +353 -0
- package/dist/restart-seal-resolver.js.map +1 -0
- package/dist/resume-last-seen.d.ts +15 -0
- package/dist/resume-last-seen.d.ts.map +1 -0
- package/dist/resume-last-seen.js +44 -0
- package/dist/resume-last-seen.js.map +1 -0
- package/dist/retry-queue.d.ts +203 -0
- package/dist/retry-queue.d.ts.map +1 -0
- package/dist/retry-queue.js +701 -0
- package/dist/retry-queue.js.map +1 -0
- package/dist/roster-freshness.d.ts +160 -0
- package/dist/roster-freshness.d.ts.map +1 -0
- package/dist/roster-freshness.js +250 -0
- package/dist/roster-freshness.js.map +1 -0
- package/dist/screening-status.d.ts +15 -0
- package/dist/screening-status.d.ts.map +1 -0
- package/dist/screening-status.js +65 -0
- package/dist/screening-status.js.map +1 -0
- package/dist/seal-carried-close.d.ts +37 -0
- package/dist/seal-carried-close.d.ts.map +1 -0
- package/dist/seal-carried-close.js +179 -0
- package/dist/seal-carried-close.js.map +1 -0
- package/dist/seal-certificate-pull.d.ts +79 -0
- package/dist/seal-certificate-pull.d.ts.map +1 -0
- package/dist/seal-certificate-pull.js +186 -0
- package/dist/seal-certificate-pull.js.map +1 -0
- package/dist/seal-certified-root-check.d.ts +37 -0
- package/dist/seal-certified-root-check.d.ts.map +1 -0
- package/dist/seal-certified-root-check.js +127 -0
- package/dist/seal-certified-root-check.js.map +1 -0
- package/dist/seal-coordinator.d.ts +118 -0
- package/dist/seal-coordinator.d.ts.map +1 -0
- package/dist/seal-coordinator.js +927 -0
- package/dist/seal-coordinator.js.map +1 -0
- package/dist/seal-escalation.d.ts +80 -0
- package/dist/seal-escalation.d.ts.map +1 -0
- package/dist/seal-escalation.js +283 -0
- package/dist/seal-escalation.js.map +1 -0
- package/dist/seal-evidence-root-check.d.ts +70 -0
- package/dist/seal-evidence-root-check.d.ts.map +1 -0
- package/dist/seal-evidence-root-check.js +199 -0
- package/dist/seal-evidence-root-check.js.map +1 -0
- package/dist/seal-failure-store.d.ts +139 -0
- package/dist/seal-failure-store.d.ts.map +1 -0
- package/dist/seal-failure-store.js +207 -0
- package/dist/seal-failure-store.js.map +1 -0
- package/dist/seal-flows.d.ts +107 -0
- package/dist/seal-flows.d.ts.map +1 -0
- package/dist/seal-flows.js +638 -0
- package/dist/seal-flows.js.map +1 -0
- package/dist/seal-frontier-verify.d.ts +103 -0
- package/dist/seal-frontier-verify.d.ts.map +1 -0
- package/dist/seal-frontier-verify.js +143 -0
- package/dist/seal-frontier-verify.js.map +1 -0
- package/dist/seal-leaf.d.ts +58 -0
- package/dist/seal-leaf.d.ts.map +1 -0
- package/dist/seal-leaf.js +112 -0
- package/dist/seal-leaf.js.map +1 -0
- package/dist/seal-legibility-tbs.d.ts +25 -0
- package/dist/seal-legibility-tbs.d.ts.map +1 -0
- package/dist/seal-legibility-tbs.js +77 -0
- package/dist/seal-legibility-tbs.js.map +1 -0
- package/dist/seal-local-terminus.d.ts +41 -0
- package/dist/seal-local-terminus.d.ts.map +1 -0
- package/dist/seal-local-terminus.js +170 -0
- package/dist/seal-local-terminus.js.map +1 -0
- package/dist/seal-receipt-upgrade.d.ts +30 -0
- package/dist/seal-receipt-upgrade.d.ts.map +1 -0
- package/dist/seal-receipt-upgrade.js +49 -0
- package/dist/seal-receipt-upgrade.js.map +1 -0
- package/dist/seal-relay-silence.d.ts +51 -0
- package/dist/seal-relay-silence.d.ts.map +1 -0
- package/dist/seal-relay-silence.js +76 -0
- package/dist/seal-relay-silence.js.map +1 -0
- package/dist/seal-settle.d.ts +38 -0
- package/dist/seal-settle.d.ts.map +1 -0
- package/dist/seal-settle.js +33 -0
- package/dist/seal-settle.js.map +1 -0
- package/dist/seal-upgrade.d.ts +107 -0
- package/dist/seal-upgrade.d.ts.map +1 -0
- package/dist/seal-upgrade.js +200 -0
- package/dist/seal-upgrade.js.map +1 -0
- package/dist/sealed-conversation.d.ts +36 -0
- package/dist/sealed-conversation.d.ts.map +1 -0
- package/dist/sealed-conversation.js +171 -0
- package/dist/sealed-conversation.js.map +1 -0
- package/dist/sealed-leaf-set.d.ts +92 -0
- package/dist/sealed-leaf-set.d.ts.map +1 -0
- package/dist/sealed-leaf-set.js +122 -0
- package/dist/sealed-leaf-set.js.map +1 -0
- package/dist/send-claims.d.ts +56 -0
- package/dist/send-claims.d.ts.map +1 -0
- package/dist/send-claims.js +50 -0
- package/dist/send-claims.js.map +1 -0
- package/dist/session-assignment-parser.d.ts +104 -0
- package/dist/session-assignment-parser.d.ts.map +1 -0
- package/dist/session-assignment-parser.js +345 -0
- package/dist/session-assignment-parser.js.map +1 -0
- package/dist/session-category.d.ts +19 -0
- package/dist/session-category.d.ts.map +1 -0
- package/dist/session-category.js +14 -0
- package/dist/session-category.js.map +1 -0
- package/dist/session-ceremony.d.ts +297 -0
- package/dist/session-ceremony.d.ts.map +1 -0
- package/dist/session-ceremony.js +964 -0
- package/dist/session-ceremony.js.map +1 -0
- package/dist/session-closed.d.ts +79 -0
- package/dist/session-closed.d.ts.map +1 -0
- package/dist/session-closed.js +189 -0
- package/dist/session-closed.js.map +1 -0
- package/dist/session-connection-gater.d.ts +148 -0
- package/dist/session-connection-gater.d.ts.map +1 -0
- package/dist/session-connection-gater.js +332 -0
- package/dist/session-connection-gater.js.map +1 -0
- package/dist/session-content-context.d.ts +162 -0
- package/dist/session-content-context.d.ts.map +1 -0
- package/dist/session-content-context.js +2 -0
- package/dist/session-content-context.js.map +1 -0
- package/dist/session-content-handlers.d.ts +82 -0
- package/dist/session-content-handlers.d.ts.map +1 -0
- package/dist/session-content-handlers.js +1382 -0
- package/dist/session-content-handlers.js.map +1 -0
- package/dist/session-content-ingest.d.ts +206 -0
- package/dist/session-content-ingest.d.ts.map +1 -0
- package/dist/session-content-ingest.js +2167 -0
- package/dist/session-content-ingest.js.map +1 -0
- package/dist/session-content-send.d.ts +191 -0
- package/dist/session-content-send.d.ts.map +1 -0
- package/dist/session-content-send.js +1360 -0
- package/dist/session-content-send.js.map +1 -0
- package/dist/session-delivery-acks.d.ts +169 -0
- package/dist/session-delivery-acks.d.ts.map +1 -0
- package/dist/session-delivery-acks.js +569 -0
- package/dist/session-delivery-acks.js.map +1 -0
- package/dist/session-ephemerals.d.ts +279 -0
- package/dist/session-ephemerals.d.ts.map +1 -0
- package/dist/session-ephemerals.js +591 -0
- package/dist/session-ephemerals.js.map +1 -0
- package/dist/session-leaf-records.d.ts +159 -0
- package/dist/session-leaf-records.d.ts.map +1 -0
- package/dist/session-leaf-records.js +408 -0
- package/dist/session-leaf-records.js.map +1 -0
- package/dist/session-lifecycle.d.ts +303 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +1679 -0
- package/dist/session-lifecycle.js.map +1 -0
- package/dist/session-liveness.d.ts +135 -0
- package/dist/session-liveness.d.ts.map +1 -0
- package/dist/session-liveness.js +347 -0
- package/dist/session-liveness.js.map +1 -0
- package/dist/session-name.d.ts +35 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +60 -0
- package/dist/session-name.js.map +1 -0
- package/dist/session-node-factory.d.ts +18 -0
- package/dist/session-node-factory.d.ts.map +1 -0
- package/dist/session-node-factory.js +182 -0
- package/dist/session-node-factory.js.map +1 -0
- package/dist/session-node-manager.d.ts +877 -0
- package/dist/session-node-manager.d.ts.map +1 -0
- package/dist/session-node-manager.js +2998 -0
- package/dist/session-node-manager.js.map +1 -0
- package/dist/session-node-types.d.ts +1057 -0
- package/dist/session-node-types.d.ts.map +1 -0
- package/dist/session-node-types.js +657 -0
- package/dist/session-node-types.js.map +1 -0
- package/dist/session-notify.d.ts +46 -0
- package/dist/session-notify.d.ts.map +1 -0
- package/dist/session-notify.js +116 -0
- package/dist/session-notify.js.map +1 -0
- package/dist/session-own-chain-store.d.ts +65 -0
- package/dist/session-own-chain-store.d.ts.map +1 -0
- package/dist/session-own-chain-store.js +75 -0
- package/dist/session-own-chain-store.js.map +1 -0
- package/dist/session-queries.d.ts +476 -0
- package/dist/session-queries.d.ts.map +1 -0
- package/dist/session-queries.js +1007 -0
- package/dist/session-queries.js.map +1 -0
- package/dist/session-read-handlers.d.ts +87 -0
- package/dist/session-read-handlers.d.ts.map +1 -0
- package/dist/session-read-handlers.js +689 -0
- package/dist/session-read-handlers.js.map +1 -0
- package/dist/session-records.d.ts +341 -0
- package/dist/session-records.d.ts.map +1 -0
- package/dist/session-records.js +858 -0
- package/dist/session-records.js.map +1 -0
- package/dist/session-relay-client.d.ts +659 -0
- package/dist/session-relay-client.d.ts.map +1 -0
- package/dist/session-relay-client.js +2876 -0
- package/dist/session-relay-client.js.map +1 -0
- package/dist/session-relay.d.ts +397 -0
- package/dist/session-relay.d.ts.map +1 -0
- package/dist/session-relay.js +1636 -0
- package/dist/session-relay.js.map +1 -0
- package/dist/session-salt-agreement.d.ts +331 -0
- package/dist/session-salt-agreement.d.ts.map +1 -0
- package/dist/session-salt-agreement.js +472 -0
- package/dist/session-salt-agreement.js.map +1 -0
- package/dist/session-salts.d.ts +432 -0
- package/dist/session-salts.d.ts.map +1 -0
- package/dist/session-salts.js +1540 -0
- package/dist/session-salts.js.map +1 -0
- package/dist/session-schema.d.ts +30 -0
- package/dist/session-schema.d.ts.map +1 -0
- package/dist/session-schema.js +877 -0
- package/dist/session-schema.js.map +1 -0
- package/dist/session-seal-leaf-store.d.ts +70 -0
- package/dist/session-seal-leaf-store.d.ts.map +1 -0
- package/dist/session-seal-leaf-store.js +105 -0
- package/dist/session-seal-leaf-store.js.map +1 -0
- package/dist/session-seal.d.ts +334 -0
- package/dist/session-seal.d.ts.map +1 -0
- package/dist/session-seal.js +1017 -0
- package/dist/session-seal.js.map +1 -0
- package/dist/session-terminal-refusal.d.ts +65 -0
- package/dist/session-terminal-refusal.d.ts.map +1 -0
- package/dist/session-terminal-refusal.js +87 -0
- package/dist/session-terminal-refusal.js.map +1 -0
- package/dist/session-tree.d.ts +110 -0
- package/dist/session-tree.d.ts.map +1 -0
- package/dist/session-tree.js +144 -0
- package/dist/session-tree.js.map +1 -0
- package/dist/session-views.d.ts +47 -0
- package/dist/session-views.d.ts.map +1 -0
- package/dist/session-views.js +278 -0
- package/dist/session-views.js.map +1 -0
- package/dist/signal-handlers.d.ts +63 -0
- package/dist/signal-handlers.d.ts.map +1 -0
- package/dist/signal-handlers.js +980 -0
- package/dist/signal-handlers.js.map +1 -0
- package/dist/signal-requirement-policy.d.ts +51 -0
- package/dist/signal-requirement-policy.d.ts.map +1 -0
- package/dist/signal-requirement-policy.js +89 -0
- package/dist/signal-requirement-policy.js.map +1 -0
- package/dist/signal-revocability.d.ts +49 -0
- package/dist/signal-revocability.d.ts.map +1 -0
- package/dist/signal-revocability.js +93 -0
- package/dist/signal-revocability.js.map +1 -0
- package/dist/signal-submission.d.ts +181 -0
- package/dist/signal-submission.d.ts.map +1 -0
- package/dist/signal-submission.js +368 -0
- package/dist/signal-submission.js.map +1 -0
- package/dist/signaling-connect.d.ts +118 -0
- package/dist/signaling-connect.d.ts.map +1 -0
- package/dist/signaling-connect.js +538 -0
- package/dist/signaling-connect.js.map +1 -0
- package/dist/signaling-wiring.d.ts +105 -0
- package/dist/signaling-wiring.d.ts.map +1 -0
- package/dist/signaling-wiring.js +393 -0
- package/dist/signaling-wiring.js.map +1 -0
- package/dist/singleton-lock.d.ts +85 -0
- package/dist/singleton-lock.d.ts.map +1 -0
- package/dist/singleton-lock.js +219 -0
- package/dist/singleton-lock.js.map +1 -0
- package/dist/sqlcipher-db.d.ts +139 -0
- package/dist/sqlcipher-db.d.ts.map +1 -0
- package/dist/sqlcipher-db.js +357 -0
- package/dist/sqlcipher-db.js.map +1 -0
- package/dist/standing-receivers.d.ts +319 -0
- package/dist/standing-receivers.d.ts.map +1 -0
- package/dist/standing-receivers.js +1295 -0
- package/dist/standing-receivers.js.map +1 -0
- package/dist/start-agent.d.ts +64 -0
- package/dist/start-agent.d.ts.map +1 -0
- package/dist/start-agent.js +136 -0
- package/dist/start-agent.js.map +1 -0
- package/dist/status-handler.d.ts +54 -0
- package/dist/status-handler.d.ts.map +1 -0
- package/dist/status-handler.js +61 -0
- package/dist/status-handler.js.map +1 -0
- package/dist/submission-retry.d.ts +208 -0
- package/dist/submission-retry.d.ts.map +1 -0
- package/dist/submission-retry.js +506 -0
- package/dist/submission-retry.js.map +1 -0
- package/dist/telegram-bot-client.d.ts +34 -0
- package/dist/telegram-bot-client.d.ts.map +1 -0
- package/dist/telegram-bot-client.js +36 -0
- package/dist/telegram-bot-client.js.map +1 -0
- package/dist/telegram-doorbell.d.ts +38 -0
- package/dist/telegram-doorbell.d.ts.map +1 -0
- package/dist/telegram-doorbell.js +140 -0
- package/dist/telegram-doorbell.js.map +1 -0
- package/dist/test-handlers.d.ts +62 -0
- package/dist/test-handlers.d.ts.map +1 -0
- package/dist/test-handlers.js +240 -0
- package/dist/test-handlers.js.map +1 -0
- package/dist/testing.d.ts +10 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +10 -0
- package/dist/testing.js.map +1 -0
- package/dist/transport-composition.d.ts +31 -0
- package/dist/transport-composition.d.ts.map +1 -0
- package/dist/transport-composition.js +55 -0
- package/dist/transport-composition.js.map +1 -0
- package/dist/transport-selector.d.ts +202 -0
- package/dist/transport-selector.d.ts.map +1 -0
- package/dist/transport-selector.js +196 -0
- package/dist/transport-selector.js.map +1 -0
- package/dist/trust-signal-pickup-listener.d.ts +43 -0
- package/dist/trust-signal-pickup-listener.d.ts.map +1 -0
- package/dist/trust-signal-pickup-listener.js +48 -0
- package/dist/trust-signal-pickup-listener.js.map +1 -0
- package/dist/trust-signal-store.d.ts +406 -0
- package/dist/trust-signal-store.d.ts.map +1 -0
- package/dist/trust-signal-store.js +939 -0
- package/dist/trust-signal-store.js.map +1 -0
- package/dist/trust-signal-sweep-tick.d.ts +60 -0
- package/dist/trust-signal-sweep-tick.d.ts.map +1 -0
- package/dist/trust-signal-sweep-tick.js +101 -0
- package/dist/trust-signal-sweep-tick.js.map +1 -0
- package/dist/trust-signal-sweep.d.ts +94 -0
- package/dist/trust-signal-sweep.d.ts.map +1 -0
- package/dist/trust-signal-sweep.js +147 -0
- package/dist/trust-signal-sweep.js.map +1 -0
- package/dist/type-registry.d.ts +42 -0
- package/dist/type-registry.d.ts.map +1 -0
- package/dist/type-registry.js +37 -0
- package/dist/type-registry.js.map +1 -0
- package/dist/types.d.ts +746 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/dist/unresolved-nodes-report.d.ts +14 -0
- package/dist/unresolved-nodes-report.d.ts.map +1 -0
- package/dist/unresolved-nodes-report.js +96 -0
- package/dist/unresolved-nodes-report.js.map +1 -0
- package/dist/vocabulary.d.ts +150 -0
- package/dist/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary.js +386 -0
- package/dist/vocabulary.js.map +1 -0
- package/dist/who-label.d.ts +28 -0
- package/dist/who-label.d.ts.map +1 -0
- package/dist/who-label.js +31 -0
- package/dist/who-label.js.map +1 -0
- package/dist/who-resolver.d.ts +15 -0
- package/dist/who-resolver.d.ts.map +1 -0
- package/dist/who-resolver.js +47 -0
- package/dist/who-resolver.js.map +1 -0
- package/dist/wire-content-hash.d.ts +93 -0
- package/dist/wire-content-hash.d.ts.map +1 -0
- package/dist/wire-content-hash.js +116 -0
- package/dist/wire-content-hash.js.map +1 -0
- package/dist/withheld-content.d.ts +13 -0
- package/dist/withheld-content.d.ts.map +1 -0
- package/dist/withheld-content.js +46 -0
- package/dist/withheld-content.js.map +1 -0
- package/dist/witness-alerts.d.ts +40 -0
- package/dist/witness-alerts.d.ts.map +1 -0
- package/dist/witness-alerts.js +102 -0
- package/dist/witness-alerts.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The address book: the contact / tier / moniker / settings / telegram-token IPC handlers.
|
|
3
|
+
*
|
|
4
|
+
* These ten handlers lived inside startDaemon's body, where they reached the daemon's state by
|
|
5
|
+
* closing over it. Here they must NAME what they need — that is the whole point of the move, and
|
|
6
|
+
* the list turns out to be short: the session store, the per-connection agent selection, a logger,
|
|
7
|
+
* and one callback to restart the Telegram poller. Nothing about sessions, seals, transport or
|
|
8
|
+
* ceremonies. The address book never needed any of it; you just couldn't tell from inside the
|
|
9
|
+
* closure.
|
|
10
|
+
*
|
|
11
|
+
* Behavior is preserved exactly. The only type that changed is `connState`, widened to include
|
|
12
|
+
* `clearedAgent` — it was always there at runtime (TS types are erased, and resolveCurrentAgent
|
|
13
|
+
* reads it), so the old narrower type was a fiction, not a constraint.
|
|
14
|
+
*/
|
|
15
|
+
import { MONIKER_RE, validateMoniker } from "@cello-protocol/protocol-types";
|
|
16
|
+
import { whoLabel } from "./who-label.js";
|
|
17
|
+
import { isKnownTierValue, TIER } from "./contacts-tier-migration.js";
|
|
18
|
+
import { isValidSettingKey, allSettingKeys, validateSettingValue, AWAY_MESSAGE_MAX_LEN, } from "./agent-settings-keys.js";
|
|
19
|
+
import { resolveNamedAgent } from "./resolve-named-agent.js";
|
|
20
|
+
/**
|
|
21
|
+
* Review finding 7 — a contact pubkey must LOOK like a pubkey, or the row can never work.
|
|
22
|
+
*
|
|
23
|
+
* The address-book handlers took `params.pubkey` as any string and stored it. So
|
|
24
|
+
* `cello contact tier add` — a plausible slip under the `contact <pubkey> <op>` shape, where the
|
|
25
|
+
* FIRST positional is the pubkey — persisted a contact whose pubkey is the literal text "tier",
|
|
26
|
+
* and answered ok:true. Nothing would ever match it: it is not a key, so it can never be a
|
|
27
|
+
* counterparty. The operator is told they added someone; they added a typo.
|
|
28
|
+
*
|
|
29
|
+
* A key is 32 bytes, hex: 64 characters. Anything else is refused, loudly, with the value echoed
|
|
30
|
+
* so the slip is obvious. Returns null when the pubkey is absent — the caller's own missing_params
|
|
31
|
+
* check owns that case and says something more useful.
|
|
32
|
+
*/
|
|
33
|
+
export function invalidPubkey(pubkey) {
|
|
34
|
+
if (pubkey === undefined)
|
|
35
|
+
return null; // absent → the caller's missing_params check owns it
|
|
36
|
+
if (/^[0-9a-fA-F]{64}$/.test(pubkey))
|
|
37
|
+
return null;
|
|
38
|
+
return {
|
|
39
|
+
ok: false,
|
|
40
|
+
reason: "invalid_pubkey",
|
|
41
|
+
guidance: `'${pubkey}' is not a public key. A CELLO public key is 64 hex characters (32 bytes). Nothing was changed — storing it would create an address-book entry that can never match anyone. Note the argument order is 'cello contact <pubkey> <operation>'.`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function registerContactHandlers(deps) {
|
|
45
|
+
const { handlers, sessionNodeManager, getConnState, resolveCurrentAgent, agents, setAgentMoniker, logger, startTelegramPollerIfConfigured, } = deps;
|
|
46
|
+
// M8C-CONTACT-1: every address-book handler resolves the target agent the SAME way — an explicit
|
|
47
|
+
// params.agent, else this connection's current/sole-online agent (F18) — so a CLI or AI operator
|
|
48
|
+
// gets the same no_current_agent guidance INBOX already uses.
|
|
49
|
+
function resolveContactAgent(connState, params) {
|
|
50
|
+
// DOD-INBOX-AGENT-1 (review PE1): this carried BOTH holes the inbox handler just closed, and
|
|
51
|
+
// here they are worse, because these handlers WRITE. `{ agent: "" }` is falsy but not nullish,
|
|
52
|
+
// so a bare truthiness test filed the contact under whatever desk the connection happened to
|
|
53
|
+
// hold; `{ agent: "carol" }` with no carol wrote a row keyed to an agent that does not exist
|
|
54
|
+
// (addContact does not validate the name). Both returned ok:true. One shared guard now, so the
|
|
55
|
+
// third copy of this never gets written.
|
|
56
|
+
const named = resolveNamedAgent(params?.agent, agents);
|
|
57
|
+
if (!named.ok)
|
|
58
|
+
return named;
|
|
59
|
+
if (named.agent !== null)
|
|
60
|
+
return { ok: true, agent: named.agent };
|
|
61
|
+
const current = resolveCurrentAgent(connState);
|
|
62
|
+
if (!current) {
|
|
63
|
+
return {
|
|
64
|
+
ok: false,
|
|
65
|
+
reason: "no_current_agent",
|
|
66
|
+
guidance: "No current agent for this connection. Pass --agent <name>, or call cello_use_agent to select one first.",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return { ok: true, agent: current };
|
|
70
|
+
}
|
|
71
|
+
handlers.set("cello_contact_add", async (params, connectionId) => {
|
|
72
|
+
const pubkey = typeof params?.pubkey === "string" ? params.pubkey : undefined;
|
|
73
|
+
const badPubkey = invalidPubkey(pubkey);
|
|
74
|
+
if (badPubkey)
|
|
75
|
+
return badPubkey;
|
|
76
|
+
if (!pubkey) {
|
|
77
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'pubkey' (hex) — the contact to add." };
|
|
78
|
+
}
|
|
79
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
80
|
+
if (!resolved.ok)
|
|
81
|
+
return resolved;
|
|
82
|
+
// MONIKER-3 AC3: optional pet name. Invalid → reject the request WHOLE (no contact row
|
|
83
|
+
// either) — a half-applied add would store trust without the name the operator asked for.
|
|
84
|
+
let moniker;
|
|
85
|
+
if (params && "moniker" in params && params.moniker !== undefined && params.moniker !== null) {
|
|
86
|
+
moniker = validateMoniker(params.moniker);
|
|
87
|
+
if (moniker === null) {
|
|
88
|
+
return {
|
|
89
|
+
ok: false,
|
|
90
|
+
reason: "invalid_moniker",
|
|
91
|
+
guidance: `A moniker is 1-64 chars: letters, digits, '-' or '_' (regex ${MONIKER_RE.source}).`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// DOD-TIER-4 / DEC-AB-1: an explicit cello_contact_add is a deliberate operator vouch → KNOWN
|
|
96
|
+
// (still not auto-accept; that is a separate cello_contact_set_tier to whitelisted). provenance
|
|
97
|
+
// stays null — this relationship formed by neither initiating nor accepting a session (AC5).
|
|
98
|
+
sessionNodeManager.addContact(resolved.agent, pubkey, moniker, null, TIER.KNOWN);
|
|
99
|
+
logger.info("contact.added", { agent: resolved.agent, pubkey });
|
|
100
|
+
if (moniker !== undefined) {
|
|
101
|
+
logger.info("contact.moniker.set", { agentName: resolved.agent, pubkey });
|
|
102
|
+
}
|
|
103
|
+
// Review F3: echo the moniker ONLY when one rode this request — a re-add without a moniker
|
|
104
|
+
// must not report null while an earlier pet name is still stored.
|
|
105
|
+
return moniker !== undefined
|
|
106
|
+
? { ok: true, agent: resolved.agent, pubkey, moniker }
|
|
107
|
+
: { ok: true, agent: resolved.agent, pubkey };
|
|
108
|
+
});
|
|
109
|
+
// MONIKER-3 AC3: rename (string) or clear (null) an existing contact's pet name. Absence of the
|
|
110
|
+
// key is NOT a clear (Entry-66-F3): a request that omits it is malformed and rejected.
|
|
111
|
+
handlers.set("cello_contact_set_moniker", async (params, connectionId) => {
|
|
112
|
+
const pubkey = typeof params?.pubkey === "string" ? params.pubkey : undefined;
|
|
113
|
+
const badPubkey = invalidPubkey(pubkey);
|
|
114
|
+
if (badPubkey)
|
|
115
|
+
return badPubkey;
|
|
116
|
+
if (!pubkey || !params || !("moniker" in params)) {
|
|
117
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'pubkey' (hex) and 'moniker' — a string to set the pet name, or null to clear it." };
|
|
118
|
+
}
|
|
119
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
120
|
+
if (!resolved.ok)
|
|
121
|
+
return resolved;
|
|
122
|
+
const raw = params.moniker ?? null;
|
|
123
|
+
const moniker = raw === null ? null : validateMoniker(raw);
|
|
124
|
+
if (raw !== null && moniker === null) {
|
|
125
|
+
return {
|
|
126
|
+
ok: false,
|
|
127
|
+
reason: "invalid_moniker",
|
|
128
|
+
guidance: `A moniker is 1-64 chars: letters, digits, '-' or '_' (regex ${MONIKER_RE.source}). Pass null to clear.`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (!sessionNodeManager.setContactMoniker(resolved.agent, pubkey, moniker)) {
|
|
132
|
+
return { ok: false, reason: "contact_not_found", guidance: `No contact ${pubkey.slice(0, 16)}… for agent '${resolved.agent}'. Add it first with cello_contact_add.` };
|
|
133
|
+
}
|
|
134
|
+
logger.info("contact.moniker.set", { agentName: resolved.agent, pubkey, cleared: moniker === null });
|
|
135
|
+
return { ok: true, agent: resolved.agent, pubkey, moniker };
|
|
136
|
+
});
|
|
137
|
+
// DOD-CONTACT-VIEW-1 AC1: set a contact's reachability tier. Validates the tier is a known constant
|
|
138
|
+
// (0..4) — an unknown value is REFUSED, never coerced. Emits contact.tier.changed (old→new).
|
|
139
|
+
handlers.set("cello_contact_set_tier", async (params, connectionId) => {
|
|
140
|
+
const pubkey = typeof params?.pubkey === "string" ? params.pubkey : undefined;
|
|
141
|
+
const badPubkey = invalidPubkey(pubkey);
|
|
142
|
+
if (badPubkey)
|
|
143
|
+
return badPubkey;
|
|
144
|
+
const tier = typeof params?.tier === "number" ? params.tier : undefined;
|
|
145
|
+
if (!pubkey || tier === undefined) {
|
|
146
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'pubkey' (hex) and 'tier' (0=blocked, 1=unknown, 2=known, 3=whitelisted, 4=vip)." };
|
|
147
|
+
}
|
|
148
|
+
if (!isKnownTierValue(tier)) {
|
|
149
|
+
return { ok: false, reason: "invalid_tier", guidance: "tier must be one of 0 (blocked), 1 (unknown), 2 (known), 3 (whitelisted), 4 (vip)." };
|
|
150
|
+
}
|
|
151
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
152
|
+
if (!resolved.ok)
|
|
153
|
+
return resolved;
|
|
154
|
+
const oldTier = sessionNodeManager.getTier(resolved.agent, pubkey);
|
|
155
|
+
if (!sessionNodeManager.setContactTier(resolved.agent, pubkey, tier)) {
|
|
156
|
+
return { ok: false, reason: "contact_not_found", guidance: `No contact ${pubkey.slice(0, 16)}… for agent '${resolved.agent}'. Add it first with cello_contact_add.` };
|
|
157
|
+
}
|
|
158
|
+
// Only an actual change is an audit event — a no-op re-set must not pollute the trail (review F4).
|
|
159
|
+
if (oldTier !== tier) {
|
|
160
|
+
logger.info("contact.tier.changed", { agentName: resolved.agent, pubkey, oldTier, newTier: tier });
|
|
161
|
+
}
|
|
162
|
+
return { ok: true, agent: resolved.agent, pubkey, tier };
|
|
163
|
+
});
|
|
164
|
+
// DOD-AWAY-TIER-1 AC2: set (or clear, with null) a contact's per-contact away message — the most
|
|
165
|
+
// specific level of the away-text resolution. Validated as a string-or-null; the text is screened
|
|
166
|
+
// on the outbound path at send time (SI), never here.
|
|
167
|
+
handlers.set("cello_contact_set_away", async (params, connectionId) => {
|
|
168
|
+
const pubkey = typeof params?.pubkey === "string" ? params.pubkey : undefined;
|
|
169
|
+
const badPubkey = invalidPubkey(pubkey);
|
|
170
|
+
if (badPubkey)
|
|
171
|
+
return badPubkey;
|
|
172
|
+
if (!pubkey || !params || !("message" in params)) {
|
|
173
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'pubkey' (hex) and 'message' — a string away text, or null to clear it." };
|
|
174
|
+
}
|
|
175
|
+
const rawMessage = params.message === null ? null : typeof params.message === "string" ? params.message : undefined;
|
|
176
|
+
if (rawMessage === undefined) {
|
|
177
|
+
return { ok: false, reason: "invalid_message", guidance: "'message' must be a string (the away text) or null (to clear)." };
|
|
178
|
+
}
|
|
179
|
+
// Review F2/F3: an empty / whitespace-only message CLEARS (consistent with the CLI + null), never
|
|
180
|
+
// stores a blank away reply; a valid message is length-bounded.
|
|
181
|
+
const message = rawMessage !== null && rawMessage.trim().length === 0 ? null : rawMessage;
|
|
182
|
+
if (message !== null && message.length > AWAY_MESSAGE_MAX_LEN) {
|
|
183
|
+
return { ok: false, reason: "invalid_message", guidance: `The away message must be <= ${AWAY_MESSAGE_MAX_LEN} characters.` };
|
|
184
|
+
}
|
|
185
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
186
|
+
if (!resolved.ok)
|
|
187
|
+
return resolved;
|
|
188
|
+
if (!sessionNodeManager.setContactAwayMessage(resolved.agent, pubkey, message)) {
|
|
189
|
+
return { ok: false, reason: "contact_not_found", guidance: `No contact ${pubkey.slice(0, 16)}… for agent '${resolved.agent}'. Add it first with cello_contact_add.` };
|
|
190
|
+
}
|
|
191
|
+
logger.info("contact.away.set", { agentName: resolved.agent, pubkey, cleared: message === null });
|
|
192
|
+
return { ok: true, agent: resolved.agent, pubkey };
|
|
193
|
+
});
|
|
194
|
+
handlers.set("cello_contact_remove", async (params, connectionId) => {
|
|
195
|
+
// Deliberately NOT shape-gated. `remove` is the ESCAPE HATCH, and gating it would trap the very
|
|
196
|
+
// rows the gate exists to prevent: a junk contact written by the older, unvalidated code (pubkey
|
|
197
|
+
// = the literal text "tier") could never be deleted, because deleting it requires naming it.
|
|
198
|
+
// Validation belongs on the paths that CREATE or MUTATE a row, never on the one that removes it.
|
|
199
|
+
// Removing a key that was never stored is a harmless not_found.
|
|
200
|
+
const pubkey = typeof params?.pubkey === "string" ? params.pubkey : undefined;
|
|
201
|
+
if (!pubkey) {
|
|
202
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'pubkey' (hex) — the contact to remove." };
|
|
203
|
+
}
|
|
204
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
205
|
+
if (!resolved.ok)
|
|
206
|
+
return resolved;
|
|
207
|
+
const removed = sessionNodeManager.removeContact(resolved.agent, pubkey);
|
|
208
|
+
logger.info("contact.removed", { agent: resolved.agent, pubkey, removed });
|
|
209
|
+
return { ok: true, agent: resolved.agent, pubkey, removed };
|
|
210
|
+
});
|
|
211
|
+
handlers.set("cello_contact_list", async (params, connectionId) => {
|
|
212
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
213
|
+
if (!resolved.ok)
|
|
214
|
+
return resolved;
|
|
215
|
+
// MONIKER-5 AC1: each row shows the resolved who (a contact has no session, so the offered
|
|
216
|
+
// tier doesn't apply — pet name ?? fingerprint).
|
|
217
|
+
const contacts = sessionNodeManager.listContacts(resolved.agent).map((c) => ({
|
|
218
|
+
...c,
|
|
219
|
+
...whoLabel({ localMoniker: c.moniker, offeredMoniker: null, pubkeyHex: c.pubkey }),
|
|
220
|
+
}));
|
|
221
|
+
return { ok: true, agent: resolved.agent, contacts };
|
|
222
|
+
});
|
|
223
|
+
// DOD-SETTINGS-1 AC2: read a per-agent reachability-policy setting (or all set ones). An unset key
|
|
224
|
+
// returns value:null — the CONSUMER applies the hardcoded default (the daemon runs on defaults alone).
|
|
225
|
+
handlers.set("cello_settings_get", async (params, connectionId) => {
|
|
226
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
227
|
+
if (!resolved.ok)
|
|
228
|
+
return resolved;
|
|
229
|
+
// A key was PROVIDED (present and non-null) → it must be a valid string key. Distinguish "key
|
|
230
|
+
// absent" (list all) from "key present but malformed/unknown" (review F1/F3) — a typo'd read must
|
|
231
|
+
// NOT masquerade as "unset", the exact invisibility this store exists to prevent.
|
|
232
|
+
if (params && "key" in params && params.key !== undefined && params.key !== null) {
|
|
233
|
+
if (typeof params.key !== "string") {
|
|
234
|
+
return { ok: false, reason: "missing_params", guidance: "'key' must be a string setting key, or omit it to list every set value." };
|
|
235
|
+
}
|
|
236
|
+
if (!isValidSettingKey(params.key)) {
|
|
237
|
+
return { ok: false, reason: "invalid_key", guidance: `Unknown setting key '${params.key}'. Valid keys: ${allSettingKeys().join(", ")}` };
|
|
238
|
+
}
|
|
239
|
+
return { ok: true, agent: resolved.agent, key: params.key, value: sessionNodeManager.getSetting(resolved.agent, params.key) };
|
|
240
|
+
}
|
|
241
|
+
return { ok: true, agent: resolved.agent, settings: sessionNodeManager.getAllSettings(resolved.agent) };
|
|
242
|
+
});
|
|
243
|
+
// DOD-SETTINGS-1 AC2: write a per-agent setting. The KEY is validated against the known namespace —
|
|
244
|
+
// an unknown key is REFUSED (a typo'd key that persisted would be a setting that never takes effect,
|
|
245
|
+
// invisible to the operator). Per-key VALUE validation (finite bounds, etc.) lives with the consumer.
|
|
246
|
+
handlers.set("cello_settings_set", async (params, connectionId) => {
|
|
247
|
+
const key = typeof params?.key === "string" ? params.key : undefined;
|
|
248
|
+
const rawValue = params?.value;
|
|
249
|
+
// NULL CLEARS THE SETTING, matching cello_contact_set_away, which has always taken
|
|
250
|
+
// `string | null`. This handler's own guidance told callers to "pass null to clear" while
|
|
251
|
+
// coercing null to undefined and rejecting it as missing_params — so there was NO way to unset a
|
|
252
|
+
// setting from either surface. A caller following that advice from the CLI stored the literal
|
|
253
|
+
// text "null", which for an away message meant the agent greeted every caller with "null".
|
|
254
|
+
const isClear = rawValue === null;
|
|
255
|
+
const value = typeof rawValue === "string" ? rawValue : typeof rawValue === "number" ? String(rawValue) : undefined;
|
|
256
|
+
if (!key || (value === undefined && !isClear)) {
|
|
257
|
+
return { ok: false, reason: "missing_params", guidance: `Provide 'key' and 'value' (string or number), or value null to clear the setting. Valid keys: ${allSettingKeys().join(", ")}` };
|
|
258
|
+
}
|
|
259
|
+
if (!isValidSettingKey(key)) {
|
|
260
|
+
return { ok: false, reason: "invalid_key", guidance: `Unknown setting key '${key}'. Valid keys: ${allSettingKeys().join(", ")}` };
|
|
261
|
+
}
|
|
262
|
+
if (isClear) {
|
|
263
|
+
// Reported honestly: `cleared` says whether a row actually went away, so clearing an already
|
|
264
|
+
// unset key reads as the no-op it is instead of implying something was removed.
|
|
265
|
+
const resolvedClear = resolveContactAgent(getConnState(connectionId), params);
|
|
266
|
+
if (!resolvedClear.ok)
|
|
267
|
+
return resolvedClear;
|
|
268
|
+
const removed = sessionNodeManager.deleteSetting(resolvedClear.agent, key);
|
|
269
|
+
logger.info("setting.cleared", { agentName: resolvedClear.agent, key, removed });
|
|
270
|
+
return {
|
|
271
|
+
ok: true,
|
|
272
|
+
agent: resolvedClear.agent,
|
|
273
|
+
key,
|
|
274
|
+
value: null,
|
|
275
|
+
cleared: removed,
|
|
276
|
+
guidance: removed
|
|
277
|
+
? `'${key}' is unset — the built-in default applies again.`
|
|
278
|
+
: `'${key}' was already unset; nothing to clear. The built-in default applies.`,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
// Past the clear branch, so this is a real set. The guard above already rejected an undefined
|
|
282
|
+
// value on this path; re-check rather than assert, so a future edit to that guard cannot let an
|
|
283
|
+
// undefined reach setSetting behind a cast that silently agreed with it.
|
|
284
|
+
if (value === undefined) {
|
|
285
|
+
return { ok: false, reason: "missing_params", guidance: `Provide 'value' (string or number), or null to clear. Valid keys: ${allSettingKeys().join(", ")}` };
|
|
286
|
+
}
|
|
287
|
+
// DOD-TIER-BOUNDS-SETTINGS AC2: a bound value must be a finite positive integer (INV-TIER-BOUND —
|
|
288
|
+
// a setting cannot REMOVE a bound). Away-text values are free-form.
|
|
289
|
+
const valueCheck = validateSettingValue(key, value);
|
|
290
|
+
if (!valueCheck.ok) {
|
|
291
|
+
return { ok: false, reason: "invalid_value", guidance: valueCheck.reason };
|
|
292
|
+
}
|
|
293
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
294
|
+
if (!resolved.ok)
|
|
295
|
+
return resolved;
|
|
296
|
+
sessionNodeManager.setSetting(resolved.agent, key, value);
|
|
297
|
+
logger.info("setting.changed", { agentName: resolved.agent, key });
|
|
298
|
+
return { ok: true, agent: resolved.agent, key, value };
|
|
299
|
+
});
|
|
300
|
+
// MONIKER-1 AC2/AC3: cello_set_moniker — set (or clear, via explicit null) an agent's outbound-name
|
|
301
|
+
// override on the agents table. Validated at set-time with the shared MONIKER-0 rule; an invalid
|
|
302
|
+
// value is rejected here AND at the store (backstop) — it can never be stored. Local-only: the
|
|
303
|
+
// name is never sent to the directory (AC4).
|
|
304
|
+
handlers.set("cello_set_moniker", async (params, connectionId) => {
|
|
305
|
+
const resolved = resolveContactAgent(getConnState(connectionId), params);
|
|
306
|
+
if (!resolved.ok)
|
|
307
|
+
return resolved;
|
|
308
|
+
// Absence is NOT a clear (review Finding 3): JSON preserves explicit null, so a request
|
|
309
|
+
// that omits the key is malformed — rejecting it keeps a dropped field from silently
|
|
310
|
+
// deleting a stored override while reporting success.
|
|
311
|
+
if (!params || !("moniker" in params)) {
|
|
312
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'moniker' — a string to set the outbound name, or null to clear the override." };
|
|
313
|
+
}
|
|
314
|
+
const raw = params.moniker ?? null;
|
|
315
|
+
const moniker = raw === null ? null : validateMoniker(raw);
|
|
316
|
+
if (raw !== null && moniker === null) {
|
|
317
|
+
return {
|
|
318
|
+
ok: false,
|
|
319
|
+
reason: "invalid_moniker",
|
|
320
|
+
guidance: `A moniker is 1-64 chars: letters, digits, '-' or '_' (regex ${MONIKER_RE.source}). Pass null to clear the override.`,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
if (!setAgentMoniker(resolved.agent, moniker)) {
|
|
324
|
+
return { ok: false, reason: "agent_not_found", guidance: `No active agent named '${resolved.agent}'. See cello_agents.` };
|
|
325
|
+
}
|
|
326
|
+
logger.info("agent.moniker.set", { agentName: resolved.agent, cleared: moniker === null });
|
|
327
|
+
return { ok: true, agent: resolved.agent, moniker };
|
|
328
|
+
});
|
|
329
|
+
// M8C-TGDOOR-1: cello_telegram_set_token — persist the daemon-wide bot token + allowlisted
|
|
330
|
+
// operator chat ID, then start the poller immediately (no restart needed).
|
|
331
|
+
handlers.set("cello_telegram_set_token", async (params, _connectionId) => {
|
|
332
|
+
const botToken = typeof params?.bot_token === "string" ? params.bot_token : undefined;
|
|
333
|
+
const chatId = typeof params?.allowlisted_chat_id === "string" ? params.allowlisted_chat_id : undefined;
|
|
334
|
+
if (!botToken || !chatId) {
|
|
335
|
+
return { ok: false, reason: "missing_params", guidance: "Provide 'bot_token' and 'allowlisted_chat_id'." };
|
|
336
|
+
}
|
|
337
|
+
sessionNodeManager.setTelegramSettings(botToken, chatId);
|
|
338
|
+
startTelegramPollerIfConfigured(); // always bumps the generation — restarts even if already running
|
|
339
|
+
logger.info("telegram.settings.updated", {});
|
|
340
|
+
return { ok: true };
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=contact-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-handlers.js","sourceRoot":"","sources":["../src/contact-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAI7E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAwC7D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,MAA0B;IACtD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,CAAC,qDAAqD;IAC5F,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,gBAAgB;QACxB,QAAQ,EAAE,IAAI,MAAM,8OAA8O;KACnQ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAwB;IAC9D,MAAM,EACJ,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,EACvE,eAAe,EAAE,MAAM,EAAE,+BAA+B,GACzD,GAAG,IAAI,CAAC;IAET,iGAAiG;IACjG,iGAAiG;IACjG,8DAA8D;IAC9D,SAAS,mBAAmB,CAC1B,SAAgC,EAChC,MAAgC;QAEhC,6FAA6F;QAC7F,+FAA+F;QAC/F,6FAA6F;QAC7F,6FAA6F;QAC7F,+FAA+F;QAC/F,yCAAyC;QACzC,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC5B,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAClE,MAAM,OAAO,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,kBAAkB;gBAC1B,QAAQ,EAAE,yGAAyG;aACpH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,8CAA8C,EAAE,CAAC;QAC3G,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,uFAAuF;QACvF,0FAA0F;QAC1F,IAAI,OAAkC,CAAC;QACvC,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7F,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,iBAAiB;oBACzB,QAAQ,EAAE,+DAA+D,UAAU,CAAC,MAAM,IAAI;iBAC/F,CAAC;YACJ,CAAC;QACH,CAAC;QACD,8FAA8F;QAC9F,gGAAgG;QAChG,6FAA6F;QAC7F,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjF,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,2FAA2F;QAC3F,kEAAkE;QAClE,OAAO,OAAO,KAAK,SAAS;YAC1B,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;YACtD,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,gGAAgG;IAChG,uFAAuF;IACvF,QAAQ,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QACvE,MAAM,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,2FAA2F,EAAE,CAAC;QACxJ,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;QACnC,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,iBAAiB;gBACzB,QAAQ,EAAE,+DAA+D,UAAU,CAAC,MAAM,wBAAwB;aACnH,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAC3E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,QAAQ,CAAC,KAAK,yCAAyC,EAAE,CAAC;QACxK,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC;QACrG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,oGAAoG;IACpG,6FAA6F;IAC7F,QAAQ,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QACpE,MAAM,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,0FAA0F,EAAE,CAAC;QACvJ,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,oFAAoF,EAAE,CAAC;QAC/I,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnE,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YACrE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,QAAQ,CAAC,KAAK,yCAAyC,EAAE,CAAC;QACxK,CAAC;QACD,mGAAmG;QACnG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,iGAAiG;IACjG,kGAAkG;IAClG,sDAAsD;IACtD,QAAQ,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QACpE,MAAM,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iFAAiF,EAAE,CAAC;QAC9I,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACpH,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gEAAgE,EAAE,CAAC;QAC9H,CAAC;QACD,kGAAkG;QAClG,gEAAgE;QAChE,MAAM,OAAO,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAC1F,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;YAC9D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,+BAA+B,oBAAoB,cAAc,EAAE,CAAC;QAC/H,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAC/E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,QAAQ,CAAC,KAAK,yCAAyC,EAAE,CAAC;QACxK,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC;QAClG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QAClE,gGAAgG;QAChG,iGAAiG;QACjG,6FAA6F;QAC7F,iGAAiG;QACjG,gEAAgE;QAChE,MAAM,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iDAAiD,EAAE,CAAC;QAC9G,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QAChE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,2FAA2F;QAC3F,iDAAiD;QACjD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3E,GAAG,CAAC;YACJ,GAAG,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SACpF,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,mGAAmG;IACnG,uGAAuG;IACvG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QAChE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,8FAA8F;QAC9F,kGAAkG;QAClG,kFAAkF;QAClF,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YACjF,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,yEAAyE,EAAE,CAAC;YACtI,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,wBAAwB,MAAM,CAAC,GAAG,kBAAkB,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YAC3I,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAChI,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,oGAAoG;IACpG,qGAAqG;IACrG,sGAAsG;IACtG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QAChE,MAAM,GAAG,GAAG,OAAO,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,CAAC;QAC/B,mFAAmF;QACnF,0FAA0F;QAC1F,iGAAiG;QACjG,8FAA8F;QAC9F,2FAA2F;QAC3F,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpH,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iGAAiG,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3L,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,wBAAwB,GAAG,kBAAkB,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACpI,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,6FAA6F;YAC7F,gFAAgF;YAChF,MAAM,aAAa,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9E,IAAI,CAAC,aAAa,CAAC,EAAE;gBAAE,OAAO,aAAa,CAAC;YAC5C,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;YACjF,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,GAAG;gBACH,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,OAAO;gBAChB,QAAQ,EAAE,OAAO;oBACf,CAAC,CAAC,IAAI,GAAG,kDAAkD;oBAC3D,CAAC,CAAC,IAAI,GAAG,sEAAsE;aAClF,CAAC;QACJ,CAAC;QACD,8FAA8F;QAC9F,gGAAgG;QAChG,yEAAyE;QACzE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,qEAAqE,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC/J,CAAC;QACD,kGAAkG;QAClG,oEAAoE;QACpE,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;QAC7E,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,oGAAoG;IACpG,iGAAiG;IACjG,+FAA+F;IAC/F,6CAA6C;IAC7C,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QAC/D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,wFAAwF;QACxF,qFAAqF;QACrF,sDAAsD;QACtD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;YACtC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,uFAAuF,EAAE,CAAC;QACpJ,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;QACnC,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,iBAAiB;gBACzB,QAAQ,EAAE,+DAA+D,UAAU,CAAC,MAAM,qCAAqC;aAChI,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,0BAA0B,QAAQ,CAAC,KAAK,sBAAsB,EAAE,CAAC;QAC5H,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,2FAA2F;IAC3F,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;QACvE,MAAM,QAAQ,GAAG,OAAO,MAAM,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,MAAM,GAAG,OAAO,MAAM,EAAE,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;QACxG,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gDAAgD,EAAE,CAAC;QAC7G,CAAC;QACD,kBAAkB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzD,+BAA+B,EAAE,CAAC,CAAC,iEAAiE;QACpG,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A PUBLIC KEY IS BYTES. ITS HEX CASE IS NOT PART OF ITS IDENTITY.
|
|
3
|
+
*
|
|
4
|
+
* ─── The defect, from the operator's chair ─────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* You paste a counterparty's public key with any uppercase in it — which is what half the tools in
|
|
7
|
+
* the world hand you — and CELLO stores that string verbatim. From then on the address book holds a
|
|
8
|
+
* contact you can SEE in `cello_contacts` and that every behavioural read treats as a stranger:
|
|
9
|
+
*
|
|
10
|
+
* - `getTier` returns UNKNOWN, so the tighter inbound bounds apply and they are never auto-accepted;
|
|
11
|
+
* - `isKnown` is false, so they get the stranger wording;
|
|
12
|
+
* - a per-contact away message, a pet name, a trust-signal disclosure choice — all set against one
|
|
13
|
+
* spelling and read against the other, so none of them ever apply;
|
|
14
|
+
* - and **a key you BLOCKED in one spelling is unblocked in the other**, which is the direction
|
|
15
|
+
* that matters.
|
|
16
|
+
*
|
|
17
|
+
* Nothing errors, nothing logs, and the row is right there on screen. Found by review while ruling
|
|
18
|
+
* on `024-ORPHANTRIAGE`, which had worked around it locally with its own `lower(pubkey)` lookup
|
|
19
|
+
* rather than changing a predicate several callers depend on.
|
|
20
|
+
*
|
|
21
|
+
* ─── The fix is BOTH halves, and either alone leaves the bug ───────────────────────────────────
|
|
22
|
+
*
|
|
23
|
+
* 1. **Normalize at the accessor**, so a caller may pass either spelling and always reach one row —
|
|
24
|
+
* and so two spellings can never create two rows through the `(agent_id, pubkey)` primary key.
|
|
25
|
+
* 2. **Fold the rows that already exist**, because normalizing reads alone strands every mixed-case
|
|
26
|
+
* row already on an operator's disk: it becomes unreachable rather than merely wrong.
|
|
27
|
+
*
|
|
28
|
+
* ⚠️ **THE WIRE BOUNDARY STILL ACCEPTS EITHER SPELLING, DELIBERATELY.** `invalidPubkey` validates
|
|
29
|
+
* `[0-9a-fA-F]{64}`, and tightening it to lowercase would reject a key the operator pasted correctly
|
|
30
|
+
* from a tool that happens to upper-case. The answer is to accept what they paste and store one form,
|
|
31
|
+
* not to argue with them about capitals.
|
|
32
|
+
*/
|
|
33
|
+
import type { Logger } from "./types.js";
|
|
34
|
+
/** Minimal surface: what these two functions need from a SQLCipher handle. */
|
|
35
|
+
interface MigrationDb {
|
|
36
|
+
exec(sql: string): unknown;
|
|
37
|
+
prepare(sql: string): {
|
|
38
|
+
run(...params: unknown[]): {
|
|
39
|
+
changes: number | bigint;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The one spelling every contact-keyed table stores and every accessor compares against.
|
|
45
|
+
*
|
|
46
|
+
* Hex, so lowercase is the conventional form and the one `Buffer.toString("hex")` produces — which
|
|
47
|
+
* matters, because keys arriving from the wire come through that call and keys arriving from an
|
|
48
|
+
* operator's paste do not.
|
|
49
|
+
*/
|
|
50
|
+
export declare function normalizeContactPubkey(pubkey: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Fold every mixed-case contact row to one spelling. Idempotent; a no-op on a clean database.
|
|
53
|
+
*
|
|
54
|
+
* ⚠️ **ON A COLLISION THE MOST RESTRICTIVE SETTING WINS, and that is the whole reason this is not a
|
|
55
|
+
* two-line UPDATE.** When both spellings exist they are two halves of one relationship, and merging
|
|
56
|
+
* them by taking either one at random can silently UNBLOCK a key the operator blocked, or disclose a
|
|
57
|
+
* trust signal they withheld. `MIN` over the tier and over the disclosure flag makes the merge fail
|
|
58
|
+
* in the safe direction every time: BLOCKED(0) beats anything, withheld(0) beats presented(1).
|
|
59
|
+
*
|
|
60
|
+
* The operator can always loosen a setting afterwards; they cannot recover from a permission they
|
|
61
|
+
* did not know had been widened.
|
|
62
|
+
*/
|
|
63
|
+
export declare function foldContactPubkeyCase(db: MigrationDb, logger: Logger): void;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=contact-pubkey-case.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-pubkey-case.d.ts","sourceRoot":"","sources":["../src/contact-pubkey-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,8EAA8E;AAC9E,UAAU,WAAW;IACnB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CACnF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiG3E"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A PUBLIC KEY IS BYTES. ITS HEX CASE IS NOT PART OF ITS IDENTITY.
|
|
3
|
+
*
|
|
4
|
+
* ─── The defect, from the operator's chair ─────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* You paste a counterparty's public key with any uppercase in it — which is what half the tools in
|
|
7
|
+
* the world hand you — and CELLO stores that string verbatim. From then on the address book holds a
|
|
8
|
+
* contact you can SEE in `cello_contacts` and that every behavioural read treats as a stranger:
|
|
9
|
+
*
|
|
10
|
+
* - `getTier` returns UNKNOWN, so the tighter inbound bounds apply and they are never auto-accepted;
|
|
11
|
+
* - `isKnown` is false, so they get the stranger wording;
|
|
12
|
+
* - a per-contact away message, a pet name, a trust-signal disclosure choice — all set against one
|
|
13
|
+
* spelling and read against the other, so none of them ever apply;
|
|
14
|
+
* - and **a key you BLOCKED in one spelling is unblocked in the other**, which is the direction
|
|
15
|
+
* that matters.
|
|
16
|
+
*
|
|
17
|
+
* Nothing errors, nothing logs, and the row is right there on screen. Found by review while ruling
|
|
18
|
+
* on `024-ORPHANTRIAGE`, which had worked around it locally with its own `lower(pubkey)` lookup
|
|
19
|
+
* rather than changing a predicate several callers depend on.
|
|
20
|
+
*
|
|
21
|
+
* ─── The fix is BOTH halves, and either alone leaves the bug ───────────────────────────────────
|
|
22
|
+
*
|
|
23
|
+
* 1. **Normalize at the accessor**, so a caller may pass either spelling and always reach one row —
|
|
24
|
+
* and so two spellings can never create two rows through the `(agent_id, pubkey)` primary key.
|
|
25
|
+
* 2. **Fold the rows that already exist**, because normalizing reads alone strands every mixed-case
|
|
26
|
+
* row already on an operator's disk: it becomes unreachable rather than merely wrong.
|
|
27
|
+
*
|
|
28
|
+
* ⚠️ **THE WIRE BOUNDARY STILL ACCEPTS EITHER SPELLING, DELIBERATELY.** `invalidPubkey` validates
|
|
29
|
+
* `[0-9a-fA-F]{64}`, and tightening it to lowercase would reject a key the operator pasted correctly
|
|
30
|
+
* from a tool that happens to upper-case. The answer is to accept what they paste and store one form,
|
|
31
|
+
* not to argue with them about capitals.
|
|
32
|
+
*/
|
|
33
|
+
import { extractErrorMessage } from "./error-message.js";
|
|
34
|
+
/**
|
|
35
|
+
* The one spelling every contact-keyed table stores and every accessor compares against.
|
|
36
|
+
*
|
|
37
|
+
* Hex, so lowercase is the conventional form and the one `Buffer.toString("hex")` produces — which
|
|
38
|
+
* matters, because keys arriving from the wire come through that call and keys arriving from an
|
|
39
|
+
* operator's paste do not.
|
|
40
|
+
*/
|
|
41
|
+
export function normalizeContactPubkey(pubkey) {
|
|
42
|
+
return pubkey.toLowerCase();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Fold every mixed-case contact row to one spelling. Idempotent; a no-op on a clean database.
|
|
46
|
+
*
|
|
47
|
+
* ⚠️ **ON A COLLISION THE MOST RESTRICTIVE SETTING WINS, and that is the whole reason this is not a
|
|
48
|
+
* two-line UPDATE.** When both spellings exist they are two halves of one relationship, and merging
|
|
49
|
+
* them by taking either one at random can silently UNBLOCK a key the operator blocked, or disclose a
|
|
50
|
+
* trust signal they withheld. `MIN` over the tier and over the disclosure flag makes the merge fail
|
|
51
|
+
* in the safe direction every time: BLOCKED(0) beats anything, withheld(0) beats presented(1).
|
|
52
|
+
*
|
|
53
|
+
* The operator can always loosen a setting afterwards; they cannot recover from a permission they
|
|
54
|
+
* did not know had been widened.
|
|
55
|
+
*/
|
|
56
|
+
export function foldContactPubkeyCase(db, logger) {
|
|
57
|
+
db.exec("BEGIN");
|
|
58
|
+
try {
|
|
59
|
+
// ── contacts ──────────────────────────────────────────────────────────────────────────────
|
|
60
|
+
//
|
|
61
|
+
// Step 1 must run BEFORE the delete: once the duplicate is gone there is nothing left to take
|
|
62
|
+
// the restrictive value from.
|
|
63
|
+
const tightened = Number(db.prepare(`UPDATE contacts SET tier = (
|
|
64
|
+
SELECT MIN(COALESCE(c2.tier, 1)) FROM contacts c2
|
|
65
|
+
WHERE c2.agent_id = contacts.agent_id AND lower(c2.pubkey) = contacts.pubkey)
|
|
66
|
+
WHERE pubkey = lower(pubkey)
|
|
67
|
+
AND EXISTS (SELECT 1 FROM contacts c3
|
|
68
|
+
WHERE c3.agent_id = contacts.agent_id
|
|
69
|
+
AND lower(c3.pubkey) = contacts.pubkey
|
|
70
|
+
AND c3.pubkey <> contacts.pubkey)`).run().changes);
|
|
71
|
+
const droppedContacts = Number(db.prepare(`DELETE FROM contacts WHERE pubkey <> lower(pubkey)
|
|
72
|
+
AND EXISTS (SELECT 1 FROM contacts c2
|
|
73
|
+
WHERE c2.agent_id = contacts.agent_id AND c2.pubkey = lower(contacts.pubkey))`).run().changes);
|
|
74
|
+
const foldedContacts = Number(db.prepare("UPDATE contacts SET pubkey = lower(pubkey) WHERE pubkey <> lower(pubkey)").run().changes);
|
|
75
|
+
// ── contact_signal_prefs ──────────────────────────────────────────────────────────────────
|
|
76
|
+
//
|
|
77
|
+
// `present` is a disclosure choice, so 0 (withhold) is the restrictive value and wins the merge.
|
|
78
|
+
const tightenedPrefs = Number(db.prepare(`UPDATE contact_signal_prefs SET present = (
|
|
79
|
+
SELECT MIN(p2.present) FROM contact_signal_prefs p2
|
|
80
|
+
WHERE p2.agent_id = contact_signal_prefs.agent_id
|
|
81
|
+
AND lower(p2.contact_pubkey) = contact_signal_prefs.contact_pubkey
|
|
82
|
+
AND p2.signal_hash = contact_signal_prefs.signal_hash)
|
|
83
|
+
WHERE contact_pubkey = lower(contact_pubkey)
|
|
84
|
+
AND EXISTS (SELECT 1 FROM contact_signal_prefs p3
|
|
85
|
+
WHERE p3.agent_id = contact_signal_prefs.agent_id
|
|
86
|
+
AND lower(p3.contact_pubkey) = contact_signal_prefs.contact_pubkey
|
|
87
|
+
AND p3.signal_hash = contact_signal_prefs.signal_hash
|
|
88
|
+
AND p3.contact_pubkey <> contact_signal_prefs.contact_pubkey)`).run().changes);
|
|
89
|
+
db.prepare(`DELETE FROM contact_signal_prefs WHERE contact_pubkey <> lower(contact_pubkey)
|
|
90
|
+
AND EXISTS (SELECT 1 FROM contact_signal_prefs p2
|
|
91
|
+
WHERE p2.agent_id = contact_signal_prefs.agent_id
|
|
92
|
+
AND p2.contact_pubkey = lower(contact_signal_prefs.contact_pubkey)
|
|
93
|
+
AND p2.signal_hash = contact_signal_prefs.signal_hash)`).run();
|
|
94
|
+
const foldedPrefs = Number(db.prepare("UPDATE contact_signal_prefs SET contact_pubkey = lower(contact_pubkey) WHERE contact_pubkey <> lower(contact_pubkey)").run().changes);
|
|
95
|
+
// ── contact_rename_notices ────────────────────────────────────────────────────────────────
|
|
96
|
+
//
|
|
97
|
+
// A queued display notice, with nothing to merge: the lowercase row is kept and the duplicate
|
|
98
|
+
// dropped. Worst case the operator is offered a name once instead of twice.
|
|
99
|
+
db.prepare(`DELETE FROM contact_rename_notices WHERE pubkey <> lower(pubkey)
|
|
100
|
+
AND EXISTS (SELECT 1 FROM contact_rename_notices n2
|
|
101
|
+
WHERE n2.agent_id = contact_rename_notices.agent_id
|
|
102
|
+
AND n2.pubkey = lower(contact_rename_notices.pubkey))`).run();
|
|
103
|
+
const foldedNotices = Number(db.prepare("UPDATE contact_rename_notices SET pubkey = lower(pubkey) WHERE pubkey <> lower(pubkey)").run().changes);
|
|
104
|
+
db.exec("COMMIT");
|
|
105
|
+
// Silent on a clean database — this runs at every open, and a line per boot saying "nothing to
|
|
106
|
+
// do" is how a log stops being read.
|
|
107
|
+
if (foldedContacts + droppedContacts + foldedPrefs + foldedNotices > 0) {
|
|
108
|
+
logger.info("contacts.pubkey.case.folded", {
|
|
109
|
+
contacts: foldedContacts,
|
|
110
|
+
duplicatesMerged: droppedContacts,
|
|
111
|
+
tiersTightened: tightened,
|
|
112
|
+
signalPrefs: foldedPrefs,
|
|
113
|
+
signalPrefsTightened: tightenedPrefs,
|
|
114
|
+
renameNotices: foldedNotices,
|
|
115
|
+
impact: "contacts stored under a mixed-case public key were unreachable to every behavioural read — " +
|
|
116
|
+
"tier, away message, pet name and disclosure choice — and are now one row. Where both " +
|
|
117
|
+
"spellings existed, the more restrictive setting was kept.",
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
// SQLite may have already aborted the transaction; a failing ROLLBACK must not mask the cause.
|
|
123
|
+
try {
|
|
124
|
+
db.exec("ROLLBACK");
|
|
125
|
+
}
|
|
126
|
+
catch { /* the failing statement may have aborted it already */ }
|
|
127
|
+
logger.error("contacts.pubkey.case.fold.failed", {
|
|
128
|
+
reason: extractErrorMessage(err),
|
|
129
|
+
impact: "contacts stored under a mixed-case public key stay split across two rows, so a tier, block " +
|
|
130
|
+
"or away message set against one spelling does not apply to the other. Reads are still " +
|
|
131
|
+
"normalized, so a mixed-case row is now unreachable rather than merely wrong.",
|
|
132
|
+
});
|
|
133
|
+
throw err;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=contact-pubkey-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-pubkey-case.js","sourceRoot":"","sources":["../src/contact-pubkey-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQzD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAe,EAAE,MAAc;IACnE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,6FAA6F;QAC7F,EAAE;QACF,8FAA8F;QAC9F,8BAA8B;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CACjC;;;;;;;0DAOoD,CACrD,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CACvC;;oGAE8F,CAC/F,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CACtC,0EAA0E,CAC3E,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QAEjB,6FAA6F;QAC7F,EAAE;QACF,iGAAiG;QACjG,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CACtC;;;;;;;;;;sFAUgF,CACjF,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QACjB,EAAE,CAAC,OAAO,CACR;;;;+EAIyE,CAC1E,CAAC,GAAG,EAAE,CAAC;QACR,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CACnC,sHAAsH,CACvH,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QAEjB,6FAA6F;QAC7F,EAAE;QACF,8FAA8F;QAC9F,4EAA4E;QAC5E,EAAE,CAAC,OAAO,CACR;;;8EAGwE,CACzE,CAAC,GAAG,EAAE,CAAC;QACR,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CACrC,wFAAwF,CACzF,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QAEjB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElB,+FAA+F;QAC/F,qCAAqC;QACrC,IAAI,cAAc,GAAG,eAAe,GAAG,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;gBACzC,QAAQ,EAAE,cAAc;gBACxB,gBAAgB,EAAE,eAAe;gBACjC,cAAc,EAAE,SAAS;gBACzB,WAAW,EAAE,WAAW;gBACxB,oBAAoB,EAAE,cAAc;gBACpC,aAAa,EAAE,aAAa;gBAC5B,MAAM,EACJ,6FAA6F;oBAC7F,uFAAuF;oBACvF,2DAA2D;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,+FAA+F;QAC/F,IAAI,CAAC;YAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,uDAAuD,CAAC,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;YAC/C,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC;YAChC,MAAM,EACJ,6FAA6F;gBAC7F,wFAAwF;gBACxF,8EAA8E;SACjF,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|