@zlink-systems/framework 0.21.0 → 0.22.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/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- 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 +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- 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 +158 -124
- 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/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.js +116 -113
- 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 +10 -18
- 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 +43 -33
- 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.js +9 -7
- 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/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- 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 -23
- 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.js +136 -136
- 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-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- 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 +244 -227
- 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/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 +208 -219
- 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.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -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 +74 -85
- 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 +16 -14
- 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 +1 -2
- 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 +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- 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.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- 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 +1 -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 +0 -1
- 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 +138 -130
- 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 +5 -4
- 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 +351 -320
- 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 +73 -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 +335 -383
- 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 +40 -42
- 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 +215 -197
- 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 +11 -8
- 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/flow-context.ts +12 -3
- 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 +95 -76
- 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 -51
- 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 +312 -385
- 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 +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -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 +1 -1
- 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 +593 -563
- 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 +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -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 +230 -221
- 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 +128 -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 +11 -17
- 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 +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- 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 +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -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();
|
|
@@ -429,7 +430,7 @@ class ZLinkStreamSessionRuntime {
|
|
|
429
430
|
}
|
|
430
431
|
this.livenessTimer = this.livenessClock.setTimer(() => {
|
|
431
432
|
this.livenessTimer = undefined;
|
|
432
|
-
this.serial.executeInfrastructure(async () => this.runLivenessCheck(), {}, error => this.options.onError?.(error));
|
|
433
|
+
this.serial.executeInfrastructure(async () => this.runLivenessCheck(), {}, (error) => this.options.onError?.(error));
|
|
433
434
|
}, ZLINK_STREAM_HEARTBEAT_INTERVAL_MS);
|
|
434
435
|
}
|
|
435
436
|
async runLivenessCheck() {
|
|
@@ -441,8 +442,8 @@ class ZLinkStreamSessionRuntime {
|
|
|
441
442
|
await this.closeForLiveness(protocol_1.ZLinkStreamCloseReasonCode.IdleTimeout, 'idle_timeout', 'Application idle timeout.');
|
|
442
443
|
return;
|
|
443
444
|
}
|
|
444
|
-
if (this.awaitingPongSince !== undefined
|
|
445
|
-
|
|
445
|
+
if (this.awaitingPongSince !== undefined &&
|
|
446
|
+
now - this.awaitingPongSince >= ZLINK_STREAM_HEARTBEAT_TIMEOUT_MS) {
|
|
446
447
|
await this.closeForLiveness(protocol_1.ZLinkStreamCloseReasonCode.HeartbeatTimeout, 'heartbeat_timeout', 'Heartbeat timeout.');
|
|
447
448
|
return;
|
|
448
449
|
}
|
|
@@ -505,8 +506,7 @@ class ZLinkStreamSessionRuntime {
|
|
|
505
506
|
* languages' write-path trace.
|
|
506
507
|
*/
|
|
507
508
|
traceFrameWritten(kind, packetName, correlationId) {
|
|
508
|
-
const reply = kind === protocol_1.ZLinkStreamMessageKind.Response
|
|
509
|
-
|| kind === protocol_1.ZLinkStreamMessageKind.Error;
|
|
509
|
+
const reply = kind === protocol_1.ZLinkStreamMessageKind.Response || kind === protocol_1.ZLinkStreamMessageKind.Error;
|
|
510
510
|
const outcome = reply ? ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Replied : ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent;
|
|
511
511
|
(0, diagnostics_1.flowIfEnabled)(this.options.dispatchErrors?.flow, outcome)?.trace({
|
|
512
512
|
outcome,
|
|
@@ -547,14 +547,16 @@ class ZLinkStreamSessionRuntime {
|
|
|
547
547
|
return;
|
|
548
548
|
this.disconnectQueued = true;
|
|
549
549
|
this.stopLivenessChecks();
|
|
550
|
-
void this.serial
|
|
550
|
+
void this.serial
|
|
551
|
+
.executeFinal(async () => {
|
|
551
552
|
this.disconnectQueued = false;
|
|
552
553
|
if (this.disconnected)
|
|
553
554
|
return;
|
|
554
555
|
this.stream.markTransportClosed();
|
|
555
556
|
this.disconnected = true;
|
|
556
557
|
await this.complete(error, true);
|
|
557
|
-
})
|
|
558
|
+
})
|
|
559
|
+
.catch(() => {
|
|
558
560
|
this.disconnectQueued = false;
|
|
559
561
|
});
|
|
560
562
|
}
|
|
@@ -634,11 +636,16 @@ class ZLinkStreamSessionRuntime {
|
|
|
634
636
|
exports.ZLinkStreamSessionRuntime = ZLinkStreamSessionRuntime;
|
|
635
637
|
function streamShutdownDropMessageKind(kind) {
|
|
636
638
|
switch (kind) {
|
|
637
|
-
case protocol_1.ZLinkStreamMessageKind.Request:
|
|
638
|
-
|
|
639
|
-
case protocol_1.ZLinkStreamMessageKind.
|
|
640
|
-
|
|
641
|
-
|
|
639
|
+
case protocol_1.ZLinkStreamMessageKind.Request:
|
|
640
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request;
|
|
641
|
+
case protocol_1.ZLinkStreamMessageKind.Response:
|
|
642
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Response;
|
|
643
|
+
case protocol_1.ZLinkStreamMessageKind.Error:
|
|
644
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Error;
|
|
645
|
+
case protocol_1.ZLinkStreamMessageKind.Control:
|
|
646
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Control;
|
|
647
|
+
default:
|
|
648
|
+
return ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send;
|
|
642
649
|
}
|
|
643
650
|
}
|
|
644
651
|
class ZLinkStreamSessionNodeRuntime {
|
|
@@ -668,17 +675,15 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
668
675
|
return;
|
|
669
676
|
}
|
|
670
677
|
const monitor = this.options.monitor;
|
|
671
|
-
monitor?.onEvent(event => this.onMonitorEvent(event));
|
|
672
|
-
const running = this.runReceiveLoop(this.receiveAbortController.signal)
|
|
673
|
-
.catch((error) => {
|
|
678
|
+
monitor?.onEvent((event) => this.onMonitorEvent(event));
|
|
679
|
+
const running = this.runReceiveLoop(this.receiveAbortController.signal).catch((error) => {
|
|
674
680
|
if (!this.stopped) {
|
|
675
681
|
this.options.onError?.(error);
|
|
676
682
|
}
|
|
677
683
|
});
|
|
678
684
|
this.receiveLoop = running;
|
|
679
685
|
if (monitor !== undefined) {
|
|
680
|
-
this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal)
|
|
681
|
-
.catch((error) => {
|
|
686
|
+
this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal).catch((error) => {
|
|
682
687
|
if (!this.stopped) {
|
|
683
688
|
this.options.onError?.(error);
|
|
684
689
|
}
|
|
@@ -809,8 +814,8 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
809
814
|
continue;
|
|
810
815
|
}
|
|
811
816
|
this.receiveWorkSinceYield += 1;
|
|
812
|
-
if (this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT
|
|
813
|
-
|
|
817
|
+
if (this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT &&
|
|
818
|
+
!this.isReceiveStopped(signal)) {
|
|
814
819
|
this.receiveWorkSinceYield = 0;
|
|
815
820
|
await new Promise((resolve) => setImmediate(resolve));
|
|
816
821
|
}
|
|
@@ -835,16 +840,16 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
835
840
|
this.applyPendingConnectionMetadata(session);
|
|
836
841
|
const decodedHeader = (0, protocol_1.decodeStreamHeader)(header.data(), this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true);
|
|
837
842
|
payload = (0, stream_message_utils_1.ownedMessage)(body.data());
|
|
838
|
-
const terminalCompletion = decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Response
|
|
839
|
-
|
|
843
|
+
const terminalCompletion = decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Response ||
|
|
844
|
+
decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Error;
|
|
840
845
|
const applicationPermit = terminalCompletion ? undefined : permit;
|
|
841
846
|
if (terminalCompletion) {
|
|
842
847
|
permit.releaseAfterInternalProcessing();
|
|
843
848
|
releasePermitOnFailure = false;
|
|
844
849
|
}
|
|
845
850
|
else {
|
|
846
|
-
if (decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Send
|
|
847
|
-
|
|
851
|
+
if (decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Send ||
|
|
852
|
+
decodedHeader.kind === protocol_1.ZLinkStreamMessageKind.Request) {
|
|
848
853
|
permit.markApplicationQueued();
|
|
849
854
|
}
|
|
850
855
|
}
|
|
@@ -949,8 +954,7 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
949
954
|
session.enqueueDisconnected(error);
|
|
950
955
|
return;
|
|
951
956
|
}
|
|
952
|
-
if (event.routingId === undefined
|
|
953
|
-
&& !streamMonitorHasEndpoint(event)) {
|
|
957
|
+
if (event.routingId === undefined && !streamMonitorHasEndpoint(event)) {
|
|
954
958
|
this.enqueueEndpointlessDisconnect(error);
|
|
955
959
|
}
|
|
956
960
|
}
|
|
@@ -960,9 +964,9 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
960
964
|
}
|
|
961
965
|
}
|
|
962
966
|
applyPendingConnectionMetadata(session) {
|
|
963
|
-
if (session.stream.localAddr !== undefined
|
|
964
|
-
|
|
965
|
-
|
|
967
|
+
if (session.stream.localAddr !== undefined ||
|
|
968
|
+
session.stream.remoteAddr !== undefined ||
|
|
969
|
+
this.pendingConnectionMetadataCount === 0) {
|
|
966
970
|
return;
|
|
967
971
|
}
|
|
968
972
|
const metadata = this.takePendingConnectionMetadata();
|
|
@@ -975,16 +979,16 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
975
979
|
hasPendingConnectionMetadata(endpointKey) {
|
|
976
980
|
for (let index = this.pendingConnectionMetadataHead; index < this.pendingConnectionMetadata.length; index += 1) {
|
|
977
981
|
const metadata = this.pendingConnectionMetadata[index];
|
|
978
|
-
if (metadata !== undefined
|
|
979
|
-
|
|
982
|
+
if (metadata !== undefined &&
|
|
983
|
+
streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey) {
|
|
980
984
|
return true;
|
|
981
985
|
}
|
|
982
986
|
}
|
|
983
987
|
return false;
|
|
984
988
|
}
|
|
985
989
|
takePendingConnectionMetadata() {
|
|
986
|
-
while (this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length
|
|
987
|
-
|
|
990
|
+
while (this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length &&
|
|
991
|
+
this.pendingConnectionMetadata[this.pendingConnectionMetadataHead] === undefined) {
|
|
988
992
|
this.pendingConnectionMetadataHead += 1;
|
|
989
993
|
}
|
|
990
994
|
const metadata = this.pendingConnectionMetadata[this.pendingConnectionMetadataHead];
|
|
@@ -1001,8 +1005,8 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1001
1005
|
this.pendingConnectionMetadata.length = 0;
|
|
1002
1006
|
this.pendingConnectionMetadataHead = 0;
|
|
1003
1007
|
}
|
|
1004
|
-
else if (this.pendingConnectionMetadataHead >= 1024
|
|
1005
|
-
|
|
1008
|
+
else if (this.pendingConnectionMetadataHead >= 1024 &&
|
|
1009
|
+
this.pendingConnectionMetadataHead * 2 >= this.pendingConnectionMetadata.length) {
|
|
1006
1010
|
this.pendingConnectionMetadata.splice(0, this.pendingConnectionMetadataHead);
|
|
1007
1011
|
this.pendingConnectionMetadataHead = 0;
|
|
1008
1012
|
}
|
|
@@ -1012,8 +1016,8 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1012
1016
|
this.unaddressedMonitorSessionCount += 1;
|
|
1013
1017
|
}
|
|
1014
1018
|
takeUnaddressedMonitorSession() {
|
|
1015
|
-
while (this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length
|
|
1016
|
-
|
|
1019
|
+
while (this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length &&
|
|
1020
|
+
this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead] === undefined) {
|
|
1017
1021
|
this.unaddressedMonitorSessionHead += 1;
|
|
1018
1022
|
}
|
|
1019
1023
|
const sessionId = this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead];
|
|
@@ -1026,8 +1030,8 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1026
1030
|
this.unaddressedMonitorSessions.length = 0;
|
|
1027
1031
|
this.unaddressedMonitorSessionHead = 0;
|
|
1028
1032
|
}
|
|
1029
|
-
else if (this.unaddressedMonitorSessionHead >= 1024
|
|
1030
|
-
|
|
1033
|
+
else if (this.unaddressedMonitorSessionHead >= 1024 &&
|
|
1034
|
+
this.unaddressedMonitorSessionHead * 2 >= this.unaddressedMonitorSessions.length) {
|
|
1031
1035
|
this.unaddressedMonitorSessions.splice(0, this.unaddressedMonitorSessionHead);
|
|
1032
1036
|
this.unaddressedMonitorSessionHead = 0;
|
|
1033
1037
|
}
|
|
@@ -1035,9 +1039,9 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1035
1039
|
}
|
|
1036
1040
|
firstUnaddressedSession() {
|
|
1037
1041
|
for (const session of this.sessions.values()) {
|
|
1038
|
-
if (!session.isDisconnected
|
|
1039
|
-
|
|
1040
|
-
|
|
1042
|
+
if (!session.isDisconnected &&
|
|
1043
|
+
session.stream.localAddr === undefined &&
|
|
1044
|
+
session.stream.remoteAddr === undefined) {
|
|
1041
1045
|
return session;
|
|
1042
1046
|
}
|
|
1043
1047
|
}
|
|
@@ -1073,9 +1077,9 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1073
1077
|
let match;
|
|
1074
1078
|
let matchCount = 0;
|
|
1075
1079
|
for (const session of this.sessions.values()) {
|
|
1076
|
-
if (session.isDisconnected
|
|
1077
|
-
|
|
1078
|
-
|
|
1080
|
+
if (session.isDisconnected ||
|
|
1081
|
+
session.stream.localAddr !== event.localAddr ||
|
|
1082
|
+
session.stream.remoteAddr !== event.remoteAddr) {
|
|
1079
1083
|
continue;
|
|
1080
1084
|
}
|
|
1081
1085
|
match = session;
|
|
@@ -1120,11 +1124,11 @@ class ZLinkStreamSessionNodeRuntime {
|
|
|
1120
1124
|
// queued. Wake the recv loop instead of waiting for its idle backoff.
|
|
1121
1125
|
this.wakeReceiveLoop();
|
|
1122
1126
|
setImmediate(() => {
|
|
1123
|
-
if (pending.cancelled
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1127
|
+
if (pending.cancelled ||
|
|
1128
|
+
this.stopped ||
|
|
1129
|
+
this.pendingEndpointlessDisconnect !== pending ||
|
|
1130
|
+
this.activityVersion !== pending.activityVersion ||
|
|
1131
|
+
this.sessions.get(pending.session.stream.sessionId) !== pending.session) {
|
|
1128
1132
|
return;
|
|
1129
1133
|
}
|
|
1130
1134
|
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.22.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.
|
|
22
|
+
"@zlink-systems/stream-wire": "0.22.0",
|
|
23
23
|
"@zlink-systems/zlink": "1.2.1"
|
|
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)) {
|
|
@@ -83,9 +83,11 @@ export function normalizeEndpoint(endpoint: string): string {
|
|
|
83
83
|
const normalizedHost = normalizeHost(host);
|
|
84
84
|
const normalizedPort = normalizePort(port);
|
|
85
85
|
|
|
86
|
-
return
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
return (
|
|
87
|
+
`${scheme}://${userInfo}${normalizedHost}` +
|
|
88
|
+
(normalizedPort.length > 0 ? `:${normalizedPort}` : '') +
|
|
89
|
+
normalizeSuffix(suffix)
|
|
90
|
+
);
|
|
89
91
|
}
|
|
90
92
|
|
|
91
93
|
function findAuthorityEnd(rest: string): number {
|
|
@@ -212,11 +214,8 @@ export function buildAdvertisedEndpoint(
|
|
|
212
214
|
const match = ADVERTISE_SOURCE_PATTERN.exec(normalized);
|
|
213
215
|
if (match === null) return normalized;
|
|
214
216
|
const boundHost = unbracketHost(match[2]);
|
|
215
|
-
const defaultHost =
|
|
216
|
-
? '127.0.0.1'
|
|
217
|
-
: boundHost === '::'
|
|
218
|
-
? '::1'
|
|
219
|
-
: undefined;
|
|
217
|
+
const defaultHost =
|
|
218
|
+
boundHost === '0.0.0.0' ? '127.0.0.1' : boundHost === '::' ? '::1' : undefined;
|
|
220
219
|
if (defaultHost === undefined) return normalized;
|
|
221
220
|
const host = defaultHost.includes(':') ? `[${defaultHost}]` : defaultHost;
|
|
222
221
|
return normalizeEndpoint(`${match[1].toLowerCase()}://${host}:${match[3]}`);
|
|
@@ -225,9 +224,10 @@ export function buildAdvertisedEndpoint(
|
|
|
225
224
|
if (match === null) return undefined;
|
|
226
225
|
const scheme = match[1].toLowerCase();
|
|
227
226
|
if (restrictToScheme !== undefined && scheme !== restrictToScheme) return undefined;
|
|
228
|
-
const host =
|
|
229
|
-
|
|
230
|
-
|
|
227
|
+
const host =
|
|
228
|
+
advertiseHost.includes(':') && !advertiseHost.startsWith('[')
|
|
229
|
+
? `[${advertiseHost}]`
|
|
230
|
+
: advertiseHost;
|
|
231
231
|
return normalizeEndpoint(`${scheme}://${host}:${match[3]}`);
|
|
232
232
|
}
|
|
233
233
|
|
|
@@ -17,9 +17,7 @@ export interface ZLinkActorRelocationAdapter<TActor extends ZLinkActor> {
|
|
|
17
17
|
restore(actor: TActor, payload: Uint8Array, signal: AbortSignal): Promise<void>;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
export interface ZLinkSpotRelocationAdapter<
|
|
21
|
-
TSpot extends ZLinkSpot | ZLinkInstanceSpot
|
|
22
|
-
> {
|
|
20
|
+
export interface ZLinkSpotRelocationAdapter<TSpot extends ZLinkSpot | ZLinkInstanceSpot> {
|
|
23
21
|
capture(spot: TSpot, signal: AbortSignal): Promise<Uint8Array>;
|
|
24
22
|
restore(spot: TSpot, payload: Uint8Array, signal: AbortSignal): Promise<void>;
|
|
25
23
|
}
|