@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
|
@@ -24,9 +24,7 @@ import {
|
|
|
24
24
|
} from './client-server-service-wire';
|
|
25
25
|
import { discoveryAvailabilityForRuntimeState } from '../foundation/runtime-state-projections';
|
|
26
26
|
import { ZLinkStateLane } from '../execution/state-lane';
|
|
27
|
-
import {
|
|
28
|
-
isBackendRequestTimeoutError
|
|
29
|
-
} from '../backend/runtime-values';
|
|
27
|
+
import { isBackendRequestTimeoutError } from '../backend/runtime-values';
|
|
30
28
|
|
|
31
29
|
interface ActiveClientServerTarget {
|
|
32
30
|
descriptor: ZLinkClientServerServerDescriptor;
|
|
@@ -102,7 +100,7 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
102
100
|
|
|
103
101
|
activeTargets(channelName: string): readonly ZLinkClientServerServerDescriptor[] {
|
|
104
102
|
return [...this.connections.values()]
|
|
105
|
-
.filter(target => target.state === 'ready')
|
|
103
|
+
.filter((target) => target.state === 'ready')
|
|
106
104
|
.map((target) => target.descriptor)
|
|
107
105
|
.filter((descriptor) => descriptor.channelName === channelName);
|
|
108
106
|
}
|
|
@@ -111,8 +109,7 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
111
109
|
const owner = this.requireOwnerToken();
|
|
112
110
|
const descriptors = await this.lane.run(() => [...this.localDescriptors]);
|
|
113
111
|
for (const [channelName, current] of descriptors) {
|
|
114
|
-
if (current.ownerId === owner.ownerId
|
|
115
|
-
&& current.leaseGeneration === owner.leaseGeneration) {
|
|
112
|
+
if (current.ownerId === owner.ownerId && current.leaseGeneration === owner.leaseGeneration) {
|
|
116
113
|
continue;
|
|
117
114
|
}
|
|
118
115
|
const candidate = {
|
|
@@ -143,13 +140,14 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
143
140
|
const current = await this.lane.run(() => this.localDescriptors.get(channelName));
|
|
144
141
|
if (current !== undefined) {
|
|
145
142
|
const runtimeWeight = this.sockets.clientServerServerWeight(channelName);
|
|
146
|
-
const candidate =
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
143
|
+
const candidate =
|
|
144
|
+
runtimeWeight === current.weight
|
|
145
|
+
? current
|
|
146
|
+
: {
|
|
147
|
+
...current,
|
|
148
|
+
descriptorRevision: current.descriptorRevision + 1n,
|
|
149
|
+
weight: runtimeWeight
|
|
150
|
+
};
|
|
153
151
|
const result = await this.store.updateClientServer(
|
|
154
152
|
candidate,
|
|
155
153
|
ZLinkLocationWriteIntent.Renew,
|
|
@@ -201,10 +199,9 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
201
199
|
continue;
|
|
202
200
|
}
|
|
203
201
|
const rows = await this.listLiveServers(channelName, signal);
|
|
204
|
-
const desired = new Map(
|
|
205
|
-
clientServerConnectionId(descriptor),
|
|
206
|
-
|
|
207
|
-
]));
|
|
202
|
+
const desired = new Map(
|
|
203
|
+
rows.map((descriptor) => [clientServerConnectionId(descriptor), descriptor])
|
|
204
|
+
);
|
|
208
205
|
const desiredStableKeys = new Set(rows.map(clientServerStableKey));
|
|
209
206
|
for (const [connectionId, descriptor] of desired) {
|
|
210
207
|
const current = await this.lane.run(() => this.connections.get(connectionId));
|
|
@@ -233,8 +230,10 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
233
230
|
const connections = await this.lane.run(() => [...this.connections]);
|
|
234
231
|
for (const [connectionId, current] of connections) {
|
|
235
232
|
if (current.descriptor.channelName !== channelName || desired.has(connectionId)) continue;
|
|
236
|
-
if (
|
|
237
|
-
|
|
233
|
+
if (
|
|
234
|
+
desiredStableKeys.has(clientServerStableKey(current.descriptor)) &&
|
|
235
|
+
current.state === 'ready'
|
|
236
|
+
) {
|
|
238
237
|
continue;
|
|
239
238
|
}
|
|
240
239
|
await this.closeConnection(connectionId);
|
|
@@ -260,17 +259,18 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
260
259
|
|
|
261
260
|
const live: ZLinkClientServerServerDescriptor[] = [];
|
|
262
261
|
for (const descriptor of rows) {
|
|
263
|
-
if (
|
|
264
|
-
|
|
262
|
+
if (
|
|
263
|
+
descriptor.state === ZLinkFrameworkRuntimeState.Stopped ||
|
|
264
|
+
descriptor.state === ZLinkFrameworkRuntimeState.Error
|
|
265
|
+
) {
|
|
265
266
|
continue;
|
|
266
267
|
}
|
|
267
|
-
const lease = await this.stores.ownerLeaseStore.readOwnerLease(
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
&& lease.leaseExpiresAt.getTime() > lease.storeNow.getTime()) {
|
|
268
|
+
const lease = await this.stores.ownerLeaseStore.readOwnerLease(descriptor.ownerId, signal);
|
|
269
|
+
if (
|
|
270
|
+
lease.kind === 'found' &&
|
|
271
|
+
lease.token.leaseGeneration === descriptor.leaseGeneration &&
|
|
272
|
+
lease.leaseExpiresAt.getTime() > lease.storeNow.getTime()
|
|
273
|
+
) {
|
|
274
274
|
live.push(descriptor);
|
|
275
275
|
}
|
|
276
276
|
}
|
|
@@ -280,7 +280,7 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
280
280
|
private async disconnectClients(): Promise<void> {
|
|
281
281
|
const connectionIds = await this.lane.run(() => [...this.connections.keys()]);
|
|
282
282
|
await Promise.allSettled(
|
|
283
|
-
connectionIds.map(connectionId => this.closeConnection(connectionId))
|
|
283
|
+
connectionIds.map((connectionId) => this.closeConnection(connectionId))
|
|
284
284
|
);
|
|
285
285
|
}
|
|
286
286
|
|
|
@@ -302,8 +302,9 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
302
302
|
descriptor.endpoint,
|
|
303
303
|
{
|
|
304
304
|
onTransportReady: (routingId, endpoint) => {
|
|
305
|
-
void this.handleTransportReady(connectionId, routingId, endpoint)
|
|
306
|
-
|
|
305
|
+
void this.handleTransportReady(connectionId, routingId, endpoint).catch((error) =>
|
|
306
|
+
this.locationRuntime.reportDiscoveryFailure(error)
|
|
307
|
+
);
|
|
307
308
|
},
|
|
308
309
|
onTerminated: () => {
|
|
309
310
|
void this.handleConnectionTerminated(connectionId);
|
|
@@ -325,7 +326,8 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
325
326
|
): Promise<void> {
|
|
326
327
|
const current = await this.lane.run(() => {
|
|
327
328
|
const target = this.connections.get(connectionId);
|
|
328
|
-
if (target === undefined || target.state === 'ready' || target.handshakeInFlight)
|
|
329
|
+
if (target === undefined || target.state === 'ready' || target.handshakeInFlight)
|
|
330
|
+
return undefined;
|
|
329
331
|
const dealer = target.dealer;
|
|
330
332
|
if (dealer === undefined) return undefined;
|
|
331
333
|
target.handshakeInFlight = true;
|
|
@@ -354,10 +356,12 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
354
356
|
return descriptor;
|
|
355
357
|
});
|
|
356
358
|
if (admittedDescriptor === undefined) return;
|
|
357
|
-
if (
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
359
|
+
if (
|
|
360
|
+
!this.sockets.admitClientServerConnection(
|
|
361
|
+
toDiscoveryDescriptor(admittedDescriptor, admission.normalizedEffectiveMaxMessageBytes),
|
|
362
|
+
connectionId
|
|
363
|
+
)
|
|
364
|
+
) {
|
|
361
365
|
throw new ZLinkConfigurationException(
|
|
362
366
|
`ClientServer '${current.target.descriptor.channelName}' admission was stale.`
|
|
363
367
|
);
|
|
@@ -367,8 +371,9 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
367
371
|
});
|
|
368
372
|
await this.removeSupersededConnections(current.target);
|
|
369
373
|
} catch (error) {
|
|
370
|
-
const isCurrent = await this.lane.run(
|
|
371
|
-
this.connections.get(connectionId) === current.target
|
|
374
|
+
const isCurrent = await this.lane.run(
|
|
375
|
+
() => this.connections.get(connectionId) === current.target
|
|
376
|
+
);
|
|
372
377
|
if (!isCurrent) return;
|
|
373
378
|
if (error instanceof ZLinkConfigurationException) {
|
|
374
379
|
current.target.dealer = undefined;
|
|
@@ -386,22 +391,23 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
386
391
|
return retryAdmission;
|
|
387
392
|
});
|
|
388
393
|
if (shouldRetry) {
|
|
389
|
-
void this.handleTransportReady(connectionId, _routingId, _endpoint)
|
|
390
|
-
|
|
394
|
+
void this.handleTransportReady(connectionId, _routingId, _endpoint).catch((error) =>
|
|
395
|
+
this.locationRuntime.reportDiscoveryFailure(error)
|
|
396
|
+
);
|
|
391
397
|
}
|
|
392
398
|
}
|
|
393
399
|
}
|
|
394
400
|
|
|
395
|
-
private async removeSupersededConnections(
|
|
396
|
-
admitted: ActiveClientServerTarget
|
|
397
|
-
): Promise<void> {
|
|
401
|
+
private async removeSupersededConnections(admitted: ActiveClientServerTarget): Promise<void> {
|
|
398
402
|
const stableKey = clientServerStableKey(admitted.descriptor);
|
|
399
403
|
const connections = await this.lane.run(() => [...this.connections.values()]);
|
|
400
404
|
const superseded = connections
|
|
401
|
-
.filter(
|
|
402
|
-
current
|
|
403
|
-
|
|
404
|
-
|
|
405
|
+
.filter(
|
|
406
|
+
(current) =>
|
|
407
|
+
current.connectionId !== admitted.connectionId &&
|
|
408
|
+
clientServerStableKey(current.descriptor) === stableKey
|
|
409
|
+
)
|
|
410
|
+
.map((current) => current.connectionId);
|
|
405
411
|
for (const connectionId of superseded) {
|
|
406
412
|
await this.closeConnection(connectionId);
|
|
407
413
|
}
|
|
@@ -447,10 +453,14 @@ export class ZLinkClientServerLocationRuntime {
|
|
|
447
453
|
);
|
|
448
454
|
if (result.status === ZLinkLocationWriteStatus.Stored) {
|
|
449
455
|
this.sockets.setClientServerServerDescriptor(draining, channelName);
|
|
450
|
-
await this.store.removeClientServer(
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
456
|
+
await this.store.removeClientServer(
|
|
457
|
+
{
|
|
458
|
+
channelName,
|
|
459
|
+
serverRid: descriptor.serverRid
|
|
460
|
+
},
|
|
461
|
+
owner,
|
|
462
|
+
signal
|
|
463
|
+
);
|
|
454
464
|
}
|
|
455
465
|
this.sockets.setClientServerServerDescriptor(undefined, channelName);
|
|
456
466
|
}
|
|
@@ -494,16 +504,17 @@ function sameDescriptor(
|
|
|
494
504
|
left: ZLinkClientServerServerDescriptor,
|
|
495
505
|
right: ZLinkClientServerServerDescriptor
|
|
496
506
|
): boolean {
|
|
497
|
-
return
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
507
|
+
return (
|
|
508
|
+
left.lifecycleGeneration === right.lifecycleGeneration &&
|
|
509
|
+
left.descriptorRevision === right.descriptorRevision &&
|
|
510
|
+
left.endpoint === right.endpoint &&
|
|
511
|
+
left.weight === right.weight &&
|
|
512
|
+
left.state === right.state &&
|
|
513
|
+
left.ownerId === right.ownerId &&
|
|
514
|
+
left.leaseGeneration === right.leaseGeneration
|
|
515
|
+
);
|
|
504
516
|
}
|
|
505
517
|
|
|
506
|
-
|
|
507
518
|
function toDiscoveryDescriptor(
|
|
508
519
|
descriptor: ZLinkClientServerServerDescriptor,
|
|
509
520
|
effectiveMaxMessageBytes = 0x7fff_ffff
|
|
@@ -526,53 +537,60 @@ function requestAdmission(
|
|
|
526
537
|
descriptor: ZLinkClientServerServerDescriptor,
|
|
527
538
|
timeoutMs: number
|
|
528
539
|
): Promise<ZLinkClientServerAdmission> {
|
|
529
|
-
const message = RuntimeMessage.from(
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
)
|
|
540
|
+
const message = RuntimeMessage.from(
|
|
541
|
+
encodeClientServerHello({
|
|
542
|
+
channelName: descriptor.channelName,
|
|
543
|
+
securityIdentity: descriptor.securityIdentity,
|
|
544
|
+
normalizedEffectiveMaxMessageBytes: normalizedMessageLimit(dealer.maxMessageSize)
|
|
545
|
+
})
|
|
546
|
+
);
|
|
547
|
+
return dealer.request(message, timeoutMs).then(
|
|
548
|
+
(parts) => {
|
|
549
|
+
try {
|
|
550
|
+
if (parts.length !== 1) {
|
|
551
|
+
throw new ZLinkConfigurationException(
|
|
552
|
+
`ClientServer '${descriptor.channelName}' admission reply must contain exactly one part.`
|
|
553
|
+
);
|
|
554
|
+
}
|
|
555
|
+
const first = parts[0]!;
|
|
556
|
+
const record = decodeClientServerControl(first.data());
|
|
557
|
+
if (record.kind === 'reject') {
|
|
558
|
+
throw new ZLinkConfigurationException(
|
|
559
|
+
`ClientServer '${descriptor.channelName}' admission was rejected (${record.reason}).`
|
|
560
|
+
);
|
|
561
|
+
}
|
|
562
|
+
if (record.kind !== 'admit') {
|
|
563
|
+
throw new ZLinkConfigurationException(
|
|
564
|
+
`ClientServer '${descriptor.channelName}' admission reply has an invalid command.`
|
|
565
|
+
);
|
|
566
|
+
}
|
|
567
|
+
return record.admission;
|
|
568
|
+
} finally {
|
|
569
|
+
message.close();
|
|
570
|
+
closeMessages(parts);
|
|
540
571
|
}
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
if (record.kind === 'reject') {
|
|
544
|
-
throw new ZLinkConfigurationException(
|
|
545
|
-
`ClientServer '${descriptor.channelName}' admission was rejected (${record.reason}).`
|
|
546
|
-
);
|
|
547
|
-
}
|
|
548
|
-
if (record.kind !== 'admit') {
|
|
549
|
-
throw new ZLinkConfigurationException(
|
|
550
|
-
`ClientServer '${descriptor.channelName}' admission reply has an invalid command.`
|
|
551
|
-
);
|
|
552
|
-
}
|
|
553
|
-
return record.admission;
|
|
554
|
-
} finally {
|
|
572
|
+
},
|
|
573
|
+
(error) => {
|
|
555
574
|
message.close();
|
|
556
|
-
|
|
575
|
+
throw error;
|
|
557
576
|
}
|
|
558
|
-
|
|
559
|
-
message.close();
|
|
560
|
-
throw error;
|
|
561
|
-
});
|
|
577
|
+
);
|
|
562
578
|
}
|
|
563
579
|
|
|
564
580
|
function requireMatchingAdmission(
|
|
565
581
|
expected: ZLinkClientServerServerDescriptor,
|
|
566
582
|
actual: ZLinkClientServerAdmission
|
|
567
583
|
): void {
|
|
568
|
-
if (
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
584
|
+
if (
|
|
585
|
+
actual.channelName !== expected.channelName ||
|
|
586
|
+
actual.serverRid !== String(expected.serverRid) ||
|
|
587
|
+
actual.lifecycleGeneration !== expected.lifecycleGeneration ||
|
|
588
|
+
actual.descriptorRevision !== expected.descriptorRevision ||
|
|
589
|
+
actual.weight !== expected.weight ||
|
|
590
|
+
actual.state !== expected.state ||
|
|
591
|
+
actual.securityIdentity !== expected.securityIdentity ||
|
|
592
|
+
actual.advertisedEndpoint !== expected.endpoint
|
|
593
|
+
) {
|
|
576
594
|
throw new ZLinkConfigurationException(
|
|
577
595
|
`ClientServer '${expected.channelName}' admission does not match its descriptor.`
|
|
578
596
|
);
|
|
@@ -584,7 +602,5 @@ function closeMessages(parts: readonly Message[]): void {
|
|
|
584
602
|
}
|
|
585
603
|
|
|
586
604
|
function normalizedMessageLimit(value: number): number {
|
|
587
|
-
return Number.isSafeInteger(value) && value > 0
|
|
588
|
-
? Math.min(value, 0xffff_ffff)
|
|
589
|
-
: 0x7fff_ffff;
|
|
605
|
+
return Number.isSafeInteger(value) && value > 0 ? Math.min(value, 0xffff_ffff) : 0x7fff_ffff;
|
|
590
606
|
}
|
|
@@ -63,10 +63,7 @@ export function encodeClientServerHello(value: ZLinkClientServerHello): Buffer {
|
|
|
63
63
|
encodeText8(value.channelName, 'channelName'),
|
|
64
64
|
Buffer.of(DIRECTION_CLIENT_TO_SERVER),
|
|
65
65
|
encodeText8(value.securityIdentity, 'securityIdentity'),
|
|
66
|
-
encodeNonZeroU32(
|
|
67
|
-
value.normalizedEffectiveMaxMessageBytes,
|
|
68
|
-
'normalizedEffectiveMaxMessageBytes'
|
|
69
|
-
)
|
|
66
|
+
encodeNonZeroU32(value.normalizedEffectiveMaxMessageBytes, 'normalizedEffectiveMaxMessageBytes')
|
|
70
67
|
);
|
|
71
68
|
return encodeAdmission(COMMAND_HELLO, ROLE_CLIENT, roleBody);
|
|
72
69
|
}
|
|
@@ -101,18 +98,19 @@ export function encodeClientServerLivenessAck(probeId: bigint): Buffer {
|
|
|
101
98
|
}
|
|
102
99
|
|
|
103
100
|
export function isClientServerControlFrame(frame: Uint8Array): boolean {
|
|
104
|
-
return
|
|
105
|
-
&& frame[0] === MAGIC_0
|
|
106
|
-
|
|
107
|
-
&& frame[2] === WIRE_MAJOR;
|
|
101
|
+
return (
|
|
102
|
+
frame.byteLength >= 5 && frame[0] === MAGIC_0 && frame[1] === MAGIC_1 && frame[2] === WIRE_MAJOR
|
|
103
|
+
);
|
|
108
104
|
}
|
|
109
105
|
|
|
110
106
|
export function decodeClientServerControl(frame: Uint8Array): ZLinkClientServerControlRecord {
|
|
111
107
|
if (frame.byteLength > MAX_DESCRIPTOR_BYTES) fail('ClientServer control record is oversized.');
|
|
112
108
|
const reader = new Reader(frame);
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
|
|
109
|
+
if (
|
|
110
|
+
reader.u8('magic[0]') !== MAGIC_0 ||
|
|
111
|
+
reader.u8('magic[1]') !== MAGIC_1 ||
|
|
112
|
+
reader.u8('wireMajor') !== WIRE_MAJOR
|
|
113
|
+
) {
|
|
116
114
|
fail('ClientServer control record prefix is invalid.');
|
|
117
115
|
}
|
|
118
116
|
const command = reader.u8('command');
|
|
@@ -150,9 +148,7 @@ export function decodeClientServerControl(frame: Uint8Array): ZLinkClientServerC
|
|
|
150
148
|
if (role !== ROLE_SERVER) fail('ClientServer server admission role is invalid.');
|
|
151
149
|
const admission = decodeServerAdmission(reader);
|
|
152
150
|
reader.end();
|
|
153
|
-
return command === COMMAND_ADMIT
|
|
154
|
-
? { kind: 'admit', admission }
|
|
155
|
-
: { kind: 'update', admission };
|
|
151
|
+
return command === COMMAND_ADMIT ? { kind: 'admit', admission } : { kind: 'update', admission };
|
|
156
152
|
}
|
|
157
153
|
|
|
158
154
|
function encodeLiveness(command: number, probeId: bigint): Buffer {
|
|
@@ -174,10 +170,7 @@ function encodeServerAdmission(
|
|
|
174
170
|
encodeU32(descriptor.weight),
|
|
175
171
|
Buffer.of(runtimeStateToWire(descriptor.state)),
|
|
176
172
|
encodeText8(descriptor.securityIdentity, 'securityIdentity'),
|
|
177
|
-
encodeNonZeroU32(
|
|
178
|
-
normalizedEffectiveMaxMessageBytes,
|
|
179
|
-
'normalizedEffectiveMaxMessageBytes'
|
|
180
|
-
),
|
|
173
|
+
encodeNonZeroU32(normalizedEffectiveMaxMessageBytes, 'normalizedEffectiveMaxMessageBytes'),
|
|
181
174
|
encodeText16(descriptor.endpoint, 'advertisedEndpoint')
|
|
182
175
|
);
|
|
183
176
|
return encodeAdmission(command, ROLE_SERVER, roleBody);
|
|
@@ -204,9 +197,7 @@ function decodeClientHello(reader: Reader): ZLinkClientServerHello {
|
|
|
204
197
|
return {
|
|
205
198
|
channelName,
|
|
206
199
|
securityIdentity: reader.text8('securityIdentity'),
|
|
207
|
-
normalizedEffectiveMaxMessageBytes: reader.nonZeroU32(
|
|
208
|
-
'normalizedEffectiveMaxMessageBytes'
|
|
209
|
-
)
|
|
200
|
+
normalizedEffectiveMaxMessageBytes: reader.nonZeroU32('normalizedEffectiveMaxMessageBytes')
|
|
210
201
|
};
|
|
211
202
|
}
|
|
212
203
|
|
|
@@ -228,9 +219,7 @@ function decodeServerAdmission(reader: Reader): ZLinkClientServerAdmission {
|
|
|
228
219
|
weight,
|
|
229
220
|
state: runtimeStateFromWire(reader.u8('runtimeState')),
|
|
230
221
|
securityIdentity: reader.text8('securityIdentity'),
|
|
231
|
-
normalizedEffectiveMaxMessageBytes: reader.nonZeroU32(
|
|
232
|
-
'normalizedEffectiveMaxMessageBytes'
|
|
233
|
-
),
|
|
222
|
+
normalizedEffectiveMaxMessageBytes: reader.nonZeroU32('normalizedEffectiveMaxMessageBytes'),
|
|
234
223
|
advertisedEndpoint: normalizeEndpoint(reader.text16('advertisedEndpoint'))
|
|
235
224
|
};
|
|
236
225
|
}
|
|
@@ -278,25 +267,37 @@ function encodeText16(value: string, field: string): Buffer {
|
|
|
278
267
|
|
|
279
268
|
function runtimeStateToWire(value: ZLinkFrameworkRuntimeState): number {
|
|
280
269
|
switch (value) {
|
|
281
|
-
case ZLinkFrameworkRuntimeState.Preparing:
|
|
282
|
-
|
|
270
|
+
case ZLinkFrameworkRuntimeState.Preparing:
|
|
271
|
+
return 0;
|
|
272
|
+
case ZLinkFrameworkRuntimeState.Serving:
|
|
273
|
+
return 1;
|
|
283
274
|
case ZLinkFrameworkRuntimeState.Relocating:
|
|
284
275
|
case ZLinkFrameworkRuntimeState.Relocated:
|
|
285
|
-
case ZLinkFrameworkRuntimeState.Draining:
|
|
286
|
-
|
|
287
|
-
case ZLinkFrameworkRuntimeState.
|
|
288
|
-
|
|
276
|
+
case ZLinkFrameworkRuntimeState.Draining:
|
|
277
|
+
return 2;
|
|
278
|
+
case ZLinkFrameworkRuntimeState.Stopped:
|
|
279
|
+
return 3;
|
|
280
|
+
case ZLinkFrameworkRuntimeState.Error:
|
|
281
|
+
return 4;
|
|
282
|
+
default:
|
|
283
|
+
fail('ClientServer runtime state is invalid.');
|
|
289
284
|
}
|
|
290
285
|
}
|
|
291
286
|
|
|
292
287
|
function runtimeStateFromWire(value: number): ZLinkFrameworkRuntimeState {
|
|
293
288
|
switch (value) {
|
|
294
|
-
case 0:
|
|
295
|
-
|
|
296
|
-
case
|
|
297
|
-
|
|
298
|
-
case
|
|
299
|
-
|
|
289
|
+
case 0:
|
|
290
|
+
return ZLinkFrameworkRuntimeState.Preparing;
|
|
291
|
+
case 1:
|
|
292
|
+
return ZLinkFrameworkRuntimeState.Serving;
|
|
293
|
+
case 2:
|
|
294
|
+
return ZLinkFrameworkRuntimeState.Draining;
|
|
295
|
+
case 3:
|
|
296
|
+
return ZLinkFrameworkRuntimeState.Stopped;
|
|
297
|
+
case 4:
|
|
298
|
+
return ZLinkFrameworkRuntimeState.Error;
|
|
299
|
+
default:
|
|
300
|
+
fail('ClientServer runtime state is invalid.');
|
|
300
301
|
}
|
|
301
302
|
}
|
|
302
303
|
|
|
@@ -108,10 +108,11 @@ function normalizeDispatchFailure(event: ZLinkRuntimeDispatchFailure): ZLinkRunt
|
|
|
108
108
|
|
|
109
109
|
function channelDropReason(event: ZLinkRuntimeDispatchFailure): string | undefined {
|
|
110
110
|
if (
|
|
111
|
-
event.action !== ZLinkDispatchErrorAction.Drop
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
)
|
|
111
|
+
event.action !== ZLinkDispatchErrorAction.Drop ||
|
|
112
|
+
(event.surface !== ZLinkDispatchErrorSurface.Channel &&
|
|
113
|
+
event.surface !== ZLinkDispatchErrorSurface.RouteMeshChannel)
|
|
114
|
+
)
|
|
115
|
+
return undefined;
|
|
115
116
|
switch (event.reason) {
|
|
116
117
|
case ZLinkDispatchErrorReason.HandlerMissing:
|
|
117
118
|
return 'no_handler';
|
|
@@ -145,10 +146,12 @@ function dispatchErrorInfo(event: ZLinkRuntimeDispatchFailure): {
|
|
|
145
146
|
return {
|
|
146
147
|
errorType: event.error.name,
|
|
147
148
|
errorMessage: event.error.message,
|
|
148
|
-
...(cause === event.error
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
...(cause === event.error
|
|
150
|
+
? {}
|
|
151
|
+
: {
|
|
152
|
+
errorCauseType: cause instanceof Error ? cause.name : typeof cause,
|
|
153
|
+
errorCauseMessage: cause instanceof Error ? cause.message : String(cause)
|
|
154
|
+
})
|
|
152
155
|
};
|
|
153
156
|
}
|
|
154
157
|
return { errorType: typeof event.error, errorMessage: String(event.error) };
|