@zlink-systems/framework 0.21.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +28 -22
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
- package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/contracts/index.d.ts +1 -0
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +46 -42
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
- package/dist/runtime/diagnostics/flow-context.js +2 -2
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +58 -42
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
- package/dist/runtime/foundation/service-topology-registry.js +105 -96
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +245 -228
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +209 -220
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
- package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
- package/dist/runtime/spots/spot-timer.js +26 -30
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
- package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
- package/dist/runtime/streams/bound-session-response-target.js +8 -1
- package/dist/runtime/streams/bound-session-service.d.ts +1 -0
- package/dist/runtime/streams/bound-session-service.js +14 -12
- package/dist/runtime/streams/index.js +28 -20
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +52 -31
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.d.ts +5 -1
- package/dist/runtime/streams/protocol.js +68 -20
- package/dist/runtime/streams/session-actor-coordinator.js +37 -41
- package/dist/runtime/streams/session-context.d.ts +9 -2
- package/dist/runtime/streams/session-context.js +50 -32
- package/dist/runtime/streams/session-local-actors.d.ts +3 -1
- package/dist/runtime/streams/session-local-actors.js +17 -2
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
- package/dist/runtime/streams/stream-frame-factory.js +14 -7
- package/dist/runtime/streams/stream-session-runtime.js +112 -78
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +3 -3
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +2 -2
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +142 -134
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +77 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +218 -206
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
- package/src/runtime/diagnostics/flow-context.ts +18 -7
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +107 -79
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +170 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +595 -564
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
- package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
- package/src/runtime/spots/spot-timer.ts +103 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
- package/src/runtime/streams/bound-session-response-target.ts +39 -9
- package/src/runtime/streams/bound-session-service.ts +52 -42
- package/src/runtime/streams/index.ts +183 -100
- package/src/runtime/streams/managed-stream.ts +123 -90
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +115 -46
- package/src/runtime/streams/session-actor-coordinator.ts +109 -93
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +96 -51
- package/src/runtime/streams/session-local-actors.ts +19 -3
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +59 -40
- package/src/runtime/streams/stream-session-runtime.ts +317 -214
- package/src/runtime/workers/index.ts +68 -29
|
@@ -9,24 +9,16 @@ import {
|
|
|
9
9
|
type ZLinkFlowOrigin
|
|
10
10
|
} from '../../contracts';
|
|
11
11
|
import { borrowEncodedPayload } from '../../contracts/Common/encoded-payload-storage';
|
|
12
|
-
import {
|
|
13
|
-
isZLinkMessage,
|
|
14
|
-
readZLinkMessageDeclaredType
|
|
15
|
-
} from '../../contracts/Common/ZLinkMessage';
|
|
12
|
+
import { isZLinkMessage, readZLinkMessageDeclaredType } from '../../contracts/Common/ZLinkMessage';
|
|
16
13
|
import { ZLinkConfigurationException } from '../configuration';
|
|
17
14
|
import {
|
|
18
15
|
ZLinkFrameworkInternalErrorKind,
|
|
19
16
|
createInternalFrameworkException
|
|
20
17
|
} from '../framework-errors-internal';
|
|
21
18
|
import { resolveFrameworkPacketName } from '../messaging/packet-name';
|
|
22
|
-
import {
|
|
23
|
-
selectSerializerWithContentType
|
|
24
|
-
} from '../messaging/payload-codec';
|
|
19
|
+
import { selectSerializerWithContentType } from '../messaging/payload-codec';
|
|
25
20
|
import { isCanonicalCodecContentType } from '../../contracts/Configuration/CodecContentType';
|
|
26
|
-
import {
|
|
27
|
-
parseFrameworkJsonV1,
|
|
28
|
-
stringifyFrameworkJsonV1
|
|
29
|
-
} from '../messaging/framework-json-v1';
|
|
21
|
+
import { parseFrameworkJsonV1, stringifyFrameworkJsonV1 } from '../messaging/framework-json-v1';
|
|
30
22
|
import { currentOrCreateFlow } from '../diagnostics/flow-context';
|
|
31
23
|
import { codecsForFrameworkPacket } from './channel-framework-packets';
|
|
32
24
|
import { readZLinkPacketJsonContract } from '../../contracts/Handlers/Attributes';
|
|
@@ -93,24 +85,32 @@ export function encodeChannelEnvelopeParts(
|
|
|
93
85
|
metadata: ReadonlyMap<string, string> = EMPTY_OUTBOUND_METADATA
|
|
94
86
|
): readonly MessageLike[] {
|
|
95
87
|
const messageName = resolveFrameworkPacketName(payload, packetName, 'Channel');
|
|
96
|
-
const encoded = encodePayload(
|
|
88
|
+
const encoded = encodePayload(
|
|
89
|
+
payload,
|
|
90
|
+
codecsForFrameworkPacket(messageName, codecs),
|
|
91
|
+
messageName,
|
|
92
|
+
'payload'
|
|
93
|
+
);
|
|
97
94
|
const flow = createFlow ? currentOrCreateFlow('Application') : undefined;
|
|
98
95
|
const envelopeCorrelationId = correlationIdForOutboundKind(kind, correlationId);
|
|
99
|
-
return [
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
96
|
+
return [
|
|
97
|
+
encodeChannelHeader(
|
|
98
|
+
kind,
|
|
99
|
+
channelName,
|
|
100
|
+
messageName,
|
|
101
|
+
encoded.contentType,
|
|
102
|
+
envelopeCorrelationId,
|
|
103
|
+
timeoutMs === undefined ? null : new Date(Date.now() + timeoutMs).toISOString(),
|
|
104
|
+
topic ?? null,
|
|
105
|
+
null,
|
|
106
|
+
null,
|
|
107
|
+
undefined,
|
|
108
|
+
applicationMetadataRecord(metadata),
|
|
109
|
+
flow?.flowId,
|
|
110
|
+
flow?.flowOrigin
|
|
111
|
+
),
|
|
112
|
+
encoded.message
|
|
113
|
+
];
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
/**
|
|
@@ -135,24 +135,32 @@ export function encodeChannelEnvelopePartsAtDeadline(
|
|
|
135
135
|
throw new RangeError('deadlineUnixMs must be a positive safe integer.');
|
|
136
136
|
}
|
|
137
137
|
const messageName = resolveFrameworkPacketName(payload, packetName, 'Channel');
|
|
138
|
-
const encoded = encodePayload(
|
|
138
|
+
const encoded = encodePayload(
|
|
139
|
+
payload,
|
|
140
|
+
codecsForFrameworkPacket(messageName, codecs),
|
|
141
|
+
messageName,
|
|
142
|
+
'payload'
|
|
143
|
+
);
|
|
139
144
|
const flow = createFlow ? currentOrCreateFlow('Application') : undefined;
|
|
140
145
|
const envelopeCorrelationId = correlationIdForOutboundKind(kind, correlationId);
|
|
141
|
-
return [
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
146
|
+
return [
|
|
147
|
+
encodeChannelHeader(
|
|
148
|
+
kind,
|
|
149
|
+
channelName,
|
|
150
|
+
messageName,
|
|
151
|
+
encoded.contentType,
|
|
152
|
+
envelopeCorrelationId,
|
|
153
|
+
new Date(deadlineUnixMs).toISOString(),
|
|
154
|
+
topic ?? null,
|
|
155
|
+
null,
|
|
156
|
+
null,
|
|
157
|
+
undefined,
|
|
158
|
+
applicationMetadataRecord(metadata),
|
|
159
|
+
flow?.flowId,
|
|
160
|
+
flow?.flowOrigin
|
|
161
|
+
),
|
|
162
|
+
encoded.message
|
|
163
|
+
];
|
|
156
164
|
}
|
|
157
165
|
|
|
158
166
|
export function encodeChannelPublishEnvelopeParts(
|
|
@@ -165,23 +173,31 @@ export function encodeChannelPublishEnvelopeParts(
|
|
|
165
173
|
metadata: ReadonlyMap<string, string> = EMPTY_OUTBOUND_METADATA
|
|
166
174
|
): readonly MessageLike[] {
|
|
167
175
|
const messageName = resolveFrameworkPacketName(payload, packetName, 'Channel');
|
|
168
|
-
const encoded = encodePayload(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
ZLinkChannelMessageKind.Publish,
|
|
172
|
-
channelName,
|
|
176
|
+
const encoded = encodePayload(
|
|
177
|
+
payload,
|
|
178
|
+
codecsForFrameworkPacket(messageName, codecs),
|
|
173
179
|
messageName,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
180
|
+
'payload'
|
|
181
|
+
);
|
|
182
|
+
const flow = createFlow ? currentOrCreateFlow('Application') : undefined;
|
|
183
|
+
return [
|
|
184
|
+
encodeChannelHeader(
|
|
185
|
+
ZLinkChannelMessageKind.Publish,
|
|
186
|
+
channelName,
|
|
187
|
+
messageName,
|
|
188
|
+
encoded.contentType,
|
|
189
|
+
null,
|
|
190
|
+
null,
|
|
191
|
+
topic,
|
|
192
|
+
null,
|
|
193
|
+
null,
|
|
194
|
+
undefined,
|
|
195
|
+
applicationMetadataRecord(metadata),
|
|
196
|
+
flow?.flowId,
|
|
197
|
+
flow?.flowOrigin
|
|
198
|
+
),
|
|
199
|
+
encoded.message
|
|
200
|
+
];
|
|
185
201
|
}
|
|
186
202
|
|
|
187
203
|
export function encodeChannelReplyParts(
|
|
@@ -195,21 +211,24 @@ export function encodeChannelReplyParts(
|
|
|
195
211
|
request.messageName,
|
|
196
212
|
'reply'
|
|
197
213
|
);
|
|
198
|
-
return [
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
214
|
+
return [
|
|
215
|
+
encodeChannelHeader(
|
|
216
|
+
ZLinkChannelMessageKind.Response,
|
|
217
|
+
request.channelName,
|
|
218
|
+
request.messageName,
|
|
219
|
+
encoded.contentType,
|
|
220
|
+
request.correlationId,
|
|
221
|
+
null,
|
|
222
|
+
null,
|
|
223
|
+
undefined,
|
|
224
|
+
undefined,
|
|
225
|
+
undefined,
|
|
226
|
+
EMPTY_APPLICATION_METADATA,
|
|
227
|
+
request.flowId,
|
|
228
|
+
request.flowOrigin
|
|
229
|
+
),
|
|
230
|
+
encoded.message
|
|
231
|
+
];
|
|
213
232
|
}
|
|
214
233
|
|
|
215
234
|
/**
|
|
@@ -267,26 +286,27 @@ export function encodeChannelErrorReplyParts(
|
|
|
267
286
|
metadata: Readonly<Record<string, string>> = {}
|
|
268
287
|
): readonly MessageLike[] {
|
|
269
288
|
const errorCode = channelErrorCodeName(
|
|
270
|
-
error instanceof ZLinkFrameworkException
|
|
271
|
-
? error.kind
|
|
272
|
-
: ZLinkFrameworkErrorKind.InternalFailure
|
|
289
|
+
error instanceof ZLinkFrameworkException ? error.kind : ZLinkFrameworkErrorKind.InternalFailure
|
|
273
290
|
);
|
|
274
291
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
275
|
-
return [
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
292
|
+
return [
|
|
293
|
+
encodeChannelHeader(
|
|
294
|
+
ZLinkChannelMessageKind.Error,
|
|
295
|
+
request.channelName,
|
|
296
|
+
request.messageName,
|
|
297
|
+
JSON_CONTENT_TYPE,
|
|
298
|
+
request.correlationId,
|
|
299
|
+
null,
|
|
300
|
+
null,
|
|
301
|
+
errorCode,
|
|
302
|
+
errorMessage,
|
|
303
|
+
undefined,
|
|
304
|
+
metadata,
|
|
305
|
+
request.flowId,
|
|
306
|
+
request.flowOrigin
|
|
307
|
+
),
|
|
308
|
+
encodeJsonBytes(null)
|
|
309
|
+
];
|
|
290
310
|
}
|
|
291
311
|
|
|
292
312
|
export function decodeChannelReply<TReply>(
|
|
@@ -305,9 +325,9 @@ export function decodeChannelReply<TReply>(
|
|
|
305
325
|
}
|
|
306
326
|
const serializer = codecs?.serializers.get(header.contentType);
|
|
307
327
|
if (
|
|
308
|
-
serializer === undefined
|
|
309
|
-
|
|
310
|
-
|
|
328
|
+
serializer === undefined &&
|
|
329
|
+
header.contentType !== BINARY_CONTENT_TYPE &&
|
|
330
|
+
header.contentType !== JSON_CONTENT_TYPE
|
|
311
331
|
) {
|
|
312
332
|
throw unsupportedChannelContentType(header.contentType);
|
|
313
333
|
}
|
|
@@ -318,7 +338,10 @@ export function decodeChannelReply<TReply>(
|
|
|
318
338
|
return Buffer.from(parts[1].data()) as TReply;
|
|
319
339
|
}
|
|
320
340
|
if (serializer !== undefined) {
|
|
321
|
-
return serializer.deserialize<TReply>(
|
|
341
|
+
return serializer.deserialize<TReply>(
|
|
342
|
+
ZLinkEncodedPayload.from(parts[1].data()),
|
|
343
|
+
Object as never
|
|
344
|
+
);
|
|
322
345
|
}
|
|
323
346
|
return parseWireJson(
|
|
324
347
|
parts[1].data().toString(),
|
|
@@ -339,8 +362,7 @@ function decodeChannelError(header: ZLinkChannelEnvelopeHeader): ZLinkChannelDec
|
|
|
339
362
|
// Cross-language contract: errorCode carries the snake_case wire name.
|
|
340
363
|
// An unknown name degrades to InternalFailure, matching the C++
|
|
341
364
|
// request_failure_mapper fallback for unrecognized codes.
|
|
342
|
-
const publicKind = ERROR_KIND_BY_WIRE_NAME.get(code)
|
|
343
|
-
?? ZLinkFrameworkErrorKind.InternalFailure;
|
|
365
|
+
const publicKind = ERROR_KIND_BY_WIRE_NAME.get(code) ?? ZLinkFrameworkErrorKind.InternalFailure;
|
|
344
366
|
failure = new ZLinkFrameworkException(publicKind, message);
|
|
345
367
|
}
|
|
346
368
|
// Cross-language contract (.NET ZLinkErrorOriginWire.RemoteReplyOrigin /
|
|
@@ -353,10 +375,10 @@ function decodeChannelError(header: ZLinkChannelEnvelopeHeader): ZLinkChannelDec
|
|
|
353
375
|
// reached for bytes that DID come back over the wire) are unaffected and
|
|
354
376
|
// stay unclassified (`origin: undefined`, i.e. "unspecified") because
|
|
355
377
|
// they never call this function at all.
|
|
356
|
-
failure.origin =
|
|
357
|
-
=== ZLINK_FRAMEWORK_ORIGIN_METADATA_VALUE
|
|
358
|
-
|
|
359
|
-
|
|
378
|
+
failure.origin =
|
|
379
|
+
header.metadata[ZLINK_FRAMEWORK_ORIGIN_METADATA_KEY] === ZLINK_FRAMEWORK_ORIGIN_METADATA_VALUE
|
|
380
|
+
? ZLINK_FRAMEWORK_ORIGIN_METADATA_VALUE
|
|
381
|
+
: 'application';
|
|
360
382
|
return failure;
|
|
361
383
|
}
|
|
362
384
|
|
|
@@ -448,12 +470,13 @@ function encodePayload(
|
|
|
448
470
|
message: borrowEncodedPayload(payload) ?? payload.data()
|
|
449
471
|
};
|
|
450
472
|
}
|
|
451
|
-
const declaredType = isZLinkMessage(value)
|
|
452
|
-
? readZLinkMessageDeclaredType(value)
|
|
453
|
-
: undefined;
|
|
473
|
+
const declaredType = isZLinkMessage(value) ? readZLinkMessageDeclaredType(value) : undefined;
|
|
454
474
|
if (isZLinkMessage(value)) value = value.decode();
|
|
455
475
|
const selected = selectSerializerWithContentType(value, codecs, declaredType);
|
|
456
|
-
if (
|
|
476
|
+
if (
|
|
477
|
+
selected !== undefined &&
|
|
478
|
+
!(Buffer.isBuffer(value) || value instanceof Uint8Array || isMessage(value))
|
|
479
|
+
) {
|
|
457
480
|
const payload = selected.serializer.serialize(value);
|
|
458
481
|
return {
|
|
459
482
|
contentType: selected.contentType,
|
|
@@ -480,7 +503,11 @@ function contentTypeOf(value: unknown): string {
|
|
|
480
503
|
}
|
|
481
504
|
|
|
482
505
|
function isMessage(value: unknown): value is Message {
|
|
483
|
-
return
|
|
506
|
+
return (
|
|
507
|
+
typeof value === 'object' &&
|
|
508
|
+
value !== null &&
|
|
509
|
+
typeof (value as { data?: unknown }).data === 'function'
|
|
510
|
+
);
|
|
484
511
|
}
|
|
485
512
|
|
|
486
513
|
function encodeJsonBytes(value: unknown, schema?: ZLinkJsonSchema): Buffer {
|
|
@@ -507,14 +534,38 @@ function encodeChannelHeader(
|
|
|
507
534
|
// string, or post-encode byte copy exists on the outbound path.
|
|
508
535
|
const measure = new ChannelHeaderWriter();
|
|
509
536
|
writeChannelHeader(
|
|
510
|
-
measure,
|
|
511
|
-
|
|
537
|
+
measure,
|
|
538
|
+
kind,
|
|
539
|
+
channelName,
|
|
540
|
+
messageName,
|
|
541
|
+
contentType,
|
|
542
|
+
correlationId,
|
|
543
|
+
deadline,
|
|
544
|
+
topic,
|
|
545
|
+
errorCode,
|
|
546
|
+
errorMessage,
|
|
547
|
+
source,
|
|
548
|
+
metadata,
|
|
549
|
+
flowId,
|
|
550
|
+
flowOrigin
|
|
512
551
|
);
|
|
513
552
|
const result = Buffer.alloc(measure.byteLength);
|
|
514
553
|
const writer = new ChannelHeaderWriter(result);
|
|
515
554
|
writeChannelHeader(
|
|
516
|
-
writer,
|
|
517
|
-
|
|
555
|
+
writer,
|
|
556
|
+
kind,
|
|
557
|
+
channelName,
|
|
558
|
+
messageName,
|
|
559
|
+
contentType,
|
|
560
|
+
correlationId,
|
|
561
|
+
deadline,
|
|
562
|
+
topic,
|
|
563
|
+
errorCode,
|
|
564
|
+
errorMessage,
|
|
565
|
+
source,
|
|
566
|
+
metadata,
|
|
567
|
+
flowId,
|
|
568
|
+
flowOrigin
|
|
518
569
|
);
|
|
519
570
|
return result;
|
|
520
571
|
}
|
|
@@ -614,13 +665,27 @@ class ChannelHeaderWriter {
|
|
|
614
665
|
const code = value.charCodeAt(index);
|
|
615
666
|
let escaped: string | undefined;
|
|
616
667
|
switch (code) {
|
|
617
|
-
case 0x08:
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
case
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
case
|
|
668
|
+
case 0x08:
|
|
669
|
+
escaped = '\\b';
|
|
670
|
+
break;
|
|
671
|
+
case 0x09:
|
|
672
|
+
escaped = '\\t';
|
|
673
|
+
break;
|
|
674
|
+
case 0x0a:
|
|
675
|
+
escaped = '\\n';
|
|
676
|
+
break;
|
|
677
|
+
case 0x0c:
|
|
678
|
+
escaped = '\\f';
|
|
679
|
+
break;
|
|
680
|
+
case 0x0d:
|
|
681
|
+
escaped = '\\r';
|
|
682
|
+
break;
|
|
683
|
+
case 0x22:
|
|
684
|
+
escaped = '\\"';
|
|
685
|
+
break;
|
|
686
|
+
case 0x5c:
|
|
687
|
+
escaped = '\\\\';
|
|
688
|
+
break;
|
|
624
689
|
default:
|
|
625
690
|
if (code < 0x20) {
|
|
626
691
|
escaped = `\\u00${code.toString(16).padStart(2, '0')}`;
|
|
@@ -647,10 +712,14 @@ class ChannelHeaderWriter {
|
|
|
647
712
|
|
|
648
713
|
function encodeFlowOrigin(origin: ZLinkFlowOrigin): number {
|
|
649
714
|
switch (origin) {
|
|
650
|
-
case 'Inbound':
|
|
651
|
-
|
|
652
|
-
case '
|
|
653
|
-
|
|
715
|
+
case 'Inbound':
|
|
716
|
+
return 1;
|
|
717
|
+
case 'Timer':
|
|
718
|
+
return 2;
|
|
719
|
+
case 'Application':
|
|
720
|
+
return 3;
|
|
721
|
+
case 'Lifecycle':
|
|
722
|
+
return 4;
|
|
654
723
|
}
|
|
655
724
|
}
|
|
656
725
|
|
|
@@ -665,9 +734,13 @@ export function decodeChannelHeader(
|
|
|
665
734
|
}
|
|
666
735
|
|
|
667
736
|
function parseWireJson(payload: string, schema?: ZLinkJsonSchema): unknown {
|
|
668
|
-
return parseFrameworkJsonV1(
|
|
669
|
-
|
|
670
|
-
|
|
737
|
+
return parseFrameworkJsonV1(
|
|
738
|
+
payload,
|
|
739
|
+
{
|
|
740
|
+
rejectPropertyName: isPrototypeKey
|
|
741
|
+
},
|
|
742
|
+
schema
|
|
743
|
+
);
|
|
671
744
|
}
|
|
672
745
|
|
|
673
746
|
function parseChannelHeaderBytes(payload: Buffer): unknown {
|
|
@@ -765,9 +838,16 @@ class CanonicalChannelHeaderReader {
|
|
|
765
838
|
const digit = this.bytes[this.index++];
|
|
766
839
|
if (!isHexDigit(digit)) return undefined;
|
|
767
840
|
}
|
|
768
|
-
} else if (
|
|
769
|
-
|
|
770
|
-
|
|
841
|
+
} else if (
|
|
842
|
+
escaped !== 0x22 &&
|
|
843
|
+
escaped !== 0x5c &&
|
|
844
|
+
escaped !== 0x2f &&
|
|
845
|
+
escaped !== 0x62 &&
|
|
846
|
+
escaped !== 0x66 &&
|
|
847
|
+
escaped !== 0x6e &&
|
|
848
|
+
escaped !== 0x72 &&
|
|
849
|
+
escaped !== 0x74
|
|
850
|
+
) {
|
|
771
851
|
return undefined;
|
|
772
852
|
}
|
|
773
853
|
}
|
|
@@ -805,12 +885,16 @@ class CanonicalChannelHeaderReader {
|
|
|
805
885
|
}
|
|
806
886
|
|
|
807
887
|
function isHexDigit(value: number): boolean {
|
|
808
|
-
return (
|
|
809
|
-
|
|
810
|
-
|
|
888
|
+
return (
|
|
889
|
+
(value >= 0x30 && value <= 0x39) ||
|
|
890
|
+
(value >= 0x41 && value <= 0x46) ||
|
|
891
|
+
(value >= 0x61 && value <= 0x66)
|
|
892
|
+
);
|
|
811
893
|
}
|
|
812
894
|
|
|
813
|
-
function schemaForInboundChannelEnvelope(
|
|
895
|
+
function schemaForInboundChannelEnvelope(
|
|
896
|
+
header: ZLinkChannelEnvelopeHeader
|
|
897
|
+
): ZLinkJsonSchema | undefined {
|
|
814
898
|
const contract = readZLinkPacketJsonContract(header.messageName);
|
|
815
899
|
return header.kind === ZLinkChannelMessageKind.Response ? contract?.reply : contract?.payload;
|
|
816
900
|
}
|
|
@@ -834,7 +918,9 @@ function validateChannelHeader(value: unknown, flowEnabled = true): ZLinkChannel
|
|
|
834
918
|
const flowId = flowEnabled ? optionalFlowId(header.flowId) : undefined;
|
|
835
919
|
const flowOrigin = flowEnabled ? optionalFlowOrigin(header.flowOrigin) : undefined;
|
|
836
920
|
if ((flowId === undefined) !== (flowOrigin === undefined)) {
|
|
837
|
-
throw new ZLinkConfigurationException(
|
|
921
|
+
throw new ZLinkConfigurationException(
|
|
922
|
+
'Channel envelope flowId and flowOrigin must both be present or absent.'
|
|
923
|
+
);
|
|
838
924
|
}
|
|
839
925
|
const correlationId = requireNullableString(header.correlationId, 'correlationId');
|
|
840
926
|
validateCorrelationForKind(kind, correlationId);
|
|
@@ -844,9 +930,14 @@ function validateChannelHeader(value: unknown, flowEnabled = true): ZLinkChannel
|
|
|
844
930
|
requireNullableString(header.topic, 'topic');
|
|
845
931
|
// Parsing already gives this receive operation an owned object. Validate
|
|
846
932
|
// and normalize it here instead of allocating a second header per record.
|
|
847
|
-
header.errorCode =
|
|
848
|
-
|
|
849
|
-
header.
|
|
933
|
+
header.errorCode =
|
|
934
|
+
header.errorCode === undefined ? null : requireNullableString(header.errorCode, 'errorCode');
|
|
935
|
+
header.errorMessage =
|
|
936
|
+
header.errorMessage === undefined
|
|
937
|
+
? null
|
|
938
|
+
: requireNullableString(header.errorMessage, 'errorMessage');
|
|
939
|
+
header.source =
|
|
940
|
+
header.source === undefined ? undefined : requireNullableString(header.source, 'source');
|
|
850
941
|
header.metadata = requireApplicationMetadata(header.metadata);
|
|
851
942
|
header.flowId = flowId;
|
|
852
943
|
header.flowOrigin = flowOrigin;
|
|
@@ -879,9 +970,11 @@ function validateCorrelationForKind(
|
|
|
879
970
|
kind: ZLinkChannelMessageKind,
|
|
880
971
|
correlationId: string | null
|
|
881
972
|
): void {
|
|
882
|
-
if (
|
|
883
|
-
|
|
884
|
-
|
|
973
|
+
if (
|
|
974
|
+
kind === ZLinkChannelMessageKind.Request ||
|
|
975
|
+
kind === ZLinkChannelMessageKind.Response ||
|
|
976
|
+
kind === ZLinkChannelMessageKind.Error
|
|
977
|
+
) {
|
|
885
978
|
if (correlationId === null) {
|
|
886
979
|
throw new ZLinkConfigurationException(
|
|
887
980
|
`Channel ${channelKindName(kind)} requires correlationId.`
|
|
@@ -908,17 +1001,24 @@ function validateCorrelationValue(correlationId: string): void {
|
|
|
908
1001
|
|
|
909
1002
|
function channelKindName(kind: ZLinkChannelMessageKind): string {
|
|
910
1003
|
switch (kind) {
|
|
911
|
-
case ZLinkChannelMessageKind.Request:
|
|
912
|
-
|
|
913
|
-
case ZLinkChannelMessageKind.
|
|
914
|
-
|
|
915
|
-
case ZLinkChannelMessageKind.
|
|
1004
|
+
case ZLinkChannelMessageKind.Request:
|
|
1005
|
+
return 'request';
|
|
1006
|
+
case ZLinkChannelMessageKind.Response:
|
|
1007
|
+
return 'response';
|
|
1008
|
+
case ZLinkChannelMessageKind.Command:
|
|
1009
|
+
return 'send';
|
|
1010
|
+
case ZLinkChannelMessageKind.Publish:
|
|
1011
|
+
return 'publish';
|
|
1012
|
+
case ZLinkChannelMessageKind.Error:
|
|
1013
|
+
return 'error';
|
|
916
1014
|
}
|
|
917
1015
|
}
|
|
918
1016
|
|
|
919
1017
|
const EMPTY_APPLICATION_METADATA: Readonly<Record<string, string>> = Object.freeze({});
|
|
920
1018
|
|
|
921
|
-
function applicationMetadataRecord(
|
|
1019
|
+
function applicationMetadataRecord(
|
|
1020
|
+
metadata: ReadonlyMap<string, string>
|
|
1021
|
+
): Readonly<Record<string, string>> {
|
|
922
1022
|
// The common case carries no metadata; skip the record + JSON.stringify
|
|
923
1023
|
// byte-limit walk entirely.
|
|
924
1024
|
if (metadata.size === 0) return EMPTY_APPLICATION_METADATA;
|
|
@@ -932,7 +1032,9 @@ function applicationMetadataRecord(metadata: ReadonlyMap<string, string>): Reado
|
|
|
932
1032
|
record[key] = value;
|
|
933
1033
|
}
|
|
934
1034
|
if (Buffer.byteLength(JSON.stringify(record), 'utf8') > 1024) {
|
|
935
|
-
throw new ZLinkConfigurationException(
|
|
1035
|
+
throw new ZLinkConfigurationException(
|
|
1036
|
+
'Channel application metadata exceeds the 1024-byte limit.'
|
|
1037
|
+
);
|
|
936
1038
|
}
|
|
937
1039
|
return Object.freeze(record);
|
|
938
1040
|
}
|
|
@@ -969,10 +1071,14 @@ function requireFlowId(value: unknown): string {
|
|
|
969
1071
|
|
|
970
1072
|
function requireFlowOrigin(value: unknown): ZLinkFlowOrigin {
|
|
971
1073
|
switch (value) {
|
|
972
|
-
case 1:
|
|
973
|
-
|
|
974
|
-
case
|
|
975
|
-
|
|
1074
|
+
case 1:
|
|
1075
|
+
return 'Inbound';
|
|
1076
|
+
case 2:
|
|
1077
|
+
return 'Timer';
|
|
1078
|
+
case 3:
|
|
1079
|
+
return 'Application';
|
|
1080
|
+
case 4:
|
|
1081
|
+
return 'Lifecycle';
|
|
976
1082
|
}
|
|
977
1083
|
throw new ZLinkConfigurationException('Channel envelope flowOrigin is invalid.');
|
|
978
1084
|
}
|
|
@@ -4,7 +4,10 @@ import {
|
|
|
4
4
|
requestResultToPublicErrorKind
|
|
5
5
|
} from '../framework-errors-internal';
|
|
6
6
|
import type { Message } from '../../contracts/Common/Message';
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
type ZLinkBackendMessageLike as MessageLike,
|
|
9
|
+
isZLinkBackendResultError
|
|
10
|
+
} from '../backend/runtime-values';
|
|
8
11
|
import { ZLinkConfigurationException } from '../configuration';
|
|
9
12
|
import { ZLinkFrameworkException } from '../../contracts';
|
|
10
13
|
|
|
@@ -35,7 +38,9 @@ export function appendParts<TNext extends ZLinkMultipartOperation<TNext>>(
|
|
|
35
38
|
parts: readonly MessageLike[]
|
|
36
39
|
): TNext {
|
|
37
40
|
if (parts.length === 0) {
|
|
38
|
-
throw new ZLinkConfigurationException(
|
|
41
|
+
throw new ZLinkConfigurationException(
|
|
42
|
+
'Channel multipart envelope must contain at least one part.'
|
|
43
|
+
);
|
|
39
44
|
}
|
|
40
45
|
let current: TNext = operation.message(parts[0]);
|
|
41
46
|
for (let index = 1; index < parts.length; index++) {
|
|
@@ -44,9 +49,12 @@ export function appendParts<TNext extends ZLinkMultipartOperation<TNext>>(
|
|
|
44
49
|
return current;
|
|
45
50
|
}
|
|
46
51
|
|
|
47
|
-
export async function submitRequestOperation(
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
export async function submitRequestOperation(
|
|
53
|
+
operation: {
|
|
54
|
+
submit(): Promise<readonly Message[]>;
|
|
55
|
+
},
|
|
56
|
+
label: string
|
|
57
|
+
): Promise<readonly Message[]> {
|
|
50
58
|
try {
|
|
51
59
|
return await operation.submit();
|
|
52
60
|
} catch (error) {
|