@zlink-systems/framework 0.26.0 → 0.28.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/Actors/ZLinkActorClient.d.ts +1 -1
- package/dist/contracts/Channels/Calls.d.ts +1 -1
- 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/Builders.d.ts +0 -1
- package/dist/contracts/Configuration/Configs.d.ts +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 -5
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
- 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/Spots/Contracts.d.ts +2 -2
- package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
- package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -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 +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- 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 +49 -153
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- 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 +83 -105
- 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 +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
- package/dist/runtime/actors/actor-request-deadline.js +6 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
- 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/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- 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 +2 -0
- package/dist/runtime/admission.js +7 -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 +7 -27
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- 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-support.d.ts +3 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -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 -8
- package/dist/runtime/channels/channel-clients.js +73 -59
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.d.ts +1 -1
- package/dist/runtime/channels/channel-envelope.js +51 -39
- package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
- package/dist/runtime/channels/channel-outbound-operations.js +25 -42
- 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 +4 -4
- package/dist/runtime/channels/channel-runtime-manager.js +13 -10
- package/dist/runtime/channels/channel-socket-options.js +3 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +240 -177
- package/dist/runtime/channels/channel-transports.d.ts +21 -31
- package/dist/runtime/channels/channel-transports.js +80 -62
- 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 +130 -72
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +1 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
- package/dist/runtime/channels/source-spot-router.d.ts +1 -1
- package/dist/runtime/channels/source-spot-router.js +2 -4
- 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.d.ts +1 -1
- package/dist/runtime/channels/spot-node-route-transport.js +5 -5
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
- 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 +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- 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/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 +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
- 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.js +22 -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 +0 -6
- 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-object-owner.js +3 -2
- 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 -12
- 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 +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- 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 +11 -8
- package/dist/runtime/host/actor-packet-relay.js +54 -99
- 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 +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- 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 +14 -13
- package/dist/runtime/host/index.js +190 -171
- 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 +15 -28
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- 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 +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +3 -12
- package/dist/runtime/host/spot-address-transport.js +78 -220
- 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 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- 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 +72 -22
- 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 +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- 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 +309 -336
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- 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 +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/request-deadline.d.ts +3 -0
- package/dist/runtime/messaging/request-deadline.js +39 -0
- package/dist/runtime/messaging/submission-result.d.ts +4 -0
- package/dist/runtime/messaging/submission-result.js +56 -1
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- 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 +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- 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 +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- 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 +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +7 -8
- package/dist/runtime/spots/spot-outbound.js +21 -23
- 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 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- 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 +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -2
- package/dist/runtime/streams/index.d.ts +16 -17
- package/dist/runtime/streams/index.js +22 -23
- package/dist/runtime/streams/managed-stream.d.ts +5 -2
- package/dist/runtime/streams/managed-stream.js +20 -13
- package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
- 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 +6 -8
- package/dist/runtime/streams/session-calls.js +6 -22
- package/dist/runtime/streams/session-context.d.ts +10 -10
- package/dist/runtime/streams/session-context.js +25 -10
- package/dist/runtime/streams/session-requests.js +2 -1
- 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/Actors/ZLinkActorClient.ts +1 -1
- package/src/contracts/Channels/Calls.ts +1 -1
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/Builders.ts +0 -1
- package/src/contracts/Configuration/Configs.ts +0 -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 -71
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
- 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/Spots/Contracts.ts +2 -2
- package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
- package/src/contracts/Streams/IZLinkSession.ts +2 -3
- package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +85 -218
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- 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 +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +4 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- 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 +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +14 -37
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +139 -102
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +74 -57
- package/src/runtime/channels/channel-outbound-operations.ts +40 -55
- 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 +12 -30
- package/src/runtime/channels/channel-socket-options.ts +8 -15
- package/src/runtime/channels/channel-socket-registry.ts +291 -196
- package/src/runtime/channels/channel-transports.ts +168 -145
- 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 +172 -91
- package/src/runtime/channels/local-spot-route-transport.ts +1 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
- package/src/runtime/channels/source-spot-router.ts +2 -9
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +7 -9
- package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
- 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 +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- 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/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -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 +0 -10
- 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-object-owner.ts +5 -2
- 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 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- 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 +63 -160
- 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 +180 -260
- 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 +327 -320
- 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 +16 -57
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- 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 +699 -561
- package/src/runtime/host/spot-address-transport.ts +175 -356
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- 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 +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- 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 +457 -482
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/request-deadline.ts +58 -0
- package/src/runtime/messaging/submission-result.ts +72 -2
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- 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 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +59 -47
- 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 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
- package/src/runtime/streams/bound-session-service.ts +22 -2
- package/src/runtime/streams/index.ts +78 -68
- package/src/runtime/streams/managed-stream.ts +32 -23
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
- 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 +11 -36
- package/src/runtime/streams/session-context.ts +60 -25
- package/src/runtime/streams/session-requests.ts +2 -1
- 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/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/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,4 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AUTHORITY_ENVELOPE_MAX_BYTES,
|
|
3
|
+
CREATION_INTENT_MAX_BYTES,
|
|
4
|
+
CREATION_TERMINAL_ENVELOPE_MAX_BYTES
|
|
5
|
+
} from '../../contracts/Configuration/InternalDefaults';
|
|
6
|
+
import { UINT64_MAX } from '@zlink-systems/stream-wire';
|
|
7
|
+
import { ZLINK_MAX_ROUTING_ID_BYTES } from '../../contracts/Common/CoreTypes';
|
|
8
|
+
import { ZLINK_PROVIDER_MAX_PAGE_SIZE } from '../../contracts/Locations/Stores';
|
|
1
9
|
import { randomUUID } from 'node:crypto';
|
|
10
|
+
import { SHA256_DIGEST_BYTES } from '../foundation/actor-join-recovery-codec';
|
|
2
11
|
import type {
|
|
3
12
|
ZLinkAggregateAbortResult,
|
|
4
13
|
ZLinkAggregateCommitResult,
|
|
@@ -34,9 +43,9 @@ import { encodeAuthorityKey } from './authority-key-codec';
|
|
|
34
43
|
import { creationTerminalPreimage } from './opaque-record-key';
|
|
35
44
|
|
|
36
45
|
const MAX_GENERATION = 0x7fff_ffff_ffff_ffffn;
|
|
37
|
-
|
|
46
|
+
|
|
38
47
|
const CREATION_TERMINAL_RETENTION_MS = 5 * 60 * 1000;
|
|
39
|
-
const MAX_U64 =
|
|
48
|
+
const MAX_U64 = UINT64_MAX;
|
|
40
49
|
|
|
41
50
|
export interface ZLinkInMemoryAuthorityValidation {
|
|
42
51
|
isTargetLive(
|
|
@@ -190,10 +199,22 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
190
199
|
if (!this.isOwnerLive(row.snapshot)) {
|
|
191
200
|
return { kind: 'conflict', current: this.read(keyValue) };
|
|
192
201
|
}
|
|
202
|
+
if (
|
|
203
|
+
mutation.generationTransition === 'reincarnate' &&
|
|
204
|
+
(this.objectGeneration >= MAX_GENERATION || this.ownerGeneration >= MAX_GENERATION)
|
|
205
|
+
) {
|
|
206
|
+
return { kind: 'generationExhausted' };
|
|
207
|
+
}
|
|
193
208
|
const nextVersion = this.tryNextStoreVersion();
|
|
194
209
|
if (nextVersion === undefined) return { kind: 'generationExhausted' };
|
|
195
210
|
row.snapshot = {
|
|
196
211
|
...row.snapshot,
|
|
212
|
+
...(mutation.generationTransition === 'reincarnate'
|
|
213
|
+
? {
|
|
214
|
+
objectGeneration: ++this.objectGeneration,
|
|
215
|
+
authorityOwnerGeneration: ++this.ownerGeneration
|
|
216
|
+
}
|
|
217
|
+
: {}),
|
|
197
218
|
storeVersion: version(nextVersion),
|
|
198
219
|
payload: Buffer.from(mutation.payload)
|
|
199
220
|
};
|
|
@@ -208,8 +229,8 @@ export class ZLinkInMemoryAuthorityStore {
|
|
|
208
229
|
signal?: AbortSignal
|
|
209
230
|
): Promise<ZLinkAuthorityScanResult> {
|
|
210
231
|
signal?.throwIfAborted();
|
|
211
|
-
if (!Number.isInteger(limit) || limit < 1 || limit >
|
|
212
|
-
throw new RangeError(
|
|
232
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > ZLINK_PROVIDER_MAX_PAGE_SIZE) {
|
|
233
|
+
throw new RangeError(`Authority scan limit must be in 1..${ZLINK_PROVIDER_MAX_PAGE_SIZE}.`);
|
|
213
234
|
}
|
|
214
235
|
const decoded =
|
|
215
236
|
cursor === undefined
|
|
@@ -814,7 +835,7 @@ function validateAuthorityMutation(mutation: ZLinkAuthorityMutation): void {
|
|
|
814
835
|
}
|
|
815
836
|
const generationTransition = (mutation as { readonly generationTransition?: unknown })
|
|
816
837
|
.generationTransition;
|
|
817
|
-
if (generationTransition !== 'preserve') {
|
|
838
|
+
if (generationTransition !== 'preserve' && generationTransition !== 'reincarnate') {
|
|
818
839
|
throw new TypeError('Authority owner transitions require an aggregate CAS.');
|
|
819
840
|
}
|
|
820
841
|
}
|
|
@@ -826,9 +847,9 @@ function validateReserve(request: ZLinkObjectReserveRequest): void {
|
|
|
826
847
|
validatePayload(request.creatingPayload);
|
|
827
848
|
validateCapacityVector(request.capacity);
|
|
828
849
|
if (
|
|
829
|
-
request.intent.requestSha256.byteLength !==
|
|
850
|
+
request.intent.requestSha256.byteLength !== SHA256_DIGEST_BYTES ||
|
|
830
851
|
request.intent.requestEncodedSize < 0n ||
|
|
831
|
-
request.intent.requestEncodedSize > BigInt(
|
|
852
|
+
request.intent.requestEncodedSize > BigInt(CREATION_INTENT_MAX_BYTES)
|
|
832
853
|
) {
|
|
833
854
|
throw new TypeError('Object creation content receipt is invalid.');
|
|
834
855
|
}
|
|
@@ -837,9 +858,13 @@ function validateReserve(request: ZLinkObjectReserveRequest): void {
|
|
|
837
858
|
function validateCreationOperation(operation: ZLinkCreationOperationIdentity): void {
|
|
838
859
|
const sourceRid = String(operation.sourceNodeRid);
|
|
839
860
|
const sourceRidBytes = Buffer.byteLength(sourceRid, 'utf8');
|
|
840
|
-
if (
|
|
861
|
+
if (
|
|
862
|
+
sourceRidBytes < 1 ||
|
|
863
|
+
sourceRidBytes > ZLINK_MAX_ROUTING_ID_BYTES ||
|
|
864
|
+
sourceRid.includes('\0')
|
|
865
|
+
) {
|
|
841
866
|
throw new TypeError(
|
|
842
|
-
|
|
867
|
+
`Creation terminal source node RID must contain 1..${ZLINK_MAX_ROUTING_ID_BYTES} UTF-8 bytes without NUL.`
|
|
843
868
|
);
|
|
844
869
|
}
|
|
845
870
|
if (
|
|
@@ -861,8 +886,10 @@ function validateTerminalForMutation(
|
|
|
861
886
|
): ZLinkCreationTerminalRecord | undefined {
|
|
862
887
|
if (publication === undefined) return undefined;
|
|
863
888
|
validateCreationOperation(publication.operation);
|
|
864
|
-
if (publication.terminalEnvelope.byteLength >
|
|
865
|
-
throw new RangeError(
|
|
889
|
+
if (publication.terminalEnvelope.byteLength > CREATION_TERMINAL_ENVELOPE_MAX_BYTES) {
|
|
890
|
+
throw new RangeError(
|
|
891
|
+
`Creation terminal envelope must not exceed ${CREATION_TERMINAL_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`
|
|
892
|
+
);
|
|
866
893
|
}
|
|
867
894
|
const deadlineMs = publication.operationDeadline.getTime();
|
|
868
895
|
const expiresAtMs = deadlineMs + CREATION_TERMINAL_RETENTION_MS;
|
|
@@ -915,8 +942,8 @@ function validateAggregateRequest(request: ZLinkAggregatePrepareRequest): void {
|
|
|
915
942
|
if (request.aggregateGeneration < 1n || request.participants.length < 1) {
|
|
916
943
|
throw new RangeError('Aggregate generation and participant count are invalid.');
|
|
917
944
|
}
|
|
918
|
-
if (request.inventoryDigest.byteLength !==
|
|
919
|
-
throw new TypeError(
|
|
945
|
+
if (request.inventoryDigest.byteLength !== SHA256_DIGEST_BYTES) {
|
|
946
|
+
throw new TypeError(`Aggregate inventory digest must contain ${SHA256_DIGEST_BYTES} bytes.`);
|
|
920
947
|
}
|
|
921
948
|
validateCapacityVector(request.capacity);
|
|
922
949
|
const keys = request.participants.map((participant) => participant.authorityKey.value);
|
|
@@ -927,8 +954,10 @@ function validateAggregateRequest(request: ZLinkAggregatePrepareRequest): void {
|
|
|
927
954
|
}
|
|
928
955
|
|
|
929
956
|
function validatePayload(payload: Uint8Array): void {
|
|
930
|
-
if (payload.byteLength >
|
|
931
|
-
throw new RangeError(
|
|
957
|
+
if (payload.byteLength > AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
958
|
+
throw new RangeError(
|
|
959
|
+
`Authority payload exceeds ${AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`
|
|
960
|
+
);
|
|
932
961
|
}
|
|
933
962
|
}
|
|
934
963
|
|
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
import type { RoutingId } from '../../contracts/Common';
|
|
2
|
+
import { ZLINK_MAX_IDENTITY_TEXT_BYTES } from '../../contracts/Common/CoreTypes';
|
|
3
|
+
import {
|
|
4
|
+
isValidPublicWeight,
|
|
5
|
+
ZLINK_MAX_PUBLIC_WEIGHT
|
|
6
|
+
} from '../../contracts/Configuration/RegistrationBuilderPolicy';
|
|
7
|
+
import type {
|
|
8
|
+
ZLinkActorTransferPrepareRequest,
|
|
9
|
+
ZLinkActorTransferRecord,
|
|
10
|
+
ZLinkActorTransferState,
|
|
11
|
+
ZLinkActorTransferWriteResult
|
|
12
|
+
} from '../../contracts/Locations/ActorTransfer';
|
|
13
|
+
import {
|
|
14
|
+
matchesActorLocation,
|
|
15
|
+
matchesPeerLocation,
|
|
16
|
+
matchesRouteLocation,
|
|
17
|
+
matchesSpotLocation
|
|
18
|
+
} from '../../location-store-integration';
|
|
19
|
+
import { encodeAuthorityKey } from './authority-key-codec';
|
|
20
|
+
import type { ZLinkDomainLocationStore } from './domain-store-contract';
|
|
21
|
+
import { ZLinkInMemoryAuthorityStore } from './in-memory-authority-store';
|
|
2
22
|
import {
|
|
3
|
-
ZLinkLocationKind,
|
|
4
23
|
ZLinkFrameworkRuntimeState,
|
|
24
|
+
ZLinkLocationKind,
|
|
5
25
|
ZLinkLocationWriteIntent,
|
|
6
26
|
ZLinkLocationWriteStatus,
|
|
7
27
|
ZLinkObjectRole,
|
|
8
28
|
type ZLinkActorLocation,
|
|
29
|
+
type ZLinkActorLocationFilter,
|
|
30
|
+
type ZLinkActorLocationKey,
|
|
9
31
|
type ZLinkAggregateAbortResult,
|
|
10
32
|
type ZLinkAggregateCommitResult,
|
|
11
33
|
type ZLinkAggregateFence,
|
|
@@ -18,22 +40,18 @@ import {
|
|
|
18
40
|
type ZLinkAuthorityScanCursor,
|
|
19
41
|
type ZLinkAuthorityScanResult,
|
|
20
42
|
type ZLinkAuthorityStoreVersion,
|
|
21
|
-
type
|
|
22
|
-
type
|
|
43
|
+
type ZLinkClientServerServerDescriptor,
|
|
44
|
+
type ZLinkClientServerServerDescriptorKey,
|
|
45
|
+
type ZLinkCreationOperationIdentity,
|
|
46
|
+
type ZLinkCreationTerminalReadResult,
|
|
47
|
+
type ZLinkFanoutPublisherDescriptor,
|
|
48
|
+
type ZLinkFanoutPublisherDescriptorKey,
|
|
23
49
|
type ZLinkLocationChangeStampScope,
|
|
24
50
|
type ZLinkLocationOwnerToken,
|
|
25
51
|
type ZLinkLocationPage,
|
|
26
52
|
type ZLinkLocationWriteResult,
|
|
27
53
|
type ZLinkMeshNodeDescriptor,
|
|
28
54
|
type ZLinkMeshNodeDescriptorKey,
|
|
29
|
-
type ZLinkClientServerServerDescriptor,
|
|
30
|
-
type ZLinkClientServerServerDescriptorKey,
|
|
31
|
-
type ZLinkFanoutPublisherDescriptor,
|
|
32
|
-
type ZLinkFanoutPublisherDescriptorKey,
|
|
33
|
-
type ZLinkOwnerLeaseClaimResult,
|
|
34
|
-
type ZLinkOwnerLeaseReadResult,
|
|
35
|
-
type ZLinkOwnerLeaseReleaseResult,
|
|
36
|
-
type ZLinkOwnerLeaseRenewResult,
|
|
37
55
|
type ZLinkObjectAbortRequest,
|
|
38
56
|
type ZLinkObjectAbortResult,
|
|
39
57
|
type ZLinkObjectCommitRequest,
|
|
@@ -42,8 +60,10 @@ import {
|
|
|
42
60
|
type ZLinkObjectCreationCompleteResult,
|
|
43
61
|
type ZLinkObjectReserveRequest,
|
|
44
62
|
type ZLinkObjectReserveResult,
|
|
45
|
-
type
|
|
46
|
-
type
|
|
63
|
+
type ZLinkOwnerLeaseClaimResult,
|
|
64
|
+
type ZLinkOwnerLeaseReadResult,
|
|
65
|
+
type ZLinkOwnerLeaseReleaseResult,
|
|
66
|
+
type ZLinkOwnerLeaseRenewResult,
|
|
47
67
|
type ZLinkPageRequest,
|
|
48
68
|
type ZLinkPeerLocation,
|
|
49
69
|
type ZLinkPeerLocationFilter,
|
|
@@ -55,23 +75,11 @@ import {
|
|
|
55
75
|
type ZLinkSpotLocationFilter,
|
|
56
76
|
type ZLinkSpotLocationKey
|
|
57
77
|
} from './internal-location-contracts';
|
|
58
|
-
import type {
|
|
59
|
-
ZLinkActorTransferPrepareRequest,
|
|
60
|
-
ZLinkActorTransferRecord,
|
|
61
|
-
ZLinkActorTransferState,
|
|
62
|
-
ZLinkActorTransferWriteResult
|
|
63
|
-
} from '../../contracts/Locations/ActorTransfer';
|
|
64
78
|
import type { ZLinkFanoutLocationStore } from './internal-store-contracts';
|
|
65
|
-
import type { ZLinkDomainLocationStore } from './domain-store-contract';
|
|
66
|
-
import { ZLinkInMemoryAuthorityStore } from './in-memory-authority-store';
|
|
67
|
-
import { encodeAuthorityKey } from './authority-key-codec';
|
|
68
79
|
import { ZLinkLocationKeyCodec } from './key-codec';
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
matchesRouteLocation,
|
|
73
|
-
matchesSpotLocation
|
|
74
|
-
} from '../../location-store-integration';
|
|
80
|
+
const MAX_LOCATION_GENERATION = 0x7fff_ffff_ffff_ffffn;
|
|
81
|
+
|
|
82
|
+
const MAX_DESCRIPTOR_OBJECT_CAPABILITIES = 1024;
|
|
75
83
|
|
|
76
84
|
export class ZLinkInMemoryLocationStore
|
|
77
85
|
implements ZLinkDomainLocationStore, ZLinkFanoutLocationStore
|
|
@@ -955,7 +963,7 @@ export class ZLinkInMemoryLocationStore
|
|
|
955
963
|
if (current !== undefined && current.leaseExpiresAt.getTime() > storeNow.getTime()) {
|
|
956
964
|
return { kind: 'conflict' };
|
|
957
965
|
}
|
|
958
|
-
if (this.ownerLeaseGeneration >=
|
|
966
|
+
if (this.ownerLeaseGeneration >= MAX_LOCATION_GENERATION) {
|
|
959
967
|
return { kind: 'generationExhausted' };
|
|
960
968
|
}
|
|
961
969
|
const token = { ownerId, leaseGeneration: ++this.ownerLeaseGeneration };
|
|
@@ -1282,12 +1290,14 @@ function validateMeshNodeDescriptor(descriptor: ZLinkMeshNodeDescriptor): void {
|
|
|
1282
1290
|
}
|
|
1283
1291
|
if (descriptor.objectRole === ZLinkObjectRole.Server) {
|
|
1284
1292
|
if (descriptor.entrySpotId !== undefined && !validDescriptorText(descriptor.entrySpotId)) {
|
|
1285
|
-
throw new TypeError(
|
|
1293
|
+
throw new TypeError(
|
|
1294
|
+
`MeshNode Entry Spot ID must contain 1..${ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`
|
|
1295
|
+
);
|
|
1286
1296
|
}
|
|
1287
1297
|
} else if (descriptor.entrySpotId !== undefined) {
|
|
1288
1298
|
throw new TypeError('Only Object Server descriptors may publish an Entry Spot ID.');
|
|
1289
1299
|
}
|
|
1290
|
-
const maxGeneration =
|
|
1300
|
+
const maxGeneration = MAX_LOCATION_GENERATION;
|
|
1291
1301
|
if (
|
|
1292
1302
|
descriptor.lifecycleGeneration < 1n ||
|
|
1293
1303
|
descriptor.lifecycleGeneration > maxGeneration ||
|
|
@@ -1320,9 +1330,8 @@ function validateMeshNodeDescriptor(descriptor: ZLinkMeshNodeDescriptor): void {
|
|
|
1320
1330
|
!Number.isSafeInteger(descriptor.activationConcurrency.limit) ||
|
|
1321
1331
|
descriptor.activationConcurrency.limit < 1 ||
|
|
1322
1332
|
descriptor.activationConcurrency.active > descriptor.activationConcurrency.limit ||
|
|
1323
|
-
descriptor.placementWeight
|
|
1324
|
-
descriptor.
|
|
1325
|
-
descriptor.objectCapabilities.length > 1024 ||
|
|
1333
|
+
!isValidPublicWeight(descriptor.placementWeight) ||
|
|
1334
|
+
descriptor.objectCapabilities.length > MAX_DESCRIPTOR_OBJECT_CAPABILITIES ||
|
|
1326
1335
|
(descriptor.objectRole !== ZLinkObjectRole.Server && descriptor.objectCapabilities.length !== 0)
|
|
1327
1336
|
) {
|
|
1328
1337
|
throw new RangeError('MeshNode object capacity is invalid.');
|
|
@@ -1350,7 +1359,7 @@ function validateMeshNodeDescriptor(descriptor: ZLinkMeshNodeDescriptor): void {
|
|
|
1350
1359
|
|
|
1351
1360
|
function validDescriptorText(value: string): boolean {
|
|
1352
1361
|
const size = Buffer.byteLength(value, 'utf8');
|
|
1353
|
-
return size >= 1 && size <=
|
|
1362
|
+
return size >= 1 && size <= ZLINK_MAX_IDENTITY_TEXT_BYTES && !value.includes('\0');
|
|
1354
1363
|
}
|
|
1355
1364
|
|
|
1356
1365
|
function meshNodeImmutableFingerprint(descriptor: ZLinkMeshNodeDescriptor): string {
|
|
@@ -1436,7 +1445,7 @@ function validateClientServerDescriptor(descriptor: ZLinkClientServerServerDescr
|
|
|
1436
1445
|
) {
|
|
1437
1446
|
throw new TypeError('ClientServer descriptor identity and endpoint are required.');
|
|
1438
1447
|
}
|
|
1439
|
-
const maxGeneration =
|
|
1448
|
+
const maxGeneration = MAX_LOCATION_GENERATION;
|
|
1440
1449
|
if (
|
|
1441
1450
|
descriptor.lifecycleGeneration < 1n ||
|
|
1442
1451
|
descriptor.lifecycleGeneration > maxGeneration ||
|
|
@@ -1447,8 +1456,10 @@ function validateClientServerDescriptor(descriptor: ZLinkClientServerServerDescr
|
|
|
1447
1456
|
) {
|
|
1448
1457
|
throw new RangeError('ClientServer descriptor generations are invalid.');
|
|
1449
1458
|
}
|
|
1450
|
-
if (!
|
|
1451
|
-
throw new RangeError(
|
|
1459
|
+
if (!isValidPublicWeight(descriptor.weight)) {
|
|
1460
|
+
throw new RangeError(
|
|
1461
|
+
`ClientServer descriptor weight must be an integer in 0..${ZLINK_MAX_PUBLIC_WEIGHT}.`
|
|
1462
|
+
);
|
|
1452
1463
|
}
|
|
1453
1464
|
}
|
|
1454
1465
|
|
|
@@ -1483,7 +1494,7 @@ function validateFanoutPublisherDescriptor(descriptor: ZLinkFanoutPublisherDescr
|
|
|
1483
1494
|
) {
|
|
1484
1495
|
throw new TypeError('Fanout publisher descriptor identity and endpoint are required.');
|
|
1485
1496
|
}
|
|
1486
|
-
const maxGeneration =
|
|
1497
|
+
const maxGeneration = MAX_LOCATION_GENERATION;
|
|
1487
1498
|
if (
|
|
1488
1499
|
descriptor.lifecycleGeneration < 1n ||
|
|
1489
1500
|
descriptor.lifecycleGeneration > maxGeneration ||
|
|
@@ -9,6 +9,17 @@ import type {
|
|
|
9
9
|
ZLinkStoreWriteRequest,
|
|
10
10
|
ZLinkStoreWriteResult
|
|
11
11
|
} from '../../contracts';
|
|
12
|
+
import {
|
|
13
|
+
ZLINK_PROVIDER_MAX_KEY_BYTES,
|
|
14
|
+
ZLINK_PROVIDER_MAX_ENCODED_PAGE_BYTES,
|
|
15
|
+
ZLINK_PROVIDER_MAX_PAGE_SIZE,
|
|
16
|
+
ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES,
|
|
17
|
+
ZLINK_PROVIDER_MAX_VALUE_BYTES,
|
|
18
|
+
ZLINK_PROVIDER_MAX_VERSION_BYTES,
|
|
19
|
+
ZLINK_PROVIDER_MAX_WRITE_BYTES,
|
|
20
|
+
ZLINK_PROVIDER_MAX_WRITE_KEYS
|
|
21
|
+
} from '../../contracts/Locations/Stores';
|
|
22
|
+
export const PROVIDER_STORAGE_NAMESPACE_PREFIX = 'zlink:v11:';
|
|
12
23
|
|
|
13
24
|
interface StoredValue {
|
|
14
25
|
readonly bytes: Uint8Array;
|
|
@@ -59,6 +70,13 @@ export class ZLinkInMemoryProviderLocationStore implements ZLinkLocationStore {
|
|
|
59
70
|
const current = this.liveValue(condition.key.value, storeNow);
|
|
60
71
|
if (condition.kind === 'missing') {
|
|
61
72
|
if (current !== undefined) return { kind: 'conflict', storeNow };
|
|
73
|
+
} else if (condition.kind === 'value') {
|
|
74
|
+
if (
|
|
75
|
+
current === undefined ||
|
|
76
|
+
!Buffer.from(current.bytes).equals(Buffer.from(condition.expected))
|
|
77
|
+
) {
|
|
78
|
+
return { kind: 'conflict', storeNow };
|
|
79
|
+
}
|
|
62
80
|
} else if (current?.version.value !== condition.expected.value) {
|
|
63
81
|
return { kind: 'conflict', storeNow };
|
|
64
82
|
}
|
|
@@ -70,7 +88,8 @@ export class ZLinkInMemoryProviderLocationStore implements ZLinkLocationStore {
|
|
|
70
88
|
this.values.delete(mutation.key.value);
|
|
71
89
|
continue;
|
|
72
90
|
}
|
|
73
|
-
const retentionMs =
|
|
91
|
+
const retentionMs =
|
|
92
|
+
mutation.retentionMs === undefined ? undefined : Math.ceil(mutation.retentionMs);
|
|
74
93
|
const version = storeVersion((++this.nextVersion).toString());
|
|
75
94
|
const expiresAt =
|
|
76
95
|
retentionMs === undefined ? undefined : new Date(storeNow.getTime() + retentionMs);
|
|
@@ -103,13 +122,26 @@ export class ZLinkInMemoryProviderLocationStore implements ZLinkLocationStore {
|
|
|
103
122
|
};
|
|
104
123
|
this.scans.set(snapshotId, snapshot);
|
|
105
124
|
} else {
|
|
106
|
-
|
|
125
|
+
const cursor = parseCursor(request.cursor);
|
|
126
|
+
snapshotId = cursor?.[0] ?? '';
|
|
127
|
+
offset = cursor?.[1] ?? 0;
|
|
107
128
|
snapshot = this.scans.get(snapshotId);
|
|
108
|
-
if (snapshot === undefined) return { kind: 'expired' };
|
|
129
|
+
if (snapshot === undefined || offset > snapshot.items.length) return { kind: 'expired' };
|
|
109
130
|
}
|
|
110
131
|
|
|
111
|
-
|
|
112
|
-
|
|
132
|
+
let nextOffset = offset;
|
|
133
|
+
let encodedBytes = 0;
|
|
134
|
+
while (nextOffset < snapshot.items.length && nextOffset - offset < request.limit) {
|
|
135
|
+
const item = snapshot.items[nextOffset];
|
|
136
|
+
const itemBytes =
|
|
137
|
+
Buffer.byteLength(item.key.value, 'utf8') +
|
|
138
|
+
Buffer.byteLength(item.value.version.value, 'utf8') +
|
|
139
|
+
item.value.bytes.byteLength;
|
|
140
|
+
if (encodedBytes + itemBytes > ZLINK_PROVIDER_MAX_ENCODED_PAGE_BYTES) break;
|
|
141
|
+
encodedBytes += itemBytes;
|
|
142
|
+
nextOffset += 1;
|
|
143
|
+
}
|
|
144
|
+
const selected = snapshot.items.slice(offset, nextOffset);
|
|
113
145
|
const nextCursor =
|
|
114
146
|
nextOffset < snapshot.items.length ? scanCursor(`${snapshotId}:${nextOffset}`) : undefined;
|
|
115
147
|
if (nextCursor === undefined) this.scans.delete(snapshotId);
|
|
@@ -153,12 +185,13 @@ function scanCursor(value: string): ZLinkStoreScanCursor {
|
|
|
153
185
|
return { value } as ZLinkStoreScanCursor;
|
|
154
186
|
}
|
|
155
187
|
|
|
156
|
-
function parseCursor(cursor: ZLinkStoreScanCursor): [string, number] {
|
|
188
|
+
function parseCursor(cursor: ZLinkStoreScanCursor): [string, number] | undefined {
|
|
157
189
|
const separator = cursor.value.indexOf(':');
|
|
158
190
|
const snapshotId = cursor.value.slice(0, separator);
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
191
|
+
const encodedOffset = cursor.value.slice(separator + 1);
|
|
192
|
+
const offset = Number(encodedOffset);
|
|
193
|
+
if (separator < 1 || !/^(0|[1-9][0-9]*)$/.test(encodedOffset) || !Number.isSafeInteger(offset)) {
|
|
194
|
+
return undefined;
|
|
162
195
|
}
|
|
163
196
|
return [snapshotId, offset];
|
|
164
197
|
}
|
|
@@ -170,32 +203,72 @@ function requireWriteRequest(request: ZLinkStoreWriteRequest): void {
|
|
|
170
203
|
if (
|
|
171
204
|
new Set(conditionKeys).size !== conditionKeys.length ||
|
|
172
205
|
new Set(mutationKeys).size !== mutationKeys.length ||
|
|
173
|
-
keys.length >
|
|
206
|
+
keys.length > ZLINK_PROVIDER_MAX_WRITE_KEYS
|
|
174
207
|
) {
|
|
175
|
-
throw new RangeError(
|
|
208
|
+
throw new RangeError(
|
|
209
|
+
`Location Store write keys must be unique and bounded to ${ZLINK_PROVIDER_MAX_WRITE_KEYS.toLocaleString('en-US')}.`
|
|
210
|
+
);
|
|
176
211
|
}
|
|
177
212
|
for (const key of keys) requireKey(key);
|
|
178
|
-
const encodedSize =
|
|
179
|
-
(sum,
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
213
|
+
const encodedSize =
|
|
214
|
+
request.conditions.reduce((sum, condition) => {
|
|
215
|
+
const keyBytes = Buffer.byteLength(condition.key.value, 'utf8');
|
|
216
|
+
if (condition.kind === 'missing') return sum + keyBytes;
|
|
217
|
+
if (condition.kind === 'value') {
|
|
218
|
+
requireValue(condition.expected, undefined);
|
|
219
|
+
return sum + keyBytes + condition.expected.byteLength;
|
|
220
|
+
}
|
|
221
|
+
const versionBytes = Buffer.byteLength(condition.expected.value, 'utf8');
|
|
222
|
+
if (versionBytes < 1 || versionBytes > ZLINK_PROVIDER_MAX_VERSION_BYTES) {
|
|
223
|
+
throw new RangeError(
|
|
224
|
+
`Location Store version must contain 1..${ZLINK_PROVIDER_MAX_VERSION_BYTES.toLocaleString('en-US')} UTF-8 bytes.`
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
return sum + keyBytes + versionBytes;
|
|
228
|
+
}, 0) +
|
|
229
|
+
request.mutations.reduce((sum, mutation) => {
|
|
230
|
+
const keyBytes = Buffer.byteLength(mutation.key.value, 'utf8');
|
|
231
|
+
if (mutation.kind !== 'put') return sum + keyBytes;
|
|
232
|
+
requireValue(mutation.bytes, mutation.retentionMs);
|
|
233
|
+
return sum + keyBytes + mutation.bytes.byteLength;
|
|
234
|
+
}, 0);
|
|
235
|
+
if (encodedSize > ZLINK_PROVIDER_MAX_WRITE_BYTES) {
|
|
236
|
+
throw new RangeError(
|
|
237
|
+
`Location Store write exceeds ${ZLINK_PROVIDER_MAX_WRITE_BYTES / (1024 * 1024)} MiB.`
|
|
238
|
+
);
|
|
184
239
|
}
|
|
185
240
|
}
|
|
186
241
|
|
|
187
242
|
function requireScanRequest(request: ZLinkStoreScanRequest): void {
|
|
188
|
-
if (
|
|
189
|
-
|
|
243
|
+
if (request.cursor !== undefined) {
|
|
244
|
+
const bytes = Buffer.byteLength(request.cursor.value, 'utf8');
|
|
245
|
+
if (bytes < 1 || bytes > ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES) {
|
|
246
|
+
throw new RangeError(
|
|
247
|
+
`Location Store cursor must contain 1..${ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES.toLocaleString('en-US')} UTF-8 bytes.`
|
|
248
|
+
);
|
|
249
|
+
}
|
|
190
250
|
}
|
|
191
|
-
if (
|
|
192
|
-
throw new RangeError(
|
|
251
|
+
if (Buffer.byteLength(request.prefix, 'utf8') > ZLINK_PROVIDER_MAX_KEY_BYTES) {
|
|
252
|
+
throw new RangeError(
|
|
253
|
+
`Location Store scan prefix exceeds ${ZLINK_PROVIDER_MAX_KEY_BYTES.toLocaleString('en-US')} UTF-8 bytes.`
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
if (
|
|
257
|
+
!Number.isSafeInteger(request.limit) ||
|
|
258
|
+
request.limit < 1 ||
|
|
259
|
+
request.limit > ZLINK_PROVIDER_MAX_PAGE_SIZE
|
|
260
|
+
) {
|
|
261
|
+
throw new RangeError(
|
|
262
|
+
`Location Store scan limit must be in 1..${ZLINK_PROVIDER_MAX_PAGE_SIZE}.`
|
|
263
|
+
);
|
|
193
264
|
}
|
|
194
265
|
}
|
|
195
266
|
|
|
196
267
|
function requireValue(bytes: Uint8Array, retentionMs: number | undefined): number | undefined {
|
|
197
|
-
if (bytes.byteLength >
|
|
198
|
-
throw new RangeError(
|
|
268
|
+
if (bytes.byteLength > ZLINK_PROVIDER_MAX_VALUE_BYTES) {
|
|
269
|
+
throw new RangeError(
|
|
270
|
+
`Location Store value exceeds ${ZLINK_PROVIDER_MAX_VALUE_BYTES / (1024 * 1024)} MiB.`
|
|
271
|
+
);
|
|
199
272
|
}
|
|
200
273
|
if (
|
|
201
274
|
retentionMs !== undefined &&
|
|
@@ -210,7 +283,9 @@ function requireValue(bytes: Uint8Array, retentionMs: number | undefined): numbe
|
|
|
210
283
|
|
|
211
284
|
function requireKey(value: string): void {
|
|
212
285
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
213
|
-
if (bytes < 1 || bytes >
|
|
214
|
-
throw new RangeError(
|
|
286
|
+
if (bytes < 1 || bytes > ZLINK_PROVIDER_MAX_KEY_BYTES) {
|
|
287
|
+
throw new RangeError(
|
|
288
|
+
`Location Store key must contain 1..${ZLINK_PROVIDER_MAX_KEY_BYTES.toLocaleString('en-US')} UTF-8 bytes.`
|
|
289
|
+
);
|
|
215
290
|
}
|
|
216
291
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ZLINK_MAX_SPOT_ID_BYTES } from '../../contracts/Common/CoreTypes';
|
|
1
2
|
import type { RoutingId } from '../../contracts/Common';
|
|
2
3
|
import {
|
|
3
4
|
type ZLinkActorLocationKey,
|
|
@@ -49,8 +50,8 @@ function encodeSegments(...segments: readonly string[]): string {
|
|
|
49
50
|
|
|
50
51
|
function requireSpotId(value: string): string {
|
|
51
52
|
const bytes = Buffer.byteLength(value, 'utf8');
|
|
52
|
-
if (bytes < 1 || bytes >
|
|
53
|
-
throw new TypeError(
|
|
53
|
+
if (bytes < 1 || bytes > ZLINK_MAX_SPOT_ID_BYTES) {
|
|
54
|
+
throw new TypeError(`SpotId must contain 1..${ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
|
|
54
55
|
}
|
|
55
56
|
return value;
|
|
56
57
|
}
|
|
@@ -79,6 +79,10 @@ export class ZLinkOwnerLeaseTracker {
|
|
|
79
79
|
);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
async isOwnerTokenLive(owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<boolean> {
|
|
83
|
+
return (await this.remainingOwnerTokenLeaseMs(owner, signal)) > 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
82
86
|
async getLiveOwnerSetVersion(signal?: AbortSignal): Promise<number> {
|
|
83
87
|
const owners = await this.lane.run(() => [...this.snapshots.keys()]);
|
|
84
88
|
const refreshed = await Promise.all(owners.map((ownerId) => this.getSnapshot(ownerId, signal)));
|
|
@@ -187,17 +191,15 @@ export class ZLinkOwnerLeaseTracker {
|
|
|
187
191
|
}
|
|
188
192
|
|
|
189
193
|
export class ZLinkLiveRowFilter {
|
|
190
|
-
constructor(private readonly leaseTracker: ZLinkOwnerLeaseTracker) {}
|
|
191
|
-
|
|
192
194
|
async filter<TRow>(
|
|
193
195
|
rows: readonly TRow[],
|
|
194
|
-
|
|
196
|
+
isLive: (row: TRow, signal?: AbortSignal) => Promise<boolean>,
|
|
195
197
|
signal?: AbortSignal,
|
|
196
198
|
include?: (row: TRow) => boolean
|
|
197
199
|
): Promise<TRow[]> {
|
|
198
200
|
const live: TRow[] = [];
|
|
199
201
|
for (const row of rows) {
|
|
200
|
-
if ((include === undefined || include(row)) && (await
|
|
202
|
+
if ((include === undefined || include(row)) && (await isLive(row, signal))) {
|
|
201
203
|
live.push(row);
|
|
202
204
|
}
|
|
203
205
|
}
|
|
@@ -206,22 +208,14 @@ export class ZLinkLiveRowFilter {
|
|
|
206
208
|
|
|
207
209
|
async resolve<TRow>(
|
|
208
210
|
row: TRow | undefined,
|
|
209
|
-
|
|
211
|
+
isLive: (row: TRow, signal?: AbortSignal) => Promise<boolean>,
|
|
210
212
|
signal?: AbortSignal,
|
|
211
213
|
include?: (row: TRow) => boolean
|
|
212
214
|
): Promise<TRow | undefined> {
|
|
213
215
|
if (row === undefined || (include !== undefined && !include(row))) {
|
|
214
216
|
return undefined;
|
|
215
217
|
}
|
|
216
|
-
return (await
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
private async isLive<TRow>(
|
|
220
|
-
row: TRow,
|
|
221
|
-
ownerIdOf: (row: TRow) => string,
|
|
222
|
-
signal?: AbortSignal
|
|
223
|
-
): Promise<boolean> {
|
|
224
|
-
return await this.leaseTracker.isOwnerLive(ownerIdOf(row), signal);
|
|
218
|
+
return (await isLive(row, signal)) ? row : undefined;
|
|
225
219
|
}
|
|
226
220
|
}
|
|
227
221
|
|
|
@@ -1,33 +1,34 @@
|
|
|
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 {
|
|
6
4
|
ZLinkActorLocationClaims,
|
|
7
5
|
type ZLinkActorClaimActivation,
|
|
8
6
|
type ZLinkActorClaimResult
|
|
9
7
|
} from './actor-location-claims';
|
|
8
|
+
import { ZLinkActorSessionRouteClaims } from './actor-session-route-claims';
|
|
9
|
+
import type { ZLinkActorLocation, ZLinkLocationWriteStatus } from './internal-location-contracts';
|
|
10
|
+
import type {
|
|
11
|
+
ZLinkActorLocationStore,
|
|
12
|
+
ZLinkAuthorityStore,
|
|
13
|
+
ZLinkSpotLocationStore
|
|
14
|
+
} from './internal-store-contracts';
|
|
15
|
+
import type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
|
|
16
|
+
import {
|
|
17
|
+
type ZLinkInstanceClosingAuthority,
|
|
18
|
+
type ZLinkTrackedInstanceAuthority,
|
|
19
|
+
ZLinkSpotLocationClaims
|
|
20
|
+
} from './spot-location-claims';
|
|
10
21
|
export {
|
|
11
22
|
ZLinkActorClaimStatus,
|
|
12
23
|
type ZLinkActorClaimActivation,
|
|
13
24
|
type ZLinkActorClaimResult
|
|
14
25
|
} from './actor-location-claims';
|
|
15
|
-
import { ZLinkActorSessionRouteClaims } from './actor-session-route-claims';
|
|
16
|
-
import { ZLinkSpotLocationClaims } from './spot-location-claims';
|
|
17
|
-
import type {
|
|
18
|
-
ZLinkInstanceClosingAuthority,
|
|
19
|
-
ZLinkTrackedInstanceAuthority
|
|
20
|
-
} from './spot-location-claims';
|
|
21
|
-
import type { ZLinkAuthorityStore } from './internal-store-contracts';
|
|
22
|
-
import type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
|
|
23
26
|
export type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
|
|
24
27
|
|
|
25
28
|
export class ZLinkLocationLifecycle {
|
|
26
29
|
private readonly actorClaims: ZLinkActorLocationClaims;
|
|
27
|
-
private readonly actorCleanupTasks = new Map<string, Promise<void>>();
|
|
28
30
|
private readonly spotClaims: ZLinkSpotLocationClaims;
|
|
29
31
|
private readonly actorSessionRoutes: ZLinkActorSessionRouteClaims;
|
|
30
|
-
private disposed = false;
|
|
31
32
|
private readonly ownershipLostHandler = (event: ZLinkOwnershipLostEvent) =>
|
|
32
33
|
this.onOwnershipLost(event);
|
|
33
34
|
|
|
@@ -56,7 +57,6 @@ export class ZLinkLocationLifecycle {
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
dispose(): void {
|
|
59
|
-
this.disposed = true;
|
|
60
60
|
this.runtime.removeOwnershipLostHandler(this.ownershipLostHandler);
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -160,18 +160,6 @@ export class ZLinkLocationLifecycle {
|
|
|
160
160
|
await this.actorClaims.release(actorType, actorId, actorRef);
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
-
releaseActorEventually(actorType: string, actorId: string): Promise<void> {
|
|
164
|
-
const existing = this.actorCleanupTasks.get(actorId);
|
|
165
|
-
if (existing !== undefined) {
|
|
166
|
-
return existing;
|
|
167
|
-
}
|
|
168
|
-
const cleanup = this.retryActorRelease(actorType, actorId).finally(() =>
|
|
169
|
-
this.actorCleanupTasks.delete(actorId)
|
|
170
|
-
);
|
|
171
|
-
this.actorCleanupTasks.set(actorId, cleanup);
|
|
172
|
-
return cleanup;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
163
|
ownsActor(actorType: string, actorId: string): boolean {
|
|
176
164
|
return this.actorClaims.owns(actorType, actorId);
|
|
177
165
|
}
|
|
@@ -180,20 +168,6 @@ export class ZLinkLocationLifecycle {
|
|
|
180
168
|
return this.actorClaims.snapshot(actorId);
|
|
181
169
|
}
|
|
182
170
|
|
|
183
|
-
private async retryActorRelease(actorType: string, actorId: string): Promise<void> {
|
|
184
|
-
let retryDelayMs = 50;
|
|
185
|
-
while (!this.disposed) {
|
|
186
|
-
try {
|
|
187
|
-
await this.actorClaims.release(actorType, actorId);
|
|
188
|
-
return;
|
|
189
|
-
} catch {
|
|
190
|
-
await waitForRetry(retryDelayMs);
|
|
191
|
-
retryDelayMs = Math.min(retryDelayMs * 2, 1_000);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
171
|
async claimSpot(
|
|
198
172
|
meshName: string,
|
|
199
173
|
spotId: RoutingId,
|
|
@@ -272,7 +246,3 @@ function inferSpotStore(actorStore: ZLinkActorLocationStore): ZLinkSpotLocationS
|
|
|
272
246
|
}
|
|
273
247
|
return undefined;
|
|
274
248
|
}
|
|
275
|
-
|
|
276
|
-
function waitForRetry(delayMs: number): Promise<void> {
|
|
277
|
-
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
278
|
-
}
|