@zlink-systems/framework 0.26.0 → 0.28.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/Actors/ZLinkActorClient.d.ts +1 -1
- package/dist/contracts/Channels/Calls.d.ts +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/Builders.d.ts +0 -1
- package/dist/contracts/Configuration/Configs.d.ts +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +2 -2
- package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
- package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +49 -153
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
- package/dist/runtime/actors/actor-request-deadline.js +6 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +7 -27
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +73 -59
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.d.ts +1 -1
- package/dist/runtime/channels/channel-envelope.js +51 -39
- package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
- package/dist/runtime/channels/channel-outbound-operations.js +25 -42
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
- package/dist/runtime/channels/channel-runtime-manager.js +13 -10
- package/dist/runtime/channels/channel-socket-options.js +3 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +240 -177
- package/dist/runtime/channels/channel-transports.d.ts +21 -31
- package/dist/runtime/channels/channel-transports.js +80 -62
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +1 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
- package/dist/runtime/channels/source-spot-router.d.ts +1 -1
- package/dist/runtime/channels/source-spot-router.js +2 -4
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-node-route-transport.js +5 -5
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
- package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
- package/dist/runtime/host/actor-packet-relay.js +54 -99
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -171
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +15 -28
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +3 -12
- package/dist/runtime/host/spot-address-transport.js +78 -220
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +309 -336
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/request-deadline.d.ts +3 -0
- package/dist/runtime/messaging/request-deadline.js +39 -0
- package/dist/runtime/messaging/submission-result.d.ts +4 -0
- package/dist/runtime/messaging/submission-result.js +56 -1
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +7 -8
- package/dist/runtime/spots/spot-outbound.js +21 -23
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -2
- package/dist/runtime/streams/index.d.ts +16 -17
- package/dist/runtime/streams/index.js +22 -23
- package/dist/runtime/streams/managed-stream.d.ts +5 -2
- package/dist/runtime/streams/managed-stream.js +20 -13
- package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +6 -8
- package/dist/runtime/streams/session-calls.js +6 -22
- package/dist/runtime/streams/session-context.d.ts +10 -10
- package/dist/runtime/streams/session-context.js +25 -10
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
- package/src/contracts/Channels/Calls.ts +1 -1
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/Builders.ts +0 -1
- package/src/contracts/Configuration/Configs.ts +0 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +2 -2
- package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
- package/src/contracts/Streams/IZLinkSession.ts +2 -3
- package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +85 -218
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +4 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +14 -37
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +139 -102
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +74 -57
- package/src/runtime/channels/channel-outbound-operations.ts +40 -55
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +12 -30
- package/src/runtime/channels/channel-socket-options.ts +8 -15
- package/src/runtime/channels/channel-socket-registry.ts +291 -196
- package/src/runtime/channels/channel-transports.ts +168 -145
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/local-spot-route-transport.ts +1 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
- package/src/runtime/channels/source-spot-router.ts +2 -9
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +7 -9
- package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +63 -160
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -320
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +16 -57
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +175 -356
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +457 -482
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/request-deadline.ts +58 -0
- package/src/runtime/messaging/submission-result.ts +72 -2
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +59 -47
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
- package/src/runtime/streams/bound-session-service.ts +22 -2
- package/src/runtime/streams/index.ts +78 -68
- package/src/runtime/streams/managed-stream.ts +32 -23
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +11 -36
- package/src/runtime/streams/session-context.ts +60 -25
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -141,14 +141,16 @@ export interface ZLinkBackendMeshNode {
|
|
|
141
141
|
route: ServiceInstanceRouteFence,
|
|
142
142
|
parts: MessageLike | readonly MessageLike[],
|
|
143
143
|
sourceSpotId?: string,
|
|
144
|
-
metadata?: ReadonlyMap<string, string
|
|
144
|
+
metadata?: ReadonlyMap<string, string>,
|
|
145
|
+
instanceIntent?: boolean
|
|
145
146
|
): Promise<SubmitResult>;
|
|
146
147
|
requestInstanceSpot(
|
|
147
148
|
route: ServiceInstanceRouteFence,
|
|
148
149
|
parts: MessageLike | readonly MessageLike[],
|
|
149
150
|
timeoutMs?: number,
|
|
150
151
|
sourceSpotId?: string,
|
|
151
|
-
metadata?: ReadonlyMap<string, string
|
|
152
|
+
metadata?: ReadonlyMap<string, string>,
|
|
153
|
+
instanceIntent?: boolean
|
|
152
154
|
): MeshOperationId;
|
|
153
155
|
registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
|
|
154
156
|
requestUserSpotCreate(
|
|
@@ -249,6 +251,12 @@ export interface ZLinkBackendMeshNode {
|
|
|
249
251
|
readonly objectGeneration: bigint;
|
|
250
252
|
}
|
|
251
253
|
| undefined;
|
|
254
|
+
registerInstanceIntent?(
|
|
255
|
+
instanceType: string,
|
|
256
|
+
route: import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence,
|
|
257
|
+
expectedCurrentRoute?:
|
|
258
|
+
import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence | null
|
|
259
|
+
): void;
|
|
252
260
|
waitForInstanceApplicationQuiescence?(spotId: string, signal?: AbortSignal): Promise<void>;
|
|
253
261
|
restoreUserSpotAuthority?(
|
|
254
262
|
spotId: string,
|
|
@@ -269,7 +277,7 @@ export interface ZLinkBackendMeshNode {
|
|
|
269
277
|
stableType: string,
|
|
270
278
|
generation: bigint,
|
|
271
279
|
authorityOwnerGeneration: bigint,
|
|
272
|
-
spotId: string,
|
|
280
|
+
spotId: string | undefined,
|
|
273
281
|
spotGeneration: bigint,
|
|
274
282
|
membershipEpoch: bigint
|
|
275
283
|
): ZLinkBackendActorRef;
|
|
@@ -435,27 +443,6 @@ export interface ZLinkBackendActorRecvInfo {
|
|
|
435
443
|
readonly flags: number;
|
|
436
444
|
}
|
|
437
445
|
|
|
438
|
-
export interface ZLinkBackendActorJoinInfo {
|
|
439
|
-
readonly sourceActor: ZLinkBackendActorRef;
|
|
440
|
-
readonly targetActor: ZLinkBackendActorRef;
|
|
441
|
-
readonly sourceNodeRid: RoutingId;
|
|
442
|
-
readonly sourceSpotId: RoutingId;
|
|
443
|
-
readonly targetNodeRid: RoutingId;
|
|
444
|
-
readonly targetSpotId: RoutingId;
|
|
445
|
-
readonly joinEpoch: bigint;
|
|
446
|
-
readonly flags: number;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
export interface ZLinkBackendActorJoinRequest {
|
|
450
|
-
readonly info: ZLinkBackendActorJoinInfo;
|
|
451
|
-
readonly message: Message;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
export interface ZLinkBackendActorJoinReplyOperation {
|
|
455
|
-
message(message: Message): ZLinkBackendActorJoinReplyOperation;
|
|
456
|
-
submit(): void;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
446
|
export interface ZLinkBackendSpotDispatchInfo {
|
|
460
447
|
readonly event: ZLinkBackendSpotDispatchEvent;
|
|
461
448
|
readonly subjectKind?: number;
|
|
@@ -465,6 +452,7 @@ export interface ZLinkBackendSpotDispatchInfo {
|
|
|
465
452
|
|
|
466
453
|
export interface ZLinkBackendSocketMonitorEvent {
|
|
467
454
|
readonly nativeEvent: MonitorEventType;
|
|
455
|
+
readonly readyEdge: boolean;
|
|
468
456
|
readonly routingId?: unknown;
|
|
469
457
|
readonly localAddr: string;
|
|
470
458
|
readonly remoteAddr: string;
|
|
@@ -504,7 +492,6 @@ export interface ZLinkBackendDealerSocket extends ZLinkBackendConnectableSocket
|
|
|
504
492
|
sendHighWaterMark: number;
|
|
505
493
|
receiveHighWaterMark: number;
|
|
506
494
|
receiveTimeoutMs: number;
|
|
507
|
-
sendTimeoutMs: number;
|
|
508
495
|
maxMessageSize: number;
|
|
509
496
|
send(message: Message | readonly Message[]): Promise<void>;
|
|
510
497
|
request(message: Message | readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
|
|
@@ -535,7 +522,6 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
535
522
|
sendHighWaterMark: number;
|
|
536
523
|
receiveHighWaterMark: number;
|
|
537
524
|
receiveTimeoutMs: number;
|
|
538
|
-
sendTimeoutMs: number;
|
|
539
525
|
maxMessageSize: number;
|
|
540
526
|
setRoutingId(routingId: RoutingId): void;
|
|
541
527
|
recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
|
|
@@ -563,6 +549,7 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
563
549
|
}
|
|
564
550
|
|
|
565
551
|
export interface ZLinkBackendPublisherSocket extends ZLinkBackendSocket {
|
|
552
|
+
sendTimeoutMs: number;
|
|
566
553
|
sendHighWaterMark: number;
|
|
567
554
|
noDrop: boolean;
|
|
568
555
|
publish(topic: string, message: Message | readonly Message[]): void;
|
|
@@ -588,7 +575,6 @@ export interface ZLinkBackendStreamPacket {
|
|
|
588
575
|
}
|
|
589
576
|
|
|
590
577
|
export interface ZLinkBackendStreamSocket extends ZLinkBackendSocket {
|
|
591
|
-
readonly sendTimeoutMs: number;
|
|
592
578
|
readonly sendHighWaterMark: number;
|
|
593
579
|
/** Framework stream ingress uses this bound for packet payload validation. */
|
|
594
580
|
maxMessageSize: number;
|
|
@@ -599,11 +585,7 @@ export interface ZLinkBackendStreamSocket extends ZLinkBackendSocket {
|
|
|
599
585
|
payload: Message | readonly Message[],
|
|
600
586
|
flags: ZLinkBackendSendFlags
|
|
601
587
|
): boolean;
|
|
602
|
-
submit(
|
|
603
|
-
routingId: RoutingId,
|
|
604
|
-
payload: Message | readonly Message[],
|
|
605
|
-
timeoutMs?: number
|
|
606
|
-
): Promise<void>;
|
|
588
|
+
submit(routingId: RoutingId, payload: Message | readonly Message[]): Promise<void>;
|
|
607
589
|
disconnectPeer(routingId: RoutingId): void;
|
|
608
590
|
bindActor(
|
|
609
591
|
sessionRid: RoutingId,
|
|
@@ -734,11 +716,6 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
734
716
|
payload: Message | readonly Message[],
|
|
735
717
|
timeoutMs?: number
|
|
736
718
|
): Promise<readonly Message[]>;
|
|
737
|
-
recvActorJoin(flags: ZLinkBackendRecvFlags): ZLinkBackendActorJoinRequest | null;
|
|
738
|
-
replyActorJoin(
|
|
739
|
-
request: ZLinkBackendActorJoinRequest,
|
|
740
|
-
joinResultCode: number
|
|
741
|
-
): ZLinkBackendActorJoinReplyOperation;
|
|
742
719
|
dispose(): Promise<void>;
|
|
743
720
|
}
|
|
744
721
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ZLinkSubmitStatus } from '../messaging/submission-result';
|
|
1
|
+
import { classifySubmitResult } from '../messaging/submission-result';
|
|
3
2
|
import type { ZLinkBackendActorSessionNode, ZLinkBackendMeshNode } from './contracts';
|
|
4
3
|
import { closeMeshCompletion, type ZLinkMeshCompletionTable } from './mesh-completion-table';
|
|
5
4
|
|
|
@@ -15,22 +14,7 @@ export function meshActorSessionNodeAdapter(
|
|
|
15
14
|
parts as never,
|
|
16
15
|
flags
|
|
17
16
|
);
|
|
18
|
-
|
|
19
|
-
case SubmitResult.Ok:
|
|
20
|
-
return { status: ZLinkSubmitStatus.Submitted };
|
|
21
|
-
case SubmitResult.Backpressured:
|
|
22
|
-
case SubmitResult.NotAdmitted:
|
|
23
|
-
return { status: ZLinkSubmitStatus.Backpressured };
|
|
24
|
-
case SubmitResult.NotFound:
|
|
25
|
-
case SubmitResult.InvalidState:
|
|
26
|
-
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
27
|
-
case SubmitResult.NotConnected:
|
|
28
|
-
return { status: ZLinkSubmitStatus.RouteNotConnected };
|
|
29
|
-
case SubmitResult.Terminated:
|
|
30
|
-
return { status: ZLinkSubmitStatus.Shutdown };
|
|
31
|
-
default:
|
|
32
|
-
throw new Error(`Actor bound-session send failed with result '${result}'.`);
|
|
33
|
-
}
|
|
17
|
+
return classifySubmitResult(result, 'Actor bound-session send');
|
|
34
18
|
},
|
|
35
19
|
async closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs, signal) {
|
|
36
20
|
if (completions === undefined) {
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
import { availableParallelism } from 'node:os';
|
|
3
|
-
import {
|
|
3
|
+
import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
|
|
4
|
+
import type {
|
|
5
|
+
ApplicationJobPermitPort,
|
|
6
|
+
ApplicationJobQueuePort
|
|
7
|
+
} from '../application-jobs/contracts';
|
|
8
|
+
import { runZLinkExecutionArea } from '../execution';
|
|
4
9
|
import {
|
|
5
10
|
ReadyDomain,
|
|
6
11
|
type ReadyBatch,
|
|
@@ -8,13 +13,20 @@ import {
|
|
|
8
13
|
type ReceiveBatch,
|
|
9
14
|
type ReceiveRecord
|
|
10
15
|
} from '../foundation/service-runtime-contracts';
|
|
16
|
+
import {
|
|
17
|
+
SERVICE_WIRE_COMMAND_OFFSET,
|
|
18
|
+
SERVICE_WIRE_MAJOR_OFFSET,
|
|
19
|
+
SERVICE_WIRE_PREFIX_SIZE
|
|
20
|
+
} from '../foundation/service-wire-binary-primitives';
|
|
21
|
+
import {
|
|
22
|
+
SERVICE_WIRE_MAGIC,
|
|
23
|
+
SERVICE_WIRE_MAJOR
|
|
24
|
+
} from '../foundation/service-wire-constants.generated';
|
|
11
25
|
import type { ZLinkBackendMeshNode } from './contracts';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from '../application-jobs/contracts';
|
|
17
|
-
import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
|
|
26
|
+
import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
|
|
27
|
+
const DEFAULT_MESH_READY_CAPACITY = 32;
|
|
28
|
+
|
|
29
|
+
const DEFAULT_MESH_PART_CAPACITY = 256;
|
|
18
30
|
|
|
19
31
|
const MESH_DISPATCH_YIELD_RECORDS = 16;
|
|
20
32
|
const MESH_DISPATCH_YIELD_INTERVAL_MS = 2;
|
|
@@ -45,21 +57,10 @@ export interface ZLinkMeshDispatchFailureContext {
|
|
|
45
57
|
readonly commandId?: number;
|
|
46
58
|
}
|
|
47
59
|
|
|
48
|
-
class ZLinkMeshDispatchFailure extends Error {
|
|
49
|
-
constructor(
|
|
50
|
-
readonly context: ZLinkMeshDispatchFailureContext,
|
|
51
|
-
readonly dispatchCause: unknown
|
|
52
|
-
) {
|
|
53
|
-
super('Mesh record dispatch failed.', { cause: dispatchCause });
|
|
54
|
-
this.name = 'ZLinkMeshDispatchFailure';
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
60
|
export class ZLinkMeshDispatchPump {
|
|
59
61
|
private pendingDomains: number = ReadyDomain.None;
|
|
60
62
|
private infrastructureScheduled = false;
|
|
61
63
|
private disposed = false;
|
|
62
|
-
private infrastructureDrainPromise?: Promise<void>;
|
|
63
64
|
private readonly activeDrains = new Set<Promise<void>>();
|
|
64
65
|
private readonly idleApplicationWorkers = new Set<() => void>();
|
|
65
66
|
private applicationWorkerCount = 0;
|
|
@@ -152,7 +153,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
152
153
|
const readyBatch = this.node.createReadyBatch(1);
|
|
153
154
|
const receiveBatch = this.node.createReceiveBatch(
|
|
154
155
|
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
155
|
-
this.options.partCapacity ??
|
|
156
|
+
this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
|
|
156
157
|
);
|
|
157
158
|
try {
|
|
158
159
|
for (;;) {
|
|
@@ -179,12 +180,8 @@ export class ZLinkMeshDispatchPump {
|
|
|
179
180
|
return new Promise((resolve) => this.idleApplicationWorkers.add(resolve));
|
|
180
181
|
}
|
|
181
182
|
|
|
182
|
-
private reportDispatchError(error: unknown): void {
|
|
183
|
-
|
|
184
|
-
this.options.reportError?.(error.dispatchCause, error.context);
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
this.options.reportError?.(error);
|
|
183
|
+
private reportDispatchError(error: unknown, context?: ZLinkMeshDispatchFailureContext): void {
|
|
184
|
+
this.options.reportError?.(error, context);
|
|
188
185
|
}
|
|
189
186
|
|
|
190
187
|
/**
|
|
@@ -205,34 +202,23 @@ export class ZLinkMeshDispatchPump {
|
|
|
205
202
|
runZLinkExecutionArea('infrastructure', () => this.drainInfrastructure())
|
|
206
203
|
)
|
|
207
204
|
)
|
|
208
|
-
.catch((error) =>
|
|
209
|
-
if (error instanceof ZLinkMeshDispatchFailure) {
|
|
210
|
-
this.options.reportError?.(error.dispatchCause, error.context);
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
this.options.reportError?.(error);
|
|
214
|
-
});
|
|
205
|
+
.catch((error) => this.reportDispatchError(error));
|
|
215
206
|
this.activeDrains.add(drain);
|
|
216
|
-
this.infrastructureDrainPromise = drain;
|
|
217
207
|
void drain.finally(() => {
|
|
218
208
|
this.activeDrains.delete(drain);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this.
|
|
222
|
-
if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
223
|
-
this.scheduleInfrastructure();
|
|
224
|
-
}
|
|
209
|
+
this.infrastructureScheduled = false;
|
|
210
|
+
if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
211
|
+
this.scheduleInfrastructure();
|
|
225
212
|
}
|
|
226
213
|
});
|
|
227
214
|
}
|
|
228
215
|
|
|
229
216
|
private async drainInfrastructure(): Promise<void> {
|
|
230
217
|
const readyBatch = this.node.createReadyBatch(
|
|
231
|
-
Math.min(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
this.options.partCapacity ?? 256
|
|
218
|
+
Math.min(
|
|
219
|
+
this.options.readyCapacity ?? DEFAULT_MESH_READY_CAPACITY,
|
|
220
|
+
MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
|
|
221
|
+
)
|
|
236
222
|
);
|
|
237
223
|
try {
|
|
238
224
|
while (!this.disposed) {
|
|
@@ -246,7 +232,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
246
232
|
const lifecycleBudgetExhausted = await this.drainDomain(
|
|
247
233
|
ReadyDomain.Infrastructure,
|
|
248
234
|
readyBatch,
|
|
249
|
-
|
|
235
|
+
undefined,
|
|
250
236
|
MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
|
|
251
237
|
);
|
|
252
238
|
if (lifecycleBudgetExhausted) {
|
|
@@ -255,7 +241,6 @@ export class ZLinkMeshDispatchPump {
|
|
|
255
241
|
}
|
|
256
242
|
}
|
|
257
243
|
} finally {
|
|
258
|
-
receiveBatch.close();
|
|
259
244
|
readyBatch.close();
|
|
260
245
|
}
|
|
261
246
|
}
|
|
@@ -263,7 +248,7 @@ export class ZLinkMeshDispatchPump {
|
|
|
263
248
|
private async drainDomain(
|
|
264
249
|
domain: number,
|
|
265
250
|
readyBatch: ReadyBatch,
|
|
266
|
-
receiveBatch: ReceiveBatch,
|
|
251
|
+
receiveBatch: ReceiveBatch | undefined,
|
|
267
252
|
claimBudget?: number
|
|
268
253
|
): Promise<boolean> {
|
|
269
254
|
let claimsDrained = 0;
|
|
@@ -285,85 +270,91 @@ export class ZLinkMeshDispatchPump {
|
|
|
285
270
|
for (let index = 0; index < drained.records.length; index += 1) {
|
|
286
271
|
const claim = readyBatch.takeClaim(index);
|
|
287
272
|
claimsDrained += 1;
|
|
288
|
-
const owner = drained.records[index]
|
|
273
|
+
const owner = drained.records[index]!;
|
|
289
274
|
// Raw ingress already attached one host permit to each record.
|
|
290
275
|
// A claim that reserves admission here may receive only that permit's record.
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
// infrastructure may progress if one of its handlers suspends.
|
|
308
|
-
if (domain === ReadyDomain.Infrastructure) {
|
|
309
|
-
this.infrastructureScheduled = false;
|
|
310
|
-
this.infrastructureDrainPromise = undefined;
|
|
311
|
-
if ((this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
|
|
312
|
-
this.scheduleInfrastructure();
|
|
313
|
-
}
|
|
314
|
-
}
|
|
276
|
+
const drainClaim = async () => {
|
|
277
|
+
let ownerReceiveBatch = receiveBatch;
|
|
278
|
+
try {
|
|
279
|
+
ownerReceiveBatch ??= this.node.createReceiveBatch(
|
|
280
|
+
MESH_DISPATCH_RECEIVE_CAPACITY,
|
|
281
|
+
this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
|
|
282
|
+
);
|
|
283
|
+
const capacity =
|
|
284
|
+
owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
|
|
285
|
+
for (;;) {
|
|
286
|
+
let claimPermit =
|
|
287
|
+
owner.terminalCompletion === true ||
|
|
288
|
+
owner.ordinaryIngressPreAdmitted === true ||
|
|
289
|
+
domain === ReadyDomain.Infrastructure
|
|
290
|
+
? undefined
|
|
291
|
+
: await this.acquirePermit();
|
|
315
292
|
try {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
} catch (error) {
|
|
329
|
-
throw new ZLinkMeshDispatchFailure(
|
|
330
|
-
meshDispatchFailureContext(record),
|
|
331
|
-
error
|
|
293
|
+
if (this.capacityStop.signal.aborted) return;
|
|
294
|
+
ownerReceiveBatch.reset(capacity);
|
|
295
|
+
const received = claim.recvBatch(ownerReceiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
|
|
296
|
+
if (!received.ok) break;
|
|
297
|
+
// This owner keeps its claim while it drains, so its records stay in FIFO order.
|
|
298
|
+
try {
|
|
299
|
+
for (const record of received.records) {
|
|
300
|
+
if (this.disposed) break;
|
|
301
|
+
const permit = record.applicationJobPermit ?? claimPermit;
|
|
302
|
+
if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
|
|
303
|
+
throw new Error(
|
|
304
|
+
'Pre-admitted raw ingress record lost its Application Job Queue permit.'
|
|
332
305
|
);
|
|
333
306
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
307
|
+
this.recordsSinceYield += 1;
|
|
308
|
+
const dispatch = async () => {
|
|
309
|
+
try {
|
|
310
|
+
await this.options.dispatch(owner, record);
|
|
311
|
+
await record.onTerminalCompletion?.();
|
|
312
|
+
} catch (error) {
|
|
313
|
+
this.reportDispatchError(error, meshDispatchFailureContext(record));
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
if (permit === undefined) {
|
|
317
|
+
await dispatch();
|
|
318
|
+
} else {
|
|
319
|
+
if (
|
|
320
|
+
domain === ReadyDomain.Application &&
|
|
321
|
+
record.applicationJobPermit === undefined
|
|
322
|
+
)
|
|
323
|
+
permit.markApplicationQueued();
|
|
324
|
+
// The scope now owns this reservation, including failure
|
|
325
|
+
// and detached handler handoff. Only unused permits remain
|
|
326
|
+
// owned by the receive attempt's finally block.
|
|
327
|
+
if (permit === claimPermit) claimPermit = undefined;
|
|
328
|
+
await runWithApplicationJobPermit(permit, dispatch);
|
|
329
|
+
}
|
|
330
|
+
const yieldTurn = this.yieldIfNeeded();
|
|
331
|
+
if (yieldTurn !== undefined) await yieldTurn;
|
|
332
|
+
}
|
|
333
|
+
} finally {
|
|
334
|
+
// Batch ownership includes records whose dispatch never began,
|
|
335
|
+
// including on failure or shutdown in the middle of the batch.
|
|
336
|
+
for (const record of received.records) {
|
|
337
|
+
for (const part of record.parts) part.close();
|
|
338
|
+
record.releaseRetainedIngress?.();
|
|
349
339
|
}
|
|
350
|
-
const yieldTurn = this.yieldIfNeeded();
|
|
351
|
-
if (yieldTurn !== undefined) await yieldTurn;
|
|
352
340
|
}
|
|
353
341
|
} finally {
|
|
354
|
-
|
|
355
|
-
// including on failure or shutdown in the middle of the batch.
|
|
356
|
-
for (const record of received.records) {
|
|
357
|
-
for (const part of record.parts) part.close();
|
|
358
|
-
record.releaseRetainedIngress?.();
|
|
359
|
-
}
|
|
342
|
+
claimPermit?.releaseAfterInternalProcessing();
|
|
360
343
|
}
|
|
361
|
-
} finally {
|
|
362
|
-
claimPermit?.releaseAfterInternalProcessing();
|
|
363
344
|
}
|
|
345
|
+
} finally {
|
|
346
|
+
claim.release();
|
|
347
|
+
if (receiveBatch === undefined) ownerReceiveBatch?.close();
|
|
364
348
|
}
|
|
365
|
-
}
|
|
366
|
-
|
|
349
|
+
};
|
|
350
|
+
// An application worker drains the one owner it claimed. Infrastructure owners
|
|
351
|
+
// drain independently, so a suspended owner does not hold the other claims.
|
|
352
|
+
if (receiveBatch !== undefined) {
|
|
353
|
+
await drainClaim();
|
|
354
|
+
} else {
|
|
355
|
+
const drain = drainClaim().catch((error) => this.reportDispatchError(error));
|
|
356
|
+
this.activeDrains.add(drain);
|
|
357
|
+
void drain.finally(() => this.activeDrains.delete(drain));
|
|
367
358
|
}
|
|
368
359
|
}
|
|
369
360
|
if (claimBudget !== undefined && claimsDrained >= claimBudget) {
|
|
@@ -425,8 +416,11 @@ function meshDispatchFailureContext(record: ReceiveRecord): ZLinkMeshDispatchFai
|
|
|
425
416
|
function serviceWireCommand(record: ReceiveRecord): number | undefined {
|
|
426
417
|
if (record.parts.length !== 1) return undefined;
|
|
427
418
|
const bytes = record.parts[0]!.data();
|
|
428
|
-
return bytes.byteLength >=
|
|
429
|
-
|
|
419
|
+
return bytes.byteLength >= SERVICE_WIRE_PREFIX_SIZE &&
|
|
420
|
+
bytes[0] === SERVICE_WIRE_MAGIC[0] &&
|
|
421
|
+
bytes[1] === SERVICE_WIRE_MAGIC[1] &&
|
|
422
|
+
bytes[SERVICE_WIRE_MAJOR_OFFSET] === SERVICE_WIRE_MAJOR
|
|
423
|
+
? bytes[SERVICE_WIRE_COMMAND_OFFSET]
|
|
430
424
|
: undefined;
|
|
431
425
|
}
|
|
432
426
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import { constants as osConstants } from 'node:os';
|
|
2
|
+
import { waitRequestReply } from '../../messaging/request-deadline';
|
|
3
|
+
import {
|
|
4
|
+
requireClassicFanoutCompletion,
|
|
5
|
+
ZLinkSubmitStatus
|
|
6
|
+
} from '../../messaging/submission-result';
|
|
1
7
|
import { loadBinding } from '../node-backend-adapter';
|
|
2
8
|
import { SubmitResult, ZLinkBackendResultError } from '../runtime-values';
|
|
3
|
-
|
|
9
|
+
const nativeErrnoValues = osConstants.errno;
|
|
4
10
|
|
|
5
11
|
export type ZLinkBindingModule = typeof import('@zlink-systems/zlink');
|
|
6
12
|
export const zlink = loadBinding() as ZLinkBindingModule;
|
|
@@ -46,7 +52,7 @@ interface ZLinkBindingRequestSubmitOperation {
|
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
export function isBindingNotFound(error: unknown): boolean {
|
|
49
|
-
return error instanceof zlink.
|
|
55
|
+
return error instanceof zlink.ConnectError && error.result === zlink.ConnectResult.NotFound;
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
function isNonBlockingRecvEmpty(error: unknown): boolean {
|
|
@@ -64,7 +70,10 @@ export function isRouteRecvRetryable(error: unknown): boolean {
|
|
|
64
70
|
}
|
|
65
71
|
|
|
66
72
|
function isNativeBadAddress(error: { nativeErrno?: unknown; message?: unknown }): boolean {
|
|
67
|
-
return
|
|
73
|
+
return (
|
|
74
|
+
error.nativeErrno === nativeErrnoValues.EFAULT ||
|
|
75
|
+
/Bad address/i.test(String(error.message ?? ''))
|
|
76
|
+
);
|
|
68
77
|
}
|
|
69
78
|
|
|
70
79
|
export function submitBindingPublish(
|
|
@@ -87,7 +96,7 @@ export function submitBindingPublish(
|
|
|
87
96
|
(translated.result === SubmitResult.Backpressured ||
|
|
88
97
|
translated.result === SubmitResult.NotAdmitted)
|
|
89
98
|
) {
|
|
90
|
-
|
|
99
|
+
requireClassicFanoutCompletion(
|
|
91
100
|
{ status: ZLinkSubmitStatus.Backpressured },
|
|
92
101
|
'Classic fanout publish'
|
|
93
102
|
);
|
|
@@ -114,6 +123,7 @@ export async function submitBindingAsyncSend(
|
|
|
114
123
|
operation: ZLinkBindingAsyncSendOperation,
|
|
115
124
|
payload: unknown
|
|
116
125
|
): Promise<void> {
|
|
126
|
+
let submission: import('@zlink-systems/zlink').SendSubmission;
|
|
117
127
|
try {
|
|
118
128
|
let current: ZLinkBindingAsyncSendSubmitOperation | undefined;
|
|
119
129
|
const parts = Array.isArray(payload) ? payload : [payload];
|
|
@@ -122,9 +132,16 @@ export async function submitBindingAsyncSend(
|
|
|
122
132
|
current = current === undefined ? operation.message(nativePart) : current.message(nativePart);
|
|
123
133
|
}
|
|
124
134
|
current ??= operation.message(Buffer.alloc(0));
|
|
125
|
-
|
|
135
|
+
submission = current.submit();
|
|
126
136
|
} catch (error) {
|
|
127
|
-
throw translateBindingResultError(error);
|
|
137
|
+
throw translateBindingResultError(error, 'submit');
|
|
138
|
+
}
|
|
139
|
+
if (submission.result === SubmitResult.Backpressured) {
|
|
140
|
+
try {
|
|
141
|
+
await submission.admitted;
|
|
142
|
+
} catch (error) {
|
|
143
|
+
throw translateBindingResultError(error, 'completion');
|
|
144
|
+
}
|
|
128
145
|
}
|
|
129
146
|
}
|
|
130
147
|
|
|
@@ -151,6 +168,7 @@ export async function submitBindingRequest(
|
|
|
151
168
|
payload: unknown,
|
|
152
169
|
timeoutMs: number | undefined
|
|
153
170
|
): Promise<readonly unknown[]> {
|
|
171
|
+
const deadlineMs = timeoutMs === undefined ? undefined : performance.now() + timeoutMs;
|
|
154
172
|
try {
|
|
155
173
|
let current: ZLinkBindingRequestSubmitOperation | undefined;
|
|
156
174
|
if (Array.isArray(payload)) {
|
|
@@ -166,12 +184,39 @@ export async function submitBindingRequest(
|
|
|
166
184
|
if (timeoutMs !== undefined) {
|
|
167
185
|
current = current.timeout(timeoutMs);
|
|
168
186
|
}
|
|
169
|
-
return await current.submit()
|
|
187
|
+
return await bindingRequestReply(current.submit(), deadlineMs);
|
|
170
188
|
} catch (error) {
|
|
171
189
|
throw translateBindingResultError(error);
|
|
172
190
|
}
|
|
173
191
|
}
|
|
174
192
|
|
|
193
|
+
export async function bindingRequestReply(
|
|
194
|
+
submission: import('@zlink-systems/zlink').RequestSubmission,
|
|
195
|
+
deadlineMs: number | undefined
|
|
196
|
+
): Promise<import('@zlink-systems/zlink').Message[]> {
|
|
197
|
+
const reply = submission.reply;
|
|
198
|
+
if (submission.result === SubmitResult.Backpressured) {
|
|
199
|
+
try {
|
|
200
|
+
const [, replies] = await waitRequestReply(
|
|
201
|
+
Promise.all([submission.admitted, reply]),
|
|
202
|
+
'Request',
|
|
203
|
+
deadlineMs
|
|
204
|
+
);
|
|
205
|
+
return replies;
|
|
206
|
+
} catch (error) {
|
|
207
|
+
void reply.then(closeBindingReply, () => undefined);
|
|
208
|
+
throw error;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return reply;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export function closeBindingReply(
|
|
215
|
+
replies: readonly import('@zlink-systems/zlink').Message[]
|
|
216
|
+
): void {
|
|
217
|
+
for (const reply of replies) reply.close();
|
|
218
|
+
}
|
|
219
|
+
|
|
175
220
|
/**
|
|
176
221
|
* Closes a binding handle once. An already closed or terminated handle counts as
|
|
177
222
|
* closed. A busy close propagates to the caller.
|
|
@@ -189,7 +234,13 @@ function isSuccessfulOrAlreadyShutdownCloseError(error: unknown): boolean {
|
|
|
189
234
|
isContextTerminatedError(error) ||
|
|
190
235
|
(error instanceof Error &&
|
|
191
236
|
'code' in error &&
|
|
192
|
-
|
|
237
|
+
(
|
|
238
|
+
[
|
|
239
|
+
zlink.CloseResult.Ok,
|
|
240
|
+
zlink.CloseResult.Shutdown,
|
|
241
|
+
zlink.CloseResult.InvalidHandle
|
|
242
|
+
] as readonly number[]
|
|
243
|
+
).includes((error as { code: number }).code))
|
|
193
244
|
);
|
|
194
245
|
}
|
|
195
246
|
|
|
@@ -239,9 +290,15 @@ function toNativeMessageLike(message: unknown): unknown {
|
|
|
239
290
|
return message;
|
|
240
291
|
}
|
|
241
292
|
|
|
242
|
-
export function translateBindingResultError(
|
|
293
|
+
export function translateBindingResultError(
|
|
294
|
+
error: unknown,
|
|
295
|
+
phase: 'submit' | 'completion' = 'completion'
|
|
296
|
+
): unknown {
|
|
243
297
|
if (error instanceof zlink.SubmitError) {
|
|
244
|
-
return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
|
|
298
|
+
return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
|
|
299
|
+
cause: error,
|
|
300
|
+
phase
|
|
301
|
+
});
|
|
245
302
|
}
|
|
246
303
|
if (error instanceof zlink.RequestError) {
|
|
247
304
|
return new ZLinkBackendResultError('request', error.result, error.nativeErrno, {
|
|
@@ -24,10 +24,8 @@ export class ZLinkDealerChannelClientTransport implements ZLinkChannelClientTran
|
|
|
24
24
|
channelName: string,
|
|
25
25
|
packetName: string | undefined,
|
|
26
26
|
message: Message,
|
|
27
|
-
signal?: AbortSignal,
|
|
28
27
|
metadata: ReadonlyMap<string, string> = EMPTY_METADATA
|
|
29
28
|
): Promise<ZLinkSubmitResult> {
|
|
30
|
-
throwIfAborted(signal);
|
|
31
29
|
// Call-scoped flow (spec 27 §4): the envelope flow pair does not outlive
|
|
32
30
|
// this outbound call.
|
|
33
31
|
await runWithOutboundFlow(
|