@zlink-systems/framework 0.30.3 → 0.32.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/ZLinkActor.d.ts +2 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
- package/dist/contracts/Actors/index.d.ts +1 -0
- package/dist/contracts/Actors/index.js +1 -0
- package/dist/contracts/Common/CoreTypes.d.ts +1 -0
- package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
- package/dist/contracts/Common/HandlerMessageType.js +41 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
- package/dist/contracts/Common/ZLinkMessage.js +11 -7
- package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
- package/dist/contracts/Common/encoded-payload-storage.js +4 -16
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/payload-slab.d.ts +4 -0
- package/dist/contracts/Common/payload-slab.js +30 -0
- package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
- package/dist/contracts/Handlers/Contexts.d.ts +1 -0
- package/dist/contracts/Locations/Authority.d.ts +2 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.js +23 -1
- package/dist/nest-integration.d.ts +1 -0
- package/dist/nest-integration.js +3 -1
- package/dist/runtime/actors/actor-client.d.ts +6 -2
- package/dist/runtime/actors/actor-client.js +120 -82
- package/dist/runtime/actors/actor-context.js +16 -5
- package/dist/runtime/actors/actor-execution-context.js +2 -2
- package/dist/runtime/actors/actor-handoff.d.ts +12 -1
- package/dist/runtime/actors/actor-handoff.js +79 -34
- package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
- package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
- package/dist/runtime/actors/actor-local-native-join.js +19 -17
- package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
- package/dist/runtime/actors/actor-remote-joiner.js +4 -4
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
- package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
- package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
- package/dist/runtime/admission.d.ts +6 -4
- package/dist/runtime/admission.js +21 -10
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
- package/dist/runtime/backend/contracts/index.d.ts +26 -10
- package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
- package/dist/runtime/backend/mesh-completion-table.js +84 -20
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
- package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
- package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
- package/dist/runtime/channels/channel-clients.js +3 -3
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
- package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
- package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
- package/dist/runtime/channels/channel-dispatch-services.js +7 -6
- package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
- package/dist/runtime/channels/channel-dispatchers.js +57 -36
- package/dist/runtime/channels/channel-envelope.d.ts +2 -2
- package/dist/runtime/channels/channel-envelope.js +609 -83
- package/dist/runtime/channels/channel-multipart.d.ts +1 -0
- package/dist/runtime/channels/channel-multipart.js +10 -6
- package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
- package/dist/runtime/channels/channel-outbound-operations.js +107 -105
- package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
- package/dist/runtime/channels/channel-receive-loops.js +126 -90
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
- package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
- package/dist/runtime/channels/channel-runtime-manager.js +32 -14
- package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
- package/dist/runtime/channels/channel-socket-registry.js +9 -1
- package/dist/runtime/channels/channel-transports.d.ts +23 -16
- package/dist/runtime/channels/channel-transports.js +139 -119
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
- package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
- package/dist/runtime/channels/local-spot-route-transport.js +15 -18
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
- package/dist/runtime/channels/source-spot-router.d.ts +6 -3
- package/dist/runtime/channels/source-spot-router.js +34 -23
- package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
- package/dist/runtime/channels/spot-node-route-transport.js +23 -17
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
- package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
- package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
- package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
- package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
- package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
- package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
- package/dist/runtime/diagnostics/message-flow-record.js +228 -0
- package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
- package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
- package/dist/runtime/diagnostics/message-flow.js +42 -290
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
- package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
- package/dist/runtime/execution/index.d.ts +1 -0
- package/dist/runtime/execution/index.js +6 -3
- package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
- package/dist/runtime/execution/serial-execution-queue.js +75 -71
- package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
- package/dist/runtime/foundation/durable-service-request.js +158 -73
- package/dist/runtime/foundation/operation-registry.d.ts +33 -3
- package/dist/runtime/foundation/operation-registry.js +272 -33
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
- package/dist/runtime/foundation/request-runtime.d.ts +17 -0
- package/dist/runtime/foundation/request-runtime.js +163 -0
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +6 -0
- package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
- package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
- package/dist/runtime/foundation/service-mailbox.js +4 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
- package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
- package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
- package/dist/runtime/foundation/service-stateful-registry.js +38 -17
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
- package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
- package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
- package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-topology-registry.js +13 -3
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
- package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
- package/dist/runtime/host/actor-packet-relay.js +58 -57
- package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
- package/dist/runtime/host/application-job-queue.d.ts +7 -5
- package/dist/runtime/host/application-job-queue.js +33 -21
- package/dist/runtime/host/bound-session-relay.js +0 -1
- package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
- package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
- package/dist/runtime/host/entry-actor-runtime.js +2 -2
- package/dist/runtime/host/index.d.ts +106 -37
- package/dist/runtime/host/index.js +303 -151
- package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
- package/dist/runtime/host/location-runtime-owner.js +1 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
- package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
- package/dist/runtime/host/spot-address-transport.d.ts +3 -0
- package/dist/runtime/host/spot-address-transport.js +73 -76
- package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
- package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
- package/dist/runtime/internal-observation.d.ts +1 -0
- package/dist/runtime/internal-observation.js +5 -0
- package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
- package/dist/runtime/locations/actor-location-claims.js +15 -6
- package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
- package/dist/runtime/locations/auto-connect-loop.js +25 -19
- package/dist/runtime/locations/auto-connect-planner.js +2 -5
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
- package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.js +15 -5
- package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
- package/dist/runtime/locations/in-memory-location-store.js +1 -38
- package/dist/runtime/locations/lifecycle.d.ts +1 -1
- package/dist/runtime/locations/lifecycle.js +2 -2
- package/dist/runtime/locations/location-store-repository.d.ts +0 -1
- package/dist/runtime/locations/location-store-repository.js +163 -246
- package/dist/runtime/locations/resolvers.d.ts +8 -1
- package/dist/runtime/locations/resolvers.js +16 -2
- package/dist/runtime/locations/runtime.d.ts +3 -3
- package/dist/runtime/locations/runtime.js +12 -16
- package/dist/runtime/messaging/creation-payload-codec.js +8 -7
- package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
- package/dist/runtime/messaging/framework-json-v1.js +6 -2
- package/dist/runtime/messaging/payload-codec.js +21 -35
- package/dist/runtime/messaging/request-deadline.d.ts +4 -2
- package/dist/runtime/messaging/request-deadline.js +40 -25
- package/dist/runtime/messaging/request-result.d.ts +14 -1
- package/dist/runtime/messaging/request-result.js +74 -13
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
- package/dist/runtime/spots/index.d.ts +28 -7
- package/dist/runtime/spots/index.js +31 -6
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
- package/dist/runtime/spots/spot-activation-registry.js +13 -8
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
- package/dist/runtime/spots/spot-activation-state.js +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
- package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
- package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
- package/dist/runtime/spots/spot-actor-membership.js +3 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
- package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
- package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
- package/dist/runtime/spots/spot-entry-activation.js +7 -12
- package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
- package/dist/runtime/spots/spot-handler-registry.js +31 -15
- package/dist/runtime/spots/spot-manager-public.js +3 -2
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
- package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
- package/dist/runtime/spots/spot-outbound.d.ts +8 -2
- package/dist/runtime/spots/spot-outbound.js +5 -5
- package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
- package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
- package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
- package/dist/runtime/spots/spot-timer.d.ts +1 -1
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
- package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
- package/dist/runtime/streams/bound-session-service.js +6 -7
- package/dist/runtime/streams/index.d.ts +3 -3
- package/dist/runtime/streams/index.js +22 -2
- package/dist/runtime/streams/managed-stream.js +2 -1
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +3 -9
- package/dist/runtime/streams/session-context.d.ts +2 -2
- package/dist/runtime/streams/session-context.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
- package/dist/runtime/streams/stream-session-runtime.js +64 -33
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActor.ts +6 -0
- package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
- package/src/contracts/Actors/index.ts +1 -0
- package/src/contracts/Common/CoreTypes.ts +1 -0
- package/src/contracts/Common/HandlerMessageType.ts +50 -0
- package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
- package/src/contracts/Common/ZLinkMessage.ts +11 -7
- package/src/contracts/Common/encoded-payload-storage.ts +4 -16
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Common/payload-slab.ts +29 -0
- package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
- package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
- package/src/contracts/Handlers/Contexts.ts +1 -0
- package/src/contracts/Locations/Authority.ts +7 -1
- package/src/internal.ts +17 -0
- package/src/nest-integration.ts +1 -0
- package/src/runtime/actors/actor-client.ts +257 -163
- package/src/runtime/actors/actor-context.ts +26 -14
- package/src/runtime/actors/actor-execution-context.ts +2 -2
- package/src/runtime/actors/actor-handoff.ts +86 -51
- package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
- package/src/runtime/actors/actor-local-native-join.ts +38 -17
- package/src/runtime/actors/actor-mailbox.ts +1 -1
- package/src/runtime/actors/actor-remote-joiner.ts +8 -4
- package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
- package/src/runtime/actors/actor-routed-json-request.ts +3 -0
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
- package/src/runtime/actors/actor-runtime-state.ts +1 -1
- package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
- package/src/runtime/admission.ts +42 -15
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
- package/src/runtime/backend/contracts/index.ts +77 -10
- package/src/runtime/backend/mesh-completion-table.ts +106 -15
- package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
- package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
- package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
- package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
- package/src/runtime/backend/raw-binding-port.ts +13 -5
- package/src/runtime/channels/channel-clients.ts +26 -11
- package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
- package/src/runtime/channels/channel-dispatch-services.ts +7 -12
- package/src/runtime/channels/channel-dispatchers.ts +93 -39
- package/src/runtime/channels/channel-envelope.ts +680 -144
- package/src/runtime/channels/channel-multipart.ts +17 -13
- package/src/runtime/channels/channel-outbound-operations.ts +204 -178
- package/src/runtime/channels/channel-receive-loops.ts +160 -107
- package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
- package/src/runtime/channels/channel-runtime-manager.ts +74 -27
- package/src/runtime/channels/channel-socket-registry.ts +20 -5
- package/src/runtime/channels/channel-transports.ts +414 -287
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
- package/src/runtime/channels/local-spot-route-transport.ts +27 -29
- package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
- package/src/runtime/channels/source-spot-router.ts +75 -38
- package/src/runtime/channels/spot-node-route-transport.ts +67 -37
- package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
- package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
- package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
- package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
- package/src/runtime/diagnostics/message-flow-record.ts +295 -0
- package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
- package/src/runtime/diagnostics/message-flow.ts +49 -362
- package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
- package/src/runtime/execution/index.ts +6 -0
- package/src/runtime/execution/serial-execution-queue.ts +94 -96
- package/src/runtime/foundation/durable-service-request.ts +212 -89
- package/src/runtime/foundation/operation-registry.ts +287 -38
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
- package/src/runtime/foundation/request-runtime.ts +227 -0
- package/src/runtime/foundation/service-discovery-registry.ts +7 -0
- package/src/runtime/foundation/service-liveness-registry.ts +1 -1
- package/src/runtime/foundation/service-mailbox.ts +7 -2
- package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
- package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
- package/src/runtime/foundation/service-stateful-registry.ts +52 -19
- package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
- package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
- package/src/runtime/foundation/service-topology-registry.ts +21 -3
- package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
- package/src/runtime/host/actor-packet-relay.ts +160 -156
- package/src/runtime/host/actor-placement-coordinator.ts +1 -1
- package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
- package/src/runtime/host/actor-transfer-runtime.ts +3 -3
- package/src/runtime/host/application-job-queue.ts +56 -27
- package/src/runtime/host/bound-session-relay.ts +0 -1
- package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
- package/src/runtime/host/entry-actor-runtime.ts +14 -6
- package/src/runtime/host/index.ts +388 -113
- package/src/runtime/host/location-runtime-owner.ts +3 -3
- package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
- package/src/runtime/host/spot-address-transport.ts +110 -95
- package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
- package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
- package/src/runtime/internal-observation.ts +2 -0
- package/src/runtime/locations/actor-location-claims.ts +42 -16
- package/src/runtime/locations/auto-connect-loop.ts +24 -16
- package/src/runtime/locations/auto-connect-planner.ts +2 -5
- package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
- package/src/runtime/locations/in-memory-authority-store.ts +27 -7
- package/src/runtime/locations/in-memory-location-store.ts +1 -74
- package/src/runtime/locations/lifecycle.ts +4 -2
- package/src/runtime/locations/location-store-repository.ts +228 -308
- package/src/runtime/locations/resolvers.ts +20 -8
- package/src/runtime/locations/runtime.ts +16 -28
- package/src/runtime/messaging/creation-payload-codec.ts +12 -10
- package/src/runtime/messaging/framework-json-v1.ts +10 -1
- package/src/runtime/messaging/payload-codec.ts +50 -75
- package/src/runtime/messaging/request-deadline.ts +47 -39
- package/src/runtime/messaging/request-result.ts +88 -17
- 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/index.ts +57 -10
- package/src/runtime/spots/spot-activation-registry.ts +12 -8
- package/src/runtime/spots/spot-activation-state.ts +2 -0
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
- package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
- package/src/runtime/spots/spot-actor-membership.ts +8 -5
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
- package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
- package/src/runtime/spots/spot-entry-activation.ts +25 -35
- package/src/runtime/spots/spot-handler-registry.ts +72 -15
- package/src/runtime/spots/spot-manager-public.ts +4 -2
- package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
- package/src/runtime/spots/spot-outbound.ts +26 -10
- package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
- package/src/runtime/spots/spot-runtime-ports.ts +5 -2
- package/src/runtime/spots/spot-serial-executor.ts +1 -1
- package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
- package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
- package/src/runtime/spots/spot-timer.ts +1 -1
- package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
- package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
- package/src/runtime/streams/bound-session-service.ts +10 -7
- package/src/runtime/streams/index.ts +30 -4
- package/src/runtime/streams/managed-stream.ts +2 -1
- package/src/runtime/streams/session-calls.ts +9 -14
- package/src/runtime/streams/session-context.ts +6 -11
- package/src/runtime/streams/stream-session-runtime.ts +79 -40
- package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
- package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
- package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { OperationObserver } from '../../foundation/operation-registry';
|
|
2
|
+
import { RequestRuntime } from '../../foundation/request-runtime';
|
|
3
|
+
import type { PendingOperation } from '../../foundation/operation-registry';
|
|
1
4
|
import { ZLINK_DEFAULT_PUBLIC_WEIGHT } from '../../../contracts/Configuration/RegistrationBuilderPolicy';
|
|
2
5
|
import type { Socket } from '@zlink-systems/zlink';
|
|
3
6
|
import type { ZLinkBackendObject } from '../contracts';
|
|
@@ -7,6 +10,7 @@ import {
|
|
|
7
10
|
isContextTerminatedError,
|
|
8
11
|
isRouteRecvRetryable,
|
|
9
12
|
submitBindingRequest,
|
|
13
|
+
closeBindingReply,
|
|
10
14
|
submitBindingPublish,
|
|
11
15
|
submitBindingReply,
|
|
12
16
|
submitBindingAsyncSend,
|
|
@@ -49,11 +53,40 @@ export function wrapSocket<T extends { close(): void }>(
|
|
|
49
53
|
pollCompletion === undefined
|
|
50
54
|
? undefined
|
|
51
55
|
: new ZLinkNodeEventLoopPoller(nativeInstance as unknown as Socket, pollCompletion, () => {});
|
|
56
|
+
const requests = new RequestRuntime();
|
|
57
|
+
const submitSocketRequest = (
|
|
58
|
+
operation: ZLinkBindingRequestOperation,
|
|
59
|
+
payload: unknown,
|
|
60
|
+
timeoutMs: number | undefined,
|
|
61
|
+
recordReceived: (() => void) | undefined,
|
|
62
|
+
onAdmitted: (() => void) | undefined,
|
|
63
|
+
requestOperation: PendingOperation<unknown> | undefined,
|
|
64
|
+
receiver: OperationObserver<unknown, unknown> | undefined
|
|
65
|
+
): Promise<readonly unknown[]> => {
|
|
66
|
+
const pending = requests.begin(timeoutMs, undefined, requestOperation);
|
|
67
|
+
submitBindingRequest(
|
|
68
|
+
operation,
|
|
69
|
+
payload,
|
|
70
|
+
timeoutMs,
|
|
71
|
+
recordReceived,
|
|
72
|
+
onAdmitted,
|
|
73
|
+
pending,
|
|
74
|
+
receiver ?? {
|
|
75
|
+
operationCompleted: (_id, parts) => {
|
|
76
|
+
if (!pending.reply(parts))
|
|
77
|
+
closeBindingReply(parts as readonly import('@zlink-systems/zlink').Message[]);
|
|
78
|
+
},
|
|
79
|
+
operationFailed: (_id, error) => pending.replyFailure(error)
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
return pending.promise as Promise<readonly unknown[]>;
|
|
83
|
+
};
|
|
52
84
|
const adapter = {
|
|
53
85
|
nativeInstance,
|
|
54
86
|
receiveAdmission: undefined as
|
|
55
87
|
import('../../foundation/service-liveness-registry').ServiceLivenessConnection | undefined,
|
|
56
88
|
async dispose(): Promise<void> {
|
|
89
|
+
requests.close();
|
|
57
90
|
eventLoopPoller?.dispose();
|
|
58
91
|
closeBindingHandle(nativeInstance);
|
|
59
92
|
},
|
|
@@ -208,34 +241,42 @@ export function wrapSocket<T extends { close(): void }>(
|
|
|
208
241
|
},
|
|
209
242
|
request(...args: unknown[]): unknown {
|
|
210
243
|
if (hasRoutedPeer) {
|
|
211
|
-
const [routingId, payload, timeoutMs, onAdmitted] = args as [
|
|
244
|
+
const [routingId, payload, timeoutMs, onAdmitted, requestOperation, receiver] = args as [
|
|
212
245
|
unknown,
|
|
213
246
|
unknown,
|
|
214
247
|
number | undefined,
|
|
215
|
-
(() => void) | undefined
|
|
248
|
+
(() => void) | undefined,
|
|
249
|
+
PendingOperation<unknown> | undefined,
|
|
250
|
+
OperationObserver<unknown, unknown> | undefined
|
|
216
251
|
];
|
|
217
|
-
return
|
|
252
|
+
return submitSocketRequest(
|
|
218
253
|
(
|
|
219
254
|
nativeInstance as T & { request(routingId: unknown): ZLinkBindingRequestOperation }
|
|
220
255
|
).request(toNativeRoutingId(routingId)),
|
|
221
256
|
payload,
|
|
222
257
|
timeoutMs,
|
|
223
258
|
undefined,
|
|
224
|
-
onAdmitted
|
|
259
|
+
onAdmitted,
|
|
260
|
+
requestOperation,
|
|
261
|
+
receiver
|
|
225
262
|
);
|
|
226
263
|
}
|
|
227
264
|
if (hasRequest) {
|
|
228
|
-
const [payload, timeoutMs, onAdmitted] = args as [
|
|
265
|
+
const [payload, timeoutMs, onAdmitted, requestOperation, receiver] = args as [
|
|
229
266
|
unknown,
|
|
230
267
|
number | undefined,
|
|
231
|
-
(() => void) | undefined
|
|
268
|
+
(() => void) | undefined,
|
|
269
|
+
PendingOperation<unknown> | undefined,
|
|
270
|
+
OperationObserver<unknown, unknown> | undefined
|
|
232
271
|
];
|
|
233
|
-
return
|
|
272
|
+
return submitSocketRequest(
|
|
234
273
|
(nativeInstance as T & { request(): ZLinkBindingRequestOperation }).request(),
|
|
235
274
|
payload,
|
|
236
275
|
timeoutMs,
|
|
237
276
|
adapter.receiveAdmission?.recordReceived,
|
|
238
|
-
onAdmitted
|
|
277
|
+
onAdmitted,
|
|
278
|
+
requestOperation,
|
|
279
|
+
receiver
|
|
239
280
|
);
|
|
240
281
|
}
|
|
241
282
|
throw new TypeError('Backend request requires a DEALER or ROUTER socket.');
|
|
@@ -315,9 +356,11 @@ export function wrapSocket<T extends { close(): void }>(
|
|
|
315
356
|
targetSpot: unknown,
|
|
316
357
|
payload: unknown,
|
|
317
358
|
timeoutMs?: number,
|
|
318
|
-
onAdmitted?: () => void
|
|
359
|
+
onAdmitted?: () => void,
|
|
360
|
+
requestOperation?: PendingOperation<unknown>,
|
|
361
|
+
receiver?: OperationObserver<unknown, unknown>
|
|
319
362
|
): Promise<readonly unknown[]> {
|
|
320
|
-
return
|
|
363
|
+
return submitSocketRequest(
|
|
321
364
|
(
|
|
322
365
|
nativeInstance as T & {
|
|
323
366
|
requestToSpot(targetRid: unknown, targetSpot: unknown): ZLinkBindingRequestOperation;
|
|
@@ -326,7 +369,9 @@ export function wrapSocket<T extends { close(): void }>(
|
|
|
326
369
|
payload,
|
|
327
370
|
timeoutMs,
|
|
328
371
|
undefined,
|
|
329
|
-
onAdmitted
|
|
372
|
+
onAdmitted,
|
|
373
|
+
requestOperation,
|
|
374
|
+
receiver
|
|
330
375
|
);
|
|
331
376
|
},
|
|
332
377
|
disconnectPeer(routingId: unknown): void {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ConnectionAttempt } from '@zlink-systems/zlink';
|
|
2
|
+
import type { OperationHandle } from '../foundation/operation-registry';
|
|
1
3
|
import type { SubmitResult } from './runtime-values';
|
|
2
4
|
|
|
3
5
|
export interface ZLinkRawSendSubmission {
|
|
@@ -14,7 +16,7 @@ export interface ZLinkRawReceivedRecord {
|
|
|
14
16
|
* record (Core ROUTER §10.1); 0n for a non-ROUTER receive. Equality only.
|
|
15
17
|
*/
|
|
16
18
|
readonly routeGeneration: bigint;
|
|
17
|
-
readonly reply?: (parts: readonly Uint8Array[]) => void;
|
|
19
|
+
readonly reply?: (parts: readonly (Uint8Array | string)[]) => void;
|
|
18
20
|
readonly parts: readonly Buffer[];
|
|
19
21
|
/** Releases the ordinary Framework-owned receive record exactly once. */
|
|
20
22
|
close(): void;
|
|
@@ -33,7 +35,9 @@ export interface ZLinkRawMonitorRecord {
|
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
export interface ZLinkRawSocketPort {
|
|
36
|
-
setReadableHandler(
|
|
38
|
+
setReadableHandler(
|
|
39
|
+
handler: (receiveReady: boolean, routeReady: boolean, connectReady: boolean) => void
|
|
40
|
+
): void;
|
|
37
41
|
bind(endpoint: string): void;
|
|
38
42
|
unbind(endpoint: string): void;
|
|
39
43
|
connect(endpoint: string): void;
|
|
@@ -63,16 +67,20 @@ export interface ZLinkRawRouterPort extends ZLinkRawSocketPort {
|
|
|
63
67
|
setRoutingId(routingId: string): void;
|
|
64
68
|
connectToRoutingId(routingId: string, endpoint: string): void;
|
|
65
69
|
send(targetRid: string, parts: readonly Uint8Array[]): Promise<void>;
|
|
66
|
-
request(
|
|
70
|
+
request<T>(
|
|
67
71
|
targetRid: string,
|
|
68
72
|
parts: readonly Uint8Array[],
|
|
69
73
|
timeoutMs: number,
|
|
74
|
+
onReply: (parts: readonly Buffer[]) => T,
|
|
75
|
+
onFailed: (error: unknown) => T,
|
|
70
76
|
recordReceived?: () => void,
|
|
71
|
-
onAdmitted?: () => void
|
|
72
|
-
|
|
77
|
+
onAdmitted?: () => void,
|
|
78
|
+
existing?: Pick<OperationHandle<unknown>, 'id' | 'deadlineMs'>
|
|
79
|
+
): Promise<T>;
|
|
73
80
|
receive(dontWait?: boolean): ZLinkRawReceivedRecord | undefined;
|
|
74
81
|
/** The selected route of every RID. The socket's one route observer calls it. */
|
|
75
82
|
routesSnapshot(): readonly ZLinkRawRouterRoute[];
|
|
83
|
+
connectionAttemptsSnapshot(): readonly ConnectionAttempt[];
|
|
76
84
|
}
|
|
77
85
|
|
|
78
86
|
export interface ZLinkRawDealerPort extends ZLinkRawSocketPort {
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../contracts/Configuration/Registration';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createZLinkRequest,
|
|
4
|
+
mapZLinkRequestReply,
|
|
5
|
+
prepareZLinkRequestReply,
|
|
6
|
+
identityRequestReply,
|
|
7
|
+
type ZLinkRequestResult
|
|
8
|
+
} from '../messaging/request-result';
|
|
3
9
|
import type { ZLinkRequest } from '../../contracts/Handlers/Attributes';
|
|
4
10
|
import type {
|
|
5
11
|
ZLinkChannelClient,
|
|
@@ -315,14 +321,23 @@ export class DefaultZLinkRouteClient implements ZLinkRouteClient {
|
|
|
315
321
|
() => {
|
|
316
322
|
this.requireSpotTransport();
|
|
317
323
|
},
|
|
318
|
-
(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
324
|
+
<TReply>(
|
|
325
|
+
_packetName: string | undefined,
|
|
326
|
+
timeoutMs: number | undefined,
|
|
327
|
+
metadata: ReadonlyMap<string, string>,
|
|
328
|
+
signal?: AbortSignal,
|
|
329
|
+
onAdmitted?: () => void
|
|
330
|
+
) =>
|
|
331
|
+
prepareZLinkRequestReply(
|
|
332
|
+
requestToSpotHandle<TReply>(this.requireSpotTransport(), spot, request, {
|
|
333
|
+
timeoutMs,
|
|
334
|
+
signal,
|
|
335
|
+
metadata,
|
|
336
|
+
onAdmitted,
|
|
337
|
+
spotRouterChannelIdForMesh: this.spotRouterChannelIdForMesh
|
|
338
|
+
}),
|
|
339
|
+
identityRequestReply
|
|
340
|
+
),
|
|
326
341
|
this.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
|
|
327
342
|
);
|
|
328
343
|
}
|
|
@@ -528,7 +543,7 @@ type ZLinkRequestSubmitter = <TReply>(
|
|
|
528
543
|
signal?: AbortSignal,
|
|
529
544
|
onAdmitted?: () => void,
|
|
530
545
|
message?: unknown
|
|
531
|
-
) =>
|
|
546
|
+
) => ZLinkRequestResult<TReply>;
|
|
532
547
|
|
|
533
548
|
class DefaultZLinkRequestCall implements ZLinkChannelRequestCall {
|
|
534
549
|
private timeoutMs?: number;
|
|
@@ -589,7 +604,7 @@ class DefaultZLinkRequestCall implements ZLinkChannelRequestCall {
|
|
|
589
604
|
undefined,
|
|
590
605
|
this.message
|
|
591
606
|
);
|
|
592
|
-
return turn.yieldFrameworkPromise(pending);
|
|
607
|
+
return turn.yieldFrameworkPromise(mapZLinkRequestReply(pending));
|
|
593
608
|
}
|
|
594
609
|
}
|
|
595
610
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ZLinkHandlerMessageType } from '../../contracts/Common/HandlerMessageType';
|
|
1
2
|
import type { ZLinkMeshDispatchAdmission } from '../admission';
|
|
2
3
|
import {
|
|
3
4
|
ZLinkFrameworkInternalErrorKind,
|
|
@@ -35,6 +36,7 @@ import type { ZLinkMalformedChannelHeaderInfo } from './channel-envelope-inspect
|
|
|
35
36
|
import type { ZLinkDispatchErrorReporter } from './dispatch-error-reporter';
|
|
36
37
|
import { createInboundFlow, runWithFlow } from '../diagnostics/flow-context';
|
|
37
38
|
import { releaseApplicationJobPermitBeforeHandler } from '../application-jobs/application-job-queue-scope';
|
|
39
|
+
import { resolveMessageTypeForDecode } from '../../contracts/Common/HandlerMessageType';
|
|
38
40
|
|
|
39
41
|
export interface ZLinkChannelDispatchPipelineOptions {
|
|
40
42
|
readonly dispatchErrors: ZLinkDispatchErrorReporter;
|
|
@@ -58,11 +60,12 @@ interface ZLinkChannelDispatchHandler<TContext extends ZLinkMessageContext, TRes
|
|
|
58
60
|
handle(payload: unknown, context: TContext): Promise<TResult> | TResult;
|
|
59
61
|
}
|
|
60
62
|
|
|
61
|
-
interface ZLinkOneWayDispatch<TContext extends ZLinkMessageContext> {
|
|
63
|
+
export interface ZLinkOneWayDispatch<TContext extends ZLinkMessageContext> {
|
|
62
64
|
readonly fields: ZLinkChannelDispatchFields;
|
|
63
65
|
readonly envelope: ZLinkChannelEnvelope;
|
|
64
66
|
readonly codecs?: ZLinkChannelEnvelopeCodecRegistry;
|
|
65
67
|
readonly handler?: ZLinkChannelDispatchHandler<TContext, void>;
|
|
68
|
+
readonly messageType?: ZLinkHandlerMessageType;
|
|
66
69
|
readonly context: TContext;
|
|
67
70
|
readonly signal?: AbortSignal;
|
|
68
71
|
}
|
|
@@ -72,6 +75,7 @@ export interface ZLinkRequestDispatch<TContext extends ZLinkMessageContext> {
|
|
|
72
75
|
readonly envelope: ZLinkChannelEnvelope;
|
|
73
76
|
readonly codecs?: ZLinkChannelEnvelopeCodecRegistry;
|
|
74
77
|
readonly handler?: ZLinkChannelDispatchHandler<TContext, unknown>;
|
|
78
|
+
readonly messageType?: ZLinkHandlerMessageType;
|
|
75
79
|
readonly context: TContext;
|
|
76
80
|
readonly signal?: AbortSignal;
|
|
77
81
|
readonly missingHandlerMessage: string;
|
|
@@ -80,10 +84,10 @@ export interface ZLinkRequestDispatch<TContext extends ZLinkMessageContext> {
|
|
|
80
84
|
}
|
|
81
85
|
|
|
82
86
|
export class ZLinkChannelDispatchPipeline {
|
|
83
|
-
|
|
87
|
+
readonly filters: readonly ZLinkHandlerFilter[];
|
|
84
88
|
private readonly unhandled: ZLinkUnhandledDispatchOptions;
|
|
85
89
|
|
|
86
|
-
constructor(
|
|
90
|
+
constructor(readonly options: ZLinkChannelDispatchPipelineOptions) {
|
|
87
91
|
this.filters = options.filters ?? [];
|
|
88
92
|
this.unhandled = options.unhandled ?? DEFAULT_UNHANDLED_DISPATCH;
|
|
89
93
|
}
|
|
@@ -98,12 +102,7 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
98
102
|
admit?: ZLinkMeshDispatchAdmission
|
|
99
103
|
): void | Promise<void> {
|
|
100
104
|
if (admit !== undefined) {
|
|
101
|
-
|
|
102
|
-
const record = dispatch;
|
|
103
|
-
return admit(
|
|
104
|
-
() => pipeline.dispatchOneWay(record),
|
|
105
|
-
(error) => pipeline.failOneWay(record.fields, error)
|
|
106
|
-
);
|
|
105
|
+
return admit(this.dispatchOneWay, this.failOneWay, this, dispatch);
|
|
107
106
|
}
|
|
108
107
|
this.trace(ZLinkMessageFlowOutcome.Received, dispatch.fields);
|
|
109
108
|
this.trace(ZLinkMessageFlowOutcome.Admitted, dispatch.fields);
|
|
@@ -112,17 +111,22 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
112
111
|
try {
|
|
113
112
|
invocation = this.invokeInFlow(dispatch, dispatch.handler);
|
|
114
113
|
} catch (error) {
|
|
115
|
-
this.failOneWay(
|
|
114
|
+
this.failOneWay(error, dispatch);
|
|
116
115
|
return;
|
|
117
116
|
}
|
|
118
117
|
if (!isPromiseLike(invocation)) {
|
|
119
118
|
this.completeOneWay(dispatch.fields, invocation);
|
|
120
119
|
return;
|
|
121
120
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
121
|
+
{
|
|
122
|
+
// Keep captures block-scoped so synchronous dispatch allocates no V8 context.
|
|
123
|
+
const pipeline = this;
|
|
124
|
+
const record = dispatch;
|
|
125
|
+
return Promise.resolve(invocation).then(
|
|
126
|
+
(value) => pipeline.completeOneWay(record.fields, value),
|
|
127
|
+
(error: unknown) => pipeline.failOneWay(error, record)
|
|
128
|
+
);
|
|
129
|
+
}
|
|
126
130
|
}
|
|
127
131
|
|
|
128
132
|
private async dispatchMissingOneWay(fields: ZLinkChannelDispatchFields): Promise<void> {
|
|
@@ -140,7 +144,8 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
140
144
|
}
|
|
141
145
|
}
|
|
142
146
|
|
|
143
|
-
private failOneWay(
|
|
147
|
+
private failOneWay(error: unknown, dispatch: ZLinkOneWayDispatch<ZLinkMessageContext>): void {
|
|
148
|
+
const fields = dispatch.fields;
|
|
144
149
|
this.report(fields, this.failureReason(error), ZLinkDispatchErrorAction.Drop, error);
|
|
145
150
|
}
|
|
146
151
|
|
|
@@ -154,12 +159,7 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
154
159
|
admit?: ZLinkMeshDispatchAdmission
|
|
155
160
|
): void | Promise<void> {
|
|
156
161
|
if (admit !== undefined) {
|
|
157
|
-
|
|
158
|
-
const record = dispatch;
|
|
159
|
-
return admit(
|
|
160
|
-
() => pipeline.dispatchRequest(record),
|
|
161
|
-
(error) => pipeline.failRequest(record, error)
|
|
162
|
-
);
|
|
162
|
+
return admit(this.dispatchRequest, this.failRequest, this, dispatch);
|
|
163
163
|
}
|
|
164
164
|
this.trace(ZLinkMessageFlowOutcome.Received, dispatch.fields);
|
|
165
165
|
this.trace(ZLinkMessageFlowOutcome.Admitted, dispatch.fields);
|
|
@@ -168,13 +168,17 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
168
168
|
try {
|
|
169
169
|
invocation = this.invokeInFlow(dispatch, dispatch.handler);
|
|
170
170
|
} catch (error) {
|
|
171
|
-
return this.failRequest(
|
|
171
|
+
return this.failRequest(error, dispatch);
|
|
172
172
|
}
|
|
173
173
|
if (!isPromiseLike(invocation)) return this.completeRequest(dispatch, invocation);
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
174
|
+
{
|
|
175
|
+
const pipeline = this;
|
|
176
|
+
const record = dispatch;
|
|
177
|
+
return Promise.resolve(invocation).then(
|
|
178
|
+
(value) => pipeline.completeRequest(record, value),
|
|
179
|
+
(error: unknown) => pipeline.failRequest(error, record)
|
|
180
|
+
);
|
|
181
|
+
}
|
|
178
182
|
}
|
|
179
183
|
|
|
180
184
|
private async dispatchMissingRequest<TContext extends ZLinkMessageContext>(
|
|
@@ -199,7 +203,7 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
199
203
|
}
|
|
200
204
|
}
|
|
201
205
|
|
|
202
|
-
|
|
206
|
+
invokeInFlow<TContext extends ZLinkMessageContext, TResult>(
|
|
203
207
|
dispatch: ZLinkOneWayDispatch<TContext> | ZLinkRequestDispatch<TContext>,
|
|
204
208
|
handler: ZLinkChannelDispatchHandler<TContext, TResult>
|
|
205
209
|
): unknown {
|
|
@@ -210,24 +214,8 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
210
214
|
undefined
|
|
211
215
|
);
|
|
212
216
|
return flow === undefined
|
|
213
|
-
? this.invoke(
|
|
214
|
-
|
|
215
|
-
dispatch.codecs,
|
|
216
|
-
handler,
|
|
217
|
-
dispatch.context,
|
|
218
|
-
dispatch.fields,
|
|
219
|
-
dispatch.signal
|
|
220
|
-
)
|
|
221
|
-
: runWithFlow(flow, () =>
|
|
222
|
-
this.invoke(
|
|
223
|
-
dispatch.envelope,
|
|
224
|
-
dispatch.codecs,
|
|
225
|
-
handler,
|
|
226
|
-
dispatch.context,
|
|
227
|
-
dispatch.fields,
|
|
228
|
-
dispatch.signal
|
|
229
|
-
)
|
|
230
|
-
);
|
|
217
|
+
? this.invoke(dispatch, handler)
|
|
218
|
+
: runWithFlow(flow, this.invoke.bind(this, dispatch, handler));
|
|
231
219
|
}
|
|
232
220
|
|
|
233
221
|
private completeRequest<TContext extends ZLinkMessageContext>(
|
|
@@ -236,11 +224,11 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
236
224
|
): void | Promise<void> {
|
|
237
225
|
if (invocation === HANDLER_FILTER_REJECTED) {
|
|
238
226
|
return this.failRequest(
|
|
239
|
-
dispatch,
|
|
240
227
|
createInternalFrameworkException(
|
|
241
228
|
ZLinkFrameworkInternalErrorKind.RequestRejected,
|
|
242
229
|
`A handler filter rejected '${this.options.channelName}:${dispatch.fields.packetName}'.`
|
|
243
|
-
)
|
|
230
|
+
),
|
|
231
|
+
dispatch
|
|
244
232
|
);
|
|
245
233
|
}
|
|
246
234
|
let written: void | Promise<void>;
|
|
@@ -254,10 +242,14 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
254
242
|
this.trace(ZLinkMessageFlowOutcome.Replied, dispatch.fields);
|
|
255
243
|
return;
|
|
256
244
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
245
|
+
{
|
|
246
|
+
const pipeline = this;
|
|
247
|
+
const record = dispatch;
|
|
248
|
+
return written.then(
|
|
249
|
+
() => pipeline.trace(ZLinkMessageFlowOutcome.Replied, record.fields),
|
|
250
|
+
(error: unknown) => pipeline.replyPathMissing(record.fields, error)
|
|
251
|
+
);
|
|
252
|
+
}
|
|
261
253
|
}
|
|
262
254
|
|
|
263
255
|
private replyPathMissing(fields: ZLinkChannelDispatchFields, error: unknown): void {
|
|
@@ -272,8 +264,8 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
272
264
|
}
|
|
273
265
|
|
|
274
266
|
private async failRequest<TContext extends ZLinkMessageContext>(
|
|
275
|
-
|
|
276
|
-
|
|
267
|
+
error: unknown,
|
|
268
|
+
dispatch: ZLinkRequestDispatch<TContext>
|
|
277
269
|
): Promise<void> {
|
|
278
270
|
try {
|
|
279
271
|
await dispatch.writeError(error);
|
|
@@ -338,27 +330,40 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
338
330
|
});
|
|
339
331
|
}
|
|
340
332
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
handler: ZLinkChannelDispatchHandler<TContext, TResult>,
|
|
345
|
-
context: TContext,
|
|
346
|
-
fields: ZLinkChannelDispatchFields,
|
|
347
|
-
signal?: AbortSignal
|
|
333
|
+
invoke<TContext extends ZLinkMessageContext, TResult>(
|
|
334
|
+
dispatch: ZLinkOneWayDispatch<TContext> | ZLinkRequestDispatch<TContext>,
|
|
335
|
+
handler: ZLinkChannelDispatchHandler<TContext, TResult>
|
|
348
336
|
):
|
|
349
337
|
| TResult
|
|
350
338
|
| undefined
|
|
351
339
|
| typeof HANDLER_FILTER_REJECTED
|
|
352
340
|
| Promise<TResult | undefined | typeof HANDLER_FILTER_REJECTED> {
|
|
353
|
-
|
|
341
|
+
const envelope = dispatch.envelope;
|
|
342
|
+
const codecs = dispatch.codecs;
|
|
343
|
+
const context = dispatch.context;
|
|
344
|
+
const fields = dispatch.fields;
|
|
345
|
+
const signal = dispatch.signal;
|
|
354
346
|
if (this.filters.length === 0) {
|
|
355
347
|
// Fast path for the dominant unfiltered dispatch: skip the filter
|
|
356
348
|
// context object and chain machinery entirely.
|
|
357
|
-
const payload = decodeChannelPayload(
|
|
349
|
+
const payload = decodeChannelPayload(
|
|
350
|
+
envelope,
|
|
351
|
+
codecs,
|
|
352
|
+
resolveMessageTypeForDecode(dispatch.messageType)
|
|
353
|
+
);
|
|
358
354
|
this.trace(ZLinkMessageFlowOutcome.Dispatched, fields);
|
|
355
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
359
356
|
return handler.handle(payload, context);
|
|
360
357
|
}
|
|
361
|
-
return this.invokeFiltered(
|
|
358
|
+
return this.invokeFiltered(
|
|
359
|
+
envelope,
|
|
360
|
+
codecs,
|
|
361
|
+
handler,
|
|
362
|
+
context,
|
|
363
|
+
fields,
|
|
364
|
+
dispatch.messageType,
|
|
365
|
+
signal
|
|
366
|
+
);
|
|
362
367
|
}
|
|
363
368
|
|
|
364
369
|
private async invokeFiltered<TContext extends ZLinkMessageContext, TResult>(
|
|
@@ -367,6 +372,7 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
367
372
|
handler: ZLinkChannelDispatchHandler<TContext, TResult>,
|
|
368
373
|
context: TContext,
|
|
369
374
|
fields: ZLinkChannelDispatchFields,
|
|
375
|
+
messageType?: ZLinkHandlerMessageType,
|
|
370
376
|
signal?: AbortSignal
|
|
371
377
|
): Promise<TResult | undefined | typeof HANDLER_FILTER_REJECTED> {
|
|
372
378
|
let value: TResult | undefined;
|
|
@@ -376,8 +382,13 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
376
382
|
async () => {
|
|
377
383
|
// Filters are the channel admission gate. Decode only after they have
|
|
378
384
|
// allowed the handler turn to proceed.
|
|
379
|
-
const payload = decodeChannelPayload(
|
|
385
|
+
const payload = decodeChannelPayload(
|
|
386
|
+
envelope,
|
|
387
|
+
codecs,
|
|
388
|
+
resolveMessageTypeForDecode(messageType)
|
|
389
|
+
);
|
|
380
390
|
this.trace(ZLinkMessageFlowOutcome.Dispatched, fields);
|
|
391
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
381
392
|
value = await handler.handle(payload, context);
|
|
382
393
|
},
|
|
383
394
|
signal
|
|
@@ -398,6 +409,7 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
398
409
|
contentType: context.contentType,
|
|
399
410
|
metadata: context.metadata,
|
|
400
411
|
correlationId: context.correlationId,
|
|
412
|
+
receivedAt: context.receivedAt,
|
|
401
413
|
dispatchKind
|
|
402
414
|
};
|
|
403
415
|
}
|
|
@@ -445,7 +457,7 @@ export class ZLinkChannelDispatchPipeline {
|
|
|
445
457
|
});
|
|
446
458
|
}
|
|
447
459
|
|
|
448
|
-
|
|
460
|
+
trace(outcome: ZLinkMessageFlowOutcome, fields: ZLinkChannelDispatchFields): void {
|
|
449
461
|
if (fields.messageKind === ZLinkDispatchMessageKind.Publish) return;
|
|
450
462
|
const flow = this.options.dispatchErrors.flow;
|
|
451
463
|
const tracePoint = flow.begin(outcome, undefined, fields.flowId);
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
type ZLinkMessageFlowModeCell
|
|
25
25
|
} from '../diagnostics';
|
|
26
26
|
import type { ZLinkRuntimeTaskErrorSink } from '../execution';
|
|
27
|
+
import { openTelemetryLease, type ZLinkTelemetryLease } from '../diagnostics/message-flow-delivery';
|
|
27
28
|
import { ZLinkDispatchErrorReporter } from './dispatch-error-reporter';
|
|
28
29
|
import { invokeZLinkHandlerFilters } from '../handlers';
|
|
29
30
|
import {
|
|
@@ -72,7 +73,8 @@ export class ZLinkChannelDispatchServices {
|
|
|
72
73
|
constructor(
|
|
73
74
|
private readonly registration: ZLinkFrameworkRegistration,
|
|
74
75
|
private readonly providerResolver?: ZLinkProviderResolver,
|
|
75
|
-
private readonly configuredMessageFlowModeCell?: ZLinkMessageFlowModeCell
|
|
76
|
+
private readonly configuredMessageFlowModeCell?: ZLinkMessageFlowModeCell,
|
|
77
|
+
private readonly telemetryLease: ZLinkTelemetryLease = openTelemetryLease()
|
|
76
78
|
) {
|
|
77
79
|
this.metricsValue = new ZLinkRuntimeMetrics(registration.metrics?.meterProvider);
|
|
78
80
|
}
|
|
@@ -90,13 +92,7 @@ export class ZLinkChannelDispatchServices {
|
|
|
90
92
|
if (existing !== undefined) {
|
|
91
93
|
return existing;
|
|
92
94
|
}
|
|
93
|
-
const reporter = new ZLinkDispatchErrorReporter(
|
|
94
|
-
undefined,
|
|
95
|
-
undefined,
|
|
96
|
-
errorSink,
|
|
97
|
-
this.diagnosticsContext(),
|
|
98
|
-
this.metricsValue
|
|
99
|
-
);
|
|
95
|
+
const reporter = new ZLinkDispatchErrorReporter(this.diagnosticsContext(), this.metricsValue);
|
|
100
96
|
this.dispatchErrorReporters.set(errorSink, reporter);
|
|
101
97
|
return reporter;
|
|
102
98
|
}
|
|
@@ -290,15 +286,14 @@ export class ZLinkChannelDispatchServices {
|
|
|
290
286
|
this.diagnosticsContextValue ??= createDiagnosticsContext(
|
|
291
287
|
this.registration.dispatch,
|
|
292
288
|
this.providerResolver,
|
|
293
|
-
this.messageFlowModeCell()
|
|
289
|
+
this.messageFlowModeCell(),
|
|
290
|
+
this.telemetryLease
|
|
294
291
|
);
|
|
295
292
|
return this.diagnosticsContextValue;
|
|
296
293
|
}
|
|
297
294
|
|
|
298
295
|
private outboundFlow(): ZLinkMessageFlowTracer {
|
|
299
|
-
this.outboundFlowValue ??= new ZLinkMessageFlowTracer(this.diagnosticsContext()
|
|
300
|
-
reportRuntimeTaskException() {}
|
|
301
|
-
});
|
|
296
|
+
this.outboundFlowValue ??= new ZLinkMessageFlowTracer(this.diagnosticsContext());
|
|
302
297
|
return this.outboundFlowValue;
|
|
303
298
|
}
|
|
304
299
|
}
|