@zlink-systems/framework 0.25.0 → 0.27.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/Channels/IZLinkFanoutClient.d.ts +0 -6
- 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/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 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- 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/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -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 +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- 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 +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- 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 +85 -123
- 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 +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- 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/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- 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 +7 -1
- package/dist/runtime/admission.js +11 -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 +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- 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-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -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 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- 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 +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- 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 +133 -81
- 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.js +3 -2
- 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 +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- 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/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- 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 +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- 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.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -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 +23 -8
- 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-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- 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 -19
- 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 +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- 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 +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- 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 +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- 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 +19 -14
- package/dist/runtime/host/index.js +234 -175
- 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 +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- 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 +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- 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 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- 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 +79 -27
- 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 +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- 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 +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- 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 +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- 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 +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- 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 +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- 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 +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- 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 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- 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 +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- 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 +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- 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/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -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 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- 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/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- 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 +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- 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 +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- 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 +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- 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 +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- 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 +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- 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/listener-records.ts +21 -0
- 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 +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -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 +30 -19
- 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-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- 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 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- 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 +57 -147
- 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 +266 -418
- 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 +408 -312
- 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 +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- 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 +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- 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 +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- 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 +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- 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 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- 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 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- 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 +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- 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/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- 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/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -2,6 +2,11 @@ export interface ZLinkRawReceivedRecord {
|
|
|
2
2
|
readonly sourceRid: string;
|
|
3
3
|
readonly sourceRoute: Uint8Array;
|
|
4
4
|
readonly requestSeq?: bigint;
|
|
5
|
+
/**
|
|
6
|
+
* Core selected-route generation of the ROUTER route that delivered this
|
|
7
|
+
* record (Core ROUTER §10.1); 0n for a non-ROUTER receive. Equality only.
|
|
8
|
+
*/
|
|
9
|
+
readonly routeGeneration: bigint;
|
|
5
10
|
readonly reply?: (parts: readonly Uint8Array[]) => void;
|
|
6
11
|
readonly parts: readonly Buffer[];
|
|
7
12
|
/** Releases the ordinary Framework-owned receive record exactly once. */
|
|
@@ -19,7 +24,7 @@ export interface ZLinkRawMonitorRecord {
|
|
|
19
24
|
readonly flags?: number;
|
|
20
25
|
}
|
|
21
26
|
export interface ZLinkRawSocketPort {
|
|
22
|
-
setReadableHandler(handler: () => void): void;
|
|
27
|
+
setReadableHandler(handler: (receiveReady: boolean, routeReady: boolean) => void): void;
|
|
23
28
|
bind(endpoint: string): void;
|
|
24
29
|
unbind(endpoint: string): void;
|
|
25
30
|
connect(endpoint: string): void;
|
|
@@ -33,6 +38,11 @@ export interface ZLinkRawMonitorPort {
|
|
|
33
38
|
statusReady(): boolean;
|
|
34
39
|
close(): void;
|
|
35
40
|
}
|
|
41
|
+
/** One row of the ROUTER selected-route snapshot (Core ROUTER §10.1). */
|
|
42
|
+
export interface ZLinkRawRouterRoute {
|
|
43
|
+
readonly routingId: string;
|
|
44
|
+
readonly routeGeneration: bigint;
|
|
45
|
+
}
|
|
36
46
|
export interface ZLinkRawRouterPort extends ZLinkRawSocketPort {
|
|
37
47
|
disconnectRid?(routingId: string): void;
|
|
38
48
|
localEndpoint(): string;
|
|
@@ -41,6 +51,8 @@ export interface ZLinkRawRouterPort extends ZLinkRawSocketPort {
|
|
|
41
51
|
send(targetRid: string, parts: readonly Uint8Array[]): Promise<void>;
|
|
42
52
|
request(targetRid: string, parts: readonly Uint8Array[], timeoutMs: number): Promise<readonly Buffer[]>;
|
|
43
53
|
receive(dontWait?: boolean): ZLinkRawReceivedRecord | undefined;
|
|
54
|
+
/** The selected route of every RID. The socket's one route observer calls it. */
|
|
55
|
+
routesSnapshot(): readonly ZLinkRawRouterRoute[];
|
|
44
56
|
}
|
|
45
57
|
export interface ZLinkRawDealerPort extends ZLinkRawSocketPort {
|
|
46
58
|
setRoutingId(routingId: string): void;
|
|
@@ -41,7 +41,10 @@ export declare class ZLinkBackendResultError extends Error {
|
|
|
41
41
|
readonly operation: 'request' | 'submit';
|
|
42
42
|
readonly result: number;
|
|
43
43
|
readonly nativeErrno?: number | undefined;
|
|
44
|
-
constructor(operation: 'request' | 'submit', result: number, nativeErrno?: number | undefined, options?: ErrorOptions
|
|
44
|
+
constructor(operation: 'request' | 'submit', result: number, nativeErrno?: number | undefined, options?: ErrorOptions & {
|
|
45
|
+
readonly phase?: 'submit' | 'completion';
|
|
46
|
+
});
|
|
47
|
+
readonly phase: 'submit' | 'completion';
|
|
45
48
|
}
|
|
46
49
|
export declare function isZLinkBackendResultError(error: unknown): error is ZLinkBackendResultError;
|
|
47
50
|
export declare function isBackendNotConnectedError(error: unknown): boolean;
|
|
@@ -48,7 +48,9 @@ class ZLinkBackendResultError extends Error {
|
|
|
48
48
|
this.result = result;
|
|
49
49
|
this.nativeErrno = nativeErrno;
|
|
50
50
|
this.name = 'ZLinkBackendResultError';
|
|
51
|
+
this.phase = options?.phase ?? 'completion';
|
|
51
52
|
}
|
|
53
|
+
phase;
|
|
52
54
|
}
|
|
53
55
|
exports.ZLinkBackendResultError = ZLinkBackendResultError;
|
|
54
56
|
function isZLinkBackendResultError(error) {
|
|
@@ -2,15 +2,24 @@ import type { ZLinkChannelClient, ZLinkChannelRequestCall, ZLinkFanoutClient, ZL
|
|
|
2
2
|
import type { SpotHandle } from '../spots/spot-handle';
|
|
3
3
|
import { type ZLinkFrameworkRegistration } from '../configuration';
|
|
4
4
|
import type { ZLinkChannelClientTransportSource, ZLinkRouteClientTransport, ZLinkSpotPublisherClientTransport } from './channel-transports';
|
|
5
|
+
type RouteMeshChannelMatch = {
|
|
6
|
+
readonly meshName: string;
|
|
7
|
+
readonly mesh: NonNullable<ReturnType<ZLinkFrameworkRegistration['spotNodes']['get']>>;
|
|
8
|
+
};
|
|
9
|
+
type ChannelRouteResolution = {
|
|
10
|
+
readonly kind: 'client-server';
|
|
11
|
+
readonly channel: NonNullable<ReturnType<ZLinkFrameworkRegistration['channels']['get']>>;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'route-mesh';
|
|
14
|
+
readonly matches: readonly RouteMeshChannelMatch[];
|
|
15
|
+
};
|
|
16
|
+
export declare function resolveChannelRoute(registration: ZLinkFrameworkRegistration, channelName: string): ChannelRouteResolution | undefined;
|
|
17
|
+
export declare function requireUniqueRouteMeshChannel(matches: readonly RouteMeshChannelMatch[], duplicateMessage: string): RouteMeshChannelMatch;
|
|
5
18
|
export declare class DefaultZLinkChannelClient implements ZLinkChannelClient {
|
|
6
|
-
private readonly
|
|
7
|
-
|
|
8
|
-
constructor(registration: ZLinkFrameworkRegistration, transport?: ZLinkChannelClientTransportSource | undefined);
|
|
19
|
+
private readonly routeClient;
|
|
20
|
+
constructor(registration: ZLinkFrameworkRegistration, channelTransport?: ZLinkChannelClientTransportSource, routeTransport?: ZLinkRouteClientTransport, spotRouterChannelIdForMesh?: (meshName: string) => string);
|
|
9
21
|
sendToChannel(channelName: string, message: unknown): ZLinkSendCall;
|
|
10
22
|
requestToChannel(channelName: string, request: unknown): ZLinkChannelRequestCall;
|
|
11
|
-
private defaultRequestTimeout;
|
|
12
|
-
private requireChannel;
|
|
13
|
-
private requireTransport;
|
|
14
23
|
}
|
|
15
24
|
export declare class DefaultZLinkFanoutClient implements ZLinkFanoutClient {
|
|
16
25
|
private readonly registration;
|
|
@@ -18,7 +27,6 @@ export declare class DefaultZLinkFanoutClient implements ZLinkFanoutClient {
|
|
|
18
27
|
constructor(registration: ZLinkFrameworkRegistration, transport?: ZLinkChannelClientTransportSource | undefined);
|
|
19
28
|
publish(channelName: string, event: unknown): ZLinkFanoutPublishCall;
|
|
20
29
|
publish(channelName: string, topic: string, event: unknown): ZLinkFanoutPublishCall;
|
|
21
|
-
getListenerStatus(channelName: string): import('../../contracts').ZLinkFanoutListenerStatus;
|
|
22
30
|
private requirePublisherChannel;
|
|
23
31
|
private requireTransport;
|
|
24
32
|
}
|
|
@@ -26,7 +34,8 @@ export declare class DefaultZLinkRouteClient implements ZLinkRouteClient {
|
|
|
26
34
|
private readonly registration;
|
|
27
35
|
private readonly transport?;
|
|
28
36
|
private readonly spotRouterChannelIdForMesh;
|
|
29
|
-
|
|
37
|
+
private readonly channelTransport?;
|
|
38
|
+
constructor(registration: ZLinkFrameworkRegistration, transport?: ZLinkRouteClientTransport | undefined, spotRouterChannelIdForMesh?: (meshName: string) => string, channelTransport?: ZLinkChannelClientTransportSource | undefined);
|
|
30
39
|
sendToNode(meshName: string, targetNodeRid: string, message: unknown): ZLinkSendCall;
|
|
31
40
|
requestToNode(meshName: string, targetNodeRid: string, request: unknown): ZLinkRequestCall;
|
|
32
41
|
sendToChannel(channelName: string, message: unknown): ZLinkSendCall;
|
|
@@ -35,9 +44,10 @@ export declare class DefaultZLinkRouteClient implements ZLinkRouteClient {
|
|
|
35
44
|
requestToSpot(spot: SpotHandle, request: unknown): ZLinkRequestCall;
|
|
36
45
|
private defaultRequestTimeout;
|
|
37
46
|
private requireMesh;
|
|
38
|
-
private
|
|
47
|
+
private requireChannelRoute;
|
|
39
48
|
private defaultRequestTimeoutForChannel;
|
|
40
49
|
private requireTransport;
|
|
50
|
+
private requireChannelTransport;
|
|
41
51
|
private requireSpotTransport;
|
|
42
52
|
}
|
|
43
53
|
export declare class DefaultZLinkSpotPublisherClient implements ZLinkSpotPublisherClient {
|
|
@@ -48,3 +58,4 @@ export declare class DefaultZLinkSpotPublisherClient implements ZLinkSpotPublish
|
|
|
48
58
|
private requireMeshChannel;
|
|
49
59
|
private requireTransport;
|
|
50
60
|
}
|
|
61
|
+
export {};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultZLinkSpotPublisherClient = exports.DefaultZLinkRouteClient = exports.DefaultZLinkFanoutClient = exports.DefaultZLinkChannelClient = void 0;
|
|
4
|
+
exports.resolveChannelRoute = resolveChannelRoute;
|
|
5
|
+
exports.requireUniqueRouteMeshChannel = requireUniqueRouteMeshChannel;
|
|
6
|
+
const Registration_1 = require("../../contracts/Configuration/Registration");
|
|
4
7
|
const configuration_1 = require("../configuration");
|
|
5
8
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
6
9
|
const submission_result_1 = require("../messaging/submission-result");
|
|
@@ -9,39 +12,32 @@ const execution_1 = require("../execution");
|
|
|
9
12
|
const fanout_service_wire_1 = require("./fanout-service-wire");
|
|
10
13
|
const spot_outbound_1 = require("../spots/spot-outbound");
|
|
11
14
|
const packet_name_1 = require("../messaging/packet-name");
|
|
15
|
+
function resolveChannelRoute(registration, channelName) {
|
|
16
|
+
const clientServerChannel = registration.channels.get(channelName);
|
|
17
|
+
if (clientServerChannel !== undefined) {
|
|
18
|
+
return { kind: 'client-server', channel: clientServerChannel };
|
|
19
|
+
}
|
|
20
|
+
const matches = [...registration.spotNodes.entries()]
|
|
21
|
+
.filter(([, mesh]) => Object.prototype.hasOwnProperty.call(mesh.meshChannels ?? {}, channelName))
|
|
22
|
+
.map(([meshName, mesh]) => ({ meshName, mesh }));
|
|
23
|
+
return matches.length === 0 ? undefined : { kind: 'route-mesh', matches };
|
|
24
|
+
}
|
|
25
|
+
function requireUniqueRouteMeshChannel(matches, duplicateMessage) {
|
|
26
|
+
if (matches.length !== 1) {
|
|
27
|
+
throw new configuration_1.ZLinkConfigurationException(duplicateMessage);
|
|
28
|
+
}
|
|
29
|
+
return matches[0];
|
|
30
|
+
}
|
|
12
31
|
class DefaultZLinkChannelClient {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.registration = registration;
|
|
17
|
-
this.transport = transport;
|
|
32
|
+
routeClient;
|
|
33
|
+
constructor(registration, channelTransport, routeTransport, spotRouterChannelIdForMesh = (meshName) => meshName) {
|
|
34
|
+
this.routeClient = new DefaultZLinkRouteClient(registration, routeTransport, spotRouterChannelIdForMesh, channelTransport);
|
|
18
35
|
}
|
|
19
36
|
sendToChannel(channelName, message) {
|
|
20
|
-
return
|
|
37
|
+
return this.routeClient.sendToChannel(channelName, message);
|
|
21
38
|
}
|
|
22
39
|
requestToChannel(channelName, request) {
|
|
23
|
-
return
|
|
24
|
-
}
|
|
25
|
-
defaultRequestTimeout(channelName) {
|
|
26
|
-
return (this.registration.channels.get(channelName)?.requestTimeoutMs ??
|
|
27
|
-
this.registration.requestTimeoutMs ??
|
|
28
|
-
30_000);
|
|
29
|
-
}
|
|
30
|
-
requireChannel(channelName) {
|
|
31
|
-
const channel = this.registration.channels.get(channelName);
|
|
32
|
-
if (channel === undefined) {
|
|
33
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `Channel client '${channelName}' is not registered.`);
|
|
34
|
-
}
|
|
35
|
-
if (channel.client === undefined) {
|
|
36
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidConfiguration, `Channel client role '${channelName}' is not configured.`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
requireTransport() {
|
|
40
|
-
const transport = typeof this.transport === 'function' ? this.transport() : this.transport;
|
|
41
|
-
if (transport === undefined) {
|
|
42
|
-
throw new configuration_1.ZLinkConfigurationException('Channel runtime is not started.');
|
|
43
|
-
}
|
|
44
|
-
return transport;
|
|
40
|
+
return this.routeClient.requestToChannel(channelName, request);
|
|
45
41
|
}
|
|
46
42
|
}
|
|
47
43
|
exports.DefaultZLinkChannelClient = DefaultZLinkChannelClient;
|
|
@@ -64,14 +60,6 @@ class DefaultZLinkFanoutClient {
|
|
|
64
60
|
status: (await this.requireTransport().publish(channelName, topic, packetName, event, signal)).status
|
|
65
61
|
}));
|
|
66
62
|
}
|
|
67
|
-
getListenerStatus(channelName) {
|
|
68
|
-
this.requirePublisherChannel(channelName);
|
|
69
|
-
const status = this.requireTransport().getFanoutListenerStatus?.(channelName);
|
|
70
|
-
if (status === undefined) {
|
|
71
|
-
throw new configuration_1.ZLinkConfigurationException(`Fanout publisher '${channelName}' has not reported a bound listener.`);
|
|
72
|
-
}
|
|
73
|
-
return status;
|
|
74
|
-
}
|
|
75
63
|
requirePublisherChannel(channelName) {
|
|
76
64
|
if (!this.registration.fanoutPublishers.has(channelName)) {
|
|
77
65
|
throw new configuration_1.ZLinkConfigurationException(`Channel '${channelName}' does not have a publisher capability.`);
|
|
@@ -90,10 +78,12 @@ class DefaultZLinkRouteClient {
|
|
|
90
78
|
registration;
|
|
91
79
|
transport;
|
|
92
80
|
spotRouterChannelIdForMesh;
|
|
93
|
-
|
|
81
|
+
channelTransport;
|
|
82
|
+
constructor(registration, transport, spotRouterChannelIdForMesh = (meshName) => meshName, channelTransport) {
|
|
94
83
|
this.registration = registration;
|
|
95
84
|
this.transport = transport;
|
|
96
85
|
this.spotRouterChannelIdForMesh = spotRouterChannelIdForMesh;
|
|
86
|
+
this.channelTransport = channelTransport;
|
|
97
87
|
}
|
|
98
88
|
sendToNode(meshName, targetNodeRid, message) {
|
|
99
89
|
return new DefaultZLinkSendCall(() => this.requireMesh(meshName), async (packetName, metadata, signal) => normalizeSubmitResult(await this.requireTransport().submit(meshName, targetNodeRid, packetName, message, signal, metadata)));
|
|
@@ -102,19 +92,21 @@ class DefaultZLinkRouteClient {
|
|
|
102
92
|
return new DefaultZLinkRequestCall(() => this.requireMesh(meshName), (packetName, timeoutMs, metadata, signal) => this.requireTransport().request(meshName, targetNodeRid, packetName, request, timeoutMs, signal, metadata), this.defaultRequestTimeout(meshName));
|
|
103
93
|
}
|
|
104
94
|
sendToChannel(channelName, message) {
|
|
105
|
-
return new DefaultZLinkSendCall(() => {
|
|
106
|
-
this.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
95
|
+
return new DefaultZLinkSendCall(() => this.requireChannelRoute(channelName), async (packetName, metadata, signal) => {
|
|
96
|
+
const route = this.requireChannelRoute(channelName);
|
|
97
|
+
if (route.kind === 'route-mesh') {
|
|
98
|
+
return normalizeSubmitResult(await this.requireTransport().submitToChannel(route.meshName, channelName, packetName, message, signal, metadata));
|
|
99
|
+
}
|
|
100
|
+
return normalizeSubmitResult(await this.requireChannelTransport().send(channelName, packetName, message, signal, metadata));
|
|
110
101
|
});
|
|
111
102
|
}
|
|
112
103
|
requestToChannel(channelName, request) {
|
|
113
|
-
return new DefaultZLinkRequestCall(() => {
|
|
114
|
-
this.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
104
|
+
return new DefaultZLinkRequestCall(() => this.requireChannelRoute(channelName), (packetName, timeoutMs, metadata, signal) => {
|
|
105
|
+
const route = this.requireChannelRoute(channelName);
|
|
106
|
+
if (route.kind === 'route-mesh') {
|
|
107
|
+
return this.requireTransport().requestToChannel(route.meshName, channelName, packetName, request, timeoutMs, signal, metadata);
|
|
108
|
+
}
|
|
109
|
+
return this.requireChannelTransport().request(channelName, packetName, request, timeoutMs, signal, metadata);
|
|
118
110
|
}, this.defaultRequestTimeoutForChannel(channelName));
|
|
119
111
|
}
|
|
120
112
|
sendToSpot(spot, message) {
|
|
@@ -137,13 +129,13 @@ class DefaultZLinkRouteClient {
|
|
|
137
129
|
signal,
|
|
138
130
|
metadata,
|
|
139
131
|
spotRouterChannelIdForMesh: this.spotRouterChannelIdForMesh
|
|
140
|
-
}), this.registration.requestTimeoutMs ??
|
|
132
|
+
}), this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS);
|
|
141
133
|
}
|
|
142
134
|
defaultRequestTimeout(meshName) {
|
|
143
135
|
return (this.registration.spotNodes.get(meshName)?.requestTimeoutMs ??
|
|
144
136
|
this.registration.routeChannelOptions.get(meshName)?.requestTimeoutMs ??
|
|
145
137
|
this.registration.requestTimeoutMs ??
|
|
146
|
-
|
|
138
|
+
Registration_1.DEFAULT_REQUEST_TIMEOUT_MS);
|
|
147
139
|
}
|
|
148
140
|
requireMesh(meshName) {
|
|
149
141
|
if (!this.registration.spotNodes.has(meshName) &&
|
|
@@ -151,21 +143,30 @@ class DefaultZLinkRouteClient {
|
|
|
151
143
|
throw new configuration_1.ZLinkConfigurationException(`RouteMesh '${meshName}' is not registered.`);
|
|
152
144
|
}
|
|
153
145
|
}
|
|
154
|
-
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
.
|
|
158
|
-
if (matches.length === 0) {
|
|
159
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `RouteMesh channel '${channelName}' is not registered.`);
|
|
146
|
+
requireChannelRoute(channelName) {
|
|
147
|
+
const resolution = resolveChannelRoute(this.registration, channelName);
|
|
148
|
+
if (resolution === undefined) {
|
|
149
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `ChannelName '${channelName}' is not registered.`);
|
|
160
150
|
}
|
|
161
|
-
if (
|
|
162
|
-
|
|
151
|
+
if (resolution.kind === 'client-server') {
|
|
152
|
+
if (resolution.channel.client === undefined) {
|
|
153
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidConfiguration, `Channel client role '${channelName}' is not configured.`);
|
|
154
|
+
}
|
|
155
|
+
return resolution;
|
|
163
156
|
}
|
|
164
|
-
return
|
|
157
|
+
return {
|
|
158
|
+
kind: 'route-mesh',
|
|
159
|
+
...requireUniqueRouteMeshChannel(resolution.matches, `RouteMesh channel '${channelName}' must be unique across the Framework host.`)
|
|
160
|
+
};
|
|
165
161
|
}
|
|
166
162
|
defaultRequestTimeoutForChannel(channelName) {
|
|
167
|
-
const
|
|
168
|
-
|
|
163
|
+
const route = resolveChannelRoute(this.registration, channelName);
|
|
164
|
+
const timeoutMs = route?.kind === 'client-server'
|
|
165
|
+
? route.channel.requestTimeoutMs
|
|
166
|
+
: route?.kind === 'route-mesh'
|
|
167
|
+
? route.matches[0]?.mesh.requestTimeoutMs
|
|
168
|
+
: undefined;
|
|
169
|
+
return timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
169
170
|
}
|
|
170
171
|
requireTransport() {
|
|
171
172
|
if (this.transport === undefined) {
|
|
@@ -173,6 +174,13 @@ class DefaultZLinkRouteClient {
|
|
|
173
174
|
}
|
|
174
175
|
return this.transport;
|
|
175
176
|
}
|
|
177
|
+
requireChannelTransport() {
|
|
178
|
+
const transport = typeof this.channelTransport === 'function' ? this.channelTransport() : this.channelTransport;
|
|
179
|
+
if (transport === undefined) {
|
|
180
|
+
throw new configuration_1.ZLinkConfigurationException('Channel runtime is not started.');
|
|
181
|
+
}
|
|
182
|
+
return transport;
|
|
183
|
+
}
|
|
176
184
|
requireSpotTransport() {
|
|
177
185
|
const transport = this.requireTransport();
|
|
178
186
|
if (transport.sendToSpot === undefined || transport.requestToSpot === undefined) {
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.tryDecodeChannelHeader = tryDecodeChannelHeader;
|
|
4
4
|
exports.inspectMalformedChannelHeader = inspectMalformedChannelHeader;
|
|
5
5
|
exports.malformedProtocolErrorRequestHeader = malformedProtocolErrorRequestHeader;
|
|
6
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
6
7
|
const channel_envelope_1 = require("./channel-envelope");
|
|
7
8
|
function tryDecodeChannelHeader(parts, flowEnabled = true) {
|
|
8
9
|
if (parts.length < 2 || parts[0].data().length === 0) {
|
|
@@ -55,7 +56,7 @@ function malformedProtocolErrorRequestHeader(channelName, info) {
|
|
|
55
56
|
kind: 1 /* ZLinkChannelMessageKind.Request */,
|
|
56
57
|
channelName,
|
|
57
58
|
messageName: info.messageName ?? '',
|
|
58
|
-
contentType:
|
|
59
|
+
contentType: stream_wire_1.ZlinkStreamContentType.Json,
|
|
59
60
|
correlationId: info.correlationId ?? null,
|
|
60
61
|
deadline: null,
|
|
61
62
|
topic: null,
|
|
@@ -14,6 +14,7 @@ exports.decodeChannelPayload = decodeChannelPayload;
|
|
|
14
14
|
exports.closeMessages = closeMessages;
|
|
15
15
|
exports.decodeChannelHeader = decodeChannelHeader;
|
|
16
16
|
const node_crypto_1 = require("node:crypto");
|
|
17
|
+
const node_buffer_1 = require("node:buffer");
|
|
17
18
|
const contracts_1 = require("../../contracts");
|
|
18
19
|
const encoded_payload_storage_1 = require("../../contracts/Common/encoded-payload-storage");
|
|
19
20
|
const ZLinkMessage_1 = require("../../contracts/Common/ZLinkMessage");
|
|
@@ -24,6 +25,7 @@ const payload_codec_1 = require("../messaging/payload-codec");
|
|
|
24
25
|
const CodecContentType_1 = require("../../contracts/Configuration/CodecContentType");
|
|
25
26
|
const framework_json_v1_1 = require("../messaging/framework-json-v1");
|
|
26
27
|
const flow_context_1 = require("../diagnostics/flow-context");
|
|
28
|
+
const service_wire_constants_generated_1 = require("../foundation/service-wire-constants.generated");
|
|
27
29
|
const channel_framework_packets_1 = require("./channel-framework-packets");
|
|
28
30
|
const Attributes_1 = require("../../contracts/Handlers/Attributes");
|
|
29
31
|
exports.ZLINK_CHANNEL_FORMAT_MARKER = 0xf2;
|
|
@@ -314,7 +316,20 @@ function writeChannelHeader(writer, kind, channelName, messageName, contentType,
|
|
|
314
316
|
writer.append(',"source":');
|
|
315
317
|
writer.nullableString(source);
|
|
316
318
|
}
|
|
317
|
-
writer.append(',"metadata":
|
|
319
|
+
writer.append(',"metadata":');
|
|
320
|
+
writeApplicationMetadata(writer, metadata);
|
|
321
|
+
if (flowId !== undefined) {
|
|
322
|
+
writer.append(',"flowId":');
|
|
323
|
+
writer.string(flowId);
|
|
324
|
+
}
|
|
325
|
+
if (flowOrigin !== undefined) {
|
|
326
|
+
writer.append(',"flowOrigin":');
|
|
327
|
+
writer.append(String(encodeFlowOrigin(flowOrigin)));
|
|
328
|
+
}
|
|
329
|
+
writer.append('}');
|
|
330
|
+
}
|
|
331
|
+
function writeApplicationMetadata(writer, metadata) {
|
|
332
|
+
writer.append('{');
|
|
318
333
|
let first = true;
|
|
319
334
|
for (const name in metadata) {
|
|
320
335
|
if (!Object.prototype.hasOwnProperty.call(metadata, name))
|
|
@@ -327,15 +342,6 @@ function writeChannelHeader(writer, kind, channelName, messageName, contentType,
|
|
|
327
342
|
writer.string(metadata[name]);
|
|
328
343
|
}
|
|
329
344
|
writer.append('}');
|
|
330
|
-
if (flowId !== undefined) {
|
|
331
|
-
writer.append(',"flowId":');
|
|
332
|
-
writer.string(flowId);
|
|
333
|
-
}
|
|
334
|
-
if (flowOrigin !== undefined) {
|
|
335
|
-
writer.append(',"flowOrigin":');
|
|
336
|
-
writer.append(String(encodeFlowOrigin(flowOrigin)));
|
|
337
|
-
}
|
|
338
|
-
writer.append('}');
|
|
339
345
|
}
|
|
340
346
|
class ChannelHeaderWriter {
|
|
341
347
|
output;
|
|
@@ -438,13 +444,16 @@ function parseWireJson(payload, schema) {
|
|
|
438
444
|
}, schema);
|
|
439
445
|
}
|
|
440
446
|
function parseChannelHeaderBytes(payload) {
|
|
441
|
-
|
|
447
|
+
if (!(0, node_buffer_1.isUtf8)(payload)) {
|
|
448
|
+
throw new contracts_1.ZLinkFrameworkException(contracts_1.ZLinkFrameworkErrorKind.ProtocolError, 'Channel envelope header must contain valid UTF-8.');
|
|
449
|
+
}
|
|
450
|
+
return tryParseCanonicalChannelHeader(payload) ?? (0, framework_json_v1_1.parseFrameworkJsonV1)(payload.toString());
|
|
442
451
|
}
|
|
443
452
|
/**
|
|
444
453
|
* Accept the byte layout emitted by writeChannelHeader without materializing
|
|
445
454
|
* the enclosing JSON text. Any variation falls through to the established
|
|
446
455
|
* framework-json-v1 parser, which remains the sole authority for JSON
|
|
447
|
-
* failures
|
|
456
|
+
* failures and unknown properties. Header metadata accepts every valid string key.
|
|
448
457
|
*/
|
|
449
458
|
function tryParseCanonicalChannelHeader(payload) {
|
|
450
459
|
const reader = new CanonicalChannelHeaderReader(payload);
|
|
@@ -700,34 +709,43 @@ function channelKindName(kind) {
|
|
|
700
709
|
}
|
|
701
710
|
const EMPTY_APPLICATION_METADATA = Object.freeze({});
|
|
702
711
|
function applicationMetadataRecord(metadata) {
|
|
703
|
-
// The common case carries no metadata; skip the record + JSON.stringify
|
|
704
|
-
// byte-limit walk entirely.
|
|
705
712
|
if (metadata.size === 0)
|
|
706
713
|
return EMPTY_APPLICATION_METADATA;
|
|
707
|
-
const record =
|
|
708
|
-
for (const [key, value] of metadata)
|
|
709
|
-
if (key.length === 0 || key.includes('\0') || value.includes('\0')) {
|
|
710
|
-
throw new configuration_1.ZLinkConfigurationException('Channel application metadata keys must be non-empty and keys and values must not contain NUL.');
|
|
711
|
-
}
|
|
714
|
+
const record = Object.create(null);
|
|
715
|
+
for (const [key, value] of metadata)
|
|
712
716
|
record[key] = value;
|
|
717
|
+
return validateApplicationMetadata(record);
|
|
718
|
+
}
|
|
719
|
+
const INVALID_METADATA_UNICODE = /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u;
|
|
720
|
+
function validateApplicationMetadata(metadata) {
|
|
721
|
+
const keys = Object.keys(metadata);
|
|
722
|
+
if (keys.length === 0)
|
|
723
|
+
return EMPTY_APPLICATION_METADATA;
|
|
724
|
+
for (const key of keys) {
|
|
725
|
+
const value = requireString(metadata[key], `metadata.${key}`);
|
|
726
|
+
if (key.length === 0 ||
|
|
727
|
+
key.includes('\0') ||
|
|
728
|
+
value.includes('\0') ||
|
|
729
|
+
INVALID_METADATA_UNICODE.test(key) ||
|
|
730
|
+
INVALID_METADATA_UNICODE.test(value)) {
|
|
731
|
+
throw new configuration_1.ZLinkConfigurationException('Channel application metadata keys must be non-empty and keys and values must be valid Unicode without NUL.');
|
|
732
|
+
}
|
|
713
733
|
}
|
|
714
|
-
|
|
715
|
-
|
|
734
|
+
const record = metadata;
|
|
735
|
+
const writer = new ChannelHeaderWriter();
|
|
736
|
+
writeApplicationMetadata(writer, record);
|
|
737
|
+
if (writer.byteLength > service_wire_constants_generated_1.SERVICE_WIRE_METADATA_BYTES) {
|
|
738
|
+
throw new configuration_1.ZLinkConfigurationException(`Channel application metadata exceeds the ${service_wire_constants_generated_1.SERVICE_WIRE_METADATA_BYTES}-byte limit.`);
|
|
716
739
|
}
|
|
717
740
|
return Object.freeze(record);
|
|
718
741
|
}
|
|
719
742
|
function requireApplicationMetadata(value) {
|
|
720
|
-
if (value === undefined)
|
|
721
|
-
return
|
|
722
|
-
}
|
|
743
|
+
if (value === undefined)
|
|
744
|
+
return EMPTY_APPLICATION_METADATA;
|
|
723
745
|
if (!isRecord(value)) {
|
|
724
746
|
throw new configuration_1.ZLinkConfigurationException('Channel application metadata must be a JSON object.');
|
|
725
747
|
}
|
|
726
|
-
|
|
727
|
-
for (const [key, selectedValue] of Object.entries(value)) {
|
|
728
|
-
metadata.set(key, requireString(selectedValue, `metadata.${key}`));
|
|
729
|
-
}
|
|
730
|
-
return applicationMetadataRecord(metadata);
|
|
748
|
+
return validateApplicationMetadata(value);
|
|
731
749
|
}
|
|
732
750
|
function optionalFlowId(value) {
|
|
733
751
|
return value === undefined || value === null ? undefined : requireFlowId(value);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
2
|
+
import { type ZLinkRuntimeMessageFlowResult } from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
2
3
|
import { type ZLinkChannelEnvelopeCodecRegistry } from './channel-envelope';
|
|
3
4
|
import { ZLinkChannelDispatchServices } from './channel-dispatch-services';
|
|
4
5
|
import { ZLinkChannelSocketRegistry } from './channel-socket-registry';
|
|
@@ -31,3 +32,5 @@ export declare class ZLinkChannelOutboundOperations {
|
|
|
31
32
|
* ref'ed handle until reply, cancellation, timeout, or failure settles it.
|
|
32
33
|
*/
|
|
33
34
|
export declare function keepChannelRequestAlive<T>(request: Promise<T>): Promise<T>;
|
|
35
|
+
export declare function requestTerminalResult(error: unknown, signal: AbortSignal | undefined): ZLinkRuntimeMessageFlowResult;
|
|
36
|
+
export declare function isRemoteChannelErrorReply(error: unknown): boolean;
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkChannelOutboundOperations = void 0;
|
|
4
4
|
exports.keepChannelRequestAlive = keepChannelRequestAlive;
|
|
5
|
+
exports.requestTerminalResult = requestTerminalResult;
|
|
6
|
+
exports.isRemoteChannelErrorReply = isRemoteChannelErrorReply;
|
|
5
7
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
6
8
|
const runtime_values_1 = require("../backend/runtime-values");
|
|
7
9
|
const submission_result_1 = require("../messaging/submission-result");
|
|
@@ -39,11 +41,7 @@ class ZLinkChannelOutboundOperations {
|
|
|
39
41
|
(0, abort_1.throwIfAborted)(signal);
|
|
40
42
|
const dealer = await this.sockets.awaitClientDealerForOutbound(channelName, signal);
|
|
41
43
|
if (dealer === undefined) {
|
|
42
|
-
return {
|
|
43
|
-
status: this.sockets.hasKnownClientServerTargets(channelName)
|
|
44
|
-
? submission_result_1.ZLinkSubmitStatus.RouteNotConnected
|
|
45
|
-
: submission_result_1.ZLinkSubmitStatus.TargetNotFound
|
|
46
|
-
};
|
|
44
|
+
return { status: submission_result_1.ZLinkSubmitStatus.TimedOut };
|
|
47
45
|
}
|
|
48
46
|
const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(3 /* ZLinkChannelMessageKind.Command */, channelName, packetName, message, undefined, undefined, this.codecs, undefined, this.dispatchServices.flowCreationEnabled(), metadata);
|
|
49
47
|
try {
|
|
@@ -83,7 +81,6 @@ class ZLinkChannelOutboundOperations {
|
|
|
83
81
|
return keepChannelRequestAlive((0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.requestScoped(channelName, packetName, request, timeoutMs, signal, metadata)));
|
|
84
82
|
}
|
|
85
83
|
async requestScoped(channelName, packetName, request, timeoutMs, signal, metadata) {
|
|
86
|
-
const deadlineAtMs = timeoutMs === undefined ? undefined : performance.now() + timeoutMs;
|
|
87
84
|
let correlationId;
|
|
88
85
|
let selectedServerRid;
|
|
89
86
|
let terminalRecorded = false;
|
|
@@ -104,20 +101,14 @@ class ZLinkChannelOutboundOperations {
|
|
|
104
101
|
};
|
|
105
102
|
try {
|
|
106
103
|
(0, abort_1.throwIfAborted)(signal);
|
|
107
|
-
const dealer = await this.sockets.awaitClientDealerForOutbound(channelName, signal
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (dealer === undefined || (remainingMs !== undefined && remainingMs <= 0)) {
|
|
111
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(this.sockets.hasKnownClientServerTargets(channelName)
|
|
112
|
-
? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected
|
|
113
|
-
: framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, this.sockets.hasKnownClientServerTargets(channelName)
|
|
114
|
-
? `Channel '${channelName}' has known ClientServer targets but no ready server.`
|
|
115
|
-
: `Channel '${channelName}' has no ready ClientServer server.`);
|
|
104
|
+
const dealer = await this.sockets.awaitClientDealerForOutbound(channelName, signal);
|
|
105
|
+
if (dealer === undefined) {
|
|
106
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Channel '${channelName}' has no ready ClientServer server before its admission deadline.`);
|
|
116
107
|
}
|
|
117
108
|
const serverRid = this.sockets.selectedClientServerRid(channelName, dealer);
|
|
118
109
|
selectedServerRid = serverRid;
|
|
119
110
|
correlationId = (0, channel_envelope_1.newChannelCorrelationId)();
|
|
120
|
-
const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, channelName, packetName, request,
|
|
111
|
+
const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, channelName, packetName, request, timeoutMs, undefined, this.codecs, correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
|
|
121
112
|
this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent)?.trace({
|
|
122
113
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel,
|
|
123
114
|
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
|
|
@@ -131,7 +122,7 @@ class ZLinkChannelOutboundOperations {
|
|
|
131
122
|
let replyParts = [];
|
|
132
123
|
try {
|
|
133
124
|
try {
|
|
134
|
-
replyParts = await (0, abort_1.awaitWithAbort)(dealer.request(parts,
|
|
125
|
+
replyParts = await (0, abort_1.awaitWithAbort)(dealer.request(parts, timeoutMs), signal);
|
|
135
126
|
}
|
|
136
127
|
catch (error) {
|
|
137
128
|
if (signal?.aborted === true)
|
|
@@ -142,7 +133,7 @@ class ZLinkChannelOutboundOperations {
|
|
|
142
133
|
if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'request') {
|
|
143
134
|
throw new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `Channel '${channelName}' request failed with result ${error.result}.`, error);
|
|
144
135
|
}
|
|
145
|
-
throw
|
|
136
|
+
throw error;
|
|
146
137
|
}
|
|
147
138
|
return (0, channel_envelope_1.decodeChannelReply)(replyParts, this.codecs);
|
|
148
139
|
}
|
|
@@ -5,6 +5,8 @@ import type { ZLinkMultipartAsyncSubmitOperation } from './channel-multipart';
|
|
|
5
5
|
import type { ZLinkChannelEnvelopeHeader } from './channel-envelope';
|
|
6
6
|
import { type ZLinkReceiveTaskErrorReporter } from './channel-receive-task-tracker';
|
|
7
7
|
import { ApplicationJobQueue } from '../host/application-job-queue';
|
|
8
|
+
import { ZLinkSerialExecutionQueue } from '../execution/serial-execution-queue';
|
|
9
|
+
export declare function createChannelApplicationDispatchQueue(): ZLinkSerialExecutionQueue;
|
|
8
10
|
interface ZLinkMultipartOperation<TNext> {
|
|
9
11
|
message(message: MessageLike): TNext;
|
|
10
12
|
}
|
|
@@ -84,6 +86,7 @@ export declare class ZLinkChannelReceiveLoop {
|
|
|
84
86
|
private readonly poller;
|
|
85
87
|
private readonly applicationJobQueue;
|
|
86
88
|
private readonly roundRobin?;
|
|
89
|
+
private readonly applicationDispatchQueue;
|
|
87
90
|
private stoppedFlag;
|
|
88
91
|
private isStopped;
|
|
89
92
|
private running?;
|
|
@@ -93,7 +96,7 @@ export declare class ZLinkChannelReceiveLoop {
|
|
|
93
96
|
private readonly capacityStop;
|
|
94
97
|
constructor(channelName: string, router: ZLinkBackendRouterSocket & {
|
|
95
98
|
reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
|
|
96
|
-
}, dispatcher: ZLinkChannelRequestDispatchLoop, spotRouteBridge: ZLinkBackendSpotRouteBridge | undefined, infrastructureHandler: ZLinkChannelInfrastructureHandler | undefined, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, reportError?: ZLinkReceiveTaskErrorReporter, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined);
|
|
99
|
+
}, dispatcher: ZLinkChannelRequestDispatchLoop, spotRouteBridge: ZLinkBackendSpotRouteBridge | undefined, infrastructureHandler: ZLinkChannelInfrastructureHandler | undefined, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, reportError?: ZLinkReceiveTaskErrorReporter, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
|
|
97
100
|
run(signal?: AbortSignal): Promise<void>;
|
|
98
101
|
private runLoop;
|
|
99
102
|
stop(): Promise<void>;
|
|
@@ -108,6 +111,7 @@ export declare class ZLinkSubscriberReceiveLoop {
|
|
|
108
111
|
private readonly applicationJobQueue;
|
|
109
112
|
private readonly infrastructureHandler?;
|
|
110
113
|
private readonly roundRobin?;
|
|
114
|
+
private readonly applicationDispatchQueue;
|
|
111
115
|
private stoppedFlag;
|
|
112
116
|
private isStopped;
|
|
113
117
|
private running?;
|
|
@@ -115,7 +119,7 @@ export declare class ZLinkSubscriberReceiveLoop {
|
|
|
115
119
|
private readonly receiveOwner;
|
|
116
120
|
private readonly rawReceiveReservations;
|
|
117
121
|
private readonly capacityStop;
|
|
118
|
-
constructor(adapter: ZLinkChannelBackendAdapter, subscriber: ZLinkBackendSubscriberSocket, dispatcher: ZLinkChannelPublishDispatchLoop, applicationJobQueue: ApplicationJobQueue, infrastructureHandler?: ((topicMessage: ReturnType<ZLinkChannelBackendAdapter["createTopicMessage"]>) => boolean | ZLinkSubscriberInfrastructureResult) | undefined, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter);
|
|
122
|
+
constructor(adapter: ZLinkChannelBackendAdapter, subscriber: ZLinkBackendSubscriberSocket, dispatcher: ZLinkChannelPublishDispatchLoop, applicationJobQueue: ApplicationJobQueue, infrastructureHandler?: ((topicMessage: ReturnType<ZLinkChannelBackendAdapter["createTopicMessage"]>) => boolean | ZLinkSubscriberInfrastructureResult) | undefined, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
|
|
119
123
|
private readonly poller;
|
|
120
124
|
run(signal?: AbortSignal): Promise<void>;
|
|
121
125
|
private runLoop;
|
|
@@ -130,6 +134,7 @@ export declare class ZLinkRouteReceiveLoop {
|
|
|
130
134
|
private readonly poller;
|
|
131
135
|
private readonly applicationJobQueue;
|
|
132
136
|
private readonly roundRobin?;
|
|
137
|
+
private readonly applicationDispatchQueue;
|
|
133
138
|
private stoppedFlag;
|
|
134
139
|
private isStopped;
|
|
135
140
|
private running?;
|
|
@@ -139,7 +144,7 @@ export declare class ZLinkRouteReceiveLoop {
|
|
|
139
144
|
private readonly capacityStop;
|
|
140
145
|
constructor(router: ZLinkBackendRouterSocket & {
|
|
141
146
|
reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
|
|
142
|
-
}, dispatcher: ZLinkRoutePacketDispatchLoop, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter);
|
|
147
|
+
}, dispatcher: ZLinkRoutePacketDispatchLoop, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
|
|
143
148
|
run(signal?: AbortSignal): Promise<void>;
|
|
144
149
|
private runLoop;
|
|
145
150
|
stop(): Promise<void>;
|