@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
|
@@ -29,7 +29,7 @@ class ZLinkActorSerialExecutor {
|
|
|
29
29
|
admitDurablePrefix(records) {
|
|
30
30
|
// No await occurs in this map: the whole durable prefix is appended in
|
|
31
31
|
// one event-loop turn before later ingress can observe the released hold.
|
|
32
|
-
return records.map(record => this.scheduler.admitDurablePrefix(() => record.operation(child => (0, actor_execution_context_1.runZLinkActorExecution)(this.actorId, this.sourceSpotId, child)), record.workOptions, undefined, record.preparation));
|
|
32
|
+
return records.map((record) => this.scheduler.admitDurablePrefix(() => record.operation((child) => (0, actor_execution_context_1.runZLinkActorExecution)(this.actorId, this.sourceSpotId, child)), record.workOptions, undefined, record.preparation));
|
|
33
33
|
}
|
|
34
34
|
close() {
|
|
35
35
|
return this.scheduler.close();
|
|
@@ -58,8 +58,9 @@ function decodeActorMessageFollowContext(value) {
|
|
|
58
58
|
const checksum = input.payloadChecksumSha256;
|
|
59
59
|
if (typeof request !== 'boolean')
|
|
60
60
|
throw invalidContext('request must be boolean');
|
|
61
|
-
if (!Number.isSafeInteger(hopCount) ||
|
|
62
|
-
|
|
61
|
+
if (!Number.isSafeInteger(hopCount) ||
|
|
62
|
+
hopCount < 0 ||
|
|
63
|
+
hopCount > exports.ZLINK_MESSAGE_FOLLOW_MAX_HOPS) {
|
|
63
64
|
throw invalidContext('hopCount is outside 0..8');
|
|
64
65
|
}
|
|
65
66
|
if (typeof checksum !== 'string' || !/^[0-9a-f]{64}$/.test(checksum)) {
|
|
@@ -74,16 +75,16 @@ function decodeActorMessageFollowContext(value) {
|
|
|
74
75
|
if (!request && replyRouteId !== undefined) {
|
|
75
76
|
throw invalidContext('one-way context must not contain replyRouteId');
|
|
76
77
|
}
|
|
77
|
-
if (!Array.isArray(input.visitedOwners)
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
if (!Array.isArray(input.visitedOwners) ||
|
|
79
|
+
input.visitedOwners.some((item) => typeof item !== 'string' || item.length === 0) ||
|
|
80
|
+
input.visitedOwners.length !== hopCount + 1) {
|
|
80
81
|
throw invalidContext('visitedOwners does not match hopCount');
|
|
81
82
|
}
|
|
82
83
|
const visitedOwners = [...input.visitedOwners];
|
|
83
84
|
const targetOwnerKeys = messageFollowOwnerFenceCompatibleKeys(targetOwner);
|
|
84
|
-
if (new Set(visitedOwners).size !== visitedOwners.length
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
if (new Set(visitedOwners).size !== visitedOwners.length ||
|
|
86
|
+
!targetOwnerKeys.includes(visitedOwners[visitedOwners.length - 1]) ||
|
|
87
|
+
visitedOwners.slice(0, -1).some((key) => targetOwnerKeys.includes(key))) {
|
|
87
88
|
throw invalidContext('visited owner fence chain is invalid');
|
|
88
89
|
}
|
|
89
90
|
return freezeContext({
|
|
@@ -108,8 +109,7 @@ function advanceActorMessageFollowContext(context, sourceOwner, targetOwner) {
|
|
|
108
109
|
throw invalidContext('Message Follow reached the 8-hop limit');
|
|
109
110
|
}
|
|
110
111
|
const targetKey = messageFollowOwnerFenceKey(targetOwner);
|
|
111
|
-
if (messageFollowOwnerFenceCompatibleKeys(targetOwner)
|
|
112
|
-
.some(key => context.visitedOwners.includes(key))) {
|
|
112
|
+
if (messageFollowOwnerFenceCompatibleKeys(targetOwner).some((key) => context.visitedOwners.includes(key))) {
|
|
113
113
|
throw invalidContext('Message Follow owner loop was detected');
|
|
114
114
|
}
|
|
115
115
|
return freezeContext({
|
|
@@ -127,8 +127,7 @@ function attachActorMessageFollowContext(actorRef, context) {
|
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
function actorMessageFollowContext(actorRef) {
|
|
130
|
-
return actorRef
|
|
131
|
-
?.__zlinkMessageFollowContext;
|
|
130
|
+
return actorRef?.__zlinkMessageFollowContext;
|
|
132
131
|
}
|
|
133
132
|
function actorMessageFollowPayloadChecksum(parts) {
|
|
134
133
|
const hash = (0, node_crypto_1.createHash)('sha256');
|
|
@@ -198,8 +197,7 @@ function freezeContext(context) {
|
|
|
198
197
|
});
|
|
199
198
|
}
|
|
200
199
|
function requireId(value, name) {
|
|
201
|
-
if (typeof value !== 'string' || !/^[0-9a-f]{32}$/.test(value)
|
|
202
|
-
|| /^0+$/.test(value)) {
|
|
200
|
+
if (typeof value !== 'string' || !/^[0-9a-f]{32}$/.test(value) || /^0+$/.test(value)) {
|
|
203
201
|
throw invalidContext(`${name} must be a nonzero 128-bit lowercase hex value`);
|
|
204
202
|
}
|
|
205
203
|
return value;
|
|
@@ -222,8 +220,10 @@ function requirePositiveBigInt(value, name) {
|
|
|
222
220
|
function optionalNodeRidHex(value, name) {
|
|
223
221
|
if (value === undefined)
|
|
224
222
|
return undefined;
|
|
225
|
-
if (typeof value !== 'string' ||
|
|
226
|
-
|
|
223
|
+
if (typeof value !== 'string' ||
|
|
224
|
+
value.length === 0 ||
|
|
225
|
+
value.length % 2 !== 0 ||
|
|
226
|
+
!/^[0-9a-f]+$/.test(value)) {
|
|
227
227
|
throw invalidContext(`${name} must be non-empty lowercase hexadecimal bytes`);
|
|
228
228
|
}
|
|
229
229
|
return value;
|
|
@@ -231,18 +231,21 @@ function optionalNodeRidHex(value, name) {
|
|
|
231
231
|
function messageFollowOwnerFenceCompatibleKeys(fence) {
|
|
232
232
|
const canonical = messageFollowOwnerFenceKey(fence);
|
|
233
233
|
const textHex = (0, routing_id_1.encodeRoutingIdStorageHex)(fence.nodeRid);
|
|
234
|
-
if (fence.nodeRid.includes('\u0000')
|
|
235
|
-
|
|
236
|
-
|
|
234
|
+
if (fence.nodeRid.includes('\u0000') ||
|
|
235
|
+
fence.ownerId.includes('\u0000') ||
|
|
236
|
+
(fence.nodeRidHex !== undefined && fence.nodeRidHex !== textHex)) {
|
|
237
237
|
return [canonical];
|
|
238
238
|
}
|
|
239
|
-
return [
|
|
239
|
+
return [
|
|
240
|
+
canonical,
|
|
241
|
+
[
|
|
240
242
|
fence.nodeRid,
|
|
241
243
|
fence.nodeGeneration,
|
|
242
244
|
fence.ownerId,
|
|
243
245
|
fence.ownerLeaseGeneration,
|
|
244
246
|
fence.authorityOwnerGeneration
|
|
245
|
-
].join('\u0000')
|
|
247
|
+
].join('\u0000')
|
|
248
|
+
];
|
|
246
249
|
}
|
|
247
250
|
function optionalPositiveSafeInteger(value, name) {
|
|
248
251
|
if (value === undefined)
|
|
@@ -40,9 +40,7 @@ function encodeRemoteActorPacketRelayPayload(input) {
|
|
|
40
40
|
boundSessionTargetNodeRid: input.boundSessionTargetNodeRid,
|
|
41
41
|
boundSessionSpotId: input.boundSessionSpotId,
|
|
42
42
|
actorNodeRid: input.actorRef === undefined ? undefined : String(input.actorRef.nodeRid),
|
|
43
|
-
actorNodeRidHex: input.actorRef === undefined
|
|
44
|
-
? undefined
|
|
45
|
-
: (0, routing_id_1.routingIdWireHex)(input.actorRef.nodeRid),
|
|
43
|
+
actorNodeRidHex: input.actorRef === undefined ? undefined : (0, routing_id_1.routingIdWireHex)(input.actorRef.nodeRid),
|
|
46
44
|
actorGeneration: input.actorRef?.objectGeneration.toString(),
|
|
47
45
|
bindingActorNodeRid: input.bindingActorRef === undefined ? undefined : String(input.bindingActorRef.nodeRid),
|
|
48
46
|
bindingActorNodeRidHex: input.bindingActorRef === undefined
|
|
@@ -47,7 +47,9 @@ class ZLinkActorNativeJoinCoordinator {
|
|
|
47
47
|
async joinSpot(actor, state, spotId, request, timeoutMs, signal, completionOperationId) {
|
|
48
48
|
(0, abort_1.throwIfAborted)(signal);
|
|
49
49
|
const node = this.node();
|
|
50
|
-
const actorRef = state.nativeActorRef ??
|
|
50
|
+
const actorRef = state.nativeActorRef ??
|
|
51
|
+
(0, actor_native_lookup_1.lookupNativeActorRef)(node, actor.context.actorId) ??
|
|
52
|
+
node.createActor(actor.context.actorId);
|
|
51
53
|
state.setNativeActorRef(actorRef);
|
|
52
54
|
let target;
|
|
53
55
|
target = await this.options.spotRouteResolver?.resolve(spotId, signal);
|
|
@@ -58,21 +60,24 @@ class ZLinkActorNativeJoinCoordinator {
|
|
|
58
60
|
async joinEntrySpot(actor, state, nodeRid, request, timeoutMs, signal, completionOperationId) {
|
|
59
61
|
(0, abort_1.throwIfAborted)(signal);
|
|
60
62
|
const node = this.node();
|
|
61
|
-
const actorRef = state.nativeActorRef ??
|
|
63
|
+
const actorRef = state.nativeActorRef ??
|
|
64
|
+
(0, actor_native_lookup_1.lookupNativeActorRef)(node, actor.context.actorId) ??
|
|
65
|
+
node.createActor(actor.context.actorId);
|
|
62
66
|
state.setNativeActorRef(actorRef);
|
|
63
67
|
const meshName = state.meshName ?? actor.context.meshName;
|
|
64
68
|
const entrySpotId = this.options.entrySpotIdProvider?.(meshName);
|
|
65
69
|
let resolvedTarget;
|
|
66
|
-
resolvedTarget =
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
resolvedTarget =
|
|
71
|
+
entrySpotId === undefined
|
|
72
|
+
? undefined
|
|
73
|
+
: await this.options.spotRouteResolver?.resolve(entrySpotId, signal);
|
|
69
74
|
// The caller may carry the Entry node from the previous membership.
|
|
70
75
|
// Entry placement can change while the Actor is in a User Spot, so the
|
|
71
76
|
// current authority route is the source of truth whenever it is available.
|
|
72
|
-
const selectedNodeRid = resolvedTarget?.targetNodeRid
|
|
73
|
-
??
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
const selectedNodeRid = resolvedTarget?.targetNodeRid ??
|
|
78
|
+
nodeRid ??
|
|
79
|
+
state.entryNodeRid ??
|
|
80
|
+
(0, actor_runtime_state_1.toFrameworkRoutingId)(node.status().routingId);
|
|
76
81
|
const target = resolvedTarget;
|
|
77
82
|
const result = await this.localJoin.joinEntrySpot(node, actor, state, actorRef, selectedNodeRid, target, request, timeoutMs ?? this.options.actorTransferTimeoutMs, signal, completionOperationId);
|
|
78
83
|
return this.withDeferredJoinFinalizer(actor, state, target, result, completionOperationId);
|
|
@@ -94,18 +99,16 @@ class ZLinkActorNativeJoinCoordinator {
|
|
|
94
99
|
};
|
|
95
100
|
}
|
|
96
101
|
node() {
|
|
97
|
-
return typeof this.options.node === 'function'
|
|
98
|
-
? this.options.node()
|
|
99
|
-
: this.options.node;
|
|
102
|
+
return typeof this.options.node === 'function' ? this.options.node() : this.options.node;
|
|
100
103
|
}
|
|
101
104
|
}
|
|
102
105
|
exports.ZLinkActorNativeJoinCoordinator = ZLinkActorNativeJoinCoordinator;
|
|
103
106
|
function installResolvedSpotRoute(node, target) {
|
|
104
|
-
if (target?.targetSpotGeneration === undefined
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
if (target?.targetSpotGeneration === undefined ||
|
|
108
|
+
target.targetNodeGeneration === undefined ||
|
|
109
|
+
target.authorityOwnerGeneration === undefined ||
|
|
110
|
+
target.ownerLeaseGeneration === undefined ||
|
|
111
|
+
target.authorityStoreVersion === undefined) {
|
|
109
112
|
return;
|
|
110
113
|
}
|
|
111
114
|
node.rememberSpotRoute?.({
|
|
@@ -19,13 +19,12 @@ function decodeRemoteActorSourceLeaveTerminal(payload) {
|
|
|
19
19
|
catch {
|
|
20
20
|
return undefined;
|
|
21
21
|
}
|
|
22
|
-
if (typeof decoded !== 'object'
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|| typeof decoded.succeeded !== 'boolean') {
|
|
22
|
+
if (typeof decoded !== 'object' ||
|
|
23
|
+
decoded === null ||
|
|
24
|
+
decoded.packetName !== exports.ZLINK_REMOTE_ACTOR_SOURCE_LEAVE_TERMINAL ||
|
|
25
|
+
typeof decoded.transferId !== 'string' ||
|
|
26
|
+
typeof decoded.actorId !== 'string' ||
|
|
27
|
+
typeof decoded.succeeded !== 'boolean') {
|
|
29
28
|
return undefined;
|
|
30
29
|
}
|
|
31
30
|
return decoded;
|
|
@@ -15,12 +15,12 @@ const actor_native_lookup_1 = require("./actor-native-lookup");
|
|
|
15
15
|
* service-wire relocation identity until command 44 releases the owner seal.
|
|
16
16
|
*/
|
|
17
17
|
function mergeRemoteBoundSessionTarget(target, fallback) {
|
|
18
|
-
if (fallback === undefined
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
if (fallback === undefined ||
|
|
19
|
+
fallback.routerChannelId !== target.routerChannelId ||
|
|
20
|
+
!(0, routing_id_1.routingIdsEqual)(fallback.targetNodeRid, target.targetNodeRid) ||
|
|
21
|
+
(!(0, routing_id_1.routingIdsEqual)(fallback.spotId, target.spotId) &&
|
|
22
|
+
!samePhysicalRemoteSession(fallback, target)) ||
|
|
23
|
+
isSuccessorSessionBinding(fallback, target)) {
|
|
24
24
|
return target;
|
|
25
25
|
}
|
|
26
26
|
const merged = {
|
|
@@ -58,51 +58,55 @@ function mergeRemoteBoundSessionTarget(target, fallback) {
|
|
|
58
58
|
* session report for the STOP writeup.
|
|
59
59
|
*/
|
|
60
60
|
function isSuccessorSessionBinding(fallback, target) {
|
|
61
|
-
return (fallback.sessionNodeRid !== undefined
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
return ((fallback.sessionNodeRid !== undefined &&
|
|
62
|
+
target.sessionNodeRid !== undefined &&
|
|
63
|
+
!(0, routing_id_1.routingIdsEqual)(fallback.sessionNodeRid, target.sessionNodeRid)) ||
|
|
64
|
+
(fallback.sessionRid !== undefined &&
|
|
65
|
+
target.sessionRid !== undefined &&
|
|
66
|
+
!(0, routing_id_1.routingIdsEqual)(fallback.sessionRid, target.sessionRid)) ||
|
|
67
|
+
(fallback.sessionOwnerNodeGeneration !== undefined &&
|
|
68
|
+
target.sessionOwnerNodeGeneration !== undefined &&
|
|
69
|
+
fallback.sessionOwnerNodeGeneration !== target.sessionOwnerNodeGeneration) ||
|
|
70
|
+
(fallback.sessionOwnerId !== undefined &&
|
|
71
|
+
target.sessionOwnerId !== undefined &&
|
|
72
|
+
fallback.sessionOwnerId !== target.sessionOwnerId) ||
|
|
73
|
+
(fallback.sessionOwnerLeaseGeneration !== undefined &&
|
|
74
|
+
target.sessionOwnerLeaseGeneration !== undefined &&
|
|
75
|
+
fallback.sessionOwnerLeaseGeneration !== target.sessionOwnerLeaseGeneration));
|
|
72
76
|
}
|
|
73
77
|
function samePhysicalRemoteSession(left, right) {
|
|
74
|
-
return left.sessionNodeRid !== undefined
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
return (left.sessionNodeRid !== undefined &&
|
|
79
|
+
right.sessionNodeRid !== undefined &&
|
|
80
|
+
left.sessionRid !== undefined &&
|
|
81
|
+
right.sessionRid !== undefined &&
|
|
82
|
+
(0, routing_id_1.routingIdsEqual)(left.sessionNodeRid, right.sessionNodeRid) &&
|
|
83
|
+
(0, routing_id_1.routingIdsEqual)(left.sessionRid, right.sessionRid));
|
|
80
84
|
}
|
|
81
85
|
function sameRemoteSessionOwnerLifecycle(left, right) {
|
|
82
|
-
return left.sessionNodeRid !== undefined
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
86
|
+
return (left.sessionNodeRid !== undefined &&
|
|
87
|
+
right.sessionNodeRid !== undefined &&
|
|
88
|
+
left.sessionOwnerNodeGeneration !== undefined &&
|
|
89
|
+
right.sessionOwnerNodeGeneration !== undefined &&
|
|
90
|
+
left.sessionOwnerId !== undefined &&
|
|
91
|
+
right.sessionOwnerId !== undefined &&
|
|
92
|
+
left.sessionOwnerLeaseGeneration !== undefined &&
|
|
93
|
+
right.sessionOwnerLeaseGeneration !== undefined &&
|
|
94
|
+
(0, routing_id_1.routingIdsEqual)(left.sessionNodeRid, right.sessionNodeRid) &&
|
|
95
|
+
left.sessionOwnerNodeGeneration === right.sessionOwnerNodeGeneration &&
|
|
96
|
+
left.sessionOwnerId === right.sessionOwnerId &&
|
|
97
|
+
left.sessionOwnerLeaseGeneration === right.sessionOwnerLeaseGeneration);
|
|
94
98
|
}
|
|
95
99
|
function sameRemoteSessionOwner(left, right) {
|
|
96
|
-
return left.sessionRid !== undefined
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
return (left.sessionRid !== undefined &&
|
|
101
|
+
right.sessionRid !== undefined &&
|
|
102
|
+
(0, routing_id_1.routingIdsEqual)(left.sessionRid, right.sessionRid) &&
|
|
103
|
+
sameRemoteSessionOwnerLifecycle(left, right));
|
|
100
104
|
}
|
|
101
105
|
function sameRemoteSessionBinding(left, right) {
|
|
102
|
-
return sameRemoteSessionOwner(left, right)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
+
return (sameRemoteSessionOwner(left, right) &&
|
|
107
|
+
left.bindingGeneration !== undefined &&
|
|
108
|
+
right.bindingGeneration !== undefined &&
|
|
109
|
+
left.bindingGeneration === right.bindingGeneration);
|
|
106
110
|
}
|
|
107
111
|
/**
|
|
108
112
|
* Selects the route that still carries the relocation fence when a Core
|
|
@@ -116,8 +120,7 @@ function preferredRemoteBoundSessionTarget(remote, transfer) {
|
|
|
116
120
|
return transfer;
|
|
117
121
|
}
|
|
118
122
|
function hasRelocationFence(target) {
|
|
119
|
-
return target.relocationSealId !== undefined
|
|
120
|
-
|| target.serviceWireRelocation !== undefined;
|
|
123
|
+
return target.relocationSealId !== undefined || target.serviceWireRelocation !== undefined;
|
|
121
124
|
}
|
|
122
125
|
class ZLinkActorRuntimeState {
|
|
123
126
|
actorId;
|
|
@@ -251,7 +254,8 @@ class ZLinkActorRuntimeState {
|
|
|
251
254
|
return this.destroyTask;
|
|
252
255
|
}
|
|
253
256
|
const actorRef = this.nativeActorRefValue;
|
|
254
|
-
if (actorRef !== undefined &&
|
|
257
|
+
if (actorRef !== undefined &&
|
|
258
|
+
!(0, routing_id_1.routingIdsEqual)(toFrameworkRoutingId(actorRef.nodeRid), entryNodeRid)) {
|
|
255
259
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, `Actor '${this.actorId}' is not owned by this Entry Spot.`);
|
|
256
260
|
}
|
|
257
261
|
const task = Promise.resolve().then(() => destroy(actorRef));
|
|
@@ -325,7 +329,8 @@ class ZLinkActorRuntimeState {
|
|
|
325
329
|
ensureNativeActorRef(node, request) {
|
|
326
330
|
if (this.nativeActorRefValue === undefined) {
|
|
327
331
|
const existing = (0, actor_native_lookup_1.lookupNativeActorRef)(node, this.actorId);
|
|
328
|
-
const native = existing ??
|
|
332
|
+
const native = existing ??
|
|
333
|
+
node.createActor(this.actorId, request === undefined ? undefined : Buffer.from(request.data()));
|
|
329
334
|
this.nativeActorRefValue = {
|
|
330
335
|
nodeRid: native.nodeRid,
|
|
331
336
|
actorId: native.actorId,
|
|
@@ -358,12 +363,12 @@ class ZLinkActorRuntimeState {
|
|
|
358
363
|
}
|
|
359
364
|
/** @internal Installs one authority-confirmed binding inside its Actor owner turn. */
|
|
360
365
|
installBoundSessionBinding(target) {
|
|
361
|
-
if (target.sessionNodeRid === undefined
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
366
|
+
if (target.sessionNodeRid === undefined ||
|
|
367
|
+
target.sessionRid === undefined ||
|
|
368
|
+
target.sessionOwnerNodeGeneration === undefined ||
|
|
369
|
+
target.sessionOwnerId === undefined ||
|
|
370
|
+
target.sessionOwnerLeaseGeneration === undefined ||
|
|
371
|
+
target.bindingGeneration === undefined) {
|
|
367
372
|
throw new TypeError('An installed bound Session target requires its complete binding identity.');
|
|
368
373
|
}
|
|
369
374
|
const current = preferredRemoteBoundSessionTarget(this.remoteBoundSessionTargetValue, this.boundSessionTransferTargetValue);
|
|
@@ -373,8 +378,8 @@ class ZLinkActorRuntimeState {
|
|
|
373
378
|
// lifecycle's generation; a late equal/lower generation is stale.
|
|
374
379
|
if (sameRemoteSessionOwner(current, target))
|
|
375
380
|
return true;
|
|
376
|
-
if (current.bindingGeneration !== undefined
|
|
377
|
-
|
|
381
|
+
if (current.bindingGeneration !== undefined &&
|
|
382
|
+
current.bindingGeneration >= target.bindingGeneration)
|
|
378
383
|
return false;
|
|
379
384
|
}
|
|
380
385
|
const installed = mergeRemoteBoundSessionTarget(target, current);
|
|
@@ -390,27 +395,28 @@ class ZLinkActorRuntimeState {
|
|
|
390
395
|
}
|
|
391
396
|
/** @internal Removes only the exact authority-confirmed Session incarnation. */
|
|
392
397
|
retireBoundSessionBinding(target) {
|
|
393
|
-
if (target.sessionNodeRid === undefined
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
398
|
+
if (target.sessionNodeRid === undefined ||
|
|
399
|
+
target.sessionRid === undefined ||
|
|
400
|
+
target.sessionOwnerNodeGeneration === undefined ||
|
|
401
|
+
target.sessionOwnerId === undefined ||
|
|
402
|
+
target.sessionOwnerLeaseGeneration === undefined ||
|
|
403
|
+
target.bindingGeneration === undefined) {
|
|
399
404
|
throw new TypeError('A retired bound Session target requires its complete binding identity.');
|
|
400
405
|
}
|
|
401
406
|
let retired = false;
|
|
402
|
-
if (this.remoteBoundSessionTargetValue !== undefined
|
|
403
|
-
|
|
407
|
+
if (this.remoteBoundSessionTargetValue !== undefined &&
|
|
408
|
+
sameRemoteSessionBinding(this.remoteBoundSessionTargetValue, target)) {
|
|
404
409
|
this.remoteBoundSessionTargetValue = undefined;
|
|
405
410
|
retired = true;
|
|
406
411
|
}
|
|
407
|
-
if (this.boundSessionTransferTargetValue !== undefined
|
|
408
|
-
|
|
412
|
+
if (this.boundSessionTransferTargetValue !== undefined &&
|
|
413
|
+
sameRemoteSessionBinding(this.boundSessionTransferTargetValue, target)) {
|
|
409
414
|
this.boundSessionTransferTargetValue = undefined;
|
|
410
415
|
retired = true;
|
|
411
416
|
}
|
|
412
417
|
if (retired) {
|
|
413
|
-
this.boundSessionBindingGenerationValue =
|
|
418
|
+
this.boundSessionBindingGenerationValue =
|
|
419
|
+
preferredRemoteBoundSessionTarget(this.remoteBoundSessionTargetValue, this.boundSessionTransferTargetValue)?.bindingGeneration ?? 0n;
|
|
414
420
|
}
|
|
415
421
|
return retired;
|
|
416
422
|
}
|
|
@@ -419,26 +425,26 @@ class ZLinkActorRuntimeState {
|
|
|
419
425
|
}
|
|
420
426
|
setRemoteBoundSessionTarget(target) {
|
|
421
427
|
const current = preferredRemoteBoundSessionTarget(this.remoteBoundSessionTargetValue, this.boundSessionTransferTargetValue);
|
|
422
|
-
const merged = target === undefined
|
|
423
|
-
? undefined
|
|
424
|
-
: mergeRemoteBoundSessionTarget(target, current);
|
|
428
|
+
const merged = target === undefined ? undefined : mergeRemoteBoundSessionTarget(target, current);
|
|
425
429
|
const bindingGeneration = maxBindingGeneration(merged?.bindingGeneration, this.remoteBoundSessionTargetValue?.bindingGeneration, this.boundSessionBindingGenerationValue);
|
|
426
|
-
this.remoteBoundSessionTargetValue =
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
430
|
+
this.remoteBoundSessionTargetValue =
|
|
431
|
+
merged === undefined
|
|
432
|
+
? undefined
|
|
433
|
+
: bindingGeneration === undefined
|
|
434
|
+
? merged
|
|
435
|
+
: { ...merged, bindingGeneration };
|
|
431
436
|
}
|
|
432
437
|
setBoundSessionTransferTarget(target) {
|
|
433
438
|
const merged = target === undefined
|
|
434
439
|
? undefined
|
|
435
440
|
: mergeRemoteBoundSessionTarget(target, this.boundSessionTransferTargetValue);
|
|
436
441
|
const bindingGeneration = maxBindingGeneration(merged?.bindingGeneration, this.boundSessionTransferTargetValue?.bindingGeneration, this.boundSessionBindingGenerationValue);
|
|
437
|
-
this.boundSessionTransferTargetValue =
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
+
this.boundSessionTransferTargetValue =
|
|
443
|
+
merged === undefined
|
|
444
|
+
? undefined
|
|
445
|
+
: bindingGeneration === undefined
|
|
446
|
+
? merged
|
|
447
|
+
: { ...merged, bindingGeneration };
|
|
442
448
|
}
|
|
443
449
|
setRemoteActorPacketTarget(target) {
|
|
444
450
|
this.remoteActorPacketTargetValue = target;
|
|
@@ -487,8 +493,8 @@ class ZLinkActorRuntimeState {
|
|
|
487
493
|
prepareForRemoteReentry() {
|
|
488
494
|
if (this.remoteActorPacketTargetValue === undefined)
|
|
489
495
|
return;
|
|
490
|
-
const relocationTransferTarget = this.boundSessionTransferTargetValue !== undefined
|
|
491
|
-
|
|
496
|
+
const relocationTransferTarget = this.boundSessionTransferTargetValue !== undefined &&
|
|
497
|
+
hasRelocationFence(this.boundSessionTransferTargetValue)
|
|
492
498
|
? this.boundSessionTransferTargetValue
|
|
493
499
|
: undefined;
|
|
494
500
|
this.creationTask = undefined;
|
|
@@ -25,13 +25,11 @@ class ZLinkActorTransferRegistry {
|
|
|
25
25
|
}
|
|
26
26
|
async transferOut(actor, actorType, signal) {
|
|
27
27
|
(0, abort_1.throwIfAborted)(signal);
|
|
28
|
-
const adapterType = actorType === undefined
|
|
29
|
-
? undefined
|
|
30
|
-
: this.byKey.get(actorType);
|
|
28
|
+
const adapterType = actorType === undefined ? undefined : this.byKey.get(actorType);
|
|
31
29
|
if (adapterType === undefined) {
|
|
32
30
|
return { state: emptyTransferState(this.messageSerializers) };
|
|
33
31
|
}
|
|
34
|
-
const adapter = await this.createAdapter(adapterType);
|
|
32
|
+
const adapter = (await this.createAdapter(adapterType));
|
|
35
33
|
const state = await adapter.capture(actor, signal ?? new AbortController().signal);
|
|
36
34
|
if (!(state instanceof Uint8Array)) {
|
|
37
35
|
throw new Error(`Actor relocation adapter '${adapterType.name}' returned invalid state bytes.`);
|
|
@@ -50,7 +48,7 @@ class ZLinkActorTransferRegistry {
|
|
|
50
48
|
if (adapterType === undefined) {
|
|
51
49
|
throw new Error(`Actor relocation adapter for stable type '${adapterKey}' is not registered on the target node.`);
|
|
52
50
|
}
|
|
53
|
-
const adapter = await this.createAdapter(adapterType);
|
|
51
|
+
const adapter = (await this.createAdapter(adapterType));
|
|
54
52
|
await adapter.restore(actor, state.toEncodedPayload().toBytes(), signal ?? new AbortController().signal);
|
|
55
53
|
}
|
|
56
54
|
async createAdapter(adapterType) {
|
|
@@ -32,10 +32,10 @@ function isRemoteBoundSessionFenceError(error) {
|
|
|
32
32
|
if (error.code === exports.ZLINK_REMOTE_BOUND_SESSION_FENCE_NACK_CODE)
|
|
33
33
|
return true;
|
|
34
34
|
// Fallback for transports that only surface the session owner's message.
|
|
35
|
-
return error.message.includes('did not match its command 42 Session seal')
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
return (error.message.includes('did not match its command 42 Session seal') ||
|
|
36
|
+
error.message.includes('released Session seal cannot publish a different route') ||
|
|
37
|
+
error.message.includes('was fenced by its binding identity') ||
|
|
38
|
+
error.message.includes('session route seal abort was fenced'));
|
|
39
39
|
}
|
|
40
40
|
/** Encodes a request/reply nack for the command 42/44/45 packet family. */
|
|
41
41
|
function encodeRemoteBoundSessionNack(error) {
|
|
@@ -117,11 +117,16 @@ function optionalFlowOrigin(payload) {
|
|
|
117
117
|
// internal wire deployed atomically with this repository, so the decoder
|
|
118
118
|
// accepts only the spec spelling.
|
|
119
119
|
switch (payload.flowOrigin) {
|
|
120
|
-
case 'inbound':
|
|
121
|
-
|
|
122
|
-
case '
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
case 'inbound':
|
|
121
|
+
return 'Inbound';
|
|
122
|
+
case 'timer':
|
|
123
|
+
return 'Timer';
|
|
124
|
+
case 'application':
|
|
125
|
+
return 'Application';
|
|
126
|
+
case 'lifecycle':
|
|
127
|
+
return 'Lifecycle';
|
|
128
|
+
default:
|
|
129
|
+
return undefined;
|
|
125
130
|
}
|
|
126
131
|
}
|
|
127
132
|
function decodeRemoteBoundSessionResponsePayload(payload) {
|