@zlink-systems/framework 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -10,17 +10,9 @@ import {
|
|
|
10
10
|
SubmitResult,
|
|
11
11
|
type ZLinkBackendMessageLike as MessageLike
|
|
12
12
|
} from '../backend/runtime-values';
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from '../../contracts';
|
|
17
|
-
import {
|
|
18
|
-
ZLinkSubmitStatus,
|
|
19
|
-
type ZLinkSubmitResult
|
|
20
|
-
} from '../messaging/submission-result';
|
|
21
|
-
import {
|
|
22
|
-
ZLinkSpotKind
|
|
23
|
-
} from '../../contracts';
|
|
13
|
+
import { ZLinkFrameworkException, type RoutingId } from '../../contracts';
|
|
14
|
+
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
15
|
+
import { ZLinkSpotKind } from '../../contracts';
|
|
24
16
|
import {
|
|
25
17
|
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
26
18
|
ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
|
|
@@ -28,9 +20,7 @@ import {
|
|
|
28
20
|
ZLinkDispatchErrorSurface,
|
|
29
21
|
ZLinkDispatchMessageKind
|
|
30
22
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
31
|
-
import {
|
|
32
|
-
awaitWithAbort
|
|
33
|
-
} from '../abort';
|
|
23
|
+
import { awaitWithAbort } from '../abort';
|
|
34
24
|
import type { ZLinkBackendMeshNode } from '../backend/contracts';
|
|
35
25
|
import {
|
|
36
26
|
closeMeshCompletion,
|
|
@@ -52,10 +42,7 @@ import type {
|
|
|
52
42
|
ZLinkSpotAddressTransport,
|
|
53
43
|
ZLinkSpotRoutedTransport
|
|
54
44
|
} from '../spots/spot-outbound';
|
|
55
|
-
import type {
|
|
56
|
-
ZLinkSpotRouteResolver,
|
|
57
|
-
ZLinkSpotRouteTarget
|
|
58
|
-
} from '../spots/spot-routing-internal';
|
|
45
|
+
import type { ZLinkSpotRouteResolver, ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
59
46
|
|
|
60
47
|
export interface ZLinkHostSpotAddressTransportOptions {
|
|
61
48
|
readonly resolver: () => ZLinkSpotRouteResolver | undefined;
|
|
@@ -75,9 +62,7 @@ export interface ZLinkHostSpotAddressTransportOptions {
|
|
|
75
62
|
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
76
63
|
}
|
|
77
64
|
|
|
78
|
-
export function hasObjectClientCapability(
|
|
79
|
-
role: 'none' | 'client' | 'server' | undefined
|
|
80
|
-
): boolean {
|
|
65
|
+
export function hasObjectClientCapability(role: 'none' | 'client' | 'server' | undefined): boolean {
|
|
81
66
|
return role === 'client' || role === 'server';
|
|
82
67
|
}
|
|
83
68
|
|
|
@@ -130,136 +115,142 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
130
115
|
const timeoutMs = initialSendTimeoutMs(this.options, call);
|
|
131
116
|
const deadline = createSpotAddressDeadline(timeoutMs, call.signal);
|
|
132
117
|
try {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
ZLinkMessageFlowOutcome.Sent,
|
|
147
|
-
ZLinkDispatchMessageKind.Send,
|
|
148
|
-
spotId,
|
|
149
|
-
message,
|
|
150
|
-
existing.routerChannelId,
|
|
151
|
-
existing.stableType,
|
|
152
|
-
existing.targetNodeRid
|
|
118
|
+
const existing = await this.resolveExisting(spotId, deadline.signal);
|
|
119
|
+
deadline.requireRemaining();
|
|
120
|
+
if (existing !== undefined) {
|
|
121
|
+
this.validateExisting(existing, call);
|
|
122
|
+
deadline.setOwnerTimeout(this.sendTimeoutMsForRouteChannel(existing.routerChannelId));
|
|
123
|
+
try {
|
|
124
|
+
const result = await awaitWithAbort(
|
|
125
|
+
this.options.routed.sendToSpot(existing, message, {
|
|
126
|
+
timeoutMs: deadline.requireRemaining(),
|
|
127
|
+
signal: deadline.signal,
|
|
128
|
+
metadata: call.metadata
|
|
129
|
+
}),
|
|
130
|
+
deadline.signal
|
|
153
131
|
);
|
|
154
|
-
|
|
132
|
+
if (result.status === ZLinkSubmitStatus.Submitted) {
|
|
133
|
+
this.traceInstanceAddress(
|
|
134
|
+
ZLinkMessageFlowOutcome.Sent,
|
|
135
|
+
ZLinkDispatchMessageKind.Send,
|
|
136
|
+
spotId,
|
|
137
|
+
message,
|
|
138
|
+
existing.routerChannelId,
|
|
139
|
+
existing.stableType,
|
|
140
|
+
existing.targetNodeRid
|
|
141
|
+
);
|
|
142
|
+
} else {
|
|
143
|
+
this.traceInstanceAddress(
|
|
144
|
+
submitResultFlowOutcome(result.status),
|
|
145
|
+
ZLinkDispatchMessageKind.Send,
|
|
146
|
+
spotId,
|
|
147
|
+
message,
|
|
148
|
+
existing.routerChannelId,
|
|
149
|
+
existing.stableType,
|
|
150
|
+
existing.targetNodeRid,
|
|
151
|
+
submitResultReason(result.status)
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
if (
|
|
155
|
+
result.status === ZLinkSubmitStatus.TargetNotFound ||
|
|
156
|
+
result.status === ZLinkSubmitStatus.RouteNotConnected
|
|
157
|
+
) {
|
|
158
|
+
this.options.resolver()?.invalidate?.(spotId);
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
} catch (error) {
|
|
162
|
+
if (isSpotRouteRefreshError(error)) {
|
|
163
|
+
this.options.resolver()?.invalidate?.(spotId);
|
|
164
|
+
}
|
|
165
|
+
const reason = addressedInstanceErrorReason(error);
|
|
155
166
|
this.traceInstanceAddress(
|
|
156
|
-
|
|
167
|
+
reason === ZLinkDispatchErrorReason.Backpressure
|
|
168
|
+
? ZLinkMessageFlowOutcome.Backpressured
|
|
169
|
+
: ZLinkMessageFlowOutcome.Dropped,
|
|
157
170
|
ZLinkDispatchMessageKind.Send,
|
|
158
171
|
spotId,
|
|
159
172
|
message,
|
|
160
173
|
existing.routerChannelId,
|
|
161
174
|
existing.stableType,
|
|
162
175
|
existing.targetNodeRid,
|
|
163
|
-
|
|
176
|
+
reason
|
|
164
177
|
);
|
|
178
|
+
throw error;
|
|
165
179
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
180
|
+
}
|
|
181
|
+
if (!call.instanceSpot) {
|
|
182
|
+
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
183
|
+
}
|
|
184
|
+
const selected = this.selectMissingTarget(spotId, call);
|
|
185
|
+
if (selected.kind === 'unsupported') {
|
|
186
|
+
this.traceInstanceAddress(
|
|
187
|
+
ZLinkMessageFlowOutcome.Dropped,
|
|
188
|
+
ZLinkDispatchMessageKind.Send,
|
|
189
|
+
spotId,
|
|
190
|
+
message,
|
|
191
|
+
call.initialMeshName,
|
|
192
|
+
call.instanceSpotType,
|
|
193
|
+
undefined,
|
|
194
|
+
ZLinkDispatchErrorReason.StaleTarget
|
|
195
|
+
);
|
|
196
|
+
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
197
|
+
}
|
|
198
|
+
if (selected.kind === 'capacity') {
|
|
199
|
+
const error = missingInstancePlacementCapacity(spotId, call.instanceSpotType);
|
|
178
200
|
this.traceInstanceAddress(
|
|
179
|
-
|
|
180
|
-
? ZLinkMessageFlowOutcome.Backpressured
|
|
181
|
-
: ZLinkMessageFlowOutcome.Dropped,
|
|
201
|
+
ZLinkMessageFlowOutcome.Backpressured,
|
|
182
202
|
ZLinkDispatchMessageKind.Send,
|
|
183
203
|
spotId,
|
|
184
204
|
message,
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
205
|
+
call.initialMeshName,
|
|
206
|
+
call.instanceSpotType,
|
|
207
|
+
undefined,
|
|
208
|
+
ZLinkDispatchErrorReason.Backpressure
|
|
189
209
|
);
|
|
190
210
|
throw error;
|
|
191
211
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
ZLinkDispatchErrorReason.Backpressure
|
|
212
|
+
if (selected.kind === 'unavailable') {
|
|
213
|
+
this.traceInstanceAddress(
|
|
214
|
+
ZLinkMessageFlowOutcome.Dropped,
|
|
215
|
+
ZLinkDispatchMessageKind.Send,
|
|
216
|
+
spotId,
|
|
217
|
+
message,
|
|
218
|
+
call.initialMeshName,
|
|
219
|
+
call.instanceSpotType,
|
|
220
|
+
undefined,
|
|
221
|
+
ZLinkDispatchErrorReason.StaleTarget
|
|
222
|
+
);
|
|
223
|
+
return { status: ZLinkSubmitStatus.RouteNotConnected };
|
|
224
|
+
}
|
|
225
|
+
deadline.setOwnerTimeout(this.sendTimeoutMsForMesh(selected.meshName));
|
|
226
|
+
const encoded = this.encode(ZLinkChannelMessageKind.Command, selected.meshName, message);
|
|
227
|
+
const sourceSpotId =
|
|
228
|
+
call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId);
|
|
229
|
+
const mapped = mapSubmitResult(
|
|
230
|
+
await awaitWithAbort(
|
|
231
|
+
selected.node.sendToMissingInstanceSpot(
|
|
232
|
+
selected.target,
|
|
233
|
+
encoded,
|
|
234
|
+
BigInt(deadline.deadlineUnixMs),
|
|
235
|
+
sourceSpotId,
|
|
236
|
+
call.metadata
|
|
237
|
+
),
|
|
238
|
+
deadline.signal
|
|
239
|
+
)
|
|
221
240
|
);
|
|
222
|
-
throw error;
|
|
223
|
-
}
|
|
224
|
-
if (selected.kind === 'unavailable') {
|
|
225
241
|
this.traceInstanceAddress(
|
|
226
|
-
|
|
242
|
+
submitResultFlowOutcome(mapped.status),
|
|
227
243
|
ZLinkDispatchMessageKind.Send,
|
|
228
244
|
spotId,
|
|
229
245
|
message,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
246
|
+
selected.meshName,
|
|
247
|
+
selected.target.stableType,
|
|
248
|
+
selected.target.targetNodeRid,
|
|
249
|
+
mapped.status === ZLinkSubmitStatus.Submitted
|
|
250
|
+
? undefined
|
|
251
|
+
: submitResultReason(mapped.status)
|
|
234
252
|
);
|
|
235
|
-
return
|
|
236
|
-
}
|
|
237
|
-
deadline.setOwnerTimeout(this.sendTimeoutMsForMesh(selected.meshName));
|
|
238
|
-
const encoded = this.encode(ZLinkChannelMessageKind.Command, selected.meshName, message);
|
|
239
|
-
const sourceSpotId = call.sourceSpot === undefined
|
|
240
|
-
? undefined
|
|
241
|
-
: String(call.sourceSpot.routingId);
|
|
242
|
-
const mapped = mapSubmitResult(await awaitWithAbort(
|
|
243
|
-
selected.node.sendToMissingInstanceSpot(
|
|
244
|
-
selected.target,
|
|
245
|
-
encoded,
|
|
246
|
-
BigInt(deadline.deadlineUnixMs),
|
|
247
|
-
sourceSpotId,
|
|
248
|
-
call.metadata
|
|
249
|
-
),
|
|
250
|
-
deadline.signal
|
|
251
|
-
));
|
|
252
|
-
this.traceInstanceAddress(
|
|
253
|
-
submitResultFlowOutcome(mapped.status),
|
|
254
|
-
ZLinkDispatchMessageKind.Send,
|
|
255
|
-
spotId,
|
|
256
|
-
message,
|
|
257
|
-
selected.meshName,
|
|
258
|
-
selected.target.stableType,
|
|
259
|
-
selected.target.targetNodeRid,
|
|
260
|
-
mapped.status === ZLinkSubmitStatus.Submitted ? undefined : submitResultReason(mapped.status)
|
|
261
|
-
);
|
|
262
|
-
return mapped;
|
|
253
|
+
return mapped;
|
|
263
254
|
} catch (error) {
|
|
264
255
|
if (deadline.expired()) {
|
|
265
256
|
return { status: ZLinkSubmitStatus.TimedOut };
|
|
@@ -338,18 +329,16 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
338
329
|
// reaches this process. Refresh authority and select again under the
|
|
339
330
|
// same end-to-end deadline; the old envelope was not admitted.
|
|
340
331
|
this.options.resolver()?.invalidate?.(spotId);
|
|
341
|
-
await waitForSpotRouteRefresh(
|
|
342
|
-
Math.min(10, deadline.requireRemaining()),
|
|
343
|
-
deadline.signal
|
|
344
|
-
);
|
|
332
|
+
await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
|
|
345
333
|
}
|
|
346
334
|
}
|
|
347
335
|
} catch (error) {
|
|
348
336
|
if (
|
|
349
|
-
deadline.expired()
|
|
350
|
-
|
|
351
|
-
error instanceof ZLinkFrameworkException
|
|
352
|
-
|
|
337
|
+
deadline.expired() &&
|
|
338
|
+
!(
|
|
339
|
+
error instanceof ZLinkFrameworkException &&
|
|
340
|
+
internalFrameworkErrorKind(error) ===
|
|
341
|
+
ZLinkFrameworkInternalErrorKind.RequestTargetNotFound
|
|
353
342
|
)
|
|
354
343
|
) {
|
|
355
344
|
throw createInternalFrameworkException(
|
|
@@ -381,11 +370,14 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
381
370
|
existing.stableType,
|
|
382
371
|
existing.targetNodeRid
|
|
383
372
|
);
|
|
384
|
-
const reply = await awaitWithAbort(
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
373
|
+
const reply = await awaitWithAbort(
|
|
374
|
+
this.options.routed.requestToSpot<TReply>(existing, request, {
|
|
375
|
+
timeoutMs: deadline.requireRemaining(),
|
|
376
|
+
signal: deadline.signal,
|
|
377
|
+
metadata: call.metadata
|
|
378
|
+
}),
|
|
379
|
+
deadline.signal
|
|
380
|
+
);
|
|
389
381
|
this.traceInstanceAddress(
|
|
390
382
|
ZLinkMessageFlowOutcome.ReplyReceived,
|
|
391
383
|
ZLinkDispatchMessageKind.Request,
|
|
@@ -419,50 +411,100 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
419
411
|
ZLinkFrameworkInternalErrorKind.RequestTargetNotFound,
|
|
420
412
|
`No eligible Instance Spot target serves '${String(spotId)}'.`
|
|
421
413
|
);
|
|
422
|
-
this.reportInstanceRequestError(
|
|
423
|
-
|
|
414
|
+
this.reportInstanceRequestError(
|
|
415
|
+
spotId,
|
|
416
|
+
request,
|
|
417
|
+
error,
|
|
418
|
+
call.initialMeshName,
|
|
419
|
+
undefined,
|
|
420
|
+
call.instanceSpotType,
|
|
421
|
+
ZLinkDispatchErrorReason.StaleTarget
|
|
422
|
+
);
|
|
424
423
|
throw error;
|
|
425
424
|
}
|
|
426
425
|
if (selected.kind === 'unavailable') {
|
|
427
426
|
const error = missingInstancePlacementUnavailable(spotId, call.instanceSpotType);
|
|
428
|
-
this.reportInstanceRequestError(
|
|
429
|
-
|
|
427
|
+
this.reportInstanceRequestError(
|
|
428
|
+
spotId,
|
|
429
|
+
request,
|
|
430
|
+
error,
|
|
431
|
+
call.initialMeshName,
|
|
432
|
+
undefined,
|
|
433
|
+
call.instanceSpotType,
|
|
434
|
+
ZLinkDispatchErrorReason.StaleTarget
|
|
435
|
+
);
|
|
430
436
|
throw error;
|
|
431
437
|
}
|
|
432
438
|
const deadlineUnixMs = BigInt(deadline.deadlineUnixMs);
|
|
433
|
-
const encoded = this.encodeAtDeadline(
|
|
434
|
-
|
|
439
|
+
const encoded = this.encodeAtDeadline(
|
|
440
|
+
ZLinkChannelMessageKind.Request,
|
|
441
|
+
selected.meshName,
|
|
442
|
+
request,
|
|
443
|
+
deadline.deadlineUnixMs
|
|
444
|
+
);
|
|
435
445
|
deadline.requireRemaining();
|
|
436
446
|
const table = this.options.completions(selected.meshName);
|
|
437
|
-
if (table === undefined)
|
|
447
|
+
if (table === undefined)
|
|
448
|
+
throw new Error(`MeshNode '${selected.meshName}' completion table is not started.`);
|
|
438
449
|
let completionPromise: ReturnType<ZLinkMeshCompletionTable['submit']>;
|
|
439
450
|
try {
|
|
440
451
|
completionPromise = table.submit(
|
|
441
|
-
() =>
|
|
442
|
-
|
|
443
|
-
|
|
452
|
+
() =>
|
|
453
|
+
selected.node.requestToMissingInstanceSpot(
|
|
454
|
+
selected.target,
|
|
455
|
+
encoded,
|
|
456
|
+
deadlineUnixMs,
|
|
457
|
+
call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId),
|
|
458
|
+
call.metadata
|
|
459
|
+
),
|
|
444
460
|
deadline.signal
|
|
445
461
|
);
|
|
446
462
|
} catch (error) {
|
|
447
|
-
if (
|
|
448
|
-
|
|
463
|
+
if (
|
|
464
|
+
error instanceof ZLinkFrameworkException &&
|
|
465
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound
|
|
466
|
+
) {
|
|
449
467
|
PRE_ADMISSION_MISSING_INSTANCE_ERRORS.add(error);
|
|
450
468
|
}
|
|
451
469
|
throw error;
|
|
452
470
|
}
|
|
453
|
-
this.traceInstanceAddress(
|
|
454
|
-
|
|
471
|
+
this.traceInstanceAddress(
|
|
472
|
+
ZLinkMessageFlowOutcome.Sent,
|
|
473
|
+
ZLinkDispatchMessageKind.Request,
|
|
474
|
+
spotId,
|
|
475
|
+
request,
|
|
476
|
+
selected.meshName,
|
|
477
|
+
selected.target.stableType,
|
|
478
|
+
selected.target.targetNodeRid
|
|
479
|
+
);
|
|
455
480
|
const completion = await awaitWithAbort(completionPromise, deadline.signal);
|
|
456
481
|
try {
|
|
457
482
|
if (completion.terminalResult !== 0 || completion.failureErrno !== 0) {
|
|
458
|
-
const error = missingInstanceRequestFailure(
|
|
459
|
-
|
|
460
|
-
|
|
483
|
+
const error = missingInstanceRequestFailure(
|
|
484
|
+
completion.terminalResult,
|
|
485
|
+
completion.failureErrno
|
|
486
|
+
);
|
|
487
|
+
this.reportInstanceRequestError(
|
|
488
|
+
spotId,
|
|
489
|
+
request,
|
|
490
|
+
error,
|
|
491
|
+
selected.meshName,
|
|
492
|
+
selected.target.targetNodeRid,
|
|
493
|
+
selected.target.stableType,
|
|
494
|
+
addressedInstanceErrorReason(error)
|
|
495
|
+
);
|
|
461
496
|
throw error;
|
|
462
497
|
}
|
|
463
498
|
const reply = decodeChannelReply<TReply>(completion.parts, this.options.codecs);
|
|
464
|
-
this.traceInstanceAddress(
|
|
465
|
-
|
|
499
|
+
this.traceInstanceAddress(
|
|
500
|
+
ZLinkMessageFlowOutcome.ReplyReceived,
|
|
501
|
+
ZLinkDispatchMessageKind.Request,
|
|
502
|
+
spotId,
|
|
503
|
+
request,
|
|
504
|
+
selected.meshName,
|
|
505
|
+
selected.target.stableType,
|
|
506
|
+
selected.target.targetNodeRid
|
|
507
|
+
);
|
|
466
508
|
return reply;
|
|
467
509
|
} finally {
|
|
468
510
|
closeMeshCompletion(completion);
|
|
@@ -529,8 +571,8 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
529
571
|
return await awaitWithAbort(resolver.resolve(spotId, signal), signal);
|
|
530
572
|
} catch (error) {
|
|
531
573
|
if (
|
|
532
|
-
error instanceof ZLinkFrameworkException
|
|
533
|
-
|
|
574
|
+
error instanceof ZLinkFrameworkException &&
|
|
575
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.SpotRouteNotFound
|
|
534
576
|
) {
|
|
535
577
|
return undefined;
|
|
536
578
|
}
|
|
@@ -550,9 +592,9 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
550
592
|
| { readonly kind: 'fail' }
|
|
551
593
|
> {
|
|
552
594
|
if (
|
|
553
|
-
!call.instanceSpot
|
|
554
|
-
|
|
555
|
-
|
|
595
|
+
!call.instanceSpot ||
|
|
596
|
+
!(error instanceof ZLinkFrameworkException) ||
|
|
597
|
+
!isInstanceRouteStaleError(error)
|
|
556
598
|
) {
|
|
557
599
|
return { kind: 'fail' };
|
|
558
600
|
}
|
|
@@ -563,10 +605,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
563
605
|
if (!sameSpotRouteSnapshot(current, staleRoute)) {
|
|
564
606
|
return { kind: 'route', route: current };
|
|
565
607
|
}
|
|
566
|
-
await waitForSpotRouteRefresh(
|
|
567
|
-
Math.min(10, deadline.requireRemaining()),
|
|
568
|
-
deadline.signal
|
|
569
|
-
);
|
|
608
|
+
await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
|
|
570
609
|
}
|
|
571
610
|
}
|
|
572
611
|
|
|
@@ -576,8 +615,8 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
576
615
|
): MissingTargetSelection {
|
|
577
616
|
const configuredMeshes = this.options.meshNames();
|
|
578
617
|
if (
|
|
579
|
-
call.initialMeshName !== undefined
|
|
580
|
-
|
|
618
|
+
call.initialMeshName !== undefined &&
|
|
619
|
+
this.options.isMeshConfigured?.(call.initialMeshName) === false
|
|
581
620
|
) {
|
|
582
621
|
throw createInternalFrameworkException(
|
|
583
622
|
ZLinkFrameworkInternalErrorKind.MeshNotFound,
|
|
@@ -602,17 +641,21 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
602
641
|
'Multiple object-client RouteMeshes are configured; call inMesh(...).'
|
|
603
642
|
);
|
|
604
643
|
}
|
|
605
|
-
const meshNames =
|
|
606
|
-
? configuredMeshes
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
644
|
+
const meshNames =
|
|
645
|
+
call.initialMeshName === undefined ? configuredMeshes : [call.initialMeshName];
|
|
646
|
+
const distinctTypes = [
|
|
647
|
+
...new Set(
|
|
648
|
+
meshNames.flatMap(
|
|
649
|
+
(meshName) => this.options.meshNode(meshName)?.instanceSpotPlacementTypes?.() ?? []
|
|
650
|
+
)
|
|
651
|
+
)
|
|
652
|
+
];
|
|
653
|
+
const canInspectPlacementTypes = meshNames.some(
|
|
654
|
+
(meshName) =>
|
|
655
|
+
typeof this.options.meshNode(meshName)?.instanceSpotPlacementTypes === 'function'
|
|
613
656
|
);
|
|
614
|
-
const stableType =
|
|
615
|
-
?? (distinctTypes.length === 1 ? distinctTypes[0] : undefined);
|
|
657
|
+
const stableType =
|
|
658
|
+
call.instanceSpotType ?? (distinctTypes.length === 1 ? distinctTypes[0] : undefined);
|
|
616
659
|
if (stableType === undefined) {
|
|
617
660
|
if (distinctTypes.length === 0) return { kind: 'unsupported' };
|
|
618
661
|
throw createInternalFrameworkException(
|
|
@@ -656,15 +699,19 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
656
699
|
}
|
|
657
700
|
|
|
658
701
|
private sendTimeoutMsForMesh(meshName: string): number {
|
|
659
|
-
return
|
|
660
|
-
|
|
661
|
-
|
|
702
|
+
return (
|
|
703
|
+
this.options.sendTimeoutMsForMesh?.(meshName) ??
|
|
704
|
+
this.options.defaultSendTimeoutMs ??
|
|
705
|
+
this.options.defaultRequestTimeoutMs
|
|
706
|
+
);
|
|
662
707
|
}
|
|
663
708
|
|
|
664
709
|
private sendTimeoutMsForRouteChannel(routeChannelId: string): number {
|
|
665
|
-
return
|
|
666
|
-
|
|
667
|
-
|
|
710
|
+
return (
|
|
711
|
+
this.options.sendTimeoutMsForRouteChannel?.(routeChannelId) ??
|
|
712
|
+
this.options.defaultSendTimeoutMs ??
|
|
713
|
+
this.options.defaultRequestTimeoutMs
|
|
714
|
+
);
|
|
668
715
|
}
|
|
669
716
|
|
|
670
717
|
private validateExisting(
|
|
@@ -673,11 +720,8 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
|
|
|
673
720
|
): void {
|
|
674
721
|
if (!call.instanceSpot) return;
|
|
675
722
|
if (
|
|
676
|
-
target.spotKind !== ZLinkSpotKind.Instance
|
|
677
|
-
|
|
678
|
-
call.instanceSpotType !== undefined
|
|
679
|
-
&& target.stableType !== call.instanceSpotType
|
|
680
|
-
)
|
|
723
|
+
target.spotKind !== ZLinkSpotKind.Instance ||
|
|
724
|
+
(call.instanceSpotType !== undefined && target.stableType !== call.instanceSpotType)
|
|
681
725
|
) {
|
|
682
726
|
throw createInternalFrameworkException(
|
|
683
727
|
ZLinkFrameworkInternalErrorKind.SpotTypeMismatch,
|
|
@@ -741,8 +785,9 @@ function isInstanceRouteStaleError(error: unknown): error is ZLinkFrameworkExcep
|
|
|
741
785
|
}
|
|
742
786
|
|
|
743
787
|
function isMissingInstanceRetryError(error: unknown): error is ZLinkFrameworkException {
|
|
744
|
-
return
|
|
745
|
-
&& PRE_ADMISSION_MISSING_INSTANCE_ERRORS.has(error)
|
|
788
|
+
return (
|
|
789
|
+
error instanceof ZLinkFrameworkException && PRE_ADMISSION_MISSING_INSTANCE_ERRORS.has(error)
|
|
790
|
+
);
|
|
746
791
|
}
|
|
747
792
|
|
|
748
793
|
function missingInstanceRequestFailure(
|
|
@@ -762,12 +807,12 @@ function missingInstanceRequestFailure(
|
|
|
762
807
|
: result === RequestResult.Terminated
|
|
763
808
|
? ZLinkFrameworkInternalErrorKind.RuntimeShutdown
|
|
764
809
|
: result === RequestResult.Backpressured
|
|
765
|
-
// Spec 32-framework-error-model:104-108 — the bounded admission
|
|
766
|
-
|
|
767
|
-
|
|
810
|
+
? // Spec 32-framework-error-model:104-108 — the bounded admission
|
|
811
|
+
// terminal is target placement capacity: Unavailable.
|
|
812
|
+
ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted
|
|
768
813
|
: result === RequestResult.NotConnected
|
|
769
814
|
? ZLinkFrameworkInternalErrorKind.RouteNotConnected
|
|
770
|
-
: wireKind ?? ZLinkFrameworkInternalErrorKind.RequestFailed;
|
|
815
|
+
: (wireKind ?? ZLinkFrameworkInternalErrorKind.RequestFailed);
|
|
771
816
|
return createInternalFrameworkException(
|
|
772
817
|
kind,
|
|
773
818
|
`Instance Spot request failed with result ${result} and errno ${nativeErrno}.`
|
|
@@ -822,29 +867,30 @@ function missingInstancePlacementUnavailable(
|
|
|
822
867
|
function isSpotRouteRefreshError(error: unknown): error is ZLinkFrameworkException {
|
|
823
868
|
if (!(error instanceof ZLinkFrameworkException)) return false;
|
|
824
869
|
const kind = internalFrameworkErrorKind(error);
|
|
825
|
-
return
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
870
|
+
return (
|
|
871
|
+
kind === ZLinkFrameworkInternalErrorKind.SpotRouteNotFound ||
|
|
872
|
+
kind === ZLinkFrameworkInternalErrorKind.SpotGenerationStale ||
|
|
873
|
+
kind === ZLinkFrameworkInternalErrorKind.SpotMoving ||
|
|
874
|
+
kind === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound ||
|
|
875
|
+
kind === ZLinkFrameworkInternalErrorKind.ActorLocationStale ||
|
|
876
|
+
kind === ZLinkFrameworkInternalErrorKind.RouteNotConnected
|
|
877
|
+
);
|
|
831
878
|
}
|
|
832
879
|
|
|
833
|
-
function sameSpotRouteSnapshot(
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
)
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
&& left.authorityStoreVersion === right.authorityStoreVersion;
|
|
880
|
+
function sameSpotRouteSnapshot(left: ZLinkSpotRouteTarget, right: ZLinkSpotRouteTarget): boolean {
|
|
881
|
+
return (
|
|
882
|
+
String(left.targetNodeRid) === String(right.targetNodeRid) &&
|
|
883
|
+
String(left.spotId) === String(right.spotId) &&
|
|
884
|
+
left.routerChannelId === right.routerChannelId &&
|
|
885
|
+
left.spotKind === right.spotKind &&
|
|
886
|
+
left.stableType === right.stableType &&
|
|
887
|
+
left.targetSpotGeneration === right.targetSpotGeneration &&
|
|
888
|
+
left.targetNodeGeneration === right.targetNodeGeneration &&
|
|
889
|
+
left.authorityOwnerGeneration === right.authorityOwnerGeneration &&
|
|
890
|
+
left.targetOwnerId === right.targetOwnerId &&
|
|
891
|
+
left.ownerLeaseGeneration === right.ownerLeaseGeneration &&
|
|
892
|
+
left.authorityStoreVersion === right.authorityStoreVersion
|
|
893
|
+
);
|
|
848
894
|
}
|
|
849
895
|
|
|
850
896
|
function waitForSpotRouteRefresh(delayMs: number, signal: AbortSignal): Promise<void> {
|
|
@@ -864,9 +910,7 @@ function waitForSpotRouteRefresh(delayMs: number, signal: AbortSignal): Promise<
|
|
|
864
910
|
});
|
|
865
911
|
}
|
|
866
912
|
|
|
867
|
-
function submitResultReason(
|
|
868
|
-
status: ZLinkSubmitStatus
|
|
869
|
-
): ZLinkDispatchErrorReason {
|
|
913
|
+
function submitResultReason(status: ZLinkSubmitStatus): ZLinkDispatchErrorReason {
|
|
870
914
|
switch (status) {
|
|
871
915
|
case ZLinkSubmitStatus.Backpressured:
|
|
872
916
|
case ZLinkSubmitStatus.TimedOut:
|
|
@@ -899,12 +943,12 @@ function addressedInstanceErrorReason(error: unknown): ZLinkDispatchErrorReason
|
|
|
899
943
|
if (error instanceof ZLinkFrameworkException) {
|
|
900
944
|
const kind = internalFrameworkErrorKind(error);
|
|
901
945
|
if (
|
|
902
|
-
kind === ZLinkFrameworkInternalErrorKind.SpotRouteNotFound
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
946
|
+
kind === ZLinkFrameworkInternalErrorKind.SpotRouteNotFound ||
|
|
947
|
+
kind === ZLinkFrameworkInternalErrorKind.SpotGenerationStale ||
|
|
948
|
+
kind === ZLinkFrameworkInternalErrorKind.SpotMoving ||
|
|
949
|
+
kind === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound ||
|
|
950
|
+
kind === ZLinkFrameworkInternalErrorKind.ActorLocationStale ||
|
|
951
|
+
kind === ZLinkFrameworkInternalErrorKind.RouteNotConnected
|
|
908
952
|
) {
|
|
909
953
|
return ZLinkDispatchErrorReason.StaleTarget;
|
|
910
954
|
}
|
|
@@ -912,10 +956,10 @@ function addressedInstanceErrorReason(error: unknown): ZLinkDispatchErrorReason
|
|
|
912
956
|
return ZLinkDispatchErrorReason.Shutdown;
|
|
913
957
|
}
|
|
914
958
|
if (
|
|
915
|
-
kind === ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
959
|
+
kind === ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted ||
|
|
960
|
+
kind === ZLinkFrameworkInternalErrorKind.WorkerQueueFull ||
|
|
961
|
+
kind === ZLinkFrameworkInternalErrorKind.WorkerTimedOut ||
|
|
962
|
+
kind === ZLinkFrameworkInternalErrorKind.DeadlineExceeded
|
|
919
963
|
) {
|
|
920
964
|
return ZLinkDispatchErrorReason.Backpressure;
|
|
921
965
|
}
|
|
@@ -928,10 +972,10 @@ function initialSendTimeoutMs(
|
|
|
928
972
|
call: ZLinkSpotAddressCallOptions
|
|
929
973
|
): number {
|
|
930
974
|
return call.initialMeshName === undefined
|
|
931
|
-
? options.defaultSendTimeoutMs ?? options.defaultRequestTimeoutMs
|
|
932
|
-
: options.sendTimeoutMsForMesh?.(call.initialMeshName)
|
|
933
|
-
|
|
934
|
-
|
|
975
|
+
? (options.defaultSendTimeoutMs ?? options.defaultRequestTimeoutMs)
|
|
976
|
+
: (options.sendTimeoutMsForMesh?.(call.initialMeshName) ??
|
|
977
|
+
options.defaultSendTimeoutMs ??
|
|
978
|
+
options.defaultRequestTimeoutMs);
|
|
935
979
|
}
|
|
936
980
|
|
|
937
981
|
interface ZLinkSpotAddressDeadline {
|
|
@@ -943,7 +987,10 @@ interface ZLinkSpotAddressDeadline {
|
|
|
943
987
|
close(): void;
|
|
944
988
|
}
|
|
945
989
|
|
|
946
|
-
function createSpotAddressDeadline(
|
|
990
|
+
function createSpotAddressDeadline(
|
|
991
|
+
timeoutMs: number,
|
|
992
|
+
parent?: AbortSignal
|
|
993
|
+
): ZLinkSpotAddressDeadline {
|
|
947
994
|
const startedAtMs = performance.now();
|
|
948
995
|
const startedAtUnixMs = Date.now();
|
|
949
996
|
let deadlineMs = startedAtMs + Math.max(0, timeoutMs);
|