@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,543 @@
|
|
|
1
|
+
/** @file Router-ordered proposal selection and addressed record certification. */
|
|
2
|
+
import { MOLTZAP_VERSION } from "@moltzap/identity";
|
|
3
|
+
import { Deferred, Effect, SubscriptionRef } from "effect";
|
|
4
|
+
import { exportInbound, inboundDelivery, makeActionCertifiedRecord, makeCertifiedRecord, protocolEvidence, recordAnchorHash, stagedRecord, storedCertifiedRecord, } from "../engine-durability.js";
|
|
5
|
+
import { proposeIntent, queueCertifiedPacket, queueEvidence, } from "../engine-send.js";
|
|
6
|
+
import { ActionCore as ActionCoreSchema, ClientRepresentationError, encodeCanonical, GenesisAnchorBody, hashAnchor, MembershipDescriptor, quorumThreshold, signEvidenceMessage, verifyActionCertifiedRecord, verifyActionProposal, verifyCertifiedRecord, verifyMembershipDescriptor, verifyOuterMessage, verifyStableEvidence, } from "../representation.js";
|
|
7
|
+
import { RouterWorkerPersistenceError, } from "../router-worker/index.js";
|
|
8
|
+
import { evidenceMatchesFold, evidenceRoute, verifiedEvidenceForRoute, } from "./evidence.js";
|
|
9
|
+
const persistenceFailure = () => new RouterWorkerPersistenceError();
|
|
10
|
+
const isSemanticStoreRejection = (error) => error.reason === "conflict" || error.reason === "invalid-input";
|
|
11
|
+
const localRepresentationFailure = () => persistenceFailure();
|
|
12
|
+
const sameBytes = (left, right) => left.byteLength === right.byteLength &&
|
|
13
|
+
left.every((byte, index) => byte === right[index]);
|
|
14
|
+
const sameCanonical = (schema, left, right) => Effect.all([
|
|
15
|
+
encodeCanonical(schema, left),
|
|
16
|
+
encodeCanonical(schema, right),
|
|
17
|
+
]).pipe(Effect.map(([leftBytes, rightBytes]) => sameBytes(leftBytes, rightBytes)));
|
|
18
|
+
const currentAnchorHash = (conversation) => conversation.currentAnchor.kind === "genesis_anchor_body"
|
|
19
|
+
? hashAnchor(conversation.currentAnchor).pipe(Effect.mapError(localRepresentationFailure))
|
|
20
|
+
: Effect.succeed(conversation.currentAnchor.anchorHash);
|
|
21
|
+
const gapFree = (conversation, action) => Effect.gen(function* () {
|
|
22
|
+
if (action.kind === "GENESIS") {
|
|
23
|
+
return (conversation.head === undefined &&
|
|
24
|
+
conversation.currentAnchor.kind === "genesis_anchor_body" &&
|
|
25
|
+
(yield* sameCanonical(GenesisAnchorBody, conversation.currentAnchor, action.anchor).pipe(Effect.mapError(localRepresentationFailure))));
|
|
26
|
+
}
|
|
27
|
+
return (conversation.head?.recordHash === action.previousRecordHash &&
|
|
28
|
+
(yield* currentAnchorHash(conversation)) === action.anchorHash);
|
|
29
|
+
});
|
|
30
|
+
const conversationForAction = (runtime, action, routerInstanceId) => Effect.gen(function* () {
|
|
31
|
+
const retained = runtime.conversations.get(action.conversationId);
|
|
32
|
+
if (action.kind === "POST") {
|
|
33
|
+
return retained;
|
|
34
|
+
}
|
|
35
|
+
if (retained !== undefined) {
|
|
36
|
+
return retained;
|
|
37
|
+
}
|
|
38
|
+
const membership = yield* verifyMembershipDescriptor(action.membership, runtime.input.registrySignerPublicKey);
|
|
39
|
+
if (action.anchor.routerInstanceId !== routerInstanceId) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
conversationId: action.conversationId,
|
|
44
|
+
membership,
|
|
45
|
+
currentAnchor: action.anchor,
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
const genesisFoundation = (conversation, action) => Effect.gen(function* () {
|
|
49
|
+
return {
|
|
50
|
+
conversationId: action.conversationId,
|
|
51
|
+
membershipHash: conversation.membership.hash,
|
|
52
|
+
canonicalMembership: yield* encodeCanonical(MembershipDescriptor, conversation.membership.descriptor).pipe(Effect.mapError(localRepresentationFailure)),
|
|
53
|
+
anchorHash: yield* hashAnchor(action.anchor).pipe(Effect.mapError(localRepresentationFailure)),
|
|
54
|
+
canonicalAnchor: yield* encodeCanonical(GenesisAnchorBody, action.anchor).pipe(Effect.mapError(localRepresentationFailure)),
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
const proposalLock = (conversation, action, actionHash) => encodeCanonical(ActionCoreSchema, action).pipe(Effect.mapError(localRepresentationFailure), Effect.map((canonicalActionCore) => ({
|
|
58
|
+
conversationId: conversation.conversationId,
|
|
59
|
+
...(action.previousRecordHash === null
|
|
60
|
+
? {}
|
|
61
|
+
: { previousRecordHash: action.previousRecordHash }),
|
|
62
|
+
actionHash,
|
|
63
|
+
canonicalActionCore,
|
|
64
|
+
})));
|
|
65
|
+
const lockAction = (runtime, conversation, action, actionHash) => Effect.gen(function* () {
|
|
66
|
+
const lock = yield* proposalLock(conversation, action, actionHash);
|
|
67
|
+
if (action.kind === "GENESIS" &&
|
|
68
|
+
!runtime.conversations.has(action.conversationId)) {
|
|
69
|
+
const foundation = yield* genesisFoundation(conversation, action);
|
|
70
|
+
yield* runtime.input.store.lockGenesisProposal(foundation, lock);
|
|
71
|
+
yield* Effect.sync(() => {
|
|
72
|
+
runtime.conversations.set(action.conversationId, conversation);
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
yield* runtime.input.store.lockProposal(lock);
|
|
77
|
+
});
|
|
78
|
+
const foldFor = (runtime, conversation, action, actionHash) => {
|
|
79
|
+
const retained = runtime.actionFolds.get(actionHash);
|
|
80
|
+
if (retained !== undefined) {
|
|
81
|
+
return retained;
|
|
82
|
+
}
|
|
83
|
+
const fold = {
|
|
84
|
+
conversation,
|
|
85
|
+
action,
|
|
86
|
+
actionHash,
|
|
87
|
+
routerAnchor: action.kind === "GENESIS" ? action.anchor : conversation.currentAnchor,
|
|
88
|
+
actionEvidence: new Map(),
|
|
89
|
+
durabilityEvidence: new Map(),
|
|
90
|
+
localActionEvidenceQueued: false,
|
|
91
|
+
actionCertifiedRecordQueued: false,
|
|
92
|
+
localDurabilityEvidenceQueued: false,
|
|
93
|
+
certifiedRecordQueued: false,
|
|
94
|
+
};
|
|
95
|
+
runtime.actionFolds.set(actionHash, fold);
|
|
96
|
+
return fold;
|
|
97
|
+
};
|
|
98
|
+
const mergeEvidence = (runtime, fold, kind, message) => Effect.gen(function* () {
|
|
99
|
+
const subjectId = kind === "action" ? fold.actionHash : fold.recordHash;
|
|
100
|
+
if (subjectId === undefined) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const row = yield* protocolEvidence(fold.conversation.conversationId, kind, subjectId, message).pipe(Effect.mapError(localRepresentationFailure));
|
|
104
|
+
yield* runtime.input.store.mergeEvidence(row);
|
|
105
|
+
const evidence = kind === "action" ? fold.actionEvidence : fold.durabilityEvidence;
|
|
106
|
+
yield* Effect.sync(() => {
|
|
107
|
+
evidence.set(message.senderAgentId, message);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
const localActionEvidence = (runtime, fold) => Effect.gen(function* () {
|
|
111
|
+
const localAgentId = runtime.input.localAgentCard.agentId;
|
|
112
|
+
if (fold.localActionEvidenceQueued) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const retained = fold.actionEvidence.has(localAgentId);
|
|
116
|
+
const evidence = yield* selectLocalActionEvidence(runtime, fold);
|
|
117
|
+
if (evidence === undefined) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (!retained) {
|
|
121
|
+
yield* mergeEvidence(runtime, fold, "action", evidence);
|
|
122
|
+
}
|
|
123
|
+
yield* Effect.uninterruptible(queueEvidence(runtime, fold.conversation, evidence).pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(Effect.sync(() => {
|
|
124
|
+
fold.localActionEvidenceQueued = true;
|
|
125
|
+
}))));
|
|
126
|
+
});
|
|
127
|
+
function selectLocalActionEvidence(runtime, fold) {
|
|
128
|
+
const retained = fold.actionEvidence.get(runtime.input.localAgentCard.agentId);
|
|
129
|
+
if (retained !== undefined) {
|
|
130
|
+
return Effect.succeed(retained);
|
|
131
|
+
}
|
|
132
|
+
return runtime.input
|
|
133
|
+
.actionPolicy({
|
|
134
|
+
action: fold.action,
|
|
135
|
+
membership: fold.conversation.membership,
|
|
136
|
+
})
|
|
137
|
+
.pipe(Effect.flatMap((policyDecision) => {
|
|
138
|
+
switch (policyDecision) {
|
|
139
|
+
case "sign":
|
|
140
|
+
return signLocalActionEvidence(runtime, fold);
|
|
141
|
+
case "refuse":
|
|
142
|
+
return Effect.succeed(undefined);
|
|
143
|
+
default: {
|
|
144
|
+
const exhaustive = policyDecision;
|
|
145
|
+
return exhaustive;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
function signLocalActionEvidence(runtime, fold) {
|
|
151
|
+
return signEvidenceMessage({
|
|
152
|
+
statement: {
|
|
153
|
+
moltzapVersion: MOLTZAP_VERSION,
|
|
154
|
+
kind: "action_signature",
|
|
155
|
+
signerAgentId: runtime.input.localAgentCard.agentId,
|
|
156
|
+
actionHash: fold.actionHash,
|
|
157
|
+
},
|
|
158
|
+
agentCard: runtime.input.localAgentCard,
|
|
159
|
+
signingAuthority: runtime.input.signingAuthority,
|
|
160
|
+
}).pipe(Effect.mapError(localRepresentationFailure));
|
|
161
|
+
}
|
|
162
|
+
const hasActionThreshold = (fold) => {
|
|
163
|
+
const memberCount = fold.conversation.membership.members.length;
|
|
164
|
+
const count = fold.actionEvidence.size;
|
|
165
|
+
const thresholdReached = fold.action.kind === "GENESIS"
|
|
166
|
+
? count === memberCount
|
|
167
|
+
: count >= quorumThreshold(memberCount);
|
|
168
|
+
return (thresholdReached &&
|
|
169
|
+
fold.actionEvidence.has(fold.action.postIntent.authorAgentId));
|
|
170
|
+
};
|
|
171
|
+
const hasDurabilityThreshold = (fold) => fold.durabilityEvidence.size >=
|
|
172
|
+
quorumThreshold(fold.conversation.membership.members.length);
|
|
173
|
+
const actionAnchorHash = (fold) => recordAnchorHash(fold).pipe(Effect.mapError(localRepresentationFailure));
|
|
174
|
+
const localDurabilityEvidence = (runtime, fold) => Effect.gen(function* () {
|
|
175
|
+
const recordHash = fold.recordHash;
|
|
176
|
+
const localAgentId = runtime.input.localAgentCard.agentId;
|
|
177
|
+
if (recordHash === undefined || fold.localDurabilityEvidenceQueued) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const retained = fold.durabilityEvidence.get(localAgentId);
|
|
181
|
+
const evidence = retained ??
|
|
182
|
+
(yield* signEvidenceMessage({
|
|
183
|
+
statement: {
|
|
184
|
+
moltzapVersion: MOLTZAP_VERSION,
|
|
185
|
+
kind: "durability_vote",
|
|
186
|
+
signerAgentId: localAgentId,
|
|
187
|
+
conversationId: fold.conversation.conversationId,
|
|
188
|
+
membershipHash: fold.conversation.membership.hash,
|
|
189
|
+
recordHash,
|
|
190
|
+
},
|
|
191
|
+
agentCard: runtime.input.localAgentCard,
|
|
192
|
+
signingAuthority: runtime.input.signingAuthority,
|
|
193
|
+
}).pipe(Effect.mapError(localRepresentationFailure)));
|
|
194
|
+
if (retained === undefined) {
|
|
195
|
+
yield* mergeEvidence(runtime, fold, "durability", evidence);
|
|
196
|
+
}
|
|
197
|
+
yield* Effect.uninterruptible(queueEvidence(runtime, fold.conversation, evidence).pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(Effect.sync(() => {
|
|
198
|
+
fold.localDurabilityEvidenceQueued = true;
|
|
199
|
+
}))));
|
|
200
|
+
});
|
|
201
|
+
const applyPromotionState = (runtime, fold, record) => Effect.sync(() => {
|
|
202
|
+
fold.certifiedRecord = record;
|
|
203
|
+
fold.conversation.head = {
|
|
204
|
+
recordHash: record.actionCertifiedRecord.recordHash,
|
|
205
|
+
record,
|
|
206
|
+
};
|
|
207
|
+
runtime.completedPostIds.add(fold.action.postIntent.postId);
|
|
208
|
+
return fold.action.postIntent.authorAgentId ===
|
|
209
|
+
runtime.input.localAgentCard.agentId
|
|
210
|
+
? runtime.intents.get(fold.action.postIntent.postId)
|
|
211
|
+
: undefined;
|
|
212
|
+
});
|
|
213
|
+
function completePromotion(runtime, fold, record) {
|
|
214
|
+
return applyPromotionState(runtime, fold, record).pipe(Effect.flatMap((intent) => intent === undefined
|
|
215
|
+
? Effect.void
|
|
216
|
+
: Deferred.succeed(intent.completion, undefined).pipe(Effect.asVoid)));
|
|
217
|
+
}
|
|
218
|
+
const reproposalDispositionByReason = {
|
|
219
|
+
"certification-unavailable": "ignore",
|
|
220
|
+
"content-invalid": "fail",
|
|
221
|
+
"invalid-address": "fail",
|
|
222
|
+
"membership-invalid": "fail",
|
|
223
|
+
"network-unavailable": "ignore",
|
|
224
|
+
"not-registered": "fail",
|
|
225
|
+
"persistence-failed": "fail",
|
|
226
|
+
"unknown-agent": "fail",
|
|
227
|
+
"version-mismatch": "fail",
|
|
228
|
+
};
|
|
229
|
+
const reproposePendingIntent = (runtime, pending) => proposeIntent(runtime, pending).pipe(Effect.asVoid, Effect.catchTag("SendError", (error) => reproposalDispositionByReason[error.reason] === "ignore"
|
|
230
|
+
? Effect.void
|
|
231
|
+
: Effect.fail(persistenceFailure())));
|
|
232
|
+
const rebasePendingIntents = (runtime, conversationId) => Effect.forEach(runtime.intents.values(), (pending) => pending.intent.conversationId === conversationId &&
|
|
233
|
+
!runtime.completedPostIds.has(pending.intent.postId)
|
|
234
|
+
? reproposePendingIntent(runtime, pending)
|
|
235
|
+
: Effect.void, { concurrency: 1, discard: true });
|
|
236
|
+
function persistPromotionWithoutDelivery(runtime, record, source) {
|
|
237
|
+
switch (source) {
|
|
238
|
+
case "assembled":
|
|
239
|
+
return runtime.input.store.promoteRecordForDissemination(record);
|
|
240
|
+
case "catch-up":
|
|
241
|
+
return runtime.input.store.applyCatchUpRecord(record);
|
|
242
|
+
case "received":
|
|
243
|
+
return runtime.input.store.promoteRecord(record);
|
|
244
|
+
default: {
|
|
245
|
+
const exhaustive = source;
|
|
246
|
+
return exhaustive;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function persistPromotionWithDelivery(runtime, record, source, delivery) {
|
|
251
|
+
switch (source) {
|
|
252
|
+
case "assembled":
|
|
253
|
+
return runtime.input.store.promoteRecordForDissemination(record, delivery);
|
|
254
|
+
case "catch-up":
|
|
255
|
+
return runtime.input.store.applyCatchUpRecord(record, delivery);
|
|
256
|
+
case "received":
|
|
257
|
+
return runtime.input.store.promoteRecord(record, delivery);
|
|
258
|
+
default: {
|
|
259
|
+
const exhaustive = source;
|
|
260
|
+
return exhaustive;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
function markCertifiedPacketQueued(fold) {
|
|
265
|
+
return Effect.sync(() => {
|
|
266
|
+
fold.certifiedRecordQueued = true;
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
const promote = (runtime, fold, record, source) => Effect.gen(function* () {
|
|
270
|
+
const stored = yield* storedCertifiedRecord(record, fold).pipe(Effect.mapError(localRepresentationFailure));
|
|
271
|
+
const remote = fold.action.postIntent.authorAgentId !==
|
|
272
|
+
runtime.input.localAgentCard.agentId;
|
|
273
|
+
const delivery = remote
|
|
274
|
+
? yield* inboundDelivery(fold.conversation, record, runtime.input.localAgentCard.agentId).pipe(Effect.mapError(localRepresentationFailure))
|
|
275
|
+
: undefined;
|
|
276
|
+
yield* delivery === undefined
|
|
277
|
+
? persistPromotionWithoutDelivery(runtime, stored, source)
|
|
278
|
+
: persistPromotionWithDelivery(runtime, stored, source, delivery.input);
|
|
279
|
+
if (delivery !== undefined) {
|
|
280
|
+
yield* exportInbound(runtime, delivery.message);
|
|
281
|
+
}
|
|
282
|
+
const queuePromotion = source === "assembled"
|
|
283
|
+
? queueCertifiedPacket(runtime, fold.conversation, record).pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(markCertifiedPacketQueued(fold)))
|
|
284
|
+
: Effect.sync(() => {
|
|
285
|
+
fold.actionCertifiedRecordQueued = true;
|
|
286
|
+
fold.certifiedRecordQueued = true;
|
|
287
|
+
});
|
|
288
|
+
yield* Effect.uninterruptible(queuePromotion.pipe(Effect.zipRight(completePromotion(runtime, fold, record))));
|
|
289
|
+
yield* SubscriptionRef.update(runtime.revision, (revision) => revision + 1);
|
|
290
|
+
yield* rebasePendingIntents(runtime, fold.conversation.conversationId);
|
|
291
|
+
});
|
|
292
|
+
const maybePromote = (runtime, fold, actionCertifiedRecord) => Effect.gen(function* () {
|
|
293
|
+
if (!hasDurabilityThreshold(fold) || fold.certifiedRecord !== undefined) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const record = yield* makeCertifiedRecord(actionCertifiedRecord, fold).pipe(Effect.mapError(localRepresentationFailure));
|
|
297
|
+
yield* verifyCertifiedRecord({
|
|
298
|
+
record,
|
|
299
|
+
registrySignerPublicKey: runtime.input.registrySignerPublicKey,
|
|
300
|
+
}).pipe(Effect.mapError(localRepresentationFailure));
|
|
301
|
+
yield* promote(runtime, fold, record, "assembled");
|
|
302
|
+
});
|
|
303
|
+
function persistActionCertificate(runtime, record, source) {
|
|
304
|
+
switch (source) {
|
|
305
|
+
case "assembled":
|
|
306
|
+
return runtime.input.store.stageRecordForDissemination(record);
|
|
307
|
+
case "received":
|
|
308
|
+
return runtime.input.store.stageRecord(record);
|
|
309
|
+
default: {
|
|
310
|
+
const exhaustive = source;
|
|
311
|
+
return exhaustive;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
const stageActionCertificate = (runtime, fold, record, source) => Effect.gen(function* () {
|
|
316
|
+
const stored = yield* stagedRecord(record).pipe(Effect.mapError(localRepresentationFailure));
|
|
317
|
+
yield* persistActionCertificate(runtime, stored, source);
|
|
318
|
+
const updateFold = Effect.sync(() => {
|
|
319
|
+
fold.recordHash = record.recordHash;
|
|
320
|
+
runtime.recordFolds.set(record.recordHash, fold);
|
|
321
|
+
});
|
|
322
|
+
if (source === "assembled") {
|
|
323
|
+
yield* Effect.uninterruptible(queueCertifiedPacket(runtime, fold.conversation, record).pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(Effect.sync(() => {
|
|
324
|
+
fold.actionCertifiedRecordQueued = true;
|
|
325
|
+
})), Effect.zipRight(updateFold)));
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
yield* Effect.sync(() => {
|
|
329
|
+
fold.actionCertifiedRecordQueued = true;
|
|
330
|
+
}).pipe(Effect.zipRight(updateFold));
|
|
331
|
+
}
|
|
332
|
+
yield* localDurabilityEvidence(runtime, fold);
|
|
333
|
+
yield* maybePromote(runtime, fold, record);
|
|
334
|
+
});
|
|
335
|
+
const maybeCertifyAction = (runtime, fold) => Effect.gen(function* () {
|
|
336
|
+
if (!hasActionThreshold(fold) || fold.recordHash !== undefined) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const record = yield* makeActionCertifiedRecord(fold, yield* actionAnchorHash(fold)).pipe(Effect.mapError(localRepresentationFailure));
|
|
340
|
+
yield* stageActionCertificate(runtime, fold, record, "assembled");
|
|
341
|
+
});
|
|
342
|
+
const prepareProposalFold = (runtime, ingress, proposal) => Effect.gen(function* () {
|
|
343
|
+
const conversation = yield* conversationForAction(runtime, proposal.action, ingress.routerInstanceId);
|
|
344
|
+
if (conversation === undefined ||
|
|
345
|
+
!(yield* gapFree(conversation, proposal.action))) {
|
|
346
|
+
return undefined;
|
|
347
|
+
}
|
|
348
|
+
yield* verifyOuterMessage({
|
|
349
|
+
message: ingress.message,
|
|
350
|
+
membership: conversation.membership,
|
|
351
|
+
});
|
|
352
|
+
const verified = yield* verifyActionProposal({
|
|
353
|
+
proposal,
|
|
354
|
+
membership: conversation.membership,
|
|
355
|
+
outerSenderAgentId: ingress.message.senderAgentId,
|
|
356
|
+
});
|
|
357
|
+
yield* lockAction(runtime, conversation, proposal.action, verified.actionHash);
|
|
358
|
+
return foldFor(runtime, conversation, proposal.action, verified.actionHash);
|
|
359
|
+
});
|
|
360
|
+
const acceptProposal = (runtime, ingress, proposal) => Effect.gen(function* () {
|
|
361
|
+
const fold = yield* prepareProposalFold(runtime, ingress, proposal);
|
|
362
|
+
if (fold === undefined) {
|
|
363
|
+
return "ignored";
|
|
364
|
+
}
|
|
365
|
+
yield* localActionEvidence(runtime, fold);
|
|
366
|
+
yield* maybeCertifyAction(runtime, fold);
|
|
367
|
+
return "accepted";
|
|
368
|
+
});
|
|
369
|
+
const acceptEvidence = (runtime, ingress, message) => Effect.gen(function* () {
|
|
370
|
+
const route = yield* evidenceRoute(runtime, message);
|
|
371
|
+
if (route === undefined) {
|
|
372
|
+
return "ignored";
|
|
373
|
+
}
|
|
374
|
+
const evidence = yield* verifiedEvidenceForRoute(ingress, message, route);
|
|
375
|
+
if (!evidenceMatchesFold(route, evidence.statement)) {
|
|
376
|
+
return "ignored";
|
|
377
|
+
}
|
|
378
|
+
yield* mergeEvidence(runtime, route.fold, route.kind, evidence.message);
|
|
379
|
+
yield* advanceEvidenceFold(runtime, route);
|
|
380
|
+
return "accepted";
|
|
381
|
+
});
|
|
382
|
+
function advanceEvidenceFold(runtime, route) {
|
|
383
|
+
switch (route.kind) {
|
|
384
|
+
case "action":
|
|
385
|
+
return maybeCertifyAction(runtime, route.fold);
|
|
386
|
+
case "durability":
|
|
387
|
+
return advanceDurabilityFold(runtime, route.fold);
|
|
388
|
+
default: {
|
|
389
|
+
const exhaustive = route;
|
|
390
|
+
return exhaustive;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
function advanceDurabilityFold(runtime, fold) {
|
|
395
|
+
const recordHash = fold.recordHash;
|
|
396
|
+
if (recordHash === undefined) {
|
|
397
|
+
return Effect.void;
|
|
398
|
+
}
|
|
399
|
+
const record = runtime.recordFolds.get(recordHash);
|
|
400
|
+
if (record === undefined || !hasDurabilityThreshold(record)) {
|
|
401
|
+
return Effect.void;
|
|
402
|
+
}
|
|
403
|
+
return Effect.gen(function* () {
|
|
404
|
+
const actionCertifiedRecord = yield* makeActionCertifiedRecord(record, yield* actionAnchorHash(record)).pipe(Effect.mapError(localRepresentationFailure));
|
|
405
|
+
yield* maybePromote(runtime, record, actionCertifiedRecord);
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
const membershipForRecord = (runtime, record) => verifyActionCertifiedRecord({
|
|
409
|
+
record,
|
|
410
|
+
registrySignerPublicKey: runtime.input.registrySignerPublicKey,
|
|
411
|
+
}).pipe(Effect.map((verified) => verified.membership));
|
|
412
|
+
const ensureConversation = (runtime, membership, record) => {
|
|
413
|
+
const action = record.recordCore.action;
|
|
414
|
+
const retained = runtime.conversations.get(action.conversationId);
|
|
415
|
+
if (retained !== undefined) {
|
|
416
|
+
return retained.membership.hash === membership.hash ? retained : undefined;
|
|
417
|
+
}
|
|
418
|
+
if (action.kind !== "GENESIS" ||
|
|
419
|
+
record.routerAnchor.kind !== "genesis_anchor_body") {
|
|
420
|
+
return undefined;
|
|
421
|
+
}
|
|
422
|
+
return {
|
|
423
|
+
conversationId: action.conversationId,
|
|
424
|
+
membership,
|
|
425
|
+
currentAnchor: record.routerAnchor,
|
|
426
|
+
};
|
|
427
|
+
};
|
|
428
|
+
const certificateEvidenceMatches = (fold, kind, evidence) => evidenceMatchesFold(kind === "action" ? { fold, kind: "action" } : { fold, kind: "durability" }, evidence.statement);
|
|
429
|
+
const mergeCertificateEvidence = (runtime, fold, kind, representations) => Effect.forEach(representations, (representation) => verifyStableEvidence({
|
|
430
|
+
representation,
|
|
431
|
+
membership: fold.conversation.membership,
|
|
432
|
+
}).pipe(Effect.filterOrFail((evidence) => certificateEvidenceMatches(fold, kind, evidence), () => new ClientRepresentationError()), Effect.flatMap((evidence) => mergeEvidence(runtime, fold, kind, evidence.message))), { concurrency: 1, discard: true });
|
|
433
|
+
const prepareRecordFold = (runtime, ingress, membership, record) => Effect.gen(function* () {
|
|
434
|
+
yield* verifyOuterMessage({
|
|
435
|
+
message: ingress.message,
|
|
436
|
+
membership,
|
|
437
|
+
});
|
|
438
|
+
const conversation = ensureConversation(runtime, membership, record);
|
|
439
|
+
const action = record.recordCore.action;
|
|
440
|
+
if (conversation === undefined || !(yield* gapFree(conversation, action))) {
|
|
441
|
+
return undefined;
|
|
442
|
+
}
|
|
443
|
+
yield* lockAction(runtime, conversation, action, record.recordCore.actionHash);
|
|
444
|
+
const fold = foldFor(runtime, conversation, action, record.recordCore.actionHash);
|
|
445
|
+
yield* mergeCertificateEvidence(runtime, fold, "action", record.actionCertificate.signatures);
|
|
446
|
+
return fold;
|
|
447
|
+
});
|
|
448
|
+
const acceptActionCertifiedRecord = (runtime, ingress, record) => Effect.gen(function* () {
|
|
449
|
+
const membership = yield* membershipForRecord(runtime, record);
|
|
450
|
+
const fold = yield* prepareRecordFold(runtime, ingress, membership, record);
|
|
451
|
+
if (fold === undefined) {
|
|
452
|
+
return "ignored";
|
|
453
|
+
}
|
|
454
|
+
yield* stageActionCertificate(runtime, fold, record, "received");
|
|
455
|
+
return "accepted";
|
|
456
|
+
});
|
|
457
|
+
const acceptCertifiedRecord = (runtime, ingress, record, applyCatchUp = false) => Effect.gen(function* () {
|
|
458
|
+
const membership = yield* verifyCertifiedRecord({
|
|
459
|
+
record,
|
|
460
|
+
registrySignerPublicKey: runtime.input.registrySignerPublicKey,
|
|
461
|
+
});
|
|
462
|
+
const actionRecord = record.actionCertifiedRecord;
|
|
463
|
+
const fold = yield* prepareRecordFold(runtime, ingress, membership, actionRecord);
|
|
464
|
+
if (fold === undefined) {
|
|
465
|
+
return "ignored";
|
|
466
|
+
}
|
|
467
|
+
yield* runtime.input.store.stageRecord(yield* stagedRecord(actionRecord));
|
|
468
|
+
yield* Effect.sync(() => {
|
|
469
|
+
fold.recordHash = actionRecord.recordHash;
|
|
470
|
+
runtime.recordFolds.set(actionRecord.recordHash, fold);
|
|
471
|
+
});
|
|
472
|
+
yield* mergeCertificateEvidence(runtime, fold, "durability", record.durabilityCertificate.votes);
|
|
473
|
+
yield* promote(runtime, fold, record, applyCatchUp ? "catch-up" : "received");
|
|
474
|
+
return "accepted";
|
|
475
|
+
});
|
|
476
|
+
const acceptDirectPacket = (runtime, ingress) => {
|
|
477
|
+
if (ingress.payload.kind !== "direct") {
|
|
478
|
+
return acceptEvidence(runtime, ingress, ingress.payload.message);
|
|
479
|
+
}
|
|
480
|
+
return acceptPacket(runtime, ingress, ingress.payload.packet);
|
|
481
|
+
};
|
|
482
|
+
function acceptPacket(runtime, ingress, packet) {
|
|
483
|
+
switch (packet.kind) {
|
|
484
|
+
case "action_proposal":
|
|
485
|
+
return acceptProposal(runtime, ingress, packet);
|
|
486
|
+
case "action_certified_record":
|
|
487
|
+
return acceptActionCertifiedRecord(runtime, ingress, packet);
|
|
488
|
+
case "certified_record":
|
|
489
|
+
return acceptCertifiedRecord(runtime, ingress, packet);
|
|
490
|
+
case "catch_up_request":
|
|
491
|
+
case "catch_up_page":
|
|
492
|
+
case "catch_up_incomplete":
|
|
493
|
+
case "completed_reanchor":
|
|
494
|
+
return Effect.succeed("ignored");
|
|
495
|
+
default: {
|
|
496
|
+
const exhaustive = packet;
|
|
497
|
+
return exhaustive;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
const ignoredDisposition = "ignored";
|
|
502
|
+
/**
|
|
503
|
+
* Apply one semantically verified Router-ordered protocol value.
|
|
504
|
+
* @param runtime Current engine state and durable protocol dependencies.
|
|
505
|
+
* @param ingress Authenticated Router-ordered protocol input.
|
|
506
|
+
* @returns Whether the input changed durable state or was irrelevant.
|
|
507
|
+
*/
|
|
508
|
+
export const acceptEngineIngress = (runtime, ingress) => runtime.gate
|
|
509
|
+
.withPermits(1)(acceptDirectPacket(runtime, ingress))
|
|
510
|
+
.pipe(Effect.catchTag("ClientRepresentationError", () => Effect.succeed(ignoredDisposition)), Effect.catchTag("EndpointStoreError", (error) => isSemanticStoreRejection(error)
|
|
511
|
+
? Effect.succeed(ignoredDisposition)
|
|
512
|
+
: Effect.fail(persistenceFailure())), Effect.withSpan("acceptEngineIngress"));
|
|
513
|
+
/**
|
|
514
|
+
* Recovery accepts complete certified records through the same durable path.
|
|
515
|
+
* @param runtime Current engine state and durable protocol dependencies.
|
|
516
|
+
* @param ingress Authenticated recovery input from one fixed member.
|
|
517
|
+
* @returns Whether recovery advanced durable state or ignored the input.
|
|
518
|
+
*/
|
|
519
|
+
export const acceptEngineRecoveryIngress = (runtime, ingress) => runtime.gate
|
|
520
|
+
.withPermits(1)(ingress.payload.kind === "direct" &&
|
|
521
|
+
ingress.payload.packet.kind === "certified_record"
|
|
522
|
+
? acceptCertifiedRecord(runtime, ingress, ingress.payload.packet, true)
|
|
523
|
+
: Effect.succeed(ignoredDisposition))
|
|
524
|
+
.pipe(Effect.catchTag("ClientRepresentationError", () => Effect.succeed(ignoredDisposition)), Effect.catchTag("EndpointStoreError", (error) => isSemanticStoreRejection(error)
|
|
525
|
+
? Effect.succeed(ignoredDisposition)
|
|
526
|
+
: Effect.fail(persistenceFailure())), Effect.withSpan("acceptEngineRecoveryIngress"));
|
|
527
|
+
/**
|
|
528
|
+
* Resume only the evidence obligations already selected in durable state.
|
|
529
|
+
* @param runtime Recovered engine state and durable protocol dependencies.
|
|
530
|
+
* @returns Completion after all resumable evidence work has been queued.
|
|
531
|
+
*/
|
|
532
|
+
export const resumeEngineFolds = (runtime) => runtime.gate
|
|
533
|
+
.withPermits(1)(Effect.forEach(runtime.actionFolds.values(), (fold) => Effect.gen(function* () {
|
|
534
|
+
yield* localActionEvidence(runtime, fold);
|
|
535
|
+
yield* maybeCertifyAction(runtime, fold);
|
|
536
|
+
if (fold.recordHash !== undefined) {
|
|
537
|
+
yield* localDurabilityEvidence(runtime, fold);
|
|
538
|
+
const record = yield* makeActionCertifiedRecord(fold, yield* actionAnchorHash(fold)).pipe(Effect.mapError(localRepresentationFailure));
|
|
539
|
+
yield* maybePromote(runtime, fold, record);
|
|
540
|
+
}
|
|
541
|
+
}), { concurrency: 1, discard: true }))
|
|
542
|
+
.pipe(Effect.catchTag("EndpointStoreError", () => Effect.fail(persistenceFailure())), Effect.withSpan("resumeEngineFolds"));
|
|
543
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/endpoint/protocol/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @file Completion barrier shared by protocol activation and recovery. */
|
|
2
|
+
import { Deferred, Effect } from "effect";
|
|
3
|
+
import type { EngineRuntime } from "../engine-types.js";
|
|
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 declare function installRecoveryBarrier(runtime: EngineRuntime): Effect.Effect<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Read the barrier that blocks new action activation during discontinuity.
|
|
12
|
+
* @param runtime Engine whose recovery state guards action activation.
|
|
13
|
+
* @returns The pending barrier, or absence while the Router is active.
|
|
14
|
+
*/
|
|
15
|
+
export declare function currentRecoveryBarrier(runtime: EngineRuntime): Deferred.Deferred<undefined> | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Release the exact barrier after recovery has resumed every durable fold.
|
|
18
|
+
* @param runtime Engine returning to normal protocol operation.
|
|
19
|
+
* @param barrier Barrier captured by the completed recovery attempt.
|
|
20
|
+
* @returns Completion after waiters resume and the barrier is removed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function completeRecoveryBarrier(runtime: EngineRuntime, barrier: Deferred.Deferred<undefined>): Effect.Effect<void>;
|
|
23
|
+
//# sourceMappingURL=barrier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"barrier.d.ts","sourceRoot":"","sources":["../../../src/endpoint/recovery/barrier.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAerB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,GACrB,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,GACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAgBrB"}
|