@zlink-systems/framework 0.21.0 → 0.22.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/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -13,10 +13,7 @@ import type {
|
|
|
13
13
|
ZLinkSpotRouterPeerConnectionOptions,
|
|
14
14
|
ZLinkWorkerOptions
|
|
15
15
|
} from './RegistrationTypes';
|
|
16
|
-
import {
|
|
17
|
-
isRouteClientEnabled,
|
|
18
|
-
isRouteTransportDeclared
|
|
19
|
-
} from './RouteChannelInternalState';
|
|
16
|
+
import { isRouteClientEnabled, isRouteTransportDeclared } from './RouteChannelInternalState';
|
|
20
17
|
import { validateTimerRegistration } from './TimerRegistrationValidator';
|
|
21
18
|
import { zlinkDefaultLocationOptions } from '../Locations';
|
|
22
19
|
import { requireValidSendTimeoutMs } from './SendTimeoutValidation';
|
|
@@ -31,8 +28,9 @@ export function validateFrameworkRegistration(
|
|
|
31
28
|
registration.network.bindHost,
|
|
32
29
|
registration.network.advertiseHost
|
|
33
30
|
);
|
|
34
|
-
const actorCapableSpotNodes = [...registration.spotNodes.values()]
|
|
35
|
-
|
|
31
|
+
const actorCapableSpotNodes = [...registration.spotNodes.values()].filter(
|
|
32
|
+
(spotNode) => toActorFactoryCount(spotNode.actorFactories) > 0
|
|
33
|
+
);
|
|
36
34
|
if (actorCapableSpotNodes.length > 1) {
|
|
37
35
|
throw new ZLinkConfigurationException(
|
|
38
36
|
'Actor factory registration is ambiguous because more than one SpotNode owns actor factories.'
|
|
@@ -40,10 +38,7 @@ export function validateFrameworkRegistration(
|
|
|
40
38
|
}
|
|
41
39
|
|
|
42
40
|
const peerLocationConfigured = hasLocationStores(registration);
|
|
43
|
-
validateChannelCapabilities(
|
|
44
|
-
Object.fromEntries(registration.channels),
|
|
45
|
-
peerLocationConfigured
|
|
46
|
-
);
|
|
41
|
+
validateChannelCapabilities(Object.fromEntries(registration.channels), peerLocationConfigured);
|
|
47
42
|
validateChannelTopologyNames(registration);
|
|
48
43
|
validateSpotNodes(registration);
|
|
49
44
|
validateRouteChannels(registration, peerLocationConfigured);
|
|
@@ -55,10 +50,13 @@ export function validateFrameworkRegistration(
|
|
|
55
50
|
function validateChannelTopologyNames(registration: ZLinkFrameworkRegistration): void {
|
|
56
51
|
const declaredChannelNames = new Set(
|
|
57
52
|
[...registration.channels]
|
|
58
|
-
.filter(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
.filter(
|
|
54
|
+
([, channel]) =>
|
|
55
|
+
channel.client !== undefined ||
|
|
56
|
+
channel.server !== undefined ||
|
|
57
|
+
channel.publisher !== undefined ||
|
|
58
|
+
channel.subscriber !== undefined
|
|
59
|
+
)
|
|
62
60
|
.map(([channelName]) => channelName)
|
|
63
61
|
);
|
|
64
62
|
if (declaredChannelNames.size === 0) return;
|
|
@@ -86,8 +84,9 @@ function toActorFactoryCount(value: ZLinkSpotNodeOptions['actorFactories']): num
|
|
|
86
84
|
}
|
|
87
85
|
|
|
88
86
|
function hasLocationStores(registration: ZLinkFrameworkRegistration): boolean {
|
|
89
|
-
return
|
|
90
|
-
|| registration.locations.storeInstance !== undefined
|
|
87
|
+
return (
|
|
88
|
+
registration.locations.useInMemoryStores || registration.locations.storeInstance !== undefined
|
|
89
|
+
);
|
|
91
90
|
}
|
|
92
91
|
|
|
93
92
|
function validateWorkerOptions(worker: ZLinkWorkerOptions | undefined): void {
|
|
@@ -112,13 +111,13 @@ function validateLocationRegistration(registration: ZLinkFrameworkRegistration):
|
|
|
112
111
|
);
|
|
113
112
|
}
|
|
114
113
|
const store = locations.storeInstance;
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
);
|
|
114
|
+
if (
|
|
115
|
+
store !== undefined &&
|
|
116
|
+
(typeof store.read !== 'function' ||
|
|
117
|
+
typeof store.write !== 'function' ||
|
|
118
|
+
typeof store.scan !== 'function')
|
|
119
|
+
) {
|
|
120
|
+
throw new ZLinkConfigurationException('Location Store must implement read, write, and scan.');
|
|
122
121
|
}
|
|
123
122
|
const options = { ...zlinkDefaultLocationOptions, ...locations.options };
|
|
124
123
|
for (const [name, value] of Object.entries({
|
|
@@ -133,8 +132,8 @@ function validateLocationRegistration(registration: ZLinkFrameworkRegistration):
|
|
|
133
132
|
}
|
|
134
133
|
}
|
|
135
134
|
if (
|
|
136
|
-
options.ownerLeaseRenewIntervalMs + options.ownerLeaseRenewTimeoutMs
|
|
137
|
-
|
|
135
|
+
options.ownerLeaseRenewIntervalMs + options.ownerLeaseRenewTimeoutMs >=
|
|
136
|
+
options.ownerLeaseTtlMs - options.ownerLeaseFencingMarginMs
|
|
138
137
|
) {
|
|
139
138
|
throw new ZLinkConfigurationException(
|
|
140
139
|
'ownerLeaseRenewIntervalMs + ownerLeaseRenewTimeoutMs must be less than ownerLeaseTtlMs - ownerLeaseFencingMarginMs.'
|
|
@@ -172,9 +171,9 @@ function validateLocationRegistration(registration: ZLinkFrameworkRegistration):
|
|
|
172
171
|
}
|
|
173
172
|
}
|
|
174
173
|
if (
|
|
175
|
-
options.routeCacheMaxAgeMs > 0
|
|
176
|
-
|
|
177
|
-
|
|
174
|
+
options.routeCacheMaxAgeMs > 0 &&
|
|
175
|
+
options.messageFollowDurationMs > 0 &&
|
|
176
|
+
options.routeCacheMaxAgeMs > options.messageFollowDurationMs - 5000
|
|
178
177
|
) {
|
|
179
178
|
throw new ZLinkConfigurationException(
|
|
180
179
|
'routeCacheMaxAgeMs must be at least 5000 ms shorter than messageFollowDurationMs.'
|
|
@@ -212,9 +211,7 @@ function validateChannelCapabilities(
|
|
|
212
211
|
);
|
|
213
212
|
}
|
|
214
213
|
if (channel.noDrop !== undefined && typeof channel.noDrop !== 'boolean') {
|
|
215
|
-
throw new ZLinkConfigurationException(
|
|
216
|
-
`Channel '${channelName}' NoDrop must be a boolean.`
|
|
217
|
-
);
|
|
214
|
+
throw new ZLinkConfigurationException(`Channel '${channelName}' NoDrop must be a boolean.`);
|
|
218
215
|
}
|
|
219
216
|
if (channel.noDrop !== undefined && channel.publisher === undefined) {
|
|
220
217
|
throw new ZLinkConfigurationException(
|
|
@@ -257,7 +254,11 @@ function validateChannelCapabilities(
|
|
|
257
254
|
requireSocketOptions(`channel '${channelName}' client`, channel.client);
|
|
258
255
|
}
|
|
259
256
|
if (channel.subscriber !== undefined) {
|
|
260
|
-
requirePeerSource(
|
|
257
|
+
requirePeerSource(
|
|
258
|
+
`channel '${channelName}' subscriber`,
|
|
259
|
+
channel.subscriber.manualConnections,
|
|
260
|
+
peerLocationConfigured
|
|
261
|
+
);
|
|
261
262
|
}
|
|
262
263
|
if ((channel.publishHandlers ?? []).length > 0 && channel.subscriber === undefined) {
|
|
263
264
|
throw new ZLinkConfigurationException(
|
|
@@ -269,14 +270,17 @@ function validateChannelCapabilities(
|
|
|
269
270
|
`Channel '${channelName}' subscriber must register at least one publish handler.`
|
|
270
271
|
);
|
|
271
272
|
}
|
|
272
|
-
if (
|
|
273
|
+
if (
|
|
274
|
+
((channel.requestHandlers ?? []).length > 0 || (channel.sendHandlers ?? []).length > 0) &&
|
|
275
|
+
channel.server === undefined
|
|
276
|
+
) {
|
|
273
277
|
throw new ZLinkConfigurationException(
|
|
274
278
|
`Channel '${channelName}' request/send handlers require a server capability.`
|
|
275
279
|
);
|
|
276
280
|
}
|
|
277
281
|
if (
|
|
278
|
-
channel.server !== undefined
|
|
279
|
-
|
|
282
|
+
channel.server !== undefined &&
|
|
283
|
+
(channel.requestHandlers ?? []).length + (channel.sendHandlers ?? []).length === 0
|
|
280
284
|
) {
|
|
281
285
|
throw new ZLinkConfigurationException(
|
|
282
286
|
`Channel '${channelName}' server must register at least one request or send handler.`
|
|
@@ -298,7 +302,8 @@ function validateChannelCapabilities(
|
|
|
298
302
|
validateRouteMeshCapability(
|
|
299
303
|
`channel '${channelName}' route mesh`,
|
|
300
304
|
channel.routeMesh,
|
|
301
|
-
peerLocationConfigured
|
|
305
|
+
peerLocationConfigured
|
|
306
|
+
);
|
|
302
307
|
}
|
|
303
308
|
}
|
|
304
309
|
}
|
|
@@ -339,11 +344,9 @@ function validateSpotNodes(registration: ZLinkFrameworkRegistration): void {
|
|
|
339
344
|
validateSpotNodeFactories(spotNodeName, spotNode);
|
|
340
345
|
validateSpotNodeTimers(spotNode);
|
|
341
346
|
if (
|
|
342
|
-
spotNode.objectRole === 'client'
|
|
343
|
-
|
|
344
|
-
(spotNode.
|
|
345
|
-
|| (spotNode.routeRequestHandlers?.length ?? 0) > 0
|
|
346
|
-
)
|
|
347
|
+
spotNode.objectRole === 'client' &&
|
|
348
|
+
((spotNode.routeSendHandlers?.length ?? 0) > 0 ||
|
|
349
|
+
(spotNode.routeRequestHandlers?.length ?? 0) > 0)
|
|
347
350
|
) {
|
|
348
351
|
throw new ZLinkConfigurationException(
|
|
349
352
|
`Object Client RouteMesh '${spotNodeName}' cannot register Node-direct handlers.`
|
|
@@ -367,8 +370,8 @@ function validateMeshChannels(
|
|
|
367
370
|
): void {
|
|
368
371
|
for (const [channelName, channel] of Object.entries(meshChannels ?? {})) {
|
|
369
372
|
requireName(`RouteMesh '${spotNodeName}' channel`, channelName);
|
|
370
|
-
const handlerCount =
|
|
371
|
-
+ (channel.sendHandlers?.length ?? 0);
|
|
373
|
+
const handlerCount =
|
|
374
|
+
(channel.requestHandlers?.length ?? 0) + (channel.sendHandlers?.length ?? 0);
|
|
372
375
|
if (channel.client === true && channel.server === true) {
|
|
373
376
|
throw new ZLinkConfigurationException(
|
|
374
377
|
`RouteMesh '${spotNodeName}' channel '${channelName}' must register exactly one role.`
|
|
@@ -424,10 +427,19 @@ function validateSpotNodeCapability(
|
|
|
424
427
|
return;
|
|
425
428
|
}
|
|
426
429
|
validateManualConnections(capabilityName, capability.manualConnections);
|
|
427
|
-
validateRouterPeerConnections(
|
|
430
|
+
validateRouterPeerConnections(
|
|
431
|
+
capabilityName,
|
|
432
|
+
'manualPeerConnections' in capability ? capability.manualPeerConnections : undefined
|
|
433
|
+
);
|
|
428
434
|
requireEndpoint(capabilityName, capability.bind);
|
|
429
|
-
if (
|
|
430
|
-
|
|
435
|
+
if (
|
|
436
|
+
capability.routingId !== undefined &&
|
|
437
|
+
(capability.routingId.trim().length === 0 ||
|
|
438
|
+
capability.routingId.trim() !== capability.routingId)
|
|
439
|
+
) {
|
|
440
|
+
throw new ZLinkConfigurationException(
|
|
441
|
+
`${capabilityName} routingId must not be empty or padded.`
|
|
442
|
+
);
|
|
431
443
|
}
|
|
432
444
|
}
|
|
433
445
|
|
|
@@ -450,15 +462,18 @@ function validateListenerNetworkIdentity(
|
|
|
450
462
|
}
|
|
451
463
|
|
|
452
464
|
function isWildcardHost(host: string): boolean {
|
|
453
|
-
const normalized = host.startsWith('[') && host.endsWith(']')
|
|
454
|
-
? host.slice(1, -1)
|
|
455
|
-
: host;
|
|
465
|
+
const normalized = host.startsWith('[') && host.endsWith(']') ? host.slice(1, -1) : host;
|
|
456
466
|
return normalized === '0.0.0.0' || normalized === '::';
|
|
457
467
|
}
|
|
458
468
|
|
|
459
|
-
function validateManualConnections(
|
|
469
|
+
function validateManualConnections(
|
|
470
|
+
capabilityName: string,
|
|
471
|
+
manualConnections: readonly string[] | undefined
|
|
472
|
+
): void {
|
|
460
473
|
if ((manualConnections ?? []).some((endpoint) => endpoint.trim().length === 0)) {
|
|
461
|
-
throw new ZLinkConfigurationException(
|
|
474
|
+
throw new ZLinkConfigurationException(
|
|
475
|
+
`${capabilityName} manual connection endpoint must not be empty.`
|
|
476
|
+
);
|
|
462
477
|
}
|
|
463
478
|
}
|
|
464
479
|
|
|
@@ -470,19 +485,28 @@ function validateRouterPeerConnections(
|
|
|
470
485
|
for (const connection of manualPeerConnections ?? []) {
|
|
471
486
|
const peerRid = String(connection.peerRid);
|
|
472
487
|
if (peerRid.trim().length === 0) {
|
|
473
|
-
throw new ZLinkConfigurationException(
|
|
488
|
+
throw new ZLinkConfigurationException(
|
|
489
|
+
`${capabilityName} manual peer routing id must not be empty.`
|
|
490
|
+
);
|
|
474
491
|
}
|
|
475
492
|
if (seenPeerRids.has(peerRid)) {
|
|
476
|
-
throw new ZLinkConfigurationException(
|
|
493
|
+
throw new ZLinkConfigurationException(
|
|
494
|
+
`${capabilityName} manual peer routing id must be unique.`
|
|
495
|
+
);
|
|
477
496
|
}
|
|
478
497
|
seenPeerRids.add(peerRid);
|
|
479
498
|
if (connection.endpoint.trim().length === 0) {
|
|
480
|
-
throw new ZLinkConfigurationException(
|
|
499
|
+
throw new ZLinkConfigurationException(
|
|
500
|
+
`${capabilityName} manual peer connection endpoint must not be empty.`
|
|
501
|
+
);
|
|
481
502
|
}
|
|
482
503
|
}
|
|
483
504
|
}
|
|
484
505
|
|
|
485
|
-
function validateDuplicatePacketNames(
|
|
506
|
+
function validateDuplicatePacketNames(
|
|
507
|
+
label: string,
|
|
508
|
+
packetNames: readonly string[] | undefined
|
|
509
|
+
): void {
|
|
486
510
|
const seen = new Set<string>();
|
|
487
511
|
for (const packetName of packetNames ?? []) {
|
|
488
512
|
requireName(label, packetName);
|
|
@@ -508,7 +532,9 @@ function requirePeerSource(
|
|
|
508
532
|
if ((manualConnections ?? []).length > 0 || peerLocationConfigured) {
|
|
509
533
|
return;
|
|
510
534
|
}
|
|
511
|
-
throw new ZLinkConfigurationException(
|
|
535
|
+
throw new ZLinkConfigurationException(
|
|
536
|
+
`${capabilityName} requires location stores or manual connections.`
|
|
537
|
+
);
|
|
512
538
|
}
|
|
513
539
|
|
|
514
540
|
function validateFanoutPublisherIdentity(
|
|
@@ -528,7 +554,8 @@ function validateFanoutPublisherIdentity(
|
|
|
528
554
|
`channel '${channelName}' publisher must select a fixed routing id or an automatic routing id prefix.`
|
|
529
555
|
);
|
|
530
556
|
}
|
|
531
|
-
if (routingId !== undefined)
|
|
557
|
+
if (routingId !== undefined)
|
|
558
|
+
requireName(`channel '${channelName}' publisher routingId`, routingId);
|
|
532
559
|
}
|
|
533
560
|
|
|
534
561
|
function requireEndpoint(capabilityName: string, endpoint: string | undefined): void {
|
|
@@ -557,7 +584,10 @@ function validateStreamNodes(registration: ZLinkFrameworkRegistration): void {
|
|
|
557
584
|
streamNode.advertiseHost
|
|
558
585
|
);
|
|
559
586
|
if (streamNode.tlsServer !== undefined) {
|
|
560
|
-
requireFilePath(
|
|
587
|
+
requireFilePath(
|
|
588
|
+
`STREAM node '${streamNodeName}' TLS certificate`,
|
|
589
|
+
streamNode.tlsServer.certificatePath
|
|
590
|
+
);
|
|
561
591
|
requireFilePath(`STREAM node '${streamNodeName}' TLS key`, streamNode.tlsServer.keyPath);
|
|
562
592
|
}
|
|
563
593
|
if (streamNode.session === undefined) {
|
|
@@ -579,7 +609,9 @@ function validateStreamNodes(registration: ZLinkFrameworkRegistration): void {
|
|
|
579
609
|
`STREAM node '${streamNodeName}' enables Actor dispatch but no Location Store is registered.`
|
|
580
610
|
);
|
|
581
611
|
}
|
|
582
|
-
if (
|
|
612
|
+
if (
|
|
613
|
+
![...registration.spotNodes.values()].some((spotNode) => spotNode.objectRole !== undefined)
|
|
614
|
+
) {
|
|
583
615
|
throw new ZLinkConfigurationException(
|
|
584
616
|
`STREAM node '${streamNodeName}' requires at least one local Object Client or Server MeshNode.`
|
|
585
617
|
);
|
|
@@ -588,7 +620,10 @@ function validateStreamNodes(registration: ZLinkFrameworkRegistration): void {
|
|
|
588
620
|
}
|
|
589
621
|
}
|
|
590
622
|
|
|
591
|
-
function validateRouteChannels(
|
|
623
|
+
function validateRouteChannels(
|
|
624
|
+
registration: ZLinkFrameworkRegistration,
|
|
625
|
+
peerLocationConfigured: boolean
|
|
626
|
+
): void {
|
|
592
627
|
for (const routeChannel of registration.routeChannelOptions.values()) {
|
|
593
628
|
if (!isRouteTransportDeclared(routeChannel) && !isRouteTransportConfigured(routeChannel)) {
|
|
594
629
|
continue;
|
|
@@ -599,7 +634,11 @@ function validateRouteChannels(registration: ZLinkFrameworkRegistration, peerLoc
|
|
|
599
634
|
) {
|
|
600
635
|
continue;
|
|
601
636
|
}
|
|
602
|
-
validateRouteMeshCapability(
|
|
637
|
+
validateRouteMeshCapability(
|
|
638
|
+
`route channel '${routeChannel.routerChannelId}'`,
|
|
639
|
+
routeChannel,
|
|
640
|
+
peerLocationConfigured
|
|
641
|
+
);
|
|
603
642
|
if (routeChannelHandlerCount(routeChannel) > 0 && !hasBind(routeChannel.bind)) {
|
|
604
643
|
requireEndpoint(`route channel '${routeChannel.routerChannelId}' router`, routeChannel.bind);
|
|
605
644
|
}
|
|
@@ -611,10 +650,12 @@ function isRouteTransportConfigured(routeChannel: ZLinkRouteChannelOptions): boo
|
|
|
611
650
|
}
|
|
612
651
|
|
|
613
652
|
function isRoutePacketCapabilityConfigured(routeChannel: ZLinkRouteChannelOptions): boolean {
|
|
614
|
-
return
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
653
|
+
return (
|
|
654
|
+
hasBind(routeChannel.bind) ||
|
|
655
|
+
isRouteClientEnabled(routeChannel) ||
|
|
656
|
+
(routeChannel.manualConnections ?? []).length > 0 ||
|
|
657
|
+
routeChannelHandlerCount(routeChannel) > 0
|
|
658
|
+
);
|
|
618
659
|
}
|
|
619
660
|
|
|
620
661
|
function isAcceptedSpotRouteChannel(
|
|
@@ -628,10 +669,14 @@ function isAcceptedSpotRouteChannel(
|
|
|
628
669
|
return true;
|
|
629
670
|
}
|
|
630
671
|
if (routeChannel.routingId !== undefined) {
|
|
631
|
-
return [...registration.spotNodes.values()].some(
|
|
632
|
-
spotNode.router?.routingId === routeChannel.routingId
|
|
672
|
+
return [...registration.spotNodes.values()].some(
|
|
673
|
+
(spotNode) => spotNode.router?.routingId === routeChannel.routingId
|
|
674
|
+
);
|
|
633
675
|
}
|
|
634
|
-
return
|
|
676
|
+
return (
|
|
677
|
+
[...registration.spotNodes.values()].filter((spotNode) => spotNode.router !== undefined)
|
|
678
|
+
.length === 1
|
|
679
|
+
);
|
|
635
680
|
}
|
|
636
681
|
|
|
637
682
|
function validateRouteMeshCapability(
|
|
@@ -639,10 +684,12 @@ function validateRouteMeshCapability(
|
|
|
639
684
|
routeChannel: ZLinkRouteChannelOptions | ZLinkRouteMeshChannelOptions,
|
|
640
685
|
peerLocationConfigured = false
|
|
641
686
|
): void {
|
|
642
|
-
const clientEnabled =
|
|
643
|
-
|| (routeChannel.manualConnections ?? []).length > 0;
|
|
687
|
+
const clientEnabled =
|
|
688
|
+
isRouteClientEnabled(routeChannel) || (routeChannel.manualConnections ?? []).length > 0;
|
|
644
689
|
if (!hasBind(routeChannel.bind) && !clientEnabled) {
|
|
645
|
-
throw new ZLinkConfigurationException(
|
|
690
|
+
throw new ZLinkConfigurationException(
|
|
691
|
+
`${capabilityName} must enable server or client capability.`
|
|
692
|
+
);
|
|
646
693
|
}
|
|
647
694
|
if (clientEnabled) {
|
|
648
695
|
requirePeerSource(capabilityName, routeChannel.manualConnections, peerLocationConfigured);
|
|
@@ -652,9 +699,11 @@ function validateRouteMeshCapability(
|
|
|
652
699
|
}
|
|
653
700
|
|
|
654
701
|
function routeChannelHandlerCount(routeChannel: ZLinkRouteChannelOptions): number {
|
|
655
|
-
return (
|
|
702
|
+
return (
|
|
703
|
+
(routeChannel.handlers ?? []).length +
|
|
656
704
|
(routeChannel.sendHandlers ?? []).length +
|
|
657
|
-
(routeChannel.requestHandlers ?? []).length
|
|
705
|
+
(routeChannel.requestHandlers ?? []).length
|
|
706
|
+
);
|
|
658
707
|
}
|
|
659
708
|
|
|
660
709
|
function hasBind(endpoint: string | undefined): boolean {
|
|
@@ -37,10 +37,7 @@ function routeInternalState(routeChannel: object): RouteChannelInternalState {
|
|
|
37
37
|
return routeChannel as RouteChannelInternalState;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
function defineRouteInternalFlag(
|
|
41
|
-
routeChannel: object,
|
|
42
|
-
key: keyof RouteChannelInternalState
|
|
43
|
-
): void {
|
|
40
|
+
function defineRouteInternalFlag(routeChannel: object, key: keyof RouteChannelInternalState): void {
|
|
44
41
|
Object.defineProperty(routeChannel, key, {
|
|
45
42
|
value: true,
|
|
46
43
|
configurable: true,
|
|
@@ -72,7 +72,10 @@ class RuntimeEndpointConnections implements ZLinkEndpointConnections {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
export function endpointConnections(
|
|
75
|
+
export function endpointConnections(
|
|
76
|
+
owner: object,
|
|
77
|
+
endpoints: readonly string[]
|
|
78
|
+
): ZLinkEndpointConnections {
|
|
76
79
|
let controller = controllers.get(owner);
|
|
77
80
|
if (controller === undefined) {
|
|
78
81
|
controller = new RuntimeEndpointConnections(endpoints);
|
|
@@ -4,10 +4,12 @@ export const ZLINK_MAX_SEND_TIMEOUT_MS = 2_147_483_647;
|
|
|
4
4
|
|
|
5
5
|
export function requireValidSendTimeoutMs(label: string, value: number | undefined): void {
|
|
6
6
|
if (value === undefined) return;
|
|
7
|
-
if (
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
if (
|
|
8
|
+
!Number.isFinite(value) ||
|
|
9
|
+
!Number.isInteger(value) ||
|
|
10
|
+
value < 1 ||
|
|
11
|
+
value > ZLINK_MAX_SEND_TIMEOUT_MS
|
|
12
|
+
) {
|
|
11
13
|
throw new ZLinkConfigurationException(
|
|
12
14
|
`${label} must be an integer between 1 and ${ZLINK_MAX_SEND_TIMEOUT_MS} milliseconds.`
|
|
13
15
|
);
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ZLinkTimerOverrunPolicy,
|
|
3
|
-
type ZLinkTimerOptions
|
|
4
|
-
} from '../Timers';
|
|
1
|
+
import { ZLinkTimerOverrunPolicy, type ZLinkTimerOptions } from '../Timers';
|
|
5
2
|
import { ZLinkConfigurationException } from './ConfigurationException';
|
|
6
3
|
|
|
7
4
|
export function validateTimerRegistration(
|
|
@@ -16,19 +13,17 @@ export function validateTimerRegistration(
|
|
|
16
13
|
throw new ZLinkConfigurationException('SPOT timer period must be greater than zero.');
|
|
17
14
|
}
|
|
18
15
|
if (
|
|
19
|
-
options?.overrunPolicy !== undefined
|
|
20
|
-
|
|
16
|
+
options?.overrunPolicy !== undefined &&
|
|
17
|
+
!Object.values(ZLinkTimerOverrunPolicy).includes(options.overrunPolicy)
|
|
21
18
|
) {
|
|
22
19
|
throw new ZLinkConfigurationException('SPOT timer overrun policy is not supported.');
|
|
23
20
|
}
|
|
24
21
|
if (
|
|
25
|
-
options?.overrunPolicy === ZLinkTimerOverrunPolicy.CatchUpBounded
|
|
26
|
-
|
|
27
|
-
options.maxCatchUpTicks
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|| options.maxCatchUpTicks > 2_147_483_647
|
|
31
|
-
)
|
|
22
|
+
options?.overrunPolicy === ZLinkTimerOverrunPolicy.CatchUpBounded &&
|
|
23
|
+
(options.maxCatchUpTicks === undefined ||
|
|
24
|
+
!Number.isInteger(options.maxCatchUpTicks) ||
|
|
25
|
+
options.maxCatchUpTicks < 1 ||
|
|
26
|
+
options.maxCatchUpTicks > 2_147_483_647)
|
|
32
27
|
) {
|
|
33
28
|
throw new ZLinkConfigurationException(
|
|
34
29
|
'SPOT timer MaxCatchUpTicks must be an integer from 1 through 2,147,483,647.'
|
|
@@ -53,12 +53,7 @@ export enum ZLinkRuntimeMessageFlowOutcome {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
export type ZLinkRuntimeMessageFlowResult =
|
|
56
|
-
| '
|
|
57
|
-
| 'failed'
|
|
58
|
-
| 'backpressured'
|
|
59
|
-
| 'dropped'
|
|
60
|
-
| 'cancelled'
|
|
61
|
-
| 'shutdown';
|
|
56
|
+
'succeeded' | 'failed' | 'backpressured' | 'dropped' | 'cancelled' | 'shutdown';
|
|
62
57
|
|
|
63
58
|
export interface ZLinkRuntimeMessageFlowEvent {
|
|
64
59
|
readonly outcome: ZLinkRuntimeMessageFlowOutcome;
|
|
@@ -46,15 +46,18 @@ export function ZLinkPacket(
|
|
|
46
46
|
jsonContract?: ZLinkPacketJsonContract
|
|
47
47
|
): ClassDecorator {
|
|
48
48
|
return (target) => {
|
|
49
|
-
const normalized =
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
const normalized =
|
|
50
|
+
jsonContract === undefined
|
|
51
|
+
? undefined
|
|
52
|
+
: defineZLinkPacketJsonContract(packetName, jsonContract);
|
|
52
53
|
appendMetadata(target, { kind: 'packet', packetName, jsonContract: normalized });
|
|
53
54
|
};
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
/** @internal */
|
|
57
|
-
export function readZLinkPacketJsonContract(
|
|
58
|
+
export function readZLinkPacketJsonContract(
|
|
59
|
+
packetName: string
|
|
60
|
+
): ZLinkPacketJsonContract | undefined {
|
|
58
61
|
return readDefinedZLinkPacketJsonContract(packetName);
|
|
59
62
|
}
|
|
60
63
|
|
|
@@ -87,10 +90,11 @@ function classDecorator(metadata: ZLinkDecoratorMetadata): ClassDecorator {
|
|
|
87
90
|
}
|
|
88
91
|
|
|
89
92
|
function methodDecorator(metadata: ZLinkDecoratorMetadata): MethodDecorator {
|
|
90
|
-
return (target, propertyKey) =>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
return (target, propertyKey) =>
|
|
94
|
+
appendMetadata(target.constructor, {
|
|
95
|
+
...metadata,
|
|
96
|
+
methodName: String(propertyKey)
|
|
97
|
+
});
|
|
94
98
|
}
|
|
95
99
|
|
|
96
100
|
function appendMetadata(target: object, metadata: ZLinkDecoratorMetadata): void {
|
|
@@ -107,5 +111,7 @@ export function readZLinkDecoratorMetadata(target: object): readonly ZLinkDecora
|
|
|
107
111
|
if (!Object.prototype.hasOwnProperty.call(target, ZLINK_DECORATOR_METADATA)) {
|
|
108
112
|
return [];
|
|
109
113
|
}
|
|
110
|
-
return (target as Record<symbol, unknown>)[
|
|
114
|
+
return (target as Record<symbol, unknown>)[
|
|
115
|
+
ZLINK_DECORATOR_METADATA
|
|
116
|
+
] as readonly ZLinkDecoratorMetadata[];
|
|
111
117
|
}
|
|
@@ -44,11 +44,21 @@ export interface ZLinkSpotTimerHandler<TSpot> {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
export interface ZLinkSpotActorSendHandler<TSpot, TActor extends ZLinkActor, TMessage> {
|
|
47
|
-
handle(
|
|
47
|
+
handle(
|
|
48
|
+
spot: TSpot,
|
|
49
|
+
actor: TActor,
|
|
50
|
+
context: ZLinkMessageContext,
|
|
51
|
+
message: TMessage
|
|
52
|
+
): Promise<void>;
|
|
48
53
|
}
|
|
49
54
|
|
|
50
55
|
export interface ZLinkSpotActorRequestHandler<TSpot, TActor extends ZLinkActor, TRequest, TReply> {
|
|
51
|
-
handle(
|
|
56
|
+
handle(
|
|
57
|
+
spot: TSpot,
|
|
58
|
+
actor: TActor,
|
|
59
|
+
context: ZLinkMessageContext,
|
|
60
|
+
request: TRequest
|
|
61
|
+
): Promise<TReply>;
|
|
52
62
|
}
|
|
53
63
|
|
|
54
64
|
export interface ZLinkEntrySpotActorSendHandler<
|
|
@@ -56,7 +66,12 @@ export interface ZLinkEntrySpotActorSendHandler<
|
|
|
56
66
|
TActor extends ZLinkActor,
|
|
57
67
|
TMessage
|
|
58
68
|
> {
|
|
59
|
-
handle(
|
|
69
|
+
handle(
|
|
70
|
+
spot: TEntrySpot,
|
|
71
|
+
actor: TActor,
|
|
72
|
+
context: ZLinkMessageContext,
|
|
73
|
+
message: TMessage
|
|
74
|
+
): Promise<void>;
|
|
60
75
|
}
|
|
61
76
|
|
|
62
77
|
export interface ZLinkEntrySpotActorRequestHandler<
|
|
@@ -65,5 +80,10 @@ export interface ZLinkEntrySpotActorRequestHandler<
|
|
|
65
80
|
TRequest,
|
|
66
81
|
TReply
|
|
67
82
|
> {
|
|
68
|
-
handle(
|
|
83
|
+
handle(
|
|
84
|
+
spot: TEntrySpot,
|
|
85
|
+
actor: TActor,
|
|
86
|
+
context: ZLinkMessageContext,
|
|
87
|
+
request: TRequest
|
|
88
|
+
): Promise<TReply>;
|
|
69
89
|
}
|