@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
|
@@ -2,7 +2,11 @@ import type { Message } from '../../contracts/Common/Message';
|
|
|
2
2
|
import type { ZLinkBackendSpotRouteBridge } from '../backend/contracts';
|
|
3
3
|
import { ZLinkConfigurationException } from '../configuration';
|
|
4
4
|
import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
closeMessages,
|
|
7
|
+
decodeChannelReply,
|
|
8
|
+
type ZLinkChannelEnvelopeCodecRegistry
|
|
9
|
+
} from './channel-envelope';
|
|
6
10
|
import { appendParts } from './channel-multipart';
|
|
7
11
|
import { awaitWithAbort } from '../abort';
|
|
8
12
|
|
|
@@ -16,13 +20,20 @@ export class ZLinkSpotRouteBridgeTransport {
|
|
|
16
20
|
return this.bridges.has(routerChannelId);
|
|
17
21
|
}
|
|
18
22
|
|
|
19
|
-
async send(
|
|
23
|
+
async send(
|
|
24
|
+
target: ZLinkSpotRouteTarget,
|
|
25
|
+
parts: readonly Message[],
|
|
26
|
+
signal?: AbortSignal
|
|
27
|
+
): Promise<void> {
|
|
20
28
|
const bridge = this.requireBridge(target.routerChannelId);
|
|
21
29
|
try {
|
|
22
|
-
await awaitWithAbort(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
await awaitWithAbort(
|
|
31
|
+
appendParts(
|
|
32
|
+
bridge.send(target.routerChannelId, target.targetNodeRid, target.spotId),
|
|
33
|
+
parts
|
|
34
|
+
).submit(),
|
|
35
|
+
signal
|
|
36
|
+
);
|
|
26
37
|
} finally {
|
|
27
38
|
closeMessages(parts);
|
|
28
39
|
}
|
|
@@ -39,7 +50,9 @@ export class ZLinkSpotRouteBridgeTransport {
|
|
|
39
50
|
const operation = appendParts(
|
|
40
51
|
bridge.request(target.routerChannelId, target.targetNodeRid, target.spotId),
|
|
41
52
|
parts
|
|
42
|
-
)
|
|
53
|
+
)
|
|
54
|
+
.timeout(timeoutMs ?? 0)
|
|
55
|
+
.submit();
|
|
43
56
|
const replyParts = await awaitWithAbort(operation, signal, () => {
|
|
44
57
|
void operation.then(closeMessages, () => undefined);
|
|
45
58
|
});
|
|
@@ -58,7 +71,8 @@ export class ZLinkSpotRouteBridgeTransport {
|
|
|
58
71
|
signal?: AbortSignal
|
|
59
72
|
): Promise<readonly Message[]> {
|
|
60
73
|
const bridge = this.requireBridge(target.routerChannelId);
|
|
61
|
-
const operation = bridge
|
|
74
|
+
const operation = bridge
|
|
75
|
+
.request(target.routerChannelId, target.targetNodeRid, target.spotId)
|
|
62
76
|
.message(request)
|
|
63
77
|
.timeout(timeoutMs ?? this.defaultRequestTimeoutMs ?? 0)
|
|
64
78
|
.submit();
|
|
@@ -69,7 +83,10 @@ export class ZLinkSpotRouteBridgeTransport {
|
|
|
69
83
|
|
|
70
84
|
private requireBridge(routerChannelId: string): ZLinkBackendSpotRouteBridge {
|
|
71
85
|
const bridge = this.bridges.get(routerChannelId);
|
|
72
|
-
if (bridge === undefined)
|
|
86
|
+
if (bridge === undefined)
|
|
87
|
+
throw new ZLinkConfigurationException(
|
|
88
|
+
`Route channel '${routerChannelId}' has no SPOT route bridge.`
|
|
89
|
+
);
|
|
73
90
|
return bridge;
|
|
74
91
|
}
|
|
75
92
|
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { Message } from '../../contracts/Common/Message';
|
|
2
2
|
import type { RoutingId } from '../../contracts';
|
|
3
3
|
import type { ZLinkFrameworkRegistration } from '../configuration';
|
|
4
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
ZLinkBackendSpot,
|
|
6
|
+
ZLinkBackendSpotNode,
|
|
7
|
+
ZLinkBackendSpotRouteBridge
|
|
8
|
+
} from '../backend/contracts';
|
|
5
9
|
import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
|
|
6
10
|
import {
|
|
7
11
|
encodeChannelEnvelopeParts,
|
|
@@ -103,9 +107,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
103
107
|
): Promise<void> {
|
|
104
108
|
// Call-scoped flow (spec 27 §4): the envelope flow pair lives only for
|
|
105
109
|
// the duration of this outbound call, never in the caller's context.
|
|
106
|
-
return runWithOutboundFlow(
|
|
107
|
-
this.
|
|
108
|
-
() => this.routeSendToSpotScoped(spotRouteTarget, packetName, message, signal, metadata, timeoutMs)
|
|
110
|
+
return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
|
|
111
|
+
this.routeSendToSpotScoped(spotRouteTarget, packetName, message, signal, metadata, timeoutMs)
|
|
109
112
|
);
|
|
110
113
|
}
|
|
111
114
|
|
|
@@ -143,8 +146,10 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
143
146
|
this.options.flowCreationEnabled?.() ?? true,
|
|
144
147
|
metadata
|
|
145
148
|
) as readonly Message[];
|
|
146
|
-
if (
|
|
147
|
-
|
|
149
|
+
if (
|
|
150
|
+
this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId) &&
|
|
151
|
+
(await this.spotNodeTransport.send(spotRouteTarget, parts, signal))
|
|
152
|
+
) {
|
|
148
153
|
return;
|
|
149
154
|
}
|
|
150
155
|
if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
|
|
@@ -169,9 +174,15 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
169
174
|
signal?: AbortSignal,
|
|
170
175
|
metadata?: ReadonlyMap<string, string>
|
|
171
176
|
): Promise<TReply> {
|
|
172
|
-
return runWithOutboundFlow(
|
|
173
|
-
this.
|
|
174
|
-
|
|
177
|
+
return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
|
|
178
|
+
this.routeRequestToSpotScoped<TReply>(
|
|
179
|
+
spotRouteTarget,
|
|
180
|
+
packetName,
|
|
181
|
+
request,
|
|
182
|
+
timeoutMs,
|
|
183
|
+
signal,
|
|
184
|
+
metadata
|
|
185
|
+
)
|
|
175
186
|
);
|
|
176
187
|
}
|
|
177
188
|
|
|
@@ -219,7 +230,13 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
219
230
|
if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
|
|
220
231
|
}
|
|
221
232
|
if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
|
|
222
|
-
return this.bridgeTransport.request<TReply>(
|
|
233
|
+
return this.bridgeTransport.request<TReply>(
|
|
234
|
+
spotRouteTarget,
|
|
235
|
+
parts,
|
|
236
|
+
codecs,
|
|
237
|
+
timeoutMs,
|
|
238
|
+
signal
|
|
239
|
+
);
|
|
223
240
|
}
|
|
224
241
|
if (this.targets.hasBoundRouteRouter(spotRouteTarget.routerChannelId)) {
|
|
225
242
|
return this.routerSocketTransport.request<TReply>(
|
|
@@ -296,7 +313,13 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
296
313
|
timeoutMs: number | undefined,
|
|
297
314
|
signal?: AbortSignal
|
|
298
315
|
): Promise<readonly Message[]> {
|
|
299
|
-
return this.sourceSpotRouter.requestRaw(
|
|
316
|
+
return this.sourceSpotRouter.requestRaw(
|
|
317
|
+
sourceSpot,
|
|
318
|
+
spotRouteTarget,
|
|
319
|
+
request,
|
|
320
|
+
timeoutMs,
|
|
321
|
+
signal
|
|
322
|
+
);
|
|
300
323
|
}
|
|
301
324
|
|
|
302
325
|
async routeRequestRawToSpot(
|
|
@@ -318,12 +341,16 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
318
341
|
if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
|
|
319
342
|
return this.bridgeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
|
|
320
343
|
}
|
|
321
|
-
const spotNodeRequest = this.spotNodeTransport.requestRaw(
|
|
344
|
+
const spotNodeRequest = this.spotNodeTransport.requestRaw(
|
|
345
|
+
spotRouteTarget,
|
|
346
|
+
request,
|
|
347
|
+
timeoutMs,
|
|
348
|
+
signal
|
|
349
|
+
);
|
|
322
350
|
if (spotNodeRequest !== undefined) {
|
|
323
351
|
return spotNodeRequest;
|
|
324
352
|
}
|
|
325
353
|
|
|
326
354
|
return this.routerSocketTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
|
|
327
355
|
}
|
|
328
|
-
|
|
329
356
|
}
|
|
@@ -17,8 +17,9 @@ export class ZLinkSpotRouteTargetResolver {
|
|
|
17
17
|
if (named?.router !== undefined) {
|
|
18
18
|
return this.spotNodes?.get(routerChannelId);
|
|
19
19
|
}
|
|
20
|
-
const channelOwners = [...this.registration.spotNodes.entries()]
|
|
21
|
-
|
|
20
|
+
const channelOwners = [...this.registration.spotNodes.entries()].filter(([, node]) =>
|
|
21
|
+
Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, routerChannelId)
|
|
22
|
+
);
|
|
22
23
|
if (channelOwners.length === 1) {
|
|
23
24
|
return this.spotNodes?.get(channelOwners[0][0]);
|
|
24
25
|
}
|
|
@@ -40,8 +41,10 @@ export class ZLinkSpotRouteTargetResolver {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
localRouteNode(target: ZLinkSpotRouteTarget): ZLinkBackendSpotNode | undefined {
|
|
43
|
-
const routeNode =
|
|
44
|
-
|
|
44
|
+
const routeNode =
|
|
45
|
+
this.routeNode(target.routerChannelId) ?? this.spotNodes?.get(target.routerChannelId);
|
|
46
|
+
return routeNode !== undefined &&
|
|
47
|
+
routingIdsMatchSpotRoute(routeNode.routingId, target.targetNodeRid)
|
|
45
48
|
? routeNode
|
|
46
49
|
: undefined;
|
|
47
50
|
}
|
|
@@ -55,8 +58,10 @@ export class ZLinkSpotRouteTargetResolver {
|
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
canRouteChannel(routerChannelId: string): boolean {
|
|
58
|
-
return
|
|
59
|
-
|
|
61
|
+
return (
|
|
62
|
+
this.registration.routeChannels.has(routerChannelId) ||
|
|
63
|
+
this.spotNodeRouter(routerChannelId) !== undefined
|
|
64
|
+
);
|
|
60
65
|
}
|
|
61
66
|
|
|
62
67
|
canRoutePacketChannel(routerChannelId: string): boolean {
|
|
@@ -73,15 +78,19 @@ export class ZLinkSpotRouteTargetResolver {
|
|
|
73
78
|
hasNamedSpotNode(routerChannelId: string): boolean {
|
|
74
79
|
return this.registration.spotNodes.has(routerChannelId);
|
|
75
80
|
}
|
|
76
|
-
|
|
77
81
|
}
|
|
78
82
|
|
|
79
|
-
function routingIdsMatchSpotRoute(
|
|
83
|
+
function routingIdsMatchSpotRoute(
|
|
84
|
+
left: RoutingId | undefined,
|
|
85
|
+
right: RoutingId | undefined
|
|
86
|
+
): boolean {
|
|
80
87
|
if (left === undefined || right === undefined) {
|
|
81
88
|
return false;
|
|
82
89
|
}
|
|
83
90
|
const rightCandidates = spotRouteRoutingIdCandidates(right);
|
|
84
|
-
return [...spotRouteRoutingIdCandidates(left)].some(candidate =>
|
|
91
|
+
return [...spotRouteRoutingIdCandidates(left)].some((candidate) =>
|
|
92
|
+
rightCandidates.has(candidate)
|
|
93
|
+
);
|
|
85
94
|
}
|
|
86
95
|
|
|
87
96
|
function spotRouteRoutingIdCandidates(routingId: RoutingId): ReadonlySet<string> {
|
|
@@ -12,7 +12,9 @@ import {
|
|
|
12
12
|
type ZLinkCodecSerializerSelection
|
|
13
13
|
} from '../../contracts/Configuration/CodecSerializerSelection';
|
|
14
14
|
|
|
15
|
-
export class DefaultZLinkCodecRegistryBuilder
|
|
15
|
+
export class DefaultZLinkCodecRegistryBuilder
|
|
16
|
+
implements ZLinkCodecRegistryBuilder, ZLinkCodecRegistrar
|
|
17
|
+
{
|
|
16
18
|
private readonly serializers = new Map<string, ZLinkMessageSerializer>();
|
|
17
19
|
private readonly serializerSelections = new Map<string, ZLinkCodecSerializerSelection>();
|
|
18
20
|
private readonly streamCodecs = new Map<string, unknown>();
|
|
@@ -65,5 +67,4 @@ export class DefaultZLinkCodecRegistryBuilder implements ZLinkCodecRegistryBuild
|
|
|
65
67
|
this.codecs.add(normalized);
|
|
66
68
|
return this;
|
|
67
69
|
}
|
|
68
|
-
|
|
69
70
|
}
|
|
@@ -13,9 +13,18 @@ export function currentFlowContext(): ZLinkFlowContextValue | undefined {
|
|
|
13
13
|
return flowStorage.getStore();
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export function currentOrCreateFlow(
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
export function currentOrCreateFlow(
|
|
17
|
+
origin?: ZLinkFlowOrigin,
|
|
18
|
+
createIfAbsent?: true
|
|
19
|
+
): ZLinkFlowContextValue;
|
|
20
|
+
export function currentOrCreateFlow(
|
|
21
|
+
origin: ZLinkFlowOrigin,
|
|
22
|
+
createIfAbsent: false
|
|
23
|
+
): ZLinkFlowContextValue | undefined;
|
|
24
|
+
export function currentOrCreateFlow(
|
|
25
|
+
origin: ZLinkFlowOrigin,
|
|
26
|
+
createIfAbsent: boolean
|
|
27
|
+
): ZLinkFlowContextValue | undefined;
|
|
19
28
|
/**
|
|
20
29
|
* Returns the ambient flow context or, when absent and `createIfAbsent`, a
|
|
21
30
|
* fresh flow value. The returned value is NOT installed into the ambient
|
|
@@ -47,10 +47,7 @@ export {
|
|
|
47
47
|
ZLinkLocationSpotEventKind,
|
|
48
48
|
ZLinkSocketNativeEventType
|
|
49
49
|
} from './internal-event-contracts';
|
|
50
|
-
import type {
|
|
51
|
-
ZLinkBackendSocketMonitor,
|
|
52
|
-
ZLinkBackendSocketMonitorEvent
|
|
53
|
-
} from '../backend';
|
|
50
|
+
import type { ZLinkBackendSocketMonitor, ZLinkBackendSocketMonitorEvent } from '../backend';
|
|
54
51
|
import { AsyncResource } from 'node:async_hooks';
|
|
55
52
|
import { ZLinkStateLane } from '../execution/state-lane';
|
|
56
53
|
import { normalizeOpaqueRoutingId } from '../routing-id';
|
|
@@ -66,15 +63,9 @@ export interface ZLinkActorOwnerLeaseObservation {
|
|
|
66
63
|
}
|
|
67
64
|
|
|
68
65
|
/** Emits high-cardinality resolver detail only on the existing relocation debug path. */
|
|
69
|
-
export function emitActorOwnerLeaseObservation(
|
|
70
|
-
observation: ZLinkActorOwnerLeaseObservation
|
|
71
|
-
): void {
|
|
66
|
+
export function emitActorOwnerLeaseObservation(observation: ZLinkActorOwnerLeaseObservation): void {
|
|
72
67
|
if (process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION !== '1') return;
|
|
73
|
-
console.error(
|
|
74
|
-
'[zlink.runtime.relocation]',
|
|
75
|
-
'actor_route.owner_lease_observed',
|
|
76
|
-
observation
|
|
77
|
-
);
|
|
68
|
+
console.error('[zlink.runtime.relocation]', 'actor_route.owner_lease_observed', observation);
|
|
78
69
|
}
|
|
79
70
|
|
|
80
71
|
/** Runtime composition port. It is intentionally absent from the public contract barrel. */
|
|
@@ -111,9 +102,8 @@ export class ZLinkSocketMonitoringSource {
|
|
|
111
102
|
private readonly publisher: ZLinkRuntimeEventPublisher
|
|
112
103
|
) {
|
|
113
104
|
validateSourceName(registration.sourceName);
|
|
114
|
-
this.enabledEvents =
|
|
115
|
-
? undefined
|
|
116
|
-
: new Set(registration.events);
|
|
105
|
+
this.enabledEvents =
|
|
106
|
+
registration.events === undefined ? undefined : new Set(registration.events);
|
|
117
107
|
}
|
|
118
108
|
|
|
119
109
|
start(): void {
|
|
@@ -155,38 +145,38 @@ export class ZLinkLocationRuntimeMonitoringSource {
|
|
|
155
145
|
let topology;
|
|
156
146
|
let serviceSummary;
|
|
157
147
|
try {
|
|
158
|
-
[status, topology, serviceSummary] = await startOutsideStateLane(() =>
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
148
|
+
[status, topology, serviceSummary] = await startOutsideStateLane(() =>
|
|
149
|
+
Promise.all([
|
|
150
|
+
this.query.getStatus(signal),
|
|
151
|
+
this.query.listTopology({}, undefined, signal),
|
|
152
|
+
this.query.listServiceSummaries({}, undefined, signal)
|
|
153
|
+
])
|
|
154
|
+
);
|
|
163
155
|
} catch (error) {
|
|
164
156
|
if (await this.lane.run(() => this.markStoreFailureCore())) {
|
|
165
|
-
await startOutsideStateLane(() =>
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
157
|
+
await startOutsideStateLane(() =>
|
|
158
|
+
this.publisher.publish({
|
|
159
|
+
sourceName: this.registration.sourceName,
|
|
160
|
+
timestamp: new Date(),
|
|
161
|
+
event: LocationRuntimeEventKind.StoreFailure
|
|
162
|
+
} satisfies ZLinkLocationRuntimeEvent)
|
|
163
|
+
);
|
|
170
164
|
}
|
|
171
165
|
return;
|
|
172
166
|
}
|
|
173
167
|
|
|
174
168
|
if (await this.lane.run(() => this.markStoreRecoveredCore())) {
|
|
175
|
-
await startOutsideStateLane(() =>
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
169
|
+
await startOutsideStateLane(() =>
|
|
170
|
+
this.publisher.publish({
|
|
171
|
+
sourceName: this.registration.sourceName,
|
|
172
|
+
timestamp: new Date(),
|
|
173
|
+
event: LocationRuntimeEventKind.StoreRecovered
|
|
174
|
+
} satisfies ZLinkLocationRuntimeEvent)
|
|
175
|
+
);
|
|
180
176
|
}
|
|
181
177
|
|
|
182
|
-
await this.publishIfChanged(
|
|
183
|
-
|
|
184
|
-
status
|
|
185
|
-
);
|
|
186
|
-
await this.publishIfChanged(
|
|
187
|
-
LocationRuntimeEventKind.TopologyChanged,
|
|
188
|
-
topology.items
|
|
189
|
-
);
|
|
178
|
+
await this.publishIfChanged(LocationRuntimeEventKind.StatusChanged, status);
|
|
179
|
+
await this.publishIfChanged(LocationRuntimeEventKind.TopologyChanged, topology.items);
|
|
190
180
|
await this.publishIfChanged(
|
|
191
181
|
LocationRuntimeEventKind.ServiceSummaryChanged,
|
|
192
182
|
serviceSummary.items
|
|
@@ -205,16 +195,16 @@ export class ZLinkLocationRuntimeMonitoringSource {
|
|
|
205
195
|
return true;
|
|
206
196
|
}
|
|
207
197
|
|
|
208
|
-
private async publishIfChanged(
|
|
198
|
+
private async publishIfChanged(
|
|
199
|
+
event: ZLinkLocationRuntimeEventKind,
|
|
200
|
+
snapshot: unknown
|
|
201
|
+
): Promise<void> {
|
|
209
202
|
const current = stableSnapshot(snapshot);
|
|
210
203
|
const previous = await this.lane.run(() => this.previousSnapshotCore(event));
|
|
211
204
|
if (current === previous) return;
|
|
212
|
-
await startOutsideStateLane(() =>
|
|
213
|
-
this.publisher,
|
|
214
|
-
|
|
215
|
-
event,
|
|
216
|
-
snapshot
|
|
217
|
-
));
|
|
205
|
+
await startOutsideStateLane(() =>
|
|
206
|
+
publishLocationRuntimeChange(this.publisher, this.registration.sourceName, event, snapshot)
|
|
207
|
+
);
|
|
218
208
|
await this.lane.run(() => this.updateSnapshotCore(event, current));
|
|
219
209
|
}
|
|
220
210
|
|
|
@@ -258,7 +248,12 @@ export class ZLinkLocationMonitoringEventEmitter {
|
|
|
258
248
|
},
|
|
259
249
|
private readonly publisher?: ZLinkRuntimeEventPublisher
|
|
260
250
|
) {
|
|
261
|
-
for (const source of [
|
|
251
|
+
for (const source of [
|
|
252
|
+
registration.peer,
|
|
253
|
+
registration.spot,
|
|
254
|
+
registration.actor,
|
|
255
|
+
registration.route
|
|
256
|
+
]) {
|
|
262
257
|
if (source !== undefined) {
|
|
263
258
|
validateSourceName(source.sourceName);
|
|
264
259
|
}
|
|
@@ -313,36 +308,68 @@ export class ZLinkLocationMonitoringEventEmitter {
|
|
|
313
308
|
this.publishRoute(RouteLocationEventKind.ResolveMiss, { key });
|
|
314
309
|
}
|
|
315
310
|
|
|
316
|
-
private publishPeer(
|
|
311
|
+
private publishPeer(
|
|
312
|
+
event: ZLinkLocationPeerEvent['event'],
|
|
313
|
+
payload: Record<string, unknown>
|
|
314
|
+
): void {
|
|
317
315
|
const registration = this.registration.peer;
|
|
318
316
|
if (registration === undefined) {
|
|
319
317
|
return;
|
|
320
318
|
}
|
|
321
|
-
this.publish({
|
|
319
|
+
this.publish({
|
|
320
|
+
sourceName: registration.sourceName,
|
|
321
|
+
timestamp: new Date(),
|
|
322
|
+
event,
|
|
323
|
+
...payload
|
|
324
|
+
} as ZLinkLocationPeerEvent);
|
|
322
325
|
}
|
|
323
326
|
|
|
324
|
-
private publishSpotLocation(
|
|
327
|
+
private publishSpotLocation(
|
|
328
|
+
event: ZLinkLocationSpotEvent['event'],
|
|
329
|
+
payload: Record<string, unknown>
|
|
330
|
+
): void {
|
|
325
331
|
const registration = this.registration.spot;
|
|
326
332
|
if (registration === undefined) {
|
|
327
333
|
return;
|
|
328
334
|
}
|
|
329
|
-
this.publish({
|
|
335
|
+
this.publish({
|
|
336
|
+
sourceName: registration.sourceName,
|
|
337
|
+
timestamp: new Date(),
|
|
338
|
+
event,
|
|
339
|
+
...payload
|
|
340
|
+
} as ZLinkLocationSpotEvent);
|
|
330
341
|
}
|
|
331
342
|
|
|
332
|
-
private publishActor(
|
|
343
|
+
private publishActor(
|
|
344
|
+
event: ZLinkLocationActorEvent['event'],
|
|
345
|
+
payload: Record<string, unknown>
|
|
346
|
+
): void {
|
|
333
347
|
const registration = this.registration.actor;
|
|
334
348
|
if (registration === undefined) {
|
|
335
349
|
return;
|
|
336
350
|
}
|
|
337
|
-
this.publish({
|
|
351
|
+
this.publish({
|
|
352
|
+
sourceName: registration.sourceName,
|
|
353
|
+
timestamp: new Date(),
|
|
354
|
+
event,
|
|
355
|
+
...payload
|
|
356
|
+
} as ZLinkLocationActorEvent);
|
|
338
357
|
}
|
|
339
358
|
|
|
340
|
-
private publishRoute(
|
|
359
|
+
private publishRoute(
|
|
360
|
+
event: ZLinkLocationRouteEvent['event'],
|
|
361
|
+
payload: Record<string, unknown>
|
|
362
|
+
): void {
|
|
341
363
|
const registration = this.registration.route;
|
|
342
364
|
if (registration === undefined) {
|
|
343
365
|
return;
|
|
344
366
|
}
|
|
345
|
-
this.publish({
|
|
367
|
+
this.publish({
|
|
368
|
+
sourceName: registration.sourceName,
|
|
369
|
+
timestamp: new Date(),
|
|
370
|
+
event,
|
|
371
|
+
...payload
|
|
372
|
+
} as ZLinkLocationRouteEvent);
|
|
346
373
|
}
|
|
347
374
|
|
|
348
375
|
private publish<TEvent extends ZLinkRuntimeEvent>(event: TEvent): void {
|
|
@@ -357,7 +384,10 @@ export class ZLinkLocationMonitoringEventEmitter {
|
|
|
357
384
|
|
|
358
385
|
export * from './topology-runtime-projections';
|
|
359
386
|
|
|
360
|
-
function toSocketEvent(
|
|
387
|
+
function toSocketEvent(
|
|
388
|
+
sourceName: string,
|
|
389
|
+
raw: ZLinkBackendSocketMonitorEvent
|
|
390
|
+
): ZLinkSocketEvent | undefined {
|
|
361
391
|
const event = mapSocketEvent(raw.nativeEvent as ZLinkSocketNativeEventType, raw.value);
|
|
362
392
|
if (event === undefined) {
|
|
363
393
|
return undefined;
|
|
@@ -408,11 +438,16 @@ async function publishLocationRuntimeChange<T>(
|
|
|
408
438
|
snapshot: T
|
|
409
439
|
): Promise<void> {
|
|
410
440
|
const base = { sourceName, timestamp: new Date() };
|
|
411
|
-
const runtimeEvent: ZLinkLocationRuntimeEvent =
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
441
|
+
const runtimeEvent: ZLinkLocationRuntimeEvent =
|
|
442
|
+
event === LocationRuntimeEventKind.StatusChanged
|
|
443
|
+
? { ...base, event, status: snapshot as ZLinkLocationRuntimeStatus }
|
|
444
|
+
: event === LocationRuntimeEventKind.TopologyChanged
|
|
445
|
+
? { ...base, event, topology: snapshot as readonly ZLinkLocationTopologyEntry[] }
|
|
446
|
+
: {
|
|
447
|
+
...base,
|
|
448
|
+
event: LocationRuntimeEventKind.ServiceSummaryChanged,
|
|
449
|
+
serviceSummary: snapshot as readonly ZLinkLocationServiceSummary[]
|
|
450
|
+
};
|
|
416
451
|
await publisher.publish(runtimeEvent);
|
|
417
452
|
}
|
|
418
453
|
|
|
@@ -421,7 +456,7 @@ function startOutsideStateLane<T>(work: () => T): T {
|
|
|
421
456
|
}
|
|
422
457
|
|
|
423
458
|
function stableSnapshot(value: unknown): string {
|
|
424
|
-
return JSON.stringify(value, (_key, item) => typeof item === 'bigint' ? item.toString() : item);
|
|
459
|
+
return JSON.stringify(value, (_key, item) => (typeof item === 'bigint' ? item.toString() : item));
|
|
425
460
|
}
|
|
426
461
|
|
|
427
462
|
function validateSourceName(sourceName: string): void {
|