@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
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkStreamSessionNodeRuntime = exports.ZLinkStreamSessionRuntime = void 0;
|
|
4
4
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
5
|
-
const contracts_1 = require("../../contracts");
|
|
6
5
|
const internal_event_contracts_1 = require("../diagnostics/internal-event-contracts");
|
|
7
6
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
8
7
|
const abort_1 = require("../abort");
|
|
9
8
|
const channels_1 = require("../channels");
|
|
9
|
+
const bound_session_response_target_1 = require("./bound-session-response-target");
|
|
10
10
|
const diagnostics_1 = require("../diagnostics");
|
|
11
11
|
const payload_codec_1 = require("../messaging/payload-codec");
|
|
12
12
|
const protocol_1 = require("./protocol");
|
|
@@ -122,12 +122,14 @@ class ZLinkStreamSessionRuntime {
|
|
|
122
122
|
terminalOwner?.close();
|
|
123
123
|
};
|
|
124
124
|
if (decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Control) {
|
|
125
|
-
if ((0, protocol_1.messageToBytes)(payload).length === 0
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
void this.handleControl(decodedHeader, payload)
|
|
125
|
+
if ((0, protocol_1.messageToBytes)(payload).length === 0 &&
|
|
126
|
+
(decodedHeader.name === protocol_1.ZLINK_STREAM_HEARTBEAT_PONG ||
|
|
127
|
+
decodedHeader.name === protocol_1.ZLINK_STREAM_HEARTBEAT_PING)) {
|
|
128
|
+
void this.handleControl(decodedHeader, payload)
|
|
129
|
+
.catch((error) => {
|
|
129
130
|
this.options.onError?.(error);
|
|
130
|
-
})
|
|
131
|
+
})
|
|
132
|
+
.finally(() => {
|
|
131
133
|
applicationJobPermit?.releaseAfterInternalProcessing();
|
|
132
134
|
payload.close();
|
|
133
135
|
releaseTerminal();
|
|
@@ -152,8 +154,8 @@ class ZLinkStreamSessionRuntime {
|
|
|
152
154
|
}, () => this.traceShutdownDrop(decodedHeader));
|
|
153
155
|
return;
|
|
154
156
|
}
|
|
155
|
-
if (decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Response
|
|
156
|
-
|
|
157
|
+
if (decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Response ||
|
|
158
|
+
decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Error) {
|
|
157
159
|
this.enqueueInfrastructure(async () => {
|
|
158
160
|
try {
|
|
159
161
|
await this.dispatchPacket(payload, decodedHeader);
|
|
@@ -211,12 +213,12 @@ class ZLinkStreamSessionRuntime {
|
|
|
211
213
|
if (forcedClose)
|
|
212
214
|
return;
|
|
213
215
|
this.livenessClock.setTimer(() => {
|
|
214
|
-
if (this.disposed
|
|
215
|
-
|
|
216
|
-
|
|
216
|
+
if (this.disposed ||
|
|
217
|
+
this.disconnected ||
|
|
218
|
+
!this.context.isExactRetiredActorBinding(actor, retiredSession)) {
|
|
217
219
|
return;
|
|
218
220
|
}
|
|
219
|
-
void this.close().catch(error => this.options.onError?.(error));
|
|
221
|
+
void this.close().catch((error) => this.options.onError?.(error));
|
|
220
222
|
}, ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CLOSE_DELAY_MS);
|
|
221
223
|
};
|
|
222
224
|
const completeCallback = () => {
|
|
@@ -239,15 +241,14 @@ class ZLinkStreamSessionRuntime {
|
|
|
239
241
|
completeCallback();
|
|
240
242
|
};
|
|
241
243
|
callbackDeadlineTimer = this.livenessClock.setTimer(() => {
|
|
242
|
-
if (this.disposed
|
|
243
|
-
|
|
244
|
-
|
|
244
|
+
if (this.disposed ||
|
|
245
|
+
this.disconnected ||
|
|
246
|
+
!this.context.isExactRetiredActorBinding(actor, retiredSession)) {
|
|
245
247
|
return;
|
|
246
248
|
}
|
|
247
249
|
forcedClose = true;
|
|
248
|
-
void this.close().catch(error => this.options.onError?.(error));
|
|
249
|
-
}, this.options.replacementCallbackTimeoutMs
|
|
250
|
-
?? ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CALLBACK_TIMEOUT_MS);
|
|
250
|
+
void this.close().catch((error) => this.options.onError?.(error));
|
|
251
|
+
}, this.options.replacementCallbackTimeoutMs ?? ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CALLBACK_TIMEOUT_MS);
|
|
251
252
|
const callback = session.onActorBindingReplaced;
|
|
252
253
|
if (callback === undefined) {
|
|
253
254
|
completeCallback();
|
|
@@ -328,6 +329,40 @@ class ZLinkStreamSessionRuntime {
|
|
|
328
329
|
if (this.context.tryCompleteResponse(decodedHeader, dispatchPayload)) {
|
|
329
330
|
return;
|
|
330
331
|
}
|
|
332
|
+
const dispatchActor = this.context.actorForSlot(decodedHeader.actorSlot);
|
|
333
|
+
if (decodedHeader.actorSlot !== undefined && dispatchActor === undefined) {
|
|
334
|
+
const staleFlowEnabled = this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true;
|
|
335
|
+
await (0, flow_context_1.runWithFlow)((0, flow_context_1.createInboundFlow)(decodedHeader.flowId, decodedHeader.flowOrigin, staleFlowEnabled, staleFlowEnabled ? this.stream.sessionId : undefined), async () => {
|
|
336
|
+
if (decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Request) {
|
|
337
|
+
const error = (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'Actor slot is not a current binding.');
|
|
338
|
+
this.options.dispatchErrors?.report({
|
|
339
|
+
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.StreamSession,
|
|
340
|
+
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
|
|
341
|
+
reason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.StaleTarget,
|
|
342
|
+
action: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError,
|
|
343
|
+
packetName: decodedHeader.name,
|
|
344
|
+
sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId),
|
|
345
|
+
correlationId: decodedHeader.correlationId,
|
|
346
|
+
flowId: decodedHeader.flowId,
|
|
347
|
+
flowOrigin: decodedHeader.flowOrigin,
|
|
348
|
+
error
|
|
349
|
+
});
|
|
350
|
+
await this.replyDispatchError(decodedHeader, error);
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
(0, diagnostics_1.flowIfEnabled)(this.options.dispatchErrors?.flow, ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped)?.trace({
|
|
354
|
+
outcome: ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped,
|
|
355
|
+
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.StreamSession,
|
|
356
|
+
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
357
|
+
packetName: decodedHeader.name,
|
|
358
|
+
correlationId: decodedHeader.correlationId,
|
|
359
|
+
sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId),
|
|
360
|
+
errorReason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.StaleTarget
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
331
366
|
this.context.enterDispatch(decodedHeader);
|
|
332
367
|
enteredDispatch = true;
|
|
333
368
|
const session = await this.requireSession();
|
|
@@ -336,7 +371,8 @@ class ZLinkStreamSessionRuntime {
|
|
|
336
371
|
: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send;
|
|
337
372
|
const streamCorr = decodedHeader.correlationId;
|
|
338
373
|
const inboundHeader = decodedHeader;
|
|
339
|
-
|
|
374
|
+
const flowEnabled = this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true;
|
|
375
|
+
await (0, flow_context_1.runWithFlow)((0, flow_context_1.createInboundFlow)(inboundHeader.flowId, inboundHeader.flowOrigin, flowEnabled, flowEnabled ? this.stream.sessionId : undefined), async () => {
|
|
340
376
|
(0, diagnostics_1.flowIfEnabled)(this.options.dispatchErrors?.flow, ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Received)?.trace({
|
|
341
377
|
outcome: ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Received,
|
|
342
378
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.StreamSession,
|
|
@@ -362,7 +398,7 @@ class ZLinkStreamSessionRuntime {
|
|
|
362
398
|
correlationId: streamCorr,
|
|
363
399
|
sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
|
|
364
400
|
});
|
|
365
|
-
await session.onDispatch?.((0, session_context_1.createSessionDispatchContext)(inboundHeader), (0, payload_codec_1.wrapFrameworkPayloadMessage)(dispatchPayload, this.options.messageSerializers, (0, protocol_1.streamCodecContentType)(inboundHeader.codec), inboundHeader.name));
|
|
401
|
+
await session.onDispatch?.((0, session_context_1.createSessionDispatchContext)(inboundHeader, dispatchActor), (0, payload_codec_1.wrapFrameworkPayloadMessage)(dispatchPayload, this.options.messageSerializers, (0, protocol_1.streamCodecContentType)(inboundHeader.codec), inboundHeader.name));
|
|
366
402
|
if (streamKind === ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send) {
|
|
367
403
|
(0, diagnostics_1.flowIfEnabled)(this.options.dispatchErrors?.flow, ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Completed)?.trace({
|
|
368
404
|
outcome: ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Completed,
|
|
@@ -429,7 +465,7 @@ class ZLinkStreamSessionRuntime {
|
|
|
429
465
|
}
|
|
430
466
|
this.livenessTimer = this.livenessClock.setTimer(() => {
|
|
431
467
|
this.livenessTimer = undefined;
|
|
432
|
-
this.serial.executeInfrastructure(async () => this.runLivenessCheck(), {}, error => this.options.onError?.(error));
|
|
468
|
+
this.serial.executeInfrastructure(async () => this.runLivenessCheck(), {}, (error) => this.options.onError?.(error));
|
|
433
469
|
}, ZLINK_STREAM_HEARTBEAT_INTERVAL_MS);
|
|
434
470
|
}
|
|
435
471
|
async runLivenessCheck() {
|
|
@@ -441,8 +477,8 @@ class ZLinkStreamSessionRuntime {
|
|
|
441
477
|
await this.closeForLiveness(protocol_1.ZLinkStreamCloseReasonCode.IdleTimeout, 'idle_timeout', 'Application idle timeout.');
|
|
442
478
|
return;
|
|
443
479
|
}
|
|
444
|
-
if (this.awaitingPongSince !== undefined
|
|
445
|
-
|
|
480
|
+
if (this.awaitingPongSince !== undefined &&
|
|
481
|
+
now - this.awaitingPongSince >= ZLINK_STREAM_HEARTBEAT_TIMEOUT_MS) {
|
|
446
482
|
await this.closeForLiveness(protocol_1.ZLinkStreamCloseReasonCode.HeartbeatTimeout, 'heartbeat_timeout', 'Heartbeat timeout.');
|
|
447
483
|
return;
|
|
448
484
|
}
|
|
@@ -477,14 +513,7 @@ class ZLinkStreamSessionRuntime {
|
|
|
477
513
|
// record (spec 26 §2.2) and confuse the peer's reply matching.
|
|
478
514
|
return;
|
|
479
515
|
}
|
|
480
|
-
const message = this.context.createJsonReplyFrameMessage(header, protocol_1.ZLinkStreamMessageKind.Error, new Map(), false,
|
|
481
|
-
code: error instanceof contracts_1.ZLinkFrameworkException
|
|
482
|
-
? contracts_1.ZLinkFrameworkErrorKind[error.kind]
|
|
483
|
-
: error instanceof Error
|
|
484
|
-
? error.constructor.name
|
|
485
|
-
: 'RemoteError',
|
|
486
|
-
message: error instanceof Error ? error.message : String(error)
|
|
487
|
-
});
|
|
516
|
+
const message = this.context.createJsonReplyFrameMessage(header, protocol_1.ZLinkStreamMessageKind.Error, new Map(), false, (0, bound_session_response_target_1.boundSessionErrorPayload)(error));
|
|
488
517
|
try {
|
|
489
518
|
if (!this.context.stream.writeRaw(message, ZLINK_SEND_DONT_WAIT)) {
|
|
490
519
|
throw new Error('Client stream error reply send failed.');
|
|
@@ -505,8 +534,7 @@ class ZLinkStreamSessionRuntime {
|
|
|
505
534
|
* languages' write-path trace.
|
|
506
535
|
*/
|
|
507
536
|
traceFrameWritten(kind, packetName, correlationId) {
|
|
508
|
-
const reply = kind === protocol_1.ZLinkStreamMessageKind.Response
|
|
509
|
-
|| kind === protocol_1.ZLinkStreamMessageKind.Error;
|
|
537
|
+
const reply = kind === protocol_1.ZLinkStreamMessageKind.Response || kind === protocol_1.ZLinkStreamMessageKind.Error;
|
|
510
538
|
const outcome = reply ? ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Replied : ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent;
|
|
511
539
|
(0, diagnostics_1.flowIfEnabled)(this.options.dispatchErrors?.flow, outcome)?.trace({
|
|
512
540
|
outcome,
|
|
@@ -518,7 +546,8 @@ class ZLinkStreamSessionRuntime {
|
|
|
518
546
|
: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
|
|
519
547
|
packetName: packetName.length === 0 ? undefined : packetName,
|
|
520
548
|
correlationId,
|
|
521
|
-
sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
|
|
549
|
+
sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId),
|
|
550
|
+
streamSessionId: this.stream.sessionId
|
|
522
551
|
});
|
|
523
552
|
}
|
|
524
553
|
async complete(error, notifyDisconnected) {
|
|
@@ -547,14 +576,16 @@ class ZLinkStreamSessionRuntime {
|
|
|
547
576
|
return;
|
|
548
577
|
this.disconnectQueued = true;
|
|
549
578
|
this.stopLivenessChecks();
|
|
550
|
-
void this.serial
|
|
579
|
+
void this.serial
|
|
580
|
+
.executeFinal(async () => {
|
|
551
581
|
this.disconnectQueued = false;
|
|
552
582
|
if (this.disconnected)
|
|
553
583
|
return;
|
|
554
584
|
this.stream.markTransportClosed();
|
|
555
585
|
this.disconnected = true;
|
|
556
586
|
await this.complete(error, true);
|
|
557
|
-
})
|
|
587
|
+
})
|
|
588
|
+
.catch(() => {
|
|
558
589
|
this.disconnectQueued = false;
|
|
559
590
|
});
|
|
560
591
|
}
|
|
@@ -625,6 +656,7 @@ class ZLinkStreamSessionRuntime {
|
|
|
625
656
|
packetName: header.name === '' ? undefined : header.name,
|
|
626
657
|
correlationId: header.correlationId,
|
|
627
658
|
sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId),
|
|
659
|
+
streamSessionId: this.stream.sessionId,
|
|
628
660
|
flowId: flowEnabled ? header.flowId : undefined,
|
|
629
661
|
flowOrigin: flowEnabled ? header.flowOrigin : undefined,
|
|
630
662
|
errorReason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.Shutdown
|
|
@@ -634,11 +666,16 @@ class ZLinkStreamSessionRuntime {
|
|
|
634
666
|
exports.ZLinkStreamSessionRuntime = ZLinkStreamSessionRuntime;
|
|
635
667
|
function streamShutdownDropMessageKind(kind) {
|
|
636
668
|
switch (kind) {
|
|
637
|
-
case protocol_1.ZLinkStreamMessageKind.Request:
|
|
638
|
-
|
|
639
|
-
case protocol_1.ZLinkStreamMessageKind.
|
|
640
|
-
|
|
641
|
-
|
|
669
|
+
case protocol_1.ZLinkStreamMessageKind.Request:
|
|
670
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request;
|
|
671
|
+
case protocol_1.ZLinkStreamMessageKind.Response:
|
|
672
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Response;
|
|
673
|
+
case protocol_1.ZLinkStreamMessageKind.Error:
|
|
674
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Error;
|
|
675
|
+
case protocol_1.ZLinkStreamMessageKind.Control:
|
|
676
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Control;
|
|
677
|
+
default:
|
|
678
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send;
|
|
642
679
|
}
|
|
643
680
|
}
|
|
644
681
|
class ZLinkStreamSessionNodeRuntime {
|
|
@@ -668,17 +705,15 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
668
705
|
return;
|
|
669
706
|
}
|
|
670
707
|
const monitor = this.options.monitor;
|
|
671
|
-
monitor?.onEvent(event => this.onMonitorEvent(event));
|
|
672
|
-
const running = this.runReceiveLoop(this.receiveAbortController.signal)
|
|
673
|
-
.catch((error) => {
|
|
708
|
+
monitor?.onEvent((event) => this.onMonitorEvent(event));
|
|
709
|
+
const running = this.runReceiveLoop(this.receiveAbortController.signal).catch((error) => {
|
|
674
710
|
if (!this.stopped) {
|
|
675
711
|
this.options.onError?.(error);
|
|
676
712
|
}
|
|
677
713
|
});
|
|
678
714
|
this.receiveLoop = running;
|
|
679
715
|
if (monitor !== undefined) {
|
|
680
|
-
this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal)
|
|
681
|
-
.catch((error) => {
|
|
716
|
+
this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal).catch((error) => {
|
|
682
717
|
if (!this.stopped) {
|
|
683
718
|
this.options.onError?.(error);
|
|
684
719
|
}
|
|
@@ -809,8 +844,8 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
809
844
|
continue;
|
|
810
845
|
}
|
|
811
846
|
this.receiveWorkSinceYield += 1;
|
|
812
|
-
if (this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT
|
|
813
|
-
|
|
847
|
+
if (this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT &&
|
|
848
|
+
!this.isReceiveStopped(signal)) {
|
|
814
849
|
this.receiveWorkSinceYield = 0;
|
|
815
850
|
await new Promise((resolve) => setImmediate(resolve));
|
|
816
851
|
}
|
|
@@ -835,16 +870,16 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
835
870
|
this.applyPendingConnectionMetadata(session);
|
|
836
871
|
const decodedHeader = (0, protocol_1.decodeStreamHeader)(header.data(), this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true);
|
|
837
872
|
payload = (0, stream_message_utils_1.ownedMessage)(body.data());
|
|
838
|
-
const terminalCompletion = decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Response
|
|
839
|
-
|
|
873
|
+
const terminalCompletion = decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Response ||
|
|
874
|
+
decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Error;
|
|
840
875
|
const applicationPermit = terminalCompletion ? undefined : permit;
|
|
841
876
|
if (terminalCompletion) {
|
|
842
877
|
permit.releaseAfterInternalProcessing();
|
|
843
878
|
releasePermitOnFailure = false;
|
|
844
879
|
}
|
|
845
880
|
else {
|
|
846
|
-
if (decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Send
|
|
847
|
-
|
|
881
|
+
if (decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Send ||
|
|
882
|
+
decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Request) {
|
|
848
883
|
permit.markApplicationQueued();
|
|
849
884
|
}
|
|
850
885
|
}
|
|
@@ -949,8 +984,7 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
949
984
|
session.enqueueDisconnected(error);
|
|
950
985
|
return;
|
|
951
986
|
}
|
|
952
|
-
if (event.routingId === undefined
|
|
953
|
-
&& !streamMonitorHasEndpoint(event)) {
|
|
987
|
+
if (event.routingId === undefined && !streamMonitorHasEndpoint(event)) {
|
|
954
988
|
this.enqueueEndpointlessDisconnect(error);
|
|
955
989
|
}
|
|
956
990
|
}
|
|
@@ -960,9 +994,9 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
960
994
|
}
|
|
961
995
|
}
|
|
962
996
|
applyPendingConnectionMetadata(session) {
|
|
963
|
-
if (session.stream.localAddr !== undefined
|
|
964
|
-
|
|
965
|
-
|
|
997
|
+
if (session.stream.localAddr !== undefined ||
|
|
998
|
+
session.stream.remoteAddr !== undefined ||
|
|
999
|
+
this.pendingConnectionMetadataCount === 0) {
|
|
966
1000
|
return;
|
|
967
1001
|
}
|
|
968
1002
|
const metadata = this.takePendingConnectionMetadata();
|
|
@@ -975,16 +1009,16 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
975
1009
|
hasPendingConnectionMetadata(endpointKey) {
|
|
976
1010
|
for (let index = this.pendingConnectionMetadataHead; index < this.pendingConnectionMetadata.length; index += 1) {
|
|
977
1011
|
const metadata = this.pendingConnectionMetadata[index];
|
|
978
|
-
if (metadata !== undefined
|
|
979
|
-
|
|
1012
|
+
if (metadata !== undefined &&
|
|
1013
|
+
streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey) {
|
|
980
1014
|
return true;
|
|
981
1015
|
}
|
|
982
1016
|
}
|
|
983
1017
|
return false;
|
|
984
1018
|
}
|
|
985
1019
|
takePendingConnectionMetadata() {
|
|
986
|
-
while (this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length
|
|
987
|
-
|
|
1020
|
+
while (this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length &&
|
|
1021
|
+
this.pendingConnectionMetadata[this.pendingConnectionMetadataHead] === undefined) {
|
|
988
1022
|
this.pendingConnectionMetadataHead += 1;
|
|
989
1023
|
}
|
|
990
1024
|
const metadata = this.pendingConnectionMetadata[this.pendingConnectionMetadataHead];
|
|
@@ -1001,8 +1035,8 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1001
1035
|
this.pendingConnectionMetadata.length = 0;
|
|
1002
1036
|
this.pendingConnectionMetadataHead = 0;
|
|
1003
1037
|
}
|
|
1004
|
-
else if (this.pendingConnectionMetadataHead >= 1024
|
|
1005
|
-
|
|
1038
|
+
else if (this.pendingConnectionMetadataHead >= 1024 &&
|
|
1039
|
+
this.pendingConnectionMetadataHead * 2 >= this.pendingConnectionMetadata.length) {
|
|
1006
1040
|
this.pendingConnectionMetadata.splice(0, this.pendingConnectionMetadataHead);
|
|
1007
1041
|
this.pendingConnectionMetadataHead = 0;
|
|
1008
1042
|
}
|
|
@@ -1012,8 +1046,8 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1012
1046
|
this.unaddressedMonitorSessionCount += 1;
|
|
1013
1047
|
}
|
|
1014
1048
|
takeUnaddressedMonitorSession() {
|
|
1015
|
-
while (this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length
|
|
1016
|
-
|
|
1049
|
+
while (this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length &&
|
|
1050
|
+
this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead] === undefined) {
|
|
1017
1051
|
this.unaddressedMonitorSessionHead += 1;
|
|
1018
1052
|
}
|
|
1019
1053
|
const sessionId = this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead];
|
|
@@ -1026,8 +1060,8 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1026
1060
|
this.unaddressedMonitorSessions.length = 0;
|
|
1027
1061
|
this.unaddressedMonitorSessionHead = 0;
|
|
1028
1062
|
}
|
|
1029
|
-
else if (this.unaddressedMonitorSessionHead >= 1024
|
|
1030
|
-
|
|
1063
|
+
else if (this.unaddressedMonitorSessionHead >= 1024 &&
|
|
1064
|
+
this.unaddressedMonitorSessionHead * 2 >= this.unaddressedMonitorSessions.length) {
|
|
1031
1065
|
this.unaddressedMonitorSessions.splice(0, this.unaddressedMonitorSessionHead);
|
|
1032
1066
|
this.unaddressedMonitorSessionHead = 0;
|
|
1033
1067
|
}
|
|
@@ -1035,9 +1069,9 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1035
1069
|
}
|
|
1036
1070
|
firstUnaddressedSession() {
|
|
1037
1071
|
for (const session of this.sessions.values()) {
|
|
1038
|
-
if (!session.isDisconnected
|
|
1039
|
-
|
|
1040
|
-
|
|
1072
|
+
if (!session.isDisconnected &&
|
|
1073
|
+
session.stream.localAddr === undefined &&
|
|
1074
|
+
session.stream.remoteAddr === undefined) {
|
|
1041
1075
|
return session;
|
|
1042
1076
|
}
|
|
1043
1077
|
}
|
|
@@ -1073,9 +1107,9 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1073
1107
|
let match;
|
|
1074
1108
|
let matchCount = 0;
|
|
1075
1109
|
for (const session of this.sessions.values()) {
|
|
1076
|
-
if (session.isDisconnected
|
|
1077
|
-
|
|
1078
|
-
|
|
1110
|
+
if (session.isDisconnected ||
|
|
1111
|
+
session.stream.localAddr !== event.localAddr ||
|
|
1112
|
+
session.stream.remoteAddr !== event.remoteAddr) {
|
|
1079
1113
|
continue;
|
|
1080
1114
|
}
|
|
1081
1115
|
match = session;
|
|
@@ -1120,11 +1154,11 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1120
1154
|
// queued. Wake the recv loop instead of waiting for its idle backoff.
|
|
1121
1155
|
this.wakeReceiveLoop();
|
|
1122
1156
|
setImmediate(() => {
|
|
1123
|
-
if (pending.cancelled
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1157
|
+
if (pending.cancelled ||
|
|
1158
|
+
this.stopped ||
|
|
1159
|
+
this.pendingEndpointlessDisconnect !== pending ||
|
|
1160
|
+
this.activityVersion !== pending.activityVersion ||
|
|
1161
|
+
this.sessions.get(pending.session.stream.sessionId) !== pending.session) {
|
|
1128
1162
|
return;
|
|
1129
1163
|
}
|
|
1130
1164
|
this.pendingEndpointlessDisconnect = undefined;
|
|
@@ -89,7 +89,8 @@ class ZLinkCpuWorkerPool {
|
|
|
89
89
|
try {
|
|
90
90
|
this.ensureMinimumSlots();
|
|
91
91
|
while (this.queueCount > 0) {
|
|
92
|
-
const slot = this.findIdleSlot() ??
|
|
92
|
+
const slot = this.findIdleSlot() ??
|
|
93
|
+
(this.slots.size < this.options.maxThreads ? this.createSlot() : undefined);
|
|
93
94
|
if (slot === undefined)
|
|
94
95
|
return;
|
|
95
96
|
const job = this.takeQueuedJob();
|
|
@@ -241,7 +242,9 @@ class ZLinkCpuWorkerPool {
|
|
|
241
242
|
clearTimeout(slot.idleTimer);
|
|
242
243
|
slot.idleTimer = setTimeout(() => {
|
|
243
244
|
slot.idleTimer = undefined;
|
|
244
|
-
if (slot.job === undefined &&
|
|
245
|
+
if (slot.job === undefined &&
|
|
246
|
+
!slot.terminating &&
|
|
247
|
+
this.slots.size > this.options.minThreads) {
|
|
245
248
|
this.terminateSlot(slot);
|
|
246
249
|
}
|
|
247
250
|
}, this.options.idleTimeoutMs);
|
|
@@ -357,7 +360,9 @@ class ZLinkIoWorkerRuntime {
|
|
|
357
360
|
};
|
|
358
361
|
signal.addEventListener('abort', abortListener, { once: true });
|
|
359
362
|
}
|
|
360
|
-
Promise.resolve()
|
|
363
|
+
Promise.resolve()
|
|
364
|
+
.then(() => work(controller.signal))
|
|
365
|
+
.then((value) => settle(() => resolve(value)), (error) => settle(() => reject(workerFailed(error))));
|
|
361
366
|
});
|
|
362
367
|
}
|
|
363
368
|
}
|
|
@@ -438,7 +443,13 @@ class ZLinkSerialDeliveredPromise {
|
|
|
438
443
|
return this.then(undefined, onrejected);
|
|
439
444
|
}
|
|
440
445
|
finally(onfinally) {
|
|
441
|
-
return this.then((value) => this.serial.execute(() => {
|
|
446
|
+
return this.then((value) => this.serial.execute(() => {
|
|
447
|
+
onfinally?.();
|
|
448
|
+
return value;
|
|
449
|
+
}), (reason) => this.serial.execute(() => {
|
|
450
|
+
onfinally?.();
|
|
451
|
+
throw reason;
|
|
452
|
+
}));
|
|
442
453
|
}
|
|
443
454
|
}
|
|
444
455
|
function workerTimedOut(timeoutMs) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zlink-systems/framework",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@opentelemetry/api": "^1.9.1",
|
|
21
21
|
"@opentelemetry/api-logs": "^0.221.0",
|
|
22
|
-
"@zlink-systems/stream-wire": "0.
|
|
23
|
-
"@zlink-systems/zlink": "1.
|
|
22
|
+
"@zlink-systems/stream-wire": "0.23.0",
|
|
23
|
+
"@zlink-systems/zlink": "1.4.0"
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { RoutingId } from '../Common';
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
ZLinkChannelRequestCall,
|
|
4
|
+
ZLinkPublishCall,
|
|
5
|
+
ZLinkRequestCall,
|
|
6
|
+
ZLinkSendCall
|
|
7
|
+
} from './Calls';
|
|
3
8
|
|
|
4
9
|
export interface ZLinkRouteClient {
|
|
5
10
|
sendToNode(meshName: string, targetNodeRid: RoutingId, message: unknown): ZLinkSendCall;
|
|
@@ -108,11 +108,11 @@ export function readZLinkMessageDeclaredType(message: ZLinkMessage): Type | unde
|
|
|
108
108
|
*/
|
|
109
109
|
export function materializeZLinkMessageValue<T>(value: T, type?: Type<T>): T {
|
|
110
110
|
if (
|
|
111
|
-
type === undefined
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
type === undefined ||
|
|
112
|
+
(type as unknown) === Object ||
|
|
113
|
+
value === null ||
|
|
114
|
+
typeof value !== 'object' ||
|
|
115
|
+
Array.isArray(value)
|
|
116
116
|
) {
|
|
117
117
|
return value;
|
|
118
118
|
}
|
|
@@ -26,7 +26,7 @@ class ImmutableMetadataMap implements ReadonlyMap<string, string> {
|
|
|
26
26
|
constructor(values: ReadonlyMap<string, string> | Readonly<Record<string, string>>) {
|
|
27
27
|
this.#values = new Map(
|
|
28
28
|
typeof (values as ReadonlyMap<string, string>)[Symbol.iterator] === 'function'
|
|
29
|
-
? values as ReadonlyMap<string, string>
|
|
29
|
+
? (values as ReadonlyMap<string, string>)
|
|
30
30
|
: Object.entries(values)
|
|
31
31
|
);
|
|
32
32
|
}
|
|
@@ -67,8 +67,9 @@ class ImmutableMetadataMap implements ReadonlyMap<string, string> {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
export const ZLinkMessageMetadataEmpty: ZLinkMessageMetadata =
|
|
71
|
-
|
|
70
|
+
export const ZLinkMessageMetadataEmpty: ZLinkMessageMetadata = Object.freeze(
|
|
71
|
+
new ImmutableZLinkMessageMetadata()
|
|
72
|
+
);
|
|
72
73
|
|
|
73
74
|
export function zlinkMessageMetadata(
|
|
74
75
|
values: ReadonlyMap<string, string> | Readonly<Record<string, string>>
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
import type { ZLinkActor, ZLinkActorFactory } from '../Actors';
|
|
2
|
-
import type {
|
|
3
|
-
ZLinkEntrySpot,
|
|
4
|
-
ZLinkInstanceSpot,
|
|
5
|
-
ZLinkSpot
|
|
6
|
-
} from '../Spots';
|
|
2
|
+
import type { ZLinkEntrySpot, ZLinkInstanceSpot, ZLinkSpot } from '../Spots';
|
|
7
3
|
import type { ZLinkSession, ZLinkSessionFactory, ZLinkStreamCompressionCodec } from '../Streams';
|
|
8
4
|
import type { ZLinkEndpointConnections } from './Connections';
|
|
9
5
|
import type { ZLinkCodecRegistryBuilder } from '../Codecs';
|
|
10
6
|
import type { ZLinkDispatchOptionsBuilder, ZLinkInboundDispatchOptions } from '../Dispatch';
|
|
11
|
-
import type {
|
|
12
|
-
ZLinkLocationOptions,
|
|
13
|
-
ZLinkLocationStore,
|
|
14
|
-
ZLinkRelocationStore
|
|
15
|
-
} from '../Locations';
|
|
7
|
+
import type { ZLinkLocationOptions, ZLinkLocationStore, ZLinkRelocationStore } from '../Locations';
|
|
16
8
|
import type { RoutingId, Type } from '../Common';
|
|
17
9
|
import type { ZLinkWorkerOptions } from './RegistrationTypes';
|
|
18
10
|
import type { ZLinkSpotPublisherConfig } from './Configs';
|
|
@@ -71,7 +63,9 @@ export interface ZLinkClientServerChannelServerBuilder {
|
|
|
71
63
|
setWeight(weight: number): this;
|
|
72
64
|
addHandlerGroup(groupName: string): this;
|
|
73
65
|
addSendHandler<TMessage>(handlerType: Type<ZLinkSendHandler<TMessage>>): this;
|
|
74
|
-
addRequestHandler<TRequest, TReply>(
|
|
66
|
+
addRequestHandler<TRequest, TReply>(
|
|
67
|
+
handlerType: Type<ZLinkRequestHandler<TRequest, TReply>>
|
|
68
|
+
): this;
|
|
75
69
|
}
|
|
76
70
|
|
|
77
71
|
export interface ZLinkMeshPeerConnection {
|
|
@@ -97,7 +91,9 @@ export interface ZLinkMeshChannelServerBuilder {
|
|
|
97
91
|
setWeight(weight: number): this;
|
|
98
92
|
addHandlerGroup(groupName: string): this;
|
|
99
93
|
addSendHandler<TMessage>(handlerType: Type<ZLinkSendHandler<TMessage>>): this;
|
|
100
|
-
addRequestHandler<TRequest, TReply>(
|
|
94
|
+
addRequestHandler<TRequest, TReply>(
|
|
95
|
+
handlerType: Type<ZLinkRequestHandler<TRequest, TReply>>
|
|
96
|
+
): this;
|
|
101
97
|
}
|
|
102
98
|
|
|
103
99
|
export interface ZLinkMeshNodeSocketConfig {
|
|
@@ -130,7 +126,9 @@ export interface ZLinkMeshNodeBuilder {
|
|
|
130
126
|
setDefaultRequestTimeout(timeoutMs: number): this;
|
|
131
127
|
objects(): ZLinkMeshObjectRoleBuilder;
|
|
132
128
|
addRouteSendHandler<TMessage>(handlerType: Type<ZLinkRouteSendHandler<TMessage>>): this;
|
|
133
|
-
addRouteRequestHandler<TRequest, TReply>(
|
|
129
|
+
addRouteRequestHandler<TRequest, TReply>(
|
|
130
|
+
handlerType: Type<ZLinkRouteRequestHandler<TRequest, TReply>>
|
|
131
|
+
): this;
|
|
134
132
|
}
|
|
135
133
|
|
|
136
134
|
export interface ZLinkNetworkOptions {
|
|
@@ -196,5 +194,7 @@ export interface ZLinkStreamNodeBuilder {
|
|
|
196
194
|
configureSocket(): ZLinkStreamSocketConfig;
|
|
197
195
|
enableActorDispatch(): this;
|
|
198
196
|
setTlsServer(certificatePath: string, keyPath: string, requireClientCertificate?: boolean): this;
|
|
199
|
-
registerSession<TSession extends ZLinkSession>(
|
|
197
|
+
registerSession<TSession extends ZLinkSession>(
|
|
198
|
+
sessionType: Type<TSession> | Type<ZLinkSessionFactory<TSession>>
|
|
199
|
+
): this;
|
|
200
200
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { ZLinkConfigurationException } from './ConfigurationException';
|
|
2
2
|
|
|
3
|
-
const mediaTypePunctuation = new Set(
|
|
4
|
-
[..."!#$%&'*+-.^_`|~"].map((value) => value.charCodeAt(0))
|
|
5
|
-
);
|
|
3
|
+
const mediaTypePunctuation = new Set([..."!#$%&'*+-.^_`|~"].map((value) => value.charCodeAt(0)));
|
|
6
4
|
|
|
7
5
|
export function normalizeCodecContentType(contentType: string): string {
|
|
8
6
|
if (typeof contentType !== 'string') {
|
|
@@ -27,9 +25,7 @@ export function normalizeCodecContentType(contentType: string): string {
|
|
|
27
25
|
continue;
|
|
28
26
|
}
|
|
29
27
|
if (!isTokenCharacter(code)) throw invalidContentType();
|
|
30
|
-
normalized += code >= 0x41 && code <= 0x5a
|
|
31
|
-
? String.fromCharCode(code + 0x20)
|
|
32
|
-
: value[index]!;
|
|
28
|
+
normalized += code >= 0x41 && code <= 0x5a ? String.fromCharCode(code + 0x20) : value[index]!;
|
|
33
29
|
}
|
|
34
30
|
if (slash === -1) throw invalidContentType();
|
|
35
31
|
return normalized;
|
|
@@ -55,10 +51,12 @@ function isOuterWhitespace(code: number): boolean {
|
|
|
55
51
|
}
|
|
56
52
|
|
|
57
53
|
function isTokenCharacter(code: number): boolean {
|
|
58
|
-
return (
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
return (
|
|
55
|
+
(code >= 0x30 && code <= 0x39) ||
|
|
56
|
+
(code >= 0x41 && code <= 0x5a) ||
|
|
57
|
+
(code >= 0x61 && code <= 0x7a) ||
|
|
58
|
+
mediaTypePunctuation.has(code)
|
|
59
|
+
);
|
|
62
60
|
}
|
|
63
61
|
|
|
64
62
|
function invalidContentType(): ZLinkConfigurationException {
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import type { ZLinkMessageFlowLogMode } from '../Dispatch';
|
|
2
2
|
import { ZLinkConfigurationException } from './ConfigurationException';
|
|
3
3
|
|
|
4
|
-
const MESSAGE_FLOW_MODES: ReadonlySet<string> = new Set([
|
|
5
|
-
'off',
|
|
6
|
-
'errors',
|
|
7
|
-
'normal',
|
|
8
|
-
'detailed'
|
|
9
|
-
]);
|
|
4
|
+
const MESSAGE_FLOW_MODES: ReadonlySet<string> = new Set(['off', 'errors', 'normal', 'detailed']);
|
|
10
5
|
|
|
11
6
|
export function requireMessageFlowLogMode(value: unknown): ZLinkMessageFlowLogMode {
|
|
12
7
|
if (typeof value !== 'string' || !MESSAGE_FLOW_MODES.has(value)) {
|