@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,12 +1,16 @@
|
|
|
1
1
|
import type { Type, ZLinkSpot } from '../../contracts';
|
|
2
|
+
import { zlinkDefaultLocationOptions } from '../Locations';
|
|
2
3
|
import { ZLinkConfigurationException } from './ConfigurationException';
|
|
4
|
+
import { requirePublicFanoutTopic } from './FanoutTopic';
|
|
5
|
+
import { RELOCATION_STATE_CHUNK_DATA_MAX_BYTES } from './InternalDefaults';
|
|
6
|
+
import { requirePublicWeight } from './RegistrationBuilderPolicy';
|
|
3
7
|
import { requirePositiveInteger } from './RegistrationNormalizers';
|
|
4
8
|
import type {
|
|
5
9
|
ZLinkFrameworkRegistration,
|
|
6
10
|
ZLinkFrameworkRegistrationOptions,
|
|
11
|
+
ZLinkMeshChannelOptions,
|
|
7
12
|
ZLinkRouteChannelOptions,
|
|
8
13
|
ZLinkRouteMeshChannelOptions,
|
|
9
|
-
ZLinkMeshChannelOptions,
|
|
10
14
|
ZLinkSpotNodeOptions,
|
|
11
15
|
ZLinkSpotPubSubCapabilityOptions,
|
|
12
16
|
ZLinkSpotRouterCapabilityOptions,
|
|
@@ -14,10 +18,9 @@ import type {
|
|
|
14
18
|
ZLinkWorkerOptions
|
|
15
19
|
} from './RegistrationTypes';
|
|
16
20
|
import { isRouteClientEnabled, isRouteTransportDeclared } from './RouteChannelInternalState';
|
|
17
|
-
import { validateTimerRegistration } from './TimerRegistrationValidator';
|
|
18
|
-
import { zlinkDefaultLocationOptions } from '../Locations';
|
|
19
21
|
import { requireValidSendTimeoutMs } from './SendTimeoutValidation';
|
|
20
|
-
import {
|
|
22
|
+
import { validateTimerRegistration } from './TimerRegistrationValidator';
|
|
23
|
+
const ROUTE_CACHE_FOLLOW_MARGIN_MS = 5000;
|
|
21
24
|
|
|
22
25
|
export function validateFrameworkRegistration(
|
|
23
26
|
registration: ZLinkFrameworkRegistration,
|
|
@@ -132,11 +135,12 @@ function validateLocationRegistration(registration: ZLinkFrameworkRegistration):
|
|
|
132
135
|
}
|
|
133
136
|
}
|
|
134
137
|
if (
|
|
135
|
-
options.ownerLeaseRenewIntervalMs
|
|
138
|
+
Math.max(options.ownerLeaseRenewIntervalMs, options.ownerLeaseRenewTimeoutMs) +
|
|
139
|
+
options.ownerLeaseRenewTimeoutMs >=
|
|
136
140
|
options.ownerLeaseTtlMs - options.ownerLeaseFencingMarginMs
|
|
137
141
|
) {
|
|
138
142
|
throw new ZLinkConfigurationException(
|
|
139
|
-
'ownerLeaseRenewIntervalMs + ownerLeaseRenewTimeoutMs must be less than ownerLeaseTtlMs - ownerLeaseFencingMarginMs.'
|
|
143
|
+
'max(ownerLeaseRenewIntervalMs, ownerLeaseRenewTimeoutMs) + ownerLeaseRenewTimeoutMs must be less than ownerLeaseTtlMs - ownerLeaseFencingMarginMs.'
|
|
140
144
|
);
|
|
141
145
|
}
|
|
142
146
|
for (const [name, value] of Object.entries({
|
|
@@ -147,9 +151,9 @@ function validateLocationRegistration(registration: ZLinkFrameworkRegistration):
|
|
|
147
151
|
throw new ZLinkConfigurationException(`${name} must be a positive integer.`);
|
|
148
152
|
}
|
|
149
153
|
}
|
|
150
|
-
if (options.relocationPayloadChunkLimitBytes >
|
|
154
|
+
if (options.relocationPayloadChunkLimitBytes > RELOCATION_STATE_CHUNK_DATA_MAX_BYTES) {
|
|
151
155
|
throw new ZLinkConfigurationException(
|
|
152
|
-
|
|
156
|
+
`relocationPayloadChunkLimitBytes must not exceed the ${RELOCATION_STATE_CHUNK_DATA_MAX_BYTES / (1024 * 1024)} MiB wire chunk bound.`
|
|
153
157
|
);
|
|
154
158
|
}
|
|
155
159
|
for (const [name, value] of Object.entries({
|
|
@@ -173,10 +177,10 @@ function validateLocationRegistration(registration: ZLinkFrameworkRegistration):
|
|
|
173
177
|
if (
|
|
174
178
|
options.routeCacheMaxAgeMs > 0 &&
|
|
175
179
|
options.messageFollowDurationMs > 0 &&
|
|
176
|
-
options.routeCacheMaxAgeMs > options.messageFollowDurationMs -
|
|
180
|
+
options.routeCacheMaxAgeMs > options.messageFollowDurationMs - ROUTE_CACHE_FOLLOW_MARGIN_MS
|
|
177
181
|
) {
|
|
178
182
|
throw new ZLinkConfigurationException(
|
|
179
|
-
|
|
183
|
+
`routeCacheMaxAgeMs must be at least ${ROUTE_CACHE_FOLLOW_MARGIN_MS} ms shorter than messageFollowDurationMs.`
|
|
180
184
|
);
|
|
181
185
|
}
|
|
182
186
|
}
|
|
@@ -232,6 +236,10 @@ function validateChannelCapabilities(
|
|
|
232
236
|
requireSocketOptions(`channel '${channelName}' server`, channel.server);
|
|
233
237
|
}
|
|
234
238
|
if (channel.publisher !== undefined) {
|
|
239
|
+
requireValidSendTimeoutMs(
|
|
240
|
+
`channel '${channelName}' publisher sendTimeoutMs`,
|
|
241
|
+
channel.publisher.sendTimeoutMs
|
|
242
|
+
);
|
|
235
243
|
requireEndpoint(`channel '${channelName}' publisher`, channel.publisher.bind);
|
|
236
244
|
validateListenerNetworkIdentity(
|
|
237
245
|
`channel '${channelName}' publisher`,
|
|
@@ -714,9 +722,7 @@ function requirePeerWeight(label: string, value: number | undefined): void {
|
|
|
714
722
|
if (value === undefined) {
|
|
715
723
|
return;
|
|
716
724
|
}
|
|
717
|
-
|
|
718
|
-
throw new ZLinkConfigurationException(`${label} must be an integer in 0..10000.`);
|
|
719
|
-
}
|
|
725
|
+
requirePublicWeight(value, label);
|
|
720
726
|
}
|
|
721
727
|
|
|
722
728
|
function requireSocketOptions(
|
|
@@ -724,14 +730,12 @@ function requireSocketOptions(
|
|
|
724
730
|
options: {
|
|
725
731
|
readonly sendHighWaterMark?: number;
|
|
726
732
|
readonly receiveHighWaterMark?: number;
|
|
727
|
-
readonly sendTimeoutMs?: number;
|
|
728
733
|
readonly maxMessageSize?: number;
|
|
729
734
|
}
|
|
730
735
|
): void {
|
|
731
736
|
requireNonNegativeInteger(`${label} sendHighWaterMark`, options.sendHighWaterMark);
|
|
732
737
|
requireNonNegativeInteger(`${label} receiveHighWaterMark`, options.receiveHighWaterMark);
|
|
733
738
|
requireNonNegativeInteger(`${label} maxMessageSize`, options.maxMessageSize);
|
|
734
|
-
requireValidSendTimeoutMs(`${label} sendTimeoutMs`, options.sendTimeoutMs);
|
|
735
739
|
}
|
|
736
740
|
|
|
737
741
|
function requireRouteMeshSocketOptions(
|
|
@@ -739,10 +743,8 @@ function requireRouteMeshSocketOptions(
|
|
|
739
743
|
options: {
|
|
740
744
|
readonly sendHighWaterMark?: number;
|
|
741
745
|
readonly receiveHighWaterMark?: number;
|
|
742
|
-
readonly sendTimeoutMs?: number;
|
|
743
746
|
}
|
|
744
747
|
): void {
|
|
745
748
|
requireNonNegativeInteger(`${label} sendHighWaterMark`, options.sendHighWaterMark);
|
|
746
749
|
requireNonNegativeInteger(`${label} receiveHighWaterMark`, options.receiveHighWaterMark);
|
|
747
|
-
requireValidSendTimeoutMs(`${label} sendTimeoutMs`, options.sendTimeoutMs);
|
|
748
750
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ZLinkTimerOverrunPolicy, type ZLinkTimerOptions } from '../Timers';
|
|
2
2
|
import { ZLinkConfigurationException } from './ConfigurationException';
|
|
3
3
|
|
|
4
|
+
const MAX_TIMER_CATCH_UP_TICKS = 2_147_483_647;
|
|
5
|
+
|
|
4
6
|
export function validateTimerRegistration(
|
|
5
7
|
name: string,
|
|
6
8
|
periodMs: number,
|
|
@@ -23,10 +25,10 @@ export function validateTimerRegistration(
|
|
|
23
25
|
(options.maxCatchUpTicks === undefined ||
|
|
24
26
|
!Number.isInteger(options.maxCatchUpTicks) ||
|
|
25
27
|
options.maxCatchUpTicks < 1 ||
|
|
26
|
-
options.maxCatchUpTicks >
|
|
28
|
+
options.maxCatchUpTicks > MAX_TIMER_CATCH_UP_TICKS)
|
|
27
29
|
) {
|
|
28
30
|
throw new ZLinkConfigurationException(
|
|
29
|
-
|
|
31
|
+
`SPOT timer MaxCatchUpTicks must be an integer from 1 through ${MAX_TIMER_CATCH_UP_TICKS.toLocaleString('en-US')}.`
|
|
30
32
|
);
|
|
31
33
|
}
|
|
32
34
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const MAX_CONTRACT_SCHEMA_DEPTH = 64;
|
|
2
|
+
|
|
1
3
|
/** Describes the fields accepted by the default framework-json-v1 serializer. */
|
|
2
4
|
export type ZLinkJsonSchema =
|
|
3
5
|
| { readonly type: 'boolean' }
|
|
@@ -75,9 +77,13 @@ function normalizeJsonSchema(
|
|
|
75
77
|
// Keep the runtime boundary defensive for JavaScript callers even though
|
|
76
78
|
// the TypeScript signature describes the accepted shape.
|
|
77
79
|
const runtimeSchema: unknown = schema;
|
|
78
|
-
if (
|
|
80
|
+
if (
|
|
81
|
+
typeof runtimeSchema !== 'object' ||
|
|
82
|
+
runtimeSchema === null ||
|
|
83
|
+
depth > MAX_CONTRACT_SCHEMA_DEPTH
|
|
84
|
+
) {
|
|
79
85
|
throw new TypeError(
|
|
80
|
-
|
|
86
|
+
`ZLink packet JSON schema must be an acyclic object with at most ${MAX_CONTRACT_SCHEMA_DEPTH} levels.`
|
|
81
87
|
);
|
|
82
88
|
}
|
|
83
89
|
const normalizedSchema = runtimeSchema as ZLinkJsonSchema;
|
|
@@ -147,7 +153,7 @@ function normalizeJsonSchema(
|
|
|
147
153
|
for (const [name, property] of Object.entries(
|
|
148
154
|
runtimeProperties as Record<string, ZLinkJsonSchema>
|
|
149
155
|
)) {
|
|
150
|
-
if (name
|
|
156
|
+
if (isPrototypeKey(name)) {
|
|
151
157
|
throw new TypeError(`ZLink packet JSON property '${name}' is not allowed.`);
|
|
152
158
|
}
|
|
153
159
|
properties[name] = normalizeJsonSchema(property, nextParents, depth + 1);
|
|
@@ -156,7 +162,7 @@ function normalizeJsonSchema(
|
|
|
156
162
|
throw new TypeError('ZLink packet JSON required properties must be unique.');
|
|
157
163
|
}
|
|
158
164
|
for (const name of normalizedSchema.required) {
|
|
159
|
-
if (name
|
|
165
|
+
if (isPrototypeKey(name)) {
|
|
160
166
|
throw new TypeError(`ZLink packet JSON property '${name}' is not allowed.`);
|
|
161
167
|
}
|
|
162
168
|
if (!Object.prototype.hasOwnProperty.call(properties, name)) {
|
|
@@ -204,3 +210,7 @@ function canonicalContract(value: unknown): string {
|
|
|
204
210
|
.map(([key, item]) => `${JSON.stringify(key)}:${canonicalContract(item)}`)
|
|
205
211
|
.join(',')}}`;
|
|
206
212
|
}
|
|
213
|
+
|
|
214
|
+
function isPrototypeKey(name: string): boolean {
|
|
215
|
+
return name === '__proto__' || name === 'prototype' || name === 'constructor';
|
|
216
|
+
}
|
|
@@ -70,7 +70,7 @@ export type ZLinkAuthorityMutation =
|
|
|
70
70
|
| {
|
|
71
71
|
readonly kind: 'put';
|
|
72
72
|
readonly payload: Uint8Array;
|
|
73
|
-
readonly generationTransition: 'preserve';
|
|
73
|
+
readonly generationTransition: 'preserve' | 'reincarnate';
|
|
74
74
|
}
|
|
75
75
|
| {
|
|
76
76
|
/** Rebinds an authority retained by the same owner after lease recovery. */
|
|
@@ -101,13 +101,17 @@ export interface ZLinkAuthorityEntry {
|
|
|
101
101
|
readonly snapshot: ZLinkAuthoritySnapshot;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
const ZLINK_AUTHORITY_MAX_SCAN_CURSOR_BYTES = 4096;
|
|
105
|
+
|
|
104
106
|
export class ZLinkAuthorityScanCursor {
|
|
105
107
|
private constructor(readonly encoded: string) {}
|
|
106
108
|
|
|
107
109
|
static from(encoded: string): ZLinkAuthorityScanCursor {
|
|
108
110
|
const byteLength = Buffer.byteLength(encoded, 'utf8');
|
|
109
|
-
if (byteLength < 1 || byteLength >
|
|
110
|
-
throw new RangeError(
|
|
111
|
+
if (byteLength < 1 || byteLength > ZLINK_AUTHORITY_MAX_SCAN_CURSOR_BYTES) {
|
|
112
|
+
throw new RangeError(
|
|
113
|
+
`Authority scan cursor must contain 1..${ZLINK_AUTHORITY_MAX_SCAN_CURSOR_BYTES} UTF-8 bytes.`
|
|
114
|
+
);
|
|
111
115
|
}
|
|
112
116
|
return new ZLinkAuthorityScanCursor(encoded);
|
|
113
117
|
}
|
|
@@ -26,7 +26,7 @@ export const zlinkRuntimeDefaultLocationOptions: Readonly<
|
|
|
26
26
|
ownerLeaseRenewIntervalMs: 5000,
|
|
27
27
|
ownerLeaseTtlMs: 15000,
|
|
28
28
|
pollingIntervalMs: 1000,
|
|
29
|
-
listPageSize:
|
|
29
|
+
listPageSize: 100,
|
|
30
30
|
storeFailureGraceMs: 30000,
|
|
31
31
|
ownerLeaseFencingMarginMs: 5000,
|
|
32
32
|
ownerLeaseRenewTimeoutMs: 3000,
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
export const ZLINK_PROVIDER_MAX_PAGE_SIZE = 1000;
|
|
2
|
+
export const ZLINK_PROVIDER_MAX_KEY_BYTES = 1024;
|
|
3
|
+
export const ZLINK_PROVIDER_MAX_VALUE_BYTES = 1024 * 1024;
|
|
4
|
+
export const ZLINK_PROVIDER_MAX_VERSION_BYTES = 4096;
|
|
5
|
+
export const ZLINK_PROVIDER_MAX_WRITE_KEYS = 2048;
|
|
6
|
+
export const ZLINK_PROVIDER_MAX_WRITE_BYTES = 4 * 1024 * 1024;
|
|
7
|
+
export const ZLINK_PROVIDER_MAX_ENCODED_PAGE_BYTES = 4 * 1024 * 1024;
|
|
8
|
+
export const ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES = 4096;
|
|
9
|
+
|
|
1
10
|
declare const zlinkStoreKeyBrand: unique symbol;
|
|
2
11
|
declare const zlinkStoreVersionBrand: unique symbol;
|
|
3
12
|
declare const zlinkStoreScanCursorBrand: unique symbol;
|
|
@@ -34,6 +43,11 @@ export type ZLinkStoreCondition =
|
|
|
34
43
|
readonly kind: 'version';
|
|
35
44
|
readonly key: ZLinkStoreKey;
|
|
36
45
|
readonly expected: ZLinkStoreVersion;
|
|
46
|
+
}
|
|
47
|
+
| {
|
|
48
|
+
readonly kind: 'value';
|
|
49
|
+
readonly key: ZLinkStoreKey;
|
|
50
|
+
readonly expected: Uint8Array;
|
|
37
51
|
};
|
|
38
52
|
|
|
39
53
|
export type ZLinkStoreMutation =
|
|
@@ -32,7 +32,7 @@ export interface ZLinkWorkerCall<T> {
|
|
|
32
32
|
export interface ZLinkSpotCommonContext<TSpot = ZLinkSpot> {
|
|
33
33
|
readonly meshName: string;
|
|
34
34
|
readonly spotId: SpotId;
|
|
35
|
-
readonly objectGeneration:
|
|
35
|
+
readonly objectGeneration: bigint;
|
|
36
36
|
readonly nodeRid: RoutingId;
|
|
37
37
|
readonly outbound: ZLinkSpotOutbound;
|
|
38
38
|
addTimer<THandler extends ZLinkSpotTimerHandler<TSpot>>(
|
|
@@ -96,7 +96,7 @@ export interface ZLinkSpotSendCall {
|
|
|
96
96
|
instanceSpot(): this;
|
|
97
97
|
instanceSpot(instanceSpotType: string): this;
|
|
98
98
|
inMesh(meshName: string): this;
|
|
99
|
-
submit(
|
|
99
|
+
submit(): Promise<void>;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
export interface ZLinkSpotRequestCall {
|
|
@@ -42,11 +42,10 @@ export interface ZLinkSessionClient {
|
|
|
42
42
|
export interface ZLinkSessionSendCall {
|
|
43
43
|
metadata(key: string, value: string): this;
|
|
44
44
|
compress(enabled?: boolean): this;
|
|
45
|
-
|
|
46
|
-
submit(signal?: AbortSignal): Promise<void>;
|
|
45
|
+
submit(): Promise<void>;
|
|
47
46
|
}
|
|
48
47
|
|
|
49
48
|
export interface ZLinkSessionReplyCall {
|
|
50
49
|
compress(enabled?: boolean): this;
|
|
51
|
-
submit(
|
|
50
|
+
submit(): Promise<void>;
|
|
52
51
|
}
|
|
@@ -11,11 +11,7 @@ export interface ZLinkSessionActors {
|
|
|
11
11
|
export interface ZLinkSessionActor {
|
|
12
12
|
readonly actorId: string;
|
|
13
13
|
readonly ref: ActorRef;
|
|
14
|
-
relay(payload: ZLinkMessage
|
|
15
|
-
relay(
|
|
16
|
-
dispatch: ZLinkSessionDispatchContext,
|
|
17
|
-
payload: ZLinkMessage,
|
|
18
|
-
signal?: AbortSignal
|
|
19
|
-
): Promise<void>;
|
|
14
|
+
relay(payload: ZLinkMessage): Promise<void>;
|
|
15
|
+
relay(dispatch: ZLinkSessionDispatchContext, payload: ZLinkMessage): Promise<void>;
|
|
20
16
|
notifyDisconnected(signal?: AbortSignal): Promise<void>;
|
|
21
17
|
}
|
package/src/internal.ts
CHANGED
|
@@ -29,3 +29,17 @@ export * from './runtime/foundation';
|
|
|
29
29
|
export * from './runtime/foundation/service-authority-payload-codec';
|
|
30
30
|
export * from './runtime/framework-errors-internal';
|
|
31
31
|
export * from './contracts/Configuration/Registration';
|
|
32
|
+
|
|
33
|
+
export * from './contracts/Locations/Stores';
|
|
34
|
+
export { ZLINK_RELOCATION_MAX_BLOB_REFERENCE_BYTES } from './contracts/Configuration/InternalDefaults';
|
|
35
|
+
export { ZLINK_MAX_STABLE_TYPE_BYTES } from './contracts/Common/CoreTypes';
|
|
36
|
+
export {
|
|
37
|
+
MAX_LISTENER_PORT,
|
|
38
|
+
ZLINK_MAX_PUBLIC_WEIGHT,
|
|
39
|
+
ZLINK_MAX_CAPACITY,
|
|
40
|
+
isValidPublicWeight,
|
|
41
|
+
isValidPositiveCapacity,
|
|
42
|
+
isValidListenerPort,
|
|
43
|
+
isValidCapacity,
|
|
44
|
+
requirePublicWeight
|
|
45
|
+
} from './contracts/Configuration/RegistrationBuilderPolicy';
|
package/src/nest-integration.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
export {
|
|
2
2
|
ZLinkConfigurationException,
|
|
3
3
|
createFrameworkRegistration,
|
|
4
|
+
normalizeFrameworkRegistration,
|
|
4
5
|
hasActorManager,
|
|
5
6
|
hasSpotNode,
|
|
6
7
|
hasSpotPublisherClient
|
|
7
8
|
} from './contracts/Configuration/Registration';
|
|
8
9
|
export type * from './contracts/Configuration/RegistrationTypes';
|
|
9
10
|
export type * from './contracts';
|
|
11
|
+
export { ZLinkSpotActorSend, ZLinkSpotActorRequest } from './contracts/Handlers/Attributes';
|
|
10
12
|
export {
|
|
11
13
|
registerActorFactory,
|
|
14
|
+
registerRelocationStore,
|
|
12
15
|
validateRoutingIdPrefix,
|
|
13
16
|
registerEntrySpot,
|
|
14
17
|
registerSpotFactory,
|
|
@@ -73,6 +76,10 @@ export {
|
|
|
73
76
|
registerHandlerFilterScope as registerIntegrationHandlerFilterScope,
|
|
74
77
|
type ZLinkHandlerFilterScopeRunner
|
|
75
78
|
} from './runtime/channels/handler-filter-scope';
|
|
79
|
+
export {
|
|
80
|
+
disposeOwnedInstance as disposeIntegrationHandler,
|
|
81
|
+
disposeOwnedInstances as disposeIntegrationHandlers
|
|
82
|
+
} from './runtime/handlers/handler-instance-scope';
|
|
76
83
|
|
|
77
84
|
export interface ZLinkNestIntegrationRuntimeHost extends Pick<
|
|
78
85
|
import('./contracts').ZLinkFrameworkRuntime,
|
|
@@ -134,7 +141,13 @@ export function createIntegrationChannelClient(
|
|
|
134
141
|
registration: ZLinkFrameworkRegistration,
|
|
135
142
|
runtime: ZLinkNestIntegrationRuntimeHost
|
|
136
143
|
): ZLinkChannelClient {
|
|
137
|
-
|
|
144
|
+
const host = runtimeHost(runtime);
|
|
145
|
+
return new DefaultZLinkChannelClient(
|
|
146
|
+
registration,
|
|
147
|
+
host.channelTransport,
|
|
148
|
+
host.routeTransport,
|
|
149
|
+
host.spotRouterChannelIdForMesh
|
|
150
|
+
);
|
|
138
151
|
}
|
|
139
152
|
|
|
140
153
|
export function createIntegrationFanoutClient(
|
|
@@ -152,7 +165,8 @@ export function createIntegrationRouteClient(
|
|
|
152
165
|
return new DefaultZLinkRouteClient(
|
|
153
166
|
registration,
|
|
154
167
|
host.routeTransport,
|
|
155
|
-
host.spotRouterChannelIdForMesh
|
|
168
|
+
host.spotRouterChannelIdForMesh,
|
|
169
|
+
host.channelTransport
|
|
156
170
|
);
|
|
157
171
|
}
|
|
158
172
|
|
|
@@ -180,14 +194,17 @@ export function createIntegrationActorManager(
|
|
|
180
194
|
): ZLinkActorManager {
|
|
181
195
|
const host = runtimeHost(runtime);
|
|
182
196
|
const runtimeOptions = host.createActorManagerOptions();
|
|
183
|
-
const manager = new DefaultZLinkActorManager(
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
197
|
+
const manager = new DefaultZLinkActorManager(
|
|
198
|
+
{
|
|
199
|
+
actorFactories: registration.actorFactories,
|
|
200
|
+
...runtimeOptions,
|
|
201
|
+
boundSessionFactory:
|
|
202
|
+
runtimeOptions.boundSessionFactory ??
|
|
203
|
+
host.boundSessionFactory.create.bind(host.boundSessionFactory),
|
|
204
|
+
providerResolver
|
|
205
|
+
},
|
|
206
|
+
host.detachedTaskRunner()
|
|
207
|
+
);
|
|
191
208
|
host.setActorManager(manager);
|
|
192
209
|
return manager;
|
|
193
210
|
}
|
|
@@ -229,6 +246,7 @@ export function createIntegrationSpotManager(
|
|
|
229
246
|
...(spotNode.spotActorRequestHandlers ?? [])
|
|
230
247
|
]),
|
|
231
248
|
...runtimeOptions,
|
|
249
|
+
detachedTaskRunner: host.detachedTaskRunner(),
|
|
232
250
|
spotRouteResolver: runtimeOptions.spotRouteResolver,
|
|
233
251
|
routedTransport: host.routeTransport,
|
|
234
252
|
providerResolver,
|
package/src/runtime/abort.ts
CHANGED
|
@@ -38,15 +38,15 @@ export function throwIfAborted(signal: AbortSignal | undefined): void {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
export function macrotaskBoundary(): Promise<void> {
|
|
42
|
+
return new Promise((resolve) => setImmediate(resolve));
|
|
43
|
+
}
|
|
44
|
+
|
|
41
45
|
export function awaitWithAbort<T>(
|
|
42
46
|
operation: Promise<T>,
|
|
43
47
|
signal: AbortSignal | undefined,
|
|
44
48
|
abortOperation?: () => void
|
|
45
49
|
): Promise<T> {
|
|
46
|
-
if (signal?.aborted === true) {
|
|
47
|
-
abortOperation?.();
|
|
48
|
-
throw createAbortError();
|
|
49
|
-
}
|
|
50
50
|
if (signal === undefined) {
|
|
51
51
|
return operation;
|
|
52
52
|
}
|
|
@@ -63,7 +63,6 @@ export function awaitWithAbort<T>(
|
|
|
63
63
|
abortOperation?.();
|
|
64
64
|
reject(createAbortError());
|
|
65
65
|
};
|
|
66
|
-
signal.addEventListener('abort', abort, { once: true });
|
|
67
66
|
operation.then(
|
|
68
67
|
(value) => {
|
|
69
68
|
if (settle()) resolve(value);
|
|
@@ -72,5 +71,7 @@ export function awaitWithAbort<T>(
|
|
|
72
71
|
if (settle()) reject(error);
|
|
73
72
|
}
|
|
74
73
|
);
|
|
74
|
+
if (signal.aborted) abort();
|
|
75
|
+
else signal.addEventListener('abort', abort, { once: true });
|
|
75
76
|
});
|
|
76
77
|
}
|
|
@@ -10,7 +10,6 @@ export interface ZLinkActivationConcurrency {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
interface ZLinkActivationRecord {
|
|
13
|
-
readonly meshName: string;
|
|
14
13
|
readonly limit: number;
|
|
15
14
|
active: number;
|
|
16
15
|
}
|
|
@@ -27,10 +26,7 @@ interface ZLinkActivationRecord {
|
|
|
27
26
|
export class ZLinkActivationAdmission {
|
|
28
27
|
private readonly records = new Map<string, ZLinkActivationRecord>();
|
|
29
28
|
|
|
30
|
-
constructor(
|
|
31
|
-
private readonly limitOf: (meshName: string) => number,
|
|
32
|
-
private readonly changed?: (meshName: string) => void
|
|
33
|
-
) {}
|
|
29
|
+
constructor(private readonly limitOf: (meshName: string) => number) {}
|
|
34
30
|
|
|
35
31
|
current(meshName: string): ZLinkActivationConcurrency {
|
|
36
32
|
const record = this.records.get(meshName);
|
|
@@ -57,20 +53,18 @@ export class ZLinkActivationAdmission {
|
|
|
57
53
|
);
|
|
58
54
|
}
|
|
59
55
|
record.active += 1;
|
|
60
|
-
this.changed?.(meshName);
|
|
61
56
|
let released = false;
|
|
62
57
|
return () => {
|
|
63
58
|
if (released) return;
|
|
64
59
|
released = true;
|
|
65
60
|
record.active -= 1;
|
|
66
|
-
this.changed?.(meshName);
|
|
67
61
|
};
|
|
68
62
|
}
|
|
69
63
|
|
|
70
64
|
private record(meshName: string): ZLinkActivationRecord {
|
|
71
65
|
let record = this.records.get(meshName);
|
|
72
66
|
if (record === undefined) {
|
|
73
|
-
record = {
|
|
67
|
+
record = { limit: this.limitOf(meshName), active: 0 };
|
|
74
68
|
this.records.set(meshName, record);
|
|
75
69
|
}
|
|
76
70
|
return record;
|
|
@@ -1,13 +1,29 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { UINT64_MAX } from '@zlink-systems/stream-wire';
|
|
2
|
+
import {
|
|
3
|
+
type RoutingId,
|
|
4
|
+
ZLinkSpotKind,
|
|
5
|
+
zlinkSpotKindFromWire,
|
|
6
|
+
zlinkSpotKindToWire
|
|
7
|
+
} from '../../contracts';
|
|
8
|
+
|
|
9
|
+
import { ZLINK_MAX_ROUTING_ID_BYTES } from '../../contracts/Common/CoreTypes';
|
|
10
|
+
import { AUTHORITY_ENVELOPE_MAX_BYTES } from '../../contracts/Configuration/InternalDefaults';
|
|
3
11
|
import { crc32c } from '../foundation/service-relocation-runtime';
|
|
12
|
+
import { SERVICE_WIRE_TEXT8_MAX_BYTES } from '../foundation/service-wire-binary-primitives';
|
|
4
13
|
import { decodeRoutingId, encodeRoutingIdStorageHex } from '../routing-id';
|
|
5
14
|
|
|
6
15
|
const AUTHORITY_MAGIC = Buffer.from([0x5a, 0x4c, 0x41, 0x55]);
|
|
7
16
|
const AUTHORITY_VERSION = 1;
|
|
8
17
|
const AUTHORITY_FLAGS = 0;
|
|
9
18
|
const ACTOR_RELOCATION_MAGIC = Buffer.from([0x5a, 0x4c, 0x41, 0x50]);
|
|
10
|
-
const
|
|
19
|
+
const AUTHORITY_MINIMUM_BYTES = 15;
|
|
20
|
+
const ACTOR_RELOCATION_MINIMUM_BYTES = 32;
|
|
21
|
+
const ACTOR_RELOCATION_VERSION_WITHOUT_SESSION_FENCE = 5;
|
|
22
|
+
const ACTOR_RELOCATION_VERSION_WITH_SESSION_FENCE = 6;
|
|
23
|
+
const ACTOR_RELOCATION_FIRST_PHASE = 1;
|
|
24
|
+
const ACTOR_RELOCATION_STEADY_PHASE = 4;
|
|
25
|
+
const ENTRY_SPOT_WIRE_KIND = zlinkSpotKindToWire(ZLinkSpotKind.Entry);
|
|
26
|
+
const USER_SPOT_WIRE_KIND = zlinkSpotKindToWire(ZLinkSpotKind.User);
|
|
11
27
|
const FATAL_UTF8 = new TextDecoder('utf-8', { fatal: true });
|
|
12
28
|
|
|
13
29
|
export type ZLinkActorAuthorityState = 'creating' | 'ready';
|
|
@@ -47,8 +63,10 @@ export function encodeCanonicalAuthorityPayload(value: ZLinkCanonicalAuthorityPa
|
|
|
47
63
|
body
|
|
48
64
|
);
|
|
49
65
|
const encoded = concat(envelope, u32be(crc32c(envelope)));
|
|
50
|
-
if (encoded.byteLength >
|
|
51
|
-
throw new RangeError(
|
|
66
|
+
if (encoded.byteLength > AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
67
|
+
throw new RangeError(
|
|
68
|
+
`Actor authority payload exceeds ${AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`
|
|
69
|
+
);
|
|
52
70
|
}
|
|
53
71
|
return encoded;
|
|
54
72
|
}
|
|
@@ -59,7 +77,10 @@ export function decodeCanonicalAuthorityPayload(
|
|
|
59
77
|
): ZLinkCanonicalAuthorityPayload | undefined {
|
|
60
78
|
try {
|
|
61
79
|
const reader = new BigEndianReader(payload);
|
|
62
|
-
if (
|
|
80
|
+
if (
|
|
81
|
+
reader.bytes.byteLength < AUTHORITY_MINIMUM_BYTES ||
|
|
82
|
+
reader.bytes.byteLength > AUTHORITY_ENVELOPE_MAX_BYTES
|
|
83
|
+
) {
|
|
63
84
|
return undefined;
|
|
64
85
|
}
|
|
65
86
|
reader.expect(AUTHORITY_MAGIC);
|
|
@@ -81,7 +102,7 @@ export function decodeCanonicalAuthorityPayload(
|
|
|
81
102
|
/** Byte-exact Node counterpart of .NET ZLinkActorAuthorityPayloadCodec.Encode. */
|
|
82
103
|
export function encodeActorAuthorityPayload(value: ZLinkActorAuthorityPayload): Buffer {
|
|
83
104
|
const spotKind = zlinkSpotKindToWire(value.currentSpotKind);
|
|
84
|
-
if (spotKind !==
|
|
105
|
+
if (spotKind !== ENTRY_SPOT_WIRE_KIND && spotKind !== USER_SPOT_WIRE_KIND) {
|
|
85
106
|
throw new RangeError('Actor currentSpotKind must be Entry or User.');
|
|
86
107
|
}
|
|
87
108
|
const actor = concat(
|
|
@@ -173,7 +194,7 @@ export function actorRelocationAuthorityApplicationPayload(
|
|
|
173
194
|
const current = decodeActorRelocationEnvelope(payload);
|
|
174
195
|
return current === undefined
|
|
175
196
|
? Buffer.from(payload)
|
|
176
|
-
: current.phase ===
|
|
197
|
+
: current.phase === ACTOR_RELOCATION_STEADY_PHASE
|
|
177
198
|
? Buffer.from(current.applicationPayload)
|
|
178
199
|
: undefined;
|
|
179
200
|
}
|
|
@@ -196,8 +217,10 @@ export function replaceActorRelocationAuthorityApplicationPayload(
|
|
|
196
217
|
applicationPayload
|
|
197
218
|
);
|
|
198
219
|
const encoded = concat(withoutChecksum, u32le(crc32c(withoutChecksum)));
|
|
199
|
-
if (encoded.byteLength >
|
|
200
|
-
throw new RangeError(
|
|
220
|
+
if (encoded.byteLength > AUTHORITY_ENVELOPE_MAX_BYTES) {
|
|
221
|
+
throw new RangeError(
|
|
222
|
+
`Actor relocation authority payload exceeds ${AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`
|
|
223
|
+
);
|
|
201
224
|
}
|
|
202
225
|
return encoded;
|
|
203
226
|
}
|
|
@@ -205,7 +228,11 @@ export function replaceActorRelocationAuthorityApplicationPayload(
|
|
|
205
228
|
function decodeActorRelocationEnvelope(payload: Uint8Array): ActorRelocationEnvelope | undefined {
|
|
206
229
|
try {
|
|
207
230
|
const bytes = Buffer.from(payload);
|
|
208
|
-
if (
|
|
231
|
+
if (
|
|
232
|
+
bytes.byteLength < ACTOR_RELOCATION_MINIMUM_BYTES ||
|
|
233
|
+
bytes.byteLength > AUTHORITY_ENVELOPE_MAX_BYTES
|
|
234
|
+
)
|
|
235
|
+
return undefined;
|
|
209
236
|
const checksumOffset = bytes.byteLength - 4;
|
|
210
237
|
if (bytes.readUInt32LE(checksumOffset) !== crc32c(bytes.subarray(0, checksumOffset))) {
|
|
211
238
|
return undefined;
|
|
@@ -213,10 +240,15 @@ function decodeActorRelocationEnvelope(payload: Uint8Array): ActorRelocationEnve
|
|
|
213
240
|
const reader = new LittleEndianReader(bytes.subarray(0, checksumOffset));
|
|
214
241
|
reader.expect(ACTOR_RELOCATION_MAGIC);
|
|
215
242
|
const version = reader.u16();
|
|
216
|
-
if (
|
|
243
|
+
if (
|
|
244
|
+
version !== ACTOR_RELOCATION_VERSION_WITHOUT_SESSION_FENCE &&
|
|
245
|
+
version !== ACTOR_RELOCATION_VERSION_WITH_SESSION_FENCE
|
|
246
|
+
)
|
|
247
|
+
return undefined;
|
|
217
248
|
if (reader.take(16).every((byte) => byte === 0)) return undefined;
|
|
218
249
|
const phase = reader.u8();
|
|
219
|
-
if (phase <
|
|
250
|
+
if (phase < ACTOR_RELOCATION_FIRST_PHASE || phase > ACTOR_RELOCATION_STEADY_PHASE)
|
|
251
|
+
return undefined;
|
|
220
252
|
const isBound = reader.bool();
|
|
221
253
|
if (isBound) {
|
|
222
254
|
reader.bytes8();
|
|
@@ -230,7 +262,7 @@ function decodeActorRelocationEnvelope(payload: Uint8Array): ActorRelocationEnve
|
|
|
230
262
|
const ownerLeaseGeneration = reader.u64();
|
|
231
263
|
const sessionOwnerNodeGeneration = reader.u64();
|
|
232
264
|
reader.u64();
|
|
233
|
-
if (version ===
|
|
265
|
+
if (version === ACTOR_RELOCATION_VERSION_WITH_SESSION_FENCE) {
|
|
234
266
|
reader.text16();
|
|
235
267
|
reader.u64();
|
|
236
268
|
}
|
|
@@ -247,7 +279,7 @@ function decodeActorRelocationEnvelope(payload: Uint8Array): ActorRelocationEnve
|
|
|
247
279
|
}
|
|
248
280
|
const prefix = Buffer.from(reader.bytes.subarray(0, reader.offset));
|
|
249
281
|
const applicationLength = reader.i32();
|
|
250
|
-
if (applicationLength < 1 || applicationLength >
|
|
282
|
+
if (applicationLength < 1 || applicationLength > AUTHORITY_ENVELOPE_MAX_BYTES) return undefined;
|
|
251
283
|
const applicationPayload = Buffer.from(reader.take(applicationLength));
|
|
252
284
|
if (!reader.done) return undefined;
|
|
253
285
|
return { prefix, phase, applicationPayload };
|
|
@@ -258,22 +290,28 @@ function decodeActorRelocationEnvelope(payload: Uint8Array): ActorRelocationEnve
|
|
|
258
290
|
|
|
259
291
|
function text8(value: string, name: string): Buffer {
|
|
260
292
|
const bytes = Buffer.from(value, 'utf8');
|
|
261
|
-
if (
|
|
262
|
-
|
|
293
|
+
if (
|
|
294
|
+
bytes.byteLength < 1 ||
|
|
295
|
+
bytes.byteLength > SERVICE_WIRE_TEXT8_MAX_BYTES ||
|
|
296
|
+
bytes.includes(0)
|
|
297
|
+
) {
|
|
298
|
+
throw new RangeError(
|
|
299
|
+
`${name} must contain 1..${SERVICE_WIRE_TEXT8_MAX_BYTES} UTF-8 bytes without NUL.`
|
|
300
|
+
);
|
|
263
301
|
}
|
|
264
302
|
return concat(Buffer.of(bytes.byteLength), bytes);
|
|
265
303
|
}
|
|
266
304
|
|
|
267
305
|
function rid(value: RoutingId, name: string): Buffer {
|
|
268
306
|
const bytes = Buffer.from(encodeRoutingIdStorageHex(value), 'hex');
|
|
269
|
-
if (bytes.byteLength < 1 || bytes.byteLength >
|
|
270
|
-
throw new RangeError(`${name} must contain 1
|
|
307
|
+
if (bytes.byteLength < 1 || bytes.byteLength > ZLINK_MAX_ROUTING_ID_BYTES) {
|
|
308
|
+
throw new RangeError(`${name} must contain 1..${ZLINK_MAX_ROUTING_ID_BYTES} bytes.`);
|
|
271
309
|
}
|
|
272
310
|
return concat(Buffer.of(bytes.byteLength), bytes);
|
|
273
311
|
}
|
|
274
312
|
|
|
275
313
|
function nonzeroU64be(value: bigint, name: string): Buffer {
|
|
276
|
-
if (value === 0n || value < 0n || value >
|
|
314
|
+
if (value === 0n || value < 0n || value > UINT64_MAX) {
|
|
277
315
|
throw new RangeError(`${name} must be a non-zero u64.`);
|
|
278
316
|
}
|
|
279
317
|
const result = Buffer.alloc(8);
|