@zlink-systems/framework 0.21.0 → 0.23.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/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- 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 +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- 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 +160 -130
- 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/contracts/index.d.ts +1 -0
- 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.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- 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 +12 -20
- 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 +46 -42
- 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.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- 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/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- 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 -27
- 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.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- 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-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- 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 +245 -228
- 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/protocol/service_wire_pilot_codec.generated.js +20 -18
- 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 +209 -220
- 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.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -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 +79 -86
- 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 +17 -15
- 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 +2 -3
- 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 +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- 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.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- 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 +2 -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 +2 -2
- 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 +142 -134
- 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 +1 -32
- 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 +353 -326
- 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 +77 -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 +370 -390
- 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 +44 -44
- 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 +218 -206
- 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 +12 -47
- 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/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- 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 +107 -79
- 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 -55
- 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 +364 -396
- 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 +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -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 +19 -18
- 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 +595 -564
- 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 +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -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 +235 -222
- 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 +129 -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 +13 -18
- 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 +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- 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 +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -14,9 +14,7 @@ import {
|
|
|
14
14
|
ZLinkDispatchMessageKind
|
|
15
15
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
16
16
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
17
|
-
import type {
|
|
18
|
-
ZLinkBackendReceived as BackendReceived
|
|
19
|
-
} from '../backend/runtime-values';
|
|
17
|
+
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
20
18
|
import type { Message } from '../../contracts/Common/Message';
|
|
21
19
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
22
20
|
import {
|
|
@@ -41,11 +39,7 @@ import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
|
41
39
|
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
42
40
|
import { zlinkMetadataByteLength, zlinkSerialWorkOptions } from '../execution/serial-work-size';
|
|
43
41
|
import { REMOTE_ACTOR_JOIN_PACKET } from './spot-remote-codec';
|
|
44
|
-
import {
|
|
45
|
-
appendRouteReplyParts,
|
|
46
|
-
hasReplyToken,
|
|
47
|
-
submitRouteReply
|
|
48
|
-
} from './spot-route-replies';
|
|
42
|
+
import { appendRouteReplyParts, hasReplyToken, submitRouteReply } from './spot-route-replies';
|
|
49
43
|
import { createInboundFlow, runWithFlow } from '../diagnostics/flow-context';
|
|
50
44
|
import {
|
|
51
45
|
ZLinkFrameworkInternalErrorKind,
|
|
@@ -115,9 +109,7 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
115
109
|
}
|
|
116
110
|
const registrations = this.options.packetHandlers.get(envelope.packetName ?? '');
|
|
117
111
|
const replyable = hasReplyToken(received.replyToken);
|
|
118
|
-
const action = replyable
|
|
119
|
-
? ZLinkDispatchErrorAction.ReplyError
|
|
120
|
-
: ZLinkDispatchErrorAction.Drop;
|
|
112
|
+
const action = replyable ? ZLinkDispatchErrorAction.ReplyError : ZLinkDispatchErrorAction.Drop;
|
|
121
113
|
if (registrations === undefined || registrations.length === 0) {
|
|
122
114
|
this.options.dispatchErrors?.report({
|
|
123
115
|
surface: ZLinkDispatchErrorSurface.SpotRoute,
|
|
@@ -136,14 +128,16 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
136
128
|
// D5: this error is generated by the framework itself, so the reply
|
|
137
129
|
// carries the framework-origin marker (never set for application
|
|
138
130
|
// handler failures).
|
|
139
|
-
submitRouteReply(
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
131
|
+
submitRouteReply(
|
|
132
|
+
appendRouteReplyParts(
|
|
133
|
+
received.reply(),
|
|
134
|
+
encodeChannelErrorReplyParts(
|
|
135
|
+
envelope.header,
|
|
136
|
+
`SPOT route handler not found: ${envelope.packetName}`,
|
|
137
|
+
FRAMEWORK_ORIGIN_REPLY_METADATA
|
|
138
|
+
)
|
|
145
139
|
)
|
|
146
|
-
)
|
|
140
|
+
);
|
|
147
141
|
}
|
|
148
142
|
return true;
|
|
149
143
|
}
|
|
@@ -158,43 +152,56 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
158
152
|
let response: unknown;
|
|
159
153
|
const applicationClaim = this.options.claimApplicationWork?.();
|
|
160
154
|
try {
|
|
161
|
-
await runWithFlow(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
155
|
+
await runWithFlow(
|
|
156
|
+
createInboundFlow(
|
|
157
|
+
envelope.header.flowId,
|
|
158
|
+
envelope.header.flowOrigin,
|
|
159
|
+
this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
|
|
160
|
+
undefined
|
|
161
|
+
),
|
|
162
|
+
() =>
|
|
163
|
+
this.options.serial.execute(
|
|
164
|
+
async () => {
|
|
165
|
+
const spot = this.options.getTarget();
|
|
166
|
+
// Keep the wire payload raw until this Spot has acquired its
|
|
167
|
+
// execution authority. A rejected or superseded work item must not
|
|
168
|
+
// pay the deserialization cost.
|
|
169
|
+
const payload = decodeChannelPayload(envelope, this.channelCodecs());
|
|
170
|
+
for (const registration of registrations) {
|
|
171
|
+
const handler = await resolveLifecycleHandler(
|
|
172
|
+
spot,
|
|
173
|
+
registration.handlerType as Type<
|
|
174
|
+
| ZLinkSpotPacketHandler<ZLinkSpot, unknown>
|
|
175
|
+
| ZLinkSpotRequestHandler<ZLinkSpot, unknown, unknown>
|
|
176
|
+
>,
|
|
177
|
+
this.options.providerResolver
|
|
178
|
+
);
|
|
179
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
180
|
+
response = await handler.handle(spot, payload, context);
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
zlinkSerialWorkOptions(
|
|
184
|
+
envelope.payload.byteLength,
|
|
185
|
+
zlinkMetadataByteLength(envelope.header.metadata)
|
|
186
|
+
)
|
|
187
|
+
)
|
|
188
|
+
);
|
|
185
189
|
} finally {
|
|
186
190
|
applicationClaim?.close();
|
|
187
191
|
}
|
|
188
192
|
if (replyable) {
|
|
189
|
-
submitRouteReply(
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
+
submitRouteReply(
|
|
194
|
+
appendRouteReplyParts(
|
|
195
|
+
received.reply(),
|
|
196
|
+
encodeChannelReplyParts(envelope.header, response)
|
|
197
|
+
)
|
|
198
|
+
);
|
|
193
199
|
}
|
|
194
200
|
return true;
|
|
195
201
|
} catch (error) {
|
|
196
|
-
const payloadDecodeFailed =
|
|
197
|
-
|
|
202
|
+
const payloadDecodeFailed =
|
|
203
|
+
error instanceof ZLinkFrameworkException &&
|
|
204
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed;
|
|
198
205
|
this.options.dispatchErrors?.report({
|
|
199
206
|
surface: ZLinkDispatchErrorSurface.SpotRoute,
|
|
200
207
|
messageKind: replyable ? ZLinkDispatchMessageKind.Request : ZLinkDispatchMessageKind.Send,
|
|
@@ -215,14 +222,16 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
215
222
|
// D5: only a decode failure created by the framework's own payload
|
|
216
223
|
// decoding carries the framework-origin marker; application handler
|
|
217
224
|
// failures never do.
|
|
218
|
-
submitRouteReply(
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
225
|
+
submitRouteReply(
|
|
226
|
+
appendRouteReplyParts(
|
|
227
|
+
received.reply(),
|
|
228
|
+
encodeChannelErrorReplyParts(
|
|
229
|
+
envelope.header,
|
|
230
|
+
error,
|
|
231
|
+
payloadDecodeFailed ? FRAMEWORK_ORIGIN_REPLY_METADATA : undefined
|
|
232
|
+
)
|
|
224
233
|
)
|
|
225
|
-
)
|
|
234
|
+
);
|
|
226
235
|
}
|
|
227
236
|
return true;
|
|
228
237
|
}
|
|
@@ -232,8 +241,11 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
232
241
|
received: BackendReceived,
|
|
233
242
|
envelope: ZLinkSpotDirectEnvelope
|
|
234
243
|
): Promise<void> {
|
|
235
|
-
const replyable =
|
|
236
|
-
|
|
244
|
+
const replyable =
|
|
245
|
+
envelope.kind === ZLinkChannelMessageKind.Request && hasReplyToken(received.replyToken);
|
|
246
|
+
const messageKind = replyable
|
|
247
|
+
? ZLinkDispatchMessageKind.Request
|
|
248
|
+
: ZLinkDispatchMessageKind.Send;
|
|
237
249
|
const action = replyable ? ZLinkDispatchErrorAction.ReplyError : ZLinkDispatchErrorAction.Drop;
|
|
238
250
|
const registrations = this.options.packetHandlers.get(envelope.packetName ?? '');
|
|
239
251
|
if (registrations === undefined || registrations.length === 0) {
|
|
@@ -247,39 +259,49 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
247
259
|
});
|
|
248
260
|
if (replyable) {
|
|
249
261
|
submitRouteReply(
|
|
250
|
-
received
|
|
251
|
-
.
|
|
262
|
+
received
|
|
263
|
+
.reply()
|
|
264
|
+
.message(
|
|
265
|
+
encodeSpotDirectReply(
|
|
266
|
+
false,
|
|
267
|
+
undefined,
|
|
268
|
+
`SPOT route handler not found: ${envelope.packetName}`
|
|
269
|
+
)
|
|
270
|
+
)
|
|
252
271
|
);
|
|
253
272
|
}
|
|
254
273
|
return;
|
|
255
274
|
}
|
|
256
275
|
try {
|
|
257
276
|
let response: unknown;
|
|
258
|
-
await this.options.serial.execute(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
277
|
+
await this.options.serial.execute(
|
|
278
|
+
async () => {
|
|
279
|
+
const spot = this.options.getTarget();
|
|
280
|
+
for (const registration of registrations) {
|
|
281
|
+
const handler = await resolveLifecycleHandler(
|
|
282
|
+
spot,
|
|
283
|
+
registration.handlerType as Type<
|
|
284
|
+
| ZLinkSpotPacketHandler<ZLinkSpot, unknown>
|
|
285
|
+
| ZLinkSpotRequestHandler<ZLinkSpot, unknown, unknown>
|
|
286
|
+
>,
|
|
287
|
+
this.options.providerResolver
|
|
288
|
+
);
|
|
289
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
290
|
+
response = await handler.handle(spot, envelope.payload, {
|
|
291
|
+
channelName: envelope.channelName,
|
|
292
|
+
packetName: envelope.packetName!,
|
|
293
|
+
metadata: zlinkMessageMetadata(envelope.metadata),
|
|
294
|
+
correlationId: undefined
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
zlinkSerialWorkOptions(
|
|
299
|
+
received.parts[0]?.size() ?? 0,
|
|
300
|
+
zlinkMetadataByteLength(envelope.metadata)
|
|
301
|
+
)
|
|
302
|
+
);
|
|
278
303
|
if (replyable) {
|
|
279
|
-
submitRouteReply(
|
|
280
|
-
received.reply()
|
|
281
|
-
.message(encodeSpotDirectReply(true, response))
|
|
282
|
-
);
|
|
304
|
+
submitRouteReply(received.reply().message(encodeSpotDirectReply(true, response)));
|
|
283
305
|
}
|
|
284
306
|
} catch (error) {
|
|
285
307
|
this.options.dispatchErrors?.report({
|
|
@@ -293,8 +315,15 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
293
315
|
});
|
|
294
316
|
if (replyable) {
|
|
295
317
|
submitRouteReply(
|
|
296
|
-
received
|
|
297
|
-
.
|
|
318
|
+
received
|
|
319
|
+
.reply()
|
|
320
|
+
.message(
|
|
321
|
+
encodeSpotDirectReply(
|
|
322
|
+
false,
|
|
323
|
+
undefined,
|
|
324
|
+
error instanceof Error ? error.message : String(error)
|
|
325
|
+
)
|
|
326
|
+
)
|
|
298
327
|
);
|
|
299
328
|
return;
|
|
300
329
|
}
|
|
@@ -324,16 +353,17 @@ function decodeSpotDirectEnvelope(parts: readonly Message[]): ZLinkSpotDirectEnv
|
|
|
324
353
|
};
|
|
325
354
|
if (
|
|
326
355
|
decoded.marker !== SPOT_DIRECT_ENVELOPE ||
|
|
327
|
-
(decoded.kind !== ZLinkChannelMessageKind.Request &&
|
|
356
|
+
(decoded.kind !== ZLinkChannelMessageKind.Request &&
|
|
357
|
+
decoded.kind !== ZLinkChannelMessageKind.Command) ||
|
|
328
358
|
typeof decoded.channelName !== 'string'
|
|
329
359
|
) {
|
|
330
360
|
return undefined;
|
|
331
361
|
}
|
|
332
362
|
const metadata = decoded.metadata ?? {};
|
|
333
363
|
if (
|
|
334
|
-
typeof metadata !== 'object'
|
|
335
|
-
|
|
336
|
-
|
|
364
|
+
typeof metadata !== 'object' ||
|
|
365
|
+
Array.isArray(metadata) ||
|
|
366
|
+
!Object.values(metadata).every((value) => typeof value === 'string')
|
|
337
367
|
) {
|
|
338
368
|
return undefined;
|
|
339
369
|
}
|
|
@@ -350,10 +380,14 @@ function decodeSpotDirectEnvelope(parts: readonly Message[]): ZLinkSpotDirectEnv
|
|
|
350
380
|
}
|
|
351
381
|
|
|
352
382
|
function encodeSpotDirectReply(ok: boolean, response?: unknown, error?: string): Message {
|
|
353
|
-
return RuntimeMessage.fromOwned(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
383
|
+
return RuntimeMessage.fromOwned(
|
|
384
|
+
Buffer.from(
|
|
385
|
+
JSON.stringify({
|
|
386
|
+
marker: SPOT_DIRECT_ENVELOPE,
|
|
387
|
+
ok,
|
|
388
|
+
response,
|
|
389
|
+
error
|
|
390
|
+
})
|
|
391
|
+
)
|
|
392
|
+
);
|
|
359
393
|
}
|
|
@@ -34,15 +34,11 @@ export function submitRoutePayloadReply(
|
|
|
34
34
|
payload: unknown
|
|
35
35
|
): boolean {
|
|
36
36
|
if (envelope === undefined) {
|
|
37
|
-
return submitRouteReply(
|
|
38
|
-
received.reply()
|
|
39
|
-
.message(Buffer.from(JSON.stringify(payload)))
|
|
40
|
-
);
|
|
37
|
+
return submitRouteReply(received.reply().message(Buffer.from(JSON.stringify(payload))));
|
|
41
38
|
}
|
|
42
|
-
return submitRouteReply(
|
|
43
|
-
received.reply(),
|
|
44
|
-
|
|
45
|
-
));
|
|
39
|
+
return submitRouteReply(
|
|
40
|
+
appendRouteReplyParts(received.reply(), encodeChannelReplyParts(envelope.header, payload))
|
|
41
|
+
);
|
|
46
42
|
}
|
|
47
43
|
|
|
48
44
|
export function submitSpotRouteBridgeReply(
|
|
@@ -59,15 +55,14 @@ export function submitRoutedActorJoinReply(
|
|
|
59
55
|
payload: unknown
|
|
60
56
|
): boolean {
|
|
61
57
|
if (decoded.raw) {
|
|
62
|
-
return submitRouteReply(
|
|
63
|
-
received.reply()
|
|
64
|
-
.message(Buffer.from(JSON.stringify(payload)))
|
|
65
|
-
);
|
|
58
|
+
return submitRouteReply(received.reply().message(Buffer.from(JSON.stringify(payload))));
|
|
66
59
|
}
|
|
67
|
-
return submitRouteReply(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
return submitRouteReply(
|
|
61
|
+
appendRouteReplyParts(
|
|
62
|
+
received.reply(),
|
|
63
|
+
encodeChannelReplyParts(requireRoutedActorJoinEnvelope(decoded).header, payload)
|
|
64
|
+
)
|
|
65
|
+
);
|
|
71
66
|
}
|
|
72
67
|
|
|
73
68
|
export function submitRoutedActorJoinError(
|
|
@@ -83,13 +78,15 @@ export function submitRoutedActorJoinError(
|
|
|
83
78
|
actorGeneration: '0'
|
|
84
79
|
});
|
|
85
80
|
}
|
|
86
|
-
return submitRouteReply(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
return submitRouteReply(
|
|
82
|
+
appendRouteReplyParts(
|
|
83
|
+
received.reply(),
|
|
84
|
+
encodeChannelErrorReplyParts(
|
|
85
|
+
requireRoutedActorJoinEnvelope(decoded).header,
|
|
86
|
+
error instanceof Error ? error.message : String(error)
|
|
87
|
+
)
|
|
91
88
|
)
|
|
92
|
-
)
|
|
89
|
+
);
|
|
93
90
|
}
|
|
94
91
|
|
|
95
92
|
export function appendRouteReplyParts(
|
|
@@ -120,7 +117,9 @@ function requireRoutedActorJoinEnvelope(
|
|
|
120
117
|
}
|
|
121
118
|
|
|
122
119
|
function isNativeBadAddress(error: unknown): boolean {
|
|
123
|
-
return
|
|
120
|
+
return (
|
|
121
|
+
typeof error === 'object' &&
|
|
124
122
|
error !== null &&
|
|
125
|
-
Number((error as { nativeErrno?: unknown }).nativeErrno) === 14
|
|
123
|
+
Number((error as { nativeErrno?: unknown }).nativeErrno) === 14
|
|
124
|
+
);
|
|
126
125
|
}
|
|
@@ -9,7 +9,8 @@ export interface ZLinkSpotRouteBridgeReplyPayload {
|
|
|
9
9
|
readonly actorPacketTarget?: ZLinkRemoteActorPacketTargetWire;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export function encodeSpotRouteBridgeReply(
|
|
12
|
+
export function encodeSpotRouteBridgeReply(
|
|
13
|
+
payload: ZLinkSpotRouteBridgeReplyPayload
|
|
14
|
+
): ZLinkSpotRouteBridgeReplyPayload {
|
|
13
15
|
return payload;
|
|
14
16
|
}
|
|
15
|
-
|
|
@@ -26,10 +26,7 @@ import {
|
|
|
26
26
|
type ZLinkRoutedActorTransferProvider,
|
|
27
27
|
type ZLinkRemoteActorJoinWirePayload
|
|
28
28
|
} from './spot-remote-codec';
|
|
29
|
-
import {
|
|
30
|
-
submitRoutedActorJoinError,
|
|
31
|
-
submitRoutedActorJoinReply
|
|
32
|
-
} from './spot-route-replies';
|
|
29
|
+
import { submitRoutedActorJoinError, submitRoutedActorJoinReply } from './spot-route-replies';
|
|
33
30
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
34
31
|
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
35
32
|
|
|
@@ -107,8 +104,9 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
107
104
|
const existing = this.pending.get(decoded.transferId);
|
|
108
105
|
if (existing !== undefined) {
|
|
109
106
|
this.requireMatchingTransfer(existing, decoded);
|
|
110
|
-
const reply = existing.admissionReply ?? await existing.admissionTask;
|
|
111
|
-
if (reply === undefined)
|
|
107
|
+
const reply = existing.admissionReply ?? (await existing.admissionTask);
|
|
108
|
+
if (reply === undefined)
|
|
109
|
+
throw new Error(`Remote actor transfer '${decoded.transferId}' has no admission result.`);
|
|
112
110
|
submitRoutedActorJoinReply(received, decoded, reply);
|
|
113
111
|
return;
|
|
114
112
|
}
|
|
@@ -138,8 +136,14 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
138
136
|
throw new Error('Remote actor transfer commit requires a transfer id.');
|
|
139
137
|
}
|
|
140
138
|
const pending = this.pending.get(transferId);
|
|
141
|
-
if (
|
|
142
|
-
|
|
139
|
+
if (
|
|
140
|
+
pending === undefined ||
|
|
141
|
+
pending.actorId !== decoded.actorId ||
|
|
142
|
+
pending.actorType !== decoded.actorType
|
|
143
|
+
) {
|
|
144
|
+
throw new Error(
|
|
145
|
+
`Remote actor transfer '${transferId}' does not have a matching admission.`
|
|
146
|
+
);
|
|
143
147
|
}
|
|
144
148
|
if (pending.phase === 'rejected') {
|
|
145
149
|
throw new Error(`Remote actor transfer '${transferId}' admission was rejected.`);
|
|
@@ -152,7 +156,7 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
152
156
|
if (pending.deadline !== undefined) clearTimeout(pending.deadline);
|
|
153
157
|
pending.commitTask = this.evaluateCommit(decoded, transferId, pending);
|
|
154
158
|
}
|
|
155
|
-
const commitReply = pending.commitReply ?? await pending.commitTask;
|
|
159
|
+
const commitReply = pending.commitReply ?? (await pending.commitTask);
|
|
156
160
|
submitRoutedActorJoinReply(received, decoded, commitReply);
|
|
157
161
|
} catch (error) {
|
|
158
162
|
submitRoutedActorJoinError(received, decoded, error);
|
|
@@ -167,15 +171,17 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
167
171
|
): Promise<Record<string, unknown>> {
|
|
168
172
|
try {
|
|
169
173
|
const response = await this.runJoinCallback(decoded, decoded.request);
|
|
170
|
-
const reply =
|
|
171
|
-
|
|
172
|
-
|
|
174
|
+
const reply =
|
|
175
|
+
response.reply === undefined
|
|
176
|
+
? undefined
|
|
177
|
+
: encodeFrameworkPayloadMessage(response.reply, this.options.messageSerializers);
|
|
173
178
|
try {
|
|
174
179
|
const actorRef = decoded.actorRef;
|
|
175
180
|
const admissionReply = {
|
|
176
181
|
accepted: response.accepted,
|
|
177
182
|
actorNodeRid: String(actorRef?.nodeRid ?? ''),
|
|
178
|
-
actorNodeRidHex:
|
|
183
|
+
actorNodeRidHex:
|
|
184
|
+
actorRef?.nodeRid === undefined ? undefined : encodeRoutingIdHex(actorRef.nodeRid),
|
|
179
185
|
actorId: decoded.actorId,
|
|
180
186
|
actorGeneration: (actorRef?.generation ?? 0n).toString(),
|
|
181
187
|
reply: reply?.data().toString('base64')
|
|
@@ -199,7 +205,10 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
199
205
|
pending: ZLinkPendingRoutedActorTransfer
|
|
200
206
|
): Promise<Record<string, unknown>> {
|
|
201
207
|
try {
|
|
202
|
-
if (
|
|
208
|
+
if (
|
|
209
|
+
decoded.transferState === undefined ||
|
|
210
|
+
this.options.routedActorTransferProvider === undefined
|
|
211
|
+
) {
|
|
203
212
|
throw new Error('Remote actor transfer commit cannot materialize the target actor.');
|
|
204
213
|
}
|
|
205
214
|
const { actor, actorRef } = await this.options.routedActorTransferProvider(
|
|
@@ -210,7 +219,8 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
210
219
|
decoded.actorEntryNodeRid,
|
|
211
220
|
decoded.remoteBoundSessionTarget
|
|
212
221
|
);
|
|
213
|
-
const handoffResults =
|
|
222
|
+
const handoffResults =
|
|
223
|
+
(await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog)) ?? [];
|
|
214
224
|
const commitReply = {
|
|
215
225
|
accepted: true,
|
|
216
226
|
actorNodeRid: String(actorRef.nodeRid),
|
|
@@ -258,18 +268,17 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
258
268
|
decoded: ZLinkDecodedRemoteActorJoinRequest
|
|
259
269
|
): void {
|
|
260
270
|
if (pending.actorId !== decoded.actorId || pending.actorType !== decoded.actorType) {
|
|
261
|
-
throw new Error(
|
|
271
|
+
throw new Error(
|
|
272
|
+
`Remote actor transfer '${decoded.transferId}' identity does not match its first request.`
|
|
273
|
+
);
|
|
262
274
|
}
|
|
263
275
|
}
|
|
264
276
|
|
|
265
277
|
private scheduleExpiration(transferId: string, pending: ZLinkPendingRoutedActorTransfer): void {
|
|
266
278
|
if (pending.deadline !== undefined) clearTimeout(pending.deadline);
|
|
267
|
-
pending.deadline = setTimeout(
|
|
268
|
-
()
|
|
269
|
-
|
|
270
|
-
},
|
|
271
|
-
this.options.pendingAdmissionTimeoutMs ?? 30_000
|
|
272
|
-
);
|
|
279
|
+
pending.deadline = setTimeout(() => {
|
|
280
|
+
if (this.pending.get(transferId) === pending) this.pending.delete(transferId);
|
|
281
|
+
}, this.options.pendingAdmissionTimeoutMs ?? 30_000);
|
|
273
282
|
pending.deadline.unref();
|
|
274
283
|
}
|
|
275
284
|
|
|
@@ -289,10 +298,7 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
289
298
|
}
|
|
290
299
|
try {
|
|
291
300
|
const payload = JSON.parse(parts[0].data().toString()) as ZLinkRemoteActorJoinWirePayload;
|
|
292
|
-
if (
|
|
293
|
-
payload.packetName !== REMOTE_ACTOR_JOIN_PACKET ||
|
|
294
|
-
!isRemoteActorJoinPayload(payload)
|
|
295
|
-
) {
|
|
301
|
+
if (payload.packetName !== REMOTE_ACTOR_JOIN_PACKET || !isRemoteActorJoinPayload(payload)) {
|
|
296
302
|
return undefined;
|
|
297
303
|
}
|
|
298
304
|
return decodeRemoteActorJoinPayload(
|
|
@@ -306,7 +312,11 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
306
312
|
}
|
|
307
313
|
}
|
|
308
314
|
try {
|
|
309
|
-
const envelope = decodeChannelEnvelope(
|
|
315
|
+
const envelope = decodeChannelEnvelope(
|
|
316
|
+
parts,
|
|
317
|
+
undefined,
|
|
318
|
+
this.options.flowEnabled?.() ?? true
|
|
319
|
+
);
|
|
310
320
|
if (envelope.packetName !== REMOTE_ACTOR_JOIN_PACKET) {
|
|
311
321
|
return undefined;
|
|
312
322
|
}
|
|
@@ -6,11 +6,7 @@ import {
|
|
|
6
6
|
decodeRemoteBoundSessionResponse,
|
|
7
7
|
decodeRemoteBoundSessionSend
|
|
8
8
|
} from './spot-remote-route-codec';
|
|
9
|
-
import {
|
|
10
|
-
hasReplyToken,
|
|
11
|
-
submitRoutePayloadReply,
|
|
12
|
-
submitRouteReply
|
|
13
|
-
} from './spot-route-replies';
|
|
9
|
+
import { hasReplyToken, submitRoutePayloadReply, submitRouteReply } from './spot-route-replies';
|
|
14
10
|
import type { ZLinkActorResponseOptions } from './spot-actor-packet-dispatch';
|
|
15
11
|
import { createInboundFlow, runWithFlow } from '../diagnostics/flow-context';
|
|
16
12
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
@@ -61,16 +57,18 @@ export class ZLinkSpotRoutedBoundSessionDispatch {
|
|
|
61
57
|
createInboundFlow(
|
|
62
58
|
boundSessionSend.flowId ?? boundSessionSend.envelope?.header.flowId,
|
|
63
59
|
boundSessionSend.flowOrigin ?? boundSessionSend.envelope?.header.flowOrigin,
|
|
64
|
-
this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
60
|
+
this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
|
|
61
|
+
undefined
|
|
65
62
|
),
|
|
66
|
-
() =>
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
() =>
|
|
64
|
+
this.options.routedBoundSessionReceiver?.(
|
|
65
|
+
boundSessionSend.actorId,
|
|
66
|
+
boundSessionSend.message,
|
|
67
|
+
boundSessionSend.packetName,
|
|
68
|
+
boundSessionSend.metadata,
|
|
69
|
+
boundSessionSend.actorRef,
|
|
70
|
+
boundSessionSend.actorPacketTarget
|
|
71
|
+
)
|
|
74
72
|
);
|
|
75
73
|
if (hasReplyToken(received.replyToken)) {
|
|
76
74
|
submitRoutePayloadReply(received, boundSessionSend.envelope, { ok: true });
|
|
@@ -124,9 +122,6 @@ export class ZLinkSpotRoutedBoundSessionDispatch {
|
|
|
124
122
|
if (!hasReplyToken(received.replyToken)) {
|
|
125
123
|
return;
|
|
126
124
|
}
|
|
127
|
-
submitRouteReply(
|
|
128
|
-
received.reply()
|
|
129
|
-
.message(Buffer.from(JSON.stringify({ ok: true })))
|
|
130
|
-
);
|
|
125
|
+
submitRouteReply(received.reply().message(Buffer.from(JSON.stringify({ ok: true }))));
|
|
131
126
|
}
|
|
132
127
|
}
|