@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
|
@@ -8,7 +8,15 @@ exports.decodeServiceClosingSpotAuthority = decodeServiceClosingSpotAuthority;
|
|
|
8
8
|
exports.decodeServiceInstanceAuthorityPayload = decodeServiceInstanceAuthorityPayload;
|
|
9
9
|
exports.rewriteServiceAuthorityOwner = rewriteServiceAuthorityOwner;
|
|
10
10
|
exports.rewriteServiceAuthorityRoute = rewriteServiceAuthorityRoute;
|
|
11
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
12
|
+
const contracts_1 = require("../../contracts");
|
|
13
|
+
const actor_join_recovery_codec_1 = require("./actor-join-recovery-codec");
|
|
11
14
|
const service_relocation_runtime_1 = require("./service-relocation-runtime");
|
|
15
|
+
const service_wire_binary_primitives_1 = require("./service-wire-binary-primitives");
|
|
16
|
+
const SPOT_AUTHORITY_OBJECT_KIND = 2;
|
|
17
|
+
const USER_SPOT_WIRE_KIND = (0, contracts_1.zlinkSpotKindToWire)(contracts_1.ZLinkSpotKind.User);
|
|
18
|
+
const INSTANCE_SPOT_WIRE_KIND = (0, contracts_1.zlinkSpotKindToWire)(contracts_1.ZLinkSpotKind.Instance);
|
|
19
|
+
const AUTHORITY_TEXT16_MAX_BYTES = 0xffff;
|
|
12
20
|
const AUTHORITY_MAGIC = Buffer.from([0x5a, 0x4c, 0x41, 0x55]);
|
|
13
21
|
const AUTHORITY_FORMAT_VERSION = 1;
|
|
14
22
|
const AUTHORITY_FLAGS = 0;
|
|
@@ -171,7 +179,7 @@ function decodeSpotAuthority(payload) {
|
|
|
171
179
|
const operationKind = body.u8();
|
|
172
180
|
const objectKind = body.u8();
|
|
173
181
|
const object = body.takeReader(body.u16());
|
|
174
|
-
if (objectKind !==
|
|
182
|
+
if (objectKind !== SPOT_AUTHORITY_OBJECT_KIND)
|
|
175
183
|
return undefined;
|
|
176
184
|
const spotKind = object.u8();
|
|
177
185
|
const spot = object.takeReader(object.u16());
|
|
@@ -181,13 +189,13 @@ function decodeSpotAuthority(payload) {
|
|
|
181
189
|
let state;
|
|
182
190
|
let stableType;
|
|
183
191
|
let spotId;
|
|
184
|
-
if (spotKind ===
|
|
192
|
+
if (spotKind === USER_SPOT_WIRE_KIND) {
|
|
185
193
|
kind = 'user_spot';
|
|
186
194
|
spotId = spot.rid();
|
|
187
195
|
stableType = spot.text8();
|
|
188
196
|
state = spot.u8();
|
|
189
197
|
}
|
|
190
|
-
else if (spotKind ===
|
|
198
|
+
else if (spotKind === INSTANCE_SPOT_WIRE_KIND) {
|
|
191
199
|
kind = 'instance_spot';
|
|
192
200
|
state = spot.u8();
|
|
193
201
|
const instance = spot.takeReader(spot.u16());
|
|
@@ -279,21 +287,23 @@ function rid(value, name) {
|
|
|
279
287
|
}
|
|
280
288
|
function text16(value, name) {
|
|
281
289
|
const bytes = Buffer.from(value);
|
|
282
|
-
if (bytes.byteLength < 1 || bytes.byteLength >
|
|
283
|
-
throw new RangeError(`${name} must contain 1
|
|
290
|
+
if (bytes.byteLength < 1 || bytes.byteLength > AUTHORITY_TEXT16_MAX_BYTES || bytes.includes(0)) {
|
|
291
|
+
throw new RangeError(`${name} must contain 1..${AUTHORITY_TEXT16_MAX_BYTES} UTF-8 bytes without NUL.`);
|
|
284
292
|
}
|
|
285
293
|
return concat(u16(bytes.byteLength), bytes);
|
|
286
294
|
}
|
|
287
295
|
function sha256(value) {
|
|
288
|
-
if (value.byteLength !==
|
|
289
|
-
throw new RangeError(
|
|
296
|
+
if (value.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES) {
|
|
297
|
+
throw new RangeError(`activationRecovery.sha256 must contain exactly ${actor_join_recovery_codec_1.SHA256_DIGEST_BYTES} bytes.`);
|
|
290
298
|
}
|
|
291
|
-
return concat(Buffer.of(
|
|
299
|
+
return concat(Buffer.of(actor_join_recovery_codec_1.SHA256_DIGEST_BYTES), value);
|
|
292
300
|
}
|
|
293
301
|
function sized8(value, name) {
|
|
294
302
|
const bytes = Buffer.from(value);
|
|
295
|
-
if (bytes.byteLength < 1 ||
|
|
296
|
-
|
|
303
|
+
if (bytes.byteLength < 1 ||
|
|
304
|
+
bytes.byteLength > service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES ||
|
|
305
|
+
bytes.includes(0)) {
|
|
306
|
+
throw new RangeError(`${name} must contain 1..${service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES} UTF-8 bytes without NUL.`);
|
|
297
307
|
}
|
|
298
308
|
return concat(Buffer.of(bytes.byteLength), bytes);
|
|
299
309
|
}
|
|
@@ -314,7 +324,7 @@ function boundedU32(value, name) {
|
|
|
314
324
|
return u32(value);
|
|
315
325
|
}
|
|
316
326
|
function u64(value, name) {
|
|
317
|
-
if (value <= 0n || value >
|
|
327
|
+
if (value <= 0n || value > stream_wire_1.UINT64_MAX) {
|
|
318
328
|
throw new RangeError(`${name} must be a non-zero u64.`);
|
|
319
329
|
}
|
|
320
330
|
const result = Buffer.alloc(8);
|
|
@@ -322,7 +332,7 @@ function u64(value, name) {
|
|
|
322
332
|
return result;
|
|
323
333
|
}
|
|
324
334
|
function ordinalU64(value, name) {
|
|
325
|
-
if (value < 0n || value >
|
|
335
|
+
if (value < 0n || value > stream_wire_1.UINT64_MAX) {
|
|
326
336
|
throw new RangeError(`${name} must be a u64.`);
|
|
327
337
|
}
|
|
328
338
|
const result = Buffer.alloc(8);
|
|
@@ -23,6 +23,9 @@ export interface SelectedClientServer {
|
|
|
23
23
|
}
|
|
24
24
|
/** Dedicated discovery state; fanout publishers never reuse RouteMesh peer rows. */
|
|
25
25
|
export declare class ServiceDiscoveryRegistry {
|
|
26
|
+
private readonly clientServerChanged;
|
|
27
|
+
onClientServerChanged(listener: (error?: Error) => void): () => void;
|
|
28
|
+
dispose(error: Error): void;
|
|
26
29
|
private readonly clientServers;
|
|
27
30
|
private readonly fanoutPublishers;
|
|
28
31
|
private readonly clientServerSelections;
|
|
@@ -32,6 +35,7 @@ export declare class ServiceDiscoveryRegistry {
|
|
|
32
35
|
selectClientServer(channelName: string): ClientServerDescriptor | undefined;
|
|
33
36
|
selectClientServerConnection(channelName: string): SelectedClientServer | undefined;
|
|
34
37
|
private selectClientServerConnectionCore;
|
|
38
|
+
hasReadyClientServer(channelName: string): boolean;
|
|
35
39
|
clientServerDescriptors(channelName: string): readonly ClientServerDescriptor[];
|
|
36
40
|
admitFanoutPublisher(descriptor: FanoutPublisherDescriptor, connectionId: string): boolean;
|
|
37
41
|
removeFanoutPublisher(channelName: string, publisherRoutingId: string, connectionId: string): boolean;
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceDiscoveryRegistry = void 0;
|
|
4
|
+
const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
|
|
5
|
+
const service_weighted_selection_1 = require("./service-weighted-selection");
|
|
4
6
|
/** Dedicated discovery state; fanout publishers never reuse RouteMesh peer rows. */
|
|
5
7
|
class ServiceDiscoveryRegistry {
|
|
8
|
+
clientServerChanged = new Set();
|
|
9
|
+
onClientServerChanged(listener) {
|
|
10
|
+
this.clientServerChanged.add(listener);
|
|
11
|
+
return () => {
|
|
12
|
+
this.clientServerChanged.delete(listener);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
dispose(error) {
|
|
16
|
+
for (const listener of this.clientServerChanged)
|
|
17
|
+
listener(error);
|
|
18
|
+
this.clientServerChanged.clear();
|
|
19
|
+
}
|
|
6
20
|
clientServers = new Map();
|
|
7
21
|
fanoutPublishers = new Map();
|
|
8
22
|
clientServerSelections = new Map();
|
|
@@ -56,6 +70,10 @@ class ServiceDiscoveryRegistry {
|
|
|
56
70
|
}
|
|
57
71
|
return selection.select();
|
|
58
72
|
}
|
|
73
|
+
hasReadyClientServer(channelName) {
|
|
74
|
+
return [...this.clientServers.values()].some(({ descriptor }) => descriptor.channelName === channelName &&
|
|
75
|
+
(descriptor.state === 'serving' || descriptor.state === 'retiring'));
|
|
76
|
+
}
|
|
59
77
|
clientServerDescriptors(channelName) {
|
|
60
78
|
return [...this.clientServers.values()]
|
|
61
79
|
.map((value) => value.descriptor)
|
|
@@ -94,6 +112,8 @@ class ServiceDiscoveryRegistry {
|
|
|
94
112
|
if (this.clientServerSelections.has(channelName)) {
|
|
95
113
|
this.clientServerSelections.get(channelName).rebuild();
|
|
96
114
|
}
|
|
115
|
+
for (const listener of this.clientServerChanged)
|
|
116
|
+
listener();
|
|
97
117
|
}
|
|
98
118
|
clientServerCandidates(channelName) {
|
|
99
119
|
return [...this.clientServers.values()]
|
|
@@ -150,8 +170,8 @@ function validateClientServer(descriptor) {
|
|
|
150
170
|
requireText(descriptor.securityIdentity, 'securityIdentity');
|
|
151
171
|
requireText(descriptor.advertisedEndpoint, 'advertisedEndpoint');
|
|
152
172
|
validateRevision(descriptor.lifecycleGeneration, descriptor.descriptorRevision);
|
|
153
|
-
if (!
|
|
154
|
-
throw new RangeError(
|
|
173
|
+
if (!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(descriptor.weight)) {
|
|
174
|
+
throw new RangeError(`ClientServer weight must be an integer in 0..${RegistrationBuilderPolicy_1.ZLINK_MAX_PUBLIC_WEIGHT}.`);
|
|
155
175
|
}
|
|
156
176
|
if (!Number.isSafeInteger(descriptor.effectiveMaxMessageBytes) ||
|
|
157
177
|
descriptor.effectiveMaxMessageBytes < 1) {
|
|
@@ -174,4 +194,3 @@ function requireText(value, field) {
|
|
|
174
194
|
throw new TypeError(`${field} must be non-empty text without NUL.`);
|
|
175
195
|
}
|
|
176
196
|
}
|
|
177
|
-
const service_weighted_selection_1 = require("./service-weighted-selection");
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.encodeInstanceActivationRecoveryEnvelope = encodeInstanceActivationRecoveryEnvelope;
|
|
4
4
|
exports.decodeInstanceActivationRecoveryEnvelope = decodeInstanceActivationRecoveryEnvelope;
|
|
5
|
+
const service_wire_binary_primitives_1 = require("./service-wire-binary-primitives");
|
|
6
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
5
7
|
const service_relocation_runtime_1 = require("./service-relocation-runtime");
|
|
6
8
|
const service_wire_m6a_codec_1 = require("./service-wire-m6a-codec");
|
|
7
9
|
const service_metadata_codec_1 = require("./service-metadata-codec");
|
|
@@ -175,8 +177,10 @@ function requireOperation(value) {
|
|
|
175
177
|
}
|
|
176
178
|
function textBytes(value, name) {
|
|
177
179
|
const bytes = Buffer.from(value, 'utf8');
|
|
178
|
-
if (bytes.byteLength < 1 ||
|
|
179
|
-
|
|
180
|
+
if (bytes.byteLength < 1 ||
|
|
181
|
+
bytes.byteLength > service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES ||
|
|
182
|
+
bytes.includes(0)) {
|
|
183
|
+
throw new RangeError(`${name} must contain 1..${service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES} UTF-8 bytes without NUL.`);
|
|
180
184
|
}
|
|
181
185
|
return bytes;
|
|
182
186
|
}
|
|
@@ -189,12 +193,12 @@ function writeText8(target, offset, value) {
|
|
|
189
193
|
return offset + 1 + value.byteLength;
|
|
190
194
|
}
|
|
191
195
|
function validatePositiveU64(value, name) {
|
|
192
|
-
if (value <= 0n || value >
|
|
196
|
+
if (value <= 0n || value > stream_wire_1.UINT64_MAX) {
|
|
193
197
|
throw new RangeError(`${name} is out of range.`);
|
|
194
198
|
}
|
|
195
199
|
}
|
|
196
200
|
function validateU64(value, name) {
|
|
197
|
-
if (value < 0n || value >
|
|
201
|
+
if (value < 0n || value > stream_wire_1.UINT64_MAX) {
|
|
198
202
|
throw new RangeError(`${name} is out of range.`);
|
|
199
203
|
}
|
|
200
204
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceLivenessRegistry = exports.DEFAULT_SERVICE_PEER_TIMEOUT_MS = exports.DEFAULT_SERVICE_PROBE_INTERVAL_MS = void 0;
|
|
4
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
4
5
|
exports.DEFAULT_SERVICE_PROBE_INTERVAL_MS = 5_000;
|
|
5
6
|
exports.DEFAULT_SERVICE_PEER_TIMEOUT_MS = 15_000;
|
|
6
7
|
/** Uses monotonic milliseconds and never treats application traffic as a probe ACK. */
|
|
@@ -101,7 +102,7 @@ class ServiceLivenessRegistry {
|
|
|
101
102
|
}
|
|
102
103
|
allocateProbeId() {
|
|
103
104
|
const result = this.nextProbeId++;
|
|
104
|
-
if (this.nextProbeId >
|
|
105
|
+
if (this.nextProbeId > stream_wire_1.UINT64_MAX)
|
|
105
106
|
this.nextProbeId = 1n;
|
|
106
107
|
return result;
|
|
107
108
|
}
|
|
@@ -42,4 +42,3 @@ export declare class ServiceMaintenanceRuntime {
|
|
|
42
42
|
private publishCore;
|
|
43
43
|
private notify;
|
|
44
44
|
}
|
|
45
|
-
export declare function classifyRelocationRecovery(publishedReference: boolean, payloadPresent: boolean, checksumMatches: boolean, inventoryMatches: boolean): 'resume' | 'orphan' | 'relocationDataLost';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceMaintenanceRuntime = void 0;
|
|
4
|
-
exports.classifyRelocationRecovery = classifyRelocationRecovery;
|
|
5
4
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
6
5
|
const state_lane_1 = require("../execution/state-lane");
|
|
7
6
|
const detachedStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:service-maintenance-runtime');
|
|
@@ -210,8 +209,3 @@ exports.ServiceMaintenanceRuntime = ServiceMaintenanceRuntime;
|
|
|
210
209
|
function startOutsideStateLane(work) {
|
|
211
210
|
return detachedStateLaneResource.runInAsyncScope(work);
|
|
212
211
|
}
|
|
213
|
-
function classifyRelocationRecovery(publishedReference, payloadPresent, checksumMatches, inventoryMatches) {
|
|
214
|
-
if (!publishedReference)
|
|
215
|
-
return payloadPresent ? 'orphan' : 'resume';
|
|
216
|
-
return payloadPresent && checksumMatches && inventoryMatches ? 'resume' : 'relocationDataLost';
|
|
217
|
-
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.encodeServiceMetadataFrame = encodeServiceMetadataFrame;
|
|
4
4
|
exports.validateServiceMetadataFrame = validateServiceMetadataFrame;
|
|
5
|
-
const
|
|
5
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
6
6
|
const FATAL_UTF8 = new TextDecoder('utf-8', { fatal: true });
|
|
7
7
|
function encodeServiceMetadataFrame(entries) {
|
|
8
8
|
if (entries.size > 0xff) {
|
|
@@ -19,8 +19,8 @@ function encodeServiceMetadataFrame(entries) {
|
|
|
19
19
|
return validateServiceMetadataFrame(Buffer.concat(encoded));
|
|
20
20
|
}
|
|
21
21
|
function validateServiceMetadataFrame(frame) {
|
|
22
|
-
if (frame.byteLength >
|
|
23
|
-
throw new RangeError(
|
|
22
|
+
if (frame.byteLength > stream_wire_1.ZLINK_STREAM_MAX_METADATA_BYTES) {
|
|
23
|
+
throw new RangeError(`Application metadata frame exceeds ${stream_wire_1.ZLINK_STREAM_MAX_METADATA_BYTES} bytes.`);
|
|
24
24
|
}
|
|
25
25
|
const bytes = Buffer.from(frame);
|
|
26
26
|
let offset = 0;
|
|
@@ -20,16 +20,13 @@ export interface ServicePreparedRelocationAggregate {
|
|
|
20
20
|
readonly fence: ZLinkAggregateFence;
|
|
21
21
|
readonly plan: ServiceRelocationAggregatePlan;
|
|
22
22
|
}
|
|
23
|
-
type AggregateStore = Pick<ZLinkObjectCreationStore, 'prepareAggregate' | '
|
|
24
|
-
/**
|
|
23
|
+
type AggregateStore = Pick<ZLinkObjectCreationStore, 'prepareAggregate' | 'abortAggregate'> & Pick<ZLinkAuthorityStore, 'readAuthority'>;
|
|
24
|
+
/** Prepares and aborts relocation through one Location Store fence. */
|
|
25
25
|
export declare class ServiceRelocationAggregateCommitter {
|
|
26
26
|
private readonly store;
|
|
27
27
|
constructor(store: AggregateStore);
|
|
28
28
|
prepare(plan: ServiceRelocationAggregatePlan, signal?: AbortSignal): Promise<ServicePreparedRelocationAggregate>;
|
|
29
29
|
private authorityStoreVersionsUnchanged;
|
|
30
|
-
commit(prepared: ServicePreparedRelocationAggregate, signal?: AbortSignal): Promise<ReadonlyMap<string, ZLinkAuthoritySnapshot>>;
|
|
31
30
|
abort(prepared: ServicePreparedRelocationAggregate, signal?: AbortSignal): Promise<void>;
|
|
32
|
-
private commitFence;
|
|
33
|
-
private readCommittedParticipants;
|
|
34
31
|
}
|
|
35
32
|
export {};
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ServiceRelocationAggregateCommitter = void 0;
|
|
4
4
|
const service_relocation_runtime_1 = require("./service-relocation-runtime");
|
|
5
5
|
const MAX_PREPARE_CONFLICT_ATTEMPTS = 8;
|
|
6
|
-
/**
|
|
6
|
+
/** Prepares and aborts relocation through one Location Store fence. */
|
|
7
7
|
class ServiceRelocationAggregateCommitter {
|
|
8
8
|
store;
|
|
9
9
|
constructor(store) {
|
|
@@ -52,59 +52,12 @@ class ServiceRelocationAggregateCommitter {
|
|
|
52
52
|
}
|
|
53
53
|
return true;
|
|
54
54
|
}
|
|
55
|
-
async commit(prepared, signal) {
|
|
56
|
-
try {
|
|
57
|
-
await this.commitFence(prepared.fence, signal);
|
|
58
|
-
}
|
|
59
|
-
catch (firstError) {
|
|
60
|
-
// A lost commit response is reconciled by repeating the exact durable fence.
|
|
61
|
-
try {
|
|
62
|
-
await this.commitFence(prepared.fence, signal);
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
throw firstError;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return await this.readCommittedParticipants(prepared.plan, signal);
|
|
69
|
-
}
|
|
70
55
|
async abort(prepared, signal) {
|
|
71
56
|
const result = await this.store.abortAggregate(prepared.fence, signal);
|
|
72
57
|
if (result.kind !== 'aborted' && result.kind !== 'alreadyAborted') {
|
|
73
58
|
throw new Error(`Location Store rejected relocation aggregate abort: ${result.kind}.`);
|
|
74
59
|
}
|
|
75
60
|
}
|
|
76
|
-
async commitFence(fence, signal) {
|
|
77
|
-
const result = await this.store.commitAggregate(fence, signal);
|
|
78
|
-
if (result.kind !== 'committed' && result.kind !== 'alreadyCommitted') {
|
|
79
|
-
throw new Error(`Location Store rejected relocation aggregate commit: ${result.kind}.`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
async readCommittedParticipants(plan, signal) {
|
|
83
|
-
const committed = new Map();
|
|
84
|
-
for (const participant of plan.participants) {
|
|
85
|
-
const current = await this.store.readAuthority(participant.key, signal);
|
|
86
|
-
if (current.kind !== 'snapshot' ||
|
|
87
|
-
current.objectGeneration !== participant.expected.objectGeneration ||
|
|
88
|
-
current.storeVersion.value === participant.expected.storeVersion.value ||
|
|
89
|
-
!Buffer.from(current.payload).equals(Buffer.from(participant.authorityPayload))) {
|
|
90
|
-
throw new Error('Committed relocation aggregate does not match its exact participant plan.');
|
|
91
|
-
}
|
|
92
|
-
if (participant.ownerTransition === 'newOwner') {
|
|
93
|
-
if (current.ownerId !== plan.targetOwner.ownerId ||
|
|
94
|
-
current.ownerLeaseGeneration !== plan.targetOwner.leaseGeneration ||
|
|
95
|
-
current.authorityOwnerGeneration <= participant.expected.authorityOwnerGeneration) {
|
|
96
|
-
throw new Error('Committed relocation participant has a different owner fence.');
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else if (current.ownerId !== participant.expected.ownerId ||
|
|
100
|
-
current.ownerLeaseGeneration !== participant.expected.ownerLeaseGeneration ||
|
|
101
|
-
current.authorityOwnerGeneration !== participant.expected.authorityOwnerGeneration) {
|
|
102
|
-
throw new Error('Preserved relocation participant changed its owner fence.');
|
|
103
|
-
}
|
|
104
|
-
committed.set(participant.key.value, current);
|
|
105
|
-
}
|
|
106
|
-
return committed;
|
|
107
|
-
}
|
|
108
61
|
}
|
|
109
62
|
exports.ServiceRelocationAggregateCommitter = ServiceRelocationAggregateCommitter;
|
|
110
63
|
function validateAndEncodeParticipants(plan) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceRelocationObjectRestoreOwner = exports.ServiceRelocationObjectCaptureOwner = exports.ServiceCapturedObjectRelocation = void 0;
|
|
4
|
+
const DEFAULT_RELOCATION_CALLBACK_CONCURRENCY = 8;
|
|
4
5
|
class ServiceCapturedObjectRelocation {
|
|
5
6
|
envelope;
|
|
6
7
|
units;
|
|
@@ -56,7 +57,7 @@ exports.ServiceCapturedObjectRelocation = ServiceCapturedObjectRelocation;
|
|
|
56
57
|
/** Captures the two valid relocation units: User Spot aggregate or one Actor. */
|
|
57
58
|
class ServiceRelocationObjectCaptureOwner {
|
|
58
59
|
maxConcurrentCallbacks;
|
|
59
|
-
constructor(maxConcurrentCallbacks =
|
|
60
|
+
constructor(maxConcurrentCallbacks = DEFAULT_RELOCATION_CALLBACK_CONCURRENCY) {
|
|
60
61
|
this.maxConcurrentCallbacks = maxConcurrentCallbacks;
|
|
61
62
|
requireCallbackConcurrency(maxConcurrentCallbacks);
|
|
62
63
|
}
|
|
@@ -127,7 +128,7 @@ class ServiceRelocationObjectRestoreOwner {
|
|
|
127
128
|
target;
|
|
128
129
|
authorityKey;
|
|
129
130
|
maxConcurrentCallbacks;
|
|
130
|
-
constructor(target, authorityKey, maxConcurrentCallbacks =
|
|
131
|
+
constructor(target, authorityKey, maxConcurrentCallbacks = DEFAULT_RELOCATION_CALLBACK_CONCURRENCY) {
|
|
131
132
|
this.target = target;
|
|
132
133
|
this.authorityKey = authorityKey;
|
|
133
134
|
this.maxConcurrentCallbacks = maxConcurrentCallbacks;
|
|
@@ -11,9 +11,18 @@ exports.encodeServiceRelocationEnvelope = encodeServiceRelocationEnvelope;
|
|
|
11
11
|
exports.decodeServiceRelocationEnvelope = decodeServiceRelocationEnvelope;
|
|
12
12
|
exports.inventoryDigest = inventoryDigest;
|
|
13
13
|
exports.crc32c = crc32c;
|
|
14
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
14
15
|
const node_crypto_1 = require("node:crypto");
|
|
16
|
+
const InternalDefaults_1 = require("../../contracts/Configuration/InternalDefaults");
|
|
15
17
|
const authority_key_codec_1 = require("../locations/authority-key-codec");
|
|
18
|
+
const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
|
|
16
19
|
const service_wire_pilot_codec_generated_1 = require("../protocol/service_wire_pilot_codec.generated");
|
|
20
|
+
const actor_join_recovery_codec_1 = require("./actor-join-recovery-codec");
|
|
21
|
+
const MAX_RELOCATION_GENERATION = 0x7fffffffffffffffn;
|
|
22
|
+
const RELOCATION_PREPARING_PHASE = (0, service_wire_codec_generated_1.enumWireRelocationPhase)('preparing');
|
|
23
|
+
const RELOCATION_ACTIVATING_PHASE = (0, service_wire_codec_generated_1.enumWireRelocationPhase)('activating');
|
|
24
|
+
const RELOCATION_COMPLETED_PHASE = (0, service_wire_codec_generated_1.enumWireRelocationPhase)('completed');
|
|
25
|
+
const RELOCATION_LAST_PHASE = (0, service_wire_codec_generated_1.enumWireRelocationPhase)('aborted');
|
|
17
26
|
/** Deterministic Location authority wrapper for one immutable relocation root. */
|
|
18
27
|
class ServiceRelocationAuthorityPayloadCodec {
|
|
19
28
|
publish(currentPayload, publication) {
|
|
@@ -109,7 +118,7 @@ function projectServiceRelocationAuthorityTargetReady(payload, target) {
|
|
|
109
118
|
coordinatorNodeRid: target.nodeRid,
|
|
110
119
|
coordinatorNodeGeneration: target.nodeGeneration,
|
|
111
120
|
coordinatorExpectedStoreVersion: target.coordinatorExpectedStoreVersion,
|
|
112
|
-
phase:
|
|
121
|
+
phase: RELOCATION_ACTIVATING_PHASE,
|
|
113
122
|
sourceCleanupState: 0
|
|
114
123
|
});
|
|
115
124
|
return replaceCanonicalRelocationSlot(layout, slot);
|
|
@@ -150,7 +159,7 @@ function decodeCanonicalAuthorityPublication(payload) {
|
|
|
150
159
|
function decodeCanonicalAuthorityLayout(payload) {
|
|
151
160
|
try {
|
|
152
161
|
const bytes = Buffer.from(payload);
|
|
153
|
-
if (bytes.byteLength < 20 || bytes.byteLength >
|
|
162
|
+
if (bytes.byteLength < 20 || bytes.byteLength > InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES)
|
|
154
163
|
return undefined;
|
|
155
164
|
const reader = new CanonicalReader(bytes);
|
|
156
165
|
reader.expect(Buffer.from('ZLAU'));
|
|
@@ -223,21 +232,21 @@ function decodeCanonicalRelocationSlot(payload, rootAggregateGeneration) {
|
|
|
223
232
|
const sourceCleanupState = reader.u8();
|
|
224
233
|
if (!reader.done ||
|
|
225
234
|
aggregateGeneration > 0x7ffffffffffffffen ||
|
|
226
|
-
(aggregateGeneration === 0n && phase !==
|
|
235
|
+
(aggregateGeneration === 0n && phase !== RELOCATION_PREPARING_PHASE) ||
|
|
227
236
|
(rootAggregateGeneration !== undefined && aggregateGeneration !== rootAggregateGeneration) ||
|
|
228
|
-
targetAttemptGeneration >
|
|
237
|
+
targetAttemptGeneration > MAX_RELOCATION_GENERATION ||
|
|
229
238
|
sourceNodeGeneration === 0n ||
|
|
230
|
-
sourceNodeGeneration >
|
|
239
|
+
sourceNodeGeneration > MAX_RELOCATION_GENERATION ||
|
|
231
240
|
sourceOwnerLeaseGeneration === 0n ||
|
|
232
|
-
sourceOwnerLeaseGeneration >
|
|
233
|
-
targetNodeGeneration >
|
|
234
|
-
targetOwnerLeaseGeneration >
|
|
241
|
+
sourceOwnerLeaseGeneration > MAX_RELOCATION_GENERATION ||
|
|
242
|
+
targetNodeGeneration > MAX_RELOCATION_GENERATION ||
|
|
243
|
+
targetOwnerLeaseGeneration > MAX_RELOCATION_GENERATION ||
|
|
235
244
|
coordinatorLeaseGeneration === 0n ||
|
|
236
|
-
coordinatorLeaseGeneration >
|
|
245
|
+
coordinatorLeaseGeneration > MAX_RELOCATION_GENERATION ||
|
|
237
246
|
coordinatorNodeGeneration === 0n ||
|
|
238
|
-
coordinatorNodeGeneration >
|
|
239
|
-
phase <
|
|
240
|
-
phase >
|
|
247
|
+
coordinatorNodeGeneration > MAX_RELOCATION_GENERATION ||
|
|
248
|
+
phase < RELOCATION_PREPARING_PHASE ||
|
|
249
|
+
phase > RELOCATION_LAST_PHASE ||
|
|
241
250
|
applicationVersion < 0n ||
|
|
242
251
|
sourceCleanupState > 2)
|
|
243
252
|
return undefined;
|
|
@@ -276,10 +285,10 @@ function encodeCanonicalRelocationSlot(value) {
|
|
|
276
285
|
if (aggregateGeneration > 0x7ffffffffffffffen) {
|
|
277
286
|
throw new TypeError('Aggregate generation exceeds the issued range.');
|
|
278
287
|
}
|
|
279
|
-
if (aggregateGeneration === 0n && value.phase !==
|
|
288
|
+
if (aggregateGeneration === 0n && value.phase !== RELOCATION_PREPARING_PHASE) {
|
|
280
289
|
throw new TypeError('Zero aggregate generation is only valid while preparing.');
|
|
281
290
|
}
|
|
282
|
-
if (targetAttemptGeneration >
|
|
291
|
+
if (targetAttemptGeneration > MAX_RELOCATION_GENERATION) {
|
|
283
292
|
throw new TypeError('Target attempt generation exceeds the ordinal range.');
|
|
284
293
|
}
|
|
285
294
|
const sourceNodeGeneration = canonicalNonZeroOrdinal(value.sourceNodeGeneration, 'source node generation');
|
|
@@ -288,7 +297,9 @@ function encodeCanonicalRelocationSlot(value) {
|
|
|
288
297
|
const targetOwnerLeaseGeneration = canonicalOrdinal(value.targetOwnerLeaseGeneration, 'target owner lease generation');
|
|
289
298
|
const coordinatorLeaseGeneration = canonicalNonZeroOrdinal(value.coordinatorLeaseGeneration, 'coordinator lease generation');
|
|
290
299
|
const coordinatorNodeGeneration = canonicalNonZeroOrdinal(value.coordinatorNodeGeneration, 'coordinator node generation');
|
|
291
|
-
if (!Number.isInteger(value.phase) ||
|
|
300
|
+
if (!Number.isInteger(value.phase) ||
|
|
301
|
+
value.phase < RELOCATION_PREPARING_PHASE ||
|
|
302
|
+
value.phase > RELOCATION_LAST_PHASE) {
|
|
292
303
|
throw new TypeError('Canonical relocation phase is invalid.');
|
|
293
304
|
}
|
|
294
305
|
if (!Number.isInteger(value.sourceCleanupState) ||
|
|
@@ -348,7 +359,7 @@ function encodeCanonicalRelocationPublicationSlot(layout, publication) {
|
|
|
348
359
|
coordinatorNodeRid: publication.coordinatorNodeRid ?? nodeRid,
|
|
349
360
|
coordinatorNodeGeneration: publication.coordinatorNodeGeneration ?? layout.nodeGeneration,
|
|
350
361
|
coordinatorExpectedStoreVersion: publication.coordinatorExpectedStoreVersion ?? '',
|
|
351
|
-
phase: publication.canonicalPhase ??
|
|
362
|
+
phase: publication.canonicalPhase ?? RELOCATION_COMPLETED_PHASE,
|
|
352
363
|
applicationVersion,
|
|
353
364
|
sourceCleanupState: publication.canonicalSourceCleanupState ?? 0
|
|
354
365
|
});
|
|
@@ -370,8 +381,8 @@ function replaceCanonicalRelocationSlot(layout, slot) {
|
|
|
370
381
|
body
|
|
371
382
|
]);
|
|
372
383
|
const result = Buffer.concat([envelope, canonicalU32(crc32c(envelope))]);
|
|
373
|
-
if (result.byteLength >
|
|
374
|
-
throw new TypeError(
|
|
384
|
+
if (result.byteLength > InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
385
|
+
throw new TypeError(`Canonical authority payload exceeds ${InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`);
|
|
375
386
|
}
|
|
376
387
|
return result;
|
|
377
388
|
}
|
|
@@ -721,8 +732,8 @@ function encodeAuthorityEnvelope(base, publication) {
|
|
|
721
732
|
}
|
|
722
733
|
const aggregateGeneration = positiveBigInt(publication.aggregateGeneration, 'aggregate generation');
|
|
723
734
|
const targetOwnerLeaseGeneration = positiveBigInt(publication.targetOwnerLeaseGeneration, 'target owner lease generation');
|
|
724
|
-
if (aggregateGeneration >
|
|
725
|
-
targetOwnerLeaseGeneration >
|
|
735
|
+
if (aggregateGeneration > MAX_RELOCATION_GENERATION ||
|
|
736
|
+
targetOwnerLeaseGeneration > MAX_RELOCATION_GENERATION) {
|
|
726
737
|
throw new TypeError('Relocation publication generations must fit signed 64-bit storage.');
|
|
727
738
|
}
|
|
728
739
|
const payload = Buffer.concat([
|
|
@@ -738,8 +749,8 @@ function encodeAuthorityEnvelope(base, publication) {
|
|
|
738
749
|
i64le(targetOwnerLeaseGeneration),
|
|
739
750
|
bytes32le(base)
|
|
740
751
|
]);
|
|
741
|
-
if (payload.byteLength >
|
|
742
|
-
throw new TypeError(
|
|
752
|
+
if (payload.byteLength > InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
753
|
+
throw new TypeError(`Location authority relocation payload exceeds ${InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`);
|
|
743
754
|
}
|
|
744
755
|
return payload;
|
|
745
756
|
}
|
|
@@ -759,8 +770,8 @@ function decodeAuthorityEnvelope(payload) {
|
|
|
759
770
|
const base = reader.bytes32();
|
|
760
771
|
if (!reader.done ||
|
|
761
772
|
aggregateGeneration === 0n ||
|
|
762
|
-
aggregateGeneration >
|
|
763
|
-
inventoryDigestBytes.byteLength !==
|
|
773
|
+
aggregateGeneration > MAX_RELOCATION_GENERATION ||
|
|
774
|
+
inventoryDigestBytes.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES ||
|
|
764
775
|
targetOwnerLeaseGeneration <= 0n) {
|
|
765
776
|
return undefined;
|
|
766
777
|
}
|
|
@@ -852,8 +863,8 @@ function text16le(value) {
|
|
|
852
863
|
}
|
|
853
864
|
function bytes32le(value) {
|
|
854
865
|
const bytes = Buffer.from(value);
|
|
855
|
-
if (bytes.byteLength >
|
|
856
|
-
throw new TypeError(
|
|
866
|
+
if (bytes.byteLength > InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
867
|
+
throw new TypeError(`Relocation byte field exceeds ${InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`);
|
|
857
868
|
}
|
|
858
869
|
const length = Buffer.alloc(4);
|
|
859
870
|
length.writeInt32LE(bytes.byteLength);
|
|
@@ -1001,7 +1012,7 @@ function canonicalU32(value) {
|
|
|
1001
1012
|
return result;
|
|
1002
1013
|
}
|
|
1003
1014
|
function canonicalU64(value) {
|
|
1004
|
-
if (value < 0n || value >
|
|
1015
|
+
if (value < 0n || value > stream_wire_1.UINT64_MAX) {
|
|
1005
1016
|
throw new TypeError('Canonical authority u64 is invalid.');
|
|
1006
1017
|
}
|
|
1007
1018
|
const result = Buffer.alloc(8);
|
|
@@ -1010,7 +1021,7 @@ function canonicalU64(value) {
|
|
|
1010
1021
|
}
|
|
1011
1022
|
function canonicalOrdinal(value, name) {
|
|
1012
1023
|
const ordinal = nonNegativeBigInt(value, name);
|
|
1013
|
-
if (ordinal >
|
|
1024
|
+
if (ordinal > MAX_RELOCATION_GENERATION) {
|
|
1014
1025
|
throw new TypeError(`${name} exceeds the ordinal range.`);
|
|
1015
1026
|
}
|
|
1016
1027
|
return ordinal;
|
|
@@ -1022,7 +1033,7 @@ function canonicalNonZeroOrdinal(value, name) {
|
|
|
1022
1033
|
return ordinal;
|
|
1023
1034
|
}
|
|
1024
1035
|
function canonicalI64(value) {
|
|
1025
|
-
if (value < 0n || value >
|
|
1036
|
+
if (value < 0n || value > MAX_RELOCATION_GENERATION) {
|
|
1026
1037
|
throw new TypeError('Canonical authority i64 is invalid.');
|
|
1027
1038
|
}
|
|
1028
1039
|
const result = Buffer.alloc(8);
|
|
@@ -1034,8 +1045,8 @@ class DotnetBinaryReader {
|
|
|
1034
1045
|
offset = 0;
|
|
1035
1046
|
constructor(payload) {
|
|
1036
1047
|
this.bytes = Buffer.from(payload);
|
|
1037
|
-
if (this.bytes.byteLength >
|
|
1038
|
-
throw new TypeError(
|
|
1048
|
+
if (this.bytes.byteLength > InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
1049
|
+
throw new TypeError(`Location authority relocation payload exceeds ${InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`);
|
|
1039
1050
|
}
|
|
1040
1051
|
}
|
|
1041
1052
|
get done() {
|
|
@@ -1066,7 +1077,7 @@ class DotnetBinaryReader {
|
|
|
1066
1077
|
}
|
|
1067
1078
|
bytes32() {
|
|
1068
1079
|
const length = this.take(4).readInt32LE(0);
|
|
1069
|
-
if (length < 0 || length >
|
|
1080
|
+
if (length < 0 || length > InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
1070
1081
|
throw new TypeError('Location authority relocation byte field is invalid.');
|
|
1071
1082
|
}
|
|
1072
1083
|
return Buffer.from(this.take(length));
|