@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
|
@@ -10,10 +10,7 @@ import type {
|
|
|
10
10
|
ZLinkMessageSerializer,
|
|
11
11
|
ZLinkStream
|
|
12
12
|
} from '../../contracts';
|
|
13
|
-
import {
|
|
14
|
-
ZLinkSubmitStatus,
|
|
15
|
-
type ZLinkSubmitResult
|
|
16
|
-
} from '../messaging/submission-result';
|
|
13
|
+
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
17
14
|
import type { Message } from '../../contracts/Common/Message';
|
|
18
15
|
import { throwIfAborted } from '../abort';
|
|
19
16
|
import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
|
|
@@ -36,6 +33,8 @@ import {
|
|
|
36
33
|
type ZLinkMeshCompletionTable
|
|
37
34
|
} from '../backend/mesh-completion-table';
|
|
38
35
|
import {
|
|
36
|
+
encodeActorBoundFrame,
|
|
37
|
+
encodeActorUnboundFrame,
|
|
39
38
|
encodeSessionClosingFrame,
|
|
40
39
|
encodeStreamControlFrame,
|
|
41
40
|
ZLinkStreamCloseReasonCode
|
|
@@ -54,15 +53,17 @@ export interface ZLinkNativeSessionRoute {
|
|
|
54
53
|
readonly completions: ZLinkMeshCompletionTable;
|
|
55
54
|
}
|
|
56
55
|
|
|
56
|
+
interface ZLinkManagedActorBinding {
|
|
57
|
+
readonly actor: ZLinkBackendActorRef;
|
|
58
|
+
readonly bindingGeneration?: bigint;
|
|
59
|
+
readonly route?: ZLinkNativeSessionRoute;
|
|
60
|
+
}
|
|
61
|
+
|
|
57
62
|
export class ZLinkManagedStream implements ZLinkStream {
|
|
58
63
|
private currentLocalAddr: string | undefined;
|
|
59
64
|
private currentRemoteAddr: string | undefined;
|
|
60
65
|
private transportClosed = false;
|
|
61
|
-
private readonly nativeActorBindings = new Map<string,
|
|
62
|
-
readonly actor: ZLinkBackendActorRef;
|
|
63
|
-
readonly bindingGeneration: bigint;
|
|
64
|
-
readonly route?: ZLinkNativeSessionRoute;
|
|
65
|
-
}>();
|
|
66
|
+
private readonly nativeActorBindings = new Map<string, ZLinkManagedActorBinding>();
|
|
66
67
|
|
|
67
68
|
constructor(
|
|
68
69
|
private readonly socket: ZLinkBackendStreamSocket,
|
|
@@ -138,12 +139,11 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
138
139
|
signal?: AbortSignal
|
|
139
140
|
): Promise<ZLinkSubmitResult> {
|
|
140
141
|
throwIfAborted(signal);
|
|
141
|
-
return await this.sendBoundActor(actorId, parts, ZLINK_SEND_DONT_WAIT)
|
|
142
|
+
return (await this.sendBoundActor(actorId, parts, ZLINK_SEND_DONT_WAIT))
|
|
142
143
|
? { status: ZLinkSubmitStatus.Submitted }
|
|
143
144
|
: { status: ZLinkSubmitStatus.Backpressured };
|
|
144
145
|
}
|
|
145
146
|
|
|
146
|
-
|
|
147
147
|
async close(signal?: AbortSignal): Promise<void> {
|
|
148
148
|
throwIfAborted(signal);
|
|
149
149
|
this.markTransportClosed();
|
|
@@ -196,12 +196,12 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
196
196
|
`Stream session '${this.sessionId}' is disconnected.`
|
|
197
197
|
);
|
|
198
198
|
}
|
|
199
|
+
const nativeActor = toNativeActorRef(actor);
|
|
199
200
|
const route = this.nativeRoute(actor.meshName);
|
|
200
201
|
if (route !== undefined) {
|
|
201
202
|
if (route.service.status().state === 1) {
|
|
202
203
|
route.service.start();
|
|
203
204
|
}
|
|
204
|
-
const nativeActor = toNativeActorRef(actor);
|
|
205
205
|
await this.ensureNativeActorRoute(route, actor, timeoutMs, signal);
|
|
206
206
|
if (this.isTransportClosed()) {
|
|
207
207
|
throw createInternalFrameworkException(
|
|
@@ -211,25 +211,29 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
211
211
|
}
|
|
212
212
|
await this.requireSuccessfulCompletion(
|
|
213
213
|
route.completions.submit(
|
|
214
|
-
() =>
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
214
|
+
() =>
|
|
215
|
+
route.service.bindActor(
|
|
216
|
+
this.backendRoutingId(),
|
|
217
|
+
nativeActor,
|
|
218
|
+
timeoutMs,
|
|
219
|
+
onBindingReplaced === undefined
|
|
220
|
+
? undefined
|
|
221
|
+
: (_actorId, retiredSession, replacedActor) => {
|
|
222
|
+
onBindingReplaced(replacedActor, retiredSession);
|
|
223
|
+
},
|
|
224
|
+
toStreamSessionActorAuthorityFence(authorityFence)
|
|
225
|
+
),
|
|
225
226
|
signal
|
|
226
227
|
),
|
|
227
|
-
`Actor '${actor.actorId}' native session bind
|
|
228
|
+
`Actor '${actor.actorId}' native session bind`
|
|
228
229
|
);
|
|
229
|
-
const binding = route.service
|
|
230
|
-
.
|
|
231
|
-
|
|
232
|
-
|
|
230
|
+
const binding = route.service
|
|
231
|
+
.bindings(this.backendRoutingId())
|
|
232
|
+
.find(
|
|
233
|
+
(candidate) =>
|
|
234
|
+
candidate.actor.actorId === nativeActor.actorId &&
|
|
235
|
+
candidate.actor.generation === nativeActor.generation
|
|
236
|
+
);
|
|
233
237
|
if (binding === undefined) {
|
|
234
238
|
throw createInternalFrameworkException(
|
|
235
239
|
ZLinkFrameworkInternalErrorKind.RouteNotConnected,
|
|
@@ -240,12 +244,13 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
240
244
|
try {
|
|
241
245
|
await this.requireSuccessfulCompletion(
|
|
242
246
|
route.completions.submit(
|
|
243
|
-
() =>
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
247
|
+
() =>
|
|
248
|
+
route.service.unbindActor(
|
|
249
|
+
this.backendRoutingId(),
|
|
250
|
+
nativeActor as never,
|
|
251
|
+
binding.bindingGeneration,
|
|
252
|
+
timeoutMs
|
|
253
|
+
),
|
|
249
254
|
signal
|
|
250
255
|
),
|
|
251
256
|
`Actor '${actor.actorId}' native session unbind`,
|
|
@@ -268,7 +273,13 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
268
273
|
});
|
|
269
274
|
return;
|
|
270
275
|
}
|
|
271
|
-
await this.socket.bindActor(
|
|
276
|
+
await this.socket.bindActor(
|
|
277
|
+
this.backendRoutingId(),
|
|
278
|
+
toBackendActorRef(actor),
|
|
279
|
+
timeoutMs,
|
|
280
|
+
signal
|
|
281
|
+
);
|
|
282
|
+
this.nativeActorBindings.set(actor.actorId, { actor: nativeActor });
|
|
272
283
|
}
|
|
273
284
|
|
|
274
285
|
private async ensureNativeActorRoute(
|
|
@@ -282,23 +293,24 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
282
293
|
signal
|
|
283
294
|
);
|
|
284
295
|
try {
|
|
285
|
-
const resolved =
|
|
286
|
-
|
|
287
|
-
|
|
296
|
+
const resolved =
|
|
297
|
+
completion.kindData?.kind === 'actorLookupCompletion'
|
|
298
|
+
? completion.kindData.location.actor
|
|
299
|
+
: undefined;
|
|
288
300
|
if (
|
|
289
|
-
completion.terminalResult !== 0
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
301
|
+
completion.terminalResult !== 0 ||
|
|
302
|
+
completion.failureErrno !== 0 ||
|
|
303
|
+
resolved === undefined ||
|
|
304
|
+
resolved.actorId !== actor.actorId ||
|
|
305
|
+
resolved.generation !== actor.objectGeneration ||
|
|
306
|
+
String(resolved.nodeRid) !== String(actor.nodeRid)
|
|
295
307
|
) {
|
|
296
308
|
throw createInternalFrameworkException(
|
|
297
309
|
ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
|
|
298
|
-
`Actor '${actor.actorId}' native route fence does not match its ActorRef `
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
310
|
+
`Actor '${actor.actorId}' native route fence does not match its ActorRef ` +
|
|
311
|
+
`(expected ${String(actor.nodeRid)}/${actor.objectGeneration}, ` +
|
|
312
|
+
`resolved ${resolved === undefined ? 'none' : `${String(resolved.nodeRid)}/${resolved.generation}`}, ` +
|
|
313
|
+
`terminal=${completion.terminalResult}, failure=${completion.failureErrno}).`
|
|
302
314
|
);
|
|
303
315
|
}
|
|
304
316
|
} finally {
|
|
@@ -317,19 +329,20 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
317
329
|
const binding = this.nativeActorBindings.get(actorId);
|
|
318
330
|
if (binding?.route !== undefined) {
|
|
319
331
|
const route = binding.route;
|
|
320
|
-
if (!this.hasNativeBinding(route, actorId, binding.bindingGeneration)) {
|
|
332
|
+
if (!this.hasNativeBinding(route, actorId, binding.bindingGeneration!)) {
|
|
321
333
|
this.nativeActorBindings.delete(actorId);
|
|
322
334
|
return;
|
|
323
335
|
}
|
|
324
336
|
try {
|
|
325
337
|
await this.requireSuccessfulCompletion(
|
|
326
338
|
route.completions.submit(
|
|
327
|
-
() =>
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
339
|
+
() =>
|
|
340
|
+
route.service.unbindActor(
|
|
341
|
+
this.backendRoutingId(),
|
|
342
|
+
binding.actor as never,
|
|
343
|
+
binding.bindingGeneration!,
|
|
344
|
+
timeoutMs
|
|
345
|
+
),
|
|
333
346
|
signal
|
|
334
347
|
),
|
|
335
348
|
`Actor '${actorId}' native session unbind`,
|
|
@@ -343,7 +356,7 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
343
356
|
// tombstone. A transport teardown can therefore report an internal
|
|
344
357
|
// completion after the exact binding is already gone. Treat only that
|
|
345
358
|
// exact missing binding as stale cleanup; preserve other failures.
|
|
346
|
-
if (this.hasNativeBinding(route, actorId, binding.bindingGeneration)) {
|
|
359
|
+
if (this.hasNativeBinding(route, actorId, binding.bindingGeneration!)) {
|
|
347
360
|
throw error;
|
|
348
361
|
}
|
|
349
362
|
}
|
|
@@ -353,6 +366,26 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
353
366
|
return;
|
|
354
367
|
}
|
|
355
368
|
await this.socket.unbindActor(this.backendRoutingId(), actorId, timeoutMs, signal);
|
|
369
|
+
if (binding !== undefined && this.nativeActorBindings.get(actorId) === binding) {
|
|
370
|
+
this.nativeActorBindings.delete(actorId);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
async enqueueActorBound(actorSlot: number, actorId: string): Promise<void> {
|
|
375
|
+
await this.submitActorBindingControl(encodeActorBoundFrame(actorSlot, actorId));
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
async enqueueActorUnbound(actorSlot: number): Promise<void> {
|
|
379
|
+
await this.submitActorBindingControl(encodeActorUnboundFrame(actorSlot));
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
private async submitActorBindingControl(frame: Uint8Array): Promise<void> {
|
|
383
|
+
const message = NativeMessage.from(frame);
|
|
384
|
+
try {
|
|
385
|
+
await this.socket.submit(this.backendRoutingId(), message);
|
|
386
|
+
} finally {
|
|
387
|
+
message.close();
|
|
388
|
+
}
|
|
356
389
|
}
|
|
357
390
|
|
|
358
391
|
async sendBoundActor(
|
|
@@ -370,24 +403,21 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
370
403
|
if (binding?.route !== undefined) {
|
|
371
404
|
const nativeParts = parts.map((part) => NativeMessage.from(part.data()));
|
|
372
405
|
try {
|
|
373
|
-
return
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
406
|
+
return (
|
|
407
|
+
(await binding.route.service.sendToActor(
|
|
408
|
+
this.backendRoutingId(),
|
|
409
|
+
binding.actor as never,
|
|
410
|
+
nativeParts,
|
|
411
|
+
{ flags: flags ?? 0 }
|
|
412
|
+
)) === 0
|
|
413
|
+
);
|
|
379
414
|
} finally {
|
|
380
415
|
for (const part of nativeParts) {
|
|
381
416
|
part.close();
|
|
382
417
|
}
|
|
383
418
|
}
|
|
384
419
|
}
|
|
385
|
-
return this.socket.sendBoundActor(
|
|
386
|
-
this.backendRoutingId(),
|
|
387
|
-
actorId,
|
|
388
|
-
parts,
|
|
389
|
-
flags ?? 0
|
|
390
|
-
);
|
|
420
|
+
return this.socket.sendBoundActor(this.backendRoutingId(), actorId, parts, flags ?? 0);
|
|
391
421
|
}
|
|
392
422
|
|
|
393
423
|
updateAddresses(localAddr: string | undefined, remoteAddr: string | undefined): void {
|
|
@@ -406,9 +436,12 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
406
436
|
bindingGeneration: bigint
|
|
407
437
|
): boolean {
|
|
408
438
|
try {
|
|
409
|
-
return route.service
|
|
410
|
-
|
|
411
|
-
|
|
439
|
+
return route.service
|
|
440
|
+
.bindings(this.backendRoutingId())
|
|
441
|
+
.some(
|
|
442
|
+
(candidate) =>
|
|
443
|
+
candidate.actor.actorId === actorId && candidate.bindingGeneration === bindingGeneration
|
|
444
|
+
);
|
|
412
445
|
} catch {
|
|
413
446
|
// A closed native service owns the teardown state. Keep the original
|
|
414
447
|
// error when its binding snapshot is unavailable.
|
|
@@ -428,8 +461,8 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
428
461
|
const completion = await completionPromise;
|
|
429
462
|
try {
|
|
430
463
|
if (
|
|
431
|
-
completion.terminalResult !== 0
|
|
432
|
-
|
|
464
|
+
completion.terminalResult !== 0 &&
|
|
465
|
+
!acceptedTerminalResults.has(completion.terminalResult)
|
|
433
466
|
) {
|
|
434
467
|
throw wireReplyFailureException(
|
|
435
468
|
completion.terminalResult,
|
|
@@ -443,15 +476,15 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
443
476
|
}
|
|
444
477
|
|
|
445
478
|
private nativeRoute(meshName: string): ZLinkNativeSessionRoute | undefined {
|
|
446
|
-
return
|
|
447
|
-
??
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
479
|
+
return (
|
|
480
|
+
this.nativeSessionRouteForMesh?.(meshName) ??
|
|
481
|
+
(this.nativeSessionService !== undefined && this.meshCompletions !== undefined
|
|
482
|
+
? {
|
|
483
|
+
service: this.nativeSessionService,
|
|
484
|
+
completions: this.meshCompletions
|
|
485
|
+
}
|
|
486
|
+
: undefined)
|
|
487
|
+
);
|
|
455
488
|
}
|
|
456
489
|
}
|
|
457
490
|
|
|
@@ -460,18 +493,18 @@ export function streamSessionIdFromRoutingId(routingId: unknown): string {
|
|
|
460
493
|
return routingId;
|
|
461
494
|
}
|
|
462
495
|
if (
|
|
463
|
-
typeof routingId === 'object'
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
496
|
+
typeof routingId === 'object' &&
|
|
497
|
+
routingId !== null &&
|
|
498
|
+
'toHex' in routingId &&
|
|
499
|
+
typeof (routingId as { toHex?: unknown }).toHex === 'function'
|
|
467
500
|
) {
|
|
468
501
|
return (routingId as { toHex(): string }).toHex();
|
|
469
502
|
}
|
|
470
503
|
if (
|
|
471
|
-
typeof routingId === 'object'
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
504
|
+
typeof routingId === 'object' &&
|
|
505
|
+
routingId !== null &&
|
|
506
|
+
'toString' in routingId &&
|
|
507
|
+
typeof (routingId as { toString?: unknown }).toString === 'function'
|
|
475
508
|
) {
|
|
476
509
|
return (routingId as { toString(): string }).toString();
|
|
477
510
|
}
|
|
@@ -63,7 +63,9 @@ export class ZLinkNativeFallbackBoundSession implements ZLinkBoundSession {
|
|
|
63
63
|
const remoteTarget = this.options.remoteBoundSessionTargetProvider();
|
|
64
64
|
if (remoteTarget !== undefined) {
|
|
65
65
|
const spotKind: ZLinkSpotKind | undefined =
|
|
66
|
-
'spotKind' in remoteTarget
|
|
66
|
+
'spotKind' in remoteTarget
|
|
67
|
+
? (remoteTarget.spotKind as ZLinkSpotKind | undefined)
|
|
68
|
+
: undefined;
|
|
67
69
|
const payload = encodeRemoteActorPacketRelayPayload({
|
|
68
70
|
actorId: this.options.actorId,
|
|
69
71
|
routerChannelId: remoteTarget.routerChannelId,
|
|
@@ -76,27 +78,26 @@ export class ZLinkNativeFallbackBoundSession implements ZLinkBoundSession {
|
|
|
76
78
|
spotId: remoteTarget.spotId,
|
|
77
79
|
spotKind: spotKind ?? ZLinkSpotKind.Entry
|
|
78
80
|
};
|
|
79
|
-
if (
|
|
80
|
-
this.options.routedTransport,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
)
|
|
81
|
+
if (
|
|
82
|
+
await tryRequestRoutedJson(this.options.routedTransport, target, payload, {
|
|
83
|
+
timeoutMs: this.options.requestTimeoutMs,
|
|
84
|
+
signal
|
|
85
|
+
})
|
|
86
|
+
) {
|
|
85
87
|
return;
|
|
86
88
|
}
|
|
87
|
-
await this.options.routedTransport.sendToSpot(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
);
|
|
89
|
+
await this.options.routedTransport.sendToSpot(target, payload, {
|
|
90
|
+
packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
|
|
91
|
+
signal
|
|
92
|
+
});
|
|
92
93
|
return;
|
|
93
94
|
}
|
|
94
95
|
const actorRef = this.options.actorRefProvider();
|
|
95
96
|
const node = this.options.nativeActorNodeProvider();
|
|
96
97
|
if (
|
|
97
|
-
actorRef !== undefined
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
actorRef !== undefined &&
|
|
99
|
+
node !== undefined &&
|
|
100
|
+
currentBindingGeneration(actorRef) !== undefined
|
|
100
101
|
) {
|
|
101
102
|
await this.options.runtime.disconnectNativeBoundSession(node, actorRef, signal);
|
|
102
103
|
return;
|
|
@@ -129,7 +130,11 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
129
130
|
if (this.executed) {
|
|
130
131
|
throwAlreadySubmitted('Bound session send call');
|
|
131
132
|
}
|
|
132
|
-
const packetName = resolveFrameworkPacketName(
|
|
133
|
+
const packetName = resolveFrameworkPacketName(
|
|
134
|
+
this.message,
|
|
135
|
+
this.selectedPacketName,
|
|
136
|
+
'Bound session'
|
|
137
|
+
);
|
|
133
138
|
this.executed = true;
|
|
134
139
|
throwIfAborted(signal);
|
|
135
140
|
const result = await this.execute(packetName, signal);
|
|
@@ -144,13 +149,15 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
144
149
|
// Call-scoped flow (spec 27 §4): the relay JSON flow pair and any nested
|
|
145
150
|
// routed-transport envelope share one ambient flow that does not outlive
|
|
146
151
|
// this submit call.
|
|
147
|
-
return runWithOutboundFlow(
|
|
148
|
-
this.
|
|
149
|
-
() => this.executeScoped(packetName, signal)
|
|
152
|
+
return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
|
|
153
|
+
this.executeScoped(packetName, signal)
|
|
150
154
|
);
|
|
151
155
|
}
|
|
152
156
|
|
|
153
|
-
private async executeScoped(
|
|
157
|
+
private async executeScoped(
|
|
158
|
+
packetName: string,
|
|
159
|
+
signal?: AbortSignal
|
|
160
|
+
): Promise<ZLinkSubmitResult> {
|
|
154
161
|
const localActor = this.options.localActorProvider?.() === true;
|
|
155
162
|
const remoteTarget = this.options.remoteBoundSessionTargetProvider();
|
|
156
163
|
const sealedRemoteTarget = remoteTarget?.relocationSealId !== undefined;
|
|
@@ -175,11 +182,7 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
175
182
|
const actorRef = this.options.actorRefProvider();
|
|
176
183
|
const node = this.options.nativeActorNodeProvider();
|
|
177
184
|
const bindingGeneration = currentBindingGeneration(actorRef);
|
|
178
|
-
if (
|
|
179
|
-
actorRef !== undefined
|
|
180
|
-
&& node !== undefined
|
|
181
|
-
&& bindingGeneration !== undefined
|
|
182
|
-
) {
|
|
185
|
+
if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
|
|
183
186
|
nativeAttempted = true;
|
|
184
187
|
const result = await this.options.runtime.sendNativeBoundSession(
|
|
185
188
|
node,
|
|
@@ -200,8 +203,9 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
200
203
|
}
|
|
201
204
|
if (remoteTarget !== undefined) {
|
|
202
205
|
const actorRef = this.options.actorRefProvider();
|
|
203
|
-
const ownershipGeneration = (
|
|
204
|
-
|
|
206
|
+
const ownershipGeneration = (
|
|
207
|
+
actorRef as (ActorRef & { ownershipGeneration?: bigint }) | undefined
|
|
208
|
+
)?.ownershipGeneration;
|
|
205
209
|
const payload = encodeRemoteBoundSessionSendPayload({
|
|
206
210
|
actorId: this.options.actorId,
|
|
207
211
|
actorMeshName: actorRef?.meshName,
|
|
@@ -220,27 +224,28 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
220
224
|
? currentOrCreateFlow('Application')
|
|
221
225
|
: undefined)
|
|
222
226
|
});
|
|
223
|
-
const submit =
|
|
224
|
-
?? this.options.routedTransport.submit;
|
|
225
|
-
const result =
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
227
|
+
const submit =
|
|
228
|
+
this.options.routedTransport.submitInfrastructure ?? this.options.routedTransport.submit;
|
|
229
|
+
const result =
|
|
230
|
+
submit === undefined
|
|
231
|
+
? await this.options.routedTransport.sendToSpot(
|
|
232
|
+
{
|
|
233
|
+
routerChannelId: remoteTarget.routerChannelId,
|
|
234
|
+
targetNodeRid: remoteTarget.targetNodeRid,
|
|
235
|
+
spotId: remoteTarget.spotId,
|
|
236
|
+
spotKind: ZLinkSpotKind.Entry
|
|
237
|
+
},
|
|
238
|
+
payload,
|
|
239
|
+
{ packetName: ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET, signal }
|
|
240
|
+
)
|
|
241
|
+
: await submit.call(
|
|
242
|
+
this.options.routedTransport,
|
|
243
|
+
remoteTarget.routerChannelId,
|
|
244
|
+
String(remoteTarget.targetNodeRid),
|
|
245
|
+
ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET,
|
|
246
|
+
payload,
|
|
247
|
+
signal
|
|
248
|
+
);
|
|
244
249
|
this.traceSubmitted(result, packetName);
|
|
245
250
|
return result;
|
|
246
251
|
}
|
|
@@ -259,10 +264,10 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
|
|
|
259
264
|
const node = this.options.nativeActorNodeProvider();
|
|
260
265
|
const bindingGeneration = currentBindingGeneration(actorRef);
|
|
261
266
|
if (
|
|
262
|
-
!nativeAttempted
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
267
|
+
!nativeAttempted &&
|
|
268
|
+
actorRef !== undefined &&
|
|
269
|
+
node !== undefined &&
|
|
270
|
+
bindingGeneration !== undefined
|
|
266
271
|
) {
|
|
267
272
|
const result = await this.options.runtime.sendNativeBoundSession(
|
|
268
273
|
node,
|