@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
|
@@ -7,6 +7,8 @@ exports.resolvePacketName = resolvePacketName;
|
|
|
7
7
|
exports.ensureSingleSubmit = ensureSingleSubmit;
|
|
8
8
|
exports.encodeStreamFrame = encodeStreamFrame;
|
|
9
9
|
exports.encodeStreamControlFrame = encodeStreamControlFrame;
|
|
10
|
+
exports.encodeActorBoundFrame = encodeActorBoundFrame;
|
|
11
|
+
exports.encodeActorUnboundFrame = encodeActorUnboundFrame;
|
|
10
12
|
exports.encodeSessionClosingFrame = encodeSessionClosingFrame;
|
|
11
13
|
exports.decodeStreamFrame = decodeStreamFrame;
|
|
12
14
|
exports.tryDecodeStreamFrame = tryDecodeStreamFrame;
|
|
@@ -38,19 +40,27 @@ var ZLinkStreamCodec;
|
|
|
38
40
|
})(ZLinkStreamCodec || (exports.ZLinkStreamCodec = ZLinkStreamCodec = {}));
|
|
39
41
|
function streamCodecContentType(codec) {
|
|
40
42
|
switch (codec) {
|
|
41
|
-
case ZLinkStreamCodec.Json:
|
|
42
|
-
|
|
43
|
-
case ZLinkStreamCodec.
|
|
44
|
-
|
|
43
|
+
case ZLinkStreamCodec.Json:
|
|
44
|
+
return 'application/json';
|
|
45
|
+
case ZLinkStreamCodec.MessagePack:
|
|
46
|
+
return 'application/x-msgpack';
|
|
47
|
+
case ZLinkStreamCodec.Protobuf:
|
|
48
|
+
return 'application/x-protobuf';
|
|
49
|
+
case ZLinkStreamCodec.Raw:
|
|
50
|
+
return 'application/octet-stream';
|
|
45
51
|
}
|
|
46
52
|
throw new TypeError(`Unsupported STREAM codec '${codec}'.`);
|
|
47
53
|
}
|
|
48
54
|
function streamCodecForContentType(contentType) {
|
|
49
55
|
switch (contentType) {
|
|
50
|
-
case 'application/json':
|
|
51
|
-
|
|
52
|
-
case 'application/x-
|
|
53
|
-
|
|
56
|
+
case 'application/json':
|
|
57
|
+
return ZLinkStreamCodec.Json;
|
|
58
|
+
case 'application/x-msgpack':
|
|
59
|
+
return ZLinkStreamCodec.MessagePack;
|
|
60
|
+
case 'application/x-protobuf':
|
|
61
|
+
return ZLinkStreamCodec.Protobuf;
|
|
62
|
+
case 'application/octet-stream':
|
|
63
|
+
return ZLinkStreamCodec.Raw;
|
|
54
64
|
}
|
|
55
65
|
throw new TypeError(`Unsupported STREAM content type '${contentType}'.`);
|
|
56
66
|
}
|
|
@@ -70,6 +80,7 @@ var ZLinkStreamHeaderFlags;
|
|
|
70
80
|
ZLinkStreamHeaderFlags[ZLinkStreamHeaderFlags["PayloadCompressed"] = 4] = "PayloadCompressed";
|
|
71
81
|
ZLinkStreamHeaderFlags[ZLinkStreamHeaderFlags["HasCorrelationId"] = 8] = "HasCorrelationId";
|
|
72
82
|
ZLinkStreamHeaderFlags[ZLinkStreamHeaderFlags["HasFlowId"] = 16] = "HasFlowId";
|
|
83
|
+
ZLinkStreamHeaderFlags[ZLinkStreamHeaderFlags["HasActorSlot"] = 32] = "HasActorSlot";
|
|
73
84
|
})(ZLinkStreamHeaderFlags || (exports.ZLinkStreamHeaderFlags = ZLinkStreamHeaderFlags = {}));
|
|
74
85
|
var ZLinkStreamCloseReasonCode;
|
|
75
86
|
(function (ZLinkStreamCloseReasonCode) {
|
|
@@ -106,6 +117,26 @@ function encodeStreamControlFrame(name) {
|
|
|
106
117
|
metadata: EMPTY_STREAM_METADATA
|
|
107
118
|
}, new Uint8Array());
|
|
108
119
|
}
|
|
120
|
+
function encodeActorBoundFrame(actorSlot, actorId) {
|
|
121
|
+
const actorIdBytes = (0, stream_wire_1.utf8Encode)(actorId);
|
|
122
|
+
if (actorIdBytes.length < 1 || actorIdBytes.length > 0xff) {
|
|
123
|
+
throw new Error('Actor id length is invalid for a STREAM binding control packet.');
|
|
124
|
+
}
|
|
125
|
+
const payload = new Uint8Array(4 + actorIdBytes.length);
|
|
126
|
+
payload[0] = 1;
|
|
127
|
+
payload[1] = actorSlot >>> 8;
|
|
128
|
+
payload[2] = actorSlot & 0xff;
|
|
129
|
+
payload[3] = actorIdBytes.length;
|
|
130
|
+
payload.set(actorIdBytes, 4);
|
|
131
|
+
return encodeStreamFrame(controlHeader('$zlink.actor.bound'), payload);
|
|
132
|
+
}
|
|
133
|
+
function encodeActorUnboundFrame(actorSlot) {
|
|
134
|
+
const payload = new Uint8Array(3);
|
|
135
|
+
payload[0] = 1;
|
|
136
|
+
payload[1] = actorSlot >>> 8;
|
|
137
|
+
payload[2] = actorSlot & 0xff;
|
|
138
|
+
return encodeStreamFrame(controlHeader('$zlink.actor.unbound'), payload);
|
|
139
|
+
}
|
|
109
140
|
function encodeSessionClosingFrame(diagnostic = '', reason = ZLinkStreamCloseReasonCode.ServerDrain) {
|
|
110
141
|
const diagnosticBytes = (0, stream_wire_1.utf8Encode)(diagnostic);
|
|
111
142
|
if (diagnosticBytes.length > 512)
|
|
@@ -135,7 +166,9 @@ function encodeStreamHeader(header) {
|
|
|
135
166
|
const hasMetadata = header.metadata.size > 0;
|
|
136
167
|
const hasCorrelation = header.correlationId !== undefined && header.correlationId.length > 0;
|
|
137
168
|
const hasFlow = header.flowId !== undefined || header.flowOrigin !== undefined;
|
|
138
|
-
|
|
169
|
+
const hasActorSlot = header.actorSlot !== undefined;
|
|
170
|
+
if (header.kind === ZLinkStreamMessageKind.Control &&
|
|
171
|
+
(hasCorrelation || hasRequestSeq || hasMetadata || hasFlow || hasActorSlot)) {
|
|
139
172
|
throw new Error('Control packet must not contain a request sequence, metadata, correlation id, or flow id.');
|
|
140
173
|
}
|
|
141
174
|
// Explicit construction: this runs for every outbound frame, so avoid a
|
|
@@ -149,7 +182,8 @@ function encodeStreamHeader(header) {
|
|
|
149
182
|
metadata: header.metadata,
|
|
150
183
|
correlationId: header.correlationId,
|
|
151
184
|
flowId: header.flowId,
|
|
152
|
-
flowOrigin: encodeFlowOrigin(header.flowOrigin)
|
|
185
|
+
flowOrigin: encodeFlowOrigin(header.flowOrigin),
|
|
186
|
+
actorSlot: header.actorSlot
|
|
153
187
|
});
|
|
154
188
|
}
|
|
155
189
|
function decodeStreamHeader(header, flowEnabled = true) {
|
|
@@ -160,22 +194,24 @@ function decodeStreamHeader(header, flowEnabled = true) {
|
|
|
160
194
|
const hasMetadata = (flags & ZLinkStreamHeaderFlags.HasMetadata) !== 0;
|
|
161
195
|
const hasCorrelation = (flags & ZLinkStreamHeaderFlags.HasCorrelationId) !== 0;
|
|
162
196
|
const hasFlow = (flags & ZLinkStreamHeaderFlags.HasFlowId) !== 0;
|
|
163
|
-
|
|
197
|
+
const hasActorSlot = (flags & ZLinkStreamHeaderFlags.HasActorSlot) !== 0;
|
|
198
|
+
if (kind === ZLinkStreamMessageKind.Control &&
|
|
199
|
+
(hasCorrelation || hasRequestSeq || hasMetadata || hasFlow || hasActorSlot)) {
|
|
164
200
|
throw new Error('Control packet must not contain a request sequence, metadata, correlation id, or flow id.');
|
|
165
201
|
}
|
|
166
202
|
const metadata = publicStreamMetadata(decoded.metadata);
|
|
167
203
|
return {
|
|
168
204
|
kind,
|
|
169
205
|
codec: decoded.codec,
|
|
170
|
-
flags: (metadata.size === 0
|
|
171
|
-
?
|
|
172
|
-
: flags) & (flowEnabled ? ~0 : ~ZLinkStreamHeaderFlags.HasFlowId),
|
|
206
|
+
flags: (metadata.size === 0 ? flags & ~ZLinkStreamHeaderFlags.HasMetadata : flags) &
|
|
207
|
+
(flowEnabled ? ~0 : ~ZLinkStreamHeaderFlags.HasFlowId),
|
|
173
208
|
requestSeq: decoded.requestSeq,
|
|
174
209
|
name: decoded.name,
|
|
175
210
|
metadata,
|
|
176
211
|
correlationId: decoded.correlationId,
|
|
177
212
|
flowId: decoded.flowId,
|
|
178
|
-
flowOrigin: decodeFlowOrigin(decoded.flowOrigin)
|
|
213
|
+
flowOrigin: decodeFlowOrigin(decoded.flowOrigin),
|
|
214
|
+
actorSlot: decoded.actorSlot
|
|
179
215
|
};
|
|
180
216
|
}
|
|
181
217
|
function actorRequestDeadlineMetadata(deadlineUnixMs) {
|
|
@@ -212,16 +248,28 @@ function createStreamReplyHeader(requestHeader, kind, codec, flags, metadata, in
|
|
|
212
248
|
// observation-only and is not copied into the reply when tracing is Off
|
|
213
249
|
// (spec 27 §4, §7).
|
|
214
250
|
correlationId: requestHeader.correlationId,
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
251
|
+
actorSlot: requestHeader.actorSlot,
|
|
252
|
+
...(includeFlow ? { flowId: requestHeader.flowId, flowOrigin: requestHeader.flowOrigin } : {})
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function controlHeader(name) {
|
|
256
|
+
return {
|
|
257
|
+
kind: ZLinkStreamMessageKind.Control,
|
|
258
|
+
codec: ZLinkStreamCodec.Raw,
|
|
259
|
+
flags: ZLinkStreamHeaderFlags.None,
|
|
260
|
+
name,
|
|
261
|
+
metadata: EMPTY_STREAM_METADATA
|
|
218
262
|
};
|
|
219
263
|
}
|
|
220
264
|
function encodeFlowOrigin(origin) {
|
|
221
|
-
return origin === undefined
|
|
265
|
+
return origin === undefined
|
|
266
|
+
? undefined
|
|
267
|
+
: { Inbound: 1, Timer: 2, Application: 3, Lifecycle: 4 }[origin];
|
|
222
268
|
}
|
|
223
269
|
function decodeFlowOrigin(origin) {
|
|
224
|
-
return origin === undefined
|
|
270
|
+
return origin === undefined
|
|
271
|
+
? undefined
|
|
272
|
+
: { 1: 'Inbound', 2: 'Timer', 3: 'Application', 4: 'Lifecycle' }[origin];
|
|
225
273
|
}
|
|
226
274
|
function messageToBytes(message) {
|
|
227
275
|
const value = message;
|
|
@@ -37,10 +37,10 @@ class ZLinkSessionActorCoordinator {
|
|
|
37
37
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, 'Actor session binding requires a stream routing id.');
|
|
38
38
|
}
|
|
39
39
|
const previous = await this.routes.route(actorRef.actorId);
|
|
40
|
-
const sameIncarnation = previous !== undefined
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
const sameIncarnation = previous !== undefined &&
|
|
41
|
+
previous.context === context &&
|
|
42
|
+
previous.actor.ref.actorId === actorRef.actorId &&
|
|
43
|
+
BigInt(previous.actor.ref.objectGeneration) === BigInt(actorRef.objectGeneration);
|
|
44
44
|
const samePhysicalBinding = sameIncarnation && sameActorRef(previous.actor.ref, actorRef);
|
|
45
45
|
const reuseActor = sameIncarnation ? previous.actor : undefined;
|
|
46
46
|
if (reuseActor !== undefined) {
|
|
@@ -57,32 +57,33 @@ class ZLinkSessionActorCoordinator {
|
|
|
57
57
|
const boundActorRef = withBindingGeneration(actorRef, context.stream instanceof managed_stream_1.ZLinkManagedStream
|
|
58
58
|
? context.stream.actorBindingGeneration(actorRef.actorId)
|
|
59
59
|
: undefined, previous?.actor.ref);
|
|
60
|
-
const sessionActor = reuseActor
|
|
61
|
-
|
|
60
|
+
const sessionActor = reuseActor ??
|
|
61
|
+
new session_context_1.DefaultZLinkSessionActor(this.sessionActorRuntime, boundActorRef, bindingToken);
|
|
62
62
|
const sessionIdentity = String(this.actorBindingRoutingId(context));
|
|
63
|
-
sessionActor.updateRef(boundActorRef);
|
|
64
63
|
if (previous === undefined) {
|
|
65
64
|
if (releaseSeal !== undefined) {
|
|
66
65
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${actorRef.actorId}' route switch has no Session binding to release.`, true);
|
|
67
66
|
}
|
|
68
|
-
await this.routes.bind(context, sessionActor, bindingToken, authorityFence, sessionIdentity);
|
|
67
|
+
await this.routes.bind(context, sessionActor, bindingToken, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
|
|
69
68
|
}
|
|
70
69
|
else if (releaseSeal !== undefined) {
|
|
71
|
-
await this.routes.replaceAndReleaseSeal(previous, context, sessionActor, bindingToken, releaseSeal.sealId, authorityFence, sessionIdentity);
|
|
70
|
+
await this.routes.replaceAndReleaseSeal(previous, context, sessionActor, bindingToken, releaseSeal.sealId, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
|
|
72
71
|
}
|
|
73
72
|
else {
|
|
74
|
-
await this.routes.replace(previous, context, sessionActor, bindingToken, authorityFence, sessionIdentity);
|
|
73
|
+
await this.routes.replace(previous, context, sessionActor, bindingToken, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
|
|
75
74
|
}
|
|
76
|
-
if (confirmRemoteSessionBinding !== false &&
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
if (confirmRemoteSessionBinding !== false &&
|
|
76
|
+
this.options.confirmRemoteActorSessionBinding !== undefined) {
|
|
77
|
+
const waitForAcknowledgement = previous === undefined && confirmRemoteSessionBinding !== 'send';
|
|
79
78
|
const confirmation = this.options.confirmRemoteActorSessionBinding(boundActorRef, this.actorBindingRoutingId(context), undefined, { waitForAcknowledgement });
|
|
80
79
|
const reportFailure = (error) => {
|
|
81
80
|
// A fire-and-forget route update retains the already-current binding;
|
|
82
81
|
// its failure is bounded diagnostics rather than a rollback. The
|
|
83
82
|
// relay retries independently and reports the typed failure through
|
|
84
83
|
// the runtime error sink instead of silently discarding it.
|
|
85
|
-
this.options
|
|
84
|
+
this.options
|
|
85
|
+
.errorSink?.()
|
|
86
|
+
?.reportRuntimeTaskException('remote session binding confirmation', error);
|
|
86
87
|
};
|
|
87
88
|
if (waitForAcknowledgement) {
|
|
88
89
|
try {
|
|
@@ -126,8 +127,7 @@ class ZLinkSessionActorCoordinator {
|
|
|
126
127
|
}
|
|
127
128
|
async resolveAuthorityFence(actorRef, signal) {
|
|
128
129
|
const internal = actorRef;
|
|
129
|
-
if (internal.ownershipGeneration !== undefined
|
|
130
|
-
&& internal.ownerLeaseGeneration !== undefined) {
|
|
130
|
+
if (internal.ownershipGeneration !== undefined && internal.ownerLeaseGeneration !== undefined) {
|
|
131
131
|
const resolved = internal.ownerNodeGeneration === undefined
|
|
132
132
|
? await this.options.actorAuthorityFenceResolver?.(actorRef.actorId, signal)
|
|
133
133
|
: undefined;
|
|
@@ -200,16 +200,16 @@ class ZLinkSessionActorCoordinator {
|
|
|
200
200
|
requireSameIncarnation(route.actor.ref, normalizedActorRef);
|
|
201
201
|
if ((0, routing_id_1.routingIdsEqual)(route.actor.ref.nodeRid, normalizedActorRef.nodeRid)) {
|
|
202
202
|
const authorityFence = await this.resolveAuthorityFence(normalizedActorRef, signal);
|
|
203
|
-
if (options.releaseSeal !== undefined
|
|
204
|
-
|
|
203
|
+
if (options.releaseSeal !== undefined &&
|
|
204
|
+
!(await this.routes.validateSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))) {
|
|
205
205
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${normalizedActorRef.actorId}' route switch did not match its relocation seal.`, true);
|
|
206
206
|
}
|
|
207
207
|
route.actor.updateRef(normalizedActorRef);
|
|
208
208
|
if (authorityFence !== undefined) {
|
|
209
209
|
await this.routes.updateAuthorityFence(normalizedActorRef.actorId, authorityFence);
|
|
210
210
|
}
|
|
211
|
-
if (options.releaseSeal !== undefined
|
|
212
|
-
|
|
211
|
+
if (options.releaseSeal !== undefined &&
|
|
212
|
+
!(await this.routes.abortSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))) {
|
|
213
213
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${normalizedActorRef.actorId}' route switch lost its relocation seal.`, true);
|
|
214
214
|
}
|
|
215
215
|
return;
|
|
@@ -221,10 +221,10 @@ class ZLinkSessionActorCoordinator {
|
|
|
221
221
|
return await this.lifecycle.run(actorRef.actorId, async () => {
|
|
222
222
|
(0, abort_1.throwIfAborted)(signal);
|
|
223
223
|
const route = await this.routes.route(actorRef.actorId);
|
|
224
|
-
if (route === undefined
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
224
|
+
if (route === undefined ||
|
|
225
|
+
!sameActorRef(route.actor.ref, actorRef) ||
|
|
226
|
+
!(0, routing_id_1.routingIdsEqual)(route.sessionIdentity, sessionRid) ||
|
|
227
|
+
bindingGenerationOf(route.actor.ref) !== bindingGeneration) {
|
|
228
228
|
return false;
|
|
229
229
|
}
|
|
230
230
|
// A late legacy tombstone may remove only the still-current exact route.
|
|
@@ -241,9 +241,7 @@ class ZLinkSessionActorCoordinator {
|
|
|
241
241
|
const route = await this.routes.route(actorId);
|
|
242
242
|
const sessionRid = route?.sessionIdentity;
|
|
243
243
|
const actor = route?.actor.ref;
|
|
244
|
-
if (route === undefined
|
|
245
|
-
|| sessionRid === undefined
|
|
246
|
-
|| actor?.bindingGeneration === undefined) {
|
|
244
|
+
if (route === undefined || sessionRid === undefined || actor?.bindingGeneration === undefined) {
|
|
247
245
|
return undefined;
|
|
248
246
|
}
|
|
249
247
|
return {
|
|
@@ -286,9 +284,7 @@ exports.ZLinkSessionActorCoordinator = ZLinkSessionActorCoordinator;
|
|
|
286
284
|
function withBindingGeneration(actorRef, nativeBindingGeneration, previousRef) {
|
|
287
285
|
const input = actorRef;
|
|
288
286
|
const previous = previousRef;
|
|
289
|
-
const bindingGeneration = nativeBindingGeneration
|
|
290
|
-
?? input.bindingGeneration
|
|
291
|
-
?? previous?.bindingGeneration;
|
|
287
|
+
const bindingGeneration = nativeBindingGeneration ?? input.bindingGeneration ?? previous?.bindingGeneration;
|
|
292
288
|
if (bindingGeneration === undefined) {
|
|
293
289
|
return actorRef;
|
|
294
290
|
}
|
|
@@ -323,10 +319,10 @@ function preserveInternalActorRefField(target, source, field) {
|
|
|
323
319
|
});
|
|
324
320
|
}
|
|
325
321
|
function isActorRefLike(value) {
|
|
326
|
-
return (typeof value === 'object'
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
322
|
+
return (typeof value === 'object' &&
|
|
323
|
+
'nodeRid' in value &&
|
|
324
|
+
'actorId' in value &&
|
|
325
|
+
('objectGeneration' in value || 'generation' in value));
|
|
330
326
|
}
|
|
331
327
|
function normalizeActorRef(value, defaultMeshName) {
|
|
332
328
|
const objectGeneration = value.objectGeneration ?? value.generation;
|
|
@@ -357,15 +353,15 @@ function createBindingToken() {
|
|
|
357
353
|
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
358
354
|
}
|
|
359
355
|
function sameActorRef(left, right) {
|
|
360
|
-
return (0, routing_id_1.routingIdsEqual)(left.nodeRid, right.nodeRid)
|
|
361
|
-
|
|
362
|
-
|
|
356
|
+
return ((0, routing_id_1.routingIdsEqual)(left.nodeRid, right.nodeRid) &&
|
|
357
|
+
left.actorId === right.actorId &&
|
|
358
|
+
BigInt(left.objectGeneration) === BigInt(right.objectGeneration));
|
|
363
359
|
}
|
|
364
360
|
function requireSameIncarnation(current, updated) {
|
|
365
|
-
if (current.actorId === updated.actorId
|
|
366
|
-
|
|
361
|
+
if (current.actorId === updated.actorId &&
|
|
362
|
+
BigInt(current.objectGeneration) === BigInt(updated.objectGeneration)) {
|
|
367
363
|
return;
|
|
368
364
|
}
|
|
369
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${updated.actorId}' route update cannot replace object generation `
|
|
370
|
-
|
|
365
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${updated.actorId}' route update cannot replace object generation ` +
|
|
366
|
+
`${String(current.objectGeneration)} with ${String(updated.objectGeneration)}.`, true);
|
|
371
367
|
}
|
|
@@ -10,6 +10,8 @@ import type { ServiceRetiredBoundSessionRouteFence } from '../foundation/service
|
|
|
10
10
|
export interface ZLinkSessionContextStream extends ZLinkStream {
|
|
11
11
|
writeRaw(payload: Message, flags?: number): boolean;
|
|
12
12
|
submitRaw(payload: Message, signal?: AbortSignal, timeoutMs?: number): Promise<ZLinkSubmitResult>;
|
|
13
|
+
enqueueActorBound?(actorSlot: number, actorId: string): Promise<void>;
|
|
14
|
+
enqueueActorUnbound?(actorSlot: number): Promise<void>;
|
|
13
15
|
}
|
|
14
16
|
interface ZLinkSessionContextRuntime {
|
|
15
17
|
cleanup(context: DefaultZLinkSessionContext): Promise<void>;
|
|
@@ -76,7 +78,12 @@ export declare class DefaultZLinkSessionContext implements ZLinkSessionContext {
|
|
|
76
78
|
payloadForHeader(header: ZLinkStreamFrameHeader, payload: Message): Message;
|
|
77
79
|
get boundActors(): readonly DefaultZLinkSessionActor[];
|
|
78
80
|
findBoundActor(actorId: string): DefaultZLinkSessionActor | undefined;
|
|
79
|
-
|
|
81
|
+
actorForSlot(actorSlot: number | undefined): DefaultZLinkSessionActor | undefined;
|
|
82
|
+
get actorSlotControls(): {
|
|
83
|
+
enqueueBound(actorSlot: number, actorId: string): Promise<void>;
|
|
84
|
+
enqueueUnbound(actorSlot: number): Promise<void>;
|
|
85
|
+
} | undefined;
|
|
86
|
+
bindLocal(actor: DefaultZLinkSessionActor, token: string, actorSlot?: number): void;
|
|
80
87
|
unbindLocal(actorId: string, token: string): void;
|
|
81
88
|
completeConfiguration(): void;
|
|
82
89
|
}
|
|
@@ -92,7 +99,7 @@ export declare class DefaultZLinkSessionActor implements ZLinkSessionActor {
|
|
|
92
99
|
relay(dispatch: ZLinkSessionDispatchContext, payload: ZLinkMessage, signal?: AbortSignal): Promise<void>;
|
|
93
100
|
notifyDisconnected(signal?: AbortSignal): Promise<void>;
|
|
94
101
|
}
|
|
95
|
-
export declare function createSessionDispatchContext(header: ZLinkStreamFrameHeader): ZLinkSessionDispatchContext;
|
|
102
|
+
export declare function createSessionDispatchContext(header: ZLinkStreamFrameHeader, actor?: DefaultZLinkSessionActor): ZLinkSessionDispatchContext;
|
|
96
103
|
export declare class DefaultZLinkBoundSession implements ZLinkBoundSession {
|
|
97
104
|
private readonly runtime;
|
|
98
105
|
private readonly actorId;
|
|
@@ -71,9 +71,9 @@ class DefaultZLinkSessionContext {
|
|
|
71
71
|
}
|
|
72
72
|
beginActorBindingReplacement(actor, retiredSession) {
|
|
73
73
|
const previous = this.retiredActorBindings.get(actor.actorId);
|
|
74
|
-
if (previous !== undefined
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
if (previous !== undefined &&
|
|
75
|
+
previous.actorGeneration === actor.generation &&
|
|
76
|
+
sameRetiredSession(previous.retiredSession, retiredSession)) {
|
|
77
77
|
return false;
|
|
78
78
|
}
|
|
79
79
|
this.closingForActorReplacement = true;
|
|
@@ -85,17 +85,17 @@ class DefaultZLinkSessionContext {
|
|
|
85
85
|
}
|
|
86
86
|
isExactRetiredActorBinding(actor, retiredSession) {
|
|
87
87
|
const expected = this.retiredActorBindings.get(actor.actorId);
|
|
88
|
-
if (expected === undefined
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
if (expected === undefined ||
|
|
89
|
+
expected.actorGeneration !== actor.generation ||
|
|
90
|
+
!sameRetiredSession(expected.retiredSession, retiredSession)) {
|
|
91
91
|
return false;
|
|
92
92
|
}
|
|
93
93
|
const current = this.findBoundActor(actor.actorId);
|
|
94
94
|
if (current === undefined)
|
|
95
95
|
return true;
|
|
96
96
|
const currentRef = current.ref;
|
|
97
|
-
return BigInt(currentRef.objectGeneration) === actor.generation
|
|
98
|
-
|
|
97
|
+
return (BigInt(currentRef.objectGeneration) === actor.generation &&
|
|
98
|
+
currentRef.bindingGeneration === retiredSession.retiredBindingGeneration);
|
|
99
99
|
}
|
|
100
100
|
createTextMessage(payload) {
|
|
101
101
|
return this.runtime.createTextMessage(payload);
|
|
@@ -163,8 +163,23 @@ class DefaultZLinkSessionContext {
|
|
|
163
163
|
findBoundActor(actorId) {
|
|
164
164
|
return this.localActors.find(actorId);
|
|
165
165
|
}
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
actorForSlot(actorSlot) {
|
|
167
|
+
if (actorSlot === undefined)
|
|
168
|
+
return undefined;
|
|
169
|
+
return this.localActors.findBySlot(actorSlot);
|
|
170
|
+
}
|
|
171
|
+
get actorSlotControls() {
|
|
172
|
+
if (this.stream.enqueueActorBound === undefined ||
|
|
173
|
+
this.stream.enqueueActorUnbound === undefined) {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
enqueueBound: (actorSlot, actorId) => this.stream.enqueueActorBound(actorSlot, actorId),
|
|
178
|
+
enqueueUnbound: (actorSlot) => this.stream.enqueueActorUnbound(actorSlot)
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
bindLocal(actor, token, actorSlot) {
|
|
182
|
+
this.localActors.bind(actor, token, actorSlot);
|
|
168
183
|
}
|
|
169
184
|
unbindLocal(actorId, token) {
|
|
170
185
|
this.localActors.unbind(actorId, token);
|
|
@@ -194,7 +209,9 @@ class DefaultZLinkSessionHandlerRegistry {
|
|
|
194
209
|
if (typeof handlerType.prototype?.handle !== 'function') {
|
|
195
210
|
throw new TypeError(`Session handler '${handlerType.name}' must implement handle(...).`);
|
|
196
211
|
}
|
|
197
|
-
this.handlersByPacket.set(packetName, {
|
|
212
|
+
this.handlersByPacket.set(packetName, {
|
|
213
|
+
handlerType: handlerType
|
|
214
|
+
});
|
|
198
215
|
return this;
|
|
199
216
|
}
|
|
200
217
|
closeRegistration() {
|
|
@@ -215,14 +232,15 @@ class DefaultZLinkSessionHandlerRegistry {
|
|
|
215
232
|
return await registration.instance;
|
|
216
233
|
}
|
|
217
234
|
async createHandler(handlerType) {
|
|
218
|
-
return this.providerResolver?.get?.(handlerType)
|
|
219
|
-
|
|
220
|
-
|
|
235
|
+
return (this.providerResolver?.get?.(handlerType) ??
|
|
236
|
+
(await this.providerResolver?.create?.(handlerType)) ??
|
|
237
|
+
new handlerType());
|
|
221
238
|
}
|
|
222
239
|
}
|
|
223
240
|
function sessionHandlerPacketName(handlerType) {
|
|
224
241
|
const declared = (0, Attributes_1.readZLinkDecoratorMetadata)(handlerType)
|
|
225
|
-
.find((metadata) => metadata.kind === 'packet')
|
|
242
|
+
.find((metadata) => metadata.kind === 'packet')
|
|
243
|
+
?.packetName?.trim();
|
|
226
244
|
if (declared === undefined || declared.length === 0) {
|
|
227
245
|
throw new configuration_1.ZLinkConfigurationException(`Session handler '${handlerType.name}' must declare a packet name with @ZLinkPacket(...).`);
|
|
228
246
|
}
|
|
@@ -281,16 +299,14 @@ class DefaultZLinkSessionActor {
|
|
|
281
299
|
throw new Error(`Cannot change session actor id from '${this.actorId}' to '${ref.actorId}'.`);
|
|
282
300
|
}
|
|
283
301
|
if (BigInt(ref.objectGeneration) !== BigInt(this.currentRef.objectGeneration)) {
|
|
284
|
-
throw new Error(`Cannot change session actor '${this.actorId}' object generation `
|
|
285
|
-
|
|
286
|
-
|
|
302
|
+
throw new Error(`Cannot change session actor '${this.actorId}' object generation ` +
|
|
303
|
+
`from ${String(this.currentRef.objectGeneration)} ` +
|
|
304
|
+
`to ${String(ref.objectGeneration)}.`);
|
|
287
305
|
}
|
|
288
306
|
this.currentRef = ref;
|
|
289
307
|
}
|
|
290
308
|
async relay(dispatchOrPayload, payloadOrSignal, signal) {
|
|
291
|
-
const dispatch = isSessionDispatchContext(dispatchOrPayload)
|
|
292
|
-
? dispatchOrPayload
|
|
293
|
-
: undefined;
|
|
309
|
+
const dispatch = isSessionDispatchContext(dispatchOrPayload) ? dispatchOrPayload : undefined;
|
|
294
310
|
let payload;
|
|
295
311
|
let relaySignal;
|
|
296
312
|
let header;
|
|
@@ -312,19 +328,21 @@ class DefaultZLinkSessionActor {
|
|
|
312
328
|
}
|
|
313
329
|
exports.DefaultZLinkSessionActor = DefaultZLinkSessionActor;
|
|
314
330
|
const SESSION_DISPATCH_HEADERS = new WeakMap();
|
|
315
|
-
function createSessionDispatchContext(header) {
|
|
331
|
+
function createSessionDispatchContext(header, actor) {
|
|
316
332
|
const dispatch = {
|
|
317
333
|
packetName: header.name,
|
|
318
334
|
metadata: header.metadata,
|
|
319
|
-
canReply: header.requestSeq !== undefined
|
|
335
|
+
canReply: header.requestSeq !== undefined,
|
|
336
|
+
...(actor === undefined ? {} : { actor })
|
|
320
337
|
};
|
|
321
338
|
SESSION_DISPATCH_HEADERS.set(dispatch, header);
|
|
322
339
|
return dispatch;
|
|
323
340
|
}
|
|
324
341
|
function isSessionDispatchContext(value) {
|
|
325
|
-
return value !== null &&
|
|
326
|
-
|
|
327
|
-
|
|
342
|
+
return (value !== null &&
|
|
343
|
+
typeof value === 'object' &&
|
|
344
|
+
typeof value.packetName === 'string' &&
|
|
345
|
+
'canReply' in value);
|
|
328
346
|
}
|
|
329
347
|
function sessionDispatchHeader(dispatch) {
|
|
330
348
|
const header = SESSION_DISPATCH_HEADERS.get(dispatch);
|
|
@@ -368,10 +386,10 @@ function decodeStreamErrorPayload(payload) {
|
|
|
368
386
|
}
|
|
369
387
|
}
|
|
370
388
|
function sameRetiredSession(left, right) {
|
|
371
|
-
return left.sessionOwnerNodeRid === right.sessionOwnerNodeRid
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
389
|
+
return (left.sessionOwnerNodeRid === right.sessionOwnerNodeRid &&
|
|
390
|
+
left.sessionOwnerNodeGeneration === right.sessionOwnerNodeGeneration &&
|
|
391
|
+
left.sessionOwnerId === right.sessionOwnerId &&
|
|
392
|
+
left.sessionOwnerLeaseGeneration === right.sessionOwnerLeaseGeneration &&
|
|
393
|
+
left.sessionRid === right.sessionRid &&
|
|
394
|
+
left.retiredBindingGeneration === right.retiredBindingGeneration);
|
|
377
395
|
}
|
|
@@ -3,8 +3,10 @@ export interface ZLinkSessionLocalActor {
|
|
|
3
3
|
}
|
|
4
4
|
export declare class ZLinkSessionLocalActorBindings<TActor extends ZLinkSessionLocalActor> {
|
|
5
5
|
private readonly actors;
|
|
6
|
+
private readonly actorIdsBySlot;
|
|
6
7
|
snapshot(): readonly TActor[];
|
|
7
8
|
find(actorId: string): TActor | undefined;
|
|
8
|
-
|
|
9
|
+
findBySlot(actorSlot: number): TActor | undefined;
|
|
10
|
+
bind(actor: TActor, token: string, actorSlot?: number): void;
|
|
9
11
|
unbind(actorId: string, token: string): void;
|
|
10
12
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZLinkSessionLocalActorBindings = void 0;
|
|
4
4
|
class ZLinkSessionLocalActorBindings {
|
|
5
5
|
actors = new Map();
|
|
6
|
+
actorIdsBySlot = new Map();
|
|
6
7
|
snapshot() {
|
|
7
8
|
const snapshot = [];
|
|
8
9
|
for (const entry of this.actors.values()) {
|
|
@@ -13,13 +14,27 @@ class ZLinkSessionLocalActorBindings {
|
|
|
13
14
|
find(actorId) {
|
|
14
15
|
return this.actors.get(actorId)?.actor;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
this.
|
|
17
|
+
findBySlot(actorSlot) {
|
|
18
|
+
const actorId = this.actorIdsBySlot.get(actorSlot);
|
|
19
|
+
return actorId === undefined ? undefined : this.actors.get(actorId)?.actor;
|
|
20
|
+
}
|
|
21
|
+
bind(actor, token, actorSlot) {
|
|
22
|
+
const previous = this.actors.get(actor.actorId);
|
|
23
|
+
if (previous?.actorSlot !== undefined && previous.actorSlot !== actorSlot) {
|
|
24
|
+
this.actorIdsBySlot.delete(previous.actorSlot);
|
|
25
|
+
}
|
|
26
|
+
this.actors.set(actor.actorId, { actor, token, actorSlot });
|
|
27
|
+
if (actorSlot !== undefined) {
|
|
28
|
+
this.actorIdsBySlot.set(actorSlot, actor.actorId);
|
|
29
|
+
}
|
|
18
30
|
}
|
|
19
31
|
unbind(actorId, token) {
|
|
20
32
|
const current = this.actors.get(actorId);
|
|
21
33
|
if (current?.token === token) {
|
|
22
34
|
this.actors.delete(actorId);
|
|
35
|
+
if (current.actorSlot !== undefined) {
|
|
36
|
+
this.actorIdsBySlot.delete(current.actorSlot);
|
|
37
|
+
}
|
|
23
38
|
}
|
|
24
39
|
}
|
|
25
40
|
}
|
|
@@ -25,6 +25,6 @@ async function createProviderInstance(type, resolver, fallbackArg) {
|
|
|
25
25
|
: new type(fallbackArg);
|
|
26
26
|
}
|
|
27
27
|
function isSessionFactory(value) {
|
|
28
|
-
return typeof value.create === 'function'
|
|
29
|
-
|
|
28
|
+
return (typeof value.create === 'function' &&
|
|
29
|
+
value.context === undefined);
|
|
30
30
|
}
|
|
@@ -33,8 +33,7 @@ class ZLinkSessionSerialExecutor {
|
|
|
33
33
|
const submitted = (0, application_job_queue_scope_1.hasApplicationJobPermit)()
|
|
34
34
|
? this.scheduler.submitPreAdmitted(boundWork, serialOptions)
|
|
35
35
|
: this.scheduler.submit(boundWork, serialOptions);
|
|
36
|
-
void submitted
|
|
37
|
-
.catch(error => onRejected?.(error));
|
|
36
|
+
void submitted.catch((error) => onRejected?.(error));
|
|
38
37
|
return true;
|
|
39
38
|
}
|
|
40
39
|
async dispose() {
|
|
@@ -27,7 +27,7 @@ export declare class ZLinkStreamFrameMessageFactory {
|
|
|
27
27
|
constructor(options: ZLinkStreamFrameMessageFactoryOptions);
|
|
28
28
|
createTextMessage(payload: string): Message;
|
|
29
29
|
createBinaryMessage(payload: Uint8Array): Message;
|
|
30
|
-
createJsonFrameMessage(kind: ZLinkStreamMessageKind, packetName: string, metadata: ReadonlyMap<string, string>, compressed: boolean, requestSeq: bigint | undefined, payload: unknown, correlationId?: string): Message;
|
|
30
|
+
createJsonFrameMessage(kind: ZLinkStreamMessageKind, packetName: string, metadata: ReadonlyMap<string, string>, compressed: boolean, requestSeq: bigint | undefined, payload: unknown, correlationId?: string, actorSlot?: number): Message;
|
|
31
31
|
createJsonReplyFrameMessage(requestHeader: ZLinkStreamFrameHeader, kind: ZLinkStreamReplyMessageKind, metadata: ReadonlyMap<string, string>, compressed: boolean, payload: unknown): Message;
|
|
32
32
|
private createJsonFrameMessageWithHeader;
|
|
33
33
|
/**
|
|
@@ -26,7 +26,7 @@ class ZLinkStreamFrameMessageFactory {
|
|
|
26
26
|
}
|
|
27
27
|
return factory.createTextMessage((0, protocol_1.utf8Decode)(payload));
|
|
28
28
|
}
|
|
29
|
-
createJsonFrameMessage(kind, packetName, metadata, compressed, requestSeq, payload, correlationId) {
|
|
29
|
+
createJsonFrameMessage(kind, packetName, metadata, compressed, requestSeq, payload, correlationId, actorSlot) {
|
|
30
30
|
const flow = (this.options.flowCreationEnabled?.() ?? true)
|
|
31
31
|
? (0, flow_context_1.currentOrCreateFlow)('Application')
|
|
32
32
|
: undefined;
|
|
@@ -41,7 +41,8 @@ class ZLinkStreamFrameMessageFactory {
|
|
|
41
41
|
metadata,
|
|
42
42
|
correlationId,
|
|
43
43
|
flowId: flow?.flowId,
|
|
44
|
-
flowOrigin: flow?.flowOrigin
|
|
44
|
+
flowOrigin: flow?.flowOrigin,
|
|
45
|
+
actorSlot
|
|
45
46
|
}));
|
|
46
47
|
}
|
|
47
48
|
createJsonReplyFrameMessage(requestHeader, kind, metadata, compressed, payload) {
|
|
@@ -53,7 +54,9 @@ class ZLinkStreamFrameMessageFactory {
|
|
|
53
54
|
if (compressed) {
|
|
54
55
|
body = compressStreamPayload(body, this.compressionCodec);
|
|
55
56
|
}
|
|
56
|
-
const flags = compressed
|
|
57
|
+
const flags = compressed
|
|
58
|
+
? protocol_1.ZLinkStreamHeaderFlags.PayloadCompressed
|
|
59
|
+
: protocol_1.ZLinkStreamHeaderFlags.None;
|
|
57
60
|
const frame = (0, protocol_1.encodeStreamFrame)(createHeader(encoded.codec, flags), body);
|
|
58
61
|
return this.createOwnedFrameMessage(frame);
|
|
59
62
|
}
|
|
@@ -92,10 +95,14 @@ class ZLinkStreamFrameMessageFactory {
|
|
|
92
95
|
exports.ZLinkStreamFrameMessageFactory = ZLinkStreamFrameMessageFactory;
|
|
93
96
|
function streamDirection(kind) {
|
|
94
97
|
switch (kind) {
|
|
95
|
-
case protocol_1.ZLinkStreamMessageKind.Request:
|
|
96
|
-
|
|
97
|
-
case protocol_1.ZLinkStreamMessageKind.
|
|
98
|
-
|
|
98
|
+
case protocol_1.ZLinkStreamMessageKind.Request:
|
|
99
|
+
return 'Request';
|
|
100
|
+
case protocol_1.ZLinkStreamMessageKind.Response:
|
|
101
|
+
return 'Response';
|
|
102
|
+
case protocol_1.ZLinkStreamMessageKind.Error:
|
|
103
|
+
return 'Error';
|
|
104
|
+
default:
|
|
105
|
+
return 'Send';
|
|
99
106
|
}
|
|
100
107
|
}
|
|
101
108
|
exports.zlinkStreamLz4CompressionCodec = {
|