@zlink-systems/framework 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -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';
|
|
@@ -58,11 +55,14 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
58
55
|
private currentLocalAddr: string | undefined;
|
|
59
56
|
private currentRemoteAddr: string | undefined;
|
|
60
57
|
private transportClosed = false;
|
|
61
|
-
private readonly nativeActorBindings = new Map<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
private readonly nativeActorBindings = new Map<
|
|
59
|
+
string,
|
|
60
|
+
{
|
|
61
|
+
readonly actor: ZLinkBackendActorRef;
|
|
62
|
+
readonly bindingGeneration: bigint;
|
|
63
|
+
readonly route?: ZLinkNativeSessionRoute;
|
|
64
|
+
}
|
|
65
|
+
>();
|
|
66
66
|
|
|
67
67
|
constructor(
|
|
68
68
|
private readonly socket: ZLinkBackendStreamSocket,
|
|
@@ -138,12 +138,11 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
138
138
|
signal?: AbortSignal
|
|
139
139
|
): Promise<ZLinkSubmitResult> {
|
|
140
140
|
throwIfAborted(signal);
|
|
141
|
-
return await this.sendBoundActor(actorId, parts, ZLINK_SEND_DONT_WAIT)
|
|
141
|
+
return (await this.sendBoundActor(actorId, parts, ZLINK_SEND_DONT_WAIT))
|
|
142
142
|
? { status: ZLinkSubmitStatus.Submitted }
|
|
143
143
|
: { status: ZLinkSubmitStatus.Backpressured };
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
|
|
147
146
|
async close(signal?: AbortSignal): Promise<void> {
|
|
148
147
|
throwIfAborted(signal);
|
|
149
148
|
this.markTransportClosed();
|
|
@@ -211,25 +210,29 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
211
210
|
}
|
|
212
211
|
await this.requireSuccessfulCompletion(
|
|
213
212
|
route.completions.submit(
|
|
214
|
-
() =>
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
213
|
+
() =>
|
|
214
|
+
route.service.bindActor(
|
|
215
|
+
this.backendRoutingId(),
|
|
216
|
+
nativeActor,
|
|
217
|
+
timeoutMs,
|
|
218
|
+
onBindingReplaced === undefined
|
|
219
|
+
? undefined
|
|
220
|
+
: (_actorId, retiredSession, replacedActor) => {
|
|
221
|
+
onBindingReplaced(replacedActor, retiredSession);
|
|
222
|
+
},
|
|
223
|
+
toStreamSessionActorAuthorityFence(authorityFence)
|
|
224
|
+
),
|
|
225
225
|
signal
|
|
226
226
|
),
|
|
227
|
-
`Actor '${actor.actorId}' native session bind
|
|
227
|
+
`Actor '${actor.actorId}' native session bind`
|
|
228
228
|
);
|
|
229
|
-
const binding = route.service
|
|
230
|
-
.
|
|
231
|
-
|
|
232
|
-
|
|
229
|
+
const binding = route.service
|
|
230
|
+
.bindings(this.backendRoutingId())
|
|
231
|
+
.find(
|
|
232
|
+
(candidate) =>
|
|
233
|
+
candidate.actor.actorId === nativeActor.actorId &&
|
|
234
|
+
candidate.actor.generation === nativeActor.generation
|
|
235
|
+
);
|
|
233
236
|
if (binding === undefined) {
|
|
234
237
|
throw createInternalFrameworkException(
|
|
235
238
|
ZLinkFrameworkInternalErrorKind.RouteNotConnected,
|
|
@@ -240,12 +243,13 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
240
243
|
try {
|
|
241
244
|
await this.requireSuccessfulCompletion(
|
|
242
245
|
route.completions.submit(
|
|
243
|
-
() =>
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
246
|
+
() =>
|
|
247
|
+
route.service.unbindActor(
|
|
248
|
+
this.backendRoutingId(),
|
|
249
|
+
nativeActor as never,
|
|
250
|
+
binding.bindingGeneration,
|
|
251
|
+
timeoutMs
|
|
252
|
+
),
|
|
249
253
|
signal
|
|
250
254
|
),
|
|
251
255
|
`Actor '${actor.actorId}' native session unbind`,
|
|
@@ -268,7 +272,12 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
268
272
|
});
|
|
269
273
|
return;
|
|
270
274
|
}
|
|
271
|
-
await this.socket.bindActor(
|
|
275
|
+
await this.socket.bindActor(
|
|
276
|
+
this.backendRoutingId(),
|
|
277
|
+
toBackendActorRef(actor),
|
|
278
|
+
timeoutMs,
|
|
279
|
+
signal
|
|
280
|
+
);
|
|
272
281
|
}
|
|
273
282
|
|
|
274
283
|
private async ensureNativeActorRoute(
|
|
@@ -282,23 +291,24 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
282
291
|
signal
|
|
283
292
|
);
|
|
284
293
|
try {
|
|
285
|
-
const resolved =
|
|
286
|
-
|
|
287
|
-
|
|
294
|
+
const resolved =
|
|
295
|
+
completion.kindData?.kind === 'actorLookupCompletion'
|
|
296
|
+
? completion.kindData.location.actor
|
|
297
|
+
: undefined;
|
|
288
298
|
if (
|
|
289
|
-
completion.terminalResult !== 0
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
299
|
+
completion.terminalResult !== 0 ||
|
|
300
|
+
completion.failureErrno !== 0 ||
|
|
301
|
+
resolved === undefined ||
|
|
302
|
+
resolved.actorId !== actor.actorId ||
|
|
303
|
+
resolved.generation !== actor.objectGeneration ||
|
|
304
|
+
String(resolved.nodeRid) !== String(actor.nodeRid)
|
|
295
305
|
) {
|
|
296
306
|
throw createInternalFrameworkException(
|
|
297
307
|
ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
|
|
298
|
-
`Actor '${actor.actorId}' native route fence does not match its ActorRef `
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
308
|
+
`Actor '${actor.actorId}' native route fence does not match its ActorRef ` +
|
|
309
|
+
`(expected ${String(actor.nodeRid)}/${actor.objectGeneration}, ` +
|
|
310
|
+
`resolved ${resolved === undefined ? 'none' : `${String(resolved.nodeRid)}/${resolved.generation}`}, ` +
|
|
311
|
+
`terminal=${completion.terminalResult}, failure=${completion.failureErrno}).`
|
|
302
312
|
);
|
|
303
313
|
}
|
|
304
314
|
} finally {
|
|
@@ -324,12 +334,13 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
324
334
|
try {
|
|
325
335
|
await this.requireSuccessfulCompletion(
|
|
326
336
|
route.completions.submit(
|
|
327
|
-
() =>
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
337
|
+
() =>
|
|
338
|
+
route.service.unbindActor(
|
|
339
|
+
this.backendRoutingId(),
|
|
340
|
+
binding.actor as never,
|
|
341
|
+
binding.bindingGeneration,
|
|
342
|
+
timeoutMs
|
|
343
|
+
),
|
|
333
344
|
signal
|
|
334
345
|
),
|
|
335
346
|
`Actor '${actorId}' native session unbind`,
|
|
@@ -370,24 +381,21 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
370
381
|
if (binding?.route !== undefined) {
|
|
371
382
|
const nativeParts = parts.map((part) => NativeMessage.from(part.data()));
|
|
372
383
|
try {
|
|
373
|
-
return
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
384
|
+
return (
|
|
385
|
+
(await binding.route.service.sendToActor(
|
|
386
|
+
this.backendRoutingId(),
|
|
387
|
+
binding.actor as never,
|
|
388
|
+
nativeParts,
|
|
389
|
+
{ flags: flags ?? 0 }
|
|
390
|
+
)) === 0
|
|
391
|
+
);
|
|
379
392
|
} finally {
|
|
380
393
|
for (const part of nativeParts) {
|
|
381
394
|
part.close();
|
|
382
395
|
}
|
|
383
396
|
}
|
|
384
397
|
}
|
|
385
|
-
return this.socket.sendBoundActor(
|
|
386
|
-
this.backendRoutingId(),
|
|
387
|
-
actorId,
|
|
388
|
-
parts,
|
|
389
|
-
flags ?? 0
|
|
390
|
-
);
|
|
398
|
+
return this.socket.sendBoundActor(this.backendRoutingId(), actorId, parts, flags ?? 0);
|
|
391
399
|
}
|
|
392
400
|
|
|
393
401
|
updateAddresses(localAddr: string | undefined, remoteAddr: string | undefined): void {
|
|
@@ -406,9 +414,12 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
406
414
|
bindingGeneration: bigint
|
|
407
415
|
): boolean {
|
|
408
416
|
try {
|
|
409
|
-
return route.service
|
|
410
|
-
|
|
411
|
-
|
|
417
|
+
return route.service
|
|
418
|
+
.bindings(this.backendRoutingId())
|
|
419
|
+
.some(
|
|
420
|
+
(candidate) =>
|
|
421
|
+
candidate.actor.actorId === actorId && candidate.bindingGeneration === bindingGeneration
|
|
422
|
+
);
|
|
412
423
|
} catch {
|
|
413
424
|
// A closed native service owns the teardown state. Keep the original
|
|
414
425
|
// error when its binding snapshot is unavailable.
|
|
@@ -428,8 +439,8 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
428
439
|
const completion = await completionPromise;
|
|
429
440
|
try {
|
|
430
441
|
if (
|
|
431
|
-
completion.terminalResult !== 0
|
|
432
|
-
|
|
442
|
+
completion.terminalResult !== 0 &&
|
|
443
|
+
!acceptedTerminalResults.has(completion.terminalResult)
|
|
433
444
|
) {
|
|
434
445
|
throw wireReplyFailureException(
|
|
435
446
|
completion.terminalResult,
|
|
@@ -443,15 +454,15 @@ export class ZLinkManagedStream implements ZLinkStream {
|
|
|
443
454
|
}
|
|
444
455
|
|
|
445
456
|
private nativeRoute(meshName: string): ZLinkNativeSessionRoute | undefined {
|
|
446
|
-
return
|
|
447
|
-
??
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
457
|
+
return (
|
|
458
|
+
this.nativeSessionRouteForMesh?.(meshName) ??
|
|
459
|
+
(this.nativeSessionService !== undefined && this.meshCompletions !== undefined
|
|
460
|
+
? {
|
|
461
|
+
service: this.nativeSessionService,
|
|
462
|
+
completions: this.meshCompletions
|
|
463
|
+
}
|
|
464
|
+
: undefined)
|
|
465
|
+
);
|
|
455
466
|
}
|
|
456
467
|
}
|
|
457
468
|
|
|
@@ -460,18 +471,18 @@ export function streamSessionIdFromRoutingId(routingId: unknown): string {
|
|
|
460
471
|
return routingId;
|
|
461
472
|
}
|
|
462
473
|
if (
|
|
463
|
-
typeof routingId === 'object'
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
474
|
+
typeof routingId === 'object' &&
|
|
475
|
+
routingId !== null &&
|
|
476
|
+
'toHex' in routingId &&
|
|
477
|
+
typeof (routingId as { toHex?: unknown }).toHex === 'function'
|
|
467
478
|
) {
|
|
468
479
|
return (routingId as { toHex(): string }).toHex();
|
|
469
480
|
}
|
|
470
481
|
if (
|
|
471
|
-
typeof routingId === 'object'
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
482
|
+
typeof routingId === 'object' &&
|
|
483
|
+
routingId !== null &&
|
|
484
|
+
'toString' in routingId &&
|
|
485
|
+
typeof (routingId as { toString?: unknown }).toString === 'function'
|
|
475
486
|
) {
|
|
476
487
|
return (routingId as { toString(): string }).toString();
|
|
477
488
|
}
|
|
@@ -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,
|
|
@@ -30,20 +30,28 @@ export enum ZLinkStreamCodec {
|
|
|
30
30
|
|
|
31
31
|
export function streamCodecContentType(codec: ZLinkStreamCodec): string {
|
|
32
32
|
switch (codec) {
|
|
33
|
-
case ZLinkStreamCodec.Json:
|
|
34
|
-
|
|
35
|
-
case ZLinkStreamCodec.
|
|
36
|
-
|
|
33
|
+
case ZLinkStreamCodec.Json:
|
|
34
|
+
return 'application/json';
|
|
35
|
+
case ZLinkStreamCodec.MessagePack:
|
|
36
|
+
return 'application/x-msgpack';
|
|
37
|
+
case ZLinkStreamCodec.Protobuf:
|
|
38
|
+
return 'application/x-protobuf';
|
|
39
|
+
case ZLinkStreamCodec.Raw:
|
|
40
|
+
return 'application/octet-stream';
|
|
37
41
|
}
|
|
38
42
|
throw new TypeError(`Unsupported STREAM codec '${codec}'.`);
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
export function streamCodecForContentType(contentType: string): ZLinkStreamCodec {
|
|
42
46
|
switch (contentType) {
|
|
43
|
-
case 'application/json':
|
|
44
|
-
|
|
45
|
-
case 'application/x-
|
|
46
|
-
|
|
47
|
+
case 'application/json':
|
|
48
|
+
return ZLinkStreamCodec.Json;
|
|
49
|
+
case 'application/x-msgpack':
|
|
50
|
+
return ZLinkStreamCodec.MessagePack;
|
|
51
|
+
case 'application/x-protobuf':
|
|
52
|
+
return ZLinkStreamCodec.Protobuf;
|
|
53
|
+
case 'application/octet-stream':
|
|
54
|
+
return ZLinkStreamCodec.Raw;
|
|
47
55
|
}
|
|
48
56
|
throw new TypeError(`Unsupported STREAM content type '${contentType}'.`);
|
|
49
57
|
}
|
|
@@ -90,15 +98,17 @@ export interface ZLinkStreamFrameHeader {
|
|
|
90
98
|
}
|
|
91
99
|
|
|
92
100
|
export type ZLinkStreamReplyMessageKind =
|
|
93
|
-
| ZLinkStreamMessageKind.
|
|
94
|
-
| ZLinkStreamMessageKind.Error;
|
|
101
|
+
ZLinkStreamMessageKind.Response | ZLinkStreamMessageKind.Error;
|
|
95
102
|
|
|
96
103
|
export interface ZLinkStreamFrame {
|
|
97
104
|
readonly header: Uint8Array;
|
|
98
105
|
readonly payload: Uint8Array;
|
|
99
106
|
}
|
|
100
107
|
|
|
101
|
-
export function resolvePacketName(
|
|
108
|
+
export function resolvePacketName(
|
|
109
|
+
message: unknown,
|
|
110
|
+
explicitPacketName: string | undefined
|
|
111
|
+
): string {
|
|
102
112
|
const packetName = resolveFrameworkPacketName(message, explicitPacketName, 'Stream');
|
|
103
113
|
if (packetName.trim().length === 0) {
|
|
104
114
|
throw new Error('Stream packet name must not be empty.');
|
|
@@ -117,13 +127,16 @@ export function encodeStreamFrame(header: ZLinkStreamFrameHeader, payload: Uint8
|
|
|
117
127
|
}
|
|
118
128
|
|
|
119
129
|
export function encodeStreamControlFrame(name: string): Uint8Array {
|
|
120
|
-
return encodeStreamFrame(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
130
|
+
return encodeStreamFrame(
|
|
131
|
+
{
|
|
132
|
+
kind: ZLinkStreamMessageKind.Control,
|
|
133
|
+
codec: ZLinkStreamCodec.Raw,
|
|
134
|
+
flags: ZLinkStreamHeaderFlags.None,
|
|
135
|
+
name,
|
|
136
|
+
metadata: EMPTY_STREAM_METADATA
|
|
137
|
+
},
|
|
138
|
+
new Uint8Array()
|
|
139
|
+
);
|
|
127
140
|
}
|
|
128
141
|
|
|
129
142
|
export function encodeSessionClosingFrame(
|
|
@@ -138,13 +151,16 @@ export function encodeSessionClosingFrame(
|
|
|
138
151
|
payload[2] = diagnosticBytes.length >>> 8;
|
|
139
152
|
payload[3] = diagnosticBytes.length & 0xff;
|
|
140
153
|
payload.set(diagnosticBytes, 4);
|
|
141
|
-
return encodeStreamFrame(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
154
|
+
return encodeStreamFrame(
|
|
155
|
+
{
|
|
156
|
+
kind: ZLinkStreamMessageKind.Control,
|
|
157
|
+
codec: ZLinkStreamCodec.Raw,
|
|
158
|
+
flags: ZLinkStreamHeaderFlags.None,
|
|
159
|
+
name: 'session-closing',
|
|
160
|
+
metadata: new Map()
|
|
161
|
+
},
|
|
162
|
+
payload
|
|
163
|
+
);
|
|
148
164
|
}
|
|
149
165
|
|
|
150
166
|
export function decodeStreamFrame(frame: Uint8Array): ZLinkStreamFrame {
|
|
@@ -160,8 +176,13 @@ export function encodeStreamHeader(header: ZLinkStreamFrameHeader): Uint8Array {
|
|
|
160
176
|
const hasMetadata = header.metadata.size > 0;
|
|
161
177
|
const hasCorrelation = header.correlationId !== undefined && header.correlationId.length > 0;
|
|
162
178
|
const hasFlow = header.flowId !== undefined || header.flowOrigin !== undefined;
|
|
163
|
-
if (
|
|
164
|
-
|
|
179
|
+
if (
|
|
180
|
+
header.kind === ZLinkStreamMessageKind.Control &&
|
|
181
|
+
(hasCorrelation || hasRequestSeq || hasMetadata || hasFlow)
|
|
182
|
+
) {
|
|
183
|
+
throw new Error(
|
|
184
|
+
'Control packet must not contain a request sequence, metadata, correlation id, or flow id.'
|
|
185
|
+
);
|
|
165
186
|
}
|
|
166
187
|
// Explicit construction: this runs for every outbound frame, so avoid a
|
|
167
188
|
// per-message spread of the whole header.
|
|
@@ -178,10 +199,7 @@ export function encodeStreamHeader(header: ZLinkStreamFrameHeader): Uint8Array {
|
|
|
178
199
|
});
|
|
179
200
|
}
|
|
180
201
|
|
|
181
|
-
export function decodeStreamHeader(
|
|
182
|
-
header: Uint8Array,
|
|
183
|
-
flowEnabled = true
|
|
184
|
-
): ZLinkStreamFrameHeader {
|
|
202
|
+
export function decodeStreamHeader(header: Uint8Array, flowEnabled = true): ZLinkStreamFrameHeader {
|
|
185
203
|
const decoded = decodeStreamWireHeader(header, undefined, flowEnabled);
|
|
186
204
|
const kind = decoded.kind as ZLinkStreamMessageKind;
|
|
187
205
|
const flags = decoded.flags as ZLinkStreamHeaderFlags;
|
|
@@ -189,16 +207,21 @@ export function decodeStreamHeader(
|
|
|
189
207
|
const hasMetadata = (flags & ZLinkStreamHeaderFlags.HasMetadata) !== 0;
|
|
190
208
|
const hasCorrelation = (flags & ZLinkStreamHeaderFlags.HasCorrelationId) !== 0;
|
|
191
209
|
const hasFlow = (flags & ZLinkStreamHeaderFlags.HasFlowId) !== 0;
|
|
192
|
-
if (
|
|
193
|
-
|
|
210
|
+
if (
|
|
211
|
+
kind === ZLinkStreamMessageKind.Control &&
|
|
212
|
+
(hasCorrelation || hasRequestSeq || hasMetadata || hasFlow)
|
|
213
|
+
) {
|
|
214
|
+
throw new Error(
|
|
215
|
+
'Control packet must not contain a request sequence, metadata, correlation id, or flow id.'
|
|
216
|
+
);
|
|
194
217
|
}
|
|
195
218
|
const metadata = publicStreamMetadata(decoded.metadata);
|
|
196
219
|
return {
|
|
197
220
|
kind,
|
|
198
221
|
codec: decoded.codec as ZLinkStreamCodec,
|
|
199
|
-
flags:
|
|
200
|
-
? flags & ~ZLinkStreamHeaderFlags.HasMetadata
|
|
201
|
-
|
|
222
|
+
flags:
|
|
223
|
+
(metadata.size === 0 ? flags & ~ZLinkStreamHeaderFlags.HasMetadata : flags) &
|
|
224
|
+
(flowEnabled ? ~0 : ~ZLinkStreamHeaderFlags.HasFlowId),
|
|
202
225
|
requestSeq: decoded.requestSeq,
|
|
203
226
|
name: decoded.name,
|
|
204
227
|
metadata,
|
|
@@ -208,7 +231,9 @@ export function decodeStreamHeader(
|
|
|
208
231
|
};
|
|
209
232
|
}
|
|
210
233
|
|
|
211
|
-
export function actorRequestDeadlineMetadata(
|
|
234
|
+
export function actorRequestDeadlineMetadata(
|
|
235
|
+
deadlineUnixMs: number | undefined
|
|
236
|
+
): ReadonlyMap<string, string> {
|
|
212
237
|
return deadlineUnixMs === undefined
|
|
213
238
|
? EMPTY_STREAM_METADATA
|
|
214
239
|
: new Map([[actorRequestDeadlineMetadataKey, String(deadlineUnixMs)]]);
|
|
@@ -250,18 +275,20 @@ export function createStreamReplyHeader(
|
|
|
250
275
|
// observation-only and is not copied into the reply when tracing is Off
|
|
251
276
|
// (spec 27 §4, §7).
|
|
252
277
|
correlationId: requestHeader.correlationId,
|
|
253
|
-
...(includeFlow
|
|
254
|
-
? { flowId: requestHeader.flowId, flowOrigin: requestHeader.flowOrigin }
|
|
255
|
-
: {})
|
|
278
|
+
...(includeFlow ? { flowId: requestHeader.flowId, flowOrigin: requestHeader.flowOrigin } : {})
|
|
256
279
|
};
|
|
257
280
|
}
|
|
258
281
|
|
|
259
282
|
function encodeFlowOrigin(origin: ZLinkFlowOrigin | undefined): number | undefined {
|
|
260
|
-
return origin === undefined
|
|
283
|
+
return origin === undefined
|
|
284
|
+
? undefined
|
|
285
|
+
: ({ Inbound: 1, Timer: 2, Application: 3, Lifecycle: 4 } as const)[origin];
|
|
261
286
|
}
|
|
262
287
|
|
|
263
288
|
function decodeFlowOrigin(origin: number | undefined): ZLinkFlowOrigin | undefined {
|
|
264
|
-
return origin === undefined
|
|
289
|
+
return origin === undefined
|
|
290
|
+
? undefined
|
|
291
|
+
: ({ 1: 'Inbound', 2: 'Timer', 3: 'Application', 4: 'Lifecycle' } as const)[origin];
|
|
265
292
|
}
|
|
266
293
|
|
|
267
294
|
export function messageToBytes(message: Message): Uint8Array {
|
|
@@ -286,6 +313,9 @@ export function lz4Pickle(payload: Uint8Array): Uint8Array {
|
|
|
286
313
|
return lz4PickleUncompressed(payload);
|
|
287
314
|
}
|
|
288
315
|
|
|
289
|
-
export function lz4Unpickle(
|
|
316
|
+
export function lz4Unpickle(
|
|
317
|
+
payload: Uint8Array,
|
|
318
|
+
maxDecompressedSize = defaultMaxDecompressedPayloadSize
|
|
319
|
+
): Uint8Array {
|
|
290
320
|
return lz4UnpicklePayload(payload, maxDecompressedSize);
|
|
291
321
|
}
|