@moltzap/client 2026.811.0 → 2026.902.0
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/LICENSE +202 -21
- package/NOTICE +19 -0
- package/README.md +50 -0
- package/bin/moltzapd +9 -0
- package/dist/client-runtime.d.ts +10 -0
- package/dist/client-runtime.d.ts.map +1 -0
- package/dist/client-runtime.js +218 -0
- package/dist/client-runtime.js.map +1 -0
- package/dist/contract.d.ts +338 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +213 -0
- package/dist/contract.js.map +1 -0
- package/dist/contract.types-check.d.ts +99 -0
- package/dist/contract.types-check.d.ts.map +1 -0
- package/dist/contract.types-check.js +7 -0
- package/dist/contract.types-check.js.map +1 -0
- package/dist/daemon/configuration.d.ts +46 -0
- package/dist/daemon/configuration.d.ts.map +1 -0
- package/dist/daemon/configuration.js +69 -0
- package/dist/daemon/configuration.js.map +1 -0
- package/dist/daemon/management.d.ts +23 -0
- package/dist/daemon/management.d.ts.map +1 -0
- package/dist/daemon/management.js +489 -0
- package/dist/daemon/management.js.map +1 -0
- package/dist/daemon/registration.d.ts +72 -0
- package/dist/daemon/registration.d.ts.map +1 -0
- package/dist/daemon/registration.js +109 -0
- package/dist/daemon/registration.js.map +1 -0
- package/dist/daemon/runtime/activation.d.ts +95 -0
- package/dist/daemon/runtime/activation.d.ts.map +1 -0
- package/dist/daemon/runtime/activation.js +99 -0
- package/dist/daemon/runtime/activation.js.map +1 -0
- package/dist/daemon/runtime/controller.d.ts +34 -0
- package/dist/daemon/runtime/controller.d.ts.map +1 -0
- package/dist/daemon/runtime/controller.js +106 -0
- package/dist/daemon/runtime/controller.js.map +1 -0
- package/dist/daemon/runtime/history-export.d.ts +23 -0
- package/dist/daemon/runtime/history-export.d.ts.map +1 -0
- package/dist/daemon/runtime/history-export.js +47 -0
- package/dist/daemon/runtime/history-export.js.map +1 -0
- package/dist/daemon/runtime/index.d.ts +24 -0
- package/dist/daemon/runtime/index.d.ts.map +1 -0
- package/dist/daemon/runtime/index.js +65 -0
- package/dist/daemon/runtime/index.js.map +1 -0
- package/dist/daemon/runtime/protocol.d.ts +63 -0
- package/dist/daemon/runtime/protocol.d.ts.map +1 -0
- package/dist/daemon/runtime/protocol.js +133 -0
- package/dist/daemon/runtime/protocol.js.map +1 -0
- package/dist/endpoint/addressing/index.d.ts +39 -0
- package/dist/endpoint/addressing/index.d.ts.map +1 -0
- package/dist/endpoint/addressing/index.js +114 -0
- package/dist/endpoint/addressing/index.js.map +1 -0
- package/dist/endpoint/engine-dissemination.d.ts +11 -0
- package/dist/endpoint/engine-dissemination.d.ts.map +1 -0
- package/dist/endpoint/engine-dissemination.js +71 -0
- package/dist/endpoint/engine-dissemination.js.map +1 -0
- package/dist/endpoint/engine-durability.d.ts +69 -0
- package/dist/endpoint/engine-durability.d.ts.map +1 -0
- package/dist/endpoint/engine-durability.js +210 -0
- package/dist/endpoint/engine-durability.js.map +1 -0
- package/dist/endpoint/engine-send.d.ts +50 -0
- package/dist/endpoint/engine-send.d.ts.map +1 -0
- package/dist/endpoint/engine-send.js +422 -0
- package/dist/endpoint/engine-send.js.map +1 -0
- package/dist/endpoint/engine-types.d.ts +132 -0
- package/dist/endpoint/engine-types.d.ts.map +1 -0
- package/dist/endpoint/engine-types.js +13 -0
- package/dist/endpoint/engine-types.js.map +1 -0
- package/dist/endpoint/engine.d.ts +14 -0
- package/dist/endpoint/engine.d.ts.map +1 -0
- package/dist/endpoint/engine.js +280 -0
- package/dist/endpoint/engine.js.map +1 -0
- package/dist/endpoint/protocol/evidence.d.ts +37 -0
- package/dist/endpoint/protocol/evidence.d.ts.map +1 -0
- package/dist/endpoint/protocol/evidence.js +80 -0
- package/dist/endpoint/protocol/evidence.js.map +1 -0
- package/dist/endpoint/protocol/index.d.ts +26 -0
- package/dist/endpoint/protocol/index.d.ts.map +1 -0
- package/dist/endpoint/protocol/index.js +543 -0
- package/dist/endpoint/protocol/index.js.map +1 -0
- package/dist/endpoint/recovery/barrier.d.ts +23 -0
- package/dist/endpoint/recovery/barrier.d.ts.map +1 -0
- package/dist/endpoint/recovery/barrier.js +47 -0
- package/dist/endpoint/recovery/barrier.js.map +1 -0
- package/dist/endpoint/recovery/index.d.ts +29 -0
- package/dist/endpoint/recovery/index.d.ts.map +1 -0
- package/dist/endpoint/recovery/index.js +489 -0
- package/dist/endpoint/recovery/index.js.map +1 -0
- package/dist/endpoint/recovery/reanchor/empty.d.ts +22 -0
- package/dist/endpoint/recovery/reanchor/empty.d.ts.map +1 -0
- package/dist/endpoint/recovery/reanchor/empty.js +163 -0
- package/dist/endpoint/recovery/reanchor/empty.js.map +1 -0
- package/dist/endpoint/recovery/reanchor/index.d.ts +30 -0
- package/dist/endpoint/recovery/reanchor/index.d.ts.map +1 -0
- package/dist/endpoint/recovery/reanchor/index.js +479 -0
- package/dist/endpoint/recovery/reanchor/index.js.map +1 -0
- package/dist/endpoint/recovery/state.d.ts +130 -0
- package/dist/endpoint/recovery/state.d.ts.map +1 -0
- package/dist/endpoint/recovery/state.js +296 -0
- package/dist/endpoint/recovery/state.js.map +1 -0
- package/dist/endpoint/recovery/store-evidence.d.ts +17 -0
- package/dist/endpoint/recovery/store-evidence.d.ts.map +1 -0
- package/dist/endpoint/recovery/store-evidence.js +79 -0
- package/dist/endpoint/recovery/store-evidence.js.map +1 -0
- package/dist/endpoint/recovery/store.d.ts +56 -0
- package/dist/endpoint/recovery/store.d.ts.map +1 -0
- package/dist/endpoint/recovery/store.js +499 -0
- package/dist/endpoint/recovery/store.js.map +1 -0
- package/dist/endpoint/representation-canonical.d.ts +17 -0
- package/dist/endpoint/representation-canonical.d.ts.map +1 -0
- package/dist/endpoint/representation-canonical.js +48 -0
- package/dist/endpoint/representation-canonical.js.map +1 -0
- package/dist/endpoint/representation-codec.d.ts +51 -0
- package/dist/endpoint/representation-codec.d.ts.map +1 -0
- package/dist/endpoint/representation-codec.js +159 -0
- package/dist/endpoint/representation-codec.js.map +1 -0
- package/dist/endpoint/representation-schemas.d.ts +1831 -0
- package/dist/endpoint/representation-schemas.d.ts.map +1 -0
- package/dist/endpoint/representation-schemas.js +195 -0
- package/dist/endpoint/representation-schemas.js.map +1 -0
- package/dist/endpoint/representation-verification.d.ts +79 -0
- package/dist/endpoint/representation-verification.d.ts.map +1 -0
- package/dist/endpoint/representation-verification.js +420 -0
- package/dist/endpoint/representation-verification.js.map +1 -0
- package/dist/endpoint/representation.d.ts +6 -0
- package/dist/endpoint/representation.d.ts.map +1 -0
- package/dist/endpoint/representation.js +8 -0
- package/dist/endpoint/representation.js.map +1 -0
- package/dist/endpoint/router-worker/index.d.ts +16 -0
- package/dist/endpoint/router-worker/index.d.ts.map +1 -0
- package/dist/endpoint/router-worker/index.js +547 -0
- package/dist/endpoint/router-worker/index.js.map +1 -0
- package/dist/endpoint/router-worker/types.d.ts +183 -0
- package/dist/endpoint/router-worker/types.d.ts.map +1 -0
- package/dist/endpoint/router-worker/types.js +31 -0
- package/dist/endpoint/router-worker/types.js.map +1 -0
- package/dist/endpoint/store/anchors.d.ts +83 -0
- package/dist/endpoint/store/anchors.d.ts.map +1 -0
- package/dist/endpoint/store/anchors.js +471 -0
- package/dist/endpoint/store/anchors.js.map +1 -0
- package/dist/endpoint/store/database/index.d.ts +6 -0
- package/dist/endpoint/store/database/index.d.ts.map +1 -0
- package/dist/endpoint/store/database/index.js +6 -0
- package/dist/endpoint/store/database/index.js.map +1 -0
- package/dist/endpoint/store/database/schema.d.ts +44 -0
- package/dist/endpoint/store/database/schema.d.ts.map +1 -0
- package/dist/endpoint/store/database/schema.js +345 -0
- package/dist/endpoint/store/database/schema.js.map +1 -0
- package/dist/endpoint/store/database/values.d.ts +119 -0
- package/dist/endpoint/store/database/values.d.ts.map +1 -0
- package/dist/endpoint/store/database/values.js +194 -0
- package/dist/endpoint/store/database/values.js.map +1 -0
- package/dist/endpoint/store/deliveries.d.ts +38 -0
- package/dist/endpoint/store/deliveries.d.ts.map +1 -0
- package/dist/endpoint/store/deliveries.js +124 -0
- package/dist/endpoint/store/deliveries.js.map +1 -0
- package/dist/endpoint/store/dissemination.d.ts +27 -0
- package/dist/endpoint/store/dissemination.d.ts.map +1 -0
- package/dist/endpoint/store/dissemination.js +139 -0
- package/dist/endpoint/store/dissemination.js.map +1 -0
- package/dist/endpoint/store/index.d.ts +15 -0
- package/dist/endpoint/store/index.d.ts.map +1 -0
- package/dist/endpoint/store/index.js +76 -0
- package/dist/endpoint/store/index.js.map +1 -0
- package/dist/endpoint/store/management.d.ts +42 -0
- package/dist/endpoint/store/management.d.ts.map +1 -0
- package/dist/endpoint/store/management.js +259 -0
- package/dist/endpoint/store/management.js.map +1 -0
- package/dist/endpoint/store/outbound.d.ts +62 -0
- package/dist/endpoint/store/outbound.d.ts.map +1 -0
- package/dist/endpoint/store/outbound.js +278 -0
- package/dist/endpoint/store/outbound.js.map +1 -0
- package/dist/endpoint/store/records.d.ts +56 -0
- package/dist/endpoint/store/records.d.ts.map +1 -0
- package/dist/endpoint/store/records.js +352 -0
- package/dist/endpoint/store/records.js.map +1 -0
- package/dist/endpoint/store/rows/index.d.ts +138 -0
- package/dist/endpoint/store/rows/index.d.ts.map +1 -0
- package/dist/endpoint/store/rows/index.js +307 -0
- package/dist/endpoint/store/rows/index.js.map +1 -0
- package/dist/endpoint/store/types.d.ts +223 -0
- package/dist/endpoint/store/types.d.ts.map +1 -0
- package/dist/endpoint/store/types.js +15 -0
- package/dist/endpoint/store/types.js.map +1 -0
- package/dist/endpoint/store.d.ts +10 -0
- package/dist/endpoint/store.d.ts.map +1 -0
- package/dist/endpoint/store.js +6 -0
- package/dist/endpoint/store.js.map +1 -0
- package/dist/harness-mcp-contract.d.ts +101 -0
- package/dist/harness-mcp-contract.d.ts.map +1 -0
- package/dist/harness-mcp-contract.js +61 -0
- package/dist/harness-mcp-contract.js.map +1 -0
- package/dist/harness-mcp-http.d.ts +19 -0
- package/dist/harness-mcp-http.d.ts.map +1 -0
- package/dist/{harness-mcp-server.js → harness-mcp-http.js} +43 -71
- package/dist/harness-mcp-http.js.map +1 -0
- package/dist/harness-mcp-subscription.d.ts +12 -7
- package/dist/harness-mcp-subscription.d.ts.map +1 -1
- package/dist/harness-mcp-subscription.js +113 -100
- package/dist/harness-mcp-subscription.js.map +1 -1
- package/dist/harness-mcp-wire.d.ts +26 -19
- package/dist/harness-mcp-wire.d.ts.map +1 -1
- package/dist/harness-mcp-wire.js +380 -67
- package/dist/harness-mcp-wire.js.map +1 -1
- package/dist/index.d.ts +4 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -8
- package/dist/index.js.map +1 -1
- package/dist/management-runtime.d.ts +217 -0
- package/dist/management-runtime.d.ts.map +1 -0
- package/dist/management-runtime.js +127 -0
- package/dist/management-runtime.js.map +1 -0
- package/dist/server.d.ts +16 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +46 -0
- package/dist/server.js.map +1 -0
- package/dist/server.types-check.d.ts +23 -0
- package/dist/server.types-check.d.ts.map +1 -0
- package/dist/server.types-check.js +7 -0
- package/dist/server.types-check.js.map +1 -0
- package/package.json +45 -47
- package/dist/agent-client.d.ts +0 -5
- package/dist/agent-client.d.ts.map +0 -1
- package/dist/agent-client.js +0 -3
- package/dist/agent-client.js.map +0 -1
- package/dist/auth.d.ts +0 -37
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -79
- package/dist/auth.js.map +0 -1
- package/dist/bounded-map.d.ts +0 -32
- package/dist/bounded-map.d.ts.map +0 -1
- package/dist/bounded-map.js +0 -79
- package/dist/bounded-map.js.map +0 -1
- package/dist/channel-base/format-cross-conv.d.ts +0 -43
- package/dist/channel-base/format-cross-conv.d.ts.map +0 -1
- package/dist/channel-base/format-cross-conv.js +0 -65
- package/dist/channel-base/format-cross-conv.js.map +0 -1
- package/dist/channel-base/format-group-block.d.ts +0 -48
- package/dist/channel-base/format-group-block.d.ts.map +0 -1
- package/dist/channel-base/format-group-block.js +0 -62
- package/dist/channel-base/format-group-block.js.map +0 -1
- package/dist/channel-base/index.d.ts +0 -12
- package/dist/channel-base/index.d.ts.map +0 -1
- package/dist/channel-base/index.js +0 -13
- package/dist/channel-base/index.js.map +0 -1
- package/dist/channel-core-enrichment.d.ts +0 -14
- package/dist/channel-core-enrichment.d.ts.map +0 -1
- package/dist/channel-core-enrichment.js +0 -143
- package/dist/channel-core-enrichment.js.map +0 -1
- package/dist/channel-core-test-support.d.ts +0 -75
- package/dist/channel-core-test-support.d.ts.map +0 -1
- package/dist/channel-core-test-support.js +0 -74
- package/dist/channel-core-test-support.js.map +0 -1
- package/dist/channel-core.d.ts +0 -304
- package/dist/channel-core.d.ts.map +0 -1
- package/dist/channel-core.js +0 -363
- package/dist/channel-core.js.map +0 -1
- package/dist/cli/adapters.d.ts +0 -21
- package/dist/cli/adapters.d.ts.map +0 -1
- package/dist/cli/adapters.js +0 -111
- package/dist/cli/adapters.js.map +0 -1
- package/dist/cli/commands/agents.d.ts +0 -11
- package/dist/cli/commands/agents.d.ts.map +0 -1
- package/dist/cli/commands/agents.js +0 -27
- package/dist/cli/commands/agents.js.map +0 -1
- package/dist/cli/commands/conversations.d.ts +0 -18
- package/dist/cli/commands/conversations.d.ts.map +0 -1
- package/dist/cli/commands/conversations.js +0 -33
- package/dist/cli/commands/conversations.js.map +0 -1
- package/dist/cli/commands/messages.d.ts +0 -41
- package/dist/cli/commands/messages.d.ts.map +0 -1
- package/dist/cli/commands/messages.js +0 -39
- package/dist/cli/commands/messages.js.map +0 -1
- package/dist/cli/commands/register.d.ts +0 -46
- package/dist/cli/commands/register.d.ts.map +0 -1
- package/dist/cli/commands/register.js +0 -103
- package/dist/cli/commands/register.js.map +0 -1
- package/dist/cli/commands/send.d.ts +0 -53
- package/dist/cli/commands/send.d.ts.map +0 -1
- package/dist/cli/commands/send.js +0 -57
- package/dist/cli/commands/send.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -34
- package/dist/cli/commands/start.d.ts.map +0 -1
- package/dist/cli/commands/start.js +0 -59
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -7
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -16
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/cli/commands/test-transport.d.ts +0 -28
- package/dist/cli/commands/test-transport.d.ts.map +0 -1
- package/dist/cli/commands/test-transport.js +0 -40
- package/dist/cli/commands/test-transport.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -105
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/output.d.ts +0 -14
- package/dist/cli/output.d.ts.map +0 -1
- package/dist/cli/output.js +0 -19
- package/dist/cli/output.js.map +0 -1
- package/dist/cli/socket-client.d.ts +0 -28
- package/dist/cli/socket-client.d.ts.map +0 -1
- package/dist/cli/socket-client.js +0 -63
- package/dist/cli/socket-client.js.map +0 -1
- package/dist/cli/transport.d.ts +0 -132
- package/dist/cli/transport.d.ts.map +0 -1
- package/dist/cli/transport.js +0 -127
- package/dist/cli/transport.js.map +0 -1
- package/dist/config.d.ts +0 -33
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -45
- package/dist/config.js.map +0 -1
- package/dist/config.test-utils.d.ts +0 -18
- package/dist/config.test-utils.d.ts.map +0 -1
- package/dist/config.test-utils.js +0 -53
- package/dist/config.test-utils.js.map +0 -1
- package/dist/harness/client-runtime.d.ts +0 -24
- package/dist/harness/client-runtime.d.ts.map +0 -1
- package/dist/harness/client-runtime.js +0 -107
- package/dist/harness/client-runtime.js.map +0 -1
- package/dist/harness/index.d.ts +0 -5
- package/dist/harness/index.d.ts.map +0 -1
- package/dist/harness/index.js +0 -5
- package/dist/harness/index.js.map +0 -1
- package/dist/harness/runtime.d.ts +0 -149
- package/dist/harness/runtime.d.ts.map +0 -1
- package/dist/harness/runtime.js +0 -68
- package/dist/harness/runtime.js.map +0 -1
- package/dist/harness-client.d.ts +0 -43
- package/dist/harness-client.d.ts.map +0 -1
- package/dist/harness-client.js +0 -21
- package/dist/harness-client.js.map +0 -1
- package/dist/harness-mcp-server.d.ts +0 -19
- package/dist/harness-mcp-server.d.ts.map +0 -1
- package/dist/harness-mcp-server.js.map +0 -1
- package/dist/local-daemon-rpc.d.ts +0 -1170
- package/dist/local-daemon-rpc.d.ts.map +0 -1
- package/dist/local-daemon-rpc.js +0 -178
- package/dist/local-daemon-rpc.js.map +0 -1
- package/dist/local-history.d.ts +0 -75
- package/dist/local-history.d.ts.map +0 -1
- package/dist/local-history.js +0 -82
- package/dist/local-history.js.map +0 -1
- package/dist/local-paths.d.ts +0 -22
- package/dist/local-paths.d.ts.map +0 -1
- package/dist/local-paths.js +0 -33
- package/dist/local-paths.js.map +0 -1
- package/dist/local-socket-server.d.ts +0 -33
- package/dist/local-socket-server.d.ts.map +0 -1
- package/dist/local-socket-server.js +0 -100
- package/dist/local-socket-server.js.map +0 -1
- package/dist/message-rendering.d.ts +0 -4
- package/dist/message-rendering.d.ts.map +0 -1
- package/dist/message-rendering.js +0 -8
- package/dist/message-rendering.js.map +0 -1
- package/dist/moltzapd.d.ts +0 -38
- package/dist/moltzapd.d.ts.map +0 -1
- package/dist/moltzapd.js +0 -78
- package/dist/moltzapd.js.map +0 -1
- package/dist/notification/__tests__/subscribe-signatures.types-check.d.ts +0 -53
- package/dist/notification/__tests__/subscribe-signatures.types-check.d.ts.map +0 -1
- package/dist/notification/__tests__/subscribe-signatures.types-check.js +0 -29
- package/dist/notification/__tests__/subscribe-signatures.types-check.js.map +0 -1
- package/dist/notification/errors.d.ts +0 -41
- package/dist/notification/errors.d.ts.map +0 -1
- package/dist/notification/errors.js +0 -24
- package/dist/notification/errors.js.map +0 -1
- package/dist/notification/index.d.ts +0 -6
- package/dist/notification/index.d.ts.map +0 -1
- package/dist/notification/index.js +0 -6
- package/dist/notification/index.js.map +0 -1
- package/dist/notification/stream.d.ts +0 -75
- package/dist/notification/stream.d.ts.map +0 -1
- package/dist/notification/stream.js +0 -30
- package/dist/notification/stream.js.map +0 -1
- package/dist/pagination.d.ts +0 -52
- package/dist/pagination.d.ts.map +0 -1
- package/dist/pagination.js +0 -51
- package/dist/pagination.js.map +0 -1
- package/dist/profile.d.ts +0 -104
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js +0 -163
- package/dist/profile.js.map +0 -1
- package/dist/refs.d.ts +0 -18
- package/dist/refs.d.ts.map +0 -1
- package/dist/refs.js +0 -18
- package/dist/refs.js.map +0 -1
- package/dist/service-event-trace.d.ts +0 -15
- package/dist/service-event-trace.d.ts.map +0 -1
- package/dist/service-event-trace.js +0 -35
- package/dist/service-event-trace.js.map +0 -1
- package/dist/service-helpers.d.ts +0 -55
- package/dist/service-helpers.d.ts.map +0 -1
- package/dist/service-helpers.js +0 -108
- package/dist/service-helpers.js.map +0 -1
- package/dist/service-local-daemon.d.ts +0 -32
- package/dist/service-local-daemon.d.ts.map +0 -1
- package/dist/service-local-daemon.js +0 -153
- package/dist/service-local-daemon.js.map +0 -1
- package/dist/service.d.ts +0 -299
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -789
- package/dist/service.js.map +0 -1
- package/dist/test-utils/channel-service-fixture.d.ts +0 -53
- package/dist/test-utils/channel-service-fixture.d.ts.map +0 -1
- package/dist/test-utils/channel-service-fixture.js +0 -178
- package/dist/test-utils/channel-service-fixture.js.map +0 -1
- package/dist/test-utils/fake-service.d.ts +0 -84
- package/dist/test-utils/fake-service.d.ts.map +0 -1
- package/dist/test-utils/fake-service.js +0 -108
- package/dist/test-utils/fake-service.js.map +0 -1
- package/dist/test-utils/harness.d.ts +0 -27
- package/dist/test-utils/harness.d.ts.map +0 -1
- package/dist/test-utils/harness.js +0 -33
- package/dist/test-utils/harness.js.map +0 -1
- package/dist/test-utils/ids.d.ts +0 -21
- package/dist/test-utils/ids.d.ts.map +0 -1
- package/dist/test-utils/ids.js +0 -68
- package/dist/test-utils/ids.js.map +0 -1
- package/dist/test-utils/index.d.ts +0 -54
- package/dist/test-utils/index.d.ts.map +0 -1
- package/dist/test-utils/index.js +0 -65
- package/dist/test-utils/index.js.map +0 -1
- package/dist/test-utils/standalone-provisioning.d.ts +0 -22
- package/dist/test-utils/standalone-provisioning.d.ts.map +0 -1
- package/dist/test-utils/standalone-provisioning.js +0 -17
- package/dist/test-utils/standalone-provisioning.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** @file Completion barrier shared by protocol activation and recovery. */
|
|
2
|
+
import { Deferred, Effect } from "effect";
|
|
3
|
+
const recoveryBarriers = new WeakMap();
|
|
4
|
+
/**
|
|
5
|
+
* Install the one completion barrier shared by all retries of a discontinuity.
|
|
6
|
+
* @param runtime Engine entering Router recovery under its protocol gate.
|
|
7
|
+
* @returns Completion after a barrier exists for the engine.
|
|
8
|
+
*/
|
|
9
|
+
export function installRecoveryBarrier(runtime) {
|
|
10
|
+
return Effect.suspend(() => {
|
|
11
|
+
if (recoveryBarriers.has(runtime)) {
|
|
12
|
+
return Effect.void;
|
|
13
|
+
}
|
|
14
|
+
return Deferred.make().pipe(Effect.flatMap((barrier) => Effect.sync(() => {
|
|
15
|
+
if (!recoveryBarriers.has(runtime)) {
|
|
16
|
+
recoveryBarriers.set(runtime, barrier);
|
|
17
|
+
}
|
|
18
|
+
})));
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Read the barrier that blocks new action activation during discontinuity.
|
|
23
|
+
* @param runtime Engine whose recovery state guards action activation.
|
|
24
|
+
* @returns The pending barrier, or absence while the Router is active.
|
|
25
|
+
*/
|
|
26
|
+
export function currentRecoveryBarrier(runtime) {
|
|
27
|
+
return recoveryBarriers.get(runtime);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Release the exact barrier after recovery has resumed every durable fold.
|
|
31
|
+
* @param runtime Engine returning to normal protocol operation.
|
|
32
|
+
* @param barrier Barrier captured by the completed recovery attempt.
|
|
33
|
+
* @returns Completion after waiters resume and the barrier is removed.
|
|
34
|
+
*/
|
|
35
|
+
export function completeRecoveryBarrier(runtime, barrier) {
|
|
36
|
+
return Effect.suspend(() => {
|
|
37
|
+
if (recoveryBarriers.get(runtime) !== barrier) {
|
|
38
|
+
return Effect.void;
|
|
39
|
+
}
|
|
40
|
+
return Deferred.succeed(barrier, undefined).pipe(Effect.asVoid, Effect.zipRight(Effect.sync(() => {
|
|
41
|
+
if (recoveryBarriers.get(runtime) === barrier) {
|
|
42
|
+
recoveryBarriers.delete(runtime);
|
|
43
|
+
}
|
|
44
|
+
})));
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=barrier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"barrier.js","sourceRoot":"","sources":["../../../src/endpoint/recovery/barrier.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG1C,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAGjC,CAAC;AAEJ;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAsB;IAEtB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACzB,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAa,CAAC,IAAI,CACpC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACzB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CACH,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAsB;IAEtB,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAsB,EACtB,OAAqC;IAErC,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACzB,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC;YAC9C,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAC9C,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC9C,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CACH,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** @file Authenticated catch-up coordination and recovery lifecycle. */
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import type { EngineRuntime } from "../engine-types.js";
|
|
4
|
+
import { type DecodedOuterBody } from "../representation.js";
|
|
5
|
+
import { type RouterIngressDisposition, type RouterWorkerIngress, RouterWorkerPersistenceError, type RouterWorkerRecovery, RouterWorkerRecoveryError, type RouterWorkerSendError } from "../router-worker/index.js";
|
|
6
|
+
/** Reconstruct the complete private engine state from durable storage. */
|
|
7
|
+
export { recoverEngineState } from "./store.js";
|
|
8
|
+
/**
|
|
9
|
+
* Accept active protocol traffic and answer authenticated catch-up requests.
|
|
10
|
+
* @param runtime Engine whose active protocol state receives the ingress.
|
|
11
|
+
* @param ingress Verified Router delivery and decoded private payload.
|
|
12
|
+
* @returns Whether the payload was accepted or safely ignored.
|
|
13
|
+
*/
|
|
14
|
+
export declare function acceptEngineIngressWithRecovery(runtime: EngineRuntime, ingress: RouterWorkerIngress<DecodedOuterBody>): Effect.Effect<RouterIngressDisposition, RouterWorkerPersistenceError>;
|
|
15
|
+
/**
|
|
16
|
+
* Dispatch only certified-history and re-anchor traffic during recovery.
|
|
17
|
+
* @param runtime Engine participating in the active recovery session.
|
|
18
|
+
* @param ingress Verified Router delivery and decoded private payload.
|
|
19
|
+
* @returns Whether the recovery payload was accepted or safely ignored.
|
|
20
|
+
*/
|
|
21
|
+
export declare function acceptEngineRecoveryIngressWithRecovery(runtime: EngineRuntime, ingress: RouterWorkerIngress<DecodedOuterBody>): Effect.Effect<RouterIngressDisposition, RouterWorkerPersistenceError>;
|
|
22
|
+
/**
|
|
23
|
+
* Reconcile every certified chain and threshold-anchor a restarted Router.
|
|
24
|
+
* @param runtime Engine whose durable histories require reconciliation.
|
|
25
|
+
* @param recoveryInput Authenticated Router recovery callbacks and new anchor.
|
|
26
|
+
* @returns Completion after history, folds, and pending intents resume safely.
|
|
27
|
+
*/
|
|
28
|
+
export declare const recoverCertifiedHistory: (runtime: EngineRuntime, recoveryInput: RouterWorkerRecovery) => Effect.Effect<void, RouterWorkerRecoveryError | RouterWorkerSendError>;
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/endpoint/recovery/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAOxE,OAAO,EAAY,MAAM,EAAoC,MAAM,QAAQ,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AASxD,OAAO,EASL,KAAK,gBAAgB,EAWtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,4BAA4B,EAC5B,KAAK,oBAAoB,EACzB,yBAAyB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AA0BnC,0EAA0E;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAoBhD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,GAC7C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,4BAA4B,CAAC,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,GAC7C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,4BAA4B,CAAC,CAKvE;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YACzB,aAAa,iBACP,oBAAoB,KAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,yBAAyB,GAAG,qBAAqB,CAgCnB,CAAC"}
|
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
/** @file Authenticated catch-up coordination and recovery lifecycle. */
|
|
2
|
+
import { MOLTZAP_VERSION, SignedMessage, } from "@moltzap/identity";
|
|
3
|
+
import { Deferred, Effect, Fiber, Queue, Schema } from "effect";
|
|
4
|
+
import { resumeDisseminationObligations } from "../engine-dissemination.js";
|
|
5
|
+
import { proposeIntent } from "../engine-send.js";
|
|
6
|
+
import { acceptEngineIngress as acceptProtocolIngress, acceptEngineRecoveryIngress as acceptProtocolRecoveryIngress, resumeEngineFolds, } from "../protocol/index.js";
|
|
7
|
+
import { CompletedReanchor, encodeCanonical, memberCard, ReanchorBody, signEvidenceMessage, verifyCatchUpIncomplete, verifyCatchUpPage, verifyOuterMessage, } from "../representation.js";
|
|
8
|
+
import { RouterWorkerPersistenceError, RouterWorkerRecoveryError, } from "../router-worker/index.js";
|
|
9
|
+
import { completeRecoveryBarrier, currentRecoveryBarrier } from "./barrier.js";
|
|
10
|
+
import { acceptCompletedReanchor, acceptReanchorVote, positionReady, } from "./reanchor/index.js";
|
|
11
|
+
import { clearRecoveryState, completeRecoveryIfIdle, currentRecoveryState, installRecoveryState, makeRecoveryState, outboundCommitted, queueRecoveryPacket, recoverMemberships, requestCertifiedHistory, } from "./state.js";
|
|
12
|
+
import { decodeStoredAnchor, recordFromStore, verifyRecoveredHistory, verifyStoredOutbounds, } from "./store.js";
|
|
13
|
+
/** Reconstruct the complete private engine state from durable storage. */
|
|
14
|
+
export { recoverEngineState } from "./store.js";
|
|
15
|
+
const acceptedDisposition = "accepted";
|
|
16
|
+
const ignoredDisposition = "ignored";
|
|
17
|
+
/**
|
|
18
|
+
* Accept active protocol traffic and answer authenticated catch-up requests.
|
|
19
|
+
* @param runtime Engine whose active protocol state receives the ingress.
|
|
20
|
+
* @param ingress Verified Router delivery and decoded private payload.
|
|
21
|
+
* @returns Whether the payload was accepted or safely ignored.
|
|
22
|
+
*/
|
|
23
|
+
export function acceptEngineIngressWithRecovery(runtime, ingress) {
|
|
24
|
+
return ingress.payload.kind === "direct" &&
|
|
25
|
+
ingress.payload.packet.kind === "catch_up_request"
|
|
26
|
+
? acceptCatchUpRequest(runtime, ingress, ingress.payload.packet)
|
|
27
|
+
: acceptProtocolIngress(runtime, ingress);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Dispatch only certified-history and re-anchor traffic during recovery.
|
|
31
|
+
* @param runtime Engine participating in the active recovery session.
|
|
32
|
+
* @param ingress Verified Router delivery and decoded private payload.
|
|
33
|
+
* @returns Whether the recovery payload was accepted or safely ignored.
|
|
34
|
+
*/
|
|
35
|
+
export function acceptEngineRecoveryIngressWithRecovery(runtime, ingress) {
|
|
36
|
+
if (ingress.payload.kind === "evidence") {
|
|
37
|
+
return acceptReanchorVote(runtime, ingress, ingress.payload.message);
|
|
38
|
+
}
|
|
39
|
+
return acceptRecoveryPacket(runtime, ingress, ingress.payload.packet);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Reconcile every certified chain and threshold-anchor a restarted Router.
|
|
43
|
+
* @param runtime Engine whose durable histories require reconciliation.
|
|
44
|
+
* @param recoveryInput Authenticated Router recovery callbacks and new anchor.
|
|
45
|
+
* @returns Completion after history, folds, and pending intents resume safely.
|
|
46
|
+
*/
|
|
47
|
+
export const recoverCertifiedHistory = (runtime, recoveryInput) => Effect.gen(function* () {
|
|
48
|
+
const barrier = currentRecoveryBarrier(runtime);
|
|
49
|
+
if (barrier === undefined) {
|
|
50
|
+
return yield* Effect.fail(recoveryFailure());
|
|
51
|
+
}
|
|
52
|
+
if (currentRecoveryState(runtime) !== undefined) {
|
|
53
|
+
return yield* Effect.fail(recoveryFailure());
|
|
54
|
+
}
|
|
55
|
+
const recovered = yield* runtime.input.store
|
|
56
|
+
.recover()
|
|
57
|
+
.pipe(Effect.mapError(recoveryFailure));
|
|
58
|
+
const memberships = yield* recoverMemberships(runtime, recovered);
|
|
59
|
+
yield* verifyRecoveredHistory(runtime, recovered, memberships);
|
|
60
|
+
const retainedOutbounds = yield* prepareRecoveryOutbox(runtime, recoveryInput, recovered, memberships);
|
|
61
|
+
const state = yield* makeRecoveryState(recoveryInput, memberships);
|
|
62
|
+
yield* Effect.sync(() => {
|
|
63
|
+
installRecoveryState(runtime, state);
|
|
64
|
+
});
|
|
65
|
+
yield* Effect.scoped(runRecovery(runtime, state, retainedOutbounds)).pipe(Effect.ensuring(Effect.sync(() => {
|
|
66
|
+
clearRecoveryState(runtime, state);
|
|
67
|
+
})));
|
|
68
|
+
yield* completeRecoveryBarrier(runtime, barrier);
|
|
69
|
+
}).pipe(Effect.withSpan("recoverCertifiedHistory"));
|
|
70
|
+
/**
|
|
71
|
+
* Verify retained outer envelopes and invalidate only rows bound to an old Router.
|
|
72
|
+
* @param runtime Engine whose local identity authored the retained envelopes.
|
|
73
|
+
* @param recovery Router discontinuity and current recovery transport.
|
|
74
|
+
* @param snapshot Exact durable state captured before recovery starts.
|
|
75
|
+
* @param memberships Verified membership for every retained conversation.
|
|
76
|
+
* @returns Same-instance rows that must resume with their stable outbox identity.
|
|
77
|
+
*/
|
|
78
|
+
function prepareRecoveryOutbox(runtime, recovery, snapshot, memberships) {
|
|
79
|
+
return verifyStoredOutbounds(runtime.input, snapshot.outboundMessages, memberships).pipe(Effect.mapError(recoveryFailure), Effect.flatMap((outbounds) => {
|
|
80
|
+
switch (recovery.reason) {
|
|
81
|
+
case "feed_gap":
|
|
82
|
+
case "cursor_invalid":
|
|
83
|
+
return Effect.succeed(outbounds);
|
|
84
|
+
case "router_restarted":
|
|
85
|
+
return discardRestartedOutbounds(runtime, outbounds);
|
|
86
|
+
default: {
|
|
87
|
+
const exhaustive = recovery.reason;
|
|
88
|
+
return exhaustive;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}), Effect.withSpan("prepareRecoveryOutbox"));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Resume retained same-instance envelopes in durable insertion order.
|
|
95
|
+
* @param recovery Recovery transport fenced to the active Router instance.
|
|
96
|
+
* @param outbounds Verified current envelopes retained by the endpoint store.
|
|
97
|
+
* @returns Completion after every stable outbox identity is accepted or inactive.
|
|
98
|
+
*/
|
|
99
|
+
function resumeRecoveryOutbox(recovery, outbounds) {
|
|
100
|
+
return Effect.forEach(outbounds, (outbound) => recovery.resume(outbound.outboundId), { concurrency: 1, discard: true }).pipe(Effect.withSpan("resumeRecoveryOutbox"));
|
|
101
|
+
}
|
|
102
|
+
function discardRestartedOutbounds(runtime, outbounds) {
|
|
103
|
+
if (outbounds.length === 0) {
|
|
104
|
+
return Effect.succeed([]);
|
|
105
|
+
}
|
|
106
|
+
return runtime.input.store
|
|
107
|
+
.discardOutbound(outbounds)
|
|
108
|
+
.pipe(Effect.mapError(recoveryFailure), Effect.as([]));
|
|
109
|
+
}
|
|
110
|
+
function acceptRecoveryPacket(runtime, ingress, packet) {
|
|
111
|
+
switch (packet.kind) {
|
|
112
|
+
case "catch_up_request":
|
|
113
|
+
return acceptCatchUpRequest(runtime, ingress, packet);
|
|
114
|
+
case "catch_up_page":
|
|
115
|
+
return acceptCatchUpPage(runtime, ingress, packet);
|
|
116
|
+
case "catch_up_incomplete":
|
|
117
|
+
return acceptCatchUpIncomplete(runtime, ingress, packet);
|
|
118
|
+
case "completed_reanchor":
|
|
119
|
+
return acceptCompletedReanchor(runtime, ingress, packet);
|
|
120
|
+
case "certified_record":
|
|
121
|
+
return acceptRecoveryRecord(runtime, ingress);
|
|
122
|
+
case "action_proposal":
|
|
123
|
+
case "action_certified_record":
|
|
124
|
+
return Effect.succeed(ignoredDisposition);
|
|
125
|
+
default: {
|
|
126
|
+
const exhaustive = packet;
|
|
127
|
+
return exhaustive;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function recoveryFailure() {
|
|
132
|
+
return new RouterWorkerRecoveryError();
|
|
133
|
+
}
|
|
134
|
+
function acceptCatchUpRequest(runtime, ingress, request) {
|
|
135
|
+
const membership = membershipFor(runtime, request.conversationId);
|
|
136
|
+
if (membership === undefined) {
|
|
137
|
+
return Effect.succeed(ignoredDisposition);
|
|
138
|
+
}
|
|
139
|
+
const senderAgentId = ingress.message.senderAgentId;
|
|
140
|
+
const requestMatchesMembership = senderAgentId !== runtime.input.localAgentCard.agentId &&
|
|
141
|
+
senderAgentId === request.requesterAgentId &&
|
|
142
|
+
request.membershipHash === membership.hash &&
|
|
143
|
+
memberCard(membership, senderAgentId) !== undefined;
|
|
144
|
+
if (!requestMatchesMembership) {
|
|
145
|
+
return Effect.succeed(ignoredDisposition);
|
|
146
|
+
}
|
|
147
|
+
return verifyOuterMessage({
|
|
148
|
+
message: ingress.message,
|
|
149
|
+
membership,
|
|
150
|
+
}).pipe(Effect.flatMap(() => respondToCatchUp(runtime, membership, request)), Effect.as(acceptedDisposition), Effect.catchTag("ClientRepresentationError", () => Effect.succeed(ignoredDisposition)));
|
|
151
|
+
}
|
|
152
|
+
function membershipFor(runtime, conversationId) {
|
|
153
|
+
return (currentRecoveryState(runtime)?.memberships.get(conversationId) ??
|
|
154
|
+
runtime.conversations.get(conversationId)?.membership);
|
|
155
|
+
}
|
|
156
|
+
function respondToCatchUp(runtime, membership, request) {
|
|
157
|
+
return runtime.input.store.recover().pipe(Effect.mapError(persistenceFailure), Effect.flatMap((recovery) => decodeCatchUpSuccessor(runtime, membership, recovery, request)), Effect.flatMap((successor) => successor === undefined
|
|
158
|
+
? sendCatchUpIncomplete(runtime, membership, request)
|
|
159
|
+
: sendCatchUpPage(runtime, membership, request, successor)));
|
|
160
|
+
}
|
|
161
|
+
function decodeCatchUpSuccessor(runtime, membership, recovery, request) {
|
|
162
|
+
return Effect.gen(function* () {
|
|
163
|
+
const rows = successorRows(recovery, request);
|
|
164
|
+
if (rows.length > 1) {
|
|
165
|
+
return yield* Effect.fail(persistenceFailure());
|
|
166
|
+
}
|
|
167
|
+
const row = rows[0];
|
|
168
|
+
if (row === undefined) {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
const item = yield* decodeSuccessorRow(runtime, membership, recovery, row);
|
|
172
|
+
const later = successorRows(recovery, nextRequest(request, item));
|
|
173
|
+
if (later.length > 1) {
|
|
174
|
+
return yield* Effect.fail(persistenceFailure());
|
|
175
|
+
}
|
|
176
|
+
return { item, hasMore: later.length === 1 };
|
|
177
|
+
}).pipe(Effect.mapError(persistenceFailure));
|
|
178
|
+
}
|
|
179
|
+
function decodeSuccessorRow(runtime, membership, recovery, row) {
|
|
180
|
+
if (row.kind === "record") {
|
|
181
|
+
return decodeStoredRecordSuccessor(runtime, membership, recovery, row);
|
|
182
|
+
}
|
|
183
|
+
return decodeStoredAnchor(membership, row.value).pipe(Effect.flatMap((anchor) => anchor.kind === "completed_reanchor"
|
|
184
|
+
? Effect.succeed(anchor)
|
|
185
|
+
: Effect.fail(persistenceFailure())));
|
|
186
|
+
}
|
|
187
|
+
function decodeStoredRecordSuccessor(runtime, membership, recovery, row) {
|
|
188
|
+
const anchor = recovery.anchors.find((candidate) => candidate.conversationId === row.value.conversationId &&
|
|
189
|
+
candidate.anchorHash === row.value.anchorHash);
|
|
190
|
+
if (anchor === undefined) {
|
|
191
|
+
return Effect.fail(persistenceFailure());
|
|
192
|
+
}
|
|
193
|
+
return decodeStoredAnchor(membership, anchor).pipe(Effect.flatMap((decodedAnchor) => recordFromStore(runtime.input, row.value, decodedAnchor)));
|
|
194
|
+
}
|
|
195
|
+
function successorRows(recovery, request) {
|
|
196
|
+
if (request.knownRecordHash === null) {
|
|
197
|
+
return recovery.certifiedRecords
|
|
198
|
+
.filter((record) => record.conversationId === request.conversationId &&
|
|
199
|
+
record.previousRecordHash === undefined)
|
|
200
|
+
.map((value) => recordSuccessor(value));
|
|
201
|
+
}
|
|
202
|
+
const reanchors = recovery.anchors
|
|
203
|
+
.filter((anchor) => anchor.conversationId === request.conversationId &&
|
|
204
|
+
anchor.previousAnchorHash === request.knownAnchorHash &&
|
|
205
|
+
anchor.selectedRecordHash === request.knownRecordHash)
|
|
206
|
+
.map((value) => reanchorSuccessor(value));
|
|
207
|
+
const records = recovery.certifiedRecords
|
|
208
|
+
.filter((record) => record.conversationId === request.conversationId &&
|
|
209
|
+
record.previousRecordHash === request.knownRecordHash &&
|
|
210
|
+
record.anchorHash === request.knownAnchorHash)
|
|
211
|
+
.map((value) => recordSuccessor(value));
|
|
212
|
+
return [...reanchors, ...records];
|
|
213
|
+
}
|
|
214
|
+
function recordSuccessor(value) {
|
|
215
|
+
return { kind: "record", value };
|
|
216
|
+
}
|
|
217
|
+
function reanchorSuccessor(value) {
|
|
218
|
+
return { kind: "reanchor", value };
|
|
219
|
+
}
|
|
220
|
+
function nextRequest(request, item) {
|
|
221
|
+
if (item.kind === "completed_reanchor") {
|
|
222
|
+
return { ...request, knownAnchorHash: item.anchorHash };
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
...request,
|
|
226
|
+
knownRecordHash: item.actionCertifiedRecord.recordHash,
|
|
227
|
+
knownAnchorHash: item.actionCertifiedRecord.recordCore.anchorHash,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function sendCatchUpIncomplete(runtime, membership, request) {
|
|
231
|
+
return Effect.gen(function* () {
|
|
232
|
+
const attestation = yield* signCatchUpAttestation(runtime, request, {
|
|
233
|
+
kind: "incomplete",
|
|
234
|
+
hash: null,
|
|
235
|
+
hasMore: false,
|
|
236
|
+
});
|
|
237
|
+
yield* queueRecoveryPacket(runtime, membership, {
|
|
238
|
+
moltzapVersion: MOLTZAP_VERSION,
|
|
239
|
+
kind: "catch_up_incomplete",
|
|
240
|
+
request,
|
|
241
|
+
attestation,
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
function sendCatchUpPage(runtime, membership, request, successor) {
|
|
246
|
+
return Effect.gen(function* () {
|
|
247
|
+
const hash = successor.item.kind === "certified_record"
|
|
248
|
+
? successor.item.actionCertifiedRecord.recordHash
|
|
249
|
+
: successor.item.anchorHash;
|
|
250
|
+
const attestation = yield* signCatchUpAttestation(runtime, request, {
|
|
251
|
+
kind: successor.item.kind,
|
|
252
|
+
hash,
|
|
253
|
+
hasMore: successor.hasMore,
|
|
254
|
+
});
|
|
255
|
+
yield* queueRecoveryPacket(runtime, membership, {
|
|
256
|
+
moltzapVersion: MOLTZAP_VERSION,
|
|
257
|
+
kind: "catch_up_page",
|
|
258
|
+
request,
|
|
259
|
+
item: successor.item,
|
|
260
|
+
hasMore: successor.hasMore,
|
|
261
|
+
attestation,
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
function signCatchUpAttestation(runtime, request, item) {
|
|
266
|
+
return signEvidenceMessage({
|
|
267
|
+
statement: {
|
|
268
|
+
moltzapVersion: MOLTZAP_VERSION,
|
|
269
|
+
kind: "catch_up_attestation",
|
|
270
|
+
signerAgentId: runtime.input.localAgentCard.agentId,
|
|
271
|
+
request,
|
|
272
|
+
itemKind: item.kind,
|
|
273
|
+
itemHash: item.hash,
|
|
274
|
+
hasMore: item.hasMore,
|
|
275
|
+
},
|
|
276
|
+
agentCard: runtime.input.localAgentCard,
|
|
277
|
+
signingAuthority: runtime.input.signingAuthority,
|
|
278
|
+
}).pipe(Effect.flatMap((message) => Schema.encode(SignedMessage)(message)), Effect.mapError(persistenceFailure));
|
|
279
|
+
}
|
|
280
|
+
function acceptCatchUpPage(runtime, ingress, page) {
|
|
281
|
+
const context = pendingCatchUpContext(runtime, page.request, ingress.message.senderAgentId);
|
|
282
|
+
if (context === undefined) {
|
|
283
|
+
return Effect.succeed(ignoredDisposition);
|
|
284
|
+
}
|
|
285
|
+
return Effect.gen(function* () {
|
|
286
|
+
yield* verifyOuterMessage({
|
|
287
|
+
message: ingress.message,
|
|
288
|
+
membership: context.membership,
|
|
289
|
+
});
|
|
290
|
+
yield* verifyCatchUpPage({
|
|
291
|
+
page,
|
|
292
|
+
membership: context.membership,
|
|
293
|
+
responseSenderAgentId: ingress.message.senderAgentId,
|
|
294
|
+
registrySignerPublicKey: runtime.input.registrySignerPublicKey,
|
|
295
|
+
});
|
|
296
|
+
const key = requestKey(page.request);
|
|
297
|
+
const successorHash = pageSuccessorHash(page);
|
|
298
|
+
const retained = context.state.acceptedSuccessors.get(key);
|
|
299
|
+
if (retained !== undefined) {
|
|
300
|
+
return retained === successorHash
|
|
301
|
+
? acceptedDisposition
|
|
302
|
+
: yield* Effect.fail(persistenceFailure());
|
|
303
|
+
}
|
|
304
|
+
if (!sameRequest(context.pending, page.request)) {
|
|
305
|
+
return ignoredDisposition;
|
|
306
|
+
}
|
|
307
|
+
yield* applyCatchUpPage(runtime, ingress, page);
|
|
308
|
+
yield* Effect.sync(() => {
|
|
309
|
+
context.state.acceptedSuccessors.set(key, successorHash);
|
|
310
|
+
});
|
|
311
|
+
yield* requestCertifiedHistory(runtime, page.request.conversationId);
|
|
312
|
+
return acceptedDisposition;
|
|
313
|
+
}).pipe(Effect.catchTag("ClientRepresentationError", () => Effect.succeed(ignoredDisposition)));
|
|
314
|
+
}
|
|
315
|
+
function pageSuccessorHash(page) {
|
|
316
|
+
return page.item.kind === "certified_record"
|
|
317
|
+
? page.item.actionCertifiedRecord.recordHash
|
|
318
|
+
: page.item.anchorHash;
|
|
319
|
+
}
|
|
320
|
+
function applyCatchUpPage(runtime, ingress, page) {
|
|
321
|
+
if (page.item.kind === "completed_reanchor") {
|
|
322
|
+
return applyCaughtUpReanchor(runtime, page.item);
|
|
323
|
+
}
|
|
324
|
+
const recordIngress = {
|
|
325
|
+
...ingress,
|
|
326
|
+
payload: { kind: "direct", packet: page.item },
|
|
327
|
+
};
|
|
328
|
+
return acceptProtocolRecoveryIngress(runtime, recordIngress).pipe(Effect.flatMap((disposition) => disposition === "accepted"
|
|
329
|
+
? Effect.void
|
|
330
|
+
: Effect.fail(persistenceFailure())));
|
|
331
|
+
}
|
|
332
|
+
function persistenceFailure() {
|
|
333
|
+
return new RouterWorkerPersistenceError();
|
|
334
|
+
}
|
|
335
|
+
function applyCaughtUpReanchor(runtime, completed) {
|
|
336
|
+
return Effect.gen(function* () {
|
|
337
|
+
yield* runtime.input.store.applyCatchUpReanchor({
|
|
338
|
+
conversationId: completed.reanchor.conversationId,
|
|
339
|
+
anchorHash: completed.anchorHash,
|
|
340
|
+
previousAnchorHash: completed.reanchor.previousAnchorHash,
|
|
341
|
+
routerInstanceId: completed.reanchor.routerInstanceId,
|
|
342
|
+
selectedRecordHash: completed.reanchor.selectedRecordHash,
|
|
343
|
+
canonicalBody: yield* encodeCanonical(ReanchorBody, completed.reanchor).pipe(Effect.mapError(persistenceFailure)),
|
|
344
|
+
canonicalCompletedReanchor: yield* encodeCanonical(CompletedReanchor, completed).pipe(Effect.mapError(persistenceFailure)),
|
|
345
|
+
});
|
|
346
|
+
yield* Effect.sync(() => {
|
|
347
|
+
const conversation = runtime.conversations.get(completed.reanchor.conversationId);
|
|
348
|
+
if (conversation !== undefined) {
|
|
349
|
+
conversation.currentAnchor = completed;
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
}).pipe(Effect.mapError(persistenceFailure));
|
|
353
|
+
}
|
|
354
|
+
function acceptCatchUpIncomplete(runtime, ingress, incomplete) {
|
|
355
|
+
const context = pendingCatchUpContext(runtime, incomplete.request, ingress.message.senderAgentId);
|
|
356
|
+
if (context === undefined) {
|
|
357
|
+
return Effect.succeed(ignoredDisposition);
|
|
358
|
+
}
|
|
359
|
+
return Effect.gen(function* () {
|
|
360
|
+
yield* verifyOuterMessage({
|
|
361
|
+
message: ingress.message,
|
|
362
|
+
membership: context.membership,
|
|
363
|
+
});
|
|
364
|
+
yield* verifyCatchUpIncomplete({
|
|
365
|
+
incomplete,
|
|
366
|
+
membership: context.membership,
|
|
367
|
+
responseSenderAgentId: ingress.message.senderAgentId,
|
|
368
|
+
});
|
|
369
|
+
if (!sameRequest(context.pending, incomplete.request)) {
|
|
370
|
+
return ignoredDisposition;
|
|
371
|
+
}
|
|
372
|
+
const positionIsReady = yield* Effect.sync(() => recordIncompleteResponder(context, incomplete.request.conversationId, ingress.message.senderAgentId));
|
|
373
|
+
if (!positionIsReady) {
|
|
374
|
+
return acceptedDisposition;
|
|
375
|
+
}
|
|
376
|
+
yield* positionReady(runtime, incomplete.request.conversationId);
|
|
377
|
+
return acceptedDisposition;
|
|
378
|
+
}).pipe(Effect.catchTag("ClientRepresentationError", () => Effect.succeed(ignoredDisposition)));
|
|
379
|
+
}
|
|
380
|
+
function recordIncompleteResponder(context, conversationId, senderAgentId) {
|
|
381
|
+
const responders = context.state.incompleteResponders.get(conversationId) ??
|
|
382
|
+
new Set();
|
|
383
|
+
responders.add(senderAgentId);
|
|
384
|
+
context.state.incompleteResponders.set(conversationId, responders);
|
|
385
|
+
const requiredRemoteResponders = context.membership.members.length - 1;
|
|
386
|
+
if (responders.size < requiredRemoteResponders) {
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
389
|
+
context.state.pendingRequests.delete(conversationId);
|
|
390
|
+
context.state.incompleteResponders.delete(conversationId);
|
|
391
|
+
return true;
|
|
392
|
+
}
|
|
393
|
+
function sameRequest(left, right) {
|
|
394
|
+
return requestKey(left) === requestKey(right);
|
|
395
|
+
}
|
|
396
|
+
function requestKey(request) {
|
|
397
|
+
return [
|
|
398
|
+
request.conversationId,
|
|
399
|
+
request.membershipHash,
|
|
400
|
+
request.requesterAgentId,
|
|
401
|
+
request.knownRecordHash ?? "null",
|
|
402
|
+
request.knownAnchorHash ?? "null",
|
|
403
|
+
].join("\u0000");
|
|
404
|
+
}
|
|
405
|
+
function pendingCatchUpContext(runtime, request, senderAgentId) {
|
|
406
|
+
const state = currentRecoveryState(runtime);
|
|
407
|
+
if (state === undefined) {
|
|
408
|
+
return undefined;
|
|
409
|
+
}
|
|
410
|
+
const membership = state.memberships.get(request.conversationId);
|
|
411
|
+
const pending = state.pendingRequests.get(request.conversationId);
|
|
412
|
+
if (membership === undefined || pending === undefined) {
|
|
413
|
+
return undefined;
|
|
414
|
+
}
|
|
415
|
+
if (senderAgentId === runtime.input.localAgentCard.agentId) {
|
|
416
|
+
return undefined;
|
|
417
|
+
}
|
|
418
|
+
if (memberCard(membership, senderAgentId) === undefined) {
|
|
419
|
+
return undefined;
|
|
420
|
+
}
|
|
421
|
+
return { state, membership, pending };
|
|
422
|
+
}
|
|
423
|
+
function acceptRecoveryRecord(runtime, ingress) {
|
|
424
|
+
return acceptProtocolRecoveryIngress(runtime, ingress).pipe(Effect.tap((disposition) => {
|
|
425
|
+
if (disposition !== "accepted" ||
|
|
426
|
+
ingress.payload.kind !== "direct" ||
|
|
427
|
+
ingress.payload.packet.kind !== "certified_record") {
|
|
428
|
+
return Effect.void;
|
|
429
|
+
}
|
|
430
|
+
return requestCertifiedHistory(runtime, ingress.payload.packet.actionCertifiedRecord.recordCore.action
|
|
431
|
+
.conversationId);
|
|
432
|
+
}));
|
|
433
|
+
}
|
|
434
|
+
function runRecovery(runtime, state, retainedOutbounds) {
|
|
435
|
+
return Effect.gen(function* () {
|
|
436
|
+
const sender = yield* sendRecoveryOutbound(state).pipe(Effect.forkScoped);
|
|
437
|
+
yield* recoverPositions(runtime, state).pipe(Effect.mapError(recoveryFailure));
|
|
438
|
+
yield* completeRecoveryIfIdle(state);
|
|
439
|
+
yield* Effect.raceFirst(Deferred.await(state.completion), Fiber.join(sender));
|
|
440
|
+
yield* resumeDisseminationObligations(runtime).pipe(Effect.mapError(recoveryFailure));
|
|
441
|
+
yield* resumeRecoveryOutbox(state.recovery, retainedOutbounds);
|
|
442
|
+
yield* resumeEngineFolds(runtime).pipe(Effect.mapError(recoveryFailure));
|
|
443
|
+
yield* resumePendingIntents(runtime, state.recovery);
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
function sendRecoveryOutbound(state) {
|
|
447
|
+
return Queue.take(state.outbound).pipe(Effect.flatMap((message) => state.recovery.send(message)), Effect.tap(() => outboundCommitted(state)), Effect.forever);
|
|
448
|
+
}
|
|
449
|
+
function recoverPositions(runtime, state) {
|
|
450
|
+
return Effect.forEach(state.memberships.keys(), (conversationId) => requestCertifiedHistory(runtime, conversationId), { concurrency: 1, discard: true });
|
|
451
|
+
}
|
|
452
|
+
function resumePendingIntents(runtime, recovery) {
|
|
453
|
+
return runtime.outboundGate.withPermits(1)(preparePendingIntents(runtime, recovery).pipe(Effect.zipRight(resumeUncompletedIntents(runtime)), Effect.zipRight(sendResumedOutbound(runtime, recovery))));
|
|
454
|
+
}
|
|
455
|
+
function preparePendingIntents(runtime, recovery) {
|
|
456
|
+
switch (recovery.reason) {
|
|
457
|
+
case "feed_gap":
|
|
458
|
+
case "cursor_invalid":
|
|
459
|
+
return Effect.void;
|
|
460
|
+
case "router_restarted":
|
|
461
|
+
return resetPendingIntents(runtime);
|
|
462
|
+
default: {
|
|
463
|
+
const exhaustive = recovery.reason;
|
|
464
|
+
return exhaustive;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
function resetPendingIntents(runtime) {
|
|
469
|
+
return Effect.sync(() => {
|
|
470
|
+
for (const intent of runtime.intents.values()) {
|
|
471
|
+
if (!runtime.completedPostIds.has(intent.intent.postId)) {
|
|
472
|
+
intent.proposedActionHash = undefined;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
function resumeUncompletedIntents(runtime) {
|
|
478
|
+
return Effect.forEach(runtime.intents.values(), (intent) => runtime.completedPostIds.has(intent.intent.postId)
|
|
479
|
+
? Effect.void
|
|
480
|
+
: proposeIntent(runtime, intent).pipe(Effect.mapError(recoveryFailure)), { concurrency: 1, discard: true });
|
|
481
|
+
}
|
|
482
|
+
function sendResumedOutbound(runtime, recovery) {
|
|
483
|
+
return Effect.sync(() => runtime.outbound.shift()).pipe(Effect.flatMap((outboundId) => outboundId === undefined
|
|
484
|
+
? Effect.void
|
|
485
|
+
: recovery
|
|
486
|
+
.resume(outboundId)
|
|
487
|
+
.pipe(Effect.zipRight(sendResumedOutbound(runtime, recovery)))));
|
|
488
|
+
}
|
|
489
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/endpoint/recovery/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** @file Empty-conversation foundation replacement after a Router restart. */
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import type { EngineRuntime } from "../../engine-types.js";
|
|
4
|
+
import type { EndpointRecovery } from "../../store.js";
|
|
5
|
+
import { type VerifiedMembership } from "../../representation.js";
|
|
6
|
+
import { RouterWorkerPersistenceError } from "../../router-worker/index.js";
|
|
7
|
+
import { type ActiveRecoveryState } from "../state.js";
|
|
8
|
+
interface EmptyPositionRestartInput {
|
|
9
|
+
readonly runtime: EngineRuntime;
|
|
10
|
+
readonly state: ActiveRecoveryState;
|
|
11
|
+
readonly membership: VerifiedMembership;
|
|
12
|
+
readonly recovery: EndpointRecovery;
|
|
13
|
+
readonly position: EndpointRecovery["positions"][number];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Replace a genesis foundation only while its certified history is empty.
|
|
17
|
+
* @param input Durable and recovered state for one empty conversation.
|
|
18
|
+
* @returns Completion after the new foundation is durable and active.
|
|
19
|
+
*/
|
|
20
|
+
export declare function restartEmptyPosition(input: EmptyPositionRestartInput): Effect.Effect<void, RouterWorkerPersistenceError>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=empty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty.d.ts","sourceRoot":"","sources":["../../../../src/endpoint/recovery/reanchor/empty.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAG9E,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAEV,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AAErB,UAAU,yBAAyB;IACjC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,GAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAyCnD"}
|