@zlink-systems/framework 0.25.0 → 0.27.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/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkInMemoryAuthorityStore = void 0;
|
|
4
|
+
const InternalDefaults_1 = require("../../contracts/Configuration/InternalDefaults");
|
|
5
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
6
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
7
|
+
const Stores_1 = require("../../contracts/Locations/Stores");
|
|
4
8
|
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
const actor_join_recovery_codec_1 = require("../foundation/actor-join-recovery-codec");
|
|
5
10
|
const authority_key_codec_1 = require("./authority-key-codec");
|
|
6
11
|
const opaque_record_key_1 = require("./opaque-record-key");
|
|
7
12
|
const MAX_GENERATION = 0x7fffffffffffffffn;
|
|
8
|
-
const MAX_PAYLOAD_BYTES = 1024 * 1024;
|
|
9
13
|
const CREATION_TERMINAL_RETENTION_MS = 5 * 60 * 1000;
|
|
10
|
-
const MAX_U64 =
|
|
14
|
+
const MAX_U64 = stream_wire_1.UINT64_MAX;
|
|
11
15
|
/**
|
|
12
16
|
* In-memory reference provider for the provider-owned authority state machine.
|
|
13
17
|
* Opaque payload bytes are copied but never parsed.
|
|
@@ -101,11 +105,21 @@ class ZLinkInMemoryAuthorityStore {
|
|
|
101
105
|
if (!this.isOwnerLive(row.snapshot)) {
|
|
102
106
|
return { kind: 'conflict', current: this.read(keyValue) };
|
|
103
107
|
}
|
|
108
|
+
if (mutation.generationTransition === 'reincarnate' &&
|
|
109
|
+
(this.objectGeneration >= MAX_GENERATION || this.ownerGeneration >= MAX_GENERATION)) {
|
|
110
|
+
return { kind: 'generationExhausted' };
|
|
111
|
+
}
|
|
104
112
|
const nextVersion = this.tryNextStoreVersion();
|
|
105
113
|
if (nextVersion === undefined)
|
|
106
114
|
return { kind: 'generationExhausted' };
|
|
107
115
|
row.snapshot = {
|
|
108
116
|
...row.snapshot,
|
|
117
|
+
...(mutation.generationTransition === 'reincarnate'
|
|
118
|
+
? {
|
|
119
|
+
objectGeneration: ++this.objectGeneration,
|
|
120
|
+
authorityOwnerGeneration: ++this.ownerGeneration
|
|
121
|
+
}
|
|
122
|
+
: {}),
|
|
109
123
|
storeVersion: version(nextVersion),
|
|
110
124
|
payload: Buffer.from(mutation.payload)
|
|
111
125
|
};
|
|
@@ -114,8 +128,8 @@ class ZLinkInMemoryAuthorityStore {
|
|
|
114
128
|
}
|
|
115
129
|
async listAuthorities(prefix, cursor, limit, signal) {
|
|
116
130
|
signal?.throwIfAborted();
|
|
117
|
-
if (!Number.isInteger(limit) || limit < 1 || limit >
|
|
118
|
-
throw new RangeError(
|
|
131
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE) {
|
|
132
|
+
throw new RangeError(`Authority scan limit must be in 1..${Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE}.`);
|
|
119
133
|
}
|
|
120
134
|
const decoded = cursor === undefined
|
|
121
135
|
? { revision: this.scanRevision, offset: 0, prefix }
|
|
@@ -611,7 +625,7 @@ function validateAuthorityMutation(mutation) {
|
|
|
611
625
|
}
|
|
612
626
|
const generationTransition = mutation
|
|
613
627
|
.generationTransition;
|
|
614
|
-
if (generationTransition !== 'preserve') {
|
|
628
|
+
if (generationTransition !== 'preserve' && generationTransition !== 'reincarnate') {
|
|
615
629
|
throw new TypeError('Authority owner transitions require an aggregate CAS.');
|
|
616
630
|
}
|
|
617
631
|
}
|
|
@@ -621,17 +635,19 @@ function validateReserve(request) {
|
|
|
621
635
|
requireText(request.intent.requestContentReference, 'creation content reference');
|
|
622
636
|
validatePayload(request.creatingPayload);
|
|
623
637
|
validateCapacityVector(request.capacity);
|
|
624
|
-
if (request.intent.requestSha256.byteLength !==
|
|
638
|
+
if (request.intent.requestSha256.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES ||
|
|
625
639
|
request.intent.requestEncodedSize < 0n ||
|
|
626
|
-
request.intent.requestEncodedSize > BigInt(
|
|
640
|
+
request.intent.requestEncodedSize > BigInt(InternalDefaults_1.CREATION_INTENT_MAX_BYTES)) {
|
|
627
641
|
throw new TypeError('Object creation content receipt is invalid.');
|
|
628
642
|
}
|
|
629
643
|
}
|
|
630
644
|
function validateCreationOperation(operation) {
|
|
631
645
|
const sourceRid = String(operation.sourceNodeRid);
|
|
632
646
|
const sourceRidBytes = Buffer.byteLength(sourceRid, 'utf8');
|
|
633
|
-
if (sourceRidBytes < 1 ||
|
|
634
|
-
|
|
647
|
+
if (sourceRidBytes < 1 ||
|
|
648
|
+
sourceRidBytes > CoreTypes_1.ZLINK_MAX_ROUTING_ID_BYTES ||
|
|
649
|
+
sourceRid.includes('\0')) {
|
|
650
|
+
throw new TypeError(`Creation terminal source node RID must contain 1..${CoreTypes_1.ZLINK_MAX_ROUTING_ID_BYTES} UTF-8 bytes without NUL.`);
|
|
635
651
|
}
|
|
636
652
|
if (operation.sourceNodeGeneration < 1n ||
|
|
637
653
|
operation.sourceNodeGeneration > MAX_U64 ||
|
|
@@ -647,8 +663,8 @@ function validateTerminalForMutation(publication, storeNow) {
|
|
|
647
663
|
if (publication === undefined)
|
|
648
664
|
return undefined;
|
|
649
665
|
validateCreationOperation(publication.operation);
|
|
650
|
-
if (publication.terminalEnvelope.byteLength >
|
|
651
|
-
throw new RangeError(
|
|
666
|
+
if (publication.terminalEnvelope.byteLength > InternalDefaults_1.CREATION_TERMINAL_ENVELOPE_MAX_BYTES) {
|
|
667
|
+
throw new RangeError(`Creation terminal envelope must not exceed ${InternalDefaults_1.CREATION_TERMINAL_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`);
|
|
652
668
|
}
|
|
653
669
|
const deadlineMs = publication.operationDeadline.getTime();
|
|
654
670
|
const expiresAtMs = deadlineMs + CREATION_TERMINAL_RETENTION_MS;
|
|
@@ -691,8 +707,8 @@ function validateAggregateRequest(request) {
|
|
|
691
707
|
if (request.aggregateGeneration < 1n || request.participants.length < 1) {
|
|
692
708
|
throw new RangeError('Aggregate generation and participant count are invalid.');
|
|
693
709
|
}
|
|
694
|
-
if (request.inventoryDigest.byteLength !==
|
|
695
|
-
throw new TypeError(
|
|
710
|
+
if (request.inventoryDigest.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES) {
|
|
711
|
+
throw new TypeError(`Aggregate inventory digest must contain ${actor_join_recovery_codec_1.SHA256_DIGEST_BYTES} bytes.`);
|
|
696
712
|
}
|
|
697
713
|
validateCapacityVector(request.capacity);
|
|
698
714
|
const keys = request.participants.map((participant) => participant.authorityKey.value);
|
|
@@ -702,8 +718,8 @@ function validateAggregateRequest(request) {
|
|
|
702
718
|
}
|
|
703
719
|
}
|
|
704
720
|
function validatePayload(payload) {
|
|
705
|
-
if (payload.byteLength >
|
|
706
|
-
throw new RangeError(
|
|
721
|
+
if (payload.byteLength > InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
722
|
+
throw new RangeError(`Authority payload exceeds ${InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`);
|
|
707
723
|
}
|
|
708
724
|
}
|
|
709
725
|
function validateCapacityVector(value) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ZLinkLocationWriteIntent, ZLinkLocationWriteStatus, type ZLinkActorLocation, type ZLinkAggregateAbortResult, type ZLinkAggregateCommitResult, type ZLinkAggregateFence, type ZLinkAggregatePrepareRequest, type ZLinkAggregatePrepareResult, type ZLinkAuthorityCompareExchangeResult, type ZLinkAuthorityKey, type ZLinkAuthorityMutation, type ZLinkAuthorityReadResult, type ZLinkAuthorityScanCursor, type ZLinkAuthorityScanResult, type ZLinkAuthorityStoreVersion, type ZLinkActorLocationFilter, type ZLinkActorLocationKey, type ZLinkLocationChangeStampScope, type ZLinkLocationOwnerToken, type ZLinkLocationPage, type ZLinkLocationWriteResult, type ZLinkMeshNodeDescriptor, type ZLinkMeshNodeDescriptorKey, type ZLinkClientServerServerDescriptor, type ZLinkClientServerServerDescriptorKey, type ZLinkFanoutPublisherDescriptor, type ZLinkFanoutPublisherDescriptorKey, type ZLinkOwnerLeaseClaimResult, type ZLinkOwnerLeaseReadResult, type ZLinkOwnerLeaseReleaseResult, type ZLinkOwnerLeaseRenewResult, type ZLinkObjectAbortRequest, type ZLinkObjectAbortResult, type ZLinkObjectCommitRequest, type ZLinkObjectCommitResult, type ZLinkObjectCreationCompleteRequest, type ZLinkObjectCreationCompleteResult, type ZLinkObjectReserveRequest, type ZLinkObjectReserveResult, type ZLinkCreationOperationIdentity, type ZLinkCreationTerminalReadResult, type ZLinkPageRequest, type ZLinkPeerLocation, type ZLinkPeerLocationFilter, type ZLinkPeerLocationKey, type ZLinkRouteLocation, type ZLinkRouteLocationFilter, type ZLinkRouteLocationKey, type ZLinkSpotLocation, type ZLinkSpotLocationFilter, type ZLinkSpotLocationKey } from './internal-location-contracts';
|
|
2
1
|
import type { ZLinkActorTransferPrepareRequest, ZLinkActorTransferRecord, ZLinkActorTransferWriteResult } from '../../contracts/Locations/ActorTransfer';
|
|
3
|
-
import type { ZLinkFanoutLocationStore } from './internal-store-contracts';
|
|
4
2
|
import type { ZLinkDomainLocationStore } from './domain-store-contract';
|
|
3
|
+
import { ZLinkLocationWriteIntent, ZLinkLocationWriteStatus, type ZLinkActorLocation, type ZLinkActorLocationFilter, type ZLinkActorLocationKey, type ZLinkAggregateAbortResult, type ZLinkAggregateCommitResult, type ZLinkAggregateFence, type ZLinkAggregatePrepareRequest, type ZLinkAggregatePrepareResult, type ZLinkAuthorityCompareExchangeResult, type ZLinkAuthorityKey, type ZLinkAuthorityMutation, type ZLinkAuthorityReadResult, type ZLinkAuthorityScanCursor, type ZLinkAuthorityScanResult, type ZLinkAuthorityStoreVersion, type ZLinkClientServerServerDescriptor, type ZLinkClientServerServerDescriptorKey, type ZLinkCreationOperationIdentity, type ZLinkCreationTerminalReadResult, type ZLinkFanoutPublisherDescriptor, type ZLinkFanoutPublisherDescriptorKey, type ZLinkLocationChangeStampScope, type ZLinkLocationOwnerToken, type ZLinkLocationPage, type ZLinkLocationWriteResult, type ZLinkMeshNodeDescriptor, type ZLinkMeshNodeDescriptorKey, type ZLinkObjectAbortRequest, type ZLinkObjectAbortResult, type ZLinkObjectCommitRequest, type ZLinkObjectCommitResult, type ZLinkObjectCreationCompleteRequest, type ZLinkObjectCreationCompleteResult, type ZLinkObjectReserveRequest, type ZLinkObjectReserveResult, type ZLinkOwnerLeaseClaimResult, type ZLinkOwnerLeaseReadResult, type ZLinkOwnerLeaseReleaseResult, type ZLinkOwnerLeaseRenewResult, type ZLinkPageRequest, type ZLinkPeerLocation, type ZLinkPeerLocationFilter, type ZLinkPeerLocationKey, type ZLinkRouteLocation, type ZLinkRouteLocationFilter, type ZLinkRouteLocationKey, type ZLinkSpotLocation, type ZLinkSpotLocationFilter, type ZLinkSpotLocationKey } from './internal-location-contracts';
|
|
4
|
+
import type { ZLinkFanoutLocationStore } from './internal-store-contracts';
|
|
5
5
|
export declare class ZLinkInMemoryLocationStore implements ZLinkDomainLocationStore, ZLinkFanoutLocationStore {
|
|
6
6
|
private readonly now;
|
|
7
7
|
private readonly leases;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkInMemoryLocationStore = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
5
|
+
const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
|
|
6
|
+
const location_store_integration_1 = require("../../location-store-integration");
|
|
6
7
|
const authority_key_codec_1 = require("./authority-key-codec");
|
|
8
|
+
const in_memory_authority_store_1 = require("./in-memory-authority-store");
|
|
9
|
+
const internal_location_contracts_1 = require("./internal-location-contracts");
|
|
7
10
|
const key_codec_1 = require("./key-codec");
|
|
8
|
-
const
|
|
11
|
+
const MAX_LOCATION_GENERATION = 0x7fffffffffffffffn;
|
|
12
|
+
const MAX_DESCRIPTOR_OBJECT_CAPABILITIES = 1024;
|
|
9
13
|
class ZLinkInMemoryLocationStore {
|
|
10
14
|
now;
|
|
11
15
|
leases = new Map();
|
|
@@ -526,7 +530,7 @@ class ZLinkInMemoryLocationStore {
|
|
|
526
530
|
if (current !== undefined && current.leaseExpiresAt.getTime() > storeNow.getTime()) {
|
|
527
531
|
return { kind: 'conflict' };
|
|
528
532
|
}
|
|
529
|
-
if (this.ownerLeaseGeneration >=
|
|
533
|
+
if (this.ownerLeaseGeneration >= MAX_LOCATION_GENERATION) {
|
|
530
534
|
return { kind: 'generationExhausted' };
|
|
531
535
|
}
|
|
532
536
|
const token = { ownerId, leaseGeneration: ++this.ownerLeaseGeneration };
|
|
@@ -743,13 +747,13 @@ function validateMeshNodeDescriptor(descriptor) {
|
|
|
743
747
|
}
|
|
744
748
|
if (descriptor.objectRole === internal_location_contracts_1.ZLinkObjectRole.Server) {
|
|
745
749
|
if (descriptor.entrySpotId !== undefined && !validDescriptorText(descriptor.entrySpotId)) {
|
|
746
|
-
throw new TypeError(
|
|
750
|
+
throw new TypeError(`MeshNode Entry Spot ID must contain 1..${CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`);
|
|
747
751
|
}
|
|
748
752
|
}
|
|
749
753
|
else if (descriptor.entrySpotId !== undefined) {
|
|
750
754
|
throw new TypeError('Only Object Server descriptors may publish an Entry Spot ID.');
|
|
751
755
|
}
|
|
752
|
-
const maxGeneration =
|
|
756
|
+
const maxGeneration = MAX_LOCATION_GENERATION;
|
|
753
757
|
if (descriptor.lifecycleGeneration < 1n ||
|
|
754
758
|
descriptor.lifecycleGeneration > maxGeneration ||
|
|
755
759
|
descriptor.descriptorRevision < 1n ||
|
|
@@ -777,9 +781,8 @@ function validateMeshNodeDescriptor(descriptor) {
|
|
|
777
781
|
!Number.isSafeInteger(descriptor.activationConcurrency.limit) ||
|
|
778
782
|
descriptor.activationConcurrency.limit < 1 ||
|
|
779
783
|
descriptor.activationConcurrency.active > descriptor.activationConcurrency.limit ||
|
|
780
|
-
descriptor.placementWeight
|
|
781
|
-
descriptor.
|
|
782
|
-
descriptor.objectCapabilities.length > 1024 ||
|
|
784
|
+
!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(descriptor.placementWeight) ||
|
|
785
|
+
descriptor.objectCapabilities.length > MAX_DESCRIPTOR_OBJECT_CAPABILITIES ||
|
|
783
786
|
(descriptor.objectRole !== internal_location_contracts_1.ZLinkObjectRole.Server && descriptor.objectCapabilities.length !== 0)) {
|
|
784
787
|
throw new RangeError('MeshNode object capacity is invalid.');
|
|
785
788
|
}
|
|
@@ -804,7 +807,7 @@ function validateMeshNodeDescriptor(descriptor) {
|
|
|
804
807
|
}
|
|
805
808
|
function validDescriptorText(value) {
|
|
806
809
|
const size = Buffer.byteLength(value, 'utf8');
|
|
807
|
-
return size >= 1 && size <=
|
|
810
|
+
return size >= 1 && size <= CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES && !value.includes('\0');
|
|
808
811
|
}
|
|
809
812
|
function meshNodeImmutableFingerprint(descriptor) {
|
|
810
813
|
const capabilities = [...descriptor.objectCapabilities].sort((left, right) => {
|
|
@@ -867,7 +870,7 @@ function validateClientServerDescriptor(descriptor) {
|
|
|
867
870
|
!validDescriptorText(descriptor.ownerId)) {
|
|
868
871
|
throw new TypeError('ClientServer descriptor identity and endpoint are required.');
|
|
869
872
|
}
|
|
870
|
-
const maxGeneration =
|
|
873
|
+
const maxGeneration = MAX_LOCATION_GENERATION;
|
|
871
874
|
if (descriptor.lifecycleGeneration < 1n ||
|
|
872
875
|
descriptor.lifecycleGeneration > maxGeneration ||
|
|
873
876
|
descriptor.descriptorRevision < 1n ||
|
|
@@ -876,8 +879,8 @@ function validateClientServerDescriptor(descriptor) {
|
|
|
876
879
|
descriptor.leaseGeneration > maxGeneration) {
|
|
877
880
|
throw new RangeError('ClientServer descriptor generations are invalid.');
|
|
878
881
|
}
|
|
879
|
-
if (!
|
|
880
|
-
throw new RangeError(
|
|
882
|
+
if (!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(descriptor.weight)) {
|
|
883
|
+
throw new RangeError(`ClientServer descriptor weight must be an integer in 0..${RegistrationBuilderPolicy_1.ZLINK_MAX_PUBLIC_WEIGHT}.`);
|
|
881
884
|
}
|
|
882
885
|
}
|
|
883
886
|
function clientServerImmutableFingerprint(descriptor) {
|
|
@@ -907,7 +910,7 @@ function validateFanoutPublisherDescriptor(descriptor) {
|
|
|
907
910
|
!validDescriptorText(descriptor.ownerId)) {
|
|
908
911
|
throw new TypeError('Fanout publisher descriptor identity and endpoint are required.');
|
|
909
912
|
}
|
|
910
|
-
const maxGeneration =
|
|
913
|
+
const maxGeneration = MAX_LOCATION_GENERATION;
|
|
911
914
|
if (descriptor.lifecycleGeneration < 1n ||
|
|
912
915
|
descriptor.lifecycleGeneration > maxGeneration ||
|
|
913
916
|
descriptor.descriptorRevision < 1n ||
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ZLinkLocationStore, ZLinkStoreKey, ZLinkStoreReadResult, ZLinkStoreScanRequest, ZLinkStoreScanResult, ZLinkStoreVersion, ZLinkStoreWriteRequest, ZLinkStoreWriteResult } from '../../contracts';
|
|
2
|
+
export declare const PROVIDER_STORAGE_NAMESPACE_PREFIX = "zlink:v11:";
|
|
2
3
|
/**
|
|
3
4
|
* Framework-owned primitive Store used by the explicit in-memory option.
|
|
4
5
|
* Domain records are encoded by ZLinkLocationStoreRepository.
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZLinkInMemoryProviderLocationStore = void 0;
|
|
3
|
+
exports.ZLinkInMemoryProviderLocationStore = exports.PROVIDER_STORAGE_NAMESPACE_PREFIX = void 0;
|
|
4
4
|
exports.storeKey = storeKey;
|
|
5
5
|
exports.storeVersion = storeVersion;
|
|
6
|
+
const Stores_1 = require("../../contracts/Locations/Stores");
|
|
7
|
+
exports.PROVIDER_STORAGE_NAMESPACE_PREFIX = 'zlink:v11:';
|
|
6
8
|
/**
|
|
7
9
|
* Framework-owned primitive Store used by the explicit in-memory option.
|
|
8
10
|
* Domain records are encoded by ZLinkLocationStoreRepository.
|
|
@@ -42,6 +44,12 @@ class ZLinkInMemoryProviderLocationStore {
|
|
|
42
44
|
if (current !== undefined)
|
|
43
45
|
return { kind: 'conflict', storeNow };
|
|
44
46
|
}
|
|
47
|
+
else if (condition.kind === 'value') {
|
|
48
|
+
if (current === undefined ||
|
|
49
|
+
!Buffer.from(current.bytes).equals(Buffer.from(condition.expected))) {
|
|
50
|
+
return { kind: 'conflict', storeNow };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
45
53
|
else if (current?.version.value !== condition.expected.value) {
|
|
46
54
|
return { kind: 'conflict', storeNow };
|
|
47
55
|
}
|
|
@@ -52,11 +60,9 @@ class ZLinkInMemoryProviderLocationStore {
|
|
|
52
60
|
this.values.delete(mutation.key.value);
|
|
53
61
|
continue;
|
|
54
62
|
}
|
|
55
|
-
|
|
63
|
+
const retentionMs = mutation.retentionMs === undefined ? undefined : Math.ceil(mutation.retentionMs);
|
|
56
64
|
const version = storeVersion((++this.nextVersion).toString());
|
|
57
|
-
const expiresAt =
|
|
58
|
-
? undefined
|
|
59
|
-
: new Date(storeNow.getTime() + mutation.retentionMs);
|
|
65
|
+
const expiresAt = retentionMs === undefined ? undefined : new Date(storeNow.getTime() + retentionMs);
|
|
60
66
|
this.values.set(mutation.key.value, {
|
|
61
67
|
bytes: mutation.bytes.slice(),
|
|
62
68
|
version,
|
|
@@ -86,13 +92,26 @@ class ZLinkInMemoryProviderLocationStore {
|
|
|
86
92
|
this.scans.set(snapshotId, snapshot);
|
|
87
93
|
}
|
|
88
94
|
else {
|
|
89
|
-
|
|
95
|
+
const cursor = parseCursor(request.cursor);
|
|
96
|
+
snapshotId = cursor?.[0] ?? '';
|
|
97
|
+
offset = cursor?.[1] ?? 0;
|
|
90
98
|
snapshot = this.scans.get(snapshotId);
|
|
91
|
-
if (snapshot === undefined)
|
|
99
|
+
if (snapshot === undefined || offset > snapshot.items.length)
|
|
92
100
|
return { kind: 'expired' };
|
|
93
101
|
}
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
let nextOffset = offset;
|
|
103
|
+
let encodedBytes = 0;
|
|
104
|
+
while (nextOffset < snapshot.items.length && nextOffset - offset < request.limit) {
|
|
105
|
+
const item = snapshot.items[nextOffset];
|
|
106
|
+
const itemBytes = Buffer.byteLength(item.key.value, 'utf8') +
|
|
107
|
+
Buffer.byteLength(item.value.version.value, 'utf8') +
|
|
108
|
+
item.value.bytes.byteLength;
|
|
109
|
+
if (encodedBytes + itemBytes > Stores_1.ZLINK_PROVIDER_MAX_ENCODED_PAGE_BYTES)
|
|
110
|
+
break;
|
|
111
|
+
encodedBytes += itemBytes;
|
|
112
|
+
nextOffset += 1;
|
|
113
|
+
}
|
|
114
|
+
const selected = snapshot.items.slice(offset, nextOffset);
|
|
96
115
|
const nextCursor = nextOffset < snapshot.items.length ? scanCursor(`${snapshotId}:${nextOffset}`) : undefined;
|
|
97
116
|
if (nextCursor === undefined)
|
|
98
117
|
this.scans.delete(snapshotId);
|
|
@@ -135,9 +154,10 @@ function scanCursor(value) {
|
|
|
135
154
|
function parseCursor(cursor) {
|
|
136
155
|
const separator = cursor.value.indexOf(':');
|
|
137
156
|
const snapshotId = cursor.value.slice(0, separator);
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
157
|
+
const encodedOffset = cursor.value.slice(separator + 1);
|
|
158
|
+
const offset = Number(encodedOffset);
|
|
159
|
+
if (separator < 1 || !/^(0|[1-9][0-9]*)$/.test(encodedOffset) || !Number.isSafeInteger(offset)) {
|
|
160
|
+
return undefined;
|
|
141
161
|
}
|
|
142
162
|
return [snapshotId, offset];
|
|
143
163
|
}
|
|
@@ -147,35 +167,67 @@ function requireWriteRequest(request) {
|
|
|
147
167
|
const keys = [...new Set([...conditionKeys, ...mutationKeys])];
|
|
148
168
|
if (new Set(conditionKeys).size !== conditionKeys.length ||
|
|
149
169
|
new Set(mutationKeys).size !== mutationKeys.length ||
|
|
150
|
-
keys.length >
|
|
151
|
-
throw new RangeError(
|
|
170
|
+
keys.length > Stores_1.ZLINK_PROVIDER_MAX_WRITE_KEYS) {
|
|
171
|
+
throw new RangeError(`Location Store write keys must be unique and bounded to ${Stores_1.ZLINK_PROVIDER_MAX_WRITE_KEYS.toLocaleString('en-US')}.`);
|
|
152
172
|
}
|
|
153
173
|
for (const key of keys)
|
|
154
174
|
requireKey(key);
|
|
155
|
-
const encodedSize = request.
|
|
156
|
-
|
|
157
|
-
|
|
175
|
+
const encodedSize = request.conditions.reduce((sum, condition) => {
|
|
176
|
+
const keyBytes = Buffer.byteLength(condition.key.value, 'utf8');
|
|
177
|
+
if (condition.kind === 'missing')
|
|
178
|
+
return sum + keyBytes;
|
|
179
|
+
if (condition.kind === 'value') {
|
|
180
|
+
requireValue(condition.expected, undefined);
|
|
181
|
+
return sum + keyBytes + condition.expected.byteLength;
|
|
182
|
+
}
|
|
183
|
+
const versionBytes = Buffer.byteLength(condition.expected.value, 'utf8');
|
|
184
|
+
if (versionBytes < 1 || versionBytes > Stores_1.ZLINK_PROVIDER_MAX_VERSION_BYTES) {
|
|
185
|
+
throw new RangeError(`Location Store version must contain 1..${Stores_1.ZLINK_PROVIDER_MAX_VERSION_BYTES.toLocaleString('en-US')} UTF-8 bytes.`);
|
|
186
|
+
}
|
|
187
|
+
return sum + keyBytes + versionBytes;
|
|
188
|
+
}, 0) +
|
|
189
|
+
request.mutations.reduce((sum, mutation) => {
|
|
190
|
+
const keyBytes = Buffer.byteLength(mutation.key.value, 'utf8');
|
|
191
|
+
if (mutation.kind !== 'put')
|
|
192
|
+
return sum + keyBytes;
|
|
193
|
+
requireValue(mutation.bytes, mutation.retentionMs);
|
|
194
|
+
return sum + keyBytes + mutation.bytes.byteLength;
|
|
195
|
+
}, 0);
|
|
196
|
+
if (encodedSize > Stores_1.ZLINK_PROVIDER_MAX_WRITE_BYTES) {
|
|
197
|
+
throw new RangeError(`Location Store write exceeds ${Stores_1.ZLINK_PROVIDER_MAX_WRITE_BYTES / (1024 * 1024)} MiB.`);
|
|
158
198
|
}
|
|
159
199
|
}
|
|
160
200
|
function requireScanRequest(request) {
|
|
161
|
-
if (
|
|
162
|
-
|
|
201
|
+
if (request.cursor !== undefined) {
|
|
202
|
+
const bytes = Buffer.byteLength(request.cursor.value, 'utf8');
|
|
203
|
+
if (bytes < 1 || bytes > Stores_1.ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES) {
|
|
204
|
+
throw new RangeError(`Location Store cursor must contain 1..${Stores_1.ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES.toLocaleString('en-US')} UTF-8 bytes.`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (Buffer.byteLength(request.prefix, 'utf8') > Stores_1.ZLINK_PROVIDER_MAX_KEY_BYTES) {
|
|
208
|
+
throw new RangeError(`Location Store scan prefix exceeds ${Stores_1.ZLINK_PROVIDER_MAX_KEY_BYTES.toLocaleString('en-US')} UTF-8 bytes.`);
|
|
163
209
|
}
|
|
164
|
-
if (!Number.isSafeInteger(request.limit) ||
|
|
165
|
-
|
|
210
|
+
if (!Number.isSafeInteger(request.limit) ||
|
|
211
|
+
request.limit < 1 ||
|
|
212
|
+
request.limit > Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE) {
|
|
213
|
+
throw new RangeError(`Location Store scan limit must be in 1..${Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE}.`);
|
|
166
214
|
}
|
|
167
215
|
}
|
|
168
216
|
function requireValue(bytes, retentionMs) {
|
|
169
|
-
if (bytes.byteLength >
|
|
170
|
-
throw new RangeError(
|
|
217
|
+
if (bytes.byteLength > Stores_1.ZLINK_PROVIDER_MAX_VALUE_BYTES) {
|
|
218
|
+
throw new RangeError(`Location Store value exceeds ${Stores_1.ZLINK_PROVIDER_MAX_VALUE_BYTES / (1024 * 1024)} MiB.`);
|
|
171
219
|
}
|
|
172
|
-
if (retentionMs !== undefined &&
|
|
173
|
-
|
|
220
|
+
if (retentionMs !== undefined &&
|
|
221
|
+
(!Number.isFinite(retentionMs) ||
|
|
222
|
+
retentionMs <= 0 ||
|
|
223
|
+
!Number.isSafeInteger(Math.ceil(retentionMs)))) {
|
|
224
|
+
throw new RangeError('Location Store retention must round to a positive safe integer.');
|
|
174
225
|
}
|
|
226
|
+
return retentionMs === undefined ? undefined : Math.ceil(retentionMs);
|
|
175
227
|
}
|
|
176
228
|
function requireKey(value) {
|
|
177
229
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
178
|
-
if (bytes < 1 || bytes >
|
|
179
|
-
throw new RangeError(
|
|
230
|
+
if (bytes < 1 || bytes > Stores_1.ZLINK_PROVIDER_MAX_KEY_BYTES) {
|
|
231
|
+
throw new RangeError(`Location Store key must contain 1..${Stores_1.ZLINK_PROVIDER_MAX_KEY_BYTES.toLocaleString('en-US')} UTF-8 bytes.`);
|
|
180
232
|
}
|
|
181
233
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkLocationKeyCodec = void 0;
|
|
4
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
4
5
|
const canonical_codec_1 = require("./canonical-codec");
|
|
5
6
|
const routing_id_1 = require("../routing-id");
|
|
6
7
|
// Framework bookkeeping codec for in-memory row maps and generation guards.
|
|
@@ -31,8 +32,8 @@ function encodeSegments(...segments) {
|
|
|
31
32
|
}
|
|
32
33
|
function requireSpotId(value) {
|
|
33
34
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
34
|
-
if (bytes < 1 || bytes >
|
|
35
|
-
throw new TypeError(
|
|
35
|
+
if (bytes < 1 || bytes > CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES) {
|
|
36
|
+
throw new TypeError(`SpotId must contain 1..${CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
|
|
36
37
|
}
|
|
37
38
|
return value;
|
|
38
39
|
}
|
|
@@ -19,6 +19,7 @@ export declare class ZLinkOwnerLeaseTracker {
|
|
|
19
19
|
isOwnerLive(ownerId: string, signal?: AbortSignal): Promise<boolean>;
|
|
20
20
|
remainingLeaseMs(ownerId: string, signal?: AbortSignal): Promise<number>;
|
|
21
21
|
remainingOwnerTokenLeaseMs(owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<number>;
|
|
22
|
+
isOwnerTokenLive(owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<boolean>;
|
|
22
23
|
getLiveOwnerSetVersion(signal?: AbortSignal): Promise<number>;
|
|
23
24
|
private getSnapshot;
|
|
24
25
|
private prepareSnapshotRefresh;
|
|
@@ -28,9 +29,6 @@ export declare class ZLinkOwnerLeaseTracker {
|
|
|
28
29
|
private isLive;
|
|
29
30
|
}
|
|
30
31
|
export declare class ZLinkLiveRowFilter {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
filter<TRow>(rows: readonly TRow[], ownerIdOf: (row: TRow) => string, signal?: AbortSignal, include?: (row: TRow) => boolean): Promise<TRow[]>;
|
|
34
|
-
resolve<TRow>(row: TRow | undefined, ownerIdOf: (row: TRow) => string, signal?: AbortSignal, include?: (row: TRow) => boolean): Promise<TRow | undefined>;
|
|
35
|
-
private isLive;
|
|
32
|
+
filter<TRow>(rows: readonly TRow[], isLive: (row: TRow, signal?: AbortSignal) => Promise<boolean>, signal?: AbortSignal, include?: (row: TRow) => boolean): Promise<TRow[]>;
|
|
33
|
+
resolve<TRow>(row: TRow | undefined, isLive: (row: TRow, signal?: AbortSignal) => Promise<boolean>, signal?: AbortSignal, include?: (row: TRow) => boolean): Promise<TRow | undefined>;
|
|
36
34
|
}
|
|
@@ -40,6 +40,9 @@ class ZLinkOwnerLeaseTracker {
|
|
|
40
40
|
snapshot.result.storeNow.getTime() -
|
|
41
41
|
(this.monotonicNowMs() - snapshot.fetchedAtMs));
|
|
42
42
|
}
|
|
43
|
+
async isOwnerTokenLive(owner, signal) {
|
|
44
|
+
return (await this.remainingOwnerTokenLeaseMs(owner, signal)) > 0;
|
|
45
|
+
}
|
|
43
46
|
async getLiveOwnerSetVersion(signal) {
|
|
44
47
|
const owners = await this.lane.run(() => [...this.snapshots.keys()]);
|
|
45
48
|
const refreshed = await Promise.all(owners.map((ownerId) => this.getSnapshot(ownerId, signal)));
|
|
@@ -128,27 +131,20 @@ class ZLinkOwnerLeaseTracker {
|
|
|
128
131
|
}
|
|
129
132
|
exports.ZLinkOwnerLeaseTracker = ZLinkOwnerLeaseTracker;
|
|
130
133
|
class ZLinkLiveRowFilter {
|
|
131
|
-
|
|
132
|
-
constructor(leaseTracker) {
|
|
133
|
-
this.leaseTracker = leaseTracker;
|
|
134
|
-
}
|
|
135
|
-
async filter(rows, ownerIdOf, signal, include) {
|
|
134
|
+
async filter(rows, isLive, signal, include) {
|
|
136
135
|
const live = [];
|
|
137
136
|
for (const row of rows) {
|
|
138
|
-
if ((include === undefined || include(row)) && (await
|
|
137
|
+
if ((include === undefined || include(row)) && (await isLive(row, signal))) {
|
|
139
138
|
live.push(row);
|
|
140
139
|
}
|
|
141
140
|
}
|
|
142
141
|
return live;
|
|
143
142
|
}
|
|
144
|
-
async resolve(row,
|
|
143
|
+
async resolve(row, isLive, signal, include) {
|
|
145
144
|
if (row === undefined || (include !== undefined && !include(row))) {
|
|
146
145
|
return undefined;
|
|
147
146
|
}
|
|
148
|
-
return (await
|
|
149
|
-
}
|
|
150
|
-
async isLive(row, ownerIdOf, signal) {
|
|
151
|
-
return await this.leaseTracker.isOwnerLive(ownerIdOf(row), signal);
|
|
147
|
+
return (await isLive(row, signal)) ? row : undefined;
|
|
152
148
|
}
|
|
153
149
|
}
|
|
154
150
|
exports.ZLinkLiveRowFilter = ZLinkLiveRowFilter;
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import type { ActorRef, RoutingId } from '../../contracts/Common';
|
|
2
|
-
import type { ZLinkActorLocation, ZLinkLocationWriteStatus } from './internal-location-contracts';
|
|
3
|
-
import type { ZLinkActorLocationStore, ZLinkSpotLocationStore } from './internal-store-contracts';
|
|
4
2
|
import { ZLinkSpotKind } from '../../contracts/Spots';
|
|
5
3
|
import { type ZLinkActorClaimActivation, type ZLinkActorClaimResult } from './actor-location-claims';
|
|
6
|
-
|
|
7
|
-
import type {
|
|
8
|
-
import type { ZLinkAuthorityStore } from './internal-store-contracts';
|
|
4
|
+
import type { ZLinkActorLocation, ZLinkLocationWriteStatus } from './internal-location-contracts';
|
|
5
|
+
import type { ZLinkActorLocationStore, ZLinkAuthorityStore, ZLinkSpotLocationStore } from './internal-store-contracts';
|
|
9
6
|
import type { IZLinkLocationLifecycleRuntime } from './lifecycle-runtime';
|
|
7
|
+
import { type ZLinkInstanceClosingAuthority, type ZLinkTrackedInstanceAuthority } from './spot-location-claims';
|
|
8
|
+
export { ZLinkActorClaimStatus, type ZLinkActorClaimActivation, type ZLinkActorClaimResult } from './actor-location-claims';
|
|
10
9
|
export type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
|
|
11
10
|
export declare class ZLinkLocationLifecycle {
|
|
12
11
|
private readonly runtime;
|
|
13
12
|
private readonly actorClaims;
|
|
14
|
-
private readonly actorCleanupTasks;
|
|
15
13
|
private readonly spotClaims;
|
|
16
14
|
private readonly actorSessionRoutes;
|
|
17
|
-
private disposed;
|
|
18
15
|
private readonly ownershipLostHandler;
|
|
19
16
|
constructor(runtime: IZLinkLocationLifecycleRuntime, actorStore: ZLinkActorLocationStore, entryMeshName?: string, authorityStore?: ZLinkAuthorityStore, spotStore?: ZLinkSpotLocationStore, invalidateSpotRoute?: (spotId: RoutingId) => void);
|
|
20
17
|
dispose(): void;
|
|
@@ -25,13 +22,11 @@ export declare class ZLinkLocationLifecycle {
|
|
|
25
22
|
notifyActorJoinedSpot(actorType: string, actorId: string, spotMeshName: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, ownerNodeGeneration: bigint): Promise<void>;
|
|
26
23
|
notifyActorLeftSpot(actorType: string, actorId: string, entrySpotId: RoutingId, entrySpotGeneration: bigint, membershipEpoch: bigint, ownerNodeGeneration: bigint): Promise<void>;
|
|
27
24
|
releaseActor(actorType: string, actorId: string, actorRef?: ActorRef): Promise<void>;
|
|
28
|
-
releaseActorEventually(actorType: string, actorId: string): Promise<void>;
|
|
29
25
|
ownsActor(actorType: string, actorId: string): boolean;
|
|
30
26
|
actorLocationSnapshot(actorId: string): ZLinkActorLocation | undefined;
|
|
31
|
-
private retryActorRelease;
|
|
32
27
|
claimSpot(meshName: string, spotId: RoutingId, spotType: string, nodeRid: RoutingId, spotKind: ZLinkSpotKind, spotGeneration: bigint, ownerNodeGeneration: bigint, deactivate?: () => Promise<void>): Promise<ZLinkLocationWriteStatus>;
|
|
33
28
|
releaseSpot(meshName: string, spotId: RoutingId, expectedObjectGeneration?: bigint): Promise<void>;
|
|
34
|
-
beginInstanceSpotClosing(meshName: string, spotId: RoutingId): Promise<ZLinkInstanceClosingAuthority | undefined>;
|
|
29
|
+
beginInstanceSpotClosing(meshName: string, spotId: RoutingId, onCommitted: () => void): Promise<ZLinkInstanceClosingAuthority | undefined>;
|
|
35
30
|
trackInstanceSpot(input: ZLinkTrackedInstanceAuthority): void;
|
|
36
31
|
reclaimOwnerRows(): Promise<void>;
|
|
37
32
|
bindActorSessionRoute(sessionRid: RoutingId, actorId: string, ownerNodeRid: RoutingId): Promise<void>;
|
|
@@ -2,17 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkLocationLifecycle = exports.ZLinkActorClaimStatus = void 0;
|
|
4
4
|
const actor_location_claims_1 = require("./actor-location-claims");
|
|
5
|
-
var actor_location_claims_2 = require("./actor-location-claims");
|
|
6
|
-
Object.defineProperty(exports, "ZLinkActorClaimStatus", { enumerable: true, get: function () { return actor_location_claims_2.ZLinkActorClaimStatus; } });
|
|
7
5
|
const actor_session_route_claims_1 = require("./actor-session-route-claims");
|
|
8
6
|
const spot_location_claims_1 = require("./spot-location-claims");
|
|
7
|
+
var actor_location_claims_2 = require("./actor-location-claims");
|
|
8
|
+
Object.defineProperty(exports, "ZLinkActorClaimStatus", { enumerable: true, get: function () { return actor_location_claims_2.ZLinkActorClaimStatus; } });
|
|
9
9
|
class ZLinkLocationLifecycle {
|
|
10
10
|
runtime;
|
|
11
11
|
actorClaims;
|
|
12
|
-
actorCleanupTasks = new Map();
|
|
13
12
|
spotClaims;
|
|
14
13
|
actorSessionRoutes;
|
|
15
|
-
disposed = false;
|
|
16
14
|
ownershipLostHandler = (event) => this.onOwnershipLost(event);
|
|
17
15
|
constructor(runtime, actorStore, entryMeshName = '', authorityStore, spotStore, invalidateSpotRoute) {
|
|
18
16
|
this.runtime = runtime;
|
|
@@ -22,7 +20,6 @@ class ZLinkLocationLifecycle {
|
|
|
22
20
|
this.runtime.addOwnershipLostHandler(this.ownershipLostHandler);
|
|
23
21
|
}
|
|
24
22
|
dispose() {
|
|
25
|
-
this.disposed = true;
|
|
26
23
|
this.runtime.removeOwnershipLostHandler(this.ownershipLostHandler);
|
|
27
24
|
}
|
|
28
25
|
async executeActorClaimThenActivate(actorType, actorId, nodeRid, deactivate, activate) {
|
|
@@ -46,43 +43,20 @@ class ZLinkLocationLifecycle {
|
|
|
46
43
|
async releaseActor(actorType, actorId, actorRef) {
|
|
47
44
|
await this.actorClaims.release(actorType, actorId, actorRef);
|
|
48
45
|
}
|
|
49
|
-
releaseActorEventually(actorType, actorId) {
|
|
50
|
-
const existing = this.actorCleanupTasks.get(actorId);
|
|
51
|
-
if (existing !== undefined) {
|
|
52
|
-
return existing;
|
|
53
|
-
}
|
|
54
|
-
const cleanup = this.retryActorRelease(actorType, actorId).finally(() => this.actorCleanupTasks.delete(actorId));
|
|
55
|
-
this.actorCleanupTasks.set(actorId, cleanup);
|
|
56
|
-
return cleanup;
|
|
57
|
-
}
|
|
58
46
|
ownsActor(actorType, actorId) {
|
|
59
47
|
return this.actorClaims.owns(actorType, actorId);
|
|
60
48
|
}
|
|
61
49
|
actorLocationSnapshot(actorId) {
|
|
62
50
|
return this.actorClaims.snapshot(actorId);
|
|
63
51
|
}
|
|
64
|
-
async retryActorRelease(actorType, actorId) {
|
|
65
|
-
let retryDelayMs = 50;
|
|
66
|
-
while (!this.disposed) {
|
|
67
|
-
try {
|
|
68
|
-
await this.actorClaims.release(actorType, actorId);
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
await waitForRetry(retryDelayMs);
|
|
73
|
-
retryDelayMs = Math.min(retryDelayMs * 2, 1_000);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
52
|
async claimSpot(meshName, spotId, spotType, nodeRid, spotKind, spotGeneration, ownerNodeGeneration, deactivate) {
|
|
79
53
|
return await this.spotClaims.claim(meshName, spotId, spotType, nodeRid, spotKind, spotGeneration, ownerNodeGeneration, deactivate);
|
|
80
54
|
}
|
|
81
55
|
async releaseSpot(meshName, spotId, expectedObjectGeneration) {
|
|
82
56
|
await this.spotClaims.release(meshName, spotId, expectedObjectGeneration);
|
|
83
57
|
}
|
|
84
|
-
async beginInstanceSpotClosing(meshName, spotId) {
|
|
85
|
-
return await this.spotClaims.beginInstanceClosing(meshName, spotId);
|
|
58
|
+
async beginInstanceSpotClosing(meshName, spotId, onCommitted) {
|
|
59
|
+
return await this.spotClaims.beginInstanceClosing(meshName, spotId, onCommitted);
|
|
86
60
|
}
|
|
87
61
|
trackInstanceSpot(input) {
|
|
88
62
|
this.spotClaims.trackInstanceAuthority(input);
|
|
@@ -114,6 +88,3 @@ function inferSpotStore(actorStore) {
|
|
|
114
88
|
}
|
|
115
89
|
return undefined;
|
|
116
90
|
}
|
|
117
|
-
function waitForRetry(delayMs) {
|
|
118
|
-
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
119
|
-
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isIndeterminateLocationStoreFailure = isIndeterminateLocationStoreFailure;
|
|
4
|
+
/** Location Store §6: caller validation is terminal; provider failures may lose a result. */
|
|
5
|
+
function isIndeterminateLocationStoreFailure(error, signal) {
|
|
6
|
+
return !(error instanceof TypeError || error instanceof RangeError) && signal?.aborted !== true;
|
|
7
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ZLinkMeshNodeDescriptor } from '../../contracts/Locations/Models';
|
|
2
|
+
import type { ZLinkMeshNodeLocationStore } from './internal-store-contracts';
|
|
3
|
+
export declare function listAllMeshNodeDescriptors(store: ZLinkMeshNodeLocationStore, meshName: string, signal?: AbortSignal, pageSize?: number): Promise<readonly ZLinkMeshNodeDescriptor[]>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listAllMeshNodeDescriptors = listAllMeshNodeDescriptors;
|
|
4
|
+
async function listAllMeshNodeDescriptors(store, meshName, signal, pageSize) {
|
|
5
|
+
const rows = [];
|
|
6
|
+
let continuationToken;
|
|
7
|
+
do {
|
|
8
|
+
const result = await store.listMeshNodes(meshName, { pageSize, continuationToken }, signal);
|
|
9
|
+
rows.push(...result.items);
|
|
10
|
+
continuationToken = result.continuationToken;
|
|
11
|
+
} while (continuationToken !== undefined);
|
|
12
|
+
return rows;
|
|
13
|
+
}
|