@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,471 @@
|
|
|
1
|
+
/** @file Atomic identity, post-intent, foundation, and Router-anchor transitions. */
|
|
2
|
+
import { copyBytes, readBytes, readOptionalText, readText, requireBytes, requireEqual, requireSameBytes, requireText, StoreSignal, transaction, } from "./database/index.js";
|
|
3
|
+
import { findProposalLock, findStagedReanchor, readStoredIdentity, readStoredPosition, requireSameProposalLock, requireSameReanchor, } from "./rows/index.js";
|
|
4
|
+
const GENESIS_PREDECESSOR = "";
|
|
5
|
+
/** Singleton identity binding operations. */
|
|
6
|
+
export const bindIdentity = Object.freeze({
|
|
7
|
+
read: readStoredIdentity,
|
|
8
|
+
write: writeIdentity,
|
|
9
|
+
});
|
|
10
|
+
/**
|
|
11
|
+
* Durably binds one author-scoped post to its immutable canonical intent.
|
|
12
|
+
*
|
|
13
|
+
* @param database Exclusively owned endpoint database.
|
|
14
|
+
* @param binding Canonical post recovery identity and optional new foundation.
|
|
15
|
+
* @returns Whether the same binding was inserted or already durable.
|
|
16
|
+
*/
|
|
17
|
+
export function bindPostIntent(database, binding) {
|
|
18
|
+
const intent = binding.intent;
|
|
19
|
+
requireText(intent.conversationId);
|
|
20
|
+
requireText(intent.membershipHash);
|
|
21
|
+
requireText(intent.authorAgentId);
|
|
22
|
+
requireText(intent.postId);
|
|
23
|
+
requireBytes(intent.canonicalIntent);
|
|
24
|
+
if (intent.completedRecordHash !== undefined) {
|
|
25
|
+
throw new StoreSignal("invalid-input");
|
|
26
|
+
}
|
|
27
|
+
if (binding.kind === "new-conversation") {
|
|
28
|
+
validateFoundation(binding.foundation);
|
|
29
|
+
requireEqual(binding.foundation.conversationId, intent.conversationId);
|
|
30
|
+
requireEqual(binding.foundation.membershipHash, intent.membershipHash);
|
|
31
|
+
}
|
|
32
|
+
return transaction(database, () => {
|
|
33
|
+
const foundation = binding.kind === "new-conversation"
|
|
34
|
+
? putConversationFoundationInTransaction(database, binding.foundation)
|
|
35
|
+
: requireConversationFoundation(database, intent);
|
|
36
|
+
const postIntent = bindPostIntentInTransaction(database, intent);
|
|
37
|
+
return foundation === "inserted" || postIntent === "inserted"
|
|
38
|
+
? "inserted"
|
|
39
|
+
: "existing";
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Atomically persists the immutable membership and genesis Router anchor.
|
|
44
|
+
*
|
|
45
|
+
* @param database Exclusively owned endpoint database.
|
|
46
|
+
* @param foundation Verified immutable conversation foundation.
|
|
47
|
+
* @returns Whether the same foundation was inserted or already durable.
|
|
48
|
+
*/
|
|
49
|
+
export function putConversationFoundation(database, foundation) {
|
|
50
|
+
return transaction(database, () => putConversationFoundationInTransaction(database, foundation));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Commits the first valid Router-ordered action for one predecessor.
|
|
54
|
+
*
|
|
55
|
+
* A caller signs only after this operation succeeds, so an endpoint cannot
|
|
56
|
+
* sign two actions for the same predecessor across crashes or restarts.
|
|
57
|
+
*
|
|
58
|
+
* @param database Exclusively owned endpoint database.
|
|
59
|
+
* @param proposal Verified action core selected in Router order.
|
|
60
|
+
* @returns Whether the lock was inserted or the same lock already existed.
|
|
61
|
+
*/
|
|
62
|
+
export function lockProposal(database, proposal) {
|
|
63
|
+
validateProposalLock(proposal);
|
|
64
|
+
return transaction(database, () => lockProposalInTransaction(database, proposal));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Atomically retains a verified GENESIS foundation and its first-candidate lock.
|
|
68
|
+
*
|
|
69
|
+
* @param database Exclusively owned endpoint database.
|
|
70
|
+
* @param foundation Verified immutable membership and Router anchor.
|
|
71
|
+
* @param proposal Verified gap-free GENESIS action selected in Router order.
|
|
72
|
+
* @returns Whether either exact durable component was inserted.
|
|
73
|
+
*/
|
|
74
|
+
export function lockGenesisProposal(database, foundation, proposal) {
|
|
75
|
+
validateProposalLock(proposal);
|
|
76
|
+
if (proposal.previousRecordHash !== undefined ||
|
|
77
|
+
proposal.conversationId !== foundation.conversationId) {
|
|
78
|
+
throw new StoreSignal("invalid-input");
|
|
79
|
+
}
|
|
80
|
+
return transaction(database, () => {
|
|
81
|
+
const retainedFoundation = putConversationFoundationInTransaction(database, foundation);
|
|
82
|
+
const retainedProposal = lockProposalInTransaction(database, proposal);
|
|
83
|
+
return retainedFoundation === "inserted" || retainedProposal === "inserted"
|
|
84
|
+
? "inserted"
|
|
85
|
+
: "existing";
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Replaces an uncommitted conversation's Router-instance foundation.
|
|
90
|
+
*
|
|
91
|
+
* The exact old foundation and empty certified head prevent this cleanup from
|
|
92
|
+
* erasing committed history or a concurrently advanced anchor.
|
|
93
|
+
*
|
|
94
|
+
* @param database Exclusively owned endpoint database.
|
|
95
|
+
* @param restart Expected old and verified replacement genesis foundations.
|
|
96
|
+
* @returns The replacement foundation and immutable retained post intents.
|
|
97
|
+
*/
|
|
98
|
+
export function restartEmptyConversation(database, restart) {
|
|
99
|
+
validateEmptyConversationRestart(restart);
|
|
100
|
+
return transaction(database, () => {
|
|
101
|
+
requireEmptyConversationPosition(database, restart.expectedFoundation);
|
|
102
|
+
clearIncompleteConversationState(database, restart.expectedFoundation);
|
|
103
|
+
installReplacementFoundation(database, restart.replacementFoundation);
|
|
104
|
+
return Object.freeze({
|
|
105
|
+
foundation: copyFoundation(restart.replacementFoundation),
|
|
106
|
+
postIntents: readConversationPostIntents(database, restart.replacementFoundation.conversationId),
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Durably stages at most one re-anchor proposal for one Router-instance scope.
|
|
112
|
+
*
|
|
113
|
+
* @param database Exclusively owned endpoint database.
|
|
114
|
+
* @param reanchor Verified proposal body and stable hash.
|
|
115
|
+
* @returns Whether the same proposal was inserted or already durable.
|
|
116
|
+
*/
|
|
117
|
+
export function stageReanchor(database, reanchor) {
|
|
118
|
+
validateStagedReanchor(reanchor);
|
|
119
|
+
return transaction(database, () => stageReanchorInTransaction(database, reanchor));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Atomically makes a staged threshold-complete Router anchor current.
|
|
123
|
+
*
|
|
124
|
+
* @param database Exclusively owned endpoint database.
|
|
125
|
+
* @param reanchor Verified completed re-anchor and threshold evidence.
|
|
126
|
+
* @returns Whether completion advanced the current anchor or was idempotent.
|
|
127
|
+
*/
|
|
128
|
+
export function completeReanchor(database, reanchor) {
|
|
129
|
+
validateCompletedReanchor(reanchor);
|
|
130
|
+
return transaction(database, () => completeReanchorInTransaction(database, reanchor));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Atomically stages and completes exactly one verified catch-up anchor item.
|
|
134
|
+
*
|
|
135
|
+
* @param database Exclusively owned endpoint database.
|
|
136
|
+
* @param reanchor One verified completed re-anchor from catch-up.
|
|
137
|
+
* @returns Whether any durable state was added.
|
|
138
|
+
*/
|
|
139
|
+
export function applyCatchUpReanchor(database, reanchor) {
|
|
140
|
+
validateCompletedReanchor(reanchor);
|
|
141
|
+
return transaction(database, () => {
|
|
142
|
+
const staged = stageReanchorInTransaction(database, reanchor);
|
|
143
|
+
const completed = completeReanchorInTransaction(database, reanchor);
|
|
144
|
+
return staged === "inserted" || completed === "inserted"
|
|
145
|
+
? "inserted"
|
|
146
|
+
: "existing";
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function lockProposalInTransaction(database, proposal) {
|
|
150
|
+
const predecessorKey = proposal.previousRecordHash ?? GENESIS_PREDECESSOR;
|
|
151
|
+
const existing = findProposalLock(database, proposal.conversationId, predecessorKey);
|
|
152
|
+
if (existing !== undefined) {
|
|
153
|
+
requireSameProposalLock(existing, proposal);
|
|
154
|
+
return "existing";
|
|
155
|
+
}
|
|
156
|
+
const position = readStoredPosition(database, proposal.conversationId);
|
|
157
|
+
requireEqual(position.headRecordHash, proposal.previousRecordHash);
|
|
158
|
+
database
|
|
159
|
+
.prepare(`INSERT INTO proposal_locks
|
|
160
|
+
(conversation_id, predecessor_key, previous_record_hash,
|
|
161
|
+
action_hash, canonical_action_core)
|
|
162
|
+
VALUES (?, ?, ?, ?, ?)`)
|
|
163
|
+
.run(proposal.conversationId, predecessorKey, proposal.previousRecordHash ?? null, proposal.actionHash, copyBytes(proposal.canonicalActionCore));
|
|
164
|
+
return "inserted";
|
|
165
|
+
}
|
|
166
|
+
function validateProposalLock(proposal) {
|
|
167
|
+
requireText(proposal.conversationId);
|
|
168
|
+
if (proposal.previousRecordHash !== undefined) {
|
|
169
|
+
requireText(proposal.previousRecordHash);
|
|
170
|
+
}
|
|
171
|
+
requireText(proposal.actionHash);
|
|
172
|
+
requireBytes(proposal.canonicalActionCore);
|
|
173
|
+
}
|
|
174
|
+
function writeIdentity(database, binding) {
|
|
175
|
+
requireText(binding.agentId);
|
|
176
|
+
requireBytes(binding.canonicalAgentCard);
|
|
177
|
+
return transaction(database, () => {
|
|
178
|
+
const existing = readStoredIdentity(database);
|
|
179
|
+
if (existing !== undefined) {
|
|
180
|
+
requireEqual(existing.agentId, binding.agentId);
|
|
181
|
+
requireSameBytes(existing.canonicalAgentCard, binding.canonicalAgentCard);
|
|
182
|
+
return "existing";
|
|
183
|
+
}
|
|
184
|
+
database
|
|
185
|
+
.prepare(`INSERT INTO identity_binding
|
|
186
|
+
(singleton, agent_id, canonical_agent_card) VALUES (1, ?, ?)`)
|
|
187
|
+
.run(binding.agentId, copyBytes(binding.canonicalAgentCard));
|
|
188
|
+
return "inserted";
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
function bindPostIntentInTransaction(database, intent) {
|
|
192
|
+
const identity = readStoredIdentity(database);
|
|
193
|
+
if (identity === undefined) {
|
|
194
|
+
throw new StoreSignal("not-found");
|
|
195
|
+
}
|
|
196
|
+
requireEqual(identity.agentId, intent.authorAgentId);
|
|
197
|
+
const existing = database
|
|
198
|
+
.prepare(`SELECT conversation_id, membership_hash, canonical_intent
|
|
199
|
+
FROM post_intents WHERE author_agent_id = ? AND post_id = ?`)
|
|
200
|
+
.get(intent.authorAgentId, intent.postId);
|
|
201
|
+
if (existing !== undefined) {
|
|
202
|
+
requireEqual(readText(existing, "conversation_id"), intent.conversationId);
|
|
203
|
+
requireEqual(readText(existing, "membership_hash"), intent.membershipHash);
|
|
204
|
+
requireSameBytes(readBytes(existing, "canonical_intent"), intent.canonicalIntent);
|
|
205
|
+
return "existing";
|
|
206
|
+
}
|
|
207
|
+
database
|
|
208
|
+
.prepare(`INSERT INTO post_intents
|
|
209
|
+
(author_agent_id, post_id, conversation_id, membership_hash,
|
|
210
|
+
canonical_intent)
|
|
211
|
+
VALUES (?, ?, ?, ?, ?)`)
|
|
212
|
+
.run(intent.authorAgentId, intent.postId, intent.conversationId, intent.membershipHash, copyBytes(intent.canonicalIntent));
|
|
213
|
+
return "inserted";
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Inserts or validates one complete membership and genesis anchor in an
|
|
217
|
+
* existing transaction.
|
|
218
|
+
*
|
|
219
|
+
* @param database Exclusively owned endpoint database.
|
|
220
|
+
* @param foundation Verified immutable conversation foundation.
|
|
221
|
+
* @returns Whether this transaction inserted the foundation.
|
|
222
|
+
*/
|
|
223
|
+
function putConversationFoundationInTransaction(database, foundation) {
|
|
224
|
+
validateFoundation(foundation);
|
|
225
|
+
const existing = readFoundation(database, foundation.conversationId);
|
|
226
|
+
if (existing !== undefined) {
|
|
227
|
+
requireSameFoundation(existing, foundation);
|
|
228
|
+
return "existing";
|
|
229
|
+
}
|
|
230
|
+
insertFoundation(database, foundation);
|
|
231
|
+
return "inserted";
|
|
232
|
+
}
|
|
233
|
+
function requireConversationFoundation(database, intent) {
|
|
234
|
+
const foundation = readFoundation(database, intent.conversationId);
|
|
235
|
+
if (foundation === undefined) {
|
|
236
|
+
throw new StoreSignal("not-found");
|
|
237
|
+
}
|
|
238
|
+
requireEqual(foundation.membershipHash, intent.membershipHash);
|
|
239
|
+
return "existing";
|
|
240
|
+
}
|
|
241
|
+
function requireEmptyConversationPosition(database, expected) {
|
|
242
|
+
const retained = readFoundation(database, expected.conversationId);
|
|
243
|
+
if (retained === undefined) {
|
|
244
|
+
throw new StoreSignal("not-found");
|
|
245
|
+
}
|
|
246
|
+
requireSameFoundation(retained, expected);
|
|
247
|
+
const position = readStoredPosition(database, expected.conversationId);
|
|
248
|
+
requireEqual(position.membershipHash, expected.membershipHash);
|
|
249
|
+
requireEqual(position.currentAnchorHash, expected.anchorHash);
|
|
250
|
+
requireEqual(position.headRecordHash, undefined);
|
|
251
|
+
requireEqual(position.headOrdinal, -1);
|
|
252
|
+
if (database
|
|
253
|
+
.prepare(`SELECT 1 AS retained FROM certified_records
|
|
254
|
+
WHERE conversation_id = ? LIMIT 1`)
|
|
255
|
+
.get(expected.conversationId) !== undefined) {
|
|
256
|
+
throw new StoreSignal("conflict");
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function readFoundation(database, conversationId) {
|
|
260
|
+
const row = database
|
|
261
|
+
.prepare(`SELECT membership.membership_hash, membership.canonical_membership,
|
|
262
|
+
anchor.anchor_hash, anchor.canonical_anchor
|
|
263
|
+
FROM memberships AS membership
|
|
264
|
+
JOIN anchors AS anchor
|
|
265
|
+
ON anchor.conversation_id = membership.conversation_id
|
|
266
|
+
AND anchor.previous_anchor_hash IS NULL
|
|
267
|
+
WHERE membership.conversation_id = ?`)
|
|
268
|
+
.get(conversationId);
|
|
269
|
+
return row === undefined
|
|
270
|
+
? undefined
|
|
271
|
+
: Object.freeze({
|
|
272
|
+
conversationId,
|
|
273
|
+
membershipHash: readText(row, "membership_hash"),
|
|
274
|
+
canonicalMembership: readBytes(row, "canonical_membership"),
|
|
275
|
+
anchorHash: readText(row, "anchor_hash"),
|
|
276
|
+
canonicalAnchor: readBytes(row, "canonical_anchor"),
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
function insertFoundation(database, foundation) {
|
|
280
|
+
database
|
|
281
|
+
.prepare(`INSERT INTO memberships
|
|
282
|
+
(conversation_id, membership_hash, canonical_membership)
|
|
283
|
+
VALUES (?, ?, ?)`)
|
|
284
|
+
.run(foundation.conversationId, foundation.membershipHash, copyBytes(foundation.canonicalMembership));
|
|
285
|
+
database
|
|
286
|
+
.prepare(`INSERT INTO anchors
|
|
287
|
+
(conversation_id, anchor_hash, canonical_anchor) VALUES (?, ?, ?)`)
|
|
288
|
+
.run(foundation.conversationId, foundation.anchorHash, copyBytes(foundation.canonicalAnchor));
|
|
289
|
+
database
|
|
290
|
+
.prepare(`INSERT INTO conversation_state
|
|
291
|
+
(conversation_id, membership_hash, current_anchor_hash, head_ordinal)
|
|
292
|
+
VALUES (?, ?, ?, -1)`)
|
|
293
|
+
.run(foundation.conversationId, foundation.membershipHash, foundation.anchorHash);
|
|
294
|
+
}
|
|
295
|
+
function stageReanchorInTransaction(database, reanchor) {
|
|
296
|
+
const existing = findStagedReanchor(database, reanchor.conversationId, reanchor.anchorHash);
|
|
297
|
+
if (existing !== undefined) {
|
|
298
|
+
requireSameReanchor(existing, reanchor);
|
|
299
|
+
return "existing";
|
|
300
|
+
}
|
|
301
|
+
requireUnclaimedReanchorScope(database, reanchor);
|
|
302
|
+
requireReanchorPosition(database, reanchor);
|
|
303
|
+
insertStagedReanchor(database, reanchor);
|
|
304
|
+
return "inserted";
|
|
305
|
+
}
|
|
306
|
+
function completeReanchorInTransaction(database, reanchor) {
|
|
307
|
+
const staged = findStagedReanchor(database, reanchor.conversationId, reanchor.anchorHash);
|
|
308
|
+
if (staged === undefined) {
|
|
309
|
+
throw new StoreSignal("not-found");
|
|
310
|
+
}
|
|
311
|
+
requireSameReanchor(staged, reanchor);
|
|
312
|
+
if (hasAnchor(database, reanchor.conversationId, reanchor.anchorHash)) {
|
|
313
|
+
return "existing";
|
|
314
|
+
}
|
|
315
|
+
requireReanchorPosition(database, reanchor);
|
|
316
|
+
insertCompletedReanchor(database, reanchor);
|
|
317
|
+
return "inserted";
|
|
318
|
+
}
|
|
319
|
+
function requireUnclaimedReanchorScope(database, reanchor) {
|
|
320
|
+
const scoped = database
|
|
321
|
+
.prepare(`SELECT anchor_hash FROM reanchors
|
|
322
|
+
WHERE conversation_id = ? AND previous_anchor_hash = ?
|
|
323
|
+
AND router_instance_id = ?`)
|
|
324
|
+
.get(reanchor.conversationId, reanchor.previousAnchorHash, reanchor.routerInstanceId);
|
|
325
|
+
if (scoped !== undefined) {
|
|
326
|
+
throw new StoreSignal("conflict");
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
function requireReanchorPosition(database, reanchor) {
|
|
330
|
+
const position = readStoredPosition(database, reanchor.conversationId);
|
|
331
|
+
requireEqual(position.currentAnchorHash, reanchor.previousAnchorHash);
|
|
332
|
+
requireEqual(position.headRecordHash, reanchor.selectedRecordHash);
|
|
333
|
+
}
|
|
334
|
+
function insertStagedReanchor(database, reanchor) {
|
|
335
|
+
database
|
|
336
|
+
.prepare(`INSERT INTO reanchors
|
|
337
|
+
(conversation_id, anchor_hash, previous_anchor_hash,
|
|
338
|
+
router_instance_id, selected_record_hash, canonical_body)
|
|
339
|
+
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
340
|
+
.run(reanchor.conversationId, reanchor.anchorHash, reanchor.previousAnchorHash, reanchor.routerInstanceId, reanchor.selectedRecordHash, copyBytes(reanchor.canonicalBody));
|
|
341
|
+
}
|
|
342
|
+
function insertCompletedReanchor(database, reanchor) {
|
|
343
|
+
database
|
|
344
|
+
.prepare(`INSERT INTO anchors
|
|
345
|
+
(conversation_id, anchor_hash, previous_anchor_hash,
|
|
346
|
+
selected_record_hash, canonical_anchor)
|
|
347
|
+
VALUES (?, ?, ?, ?, ?)`)
|
|
348
|
+
.run(reanchor.conversationId, reanchor.anchorHash, reanchor.previousAnchorHash, reanchor.selectedRecordHash, copyBytes(reanchor.canonicalCompletedReanchor));
|
|
349
|
+
database
|
|
350
|
+
.prepare(`UPDATE reanchors SET canonical_completed_reanchor = ?
|
|
351
|
+
WHERE conversation_id = ? AND anchor_hash = ?`)
|
|
352
|
+
.run(copyBytes(reanchor.canonicalCompletedReanchor), reanchor.conversationId, reanchor.anchorHash);
|
|
353
|
+
database
|
|
354
|
+
.prepare(`UPDATE conversation_state SET current_anchor_hash = ?
|
|
355
|
+
WHERE conversation_id = ?`)
|
|
356
|
+
.run(reanchor.anchorHash, reanchor.conversationId);
|
|
357
|
+
}
|
|
358
|
+
function hasAnchor(database, conversationId, anchorHash) {
|
|
359
|
+
return (database
|
|
360
|
+
.prepare(`SELECT 1 AS retained FROM anchors
|
|
361
|
+
WHERE conversation_id = ? AND anchor_hash = ?`)
|
|
362
|
+
.get(conversationId, anchorHash) !== undefined);
|
|
363
|
+
}
|
|
364
|
+
function validateEmptyConversationRestart(restart) {
|
|
365
|
+
validateFoundation(restart.expectedFoundation);
|
|
366
|
+
validateFoundation(restart.replacementFoundation);
|
|
367
|
+
requireEqual(restart.expectedFoundation.conversationId, restart.replacementFoundation.conversationId);
|
|
368
|
+
requireEqual(restart.expectedFoundation.membershipHash, restart.replacementFoundation.membershipHash);
|
|
369
|
+
requireSameBytes(restart.expectedFoundation.canonicalMembership, restart.replacementFoundation.canonicalMembership);
|
|
370
|
+
if (restart.expectedFoundation.anchorHash ===
|
|
371
|
+
restart.replacementFoundation.anchorHash) {
|
|
372
|
+
throw new StoreSignal("invalid-input");
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
function validateFoundation(foundation) {
|
|
376
|
+
requireText(foundation.conversationId);
|
|
377
|
+
requireText(foundation.membershipHash);
|
|
378
|
+
requireBytes(foundation.canonicalMembership);
|
|
379
|
+
requireText(foundation.anchorHash);
|
|
380
|
+
requireBytes(foundation.canonicalAnchor);
|
|
381
|
+
}
|
|
382
|
+
function clearIncompleteConversationState(database, expected) {
|
|
383
|
+
const conversationId = expected.conversationId;
|
|
384
|
+
database
|
|
385
|
+
.prepare("DELETE FROM dissemination_obligations WHERE conversation_id = ?")
|
|
386
|
+
.run(conversationId);
|
|
387
|
+
database
|
|
388
|
+
.prepare("DELETE FROM protocol_evidence WHERE conversation_id = ?")
|
|
389
|
+
.run(conversationId);
|
|
390
|
+
database
|
|
391
|
+
.prepare("DELETE FROM proposal_locks WHERE conversation_id = ?")
|
|
392
|
+
.run(conversationId);
|
|
393
|
+
database
|
|
394
|
+
.prepare("DELETE FROM staged_records WHERE conversation_id = ?")
|
|
395
|
+
.run(conversationId);
|
|
396
|
+
database
|
|
397
|
+
.prepare("DELETE FROM reanchors WHERE conversation_id = ?")
|
|
398
|
+
.run(conversationId);
|
|
399
|
+
database
|
|
400
|
+
.prepare(`UPDATE outbound_messages SET disposition = 'discarded'
|
|
401
|
+
WHERE conversation_id = ? AND disposition = 'pending'`)
|
|
402
|
+
.run(conversationId);
|
|
403
|
+
}
|
|
404
|
+
function installReplacementFoundation(database, replacement) {
|
|
405
|
+
const retainedReplacement = database
|
|
406
|
+
.prepare(`SELECT 1 AS retained FROM anchors
|
|
407
|
+
WHERE conversation_id = ? AND anchor_hash = ?`)
|
|
408
|
+
.get(replacement.conversationId, replacement.anchorHash);
|
|
409
|
+
if (retainedReplacement !== undefined) {
|
|
410
|
+
throw new StoreSignal("conflict");
|
|
411
|
+
}
|
|
412
|
+
database
|
|
413
|
+
.prepare(`INSERT INTO anchors
|
|
414
|
+
(conversation_id, anchor_hash, canonical_anchor) VALUES (?, ?, ?)`)
|
|
415
|
+
.run(replacement.conversationId, replacement.anchorHash, copyBytes(replacement.canonicalAnchor));
|
|
416
|
+
database
|
|
417
|
+
.prepare(`UPDATE conversation_state
|
|
418
|
+
SET current_anchor_hash = ?, head_record_hash = NULL, head_ordinal = -1
|
|
419
|
+
WHERE conversation_id = ?`)
|
|
420
|
+
.run(replacement.anchorHash, replacement.conversationId);
|
|
421
|
+
database
|
|
422
|
+
.prepare(`DELETE FROM anchors
|
|
423
|
+
WHERE conversation_id = ? AND anchor_hash <> ?`)
|
|
424
|
+
.run(replacement.conversationId, replacement.anchorHash);
|
|
425
|
+
}
|
|
426
|
+
function readConversationPostIntents(database, conversationId) {
|
|
427
|
+
return Object.freeze(database
|
|
428
|
+
.prepare(`SELECT conversation_id, membership_hash, author_agent_id, post_id,
|
|
429
|
+
canonical_intent, completed_record_hash
|
|
430
|
+
FROM post_intents WHERE conversation_id = ?
|
|
431
|
+
ORDER BY author_agent_id, post_id`)
|
|
432
|
+
.all(conversationId)
|
|
433
|
+
.map((row) => {
|
|
434
|
+
const completedRecordHash = readOptionalText(row, "completed_record_hash");
|
|
435
|
+
return Object.freeze({
|
|
436
|
+
conversationId: readText(row, "conversation_id"),
|
|
437
|
+
membershipHash: readText(row, "membership_hash"),
|
|
438
|
+
authorAgentId: readText(row, "author_agent_id"),
|
|
439
|
+
postId: readText(row, "post_id"),
|
|
440
|
+
canonicalIntent: readBytes(row, "canonical_intent"),
|
|
441
|
+
...(completedRecordHash === undefined ? {} : { completedRecordHash }),
|
|
442
|
+
});
|
|
443
|
+
}));
|
|
444
|
+
}
|
|
445
|
+
function copyFoundation(foundation) {
|
|
446
|
+
return Object.freeze({
|
|
447
|
+
...foundation,
|
|
448
|
+
canonicalMembership: copyBytes(foundation.canonicalMembership),
|
|
449
|
+
canonicalAnchor: copyBytes(foundation.canonicalAnchor),
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
function validateCompletedReanchor(reanchor) {
|
|
453
|
+
validateStagedReanchor(reanchor);
|
|
454
|
+
requireBytes(reanchor.canonicalCompletedReanchor);
|
|
455
|
+
}
|
|
456
|
+
function validateStagedReanchor(reanchor) {
|
|
457
|
+
requireText(reanchor.conversationId);
|
|
458
|
+
requireText(reanchor.anchorHash);
|
|
459
|
+
requireText(reanchor.previousAnchorHash);
|
|
460
|
+
requireText(reanchor.routerInstanceId);
|
|
461
|
+
requireText(reanchor.selectedRecordHash);
|
|
462
|
+
requireBytes(reanchor.canonicalBody);
|
|
463
|
+
}
|
|
464
|
+
function requireSameFoundation(left, right) {
|
|
465
|
+
requireEqual(left.conversationId, right.conversationId);
|
|
466
|
+
requireEqual(left.membershipHash, right.membershipHash);
|
|
467
|
+
requireSameBytes(left.canonicalMembership, right.canonicalMembership);
|
|
468
|
+
requireEqual(left.anchorHash, right.anchorHash);
|
|
469
|
+
requireSameBytes(left.canonicalAnchor, right.canonicalAnchor);
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=anchors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchors.js","sourceRoot":"","sources":["../../../src/endpoint/store/anchors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** @file Stable internal boundary for SQLite state and closed value checks. */
|
|
2
|
+
/** SQLite ownership, transaction, and lifecycle primitives. */
|
|
3
|
+
export { closeStoreState, type HistorySnapshot, openStoreState, runStoreOperation, type StoreState, transaction, } from "./schema.js";
|
|
4
|
+
/** Closed failures and exact canonical-value helpers. */
|
|
5
|
+
export { copyBytes, EndpointStoreError, type EndpointStoreFailure, mapStoreFailure, mintContinuation, mintDeliveryToken, readBytes, readInteger, readOptionalBytes, readOptionalText, readText, requireBytes, requireEqual, requireSameBytes, requireText, StoreSignal, validateContinuation, } from "./values.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/endpoint/store/database/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,+DAA+D;AAC/D,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,cAAc,EACd,iBAAiB,EACjB,KAAK,UAAU,EACf,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,yDAAyD;AACzD,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** @file Stable internal boundary for SQLite state and closed value checks. */
|
|
2
|
+
/** SQLite ownership, transaction, and lifecycle primitives. */
|
|
3
|
+
export { closeStoreState, openStoreState, runStoreOperation, transaction, } from "./schema.js";
|
|
4
|
+
/** Closed failures and exact canonical-value helpers. */
|
|
5
|
+
export { copyBytes, EndpointStoreError, mapStoreFailure, mintContinuation, mintDeliveryToken, readBytes, readInteger, readOptionalBytes, readOptionalText, readText, requireBytes, requireEqual, requireSameBytes, requireText, StoreSignal, validateContinuation, } from "./values.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/endpoint/store/database/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,+DAA+D;AAC/D,OAAO,EACL,eAAe,EAEf,cAAc,EACd,iBAAiB,EAEjB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,yDAAyD;AACzD,OAAO,EACL,SAAS,EACT,kBAAkB,EAElB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** @file SQLite ownership, exact-version preflight, and closed persistence primitives. */
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import { DatabaseSync } from "node:sqlite";
|
|
4
|
+
import type { CertifiedRecord } from "../types.js";
|
|
5
|
+
import { type EndpointStoreError } from "./values.js";
|
|
6
|
+
/** One process-local frozen management read. */
|
|
7
|
+
export interface HistorySnapshot {
|
|
8
|
+
readonly records: readonly CertifiedRecord[];
|
|
9
|
+
readonly offset: number;
|
|
10
|
+
}
|
|
11
|
+
/** Exclusive SQLite state retained for one Effect scope. */
|
|
12
|
+
export interface StoreState {
|
|
13
|
+
readonly database: DatabaseSync;
|
|
14
|
+
readonly snapshots: Map<string, HistorySnapshot>;
|
|
15
|
+
closed: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Acquires and exclusively locks one exact-version endpoint database.
|
|
19
|
+
* @param stateDirectory Exclusive persistent state directory.
|
|
20
|
+
* @returns Acquired database state after integrity and compatibility checks.
|
|
21
|
+
*/
|
|
22
|
+
export declare const openStoreState: (stateDirectory: string) => Effect.Effect<StoreState, EndpointStoreError>;
|
|
23
|
+
/**
|
|
24
|
+
* Closes exactly the SQLite and volatile snapshot state in this scope.
|
|
25
|
+
* @param state Acquired database and process-local snapshots.
|
|
26
|
+
* @returns An infallible finalizer effect.
|
|
27
|
+
*/
|
|
28
|
+
export declare const closeStoreState: (state: StoreState) => Effect.Effect<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Converts a synchronous store operation into the closed Effect channel.
|
|
31
|
+
* @param state Acquired database and process-local snapshots.
|
|
32
|
+
* @param operation Synchronous operation inside the ownership boundary.
|
|
33
|
+
* @returns The operation in the closed store error channel.
|
|
34
|
+
*/
|
|
35
|
+
export declare function runStoreOperation<Value>(state: StoreState, operation: () => Value): Effect.Effect<Value, EndpointStoreError>;
|
|
36
|
+
/**
|
|
37
|
+
* Runs one non-yielding SQLite transaction and preserves its first failure.
|
|
38
|
+
* @param database Exclusively owned endpoint database.
|
|
39
|
+
* @param operation Non-yielding transition to commit atomically.
|
|
40
|
+
* @param mode SQLite write-lock mode.
|
|
41
|
+
* @returns The committed transition result.
|
|
42
|
+
*/
|
|
43
|
+
export declare function transaction<Value>(database: DatabaseSync, operation: () => Value, mode?: "IMMEDIATE" | "EXCLUSIVE"): Value;
|
|
44
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/endpoint/store/database/schema.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,KAAK,kBAAkB,EAMxB,MAAM,aAAa,CAAC;AAErB,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACjD,MAAM,EAAE,OAAO,CAAC;CACjB;AAOD;;;;GAIG;AACH,eAAO,MAAM,cAAc,mBACT,MAAM,KACrB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAI3C,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,eAAe,UAAW,UAAU,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAalE,CAAC;AAEL;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EACrC,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,KAAK,GACrB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAU1C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAC/B,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,KAAK,EACtB,IAAI,GAAE,WAAW,GAAG,WAAyB,GAC5C,KAAK,CAeP"}
|