@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
|
@@ -24,7 +24,7 @@ export interface ZLinkRawMonitorRecord {
|
|
|
24
24
|
readonly flags?: number;
|
|
25
25
|
}
|
|
26
26
|
export interface ZLinkRawSocketPort {
|
|
27
|
-
setReadableHandler(handler: () => void): void;
|
|
27
|
+
setReadableHandler(handler: (receiveReady: boolean, routeReady: boolean) => void): void;
|
|
28
28
|
bind(endpoint: string): void;
|
|
29
29
|
unbind(endpoint: string): void;
|
|
30
30
|
connect(endpoint: 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;
|
|
@@ -25,7 +34,8 @@ export declare class DefaultZLinkRouteClient implements ZLinkRouteClient {
|
|
|
25
34
|
private readonly registration;
|
|
26
35
|
private readonly transport?;
|
|
27
36
|
private readonly spotRouterChannelIdForMesh;
|
|
28
|
-
|
|
37
|
+
private readonly channelTransport?;
|
|
38
|
+
constructor(registration: ZLinkFrameworkRegistration, transport?: ZLinkRouteClientTransport | undefined, spotRouterChannelIdForMesh?: (meshName: string) => string, channelTransport?: ZLinkChannelClientTransportSource | undefined);
|
|
29
39
|
sendToNode(meshName: string, targetNodeRid: string, message: unknown): ZLinkSendCall;
|
|
30
40
|
requestToNode(meshName: string, targetNodeRid: string, request: unknown): ZLinkRequestCall;
|
|
31
41
|
sendToChannel(channelName: string, message: unknown): ZLinkSendCall;
|
|
@@ -34,9 +44,10 @@ export declare class DefaultZLinkRouteClient implements ZLinkRouteClient {
|
|
|
34
44
|
requestToSpot(spot: SpotHandle, request: unknown): ZLinkRequestCall;
|
|
35
45
|
private defaultRequestTimeout;
|
|
36
46
|
private requireMesh;
|
|
37
|
-
private
|
|
47
|
+
private requireChannelRoute;
|
|
38
48
|
private defaultRequestTimeoutForChannel;
|
|
39
49
|
private requireTransport;
|
|
50
|
+
private requireChannelTransport;
|
|
40
51
|
private requireSpotTransport;
|
|
41
52
|
}
|
|
42
53
|
export declare class DefaultZLinkSpotPublisherClient implements ZLinkSpotPublisherClient {
|
|
@@ -47,3 +58,4 @@ export declare class DefaultZLinkSpotPublisherClient implements ZLinkSpotPublish
|
|
|
47
58
|
private requireMeshChannel;
|
|
48
59
|
private requireTransport;
|
|
49
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;
|
|
@@ -82,39 +78,42 @@ class DefaultZLinkRouteClient {
|
|
|
82
78
|
registration;
|
|
83
79
|
transport;
|
|
84
80
|
spotRouterChannelIdForMesh;
|
|
85
|
-
|
|
81
|
+
channelTransport;
|
|
82
|
+
constructor(registration, transport, spotRouterChannelIdForMesh = (meshName) => meshName, channelTransport) {
|
|
86
83
|
this.registration = registration;
|
|
87
84
|
this.transport = transport;
|
|
88
85
|
this.spotRouterChannelIdForMesh = spotRouterChannelIdForMesh;
|
|
86
|
+
this.channelTransport = channelTransport;
|
|
89
87
|
}
|
|
90
88
|
sendToNode(meshName, targetNodeRid, message) {
|
|
91
|
-
return new DefaultZLinkSendCall(() => this.requireMesh(meshName), async (packetName, metadata
|
|
89
|
+
return new DefaultZLinkSendCall(() => this.requireMesh(meshName), async (packetName, metadata) => normalizeSubmitResult(await this.requireTransport().submit(meshName, targetNodeRid, packetName, message, metadata)));
|
|
92
90
|
}
|
|
93
91
|
requestToNode(meshName, targetNodeRid, request) {
|
|
94
92
|
return new DefaultZLinkRequestCall(() => this.requireMesh(meshName), (packetName, timeoutMs, metadata, signal) => this.requireTransport().request(meshName, targetNodeRid, packetName, request, timeoutMs, signal, metadata), this.defaultRequestTimeout(meshName));
|
|
95
93
|
}
|
|
96
94
|
sendToChannel(channelName, message) {
|
|
97
|
-
return new DefaultZLinkSendCall(() => {
|
|
98
|
-
this.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
return new DefaultZLinkSendCall(() => this.requireChannelRoute(channelName), async (packetName, metadata) => {
|
|
96
|
+
const route = this.requireChannelRoute(channelName);
|
|
97
|
+
if (route.kind === 'route-mesh') {
|
|
98
|
+
return normalizeSubmitResult(await this.requireTransport().submitToChannel(route.meshName, channelName, packetName, message, metadata));
|
|
99
|
+
}
|
|
100
|
+
return normalizeSubmitResult(await this.requireChannelTransport().send(channelName, packetName, message, metadata));
|
|
102
101
|
});
|
|
103
102
|
}
|
|
104
103
|
requestToChannel(channelName, request) {
|
|
105
|
-
return new DefaultZLinkRequestCall(() => {
|
|
106
|
-
this.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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);
|
|
110
110
|
}, this.defaultRequestTimeoutForChannel(channelName));
|
|
111
111
|
}
|
|
112
112
|
sendToSpot(spot, message) {
|
|
113
113
|
return new DefaultZLinkSendCall(() => {
|
|
114
114
|
this.requireSpotTransport();
|
|
115
|
-
}, async (_packetName, metadata
|
|
115
|
+
}, async (_packetName, metadata) => {
|
|
116
116
|
await (0, spot_outbound_1.sendToSpotHandle)(this.requireSpotTransport(), spot, message, {
|
|
117
|
-
signal,
|
|
118
117
|
metadata,
|
|
119
118
|
spotRouterChannelIdForMesh: this.spotRouterChannelIdForMesh
|
|
120
119
|
});
|
|
@@ -129,13 +128,13 @@ class DefaultZLinkRouteClient {
|
|
|
129
128
|
signal,
|
|
130
129
|
metadata,
|
|
131
130
|
spotRouterChannelIdForMesh: this.spotRouterChannelIdForMesh
|
|
132
|
-
}), this.registration.requestTimeoutMs ??
|
|
131
|
+
}), this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS);
|
|
133
132
|
}
|
|
134
133
|
defaultRequestTimeout(meshName) {
|
|
135
134
|
return (this.registration.spotNodes.get(meshName)?.requestTimeoutMs ??
|
|
136
135
|
this.registration.routeChannelOptions.get(meshName)?.requestTimeoutMs ??
|
|
137
136
|
this.registration.requestTimeoutMs ??
|
|
138
|
-
|
|
137
|
+
Registration_1.DEFAULT_REQUEST_TIMEOUT_MS);
|
|
139
138
|
}
|
|
140
139
|
requireMesh(meshName) {
|
|
141
140
|
if (!this.registration.spotNodes.has(meshName) &&
|
|
@@ -143,21 +142,30 @@ class DefaultZLinkRouteClient {
|
|
|
143
142
|
throw new configuration_1.ZLinkConfigurationException(`RouteMesh '${meshName}' is not registered.`);
|
|
144
143
|
}
|
|
145
144
|
}
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
.
|
|
150
|
-
if (matches.length === 0) {
|
|
151
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `RouteMesh channel '${channelName}' is not registered.`);
|
|
145
|
+
requireChannelRoute(channelName) {
|
|
146
|
+
const resolution = resolveChannelRoute(this.registration, channelName);
|
|
147
|
+
if (resolution === undefined) {
|
|
148
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `ChannelName '${channelName}' is not registered.`);
|
|
152
149
|
}
|
|
153
|
-
if (
|
|
154
|
-
|
|
150
|
+
if (resolution.kind === 'client-server') {
|
|
151
|
+
if (resolution.channel.client === undefined) {
|
|
152
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidConfiguration, `Channel client role '${channelName}' is not configured.`);
|
|
153
|
+
}
|
|
154
|
+
return resolution;
|
|
155
155
|
}
|
|
156
|
-
return
|
|
156
|
+
return {
|
|
157
|
+
kind: 'route-mesh',
|
|
158
|
+
...requireUniqueRouteMeshChannel(resolution.matches, `RouteMesh channel '${channelName}' must be unique across the Framework host.`)
|
|
159
|
+
};
|
|
157
160
|
}
|
|
158
161
|
defaultRequestTimeoutForChannel(channelName) {
|
|
159
|
-
const
|
|
160
|
-
|
|
162
|
+
const route = resolveChannelRoute(this.registration, channelName);
|
|
163
|
+
const timeoutMs = route?.kind === 'client-server'
|
|
164
|
+
? route.channel.requestTimeoutMs
|
|
165
|
+
: route?.kind === 'route-mesh'
|
|
166
|
+
? route.matches[0]?.mesh.requestTimeoutMs
|
|
167
|
+
: undefined;
|
|
168
|
+
return timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
161
169
|
}
|
|
162
170
|
requireTransport() {
|
|
163
171
|
if (this.transport === undefined) {
|
|
@@ -165,6 +173,13 @@ class DefaultZLinkRouteClient {
|
|
|
165
173
|
}
|
|
166
174
|
return this.transport;
|
|
167
175
|
}
|
|
176
|
+
requireChannelTransport() {
|
|
177
|
+
const transport = typeof this.channelTransport === 'function' ? this.channelTransport() : this.channelTransport;
|
|
178
|
+
if (transport === undefined) {
|
|
179
|
+
throw new configuration_1.ZLinkConfigurationException('Channel runtime is not started.');
|
|
180
|
+
}
|
|
181
|
+
return transport;
|
|
182
|
+
}
|
|
168
183
|
requireSpotTransport() {
|
|
169
184
|
const transport = this.requireTransport();
|
|
170
185
|
if (transport.sendToSpot === undefined || transport.requestToSpot === undefined) {
|
|
@@ -220,12 +235,11 @@ class DefaultZLinkSendCall {
|
|
|
220
235
|
}
|
|
221
236
|
return this;
|
|
222
237
|
}
|
|
223
|
-
async submit(
|
|
238
|
+
async submit() {
|
|
224
239
|
ensureNotExecuted(this.executed);
|
|
225
240
|
this.validate();
|
|
226
241
|
this.executed = true;
|
|
227
|
-
(
|
|
228
|
-
const result = await this.submitter(undefined, new Map(this.selectedMetadata), signal);
|
|
242
|
+
const result = await this.submitter(undefined, new Map(this.selectedMetadata));
|
|
229
243
|
(0, submission_result_1.requireOneWayCompletion)(result, 'One-way send');
|
|
230
244
|
}
|
|
231
245
|
}
|
|
@@ -321,6 +335,6 @@ class DefaultZLinkFanoutPublishCall {
|
|
|
321
335
|
this.executed = true;
|
|
322
336
|
(0, abort_1.throwIfAborted)(signal);
|
|
323
337
|
const result = await this.submitter(signal);
|
|
324
|
-
(0, submission_result_1.
|
|
338
|
+
(0, submission_result_1.requireClassicFanoutCompletion)(result, 'Classic fanout publish');
|
|
325
339
|
}
|
|
326
340
|
}
|
|
@@ -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,
|
|
@@ -43,7 +43,7 @@ export declare function encodeChannelEnvelopeParts(kind: ZLinkChannelMessageKind
|
|
|
43
43
|
* entry point for operations that must not extend their original deadline
|
|
44
44
|
* while the message is being serialized.
|
|
45
45
|
*/
|
|
46
|
-
export declare function encodeChannelEnvelopePartsAtDeadline(kind: ZLinkChannelMessageKind, channelName: string, packetName: string | undefined, payload: unknown, deadlineUnixMs: number, topic?: string, codecs?: ZLinkChannelEnvelopeCodecRegistry, correlationId?: string, createFlow?: boolean, metadata?: ReadonlyMap<string, string>): readonly MessageLike[];
|
|
46
|
+
export declare function encodeChannelEnvelopePartsAtDeadline(kind: ZLinkChannelMessageKind, channelName: string, packetName: string | undefined, payload: unknown, deadlineUnixMs: number | undefined, topic?: string, codecs?: ZLinkChannelEnvelopeCodecRegistry, correlationId?: string, createFlow?: boolean, metadata?: ReadonlyMap<string, string>): readonly MessageLike[];
|
|
47
47
|
export declare function encodeChannelPublishEnvelopeParts(channelName: string, topic: string, packetName: string | undefined, payload: unknown, codecs?: ZLinkChannelEnvelopeCodecRegistry, createFlow?: boolean, metadata?: ReadonlyMap<string, string>): readonly MessageLike[];
|
|
48
48
|
export declare function encodeChannelReplyParts(request: ZLinkChannelEnvelopeHeader, payload: unknown, codecs?: ZLinkChannelEnvelopeCodecRegistry): readonly MessageLike[];
|
|
49
49
|
/**
|
|
@@ -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;
|
|
@@ -36,14 +38,7 @@ function newChannelCorrelationId() {
|
|
|
36
38
|
return (0, node_crypto_1.randomUUID)().replaceAll('-', '');
|
|
37
39
|
}
|
|
38
40
|
function encodeChannelEnvelopeParts(kind, channelName, packetName, payload, timeoutMs, topic, codecs, correlationId, createFlow = true, metadata = EMPTY_OUTBOUND_METADATA) {
|
|
39
|
-
|
|
40
|
-
const encoded = encodePayload(payload, (0, channel_framework_packets_1.codecsForFrameworkPacket)(messageName, codecs), messageName, 'payload');
|
|
41
|
-
const flow = createFlow ? (0, flow_context_1.currentOrCreateFlow)('Application') : undefined;
|
|
42
|
-
const envelopeCorrelationId = correlationIdForOutboundKind(kind, correlationId);
|
|
43
|
-
return [
|
|
44
|
-
encodeChannelHeader(kind, channelName, messageName, encoded.contentType, envelopeCorrelationId, timeoutMs === undefined ? null : new Date(Date.now() + timeoutMs).toISOString(), topic ?? null, null, null, undefined, applicationMetadataRecord(metadata), flow?.flowId, flow?.flowOrigin),
|
|
45
|
-
encoded.message
|
|
46
|
-
];
|
|
41
|
+
return encodeChannelEnvelopePartsAtDeadline(kind, channelName, packetName, payload, timeoutMs === undefined ? undefined : Date.now() + timeoutMs, topic, codecs, correlationId, createFlow, metadata);
|
|
47
42
|
}
|
|
48
43
|
/**
|
|
49
44
|
* Encodes an outbound channel envelope with a deadline that was established
|
|
@@ -52,7 +47,8 @@ function encodeChannelEnvelopeParts(kind, channelName, packetName, payload, time
|
|
|
52
47
|
* while the message is being serialized.
|
|
53
48
|
*/
|
|
54
49
|
function encodeChannelEnvelopePartsAtDeadline(kind, channelName, packetName, payload, deadlineUnixMs, topic, codecs, correlationId, createFlow = true, metadata = EMPTY_OUTBOUND_METADATA) {
|
|
55
|
-
if (
|
|
50
|
+
if (deadlineUnixMs !== undefined &&
|
|
51
|
+
(!Number.isSafeInteger(deadlineUnixMs) || deadlineUnixMs <= 0)) {
|
|
56
52
|
throw new RangeError('deadlineUnixMs must be a positive safe integer.');
|
|
57
53
|
}
|
|
58
54
|
const messageName = (0, packet_name_1.resolveFrameworkPacketName)(payload, packetName, 'Channel');
|
|
@@ -60,7 +56,7 @@ function encodeChannelEnvelopePartsAtDeadline(kind, channelName, packetName, pay
|
|
|
60
56
|
const flow = createFlow ? (0, flow_context_1.currentOrCreateFlow)('Application') : undefined;
|
|
61
57
|
const envelopeCorrelationId = correlationIdForOutboundKind(kind, correlationId);
|
|
62
58
|
return [
|
|
63
|
-
encodeChannelHeader(kind, channelName, messageName, encoded.contentType, envelopeCorrelationId, new Date(deadlineUnixMs).toISOString(), topic ?? null, null, null, undefined, applicationMetadataRecord(metadata), flow?.flowId, flow?.flowOrigin),
|
|
59
|
+
encodeChannelHeader(kind, channelName, messageName, encoded.contentType, envelopeCorrelationId, deadlineUnixMs === undefined ? null : new Date(deadlineUnixMs).toISOString(), topic ?? null, null, null, undefined, applicationMetadataRecord(metadata), flow?.flowId, flow?.flowOrigin),
|
|
64
60
|
encoded.message
|
|
65
61
|
];
|
|
66
62
|
}
|
|
@@ -314,7 +310,20 @@ function writeChannelHeader(writer, kind, channelName, messageName, contentType,
|
|
|
314
310
|
writer.append(',"source":');
|
|
315
311
|
writer.nullableString(source);
|
|
316
312
|
}
|
|
317
|
-
writer.append(',"metadata":
|
|
313
|
+
writer.append(',"metadata":');
|
|
314
|
+
writeApplicationMetadata(writer, metadata);
|
|
315
|
+
if (flowId !== undefined) {
|
|
316
|
+
writer.append(',"flowId":');
|
|
317
|
+
writer.string(flowId);
|
|
318
|
+
}
|
|
319
|
+
if (flowOrigin !== undefined) {
|
|
320
|
+
writer.append(',"flowOrigin":');
|
|
321
|
+
writer.append(String(encodeFlowOrigin(flowOrigin)));
|
|
322
|
+
}
|
|
323
|
+
writer.append('}');
|
|
324
|
+
}
|
|
325
|
+
function writeApplicationMetadata(writer, metadata) {
|
|
326
|
+
writer.append('{');
|
|
318
327
|
let first = true;
|
|
319
328
|
for (const name in metadata) {
|
|
320
329
|
if (!Object.prototype.hasOwnProperty.call(metadata, name))
|
|
@@ -327,15 +336,6 @@ function writeChannelHeader(writer, kind, channelName, messageName, contentType,
|
|
|
327
336
|
writer.string(metadata[name]);
|
|
328
337
|
}
|
|
329
338
|
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
339
|
}
|
|
340
340
|
class ChannelHeaderWriter {
|
|
341
341
|
output;
|
|
@@ -438,13 +438,16 @@ function parseWireJson(payload, schema) {
|
|
|
438
438
|
}, schema);
|
|
439
439
|
}
|
|
440
440
|
function parseChannelHeaderBytes(payload) {
|
|
441
|
-
|
|
441
|
+
if (!(0, node_buffer_1.isUtf8)(payload)) {
|
|
442
|
+
throw new contracts_1.ZLinkFrameworkException(contracts_1.ZLinkFrameworkErrorKind.ProtocolError, 'Channel envelope header must contain valid UTF-8.');
|
|
443
|
+
}
|
|
444
|
+
return tryParseCanonicalChannelHeader(payload) ?? (0, framework_json_v1_1.parseFrameworkJsonV1)(payload.toString());
|
|
442
445
|
}
|
|
443
446
|
/**
|
|
444
447
|
* Accept the byte layout emitted by writeChannelHeader without materializing
|
|
445
448
|
* the enclosing JSON text. Any variation falls through to the established
|
|
446
449
|
* framework-json-v1 parser, which remains the sole authority for JSON
|
|
447
|
-
* failures
|
|
450
|
+
* failures and unknown properties. Header metadata accepts every valid string key.
|
|
448
451
|
*/
|
|
449
452
|
function tryParseCanonicalChannelHeader(payload) {
|
|
450
453
|
const reader = new CanonicalChannelHeaderReader(payload);
|
|
@@ -700,34 +703,43 @@ function channelKindName(kind) {
|
|
|
700
703
|
}
|
|
701
704
|
const EMPTY_APPLICATION_METADATA = Object.freeze({});
|
|
702
705
|
function applicationMetadataRecord(metadata) {
|
|
703
|
-
// The common case carries no metadata; skip the record + JSON.stringify
|
|
704
|
-
// byte-limit walk entirely.
|
|
705
706
|
if (metadata.size === 0)
|
|
706
707
|
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
|
-
}
|
|
708
|
+
const record = Object.create(null);
|
|
709
|
+
for (const [key, value] of metadata)
|
|
712
710
|
record[key] = value;
|
|
711
|
+
return validateApplicationMetadata(record);
|
|
712
|
+
}
|
|
713
|
+
const INVALID_METADATA_UNICODE = /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u;
|
|
714
|
+
function validateApplicationMetadata(metadata) {
|
|
715
|
+
const keys = Object.keys(metadata);
|
|
716
|
+
if (keys.length === 0)
|
|
717
|
+
return EMPTY_APPLICATION_METADATA;
|
|
718
|
+
for (const key of keys) {
|
|
719
|
+
const value = requireString(metadata[key], `metadata.${key}`);
|
|
720
|
+
if (key.length === 0 ||
|
|
721
|
+
key.includes('\0') ||
|
|
722
|
+
value.includes('\0') ||
|
|
723
|
+
INVALID_METADATA_UNICODE.test(key) ||
|
|
724
|
+
INVALID_METADATA_UNICODE.test(value)) {
|
|
725
|
+
throw new configuration_1.ZLinkConfigurationException('Channel application metadata keys must be non-empty and keys and values must be valid Unicode without NUL.');
|
|
726
|
+
}
|
|
713
727
|
}
|
|
714
|
-
|
|
715
|
-
|
|
728
|
+
const record = metadata;
|
|
729
|
+
const writer = new ChannelHeaderWriter();
|
|
730
|
+
writeApplicationMetadata(writer, record);
|
|
731
|
+
if (writer.byteLength > service_wire_constants_generated_1.SERVICE_WIRE_METADATA_BYTES) {
|
|
732
|
+
throw new configuration_1.ZLinkConfigurationException(`Channel application metadata exceeds the ${service_wire_constants_generated_1.SERVICE_WIRE_METADATA_BYTES}-byte limit.`);
|
|
716
733
|
}
|
|
717
734
|
return Object.freeze(record);
|
|
718
735
|
}
|
|
719
736
|
function requireApplicationMetadata(value) {
|
|
720
|
-
if (value === undefined)
|
|
721
|
-
return
|
|
722
|
-
}
|
|
737
|
+
if (value === undefined)
|
|
738
|
+
return EMPTY_APPLICATION_METADATA;
|
|
723
739
|
if (!isRecord(value)) {
|
|
724
740
|
throw new configuration_1.ZLinkConfigurationException('Channel application metadata must be a JSON object.');
|
|
725
741
|
}
|
|
726
|
-
|
|
727
|
-
for (const [key, selectedValue] of Object.entries(value)) {
|
|
728
|
-
metadata.set(key, requireString(selectedValue, `metadata.${key}`));
|
|
729
|
-
}
|
|
730
|
-
return applicationMetadataRecord(metadata);
|
|
742
|
+
return validateApplicationMetadata(value);
|
|
731
743
|
}
|
|
732
744
|
function optionalFlowId(value) {
|
|
733
745
|
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';
|
|
@@ -9,7 +10,7 @@ export declare class ZLinkChannelOutboundOperations {
|
|
|
9
10
|
private readonly pendingRequests;
|
|
10
11
|
constructor(sockets: ZLinkChannelSocketRegistry, codecs: ZLinkChannelEnvelopeCodecRegistry, dispatchServices: ZLinkChannelDispatchServices);
|
|
11
12
|
pendingRequestCount(channelName: string): number;
|
|
12
|
-
send(channelName: string, packetName: string | undefined, message: unknown,
|
|
13
|
+
send(channelName: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
13
14
|
private sendScoped;
|
|
14
15
|
private traceSend;
|
|
15
16
|
request<TReply>(channelName: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<TReply>;
|
|
@@ -18,7 +19,7 @@ export declare class ZLinkChannelOutboundOperations {
|
|
|
18
19
|
private tryPublishScoped;
|
|
19
20
|
publish(channelName: string, topic: string, packetName: string | undefined, event: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
20
21
|
private publishScoped;
|
|
21
|
-
routeSubmit(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, message: unknown,
|
|
22
|
+
routeSubmit(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
22
23
|
private routeSubmitScoped;
|
|
23
24
|
private traceRouteSend;
|
|
24
25
|
routeRequest<TReply>(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<TReply>;
|
|
@@ -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;
|