@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
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
|
|
2
1
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from '../../contracts';
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from '../framework-errors-internal';
|
|
5
|
+
import { ZLinkFrameworkException, type ActorRef, type RoutingId } from '../../contracts';
|
|
7
6
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
8
7
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
9
|
-
import type {
|
|
10
|
-
|
|
11
|
-
ZLinkRemoteBoundSessionTarget
|
|
12
|
-
} from '../actors';
|
|
13
|
-
import {
|
|
14
|
-
decodeStreamHeader,
|
|
15
|
-
messageToBytes,
|
|
16
|
-
ZLinkStreamMessageKind
|
|
17
|
-
} from '../streams/protocol';
|
|
8
|
+
import type { ZLinkRemoteActorPacketTarget, ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
9
|
+
import { decodeStreamHeader, messageToBytes, ZLinkStreamMessageKind } from '../streams/protocol';
|
|
18
10
|
import {
|
|
19
11
|
decodeRemoteActorSessionBinding,
|
|
20
12
|
encodeRemoteActorPacketTarget,
|
|
@@ -22,15 +14,14 @@ import {
|
|
|
22
14
|
} from '../actors/actor-packet-relay-wire';
|
|
23
15
|
import { decodeRoutingId as decodeWireRoutingId, routingIdsEqual } from '../routing-id';
|
|
24
16
|
import type { ZLinkRemoteActorPacketRelay } from './spot-remote-route-codec';
|
|
25
|
-
import {
|
|
26
|
-
hasReplyToken,
|
|
27
|
-
submitSpotRouteBridgeReply
|
|
28
|
-
} from './spot-route-replies';
|
|
17
|
+
import { hasReplyToken, submitSpotRouteBridgeReply } from './spot-route-replies';
|
|
29
18
|
import type { ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
|
|
30
19
|
|
|
31
20
|
interface ZLinkSpotActorPacketRelayDispatchOptions {
|
|
32
21
|
readonly actorPacketHandler?: (delivery: ZLinkActorPacketDelivery) => Promise<unknown>;
|
|
33
|
-
readonly actorPacketTargetProvider?: (
|
|
22
|
+
readonly actorPacketTargetProvider?: (
|
|
23
|
+
actorId: string
|
|
24
|
+
) => ZLinkRemoteActorPacketTarget | undefined;
|
|
34
25
|
readonly bindRemoteSession?: (
|
|
35
26
|
actor: ActorRef,
|
|
36
27
|
sourceNodeRid: RoutingId,
|
|
@@ -54,18 +45,15 @@ export class ZLinkSpotActorPacketRelayDispatch {
|
|
|
54
45
|
actorPacketRelay.routerChannelId === undefined ||
|
|
55
46
|
actorPacketRelay.boundSessionTargetNodeRid === undefined ||
|
|
56
47
|
actorPacketRelay.boundSessionSpotId === undefined
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
undefined
|
|
67
|
-
)
|
|
68
|
-
};
|
|
48
|
+
? undefined
|
|
49
|
+
: {
|
|
50
|
+
routerChannelId: actorPacketRelay.routerChannelId,
|
|
51
|
+
targetNodeRid: decodeWireRoutingId(
|
|
52
|
+
actorPacketRelay.boundSessionTargetNodeRid,
|
|
53
|
+
undefined
|
|
54
|
+
),
|
|
55
|
+
spotId: decodeWireRoutingId(actorPacketRelay.boundSessionSpotId, undefined)
|
|
56
|
+
};
|
|
69
57
|
const header = RuntimeMessage.from(Buffer.from(actorPacketRelay.header, 'base64'));
|
|
70
58
|
const payload = RuntimeMessage.from(Buffer.from(actorPacketRelay.payload, 'base64'));
|
|
71
59
|
try {
|
|
@@ -82,12 +70,16 @@ export class ZLinkSpotActorPacketRelayDispatch {
|
|
|
82
70
|
sourceNodeRid === null ||
|
|
83
71
|
this.options.bindRemoteSession === undefined
|
|
84
72
|
) {
|
|
85
|
-
throw new Error(
|
|
73
|
+
throw new Error(
|
|
74
|
+
'Remote actor session binding requires a send, source route, and concrete actor ref.'
|
|
75
|
+
);
|
|
86
76
|
}
|
|
87
77
|
const binding = decodeRemoteActorSessionBinding(messageToBytes(payload));
|
|
88
78
|
const declaredSourceNodeRid = binding.sessionNodeRid;
|
|
89
79
|
if (!routingIdsEqual(sourceNodeRid, declaredSourceNodeRid)) {
|
|
90
|
-
throw new Error(
|
|
80
|
+
throw new Error(
|
|
81
|
+
'Remote actor session binding source did not match the declared session node.'
|
|
82
|
+
);
|
|
91
83
|
}
|
|
92
84
|
this.options.bindRemoteSession(
|
|
93
85
|
actorRef,
|
|
@@ -109,8 +101,10 @@ export class ZLinkSpotActorPacketRelayDispatch {
|
|
|
109
101
|
}
|
|
110
102
|
return true;
|
|
111
103
|
}
|
|
112
|
-
if (
|
|
113
|
-
|
|
104
|
+
if (
|
|
105
|
+
actorPacketRelay.messageFollowContext?.deadlineUnixMs !== undefined &&
|
|
106
|
+
Date.now() >= actorPacketRelay.messageFollowContext.deadlineUnixMs
|
|
107
|
+
) {
|
|
114
108
|
throw createInternalFrameworkException(
|
|
115
109
|
ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
|
|
116
110
|
`Actor request '${actorPacketRelay.actorId}' expired before target handler admission.`
|
|
@@ -125,9 +119,9 @@ export class ZLinkSpotActorPacketRelayDispatch {
|
|
|
125
119
|
// be discarded. Non-follow relays keep the synchronous-return path.
|
|
126
120
|
const outerReplyable = hasReplyToken(received.replyToken);
|
|
127
121
|
const followedBoundSessionReply =
|
|
128
|
-
!outerReplyable
|
|
129
|
-
|
|
130
|
-
|
|
122
|
+
!outerReplyable &&
|
|
123
|
+
actorPacketRelay.messageFollowContext !== undefined &&
|
|
124
|
+
remoteBoundSessionTarget !== undefined;
|
|
131
125
|
const response = await this.options.actorPacketHandler({
|
|
132
126
|
actorId: actorPacketRelay.actorId,
|
|
133
127
|
parts: [header, payload],
|
|
@@ -137,7 +131,11 @@ export class ZLinkSpotActorPacketRelayDispatch {
|
|
|
137
131
|
});
|
|
138
132
|
const actorPacketTarget = this.actorPacketTarget(actorPacketRelay.actorId);
|
|
139
133
|
if (hasReplyToken(received.replyToken)) {
|
|
140
|
-
submitSpotRouteBridgeReply(received, actorPacketRelay.envelope, {
|
|
134
|
+
submitSpotRouteBridgeReply(received, actorPacketRelay.envelope, {
|
|
135
|
+
ok: true,
|
|
136
|
+
response,
|
|
137
|
+
actorPacketTarget
|
|
138
|
+
});
|
|
141
139
|
}
|
|
142
140
|
return true;
|
|
143
141
|
} catch (error) {
|
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ZLinkSpotCloseReason,
|
|
3
|
-
type ZLinkSpotClosingContext
|
|
4
|
-
} from '../../contracts';
|
|
1
|
+
import { ZLinkSpotCloseReason, type ZLinkSpotClosingContext } from '../../contracts';
|
|
5
2
|
|
|
6
3
|
const DEFAULT_CLEANUP_TIMEOUT_MS = 30_000;
|
|
7
4
|
|
|
8
5
|
export async function invokeSpotClosing(
|
|
9
|
-
callback:
|
|
6
|
+
callback:
|
|
7
|
+
((context: ZLinkSpotClosingContext, cleanupSignal: AbortSignal) => Promise<void>) | undefined,
|
|
10
8
|
reason: ZLinkSpotCloseReason,
|
|
11
9
|
cleanupDeadline: Date | number = DEFAULT_CLEANUP_TIMEOUT_MS
|
|
12
10
|
): Promise<void> {
|
|
13
11
|
if (callback === undefined) return;
|
|
14
|
-
const deadline = new Date(
|
|
15
|
-
? cleanupDeadline.getTime()
|
|
16
|
-
|
|
17
|
-
const timeoutMs = Math.max(
|
|
18
|
-
|
|
19
|
-
: cleanupDeadline
|
|
12
|
+
const deadline = new Date(
|
|
13
|
+
cleanupDeadline instanceof Date ? cleanupDeadline.getTime() : Date.now() + cleanupDeadline
|
|
14
|
+
);
|
|
15
|
+
const timeoutMs = Math.max(
|
|
16
|
+
0,
|
|
17
|
+
cleanupDeadline instanceof Date ? cleanupDeadline.getTime() - Date.now() : cleanupDeadline
|
|
18
|
+
);
|
|
20
19
|
const controller = new AbortController();
|
|
21
20
|
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
22
|
-
const expired = new Promise<void>(resolve => {
|
|
21
|
+
const expired = new Promise<void>((resolve) => {
|
|
23
22
|
timer = setTimeout(() => {
|
|
24
23
|
controller.abort();
|
|
25
24
|
resolve();
|
|
@@ -21,10 +21,7 @@ import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
|
21
21
|
import type { ZLinkWorkerCall } from '../../contracts';
|
|
22
22
|
import { ZLinkConfigurationException } from '../configuration';
|
|
23
23
|
import { DefaultZLinkWorkerCall, ZLinkWorkerRuntime } from '../workers';
|
|
24
|
-
import {
|
|
25
|
-
createTimerDiagnostics,
|
|
26
|
-
type ZLinkSpotTimerRegistry
|
|
27
|
-
} from './spot-timer';
|
|
24
|
+
import { createTimerDiagnostics, type ZLinkSpotTimerRegistry } from './spot-timer';
|
|
28
25
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
29
26
|
|
|
30
27
|
interface ZLinkEntrySpotContextOptions {
|
|
@@ -67,7 +64,9 @@ interface ZLinkSpotContextOptions {
|
|
|
67
64
|
readonly ensureOperationAllowed?: () => void;
|
|
68
65
|
}
|
|
69
66
|
|
|
70
|
-
export function createEntrySpotContext(
|
|
67
|
+
export function createEntrySpotContext(
|
|
68
|
+
options: ZLinkEntrySpotContextOptions
|
|
69
|
+
): ZLinkEntrySpotContext {
|
|
71
70
|
return withImmutableSpotIdentity({
|
|
72
71
|
meshName: options.spotNodeName,
|
|
73
72
|
spotId: options.spotId,
|
|
@@ -109,11 +108,13 @@ export function createEntrySpotContext(options: ZLinkEntrySpotContextOptions): Z
|
|
|
109
108
|
},
|
|
110
109
|
runCpuWorker<T>(work: (signal: AbortSignal) => T): ZLinkWorkerCall<T> {
|
|
111
110
|
return new DefaultZLinkWorkerCall(options.serial, (timeoutMs, signal) =>
|
|
112
|
-
options.workerRuntime.scheduleCpu(work, timeoutMs, signal)
|
|
111
|
+
options.workerRuntime.scheduleCpu(work, timeoutMs, signal)
|
|
112
|
+
);
|
|
113
113
|
},
|
|
114
114
|
runIoWorker<T>(work: (signal: AbortSignal) => Promise<T>): ZLinkWorkerCall<T> {
|
|
115
115
|
return new DefaultZLinkWorkerCall(options.serial, (timeoutMs, signal) =>
|
|
116
|
-
options.workerRuntime.scheduleIo(work, timeoutMs, signal)
|
|
116
|
+
options.workerRuntime.scheduleIo(work, timeoutMs, signal)
|
|
117
|
+
);
|
|
117
118
|
}
|
|
118
119
|
});
|
|
119
120
|
}
|
|
@@ -131,13 +132,15 @@ export function createSpotContext(options: ZLinkSpotContextOptions): ZLinkSpotCo
|
|
|
131
132
|
},
|
|
132
133
|
relocationReady: () => {
|
|
133
134
|
options.ensureOperationAllowed?.();
|
|
134
|
-
return
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
135
|
+
return (
|
|
136
|
+
options.relocationReady?.() ?? {
|
|
137
|
+
defer() {
|
|
138
|
+
throw new ZLinkConfigurationException(
|
|
139
|
+
'Spot relocation readiness is not configured for application signaling.'
|
|
140
|
+
);
|
|
141
|
+
}
|
|
139
142
|
}
|
|
140
|
-
|
|
143
|
+
);
|
|
141
144
|
},
|
|
142
145
|
leaveActor: (actor: ZLinkActor, signal?: AbortSignal) => {
|
|
143
146
|
options.ensureOperationAllowed?.();
|
|
@@ -157,7 +160,9 @@ export function createSpotContext(options: ZLinkSpotContextOptions): ZLinkSpotCo
|
|
|
157
160
|
options.ensureOperationAllowed?.();
|
|
158
161
|
const spot = options.getSpot();
|
|
159
162
|
if (spot === undefined) {
|
|
160
|
-
throw new ZLinkConfigurationException(
|
|
163
|
+
throw new ZLinkConfigurationException(
|
|
164
|
+
'Spot timer cannot be registered before spot activation.'
|
|
165
|
+
);
|
|
161
166
|
}
|
|
162
167
|
return options.timers.add(
|
|
163
168
|
name,
|
|
@@ -168,18 +173,27 @@ export function createSpotContext(options: ZLinkSpotContextOptions): ZLinkSpotCo
|
|
|
168
173
|
spot,
|
|
169
174
|
options.providerResolver,
|
|
170
175
|
signal,
|
|
171
|
-
createTimerDiagnostics(
|
|
176
|
+
createTimerDiagnostics(
|
|
177
|
+
String(options.spotId),
|
|
178
|
+
options.spotId,
|
|
179
|
+
false,
|
|
180
|
+
name,
|
|
181
|
+
handlerType,
|
|
182
|
+
options.runtimeEventPublisher
|
|
183
|
+
)
|
|
172
184
|
);
|
|
173
185
|
},
|
|
174
186
|
runCpuWorker: <T>(work: (signal: AbortSignal) => T): ZLinkWorkerCall<T> => {
|
|
175
187
|
options.ensureOperationAllowed?.();
|
|
176
188
|
return new DefaultZLinkWorkerCall(options.serial, (timeoutMs, signal) =>
|
|
177
|
-
options.workerRuntime.scheduleCpu(work, timeoutMs, signal)
|
|
189
|
+
options.workerRuntime.scheduleCpu(work, timeoutMs, signal)
|
|
190
|
+
);
|
|
178
191
|
},
|
|
179
192
|
runIoWorker: <T>(work: (signal: AbortSignal) => Promise<T>): ZLinkWorkerCall<T> => {
|
|
180
193
|
options.ensureOperationAllowed?.();
|
|
181
194
|
return new DefaultZLinkWorkerCall(options.serial, (timeoutMs, signal) =>
|
|
182
|
-
options.workerRuntime.scheduleIo(work, timeoutMs, signal)
|
|
195
|
+
options.workerRuntime.scheduleIo(work, timeoutMs, signal)
|
|
196
|
+
);
|
|
183
197
|
}
|
|
184
198
|
});
|
|
185
199
|
}
|
|
@@ -206,7 +220,9 @@ export function createInstanceSpotContext(
|
|
|
206
220
|
) => {
|
|
207
221
|
const spot = options.getSpot();
|
|
208
222
|
if (spot === undefined) {
|
|
209
|
-
throw new ZLinkConfigurationException(
|
|
223
|
+
throw new ZLinkConfigurationException(
|
|
224
|
+
'Instance Spot timer cannot be registered before activation.'
|
|
225
|
+
);
|
|
210
226
|
}
|
|
211
227
|
return options.timers.add(
|
|
212
228
|
name,
|
|
@@ -229,10 +245,12 @@ export function createInstanceSpotContext(
|
|
|
229
245
|
},
|
|
230
246
|
runCpuWorker: <T>(work: (signal: AbortSignal) => T): ZLinkWorkerCall<T> =>
|
|
231
247
|
new DefaultZLinkWorkerCall(options.serial, (timeoutMs, signal) =>
|
|
232
|
-
options.workerRuntime.scheduleCpu(work, timeoutMs, signal)
|
|
248
|
+
options.workerRuntime.scheduleCpu(work, timeoutMs, signal)
|
|
249
|
+
),
|
|
233
250
|
runIoWorker: <T>(work: (signal: AbortSignal) => Promise<T>): ZLinkWorkerCall<T> =>
|
|
234
251
|
new DefaultZLinkWorkerCall(options.serial, (timeoutMs, signal) =>
|
|
235
|
-
options.workerRuntime.scheduleIo(work, timeoutMs, signal)
|
|
252
|
+
options.workerRuntime.scheduleIo(work, timeoutMs, signal)
|
|
253
|
+
)
|
|
236
254
|
};
|
|
237
255
|
return withImmutableSpotIdentity(common);
|
|
238
256
|
}
|
|
@@ -241,12 +259,14 @@ function contextNodeRid(nodeRid: RoutingId | undefined): RoutingId {
|
|
|
241
259
|
return nodeRid ?? ('' as RoutingId);
|
|
242
260
|
}
|
|
243
261
|
|
|
244
|
-
function withImmutableSpotIdentity<
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
262
|
+
function withImmutableSpotIdentity<
|
|
263
|
+
T extends {
|
|
264
|
+
readonly meshName: string;
|
|
265
|
+
readonly spotId: SpotId;
|
|
266
|
+
readonly objectGeneration: number;
|
|
267
|
+
readonly nodeRid: RoutingId;
|
|
268
|
+
}
|
|
269
|
+
>(context: T): T {
|
|
250
270
|
for (const key of ['meshName', 'spotId', 'objectGeneration', 'nodeRid'] as const) {
|
|
251
271
|
Object.defineProperty(context, key, {
|
|
252
272
|
configurable: false,
|
|
@@ -26,9 +26,7 @@ import type {
|
|
|
26
26
|
import type { Message } from '../../contracts/Common/Message';
|
|
27
27
|
import { throwIfAborted } from '../abort';
|
|
28
28
|
import { routingIdsEqual } from '../routing-id';
|
|
29
|
-
import {
|
|
30
|
-
ZLinkSpotActorHandlerRegistryRuntime
|
|
31
|
-
} from '../actors';
|
|
29
|
+
import { ZLinkSpotActorHandlerRegistryRuntime } from '../actors';
|
|
32
30
|
import type {
|
|
33
31
|
ZLinkBackendActorRecvInfo,
|
|
34
32
|
ZLinkBackendReceived,
|
|
@@ -52,18 +50,12 @@ import {
|
|
|
52
50
|
applyEntrySpotHandlerRegistrations,
|
|
53
51
|
DefaultZLinkSpotHandlerRegistry
|
|
54
52
|
} from './spot-handler-registry';
|
|
55
|
-
import {
|
|
56
|
-
DefaultZLinkSpotOutbound,
|
|
57
|
-
type ZLinkSpotRoutedTransport
|
|
58
|
-
} from './spot-outbound';
|
|
53
|
+
import { DefaultZLinkSpotOutbound, type ZLinkSpotRoutedTransport } from './spot-outbound';
|
|
59
54
|
import { createProviderInstance } from './spot-provider';
|
|
60
55
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
61
56
|
import { ZLinkSpotSerialExecutor } from './spot-serial-executor';
|
|
62
57
|
import { invokeSpotClosing } from './spot-closing';
|
|
63
|
-
import {
|
|
64
|
-
addEntrySpotTimerRegistrations,
|
|
65
|
-
ZLinkSpotTimerRegistry
|
|
66
|
-
} from './spot-timer';
|
|
58
|
+
import { addEntrySpotTimerRegistrations, ZLinkSpotTimerRegistry } from './spot-timer';
|
|
67
59
|
import { createEntrySpotContext } from './spot-context';
|
|
68
60
|
import { ZLinkRoutedSpotPacketDispatch } from './spot-routed-spot-packet-dispatch';
|
|
69
61
|
import type { RequestResult } from '../backend/runtime-values';
|
|
@@ -166,14 +158,11 @@ export class ZLinkEntrySpotActivation {
|
|
|
166
158
|
providerResolver: options.providerResolver,
|
|
167
159
|
runtimeEventPublisher: options.runtimeEventPublisher,
|
|
168
160
|
workerRuntime: this.workerRuntime,
|
|
169
|
-
destroyActor:
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
actor,
|
|
175
|
-
signal
|
|
176
|
-
)
|
|
161
|
+
destroyActor:
|
|
162
|
+
options.entryActorRuntime === undefined
|
|
163
|
+
? undefined
|
|
164
|
+
: (nodeRid, actor, signal) =>
|
|
165
|
+
options.entryActorRuntime!.destroyActor(options.nativeNode, nodeRid, actor, signal)
|
|
177
166
|
});
|
|
178
167
|
this.entrySpot = undefined as unknown as ZLinkEntrySpot;
|
|
179
168
|
applyEntrySpotHandlerRegistrations(this.handlers, options.entrySpotType, {
|
|
@@ -183,14 +172,15 @@ export class ZLinkEntrySpotActivation {
|
|
|
183
172
|
subscriptionHandlers: options.subscriptionHandlers
|
|
184
173
|
});
|
|
185
174
|
this.packetDispatch = new ZLinkRoutedSpotPacketDispatch({
|
|
186
|
-
resolveActivation: (spotId) =>
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
175
|
+
resolveActivation: (spotId) =>
|
|
176
|
+
spotId === this.spotId
|
|
177
|
+
? {
|
|
178
|
+
spotId: this.spotId,
|
|
179
|
+
spot: this.entrySpot as unknown as ZLinkSpot,
|
|
180
|
+
serial: this.serial,
|
|
181
|
+
handlers: this.handlers
|
|
182
|
+
}
|
|
183
|
+
: undefined,
|
|
194
184
|
providerResolver: options.providerResolver,
|
|
195
185
|
dispatchErrors: options.dispatchErrors
|
|
196
186
|
});
|
|
@@ -210,8 +200,12 @@ export class ZLinkEntrySpotActivation {
|
|
|
210
200
|
onRemoteBoundSessionTarget: (targetActorId, target) =>
|
|
211
201
|
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(targetActorId, target),
|
|
212
202
|
onDisconnectActor: (actor) => this.notifyDisconnectActor(actor),
|
|
213
|
-
actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(
|
|
214
|
-
|
|
203
|
+
actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(
|
|
204
|
+
this.options.boundSessionRuntime
|
|
205
|
+
),
|
|
206
|
+
actorErrorSender: this.options.boundSessionRuntime?.sendActorError.bind(
|
|
207
|
+
this.options.boundSessionRuntime
|
|
208
|
+
),
|
|
215
209
|
providerResolver: this.options.providerResolver,
|
|
216
210
|
messageSerializers: this.options.messageSerializers,
|
|
217
211
|
dispatchErrors: this.options.dispatchErrors
|
|
@@ -271,7 +265,11 @@ export class ZLinkEntrySpotActivation {
|
|
|
271
265
|
}
|
|
272
266
|
|
|
273
267
|
async create(): Promise<void> {
|
|
274
|
-
const entrySpot = await createProviderInstance(
|
|
268
|
+
const entrySpot = await createProviderInstance(
|
|
269
|
+
this.options.entrySpotType,
|
|
270
|
+
this.options.providerResolver,
|
|
271
|
+
this.context
|
|
272
|
+
);
|
|
275
273
|
this.entrySpot = entrySpot;
|
|
276
274
|
Object.defineProperty(this.entrySpot, 'context', {
|
|
277
275
|
configurable: true,
|
|
@@ -285,9 +283,9 @@ export class ZLinkEntrySpotActivation {
|
|
|
285
283
|
this.serial,
|
|
286
284
|
{ timerHandlers: this.options.timerHandlers },
|
|
287
285
|
{
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
286
|
+
providerResolver: this.options.providerResolver,
|
|
287
|
+
spotNodeName: this.options.spotNodeName,
|
|
288
|
+
spotId: this.context.spotId,
|
|
291
289
|
runtimeEventPublisher: this.options.runtimeEventPublisher
|
|
292
290
|
}
|
|
293
291
|
);
|
|
@@ -316,11 +314,15 @@ export class ZLinkEntrySpotActivation {
|
|
|
316
314
|
}
|
|
317
315
|
};
|
|
318
316
|
if (this.initialized) {
|
|
319
|
-
await cleanup(() =>
|
|
320
|
-
this.
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
317
|
+
await cleanup(() =>
|
|
318
|
+
this.serial.execute(() =>
|
|
319
|
+
invokeSpotClosing(
|
|
320
|
+
this.entrySpot.onClosing?.bind(this.entrySpot),
|
|
321
|
+
ZLinkSpotCloseReason.HostShutdown,
|
|
322
|
+
deadline
|
|
323
|
+
)
|
|
324
|
+
)
|
|
325
|
+
);
|
|
324
326
|
}
|
|
325
327
|
await cleanup(() => this.actorDispatch?.dispose());
|
|
326
328
|
await cleanup(() => this.timers.dispose());
|
|
@@ -340,9 +342,9 @@ export class ZLinkEntrySpotActivation {
|
|
|
340
342
|
signal?: AbortSignal
|
|
341
343
|
): Promise<ZLinkActorCreateResponse> {
|
|
342
344
|
throwIfAborted(signal);
|
|
343
|
-
return this.serial.execute(
|
|
344
|
-
await this.entrySpot.onCreateActor?.(actor, createRequest)
|
|
345
|
-
|
|
345
|
+
return this.serial.execute(
|
|
346
|
+
async () => (await this.entrySpot.onCreateActor?.(actor, createRequest)) ?? { accepted: true }
|
|
347
|
+
);
|
|
346
348
|
}
|
|
347
349
|
|
|
348
350
|
notifyJoinActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void> {
|
|
@@ -387,10 +389,13 @@ export class ZLinkEntrySpotActivation {
|
|
|
387
389
|
resolveActor: (actorId) => this.options.entryActorRuntime?.resolveActor(actorId),
|
|
388
390
|
getTarget: () => this.entrySpot,
|
|
389
391
|
defaultAccept: true,
|
|
390
|
-
transfer:
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
392
|
+
transfer:
|
|
393
|
+
this.options.actorTransferRuntime === undefined
|
|
394
|
+
? { kind: 'disabled' }
|
|
395
|
+
: {
|
|
396
|
+
kind: 'enabled',
|
|
397
|
+
runtime: this.options.actorTransferRuntime
|
|
398
|
+
},
|
|
394
399
|
commitNativeActor: (actor) => this.commitEntryActorTransaction(actor),
|
|
395
400
|
commitTransferredActor: async (actor, backlog) => {
|
|
396
401
|
await this.commitEntryActorTransaction(actor);
|
|
@@ -403,8 +408,12 @@ export class ZLinkEntrySpotActivation {
|
|
|
403
408
|
if (routingIdsEqual(sourceNodeRid, this.options.nativeNode.routingId)) {
|
|
404
409
|
return;
|
|
405
410
|
}
|
|
406
|
-
const target =
|
|
407
|
-
??
|
|
411
|
+
const target =
|
|
412
|
+
declaredTarget ??
|
|
413
|
+
this.options.boundSessionRuntime?.resolveRemoteBoundSessionTarget(
|
|
414
|
+
sourceNodeRid,
|
|
415
|
+
sourceSessionRid
|
|
416
|
+
);
|
|
408
417
|
if (target !== undefined) {
|
|
409
418
|
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(actor.actorId, {
|
|
410
419
|
...target,
|
|
@@ -428,8 +437,8 @@ export class ZLinkEntrySpotActivation {
|
|
|
428
437
|
}
|
|
429
438
|
|
|
430
439
|
private async commitEntryActorTransaction(actor: ZLinkActor): Promise<void> {
|
|
431
|
-
const notifyJoined = () =>
|
|
432
|
-
notifyEntryActorJoined(this.entrySpot, actor));
|
|
440
|
+
const notifyJoined = () =>
|
|
441
|
+
this.serial.execute(() => notifyEntryActorJoined(this.entrySpot, actor));
|
|
433
442
|
const runtime = this.options.entryActorRuntime;
|
|
434
443
|
if (runtime === undefined) {
|
|
435
444
|
await notifyJoined();
|
|
@@ -445,8 +454,7 @@ export class ZLinkEntrySpotActivation {
|
|
|
445
454
|
_membershipEpoch?: bigint
|
|
446
455
|
): Promise<void> {
|
|
447
456
|
throwIfAborted(signal);
|
|
448
|
-
return this.serial.execute(() =>
|
|
449
|
-
this.entrySpot.onLeaveActor(actor));
|
|
457
|
+
return this.serial.execute(() => this.entrySpot.onLeaveActor(actor));
|
|
450
458
|
}
|
|
451
459
|
|
|
452
460
|
notifyDisconnectActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void> {
|
|
@@ -471,7 +479,12 @@ export class ZLinkEntrySpotActivation {
|
|
|
471
479
|
fallbackActorRef,
|
|
472
480
|
undefined,
|
|
473
481
|
messageFollowOrigin,
|
|
474
|
-
(
|
|
482
|
+
(
|
|
483
|
+
replayedParts,
|
|
484
|
+
replayReturnResponse,
|
|
485
|
+
replayRemoteBoundSessionTarget,
|
|
486
|
+
replayFallbackActorRef
|
|
487
|
+
) =>
|
|
475
488
|
this.spotSerialExecutor.executeActor(actorId, () =>
|
|
476
489
|
this.dispatchActorPacketInsideMailbox({
|
|
477
490
|
actorId,
|
|
@@ -479,11 +492,13 @@ export class ZLinkEntrySpotActivation {
|
|
|
479
492
|
returnResponse: replayReturnResponse,
|
|
480
493
|
remoteBoundSessionTarget: replayRemoteBoundSessionTarget,
|
|
481
494
|
fallbackActorRef: replayFallbackActorRef
|
|
482
|
-
})
|
|
495
|
+
})
|
|
496
|
+
)
|
|
483
497
|
);
|
|
484
498
|
if (handoff !== undefined) return await handoff;
|
|
485
499
|
return this.spotSerialExecutor.executeActor(actorId, () =>
|
|
486
|
-
this.dispatchActorPacketInsideMailbox(delivery)
|
|
500
|
+
this.dispatchActorPacketInsideMailbox(delivery)
|
|
501
|
+
);
|
|
487
502
|
}
|
|
488
503
|
|
|
489
504
|
private async replayActorBacklog(
|
|
@@ -500,8 +515,10 @@ export class ZLinkEntrySpotActivation {
|
|
|
500
515
|
returnResponse,
|
|
501
516
|
remoteBoundSessionTarget,
|
|
502
517
|
fallbackActorRef
|
|
503
|
-
})
|
|
504
|
-
|
|
518
|
+
})
|
|
519
|
+
),
|
|
520
|
+
(index) =>
|
|
521
|
+
this.options.runtimeEventPublisher?.publish({
|
|
505
522
|
sourceName: 'zlink.framework.actor-handoff',
|
|
506
523
|
timestamp: new Date(),
|
|
507
524
|
marker: 'backlog_enqueued',
|
|
@@ -527,12 +544,12 @@ export class ZLinkEntrySpotActivation {
|
|
|
527
544
|
}
|
|
528
545
|
|
|
529
546
|
function notifyEntryActorJoined(entrySpot: ZLinkEntrySpot, actor: ZLinkActor): Promise<void> {
|
|
530
|
-
const callback = (
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
547
|
+
const callback = (
|
|
548
|
+
entrySpot as unknown as {
|
|
549
|
+
readonly onJoinedActor?: (joinedActor: ZLinkActor) => Promise<void>;
|
|
550
|
+
}
|
|
551
|
+
).onJoinedActor;
|
|
552
|
+
return callback === undefined ? Promise.resolve() : callback.call(entrySpot, actor);
|
|
536
553
|
}
|
|
537
554
|
|
|
538
555
|
function toContextGeneration(generation: bigint): number {
|
|
@@ -545,7 +562,9 @@ function toContextGeneration(generation: bigint): number {
|
|
|
545
562
|
}
|
|
546
563
|
|
|
547
564
|
function entrySpotGeneration(spot: ZLinkBackendSpot): bigint {
|
|
548
|
-
return
|
|
549
|
-
|
|
550
|
-
??
|
|
565
|
+
return (
|
|
566
|
+
spot.lifecycleGeneration ??
|
|
567
|
+
(spot as Partial<ZLinkBackendSpot>).status?.().lifecycleGeneration ??
|
|
568
|
+
0n
|
|
569
|
+
);
|
|
551
570
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
RoutingId,
|
|
3
|
-
ZLinkFrameworkRuntimeState,
|
|
4
|
-
ZLinkSpotKind
|
|
5
|
-
} from '../../contracts';
|
|
1
|
+
import type { RoutingId, ZLinkFrameworkRuntimeState, ZLinkSpotKind } from '../../contracts';
|
|
6
2
|
|
|
7
3
|
declare const spotHandleBrand: unique symbol;
|
|
8
4
|
|
|
@@ -64,9 +60,12 @@ export function createSpotHandle(
|
|
|
64
60
|
meshName: initial?.meshName ?? '',
|
|
65
61
|
spotId
|
|
66
62
|
}) as SpotHandle;
|
|
67
|
-
handleStates.set(
|
|
68
|
-
|
|
69
|
-
|
|
63
|
+
handleStates.set(
|
|
64
|
+
handle,
|
|
65
|
+
typeof initialOrRefresh === 'function'
|
|
66
|
+
? { current: undefined, refresh: initialOrRefresh }
|
|
67
|
+
: { current: initialOrRefresh, refresh: refresh! }
|
|
68
|
+
);
|
|
70
69
|
return handle;
|
|
71
70
|
}
|
|
72
71
|
|
|
@@ -75,7 +74,7 @@ export async function resolveSpotHandle(
|
|
|
75
74
|
signal?: AbortSignal
|
|
76
75
|
): Promise<ResolvedSpotHandle | undefined> {
|
|
77
76
|
const state = requireHandleState(handle);
|
|
78
|
-
return state.current ?? await refreshSpotHandle(handle, signal);
|
|
77
|
+
return state.current ?? (await refreshSpotHandle(handle, signal));
|
|
79
78
|
}
|
|
80
79
|
|
|
81
80
|
export async function refreshSpotHandle(
|
|
@@ -83,12 +82,15 @@ export async function refreshSpotHandle(
|
|
|
83
82
|
signal?: AbortSignal
|
|
84
83
|
): Promise<ResolvedSpotHandle | undefined> {
|
|
85
84
|
const state = requireHandleState(handle);
|
|
86
|
-
state.refreshing ??= state
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
85
|
+
state.refreshing ??= state
|
|
86
|
+
.refresh(signal)
|
|
87
|
+
.then((resolved) => {
|
|
88
|
+
state.current = resolved;
|
|
89
|
+
return resolved;
|
|
90
|
+
})
|
|
91
|
+
.finally(() => {
|
|
92
|
+
state.refreshing = undefined;
|
|
93
|
+
});
|
|
92
94
|
return await state.refreshing;
|
|
93
95
|
}
|
|
94
96
|
|