@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,585 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RegistrationManager — REG-001, ML-DSA keygen, DKG (daemon port).
|
|
3
|
-
*
|
|
4
|
-
* Ported from cello-client's RegistrationManager. Owns registration domain
|
|
5
|
-
* state (#registrationState, #mlDsaProvider). The only adaptation vs the client
|
|
6
|
-
* is the signaling seam: the client wrote directly to a raw persistent libp2p
|
|
7
|
-
* Stream, whereas the daemon's directory signaling lives behind SignalingManager.
|
|
8
|
-
* So RegistrationContext exposes `sendSignalingFrame` (→ SignalingManager.sendRaw,
|
|
9
|
-
* which CBOR/length-prefix-encodes internally) and `isSignalingConnected`, and a
|
|
10
|
-
* single daemon-owned inbound handler drives the pending dkg_ready/register
|
|
11
|
-
* resolvers (see DaemonRegistrationContext). The register() control flow is
|
|
12
|
-
* otherwise unchanged.
|
|
13
|
-
*/
|
|
14
|
-
import { randomUUID } from "node:crypto";
|
|
15
|
-
import { encodeCbor } from "@cello-protocol/protocol-types";
|
|
16
|
-
import { mlDsaKeygen, mlDsaKeygenWithBytes, FileMlDsaKeyProvider, buildKeyBindingTbs } from "@cello-protocol/crypto";
|
|
17
|
-
import { NetworkDirectoryNode, runNetworkDkg } from "./network-directory-node.js";
|
|
18
|
-
import { extractErrorMessage } from "./error-message.js";
|
|
19
|
-
const ADMIN_PUBKEY_HEX_RE = /^[0-9a-f]{64}$/;
|
|
20
|
-
export class RegistrationManager {
|
|
21
|
-
#ctx;
|
|
22
|
-
// Registration state owned by this manager
|
|
23
|
-
#registrationState = null;
|
|
24
|
-
#mlDsaProvider = null;
|
|
25
|
-
constructor(ctx) {
|
|
26
|
-
this.#ctx = ctx;
|
|
27
|
-
}
|
|
28
|
-
// ─── Public state accessors ──────────────────────────────────────────────────
|
|
29
|
-
getRegistrationState() {
|
|
30
|
-
return this.#registrationState;
|
|
31
|
-
}
|
|
32
|
-
setRegistrationState(state) {
|
|
33
|
-
this.#registrationState = state;
|
|
34
|
-
}
|
|
35
|
-
getMlDsaProvider() {
|
|
36
|
-
return this.#mlDsaProvider;
|
|
37
|
-
}
|
|
38
|
-
setMlDsaProvider(provider) {
|
|
39
|
-
this.#mlDsaProvider = provider;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* PERSIST-002 (SI-003/AC-005/AC-012): AWAIT every identity persist (was fire-and-forget) and
|
|
43
|
-
* report whether all succeeded. A failure is logged as persist.identity.persist.failed and turns
|
|
44
|
-
* the registration into an identity_persist_failed error — registration never reports success with
|
|
45
|
-
* an uncommitted identity. SI-001: the error message carries no secret (the persist methods never
|
|
46
|
-
* receive the secret in a loggable form here).
|
|
47
|
-
*/
|
|
48
|
-
async #persistAll(ops) {
|
|
49
|
-
try {
|
|
50
|
-
for (const op of ops)
|
|
51
|
-
await op();
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
this.#ctx.logger.error("persist.identity.persist.failed", {
|
|
56
|
-
error: extractErrorMessage(err),
|
|
57
|
-
});
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* The awaited identity-persist operations for a successful registration: the ML-DSA keypair (only
|
|
63
|
-
* when its secret blob is available) and ALWAYS the registration state. Registration state is never
|
|
64
|
-
* gated on the ml-dsa blob — so an agent is never left durably-unregistered when the blob is absent.
|
|
65
|
-
* Requires `this.#ctx.persistence` to be present (callers check).
|
|
66
|
-
*/
|
|
67
|
-
#identityPersistOps(state, mlDsaPubkeyHex, mlDsaSecretKeyBlob, keyBinding, channelOpts) {
|
|
68
|
-
const persistence = this.#ctx.persistence;
|
|
69
|
-
const ops = [];
|
|
70
|
-
if (mlDsaSecretKeyBlob) {
|
|
71
|
-
ops.push(() => persistence.persistMlDsaKeypair({ mlDsaPubkey: mlDsaPubkeyHex, secretKeyBlob: mlDsaSecretKeyBlob }));
|
|
72
|
-
}
|
|
73
|
-
ops.push(() => persistence.persistRegistrationState({
|
|
74
|
-
agentId: state.agent_id,
|
|
75
|
-
primaryPubkey: state.primary_pubkey,
|
|
76
|
-
mlDsaPubkey: state.ml_dsa_pubkey,
|
|
77
|
-
registeredAt: state.registered_at,
|
|
78
|
-
keyBinding,
|
|
79
|
-
// Only ever reached after #channelEchoed passed, so a persisted channel is one the directory
|
|
80
|
-
// recorded as a channel.
|
|
81
|
-
...(channelOpts ? { channel: true, adminPubkey: channelOpts.adminPubkeyHex } : {}),
|
|
82
|
-
}));
|
|
83
|
-
return ops;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* M16: a CHANNEL registration only counts when the directory says it stored a channel.
|
|
87
|
-
*
|
|
88
|
-
* ⚠️ NO SILENT DOWNGRADE. A directory that does not know the `channel` field ignores it and
|
|
89
|
-
* registers an ordinary agent. Accepting that answer would leave an identity this daemon treats as
|
|
90
|
-
* a channel and every directory treats as an agent that may converse, which nobody would notice.
|
|
91
|
-
* So a missing echo FAILS the registration: nothing persisted, nothing cached, one error event.
|
|
92
|
-
* This applies to every frame that ends a registration, including an `already_registered`
|
|
93
|
-
* answer, which hands back an existing profile without running a ceremony.
|
|
94
|
-
*
|
|
95
|
-
* Returns null when the registration may proceed, or the error to return verbatim.
|
|
96
|
-
*/
|
|
97
|
-
#channelEchoed(channelOpts, frame, correlationId, kLocalPubkeyHex) {
|
|
98
|
-
// Immutability, the other direction: the directory holds this identity as a channel, and this
|
|
99
|
-
// registration asked for an ordinary agent. Accepting it would record the channel locally as an
|
|
100
|
-
// agent that may converse.
|
|
101
|
-
if (!channelOpts) {
|
|
102
|
-
if (frame["channel"] !== true)
|
|
103
|
-
return null;
|
|
104
|
-
return {
|
|
105
|
-
error: "channel_fields_immutable",
|
|
106
|
-
detail: "The directory holds this identity as a broadcast channel, and a channel stays a channel. Register it with its channel settings, or use a different agent for ordinary conversations.",
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
if (frame["channel"] === true)
|
|
110
|
-
return null;
|
|
111
|
-
this.#ctx.logger.error("registration.channel.echo_missing", {
|
|
112
|
-
correlationId,
|
|
113
|
-
k_local_pubkey: kLocalPubkeyHex,
|
|
114
|
-
frameType: frame["type"],
|
|
115
|
-
impact: "a channel registration was answered without channel: true, so the directory did not record this identity as a channel; the registration failed and no registration state was persisted",
|
|
116
|
-
});
|
|
117
|
-
// A `register_success` means the directory has just STORED this identity, as an ordinary agent.
|
|
118
|
-
// Retrying cannot change that: every later attempt gets `already_registered`. An
|
|
119
|
-
// `already_registered` answer can mean the same, or nodes that predate channel support.
|
|
120
|
-
const detail = frame["type"] === "register_success"
|
|
121
|
-
? "The directory registered this identity as an ordinary agent, not a channel: its nodes do not support channels yet. That profile is now fixed, so this identity cannot become a channel. Once the directory supports channels, register the channel under a new identity."
|
|
122
|
-
: "The directory already holds this identity without a channel flag. Either it was registered as an ordinary agent, which cannot change, or the directory nodes do not support channels yet. Register the channel under a new identity once they do.";
|
|
123
|
-
return { error: "directory_missing_channel_support", detail };
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* 038-KEYBIND — sign the statement "this FROST group key is mine" with K_local.
|
|
127
|
-
*
|
|
128
|
-
* ⚠️ NEVER A RE-DKG. An agent that already exists holds both keys and can produce this on
|
|
129
|
-
* demand: K_local is on this machine and the group key is either just out of the DKG or handed
|
|
130
|
-
* back by the directory on `already_registered`. Key refresh preserves the group key
|
|
131
|
-
* (`session-ceremony.ts` aborts if the primary changes), so the binding is signed once for the
|
|
132
|
-
* life of the agent — which is why every path that learns a `primary_pubkey` mints one, rather
|
|
133
|
-
* than only the path that ran a ceremony.
|
|
134
|
-
*
|
|
135
|
-
* The signer is a key NO DIRECTORY HOLDS. That is the whole property: the directory carries this
|
|
136
|
-
* value to the counterparty and cannot forge it, cannot swap it, and cannot lift it onto another
|
|
137
|
-
* identity — the signed bytes name the K_local it belongs to as well as the group key.
|
|
138
|
-
*/
|
|
139
|
-
async #mintKeyBinding(kLocalPubkeyHex, primaryPubkeyHex) {
|
|
140
|
-
const tbs = buildKeyBindingTbs(new Uint8Array(Buffer.from(kLocalPubkeyHex, "hex")), new Uint8Array(Buffer.from(primaryPubkeyHex, "hex")));
|
|
141
|
-
return Buffer.from(await this.#ctx.keyProvider.sign(tbs)).toString("hex");
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* 038-KEYBIND review F4 — mint a binding ONLY over a group key this machine can corroborate.
|
|
145
|
-
*
|
|
146
|
-
* ⚠️ THE `already_registered` PATHS RUN NO CEREMONY, so the group key arrives in a directory's
|
|
147
|
-
* reply and there is nothing in that frame to check it against. Signing over it regardless is the
|
|
148
|
-
* defect this order exists to remove, relocated from the verify site to the mint site: K_local
|
|
149
|
-
* would be making a non-repudiable statement about a key chosen by the one party the binding is
|
|
150
|
-
* designed to take out of the trust path.
|
|
151
|
-
*
|
|
152
|
-
* The anchor this machine DOES hold is its FROST share. `commitments[0]` is the group key the
|
|
153
|
-
* DKG produced — computed here, from every participant's commitment — and it cannot be edited by
|
|
154
|
-
* a directory. So the answered key is checked against it, and only then signed over.
|
|
155
|
-
*
|
|
156
|
-
* ⚠️ NO SHARE IS A REFUSAL, not a licence to sign. An agent with no share cannot co-sign anything
|
|
157
|
-
* anyway; minting a binding for it would produce a proof that its group key is one it has no way
|
|
158
|
-
* to use, and the absent share is the fault worth reporting.
|
|
159
|
-
*
|
|
160
|
-
* Returns the binding, or the error the caller returns verbatim.
|
|
161
|
-
*/
|
|
162
|
-
async #mintCorroboratedKeyBinding(kLocalPubkeyHex, answeredPrimaryHex) {
|
|
163
|
-
const share = await this.#ctx.persistence?.loadActiveFrostKeyShare();
|
|
164
|
-
if (!share) {
|
|
165
|
-
this.#ctx.logger.error("registration.key_binding.no_share", {
|
|
166
|
-
agentPubkey: kLocalPubkeyHex,
|
|
167
|
-
impact: "the directory reports this agent already registered, but this machine holds no FROST share for it — so the threshold key in the reply could not be checked against anything local and no key binding was signed; nothing was persisted",
|
|
168
|
-
});
|
|
169
|
-
return {
|
|
170
|
-
ok: false,
|
|
171
|
-
error: "registration_share_missing",
|
|
172
|
-
detail: "The directory says this agent is already registered, but this machine holds no signing share for it — so it cannot take part in ceremonies and cannot vouch for its own threshold key. This usually means the agent was registered on a different device. Restore that device's backup, or remove this agent and register a new one.",
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
if (share.primaryPubkey.toLowerCase() !== answeredPrimaryHex.toLowerCase()) {
|
|
176
|
-
this.#ctx.logger.error("registration.primary_pubkey.mismatch", {
|
|
177
|
-
agentPubkey: kLocalPubkeyHex,
|
|
178
|
-
derivedPrefix: share.primaryPubkey.slice(0, 16),
|
|
179
|
-
answeredPrefix: answeredPrimaryHex.slice(0, 16),
|
|
180
|
-
impact: "the directory named a threshold group key other than the one this agent's own share belongs to; nothing was persisted and no key binding was signed, because signing one would have vouched for a key this agent cannot sign with",
|
|
181
|
-
});
|
|
182
|
-
return {
|
|
183
|
-
ok: false,
|
|
184
|
-
error: "registration_primary_pubkey_mismatch",
|
|
185
|
-
detail: "The directory named a different threshold key for this agent than the one its signing share belongs to. Nothing was saved. Retry registration; if it repeats, the node that answered is serving a profile that does not match this agent and cello status will show which one it was.",
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
return { ok: true, keyBinding: await this.#mintKeyBinding(kLocalPubkeyHex, answeredPrimaryHex) };
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Register this agent with the directory.
|
|
192
|
-
* REG-001: ML-DSA keygen → signaling stream → register_request → DKG → register_success.
|
|
193
|
-
*/
|
|
194
|
-
async register(phoneStub = "", preAuthToken, channelOpts) {
|
|
195
|
-
// Step 1: already registered
|
|
196
|
-
if (this.#registrationState) {
|
|
197
|
-
return { error: "already_registered" };
|
|
198
|
-
}
|
|
199
|
-
const correlationId = randomUUID();
|
|
200
|
-
// Step 2: generate or load ML-DSA-44 keypair
|
|
201
|
-
let mlDsaProvider;
|
|
202
|
-
let mlDsaSecretKeyBlob = null;
|
|
203
|
-
if (this.#ctx.mlDsaKeyFile) {
|
|
204
|
-
mlDsaProvider = await FileMlDsaKeyProvider.load(this.#ctx.mlDsaKeyFile);
|
|
205
|
-
}
|
|
206
|
-
else if (this.#ctx.persistence) {
|
|
207
|
-
const { provider, secretKeyBlob } = await mlDsaKeygenWithBytes();
|
|
208
|
-
mlDsaProvider = provider;
|
|
209
|
-
mlDsaSecretKeyBlob = secretKeyBlob;
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
mlDsaProvider = await mlDsaKeygen();
|
|
213
|
-
}
|
|
214
|
-
const mlDsaPubkey = await mlDsaProvider.getPublicKey();
|
|
215
|
-
const mlDsaPubkeyHex = Buffer.from(mlDsaPubkey).toString("hex");
|
|
216
|
-
// Step 3: require the directory signaling stream to be connected.
|
|
217
|
-
// (The daemon keeps it connected via SignalingManager; we don't open it here.)
|
|
218
|
-
if (!this.#ctx.isSignalingConnected()) {
|
|
219
|
-
return { error: "directory_unreachable" };
|
|
220
|
-
}
|
|
221
|
-
// Step 4: get K_local pubkey hex
|
|
222
|
-
if (!this.#ctx.getMyPubkeyHex()) {
|
|
223
|
-
const pubkey = await this.#ctx.keyProvider.getPublicKey();
|
|
224
|
-
this.#ctx.setMyPubkeyHex(Buffer.from(pubkey).toString("hex"));
|
|
225
|
-
}
|
|
226
|
-
const kLocalPubkeyHex = this.#ctx.getMyPubkeyHex();
|
|
227
|
-
// Step 4a (M16): a channel names its administrator, and cannot administer itself. Refused
|
|
228
|
-
// before anything reaches the directory.
|
|
229
|
-
if (channelOpts) {
|
|
230
|
-
if (!ADMIN_PUBKEY_HEX_RE.test(channelOpts.adminPubkeyHex)) {
|
|
231
|
-
return {
|
|
232
|
-
error: "invalid_channel_registration",
|
|
233
|
-
detail: "adminPubkeyHex must be exactly 64 lowercase hex characters (a 32-byte public key).",
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
if (channelOpts.adminPubkeyHex === kLocalPubkeyHex.toLowerCase()) {
|
|
237
|
-
return {
|
|
238
|
-
error: "invalid_channel_registration",
|
|
239
|
-
detail: "A channel cannot administer itself: adminPubkeyHex must be a different agent's public key.",
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
// Step 5: send register_request (SignalingManager CBOR/lp-encodes the frame)
|
|
244
|
-
// M8B quorum: include the nodeIds we can reach right now (our resolved roster) so the directory can
|
|
245
|
-
// pick the DKG quorum Q = these ∩ its manifest, |Q| ≥ T=majority(N). getConsortiumEndpoints() is
|
|
246
|
-
// null on the single-node back-compat path (no consortium manifest) → omit the field.
|
|
247
|
-
const reachableRoster = this.#ctx.getConsortiumEndpoints();
|
|
248
|
-
const reachableNodeIds = reachableRoster?.map((e) => e.nodeId);
|
|
249
|
-
const regSent = await this.#ctx.sendSignalingFrame({
|
|
250
|
-
type: "register_request",
|
|
251
|
-
phone_stub: phoneStub,
|
|
252
|
-
k_local_pubkey: kLocalPubkeyHex,
|
|
253
|
-
ml_dsa_pubkey: mlDsaPubkeyHex,
|
|
254
|
-
...(reachableNodeIds ? { reachable_node_ids: reachableNodeIds } : {}),
|
|
255
|
-
// M16: present only for a channel. An ordinary registration carries neither key — absent
|
|
256
|
-
// means not a channel, and there is no `channel: false` on the wire.
|
|
257
|
-
...(channelOpts ? { channel: true, admin_pubkey: channelOpts.adminPubkeyHex } : {}),
|
|
258
|
-
});
|
|
259
|
-
if (!regSent.ok) {
|
|
260
|
-
return { error: regSent.reason ?? "directory_unreachable" };
|
|
261
|
-
}
|
|
262
|
-
// Step 5a: await dkg_ready
|
|
263
|
-
const DKG_READY_TIMEOUT_MS = 15_000;
|
|
264
|
-
let dkgReadyTimeoutHandle;
|
|
265
|
-
const dkgReadyFrame = await Promise.race([
|
|
266
|
-
new Promise((resolve) => {
|
|
267
|
-
this.#ctx.setPendingDkgReadyResolve(resolve);
|
|
268
|
-
}),
|
|
269
|
-
new Promise((resolve) => {
|
|
270
|
-
dkgReadyTimeoutHandle = setTimeout(() => {
|
|
271
|
-
this.#ctx.setPendingDkgReadyResolve(null);
|
|
272
|
-
resolve({ type: "register_error", reason: "timeout" });
|
|
273
|
-
}, DKG_READY_TIMEOUT_MS);
|
|
274
|
-
}),
|
|
275
|
-
]);
|
|
276
|
-
clearTimeout(dkgReadyTimeoutHandle);
|
|
277
|
-
if (dkgReadyFrame["type"] !== "dkg_ready") {
|
|
278
|
-
const reason = dkgReadyFrame["reason"] ?? "unknown";
|
|
279
|
-
if (reason === "already_registered" &&
|
|
280
|
-
dkgReadyFrame["agent_id"] &&
|
|
281
|
-
dkgReadyFrame["primary_pubkey"]) {
|
|
282
|
-
const state = {
|
|
283
|
-
agent_id: dkgReadyFrame["agent_id"],
|
|
284
|
-
primary_pubkey: dkgReadyFrame["primary_pubkey"],
|
|
285
|
-
ml_dsa_pubkey: dkgReadyFrame["ml_dsa_pubkey"] ?? mlDsaPubkeyHex,
|
|
286
|
-
registered_at: Date.now(),
|
|
287
|
-
status: "active",
|
|
288
|
-
};
|
|
289
|
-
const echo = this.#channelEchoed(channelOpts, dkgReadyFrame, correlationId, kLocalPubkeyHex);
|
|
290
|
-
if (echo)
|
|
291
|
-
return echo;
|
|
292
|
-
// SI-003: persist BEFORE caching the in-memory registered state, so a persist failure does
|
|
293
|
-
// not leave a phantom "registered" manager (which would short-circuit a retry). Registration
|
|
294
|
-
// state is persisted whenever persistence is present — NOT gated on the ml-dsa blob (so an
|
|
295
|
-
// already_registered agent is never left durably-unregistered when the blob is absent).
|
|
296
|
-
if (this.#ctx.persistence) {
|
|
297
|
-
// 038-KEYBIND: no ceremony runs on this path, so the group key comes from the directory's
|
|
298
|
-
// reply — checked against this machine's own share before K_local signs over it (F4).
|
|
299
|
-
const minted = await this.#mintCorroboratedKeyBinding(kLocalPubkeyHex, state.primary_pubkey);
|
|
300
|
-
if (!minted.ok)
|
|
301
|
-
return { error: minted.error, detail: minted.detail };
|
|
302
|
-
const ok = await this.#persistAll(this.#identityPersistOps(state, mlDsaPubkeyHex, mlDsaSecretKeyBlob, minted.keyBinding, channelOpts));
|
|
303
|
-
if (!ok)
|
|
304
|
-
return { error: "identity_persist_failed" };
|
|
305
|
-
}
|
|
306
|
-
this.#registrationState = state;
|
|
307
|
-
this.#mlDsaProvider = mlDsaProvider;
|
|
308
|
-
return state;
|
|
309
|
-
}
|
|
310
|
-
return { error: reason };
|
|
311
|
-
}
|
|
312
|
-
// Step 5b: run real FROST DKG
|
|
313
|
-
const epochId = dkgReadyFrame["epochId"];
|
|
314
|
-
const participants = dkgReadyFrame["participants"];
|
|
315
|
-
const threshold = dkgReadyFrame["threshold"];
|
|
316
|
-
// getNode() may be null even when signaling reads connected (brief
|
|
317
|
-
// stream-death window) — null-check before FROST DKG opens streams on it.
|
|
318
|
-
const dkgNode = this.#ctx.getNode();
|
|
319
|
-
if (!dkgNode) {
|
|
320
|
-
/**
|
|
321
|
-
* NAMES THE LOCAL STATE, not the network. This returned `directory_unreachable` — a network
|
|
322
|
-
* verdict for a purely local lifecycle fact, and the comment two lines above already says so:
|
|
323
|
-
* the daemon's own node reference is briefly null while a stream dies and is rebuilt. The
|
|
324
|
-
* directory may be perfectly reachable.
|
|
325
|
-
*
|
|
326
|
-
* Found by the `DOD-M15-SURFACE-1` review as `[pre-existing]`; fixed under the standing rule
|
|
327
|
-
* that an error naming the wrong subsystem gets corrected when it is found. It is also the
|
|
328
|
-
* exact shape M15 is closing elsewhere — one string sending an investigation at the network
|
|
329
|
-
* when the cause is local — so leaving it while fixing its siblings would be inconsistent.
|
|
330
|
-
*/
|
|
331
|
-
this.#ctx.logger.warn("registration.dkg.node_unavailable", {
|
|
332
|
-
impact: "the daemon's own transport node was momentarily absent while a signaling stream was rebuilt; registration was not attempted and nothing about the directory's reachability was established",
|
|
333
|
-
});
|
|
334
|
-
// `detail` is the shape this return type carries — the affordance rides there rather than in
|
|
335
|
-
// a `guidance` key the caller would drop on the floor.
|
|
336
|
-
return {
|
|
337
|
-
error: "transport_node_unavailable",
|
|
338
|
-
detail: "The daemon's transport node was briefly unavailable while its directory connection was rebuilding. This is local and usually clears within seconds; it says nothing about whether the directory is reachable. Retry registration, and if it repeats check the directory connection state with cello status.",
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
// DOD-DKG-1: build the directory-node set the DKG fans across. With a verified consortium
|
|
342
|
-
// manifest the client resolved the full N-node roster (getConsortiumEndpoints) and the DKG
|
|
343
|
-
// runs across ALL of them (the generated key is T-of-N). Without a manifest the roster is
|
|
344
|
-
// empty → the single primary endpoint (single-node DKG, M6/M7 back-compat).
|
|
345
|
-
// getConsortiumEndpoints() returns the resolved roster when a consortium manifest IS
|
|
346
|
-
// configured, or NULL when none is (the M6/M7 single-node back-compat path). Branching on
|
|
347
|
-
// "manifest configured" (roster !== null) — NOT "roster non-empty" — is the load-bearing
|
|
348
|
-
// distinction (code-reviewer B1 / cello-fallback-finder HIGH): an EMPTY roster with a
|
|
349
|
-
// manifest configured (the whole consortium momentarily unreachable) must REFUSE, never
|
|
350
|
-
// silently fall back to a 2-of-2 DKG against an unverified single directory.
|
|
351
|
-
const roster = this.#ctx.getConsortiumEndpoints();
|
|
352
|
-
let directoryNodes;
|
|
353
|
-
if (roster !== null) {
|
|
354
|
-
// M8B quorum: the directory set `participants` = |Q| = |R ∩ manifest| from the reachable_node_ids
|
|
355
|
-
// we reported. Our resolved roster IS Q (Q = R ∩ manifest, and R = our roster), so we fan the DKG
|
|
356
|
-
// to it directly. The count must still agree: roster.length !== participants ⇒ a node we reported
|
|
357
|
-
// is now unreachable, or a manifest version skew ⇒ REFUSE rather than DKG a divergent set.
|
|
358
|
-
// (Replaces the old all-N check — `participants` is now the quorum size, not the full manifest N.)
|
|
359
|
-
if (roster.length !== participants) {
|
|
360
|
-
this.#ctx.logger.warn("registration.dkg.quorum_mismatch", {
|
|
361
|
-
resolvedRoster: roster.length,
|
|
362
|
-
declaredParticipants: participants,
|
|
363
|
-
});
|
|
364
|
-
return { error: "dkg_below_threshold" };
|
|
365
|
-
}
|
|
366
|
-
directoryNodes = roster.map((ep) => new NetworkDirectoryNode({
|
|
367
|
-
id: ep.peerId,
|
|
368
|
-
node: dkgNode,
|
|
369
|
-
directoryPeerId: ep.peerId,
|
|
370
|
-
directoryMultiaddrs: [ep.multiaddr],
|
|
371
|
-
logger: this.#ctx.logger,
|
|
372
|
-
}));
|
|
373
|
-
}
|
|
374
|
-
else {
|
|
375
|
-
// No consortium manifest configured → single-node DKG (M6/M7 back-compat).
|
|
376
|
-
const directoryEndpoint = this.#ctx.getDirectoryEndpoint();
|
|
377
|
-
if (!directoryEndpoint) {
|
|
378
|
-
return { error: "directory_unreachable" };
|
|
379
|
-
}
|
|
380
|
-
directoryNodes = [
|
|
381
|
-
new NetworkDirectoryNode({
|
|
382
|
-
id: directoryEndpoint.peer_id,
|
|
383
|
-
node: dkgNode,
|
|
384
|
-
directoryPeerId: directoryEndpoint.peer_id,
|
|
385
|
-
directoryMultiaddrs: directoryEndpoint.multiaddrs,
|
|
386
|
-
logger: this.#ctx.logger,
|
|
387
|
-
}),
|
|
388
|
-
];
|
|
389
|
-
}
|
|
390
|
-
void epochId;
|
|
391
|
-
const kLocalPubkeyBytes = Buffer.from(kLocalPubkeyHex, "hex");
|
|
392
|
-
let dkgPrimaryPubkeyHex;
|
|
393
|
-
// The share to persist, captured inside the DKG try (a DKG error → dkg_failed) but persisted
|
|
394
|
-
// AFTER it, so a persist failure surfaces as identity_persist_failed, not dkg_failed.
|
|
395
|
-
let shareToPersist = null;
|
|
396
|
-
try {
|
|
397
|
-
const dkgResult = await runNetworkDkg(kLocalPubkeyBytes, {
|
|
398
|
-
threshold,
|
|
399
|
-
participants,
|
|
400
|
-
directoryNodes,
|
|
401
|
-
preAuthToken,
|
|
402
|
-
signAuth: (h) => this.#ctx.keyProvider.sign(h), // SEC-2
|
|
403
|
-
});
|
|
404
|
-
dkgPrimaryPubkeyHex = Buffer.from(dkgResult.primaryPubkey).toString("hex");
|
|
405
|
-
this.#ctx.setThresholdSigner(dkgResult.signer);
|
|
406
|
-
this.#ctx.setMyPrimaryPubkey(new Uint8Array(dkgResult.primaryPubkey));
|
|
407
|
-
if (this.#ctx.persistence) {
|
|
408
|
-
shareToPersist = {
|
|
409
|
-
epochId,
|
|
410
|
-
primaryPubkey: dkgPrimaryPubkeyHex,
|
|
411
|
-
identifier: dkgResult.identifier,
|
|
412
|
-
signingShare: dkgResult.signingShare,
|
|
413
|
-
threshold: dkgResult.threshold,
|
|
414
|
-
participants: dkgResult.participants,
|
|
415
|
-
commitmentsCbor: encodeCbor(dkgResult.commitments),
|
|
416
|
-
verifyingSharesCbor: encodeCbor(dkgResult.verifyingShares),
|
|
417
|
-
dkgMethod: "network_dkg",
|
|
418
|
-
// M8B quorum: persist the quorum Q (nodeIds the DKG ran among) so a restored signer targets the
|
|
419
|
-
// actual share-holders, not the full live roster. null on the single-node back-compat path.
|
|
420
|
-
directoryNodeIds: roster ? roster.map((e) => e.nodeId) : undefined,
|
|
421
|
-
};
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
catch (err) {
|
|
425
|
-
// NOT a bare catch. Everything runNetworkDkg can throw was being discarded here, and this is
|
|
426
|
-
// the client's own log — where the operator actually is. The messages destroyed included the
|
|
427
|
-
// only diagnosis of a colliding FROST identifier (`Duplicate id=5375…`, thrown by
|
|
428
|
-
// @noble/curves DKG.round2 when two nodes derive the same identifier) and the
|
|
429
|
-
// commitment-vs-primary_pubkey mismatch, plus every stream/transport failure from
|
|
430
|
-
// dkgRound1WithNode / dkgRound2WithNode. All of them reached the operator as `dkg_failed` —
|
|
431
|
-
// one exit-point label standing in for a dozen unrelated causes, sending them to debug FROST
|
|
432
|
-
// when the cause was a duplicate nodeId in a manifest or an unreachable node.
|
|
433
|
-
this.#ctx.logger.error("registration.dkg.failed", {
|
|
434
|
-
reason: extractErrorMessage(err),
|
|
435
|
-
// WHICH registration and WHICH nodes. `reason` alone cannot be acted on: on a multi-agent
|
|
436
|
-
// daemon the operator cannot tell which agent failed, and a nested
|
|
437
|
-
// "dkgRound2: no response received" does not say from whom. These are also what let this line
|
|
438
|
-
// be correlated with the registration.dkg.quorum_mismatch warning that may precede it.
|
|
439
|
-
agentPubkey: kLocalPubkeyHex,
|
|
440
|
-
directoryNodeIds: roster ? roster.map((e) => e.nodeId) : undefined,
|
|
441
|
-
// The stack, not just the message — a wrapped throw from two frames down otherwise loses the
|
|
442
|
-
// frame that names the node.
|
|
443
|
-
stack: err instanceof Error ? err.stack : undefined,
|
|
444
|
-
});
|
|
445
|
-
// The cause travels WITH the code. `dkg_failed` is the closed protocol union the wire needs;
|
|
446
|
-
// `detail` is what lets the operator-facing guidance say which failure it actually was.
|
|
447
|
-
return { error: "dkg_failed", detail: extractErrorMessage(err) };
|
|
448
|
-
}
|
|
449
|
-
// SI-003/AC-005: AWAIT the share persist (was fire-and-forget) before register reports success —
|
|
450
|
-
// so a register-success guarantees the share is durably committed (no can't-sign zombie).
|
|
451
|
-
if (shareToPersist && this.#ctx.persistence) {
|
|
452
|
-
const persistence = this.#ctx.persistence;
|
|
453
|
-
const share = shareToPersist;
|
|
454
|
-
const ok = await this.#persistAll([() => persistence.persistFrostKeyShare(share)]);
|
|
455
|
-
if (!ok)
|
|
456
|
-
return { error: "identity_persist_failed" };
|
|
457
|
-
}
|
|
458
|
-
/**
|
|
459
|
-
* ─── 038-KEYBIND: MINT THE BINDING, THEN HAND IT OVER WITH THE GROUP KEY ────────────────────
|
|
460
|
-
*
|
|
461
|
-
* THE TAIL OF REGISTRATION IS THE ONLY MOMENT THIS CAN HAPPEN. At agent creation the group key
|
|
462
|
-
* does not exist — a FROST DKG's group key is the sum of every participant's commitment, so by
|
|
463
|
-
* construction it is nobody's existing key. After this frame the ceremony is over. Right here
|
|
464
|
-
* is the one point where K_local's private half and the finished group key are both on this
|
|
465
|
-
* machine.
|
|
466
|
-
*
|
|
467
|
-
* It rides on `dkg_complete` rather than in a frame of its own so the directory can never hold
|
|
468
|
-
* a group key it has no binding for: one frame, both values, or neither.
|
|
469
|
-
*/
|
|
470
|
-
const keyBinding = await this.#mintKeyBinding(kLocalPubkeyHex, dkgPrimaryPubkeyHex);
|
|
471
|
-
// Step 5c: send dkg_complete (SignalingManager CBOR/lp-encodes the frame)
|
|
472
|
-
const dkgSent = await this.#ctx.sendSignalingFrame({
|
|
473
|
-
type: "dkg_complete",
|
|
474
|
-
primary_pubkey: dkgPrimaryPubkeyHex,
|
|
475
|
-
key_binding: keyBinding,
|
|
476
|
-
});
|
|
477
|
-
if (!dkgSent.ok) {
|
|
478
|
-
return { error: dkgSent.reason ?? "directory_unreachable" };
|
|
479
|
-
}
|
|
480
|
-
// Step 6: await register_success or register_error
|
|
481
|
-
const REGISTER_TIMEOUT_MS = 15_000;
|
|
482
|
-
let timeoutHandle;
|
|
483
|
-
const responseWithTimeout = await Promise.race([
|
|
484
|
-
new Promise((resolve) => {
|
|
485
|
-
this.#ctx.setPendingRegisterResolve(resolve);
|
|
486
|
-
}),
|
|
487
|
-
new Promise((resolve) => {
|
|
488
|
-
timeoutHandle = setTimeout(() => {
|
|
489
|
-
this.#ctx.setPendingRegisterResolve(null);
|
|
490
|
-
resolve({ type: "register_error", reason: "timeout" });
|
|
491
|
-
}, REGISTER_TIMEOUT_MS);
|
|
492
|
-
}),
|
|
493
|
-
]);
|
|
494
|
-
clearTimeout(timeoutHandle);
|
|
495
|
-
if (responseWithTimeout["type"] !== "register_success") {
|
|
496
|
-
const reason = responseWithTimeout["reason"] ?? "unknown";
|
|
497
|
-
if (reason === "already_registered" &&
|
|
498
|
-
responseWithTimeout["agent_id"] &&
|
|
499
|
-
responseWithTimeout["primary_pubkey"]) {
|
|
500
|
-
const state = {
|
|
501
|
-
agent_id: responseWithTimeout["agent_id"],
|
|
502
|
-
primary_pubkey: responseWithTimeout["primary_pubkey"],
|
|
503
|
-
ml_dsa_pubkey: responseWithTimeout["ml_dsa_pubkey"] ?? mlDsaPubkeyHex,
|
|
504
|
-
registered_at: Date.now(),
|
|
505
|
-
status: "active",
|
|
506
|
-
};
|
|
507
|
-
const echo = this.#channelEchoed(channelOpts, responseWithTimeout, correlationId, kLocalPubkeyHex);
|
|
508
|
-
if (echo)
|
|
509
|
-
return echo;
|
|
510
|
-
// SI-003: persist before caching the registered state (see the dkg_ready branch).
|
|
511
|
-
if (this.#ctx.persistence) {
|
|
512
|
-
// 038-KEYBIND: the DKG ran, but the directory already held a profile and answered with
|
|
513
|
-
// ITS key. Checked against this machine's own share before signing over it (F4) — an
|
|
514
|
-
// answer that disagrees with the share is a directory contradicting the ceremony, not a
|
|
515
|
-
// more authoritative value.
|
|
516
|
-
const minted = await this.#mintCorroboratedKeyBinding(kLocalPubkeyHex, state.primary_pubkey);
|
|
517
|
-
if (!minted.ok)
|
|
518
|
-
return { error: minted.error, detail: minted.detail };
|
|
519
|
-
const ok = await this.#persistAll(this.#identityPersistOps(state, mlDsaPubkeyHex, mlDsaSecretKeyBlob, minted.keyBinding, channelOpts));
|
|
520
|
-
if (!ok)
|
|
521
|
-
return { error: "identity_persist_failed" };
|
|
522
|
-
}
|
|
523
|
-
this.#registrationState = state;
|
|
524
|
-
this.#mlDsaProvider = mlDsaProvider;
|
|
525
|
-
return state;
|
|
526
|
-
}
|
|
527
|
-
return { error: reason };
|
|
528
|
-
}
|
|
529
|
-
// Step 6a (M16): the echo check. A channel the directory did not store as a channel is a failed
|
|
530
|
-
// registration, not an ordinary agent.
|
|
531
|
-
const echo = this.#channelEchoed(channelOpts, responseWithTimeout, correlationId, kLocalPubkeyHex);
|
|
532
|
-
if (echo)
|
|
533
|
-
return echo;
|
|
534
|
-
// Step 7: build RegistrationState and cache
|
|
535
|
-
const agentId = responseWithTimeout["agent_id"];
|
|
536
|
-
const primaryPubkey = responseWithTimeout["primary_pubkey"];
|
|
537
|
-
/**
|
|
538
|
-
* ─── 038-KEYBIND review F4: A DIRECTORY THAT ANSWERS A DIFFERENT GROUP KEY IS REFUSED ───────
|
|
539
|
-
*
|
|
540
|
-
* ⚠️ THE EARLIER SHAPE HERE WAS THE DEFECT THIS ORDER EXISTS TO REMOVE, one level up. It
|
|
541
|
-
* re-minted the binding over `primaryPubkey` whenever it differed from what the DKG derived,
|
|
542
|
-
* and argued that "binding what was ANSWERED cannot drift". It cannot drift, and it is the
|
|
543
|
-
* wrong thing to bind: K_local would be signing a statement about a group key this agent never
|
|
544
|
-
* derived and holds no share for, on the say-so of the one party the binding exists to remove
|
|
545
|
-
* from the trust path. A directory would get to choose which key is yours, which is exactly
|
|
546
|
-
* what Part 4.2 of the order rules out.
|
|
547
|
-
*
|
|
548
|
-
* `dkgPrimaryPubkeyHex` is the sum of the commitments this daemon computed in the ceremony it
|
|
549
|
-
* ran. That is the value that is ours. A `register_success` naming anything else is a directory
|
|
550
|
-
* contradicting the ceremony, and there is no honest reading of it — so the registration fails
|
|
551
|
-
* and no binding is signed. Mirrors `session-ceremony.ts`, which already aborts a key refresh
|
|
552
|
-
* when the primary changes.
|
|
553
|
-
*/
|
|
554
|
-
if (primaryPubkey !== dkgPrimaryPubkeyHex) {
|
|
555
|
-
this.#ctx.logger.error("registration.primary_pubkey.mismatch", {
|
|
556
|
-
agentPubkey: kLocalPubkeyHex,
|
|
557
|
-
derivedPrefix: dkgPrimaryPubkeyHex.slice(0, 16),
|
|
558
|
-
answeredPrefix: primaryPubkey.slice(0, 16),
|
|
559
|
-
impact: "the directory confirmed registration under a threshold group key other than the one this agent's own DKG produced; nothing was persisted and no key binding was signed, because signing one would have vouched for a key this agent does not hold a share for",
|
|
560
|
-
});
|
|
561
|
-
return {
|
|
562
|
-
error: "registration_primary_pubkey_mismatch",
|
|
563
|
-
detail: "The directory confirmed your registration under a different threshold key than the ceremony on this machine produced. Nothing was saved. Retry registration; if it repeats, the node that answered is not completing ceremonies correctly and cello status will show which one it was.",
|
|
564
|
-
};
|
|
565
|
-
}
|
|
566
|
-
const state = {
|
|
567
|
-
agent_id: agentId,
|
|
568
|
-
primary_pubkey: primaryPubkey,
|
|
569
|
-
ml_dsa_pubkey: mlDsaPubkeyHex,
|
|
570
|
-
registered_at: Date.now(),
|
|
571
|
-
status: "active",
|
|
572
|
-
};
|
|
573
|
-
// SI-003: AWAIT the final identity persists before reporting success, and cache the registered
|
|
574
|
-
// state only after they commit — a register-success guarantees a durable identity row.
|
|
575
|
-
if (this.#ctx.persistence) {
|
|
576
|
-
const ok = await this.#persistAll(this.#identityPersistOps(state, mlDsaPubkeyHex, mlDsaSecretKeyBlob, keyBinding, channelOpts));
|
|
577
|
-
if (!ok)
|
|
578
|
-
return { error: "identity_persist_failed" };
|
|
579
|
-
}
|
|
580
|
-
this.#registrationState = state;
|
|
581
|
-
this.#mlDsaProvider = mlDsaProvider;
|
|
582
|
-
return state;
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
//# sourceMappingURL=registration-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registration-manager.js","sourceRoot":"","sources":["../src/registration-manager.ts"],"names":[],"mappings":"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"}
|