@cello-protocol/daemon 0.0.225 → 0.0.227
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/package.json +5 -5
- package/dist/agent-admin-handlers.d.ts +0 -56
- package/dist/agent-admin-handlers.d.ts.map +0 -1
- package/dist/agent-admin-handlers.js +0 -73
- package/dist/agent-admin-handlers.js.map +0 -1
- package/dist/agent-handlers.d.ts +0 -72
- package/dist/agent-handlers.d.ts.map +0 -1
- package/dist/agent-handlers.js +0 -604
- package/dist/agent-handlers.js.map +0 -1
- package/dist/agent-id-migration.d.ts +0 -70
- package/dist/agent-id-migration.d.ts.map +0 -1
- package/dist/agent-id-migration.js +0 -468
- package/dist/agent-id-migration.js.map +0 -1
- package/dist/agent-loader.d.ts +0 -37
- package/dist/agent-loader.d.ts.map +0 -1
- package/dist/agent-loader.js +0 -37
- package/dist/agent-loader.js.map +0 -1
- package/dist/agent-selection-root.d.ts +0 -29
- package/dist/agent-selection-root.d.ts.map +0 -1
- package/dist/agent-selection-root.js +0 -126
- package/dist/agent-selection-root.js.map +0 -1
- package/dist/agent-selection.d.ts +0 -73
- package/dist/agent-selection.d.ts.map +0 -1
- package/dist/agent-selection.js +0 -80
- package/dist/agent-selection.js.map +0 -1
- package/dist/agent-settings-keys.d.ts +0 -52
- package/dist/agent-settings-keys.d.ts.map +0 -1
- package/dist/agent-settings-keys.js +0 -114
- package/dist/agent-settings-keys.js.map +0 -1
- package/dist/agent-state.d.ts +0 -67
- package/dist/agent-state.d.ts.map +0 -1
- package/dist/agent-state.js +0 -66
- package/dist/agent-state.js.map +0 -1
- package/dist/assignment-verify.d.ts +0 -90
- package/dist/assignment-verify.d.ts.map +0 -1
- package/dist/assignment-verify.js +0 -301
- package/dist/assignment-verify.js.map +0 -1
- package/dist/attendance-wiring.d.ts +0 -23
- package/dist/attendance-wiring.d.ts.map +0 -1
- package/dist/attendance-wiring.js +0 -248
- package/dist/attendance-wiring.js.map +0 -1
- package/dist/attestation-body.d.ts +0 -47
- package/dist/attestation-body.d.ts.map +0 -1
- package/dist/attestation-body.js +0 -71
- package/dist/attestation-body.js.map +0 -1
- package/dist/authorship-verification.d.ts +0 -91
- package/dist/authorship-verification.d.ts.map +0 -1
- package/dist/authorship-verification.js +0 -532
- package/dist/authorship-verification.js.map +0 -1
- package/dist/away-detection.d.ts +0 -139
- package/dist/away-detection.d.ts.map +0 -1
- package/dist/away-detection.js +0 -186
- package/dist/away-detection.js.map +0 -1
- package/dist/away-inbox-oneshot.d.ts +0 -40
- package/dist/away-inbox-oneshot.d.ts.map +0 -1
- package/dist/away-inbox-oneshot.js +0 -311
- package/dist/away-inbox-oneshot.js.map +0 -1
- package/dist/backup-restore-handlers.d.ts +0 -10
- package/dist/backup-restore-handlers.d.ts.map +0 -1
- package/dist/backup-restore-handlers.js +0 -82
- package/dist/backup-restore-handlers.js.map +0 -1
- package/dist/backup-restore.d.ts +0 -102
- package/dist/backup-restore.d.ts.map +0 -1
- package/dist/backup-restore.js +0 -341
- package/dist/backup-restore.js.map +0 -1
- package/dist/bin/cello-daemon.d.ts +0 -13
- package/dist/bin/cello-daemon.d.ts.map +0 -1
- package/dist/bin/cello-daemon.js.map +0 -1
- package/dist/boot-agents.d.ts +0 -64
- package/dist/boot-agents.d.ts.map +0 -1
- package/dist/boot-agents.js +0 -241
- package/dist/boot-agents.js.map +0 -1
- package/dist/boot-connection-state.d.ts +0 -38
- package/dist/boot-connection-state.d.ts.map +0 -1
- package/dist/boot-connection-state.js +0 -95
- package/dist/boot-connection-state.js.map +0 -1
- package/dist/boot-core.d.ts +0 -36
- package/dist/boot-core.d.ts.map +0 -1
- package/dist/boot-core.js +0 -293
- package/dist/boot-core.js.map +0 -1
- package/dist/boot-parked-content.d.ts +0 -34
- package/dist/boot-parked-content.d.ts.map +0 -1
- package/dist/boot-parked-content.js +0 -528
- package/dist/boot-parked-content.js.map +0 -1
- package/dist/boot-sweeps.d.ts +0 -22
- package/dist/boot-sweeps.d.ts.map +0 -1
- package/dist/boot-sweeps.js +0 -51
- package/dist/boot-sweeps.js.map +0 -1
- package/dist/bundled-consortium-manifest.d.ts +0 -47
- package/dist/bundled-consortium-manifest.d.ts.map +0 -1
- package/dist/bundled-consortium-manifest.js +0 -116
- package/dist/bundled-consortium-manifest.js.map +0 -1
- package/dist/cbor-blob-migration.d.ts +0 -8
- package/dist/cbor-blob-migration.d.ts.map +0 -1
- package/dist/cbor-blob-migration.js +0 -116
- package/dist/cbor-blob-migration.js.map +0 -1
- package/dist/challenge-verifier.d.ts +0 -12
- package/dist/challenge-verifier.d.ts.map +0 -1
- package/dist/challenge-verifier.js +0 -11
- package/dist/challenge-verifier.js.map +0 -1
- package/dist/close-commitment.d.ts +0 -67
- package/dist/close-commitment.d.ts.map +0 -1
- package/dist/close-commitment.js +0 -78
- package/dist/close-commitment.js.map +0 -1
- package/dist/close-session-handler.d.ts +0 -94
- package/dist/close-session-handler.d.ts.map +0 -1
- package/dist/close-session-handler.js +0 -1418
- package/dist/close-session-handler.js.map +0 -1
- package/dist/co-attendance.d.ts +0 -29
- package/dist/co-attendance.d.ts.map +0 -1
- package/dist/co-attendance.js +0 -32
- package/dist/co-attendance.js.map +0 -1
- package/dist/column-birth.d.ts +0 -40
- package/dist/column-birth.d.ts.map +0 -1
- package/dist/column-birth.js +0 -61
- package/dist/column-birth.js.map +0 -1
- package/dist/connect-or-start.d.ts +0 -25
- package/dist/connect-or-start.d.ts.map +0 -1
- package/dist/connect-or-start.js +0 -175
- package/dist/connect-or-start.js.map +0 -1
- package/dist/connection-agents.d.ts +0 -16
- package/dist/connection-agents.d.ts.map +0 -1
- package/dist/connection-agents.js +0 -68
- package/dist/connection-agents.js.map +0 -1
- package/dist/consent-migration.d.ts +0 -49
- package/dist/consent-migration.d.ts.map +0 -1
- package/dist/consent-migration.js +0 -128
- package/dist/consent-migration.js.map +0 -1
- package/dist/consortium-bootstrap.d.ts +0 -138
- package/dist/consortium-bootstrap.d.ts.map +0 -1
- package/dist/consortium-bootstrap.js +0 -339
- package/dist/consortium-bootstrap.js.map +0 -1
- package/dist/consortium-fingerprint.d.ts +0 -115
- package/dist/consortium-fingerprint.d.ts.map +0 -1
- package/dist/consortium-fingerprint.js +0 -175
- package/dist/consortium-fingerprint.js.map +0 -1
- package/dist/contact-handlers.d.ts +0 -59
- package/dist/contact-handlers.d.ts.map +0 -1
- package/dist/contact-handlers.js +0 -343
- package/dist/contact-handlers.js.map +0 -1
- package/dist/contact-pubkey-case.d.ts +0 -65
- package/dist/contact-pubkey-case.d.ts.map +0 -1
- package/dist/contact-pubkey-case.js +0 -136
- package/dist/contact-pubkey-case.js.map +0 -1
- package/dist/contacts-tier-migration.d.ts +0 -90
- package/dist/contacts-tier-migration.d.ts.map +0 -1
- package/dist/contacts-tier-migration.js +0 -150
- package/dist/contacts-tier-migration.js.map +0 -1
- package/dist/content-encryption-status.d.ts +0 -111
- package/dist/content-encryption-status.d.ts.map +0 -1
- package/dist/content-encryption-status.js +0 -158
- package/dist/content-encryption-status.js.map +0 -1
- package/dist/content-park-client.d.ts +0 -90
- package/dist/content-park-client.d.ts.map +0 -1
- package/dist/content-park-client.js +0 -362
- package/dist/content-park-client.js.map +0 -1
- package/dist/content-park.d.ts +0 -52
- package/dist/content-park.d.ts.map +0 -1
- package/dist/content-park.js +0 -1309
- package/dist/content-park.js.map +0 -1
- package/dist/cross-node-negotiation.d.ts +0 -44
- package/dist/cross-node-negotiation.d.ts.map +0 -1
- package/dist/cross-node-negotiation.js +0 -34
- package/dist/cross-node-negotiation.js.map +0 -1
- package/dist/daemon-handle.d.ts +0 -57
- package/dist/daemon-handle.d.ts.map +0 -1
- package/dist/daemon-handle.js +0 -2
- package/dist/daemon-handle.js.map +0 -1
- package/dist/daemon-status-report.d.ts +0 -50
- package/dist/daemon-status-report.d.ts.map +0 -1
- package/dist/daemon-status-report.js +0 -81
- package/dist/daemon-status-report.js.map +0 -1
- package/dist/daemon.d.ts +0 -45
- package/dist/daemon.d.ts.map +0 -1
- package/dist/daemon.js +0 -1177
- package/dist/daemon.js.map +0 -1
- package/dist/db-identity-store.d.ts +0 -159
- package/dist/db-identity-store.d.ts.map +0 -1
- package/dist/db-identity-store.js +0 -502
- package/dist/db-identity-store.js.map +0 -1
- package/dist/delivery-open-registry.d.ts +0 -92
- package/dist/delivery-open-registry.d.ts.map +0 -1
- package/dist/delivery-open-registry.js +0 -121
- package/dist/delivery-open-registry.js.map +0 -1
- package/dist/delivery-session-suspects.d.ts +0 -56
- package/dist/delivery-session-suspects.d.ts.map +0 -1
- package/dist/delivery-session-suspects.js +0 -94
- package/dist/delivery-session-suspects.js.map +0 -1
- package/dist/directory-auth-posture.d.ts +0 -87
- package/dist/directory-auth-posture.d.ts.map +0 -1
- package/dist/directory-auth-posture.js +0 -134
- package/dist/directory-auth-posture.js.map +0 -1
- package/dist/directory-bootstrap.d.ts +0 -310
- package/dist/directory-bootstrap.d.ts.map +0 -1
- package/dist/directory-bootstrap.js +0 -557
- package/dist/directory-bootstrap.js.map +0 -1
- package/dist/directory-connect.d.ts +0 -27
- package/dist/directory-connect.d.ts.map +0 -1
- package/dist/directory-connect.js +0 -106
- package/dist/directory-connect.js.map +0 -1
- package/dist/disconnect-cleanup.d.ts +0 -51
- package/dist/disconnect-cleanup.d.ts.map +0 -1
- package/dist/disconnect-cleanup.js +0 -72
- package/dist/disconnect-cleanup.js.map +0 -1
- package/dist/document-amendment-store.d.ts +0 -120
- package/dist/document-amendment-store.d.ts.map +0 -1
- package/dist/document-amendment-store.js +0 -266
- package/dist/document-amendment-store.js.map +0 -1
- package/dist/document-delivery-transport.d.ts +0 -168
- package/dist/document-delivery-transport.d.ts.map +0 -1
- package/dist/document-delivery-transport.js +0 -206
- package/dist/document-delivery-transport.js.map +0 -1
- package/dist/document-engine.d.ts +0 -134
- package/dist/document-engine.d.ts.map +0 -1
- package/dist/document-engine.js +0 -282
- package/dist/document-engine.js.map +0 -1
- package/dist/document-flag.d.ts +0 -58
- package/dist/document-flag.d.ts.map +0 -1
- package/dist/document-flag.js +0 -70
- package/dist/document-flag.js.map +0 -1
- package/dist/document-frame-router.d.ts +0 -245
- package/dist/document-frame-router.d.ts.map +0 -1
- package/dist/document-frame-router.js +0 -397
- package/dist/document-frame-router.js.map +0 -1
- package/dist/document-gate-wiring.d.ts +0 -61
- package/dist/document-gate-wiring.d.ts.map +0 -1
- package/dist/document-gate-wiring.js +0 -125
- package/dist/document-gate-wiring.js.map +0 -1
- package/dist/document-gate.d.ts +0 -149
- package/dist/document-gate.d.ts.map +0 -1
- package/dist/document-gate.js +0 -509
- package/dist/document-gate.js.map +0 -1
- package/dist/document-handlers.d.ts +0 -47
- package/dist/document-handlers.d.ts.map +0 -1
- package/dist/document-handlers.js +0 -2203
- package/dist/document-handlers.js.map +0 -1
- package/dist/document-handshake.d.ts +0 -176
- package/dist/document-handshake.d.ts.map +0 -1
- package/dist/document-handshake.js +0 -452
- package/dist/document-handshake.js.map +0 -1
- package/dist/document-inbound.d.ts +0 -162
- package/dist/document-inbound.d.ts.map +0 -1
- package/dist/document-inbound.js +0 -530
- package/dist/document-inbound.js.map +0 -1
- package/dist/document-json.d.ts +0 -120
- package/dist/document-json.d.ts.map +0 -1
- package/dist/document-json.js +0 -191
- package/dist/document-json.js.map +0 -1
- package/dist/document-layer.d.ts +0 -215
- package/dist/document-layer.d.ts.map +0 -1
- package/dist/document-layer.js +0 -1025
- package/dist/document-layer.js.map +0 -1
- package/dist/document-lifecycle.d.ts +0 -52
- package/dist/document-lifecycle.d.ts.map +0 -1
- package/dist/document-lifecycle.js +0 -134
- package/dist/document-lifecycle.js.map +0 -1
- package/dist/document-live-docs.d.ts +0 -58
- package/dist/document-live-docs.d.ts.map +0 -1
- package/dist/document-live-docs.js +0 -126
- package/dist/document-live-docs.js.map +0 -1
- package/dist/document-notify.d.ts +0 -228
- package/dist/document-notify.d.ts.map +0 -1
- package/dist/document-notify.js +0 -580
- package/dist/document-notify.js.map +0 -1
- package/dist/document-profile.d.ts +0 -61
- package/dist/document-profile.d.ts.map +0 -1
- package/dist/document-profile.js +0 -112
- package/dist/document-profile.js.map +0 -1
- package/dist/document-publish.d.ts +0 -87
- package/dist/document-publish.d.ts.map +0 -1
- package/dist/document-publish.js +0 -173
- package/dist/document-publish.js.map +0 -1
- package/dist/document-reachability.d.ts +0 -42
- package/dist/document-reachability.d.ts.map +0 -1
- package/dist/document-reachability.js +0 -80
- package/dist/document-reachability.js.map +0 -1
- package/dist/document-reconcile-engine.d.ts +0 -66
- package/dist/document-reconcile-engine.d.ts.map +0 -1
- package/dist/document-reconcile-engine.js +0 -225
- package/dist/document-reconcile-engine.js.map +0 -1
- package/dist/document-reconcile-scheduler.d.ts +0 -163
- package/dist/document-reconcile-scheduler.d.ts.map +0 -1
- package/dist/document-reconcile-scheduler.js +0 -303
- package/dist/document-reconcile-scheduler.js.map +0 -1
- package/dist/document-rejection.d.ts +0 -251
- package/dist/document-rejection.d.ts.map +0 -1
- package/dist/document-rejection.js +0 -435
- package/dist/document-rejection.js.map +0 -1
- package/dist/document-screen.d.ts +0 -114
- package/dist/document-screen.d.ts.map +0 -1
- package/dist/document-screen.js +0 -223
- package/dist/document-screen.js.map +0 -1
- package/dist/document-store.d.ts +0 -372
- package/dist/document-store.d.ts.map +0 -1
- package/dist/document-store.js +0 -931
- package/dist/document-store.js.map +0 -1
- package/dist/document-surface.d.ts +0 -32
- package/dist/document-surface.d.ts.map +0 -1
- package/dist/document-surface.js +0 -151
- package/dist/document-surface.js.map +0 -1
- package/dist/document-types.d.ts +0 -94
- package/dist/document-types.d.ts.map +0 -1
- package/dist/document-types.js +0 -90
- package/dist/document-types.js.map +0 -1
- package/dist/document-watch.d.ts +0 -69
- package/dist/document-watch.d.ts.map +0 -1
- package/dist/document-watch.js +0 -108
- package/dist/document-watch.js.map +0 -1
- package/dist/document-wiring.d.ts +0 -53
- package/dist/document-wiring.d.ts.map +0 -1
- package/dist/document-wiring.js +0 -323
- package/dist/document-wiring.js.map +0 -1
- package/dist/document-write-guard.d.ts +0 -66
- package/dist/document-write-guard.d.ts.map +0 -1
- package/dist/document-write-guard.js +0 -98
- package/dist/document-write-guard.js.map +0 -1
- package/dist/document-write-path.d.ts +0 -94
- package/dist/document-write-path.d.ts.map +0 -1
- package/dist/document-write-path.js +0 -530
- package/dist/document-write-path.js.map +0 -1
- package/dist/error-message.d.ts +0 -7
- package/dist/error-message.d.ts.map +0 -1
- package/dist/error-message.js +0 -19
- package/dist/error-message.js.map +0 -1
- package/dist/file-manifest-provider.d.ts +0 -37
- package/dist/file-manifest-provider.d.ts.map +0 -1
- package/dist/file-manifest-provider.js +0 -105
- package/dist/file-manifest-provider.js.map +0 -1
- package/dist/frame-values.d.ts +0 -3
- package/dist/frame-values.d.ts.map +0 -1
- package/dist/frame-values.js +0 -84
- package/dist/frame-values.js.map +0 -1
- package/dist/frontier-mismatch.d.ts +0 -73
- package/dist/frontier-mismatch.d.ts.map +0 -1
- package/dist/frontier-mismatch.js +0 -89
- package/dist/frontier-mismatch.js.map +0 -1
- package/dist/gateway-config-handlers.d.ts +0 -26
- package/dist/gateway-config-handlers.d.ts.map +0 -1
- package/dist/gateway-config-handlers.js +0 -429
- package/dist/gateway-config-handlers.js.map +0 -1
- package/dist/held-content.d.ts +0 -145
- package/dist/held-content.d.ts.map +0 -1
- package/dist/held-content.js +0 -389
- package/dist/held-content.js.map +0 -1
- package/dist/http-manifest-poll.d.ts +0 -67
- package/dist/http-manifest-poll.d.ts.map +0 -1
- package/dist/http-manifest-poll.js +0 -150
- package/dist/http-manifest-poll.js.map +0 -1
- package/dist/identity-migration.d.ts +0 -40
- package/dist/identity-migration.d.ts.map +0 -1
- package/dist/identity-migration.js +0 -461
- package/dist/identity-migration.js.map +0 -1
- package/dist/inbound-refusals.d.ts +0 -283
- package/dist/inbound-refusals.d.ts.map +0 -1
- package/dist/inbound-refusals.js +0 -919
- package/dist/inbound-refusals.js.map +0 -1
- package/dist/inbound-seal-request.d.ts +0 -32
- package/dist/inbound-seal-request.d.ts.map +0 -1
- package/dist/inbound-seal-request.js +0 -228
- package/dist/inbound-seal-request.js.map +0 -1
- package/dist/inbound-sessions.d.ts +0 -291
- package/dist/inbound-sessions.d.ts.map +0 -1
- package/dist/inbound-sessions.js +0 -1609
- package/dist/inbound-sessions.js.map +0 -1
- package/dist/inclusion-proof-handlers.d.ts +0 -43
- package/dist/inclusion-proof-handlers.d.ts.map +0 -1
- package/dist/inclusion-proof-handlers.js +0 -565
- package/dist/inclusion-proof-handlers.js.map +0 -1
- package/dist/inclusion-proof.d.ts +0 -151
- package/dist/inclusion-proof.d.ts.map +0 -1
- package/dist/inclusion-proof.js +0 -228
- package/dist/inclusion-proof.js.map +0 -1
- package/dist/index.d.ts +0 -32
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/initiate-session-handler.d.ts +0 -55
- package/dist/initiate-session-handler.d.ts.map +0 -1
- package/dist/initiate-session-handler.js +0 -310
- package/dist/initiate-session-handler.js.map +0 -1
- package/dist/ipc-client.d.ts +0 -31
- package/dist/ipc-client.d.ts.map +0 -1
- package/dist/ipc-client.js +0 -113
- package/dist/ipc-client.js.map +0 -1
- package/dist/ipc-server.d.ts +0 -63
- package/dist/ipc-server.d.ts.map +0 -1
- package/dist/ipc-server.js +0 -429
- package/dist/ipc-server.js.map +0 -1
- package/dist/ipc-surface.d.ts +0 -44
- package/dist/ipc-surface.d.ts.map +0 -1
- package/dist/ipc-surface.js +0 -107
- package/dist/ipc-surface.js.map +0 -1
- package/dist/line-lcs.d.ts +0 -51
- package/dist/line-lcs.d.ts.map +0 -1
- package/dist/line-lcs.js +0 -71
- package/dist/line-lcs.js.map +0 -1
- package/dist/lock-file.d.ts +0 -39
- package/dist/lock-file.d.ts.map +0 -1
- package/dist/lock-file.js +0 -120
- package/dist/lock-file.js.map +0 -1
- package/dist/log-collapse.d.ts +0 -66
- package/dist/log-collapse.d.ts.map +0 -1
- package/dist/log-collapse.js +0 -244
- package/dist/log-collapse.js.map +0 -1
- package/dist/log-rotate.d.ts +0 -67
- package/dist/log-rotate.d.ts.map +0 -1
- package/dist/log-rotate.js +0 -134
- package/dist/log-rotate.js.map +0 -1
- package/dist/manifest-deps.d.ts +0 -25
- package/dist/manifest-deps.d.ts.map +0 -1
- package/dist/manifest-deps.js +0 -151
- package/dist/manifest-deps.js.map +0 -1
- package/dist/manifest-poll-scheduler.d.ts +0 -31
- package/dist/manifest-poll-scheduler.d.ts.map +0 -1
- package/dist/manifest-poll-scheduler.js +0 -59
- package/dist/manifest-poll-scheduler.js.map +0 -1
- package/dist/manifest-validity.d.ts +0 -153
- package/dist/manifest-validity.d.ts.map +0 -1
- package/dist/manifest-validity.js +0 -268
- package/dist/manifest-validity.js.map +0 -1
- package/dist/manifest-version-store-db.d.ts +0 -24
- package/dist/manifest-version-store-db.d.ts.map +0 -1
- package/dist/manifest-version-store-db.js +0 -58
- package/dist/manifest-version-store-db.js.map +0 -1
- package/dist/manifest-version-store.d.ts +0 -16
- package/dist/manifest-version-store.d.ts.map +0 -1
- package/dist/manifest-version-store.js +0 -15
- package/dist/manifest-version-store.js.map +0 -1
- package/dist/network-directory-node.d.ts +0 -136
- package/dist/network-directory-node.d.ts.map +0 -1
- package/dist/network-directory-node.js +0 -810
- package/dist/network-directory-node.js.map +0 -1
- package/dist/nonce-dedup.d.ts +0 -68
- package/dist/nonce-dedup.d.ts.map +0 -1
- package/dist/nonce-dedup.js +0 -205
- package/dist/nonce-dedup.js.map +0 -1
- package/dist/notification-dispatcher.d.ts +0 -92
- package/dist/notification-dispatcher.d.ts.map +0 -1
- package/dist/notification-dispatcher.js +0 -210
- package/dist/notification-dispatcher.js.map +0 -1
- package/dist/notification-handlers.d.ts +0 -53
- package/dist/notification-handlers.d.ts.map +0 -1
- package/dist/notification-handlers.js +0 -461
- package/dist/notification-handlers.js.map +0 -1
- package/dist/onboarding-guidance.d.ts +0 -79
- package/dist/onboarding-guidance.d.ts.map +0 -1
- package/dist/onboarding-guidance.js +0 -95
- package/dist/onboarding-guidance.js.map +0 -1
- package/dist/operator-guidance.d.ts +0 -25
- package/dist/operator-guidance.d.ts.map +0 -1
- package/dist/operator-guidance.js +0 -50
- package/dist/operator-guidance.js.map +0 -1
- package/dist/orphan-triage.d.ts +0 -130
- package/dist/orphan-triage.d.ts.map +0 -1
- package/dist/orphan-triage.js +0 -207
- package/dist/orphan-triage.js.map +0 -1
- package/dist/outbound-sessions.d.ts +0 -126
- package/dist/outbound-sessions.d.ts.map +0 -1
- package/dist/outbound-sessions.js +0 -1052
- package/dist/outbound-sessions.js.map +0 -1
- package/dist/park-envelope.d.ts +0 -329
- package/dist/park-envelope.d.ts.map +0 -1
- package/dist/park-envelope.js +0 -509
- package/dist/park-envelope.js.map +0 -1
- package/dist/park-recovery.d.ts +0 -273
- package/dist/park-recovery.d.ts.map +0 -1
- package/dist/park-recovery.js +0 -717
- package/dist/park-recovery.js.map +0 -1
- package/dist/park-refusals.d.ts +0 -147
- package/dist/park-refusals.d.ts.map +0 -1
- package/dist/park-refusals.js +0 -331
- package/dist/park-refusals.js.map +0 -1
- package/dist/quarantine-framing.d.ts +0 -92
- package/dist/quarantine-framing.d.ts.map +0 -1
- package/dist/quarantine-framing.js +0 -111
- package/dist/quarantine-framing.js.map +0 -1
- package/dist/reconnect-drain.d.ts +0 -22
- package/dist/reconnect-drain.d.ts.map +0 -1
- package/dist/reconnect-drain.js +0 -65
- package/dist/reconnect-drain.js.map +0 -1
- package/dist/recovered-position.d.ts +0 -14
- package/dist/recovered-position.d.ts.map +0 -1
- package/dist/recovered-position.js +0 -59
- package/dist/recovered-position.js.map +0 -1
- package/dist/refusal-notices.d.ts +0 -196
- package/dist/refusal-notices.d.ts.map +0 -1
- package/dist/refusal-notices.js +0 -516
- package/dist/refusal-notices.js.map +0 -1
- package/dist/refusal-reasons.d.ts +0 -245
- package/dist/refusal-reasons.d.ts.map +0 -1
- package/dist/refusal-reasons.js +0 -363
- package/dist/refusal-reasons.js.map +0 -1
- package/dist/register-handler.d.ts +0 -36
- package/dist/register-handler.d.ts.map +0 -1
- package/dist/register-handler.js +0 -285
- package/dist/register-handler.js.map +0 -1
- package/dist/registration-context.d.ts +0 -72
- package/dist/registration-context.d.ts.map +0 -1
- package/dist/registration-context.js +0 -126
- package/dist/registration-context.js.map +0 -1
- package/dist/registration-manager.d.ts +0 -94
- package/dist/registration-manager.d.ts.map +0 -1
- package/dist/registration-manager.js +0 -585
- package/dist/registration-manager.js.map +0 -1
- package/dist/registration-persistence.d.ts +0 -183
- package/dist/registration-persistence.d.ts.map +0 -1
- package/dist/registration-persistence.js +0 -263
- package/dist/registration-persistence.js.map +0 -1
- package/dist/registry-poll.d.ts +0 -52
- package/dist/registry-poll.d.ts.map +0 -1
- package/dist/registry-poll.js +0 -140
- package/dist/registry-poll.js.map +0 -1
- package/dist/registry-version-store-db.d.ts +0 -22
- package/dist/registry-version-store-db.d.ts.map +0 -1
- package/dist/registry-version-store-db.js +0 -50
- package/dist/registry-version-store-db.js.map +0 -1
- package/dist/relay-endpoints.d.ts +0 -18
- package/dist/relay-endpoints.d.ts.map +0 -1
- package/dist/relay-endpoints.js +0 -9
- package/dist/relay-endpoints.js.map +0 -1
- package/dist/relay-only.d.ts +0 -140
- package/dist/relay-only.d.ts.map +0 -1
- package/dist/relay-only.js +0 -193
- package/dist/relay-only.js.map +0 -1
- package/dist/relay-receipt-store.d.ts +0 -155
- package/dist/relay-receipt-store.d.ts.map +0 -1
- package/dist/relay-receipt-store.js +0 -284
- package/dist/relay-receipt-store.js.map +0 -1
- package/dist/relay-reconnect.d.ts +0 -32
- package/dist/relay-reconnect.d.ts.map +0 -1
- package/dist/relay-reconnect.js +0 -29
- package/dist/relay-reconnect.js.map +0 -1
- package/dist/reply-lag.d.ts +0 -11
- package/dist/reply-lag.d.ts.map +0 -1
- package/dist/reply-lag.js +0 -46
- package/dist/reply-lag.js.map +0 -1
- package/dist/resolve-named-agent.d.ts +0 -49
- package/dist/resolve-named-agent.d.ts.map +0 -1
- package/dist/resolve-named-agent.js +0 -77
- package/dist/resolve-named-agent.js.map +0 -1
- package/dist/restart-seal-resolver.d.ts +0 -110
- package/dist/restart-seal-resolver.d.ts.map +0 -1
- package/dist/restart-seal-resolver.js +0 -353
- package/dist/restart-seal-resolver.js.map +0 -1
- package/dist/resume-last-seen.d.ts +0 -15
- package/dist/resume-last-seen.d.ts.map +0 -1
- package/dist/resume-last-seen.js +0 -44
- package/dist/resume-last-seen.js.map +0 -1
- package/dist/retry-queue.d.ts +0 -203
- package/dist/retry-queue.d.ts.map +0 -1
- package/dist/retry-queue.js +0 -701
- package/dist/retry-queue.js.map +0 -1
- package/dist/roster-freshness.d.ts +0 -160
- package/dist/roster-freshness.d.ts.map +0 -1
- package/dist/roster-freshness.js +0 -250
- package/dist/roster-freshness.js.map +0 -1
- package/dist/screening-status.d.ts +0 -15
- package/dist/screening-status.d.ts.map +0 -1
- package/dist/screening-status.js +0 -65
- package/dist/screening-status.js.map +0 -1
- package/dist/seal-carried-close.d.ts +0 -37
- package/dist/seal-carried-close.d.ts.map +0 -1
- package/dist/seal-carried-close.js +0 -179
- package/dist/seal-carried-close.js.map +0 -1
- package/dist/seal-certificate-pull.d.ts +0 -79
- package/dist/seal-certificate-pull.d.ts.map +0 -1
- package/dist/seal-certificate-pull.js +0 -186
- package/dist/seal-certificate-pull.js.map +0 -1
- package/dist/seal-certified-root-check.d.ts +0 -37
- package/dist/seal-certified-root-check.d.ts.map +0 -1
- package/dist/seal-certified-root-check.js +0 -127
- package/dist/seal-certified-root-check.js.map +0 -1
- package/dist/seal-coordinator.d.ts +0 -118
- package/dist/seal-coordinator.d.ts.map +0 -1
- package/dist/seal-coordinator.js +0 -927
- package/dist/seal-coordinator.js.map +0 -1
- package/dist/seal-escalation.d.ts +0 -80
- package/dist/seal-escalation.d.ts.map +0 -1
- package/dist/seal-escalation.js +0 -283
- package/dist/seal-escalation.js.map +0 -1
- package/dist/seal-evidence-root-check.d.ts +0 -70
- package/dist/seal-evidence-root-check.d.ts.map +0 -1
- package/dist/seal-evidence-root-check.js +0 -199
- package/dist/seal-evidence-root-check.js.map +0 -1
- package/dist/seal-failure-store.d.ts +0 -129
- package/dist/seal-failure-store.d.ts.map +0 -1
- package/dist/seal-failure-store.js +0 -173
- package/dist/seal-failure-store.js.map +0 -1
- package/dist/seal-flows.d.ts +0 -107
- package/dist/seal-flows.d.ts.map +0 -1
- package/dist/seal-flows.js +0 -638
- package/dist/seal-flows.js.map +0 -1
- package/dist/seal-frontier-verify.d.ts +0 -103
- package/dist/seal-frontier-verify.d.ts.map +0 -1
- package/dist/seal-frontier-verify.js +0 -143
- package/dist/seal-frontier-verify.js.map +0 -1
- package/dist/seal-leaf.d.ts +0 -58
- package/dist/seal-leaf.d.ts.map +0 -1
- package/dist/seal-leaf.js +0 -112
- package/dist/seal-leaf.js.map +0 -1
- package/dist/seal-legibility-tbs.d.ts +0 -25
- package/dist/seal-legibility-tbs.d.ts.map +0 -1
- package/dist/seal-legibility-tbs.js +0 -77
- package/dist/seal-legibility-tbs.js.map +0 -1
- package/dist/seal-local-terminus.d.ts +0 -41
- package/dist/seal-local-terminus.d.ts.map +0 -1
- package/dist/seal-local-terminus.js +0 -170
- package/dist/seal-local-terminus.js.map +0 -1
- package/dist/seal-receipt-upgrade.d.ts +0 -30
- package/dist/seal-receipt-upgrade.d.ts.map +0 -1
- package/dist/seal-receipt-upgrade.js +0 -49
- package/dist/seal-receipt-upgrade.js.map +0 -1
- package/dist/seal-relay-silence.d.ts +0 -51
- package/dist/seal-relay-silence.d.ts.map +0 -1
- package/dist/seal-relay-silence.js +0 -76
- package/dist/seal-relay-silence.js.map +0 -1
- package/dist/seal-settle.d.ts +0 -38
- package/dist/seal-settle.d.ts.map +0 -1
- package/dist/seal-settle.js +0 -33
- package/dist/seal-settle.js.map +0 -1
- package/dist/seal-upgrade.d.ts +0 -107
- package/dist/seal-upgrade.d.ts.map +0 -1
- package/dist/seal-upgrade.js +0 -200
- package/dist/seal-upgrade.js.map +0 -1
- package/dist/sealed-conversation.d.ts +0 -36
- package/dist/sealed-conversation.d.ts.map +0 -1
- package/dist/sealed-conversation.js +0 -171
- package/dist/sealed-conversation.js.map +0 -1
- package/dist/sealed-leaf-set.d.ts +0 -92
- package/dist/sealed-leaf-set.d.ts.map +0 -1
- package/dist/sealed-leaf-set.js +0 -122
- package/dist/sealed-leaf-set.js.map +0 -1
- package/dist/send-claims.d.ts +0 -56
- package/dist/send-claims.d.ts.map +0 -1
- package/dist/send-claims.js +0 -50
- package/dist/send-claims.js.map +0 -1
- package/dist/session-assignment-parser.d.ts +0 -98
- package/dist/session-assignment-parser.d.ts.map +0 -1
- package/dist/session-assignment-parser.js +0 -325
- package/dist/session-assignment-parser.js.map +0 -1
- package/dist/session-category.d.ts +0 -19
- package/dist/session-category.d.ts.map +0 -1
- package/dist/session-category.js +0 -14
- package/dist/session-category.js.map +0 -1
- package/dist/session-ceremony.d.ts +0 -297
- package/dist/session-ceremony.d.ts.map +0 -1
- package/dist/session-ceremony.js +0 -964
- package/dist/session-ceremony.js.map +0 -1
- package/dist/session-closed.d.ts +0 -79
- package/dist/session-closed.d.ts.map +0 -1
- package/dist/session-closed.js +0 -189
- package/dist/session-closed.js.map +0 -1
- package/dist/session-connection-gater.d.ts +0 -148
- package/dist/session-connection-gater.d.ts.map +0 -1
- package/dist/session-connection-gater.js +0 -332
- package/dist/session-connection-gater.js.map +0 -1
- package/dist/session-content-context.d.ts +0 -162
- package/dist/session-content-context.d.ts.map +0 -1
- package/dist/session-content-context.js +0 -2
- package/dist/session-content-context.js.map +0 -1
- package/dist/session-content-handlers.d.ts +0 -82
- package/dist/session-content-handlers.d.ts.map +0 -1
- package/dist/session-content-handlers.js +0 -1382
- package/dist/session-content-handlers.js.map +0 -1
- package/dist/session-content-ingest.d.ts +0 -206
- package/dist/session-content-ingest.d.ts.map +0 -1
- package/dist/session-content-ingest.js +0 -2167
- package/dist/session-content-ingest.js.map +0 -1
- package/dist/session-content-send.d.ts +0 -191
- package/dist/session-content-send.d.ts.map +0 -1
- package/dist/session-content-send.js +0 -1360
- package/dist/session-content-send.js.map +0 -1
- package/dist/session-delivery-acks.d.ts +0 -169
- package/dist/session-delivery-acks.d.ts.map +0 -1
- package/dist/session-delivery-acks.js +0 -569
- package/dist/session-delivery-acks.js.map +0 -1
- package/dist/session-ephemerals.d.ts +0 -279
- package/dist/session-ephemerals.d.ts.map +0 -1
- package/dist/session-ephemerals.js +0 -591
- package/dist/session-ephemerals.js.map +0 -1
- package/dist/session-leaf-records.d.ts +0 -159
- package/dist/session-leaf-records.d.ts.map +0 -1
- package/dist/session-leaf-records.js +0 -408
- package/dist/session-leaf-records.js.map +0 -1
- package/dist/session-lifecycle.d.ts +0 -303
- package/dist/session-lifecycle.d.ts.map +0 -1
- package/dist/session-lifecycle.js +0 -1679
- package/dist/session-lifecycle.js.map +0 -1
- package/dist/session-liveness.d.ts +0 -135
- package/dist/session-liveness.d.ts.map +0 -1
- package/dist/session-liveness.js +0 -347
- package/dist/session-liveness.js.map +0 -1
- package/dist/session-name.d.ts +0 -35
- package/dist/session-name.d.ts.map +0 -1
- package/dist/session-name.js +0 -60
- package/dist/session-name.js.map +0 -1
- package/dist/session-node-factory.d.ts +0 -18
- package/dist/session-node-factory.d.ts.map +0 -1
- package/dist/session-node-factory.js +0 -182
- package/dist/session-node-factory.js.map +0 -1
- package/dist/session-node-manager.d.ts +0 -875
- package/dist/session-node-manager.d.ts.map +0 -1
- package/dist/session-node-manager.js +0 -2995
- package/dist/session-node-manager.js.map +0 -1
- package/dist/session-node-types.d.ts +0 -1057
- package/dist/session-node-types.d.ts.map +0 -1
- package/dist/session-node-types.js +0 -657
- package/dist/session-node-types.js.map +0 -1
- package/dist/session-notify.d.ts +0 -46
- package/dist/session-notify.d.ts.map +0 -1
- package/dist/session-notify.js +0 -116
- package/dist/session-notify.js.map +0 -1
- package/dist/session-own-chain-store.d.ts +0 -65
- package/dist/session-own-chain-store.d.ts.map +0 -1
- package/dist/session-own-chain-store.js +0 -75
- package/dist/session-own-chain-store.js.map +0 -1
- package/dist/session-queries.d.ts +0 -476
- package/dist/session-queries.d.ts.map +0 -1
- package/dist/session-queries.js +0 -1007
- package/dist/session-queries.js.map +0 -1
- package/dist/session-read-handlers.d.ts +0 -87
- package/dist/session-read-handlers.d.ts.map +0 -1
- package/dist/session-read-handlers.js +0 -682
- package/dist/session-read-handlers.js.map +0 -1
- package/dist/session-records.d.ts +0 -341
- package/dist/session-records.d.ts.map +0 -1
- package/dist/session-records.js +0 -858
- package/dist/session-records.js.map +0 -1
- package/dist/session-relay-client.d.ts +0 -659
- package/dist/session-relay-client.d.ts.map +0 -1
- package/dist/session-relay-client.js +0 -2876
- package/dist/session-relay-client.js.map +0 -1
- package/dist/session-relay.d.ts +0 -397
- package/dist/session-relay.d.ts.map +0 -1
- package/dist/session-relay.js +0 -1636
- package/dist/session-relay.js.map +0 -1
- package/dist/session-salt-agreement.d.ts +0 -331
- package/dist/session-salt-agreement.d.ts.map +0 -1
- package/dist/session-salt-agreement.js +0 -472
- package/dist/session-salt-agreement.js.map +0 -1
- package/dist/session-salts.d.ts +0 -432
- package/dist/session-salts.d.ts.map +0 -1
- package/dist/session-salts.js +0 -1540
- package/dist/session-salts.js.map +0 -1
- package/dist/session-schema.d.ts +0 -30
- package/dist/session-schema.d.ts.map +0 -1
- package/dist/session-schema.js +0 -877
- package/dist/session-schema.js.map +0 -1
- package/dist/session-seal-leaf-store.d.ts +0 -70
- package/dist/session-seal-leaf-store.d.ts.map +0 -1
- package/dist/session-seal-leaf-store.js +0 -105
- package/dist/session-seal-leaf-store.js.map +0 -1
- package/dist/session-seal.d.ts +0 -334
- package/dist/session-seal.d.ts.map +0 -1
- package/dist/session-seal.js +0 -1017
- package/dist/session-seal.js.map +0 -1
- package/dist/session-terminal-refusal.d.ts +0 -65
- package/dist/session-terminal-refusal.d.ts.map +0 -1
- package/dist/session-terminal-refusal.js +0 -87
- package/dist/session-terminal-refusal.js.map +0 -1
- package/dist/session-tree.d.ts +0 -110
- package/dist/session-tree.d.ts.map +0 -1
- package/dist/session-tree.js +0 -144
- package/dist/session-tree.js.map +0 -1
- package/dist/session-views.d.ts +0 -47
- package/dist/session-views.d.ts.map +0 -1
- package/dist/session-views.js +0 -278
- package/dist/session-views.js.map +0 -1
- package/dist/signal-handlers.d.ts +0 -63
- package/dist/signal-handlers.d.ts.map +0 -1
- package/dist/signal-handlers.js +0 -980
- package/dist/signal-handlers.js.map +0 -1
- package/dist/signal-requirement-policy.d.ts +0 -51
- package/dist/signal-requirement-policy.d.ts.map +0 -1
- package/dist/signal-requirement-policy.js +0 -89
- package/dist/signal-requirement-policy.js.map +0 -1
- package/dist/signal-revocability.d.ts +0 -49
- package/dist/signal-revocability.d.ts.map +0 -1
- package/dist/signal-revocability.js +0 -93
- package/dist/signal-revocability.js.map +0 -1
- package/dist/signal-submission.d.ts +0 -181
- package/dist/signal-submission.d.ts.map +0 -1
- package/dist/signal-submission.js +0 -368
- package/dist/signal-submission.js.map +0 -1
- package/dist/signaling-connect.d.ts +0 -118
- package/dist/signaling-connect.d.ts.map +0 -1
- package/dist/signaling-connect.js +0 -538
- package/dist/signaling-connect.js.map +0 -1
- package/dist/signaling-wiring.d.ts +0 -105
- package/dist/signaling-wiring.d.ts.map +0 -1
- package/dist/signaling-wiring.js +0 -393
- package/dist/signaling-wiring.js.map +0 -1
- package/dist/singleton-lock.d.ts +0 -85
- package/dist/singleton-lock.d.ts.map +0 -1
- package/dist/singleton-lock.js +0 -219
- package/dist/singleton-lock.js.map +0 -1
- package/dist/sqlcipher-db.d.ts +0 -139
- package/dist/sqlcipher-db.d.ts.map +0 -1
- package/dist/sqlcipher-db.js +0 -357
- package/dist/sqlcipher-db.js.map +0 -1
- package/dist/standing-receivers.d.ts +0 -319
- package/dist/standing-receivers.d.ts.map +0 -1
- package/dist/standing-receivers.js +0 -1295
- package/dist/standing-receivers.js.map +0 -1
- package/dist/start-agent.d.ts +0 -64
- package/dist/start-agent.d.ts.map +0 -1
- package/dist/start-agent.js +0 -136
- package/dist/start-agent.js.map +0 -1
- package/dist/status-handler.d.ts +0 -54
- package/dist/status-handler.d.ts.map +0 -1
- package/dist/status-handler.js +0 -61
- package/dist/status-handler.js.map +0 -1
- package/dist/submission-retry.d.ts +0 -208
- package/dist/submission-retry.d.ts.map +0 -1
- package/dist/submission-retry.js +0 -506
- package/dist/submission-retry.js.map +0 -1
- package/dist/telegram-bot-client.d.ts +0 -34
- package/dist/telegram-bot-client.d.ts.map +0 -1
- package/dist/telegram-bot-client.js +0 -36
- package/dist/telegram-bot-client.js.map +0 -1
- package/dist/telegram-doorbell.d.ts +0 -38
- package/dist/telegram-doorbell.d.ts.map +0 -1
- package/dist/telegram-doorbell.js +0 -140
- package/dist/telegram-doorbell.js.map +0 -1
- package/dist/test-handlers.d.ts +0 -62
- package/dist/test-handlers.d.ts.map +0 -1
- package/dist/test-handlers.js +0 -240
- package/dist/test-handlers.js.map +0 -1
- package/dist/testing.d.ts +0 -10
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -10
- package/dist/testing.js.map +0 -1
- package/dist/transport-composition.d.ts +0 -31
- package/dist/transport-composition.d.ts.map +0 -1
- package/dist/transport-composition.js +0 -55
- package/dist/transport-composition.js.map +0 -1
- package/dist/transport-selector.d.ts +0 -202
- package/dist/transport-selector.d.ts.map +0 -1
- package/dist/transport-selector.js +0 -196
- package/dist/transport-selector.js.map +0 -1
- package/dist/trust-signal-pickup-listener.d.ts +0 -43
- package/dist/trust-signal-pickup-listener.d.ts.map +0 -1
- package/dist/trust-signal-pickup-listener.js +0 -48
- package/dist/trust-signal-pickup-listener.js.map +0 -1
- package/dist/trust-signal-store.d.ts +0 -406
- package/dist/trust-signal-store.d.ts.map +0 -1
- package/dist/trust-signal-store.js +0 -939
- package/dist/trust-signal-store.js.map +0 -1
- package/dist/trust-signal-sweep-tick.d.ts +0 -60
- package/dist/trust-signal-sweep-tick.d.ts.map +0 -1
- package/dist/trust-signal-sweep-tick.js +0 -101
- package/dist/trust-signal-sweep-tick.js.map +0 -1
- package/dist/trust-signal-sweep.d.ts +0 -94
- package/dist/trust-signal-sweep.d.ts.map +0 -1
- package/dist/trust-signal-sweep.js +0 -147
- package/dist/trust-signal-sweep.js.map +0 -1
- package/dist/type-registry.d.ts +0 -42
- package/dist/type-registry.d.ts.map +0 -1
- package/dist/type-registry.js +0 -37
- package/dist/type-registry.js.map +0 -1
- package/dist/types.d.ts +0 -746
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -20
- package/dist/types.js.map +0 -1
- package/dist/unresolved-nodes-report.d.ts +0 -14
- package/dist/unresolved-nodes-report.d.ts.map +0 -1
- package/dist/unresolved-nodes-report.js +0 -96
- package/dist/unresolved-nodes-report.js.map +0 -1
- package/dist/vocabulary.d.ts +0 -150
- package/dist/vocabulary.d.ts.map +0 -1
- package/dist/vocabulary.js +0 -386
- package/dist/vocabulary.js.map +0 -1
- package/dist/who-label.d.ts +0 -28
- package/dist/who-label.d.ts.map +0 -1
- package/dist/who-label.js +0 -31
- package/dist/who-label.js.map +0 -1
- package/dist/who-resolver.d.ts +0 -15
- package/dist/who-resolver.d.ts.map +0 -1
- package/dist/who-resolver.js +0 -47
- package/dist/who-resolver.js.map +0 -1
- package/dist/wire-content-hash.d.ts +0 -93
- package/dist/wire-content-hash.d.ts.map +0 -1
- package/dist/wire-content-hash.js +0 -116
- package/dist/wire-content-hash.js.map +0 -1
- package/dist/withheld-content.d.ts +0 -13
- package/dist/withheld-content.d.ts.map +0 -1
- package/dist/withheld-content.js +0 -46
- package/dist/withheld-content.js.map +0 -1
- package/dist/witness-alerts.d.ts +0 -40
- package/dist/witness-alerts.d.ts.map +0 -1
- package/dist/witness-alerts.js +0 -102
- package/dist/witness-alerts.js.map +0 -1
|
@@ -1,472 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE SALT AGREEMENT STATE MACHINE — `DOD-M15-SEALWIRE-1` bullet 6, part A.
|
|
3
|
-
* Decisions Carried #8 (both sides contribute, one salt per session, persisted) and #10 (a mismatch
|
|
4
|
-
* must be loud).
|
|
5
|
-
*
|
|
6
|
-
* ⚠️ PART A OF THE SALT WORK, AND THE SPLIT IS DELIBERATE. This module and its caller AGREE a salt
|
|
7
|
-
* and store it.
|
|
8
|
-
*
|
|
9
|
-
* **NO SENDER SALTS YET**, which is what makes an unanswered agreement free: a peer on an older
|
|
10
|
-
* build that never replies costs nothing today. (An earlier revision of this line said
|
|
11
|
-
* `wire-content-hash.ts` is untouched — that is no longer true. Part B1 shipped the RECEIVE half:
|
|
12
|
-
* it reads a `content_hash_alg` off the frame and can verify a salted hash. The outbound half, part
|
|
13
|
-
* B2, is what moves the send sites onto `saltedContentHash` and holds the first send until the salt
|
|
14
|
-
* is agreed — and from that moment an unanswered agreement IS a session that cannot send.)
|
|
15
|
-
*
|
|
16
|
-
* ─── The frame, and why exactly one field is present ───────────────────────────────────────────
|
|
17
|
-
*
|
|
18
|
-
* One frame type carries the whole agreement, and WHICH FIELD IS PRESENT IS THE SENDER'S STATE:
|
|
19
|
-
*
|
|
20
|
-
* `contribution` (32 bytes) → "I hold no salt for this session. Here is my half."
|
|
21
|
-
* `fingerprint` (8 bytes) → "I already hold a salt. Here is a one-way digest of it."
|
|
22
|
-
*
|
|
23
|
-
* Never both, never neither. That is not tidiness: a peer that sends both is claiming to be in two
|
|
24
|
-
* states at once, and whichever field this machine read first would decide the outcome — a sender
|
|
25
|
-
* that can pick the branch is a sender that can steer the agreement. Both malformed shapes are
|
|
26
|
-
* refused rather than resolved.
|
|
27
|
-
*
|
|
28
|
-
* ─── The four combinations ─────────────────────────────────────────────────────────────────────
|
|
29
|
-
*
|
|
30
|
-
* peer sent CONTRIBUTION peer sent FINGERPRINT
|
|
31
|
-
* we hold NO salt derive, persist, announce ours REPAIR: re-offer our half
|
|
32
|
-
* we HOLD a salt REPAIR: re-offer our half compare → confirmed | ✗ MISMATCH
|
|
33
|
-
* (✗ DIVERGENT if our half is gone)
|
|
34
|
-
*
|
|
35
|
-
* ⚠️ THE OFF-DIAGONAL CELLS USED TO FREEZE THE SESSION, AND THAT WAS WRONG — review F1, and the
|
|
36
|
-
* justification written here for it was **false**.
|
|
37
|
-
*
|
|
38
|
-
* It said the salt "cannot be repaired by retrying… neither party keeps the inputs once it has the
|
|
39
|
-
* output." We DO keep our input: `#saltContributions` holds our half for the life of the session
|
|
40
|
-
* node, and `deriveSessionSalt` sorts its two arguments — so a side that holds a salt can simply
|
|
41
|
-
* re-send its own half and the peer derives **byte-identical** bytes.
|
|
42
|
-
*
|
|
43
|
-
* That mattered because the off-diagonal is not the exotic state the old text described. It is
|
|
44
|
-
* reached by ANY of:
|
|
45
|
-
* - one side's connect-time announce failing (`#sendSaltFrame` logs and gives up until the next
|
|
46
|
-
* connect) while the other's lands;
|
|
47
|
-
* - one side's persist failing, so it re-offers a contribution while the other has stored one;
|
|
48
|
-
* - a teardown between the two derives.
|
|
49
|
-
* **A single dropped frame therefore destroyed a live session** — a refusal that breaks availability
|
|
50
|
-
* to defend a value nothing has consumed yet. Repairing costs one frame and always converges.
|
|
51
|
-
*
|
|
52
|
-
* The cell is genuinely unrepairable in exactly one case, and the code now CHECKS it rather than
|
|
53
|
-
* assuming it: we hold a salt read back from the row, and our half is **gone** — evicted by a
|
|
54
|
-
* teardown, or never in this process at all after a restart. `ownContribution` is `null` there, and
|
|
55
|
-
* only there, because the caller never mints a fresh half for a session that already has a salt.
|
|
56
|
-
* Minting one would be worse than freezing: the peer would derive a DIFFERENT salt from it and both
|
|
57
|
-
* sides would believe they had agreed.
|
|
58
|
-
*
|
|
59
|
-
* ─── Why a refusal, and why it has to be loud ──────────────────────────────────────────────────
|
|
60
|
-
*
|
|
61
|
-
* Decision #10 exists because a salt disagreement is the least debuggable failure this system can
|
|
62
|
-
* produce, and `wire-content-hash.ts`'s own header says why: the send SUCCEEDS, the sender's log
|
|
63
|
-
* says the frame left, and the receiver discards before anything about it is logged. It cost two
|
|
64
|
-
* live daemons to find once. Every branch here therefore ends in a decision — converge or stop —
|
|
65
|
-
* and never in "keep going and see".
|
|
66
|
-
*
|
|
67
|
-
* ─── Where the named reasons live, and why NOT in `refusal-reasons.ts` ─────────────────────────
|
|
68
|
-
*
|
|
69
|
-
* An earlier acceptance criterion of mine said to add these to `REFUSAL_REASONS`. That was wrong,
|
|
70
|
-
* and following it would have put them somewhere no caller could raise them: `recordRefusal`
|
|
71
|
-
* refuses an inbound session REQUEST — the decision made *before* a session exists, whose audience
|
|
72
|
-
* is `cello_inbox` and whose guidance is written for someone deciding whether to accept a stranger.
|
|
73
|
-
* A salt disagreement happens on an ESTABLISHED session, mid-flight, and its response is to tear
|
|
74
|
-
* that session down. Different moment, different reader, different verb.
|
|
75
|
-
*
|
|
76
|
-
* The shape is copied on purpose, because the shape is the part that was right: a CLOSED set of
|
|
77
|
-
* reasons plus a TOTAL guidance map, so a reason cannot be added without something for the operator
|
|
78
|
-
* to do. `refusal-reasons.ts` records what a free-form `reason: string` permitted — a new code
|
|
79
|
-
* slipping past every test in the milestone's own guard file — and this file inherits that lesson
|
|
80
|
-
* without inheriting its union.
|
|
81
|
-
*/
|
|
82
|
-
import { deriveSessionSalt, saltFingerprint, SALT_CONTRIBUTION_BYTES } from "@cello-protocol/crypto";
|
|
83
|
-
import { extractErrorMessage } from "./error-message.js";
|
|
84
|
-
function isAllZero(b) {
|
|
85
|
-
let acc = 0;
|
|
86
|
-
for (const x of b)
|
|
87
|
-
acc |= x;
|
|
88
|
-
return acc === 0;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* WHY a side cannot adopt — a wire value, so it is a named constant rather than a literal typed out
|
|
92
|
-
* at each site. Two refusals reach the same terminal state and want different operator responses:
|
|
93
|
-
* `already_hashing` is the session working as designed and the fix is to start a new one;
|
|
94
|
-
* `frontier_unreadable` is local storage trouble and starting a new session will not fix it.
|
|
95
|
-
*/
|
|
96
|
-
export const SALT_ADOPTION_LABELS = {
|
|
97
|
-
ALREADY_HASHING: "already_hashing",
|
|
98
|
-
FRONTIER_UNREADABLE: "frontier_unreadable",
|
|
99
|
-
PEER_CLOSED_FIRST: "peer_closed_first",
|
|
100
|
-
/**
|
|
101
|
-
* The two sides cannot converge and both must stop — 006-CRYPTO finding 1.
|
|
102
|
-
*
|
|
103
|
-
* We hold no salt, the peer holds one, and it has answered our half with its fingerprint twice.
|
|
104
|
-
* A latched salt-holder never re-offers its half, so we can never derive; without this the two
|
|
105
|
-
* sides repair at each other for the life of the session.
|
|
106
|
-
*
|
|
107
|
-
* Closing adoption rather than freezing, because nothing has been hashed under the salt and there
|
|
108
|
-
* are no sender salts yet: Decision #8's terminal state is that both sides stay unsalted and both
|
|
109
|
-
* KNOW, which is exactly as verifiable as every session shipped before the salt existed. Freezing
|
|
110
|
-
* a healthy conversation to defend a value nothing has consumed is the defect review F1 removed.
|
|
111
|
-
*/
|
|
112
|
-
EXCHANGE_STALLED: "exchange_stalled",
|
|
113
|
-
};
|
|
114
|
-
/** The CLOSED set of reasons a salt disagreement stops a session. */
|
|
115
|
-
export const SALT_FREEZE_REASONS = {
|
|
116
|
-
/** Both sides hold a salt and the digests differ. */
|
|
117
|
-
FINGERPRINT_MISMATCH: "salt_fingerprint_mismatch",
|
|
118
|
-
/** We hold a salt and our own half is gone, so the peer cannot be brought back to it. */
|
|
119
|
-
STATE_DIVERGENT: "salt_state_divergent",
|
|
120
|
-
/** The peer's contribution was all-zero, the wrong length, or our own echoed back. */
|
|
121
|
-
CONTRIBUTION_DEGENERATE: "salt_contribution_degenerate",
|
|
122
|
-
/**
|
|
123
|
-
* OUR OWN half is degenerate — a broken or patched random source on THIS machine.
|
|
124
|
-
*
|
|
125
|
-
* Separate from `CONTRIBUTION_DEGENERATE` because the two send the operator to different places,
|
|
126
|
-
* and collapsing them undid a fix one layer down (review F3). `session-salt.ts` deliberately
|
|
127
|
-
* refuses our own all-zero half with *"this is a LOCAL defect… not something the peer did"*,
|
|
128
|
-
* precisely so the operator whose machine is broken is not told their counterparty did it — and
|
|
129
|
-
* mapping both throws to one peer-blaming reason handed that accusation straight back.
|
|
130
|
-
*/
|
|
131
|
-
OWN_CONTRIBUTION_DEGENERATE: "salt_own_contribution_degenerate",
|
|
132
|
-
/** The frame carried both fields or neither, so the sender's state is unreadable. */
|
|
133
|
-
FRAME_MALFORMED: "salt_frame_malformed",
|
|
134
|
-
};
|
|
135
|
-
/**
|
|
136
|
-
* What the operator should DO, per reason. Typed as a TOTAL map, so a reason added without guidance
|
|
137
|
-
* fails to compile.
|
|
138
|
-
*
|
|
139
|
-
* ⚠️ EVERY VERB HERE MUST BE ONE THE READER CAN PERFORM. A frozen session is not retryable — that
|
|
140
|
-
* is what freezing means — so none of these may say "try again on this session". The move is always
|
|
141
|
-
* a NEW session, and for the divergent cases it is worth saying plainly that nothing is broken and
|
|
142
|
-
* nobody did anything wrong: one side's record simply did not survive.
|
|
143
|
-
*/
|
|
144
|
-
export const SALT_FREEZE_GUIDANCE = {
|
|
145
|
-
[SALT_FREEZE_REASONS.FINGERPRINT_MISMATCH]: "STOPPED ON PURPOSE. You and your counterparty ended up with different values for this " +
|
|
146
|
-
"session's content salt, so from here every message either of you sent would be discarded by " +
|
|
147
|
-
"the other with nothing said about it. Nothing was lost and nothing was tampered with. Two " +
|
|
148
|
-
"things cause it: one of you is running an older build, or one side restarted midway through " +
|
|
149
|
-
"opening the session and came back without the half it had already sent. Check the log for " +
|
|
150
|
-
"session.salt.persist.failed or session.salt.announce.failed on either machine — if you see " +
|
|
151
|
-
"one, it was the restart and there is nothing to fix. Otherwise compare versions. Either way, " +
|
|
152
|
-
"start a new session.",
|
|
153
|
-
[SALT_FREEZE_REASONS.STATE_DIVERGENT]: "STOPPED ON PURPOSE. This side holds the session's content salt but no longer holds the random " +
|
|
154
|
-
"half it was built from, so your counterparty — who is starting the agreement over — cannot be " +
|
|
155
|
-
"brought back to the same value. This happens when a daemon restarts after the salt was stored " +
|
|
156
|
-
"but before both sides had confirmed it. Nothing is broken and neither of you did anything " +
|
|
157
|
-
"wrong. Start a new session; the transcript of this one is unaffected and still readable.",
|
|
158
|
-
[SALT_FREEZE_REASONS.OWN_CONTRIBUTION_DEGENERATE]: "STOPPED ON PURPOSE, AND THE PROBLEM IS ON THIS MACHINE — not your counterparty's. The random " +
|
|
159
|
-
"half this side generated for the session's content salt came out empty or the wrong size, " +
|
|
160
|
-
"which means the random source this daemon is using is broken or has been modified. Do not " +
|
|
161
|
-
"raise this with your counterparty; they did nothing. Check this machine's CELLO build and its " +
|
|
162
|
-
"system random source before opening another session, because every session it opens has the " +
|
|
163
|
-
"same defect.",
|
|
164
|
-
[SALT_FREEZE_REASONS.CONTRIBUTION_DEGENERATE]: "STOPPED ON PURPOSE. Your counterparty's half of this session's content salt was empty, the " +
|
|
165
|
-
"wrong size, or a copy of your own. Accepting it would have meant one side alone deciding a " +
|
|
166
|
-
"value whose entire purpose is that neither side can — and the effect would be that anyone " +
|
|
167
|
-
"relaying your messages could confirm guesses at what short ones said. This can be a broken or " +
|
|
168
|
-
"modified build on their side, so raise it with them OUT OF BAND before opening a new session.",
|
|
169
|
-
[SALT_FREEZE_REASONS.FRAME_MALFORMED]: "STOPPED ON PURPOSE. Your counterparty's salt-agreement message did not say which state they " +
|
|
170
|
-
"were in — it claimed both at once, or neither — so there was no way to answer it that was not " +
|
|
171
|
-
"a guess. Nothing was accepted. A build mismatch is the ordinary cause; confirm what they are " +
|
|
172
|
-
"running, then start a new session.",
|
|
173
|
-
};
|
|
174
|
-
/**
|
|
175
|
-
* The longest `adoptionClosed` label this build will read — 006-CRYPTO finding 6.
|
|
176
|
-
*
|
|
177
|
-
* Every label CELLO sends is under twenty characters. The cap is not about memory; it is about a
|
|
178
|
-
* peer-chosen string reaching an operator inside a sentence that reads as CELLO's own diagnosis.
|
|
179
|
-
*/
|
|
180
|
-
export const SALT_ADOPTION_LABEL_MAX = 64;
|
|
181
|
-
const KNOWN_ADOPTION_LABELS = new Set(Object.values(SALT_ADOPTION_LABELS));
|
|
182
|
-
/** Space, the lowest printable code point. Anything below it is a control character. */
|
|
183
|
-
const FIRST_PRINTABLE = 0x20;
|
|
184
|
-
/** DEL, and the C1 control block that follows it. */
|
|
185
|
-
const DEL = 0x7f;
|
|
186
|
-
const LAST_C1 = 0x9f;
|
|
187
|
-
/**
|
|
188
|
-
* RENDER A PEER-SUPPLIED LABEL — 006-CRYPTO finding 6.
|
|
189
|
-
*
|
|
190
|
-
* The peer chooses these bytes, and they were interpolated straight into a `detail` the operator
|
|
191
|
-
* reads. Measured: a label containing newlines produced a detail carrying what looked like a second
|
|
192
|
-
* log line — `the counterparty cannot adopt a salt for this session (` then a blank line, then
|
|
193
|
-
* `session.salt.agreed reason=ok` — so a counterparty could write text that reads as CELLO
|
|
194
|
-
* reporting agreement at the exact moment it reported the opposite.
|
|
195
|
-
*
|
|
196
|
-
* A KNOWN label is rendered verbatim: it is our own vocabulary and the operator should see it. An
|
|
197
|
-
* unknown one is marked unrecognised and stripped of control characters, because the operator still
|
|
198
|
-
* needs to see WHAT was sent — `PEER_CLOSED_UNSPECIFIED`'s guidance sends them here to read it — but
|
|
199
|
-
* must not read it as our conclusion. Sanitising rather than dropping: a label we refuse to show at
|
|
200
|
-
* all is a diagnosis nobody can complete.
|
|
201
|
-
*
|
|
202
|
-
* Filtered by CODE POINT rather than by a regex character class, deliberately. Writing the class
|
|
203
|
-
* needs control characters in the source, and a raw NUL in a `.ts` file makes `grep` classify the
|
|
204
|
-
* whole file as binary and report no matches in it — which reads exactly like "this symbol is not
|
|
205
|
-
* used anywhere". This file paid for that lesson while the fix was being written.
|
|
206
|
-
*/
|
|
207
|
-
export function renderPeerAdoptionLabel(label) {
|
|
208
|
-
if (KNOWN_ADOPTION_LABELS.has(label))
|
|
209
|
-
return label;
|
|
210
|
-
const printable = Array.from(label)
|
|
211
|
-
.map((ch) => {
|
|
212
|
-
const cp = ch.codePointAt(0) ?? 0;
|
|
213
|
-
return cp < FIRST_PRINTABLE || (cp >= DEL && cp <= LAST_C1) ? " " : ch;
|
|
214
|
-
})
|
|
215
|
-
.join("")
|
|
216
|
-
.slice(0, SALT_ADOPTION_LABEL_MAX);
|
|
217
|
-
return `unrecognised reason, as sent: "${printable}"`;
|
|
218
|
-
}
|
|
219
|
-
function digestsEqual(a, b) {
|
|
220
|
-
if (a.length !== b.length)
|
|
221
|
-
return false;
|
|
222
|
-
return Buffer.from(a).equals(Buffer.from(b));
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* The frame this side should send, given its own state. Called on every counterparty connect, so it
|
|
226
|
-
* must be a pure function of the state and NOT mint anything.
|
|
227
|
-
*
|
|
228
|
-
* ⚠️ `ownContribution` IS MINTED ONCE PER SESSION BY THE CALLER, and this is where that requirement
|
|
229
|
-
* is visible. A fresh contribution per reconnect would have both sides re-deriving against a moving
|
|
230
|
-
* value, the fingerprints would never settle, and the symptom — a session that reconnects and still
|
|
231
|
-
* disagrees — reads as a network fault rather than a bug here.
|
|
232
|
-
*/
|
|
233
|
-
export function ownSaltFrame(state) {
|
|
234
|
-
if (state.ownSalt)
|
|
235
|
-
return { fingerprint: saltFingerprint(state.ownSalt) };
|
|
236
|
-
/**
|
|
237
|
-
* `null` — nothing to announce, and the caller must say so rather than invent a half.
|
|
238
|
-
*
|
|
239
|
-
* Review F15: `ownContribution` was typed non-null here, so the daemon satisfied it by calling
|
|
240
|
-
* the MINTING accessor — which minted for a session that already held a salt, on the one state
|
|
241
|
-
* `null` exists to name. Taking the nullable type is what forces the caller to pass `#saltState`
|
|
242
|
-
* and makes minting a decision rather than a side effect of a parameter list.
|
|
243
|
-
*
|
|
244
|
-
* Reaching here at all means we hold neither a salt nor a half, which `#saltState` does not
|
|
245
|
-
* produce; it is a real defect if seen, not a state to paper over with a fresh contribution.
|
|
246
|
-
*/
|
|
247
|
-
if (!state.ownContribution)
|
|
248
|
-
return null;
|
|
249
|
-
return { contribution: state.ownContribution };
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* `isTimingSafeEqual` was the name; constant time is NOT required here and never was.
|
|
253
|
-
*
|
|
254
|
-
* Review F13: nothing pinned the constant-time property and nothing needs it — both operands are
|
|
255
|
-
* 8-byte one-way digests that the two sides have already exchanged in the clear, so there is no
|
|
256
|
-
* secret for a timing signal to leak. A name asserting a property nothing checks is the same defect
|
|
257
|
-
* as a comment asserting one, so the name says what the function does instead.
|
|
258
|
-
*
|
|
259
|
-
* The LENGTH check is the load-bearing half and is pinned by a test: a differing width IS a
|
|
260
|
-
* disagreement, and comparing a common prefix would let two sides that agree on half their digest
|
|
261
|
-
* call it a match.
|
|
262
|
-
*/
|
|
263
|
-
/**
|
|
264
|
-
* OUR OWN half, checked before it is used — review F3.
|
|
265
|
-
*
|
|
266
|
-
* `deriveSessionSalt` refuses four conditions and TWO OF THEM ARE LOCAL: our own wrong length and
|
|
267
|
-
* our own all-zero. A single `catch` around it mapped all four to one peer-blaming reason, which
|
|
268
|
-
* handed the operator an out-of-band accusation of their counterparty for a broken RNG on their own
|
|
269
|
-
* machine — undoing, at the guidance layer, the exact fix `session-salt.ts` added for it.
|
|
270
|
-
*
|
|
271
|
-
* Checking here means the primitive's throw can only ever be about the PEER's half by the time it
|
|
272
|
-
* is caught. It also kills a mutant the tests could not see: swapping the two arguments in the
|
|
273
|
-
* derive call left every reason code and every message-regex passing while every degenerate refusal
|
|
274
|
-
* blamed the wrong party.
|
|
275
|
-
*/
|
|
276
|
-
function ownHalfDefect(ownContribution) {
|
|
277
|
-
if (ownContribution.length !== SALT_CONTRIBUTION_BYTES) {
|
|
278
|
-
return `our own salt contribution is ${ownContribution.length} bytes rather than ${SALT_CONTRIBUTION_BYTES}. This is a LOCAL defect, not something the peer did.`;
|
|
279
|
-
}
|
|
280
|
-
if (isAllZero(ownContribution)) {
|
|
281
|
-
return "our own salt contribution is all zeros, so this side contributed nothing. This is a LOCAL defect — a broken or patched random source — not something the peer did.";
|
|
282
|
-
}
|
|
283
|
-
return null;
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Decide what an inbound salt frame means. See the four-cell table in the header.
|
|
287
|
-
*
|
|
288
|
-
* `ownContribution` is `null` ONLY in the one state that cannot be repaired: we hold a salt read
|
|
289
|
-
* back from the row and the half it was built from is gone. The caller never mints a fresh half for
|
|
290
|
-
* a session that already has a salt — minting one would let us "repair" the peer onto a DIFFERENT
|
|
291
|
-
* salt, with both sides believing they had agreed.
|
|
292
|
-
*/
|
|
293
|
-
export function onPeerSaltFrame(state) {
|
|
294
|
-
const hasContribution = state.frame.contribution instanceof Uint8Array;
|
|
295
|
-
const hasFingerprint = state.frame.fingerprint instanceof Uint8Array;
|
|
296
|
-
const hasClosed = typeof state.frame.adoptionClosed === "string";
|
|
297
|
-
/**
|
|
298
|
-
* THE PEER HAS CLOSED ADOPTION — terminal for both, and it takes precedence over every other
|
|
299
|
-
* branch, including the malformed-shape check below. A peer that can never adopt is not offering a
|
|
300
|
-
* contribution and not comparing a fingerprint; there is nothing left to agree.
|
|
301
|
-
*
|
|
302
|
-
* We answer once IFF we have not already closed ourselves, so the exchange ends rather than
|
|
303
|
-
* echoing. Both sides then hold no salt and both KNOW it, which is the whole point — the failure
|
|
304
|
-
* this replaces was two sides reaching opposite verdicts with nothing on the wire saying so.
|
|
305
|
-
*/
|
|
306
|
-
if (hasClosed) {
|
|
307
|
-
return {
|
|
308
|
-
action: "adoption_closed",
|
|
309
|
-
// NOT "they have already hashed content" — that is only one of their two reasons, and the
|
|
310
|
-
// label they sent says which. Asserting the wrong one about a counterparty is how an operator
|
|
311
|
-
// ends up asking a peer to change something that was never the problem.
|
|
312
|
-
// RENDERED, not interpolated — 006-CRYPTO finding 6. The peer chooses this string, and it is
|
|
313
|
-
// landing inside a sentence the operator reads as ours.
|
|
314
|
-
detail: `the counterparty cannot adopt a salt for this session (${renderPeerAdoptionLabel(state.frame.adoptionClosed)}); neither side will use one`,
|
|
315
|
-
...(state.ownAdoption?.closed ? {} : { announce: { adoptionClosed: SALT_ADOPTION_LABELS.PEER_CLOSED_FIRST } }),
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* WE have closed adoption. Say so instead of deriving, whatever the peer sent — otherwise we
|
|
320
|
-
* refuse silently, they adopt, and every message they send afterwards is unverifiable here.
|
|
321
|
-
*
|
|
322
|
-
* ⚠️ `&& !state.ownSalt` — `DOD-M15-SALTSPLIT-1` review pass 1, HIGH-1. WITHOUT IT THIS BRANCH
|
|
323
|
-
* ANNOUNCES THAT WE HOLD NO SALT WHILE WE ARE HOLDING ONE.
|
|
324
|
-
*
|
|
325
|
-
* "Adoption closed" means *"I cannot adopt a NEW salt"*. It was being tested before `ownSalt`, so
|
|
326
|
-
* a side that had agreed salt S and then leafed a message answered a matching `fingerprint(S)`
|
|
327
|
-
* with `adoption_closed: already_hashing` — a frame the receiver reads as *"the peer has none"*.
|
|
328
|
-
* Once `SALTSPLIT-1` taught the receiver to discard on that frame, the receiver erased **its own
|
|
329
|
-
* copy of the same salt**, and a working session became one where every message is refused. The
|
|
330
|
-
* fix made things worse than the defect on that path, which is why the correction is here at the
|
|
331
|
-
* producer and not as a new check at each receiver.
|
|
332
|
-
*
|
|
333
|
-
* The rule underneath it: **a side that already HOLDS a salt has nothing to adopt, so the adoption
|
|
334
|
-
* question does not apply to it at all.** It falls through to the `state.ownSalt` block below,
|
|
335
|
-
* which answers a contribution with a repair and a fingerprint with match-or-mismatch — the
|
|
336
|
-
* correct answers for a salt-holder, and the ones it could never reach before.
|
|
337
|
-
*
|
|
338
|
-
* Deliberately NOT moved above the malformed-frame guard: the `ownSalt` block reads
|
|
339
|
-
* `hasContribution`/`hasFingerprint` and relies on exactly one of them being set.
|
|
340
|
-
*
|
|
341
|
-
* A legacy peer on an older build can still send the misleading frame, and a fixed side would
|
|
342
|
-
* still discard on it. Accepted rather than defended against with a wire field: we are pre-launch
|
|
343
|
-
* with no external installs, and the standing rule here is to re-derive against an empty database
|
|
344
|
-
* rather than carry compatibility for a state nobody is in.
|
|
345
|
-
*/
|
|
346
|
-
if (state.ownAdoption?.closed && !state.ownSalt) {
|
|
347
|
-
return {
|
|
348
|
-
action: "adoption_closed",
|
|
349
|
-
// The LABEL and the WHY, in that order: the label is the word an operator scans for, the why
|
|
350
|
-
// is the counts (or the error) behind it. A detail carrying only counts is unreadable, and one
|
|
351
|
-
// carrying only the label cannot be checked against the session it describes.
|
|
352
|
-
detail: `this side cannot adopt a salt for this session (${state.ownAdoption.label}: ${state.ownAdoption.why}), so no salt is adopted; telling the peer so they do not adopt one either`,
|
|
353
|
-
announce: { adoptionClosed: state.ownAdoption.label },
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
if (hasContribution === hasFingerprint) {
|
|
357
|
-
return {
|
|
358
|
-
action: "freeze",
|
|
359
|
-
reason: SALT_FREEZE_REASONS.FRAME_MALFORMED,
|
|
360
|
-
detail: hasContribution
|
|
361
|
-
? "the peer's salt frame carried BOTH a contribution and a fingerprint, so it claims to hold a salt and to be starting fresh at the same time; whichever field we read first would decide the outcome"
|
|
362
|
-
: "the peer's salt frame carried neither a contribution nor a fingerprint, so it says nothing about which state the peer is in",
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
if (state.ownSalt) {
|
|
366
|
-
if (hasContribution) {
|
|
367
|
-
// THE REPAIR (review F1). The peer is starting over; ours is a one-way function of two halves
|
|
368
|
-
// and `deriveSessionSalt` SORTS them, so re-sending our half lands them on byte-identical
|
|
369
|
-
// bytes. Freezing here destroyed live sessions over a single dropped frame.
|
|
370
|
-
if (!state.ownContribution) {
|
|
371
|
-
return {
|
|
372
|
-
action: "freeze",
|
|
373
|
-
reason: SALT_FREEZE_REASONS.STATE_DIVERGENT,
|
|
374
|
-
detail: "we hold this session's salt but no longer hold the half it was built from — a teardown or a restart evicted it — so the peer, who is starting over, cannot be brought back to the same value. " +
|
|
375
|
-
"Offering a freshly minted half instead would put them on a DIFFERENT salt with both sides believing they had agreed.",
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
if (state.alreadyRepairedAgainstPeerHalf) {
|
|
379
|
-
// TERMINATION (review F14). We have already sent our half in answer to this exact one; the
|
|
380
|
-
// peer is not short of it. Answering with our fingerprint instead makes their next step
|
|
381
|
-
// terminal — `confirmed` or `FINGERPRINT_MISMATCH` — instead of another contribution.
|
|
382
|
-
return {
|
|
383
|
-
action: "repair",
|
|
384
|
-
frame: { fingerprint: saltFingerprint(state.ownSalt) },
|
|
385
|
-
detail: "we have already answered this exact peer half with ours, so a second identical repair would loop; sending our fingerprint instead moves the peer to a terminal answer",
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
return {
|
|
389
|
-
action: "repair",
|
|
390
|
-
frame: { contribution: state.ownContribution },
|
|
391
|
-
detail: "the peer is starting the agreement over; re-sending our half lands them on the salt we already hold",
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
if (digestsEqual(saltFingerprint(state.ownSalt), state.frame.fingerprint)) {
|
|
395
|
-
return { action: "confirmed" };
|
|
396
|
-
}
|
|
397
|
-
return {
|
|
398
|
-
action: "freeze",
|
|
399
|
-
reason: SALT_FREEZE_REASONS.FINGERPRINT_MISMATCH,
|
|
400
|
-
// BOTH DIGESTS IN HEX (review F5). This printed only lengths, so in the ordinary case — two
|
|
401
|
-
// 8-byte digests that differ — the operator was told "ours is 8 bytes, theirs was 8", which
|
|
402
|
-
// reads as an equality. Both values are one-way, public, and already crossed the wire.
|
|
403
|
-
detail: `the peer's salt fingerprint does not match ours: ours ${Buffer.from(saltFingerprint(state.ownSalt)).toString("hex")}, ` +
|
|
404
|
-
`theirs ${Buffer.from(state.frame.fingerprint).toString("hex")}. Every message from here would be discarded unread by one side or the other.`,
|
|
405
|
-
// The peer holds everything needed to run this same comparison and has not been given our
|
|
406
|
-
// side of it. Without this it learns nothing — the session simply stops answering.
|
|
407
|
-
notifyPeer: { fingerprint: saltFingerprint(state.ownSalt) },
|
|
408
|
-
};
|
|
409
|
-
}
|
|
410
|
-
// From here we hold no salt, so we are going to use our own half — check it before the primitive
|
|
411
|
-
// does, so a local defect cannot be reported as the peer's (review F3).
|
|
412
|
-
if (!state.ownContribution) {
|
|
413
|
-
return {
|
|
414
|
-
action: "freeze",
|
|
415
|
-
reason: SALT_FREEZE_REASONS.OWN_CONTRIBUTION_DEGENERATE,
|
|
416
|
-
detail: "this side holds neither a salt nor a contribution for the session, so it has nothing to agree with",
|
|
417
|
-
};
|
|
418
|
-
}
|
|
419
|
-
const localDefect = ownHalfDefect(state.ownContribution);
|
|
420
|
-
if (localDefect) {
|
|
421
|
-
return { action: "freeze", reason: SALT_FREEZE_REASONS.OWN_CONTRIBUTION_DEGENERATE, detail: localDefect };
|
|
422
|
-
}
|
|
423
|
-
if (hasFingerprint) {
|
|
424
|
-
/**
|
|
425
|
-
* TERMINATION FOR THE SALTLESS SIDE — 006-CRYPTO finding 1, and it is F14's missing mirror.
|
|
426
|
-
*
|
|
427
|
-
* We have already answered this exact fingerprint with our half. A salt-holder that has latched
|
|
428
|
-
* our half (F14) answers every further offer with its fingerprint and NEVER re-offers its own —
|
|
429
|
-
* so we can never derive, and repairing again just buys another round trip. Two healthy daemons
|
|
430
|
-
* reach this after one failed persist plus a reconnect, and then trade frames for the life of
|
|
431
|
-
* the session, one new stream and one INFO line each per iteration.
|
|
432
|
-
*
|
|
433
|
-
* Closing adoption rather than freezing: nothing has been hashed under a salt on this side, no
|
|
434
|
-
* send site consumes one yet, and Decision #8's terminal state for "a side that cannot adopt" is
|
|
435
|
-
* that BOTH stay unsalted and both KNOW. Freezing a working conversation to defend a value
|
|
436
|
-
* nothing has consumed is precisely the defect review F1 removed.
|
|
437
|
-
*/
|
|
438
|
-
if (state.alreadyRepairedAgainstPeerFingerprint) {
|
|
439
|
-
return {
|
|
440
|
-
action: "adoption_closed",
|
|
441
|
-
detail: "we hold no salt and have already answered this exact peer fingerprint with our half; a peer that holds a salt does not re-offer its own, " +
|
|
442
|
-
"so this side can never derive it and repairing again would loop. Neither side will use a salt for this session.",
|
|
443
|
-
announce: { adoptionClosed: SALT_ADOPTION_LABELS.EXCHANGE_STALLED },
|
|
444
|
-
};
|
|
445
|
-
}
|
|
446
|
-
// THE MIRROR REPAIR. They hold a salt, we do not. Re-offering our half is what prompts them to
|
|
447
|
-
// send theirs back, and then we derive the value they already have. The FIRST one always
|
|
448
|
-
// happens — the latch above fires only on a repeat, or a saltless side would never ask at all.
|
|
449
|
-
return {
|
|
450
|
-
action: "repair",
|
|
451
|
-
frame: { contribution: state.ownContribution },
|
|
452
|
-
detail: "the peer already holds a salt and we do not; re-offering our half is what asks them for theirs",
|
|
453
|
-
};
|
|
454
|
-
}
|
|
455
|
-
try {
|
|
456
|
-
// The primitive owns every rule about the PEER's half — length, all-zero, reflection — and owns
|
|
457
|
-
// the WORDING too. Its refusals explain what a zero contribution means for both parties;
|
|
458
|
-
// replacing that with a code of our own would be exit-point substitution (Invariant 2),
|
|
459
|
-
// destroying the only explanation that exists at the only moment anyone will read it. Our own
|
|
460
|
-
// half was cleared above, so anything thrown here is about theirs.
|
|
461
|
-
const salt = deriveSessionSalt(state.ownContribution, state.frame.contribution);
|
|
462
|
-
return { action: "derive_and_announce", salt, fingerprint: saltFingerprint(salt) };
|
|
463
|
-
}
|
|
464
|
-
catch (err) {
|
|
465
|
-
return {
|
|
466
|
-
action: "freeze",
|
|
467
|
-
reason: SALT_FREEZE_REASONS.CONTRIBUTION_DEGENERATE,
|
|
468
|
-
detail: extractErrorMessage(err),
|
|
469
|
-
};
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
//# sourceMappingURL=session-salt-agreement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-salt-agreement.js","sourceRoot":"","sources":["../src/session-salt-agreement.ts"],"names":[],"mappings":"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"}
|