@zlink-systems/framework 0.25.0 → 0.27.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/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -6,23 +6,28 @@ import {
|
|
|
6
6
|
type ZLinkFanoutPublisherDescriptor,
|
|
7
7
|
type ZLinkLocationOwnerToken
|
|
8
8
|
} from '../../contracts/Locations';
|
|
9
|
-
import type { ZLinkFanoutLocationStore } from '../locations/internal-store-contracts';
|
|
10
9
|
import {
|
|
11
10
|
zlinkRuntimeDefaultLocationOptions,
|
|
12
11
|
type ZLinkLocationOptionOverrides
|
|
13
12
|
} from '../../contracts/Locations/Options';
|
|
14
|
-
import
|
|
15
|
-
import { buildAdvertisedEndpoint, ZLinkConfigurationException } from '../configuration';
|
|
16
|
-
import type { ZLinkLocationRuntime, ZLinkLocationRuntimeStores } from '../locations';
|
|
13
|
+
import { ZLINK_PROVIDER_MAX_PAGE_SIZE } from '../../contracts/Locations/Stores';
|
|
17
14
|
import type { ZLinkBackendSubscriberSocket } from '../backend/contracts';
|
|
18
|
-
import {
|
|
15
|
+
import { type ZLinkFrameworkRegistration, ZLinkConfigurationException } from '../configuration';
|
|
16
|
+
|
|
19
17
|
import { ZLinkStateLane } from '../execution/state-lane';
|
|
18
|
+
import { discoveryAvailabilityForRuntimeState } from '../foundation/runtime-state-projections';
|
|
19
|
+
import { closeResources, finishResourceCleanup } from '../foundation/event-loop-resources';
|
|
20
|
+
import type { ZLinkLocationRuntime, ZLinkLocationRuntimeStores } from '../locations';
|
|
21
|
+
import type { ZLinkFanoutLocationStore } from '../locations/internal-store-contracts';
|
|
22
|
+
import { ZLinkChannelSocketRegistry } from './channel-socket-registry';
|
|
20
23
|
|
|
21
|
-
interface
|
|
24
|
+
interface FanoutTarget {
|
|
22
25
|
descriptor: ZLinkFanoutPublisherDescriptor;
|
|
26
|
+
connection?: ActiveFanoutConnection;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface ActiveFanoutConnection {
|
|
23
30
|
readonly connectionId: string;
|
|
24
|
-
readonly subscriber: ZLinkBackendSubscriberSocket;
|
|
25
|
-
reconnectEligible: boolean;
|
|
26
31
|
stopReceiver: () => Promise<void>;
|
|
27
32
|
state: 'connecting' | 'ready';
|
|
28
33
|
}
|
|
@@ -39,7 +44,7 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
39
44
|
readonly lifecycleGeneration: bigint;
|
|
40
45
|
}
|
|
41
46
|
>();
|
|
42
|
-
private readonly
|
|
47
|
+
private readonly targets = new Map<string, FanoutTarget>();
|
|
43
48
|
private controller?: AbortController;
|
|
44
49
|
private timer?: NodeJS.Timeout;
|
|
45
50
|
|
|
@@ -95,18 +100,49 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
95
100
|
return current;
|
|
96
101
|
});
|
|
97
102
|
if (timer !== undefined) clearTimeout(timer);
|
|
98
|
-
const
|
|
99
|
-
await Promise.allSettled(
|
|
100
|
-
|
|
103
|
+
const targets = await this.lane.run(() => [...this.targets]);
|
|
104
|
+
const targetResults = await Promise.allSettled(
|
|
105
|
+
targets.map(([id, target]) => this.removeTarget(id, target))
|
|
106
|
+
);
|
|
107
|
+
const publisherResults = await Promise.allSettled([this.removeLocalPublishers(signal)]);
|
|
108
|
+
finishResourceCleanup(
|
|
109
|
+
[...targetResults, ...publisherResults].flatMap((result) =>
|
|
110
|
+
result.status === 'rejected' ? [result.reason] : []
|
|
111
|
+
)
|
|
112
|
+
);
|
|
101
113
|
}
|
|
102
114
|
|
|
103
115
|
activeTargets(channelName: string): readonly ZLinkFanoutPublisherDescriptor[] {
|
|
104
|
-
return [...this.
|
|
105
|
-
.filter((target) => target.state === 'ready')
|
|
116
|
+
return [...this.targets.values()]
|
|
117
|
+
.filter((target) => target.connection?.state === 'ready')
|
|
106
118
|
.map((target) => target.descriptor)
|
|
107
119
|
.filter((descriptor) => descriptor.channelName === channelName);
|
|
108
120
|
}
|
|
109
121
|
|
|
122
|
+
topologyTargets(channelName: string) {
|
|
123
|
+
if (!this.isAutomaticSubscriber(channelName)) return undefined;
|
|
124
|
+
return [...this.targets.values()]
|
|
125
|
+
.filter((target) => target.descriptor.channelName === channelName)
|
|
126
|
+
.map((target) => ({
|
|
127
|
+
channelName,
|
|
128
|
+
publisherRoutingId: String(target.descriptor.publisherRid),
|
|
129
|
+
lifecycleGeneration: target.descriptor.lifecycleGeneration,
|
|
130
|
+
descriptorRevision: target.descriptor.descriptorRevision,
|
|
131
|
+
advertisedEndpoint: target.descriptor.endpoint,
|
|
132
|
+
state:
|
|
133
|
+
target.descriptor.state === ZLinkFrameworkRuntimeState.Serving
|
|
134
|
+
? target.connection?.state === 'ready'
|
|
135
|
+
? ('serving' as const)
|
|
136
|
+
: ('preparing' as const)
|
|
137
|
+
: discoveryAvailabilityForRuntimeState(target.descriptor.state)
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private isAutomaticSubscriber(channelName: string): boolean {
|
|
142
|
+
const subscriber = this.registration.channels.get(channelName)?.subscriber;
|
|
143
|
+
return subscriber !== undefined && (subscriber.manualConnections?.length ?? 0) === 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
110
146
|
async reclaimOwnerRows(signal?: AbortSignal): Promise<void> {
|
|
111
147
|
const owner = this.requireOwnerToken();
|
|
112
148
|
const descriptors = await this.lane.run(() => [...this.localDescriptors]);
|
|
@@ -142,11 +178,9 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
142
178
|
const owner = this.requireOwnerToken();
|
|
143
179
|
for (const [channelName, channel] of this.registration.channels) {
|
|
144
180
|
if (channel.publisher === undefined) continue;
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
channel.publisher.advertiseHost
|
|
149
|
-
);
|
|
181
|
+
// Opening the publisher binds it and fixes its advertised endpoint.
|
|
182
|
+
this.sockets.publisher(channelName);
|
|
183
|
+
const endpoint = this.sockets.fanoutPublisherEndpoint(channelName) ?? '';
|
|
150
184
|
if (endpoint.length === 0) {
|
|
151
185
|
throw new ZLinkConfigurationException(
|
|
152
186
|
`Fanout publisher '${channelName}' did not report a bound endpoint.`
|
|
@@ -217,74 +251,87 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
217
251
|
}
|
|
218
252
|
|
|
219
253
|
private async reconcileSubscribers(signal?: AbortSignal): Promise<void> {
|
|
220
|
-
for (const
|
|
221
|
-
if (
|
|
222
|
-
|
|
223
|
-
(channel.subscriber.manualConnections?.length ?? 0) > 0
|
|
224
|
-
) {
|
|
225
|
-
continue;
|
|
226
|
-
}
|
|
254
|
+
for (const channelName of this.registration.channels.keys()) {
|
|
255
|
+
if (!this.isAutomaticSubscriber(channelName)) continue;
|
|
256
|
+
const previous = this.topologyTargets(channelName)!;
|
|
227
257
|
const rows = await this.listLivePublishers(channelName, signal);
|
|
228
258
|
const desired = new Map(rows.map((row) => [fanoutConnectionId(row), row]));
|
|
229
259
|
for (const [connectionId, descriptor] of desired) {
|
|
230
|
-
|
|
260
|
+
let current = await this.lane.run(() => this.targets.get(connectionId));
|
|
231
261
|
if (current === undefined) {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
if (descriptor.descriptorRevision < current.descriptor.descriptorRevision) {
|
|
262
|
+
const created = { descriptor };
|
|
263
|
+
current = created;
|
|
264
|
+
await this.lane.run(() => this.targets.set(connectionId, created));
|
|
265
|
+
} else if (descriptor.descriptorRevision < current.descriptor.descriptorRevision) {
|
|
236
266
|
continue;
|
|
237
|
-
}
|
|
238
|
-
if (descriptor.descriptorRevision === current.descriptor.descriptorRevision) {
|
|
267
|
+
} else if (descriptor.descriptorRevision === current.descriptor.descriptorRevision) {
|
|
239
268
|
if (!sameFanoutDescriptor(descriptor, current.descriptor)) {
|
|
240
|
-
await this.
|
|
269
|
+
await this.removeTarget(connectionId, current);
|
|
270
|
+
continue;
|
|
241
271
|
}
|
|
272
|
+
} else if (!sameFanoutImmutableIdentity(descriptor, current.descriptor)) {
|
|
273
|
+
await this.removeTarget(connectionId, current);
|
|
242
274
|
continue;
|
|
275
|
+
} else {
|
|
276
|
+
const target = current;
|
|
277
|
+
await this.lane.run(() => {
|
|
278
|
+
if (this.targets.get(connectionId) === target) target.descriptor = descriptor;
|
|
279
|
+
});
|
|
280
|
+
if (current.connection?.state === 'ready') {
|
|
281
|
+
this.sockets.admitFanoutPublisher(current.descriptor, connectionId);
|
|
282
|
+
}
|
|
243
283
|
}
|
|
244
|
-
|
|
245
|
-
await this.closeConnection(connectionId);
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
await this.lane.run(() => {
|
|
249
|
-
if (this.connections.get(connectionId) === current) current.descriptor = descriptor;
|
|
250
|
-
});
|
|
251
|
-
if (current.state === 'ready') {
|
|
252
|
-
this.sockets.admitFanoutPublisher(descriptor, connectionId);
|
|
253
|
-
}
|
|
284
|
+
await this.reconcileConnection(connectionId, current);
|
|
254
285
|
}
|
|
255
|
-
const
|
|
256
|
-
for (const [connectionId, current] of
|
|
286
|
+
const targets = await this.lane.run(() => [...this.targets]);
|
|
287
|
+
for (const [connectionId, current] of targets) {
|
|
257
288
|
if (current.descriptor.channelName === channelName && !desired.has(connectionId)) {
|
|
258
|
-
await this.
|
|
289
|
+
await this.removeTarget(connectionId, current);
|
|
259
290
|
}
|
|
260
291
|
}
|
|
292
|
+
const next = this.topologyTargets(channelName)!;
|
|
293
|
+
if (
|
|
294
|
+
previous.length !== next.length ||
|
|
295
|
+
previous.some(
|
|
296
|
+
(publisher, index) =>
|
|
297
|
+
publisher.publisherRoutingId !== next[index]!.publisherRoutingId ||
|
|
298
|
+
publisher.state !== next[index]!.state
|
|
299
|
+
)
|
|
300
|
+
) {
|
|
301
|
+
this.sockets.notifyFanoutTopology(channelName);
|
|
302
|
+
}
|
|
261
303
|
}
|
|
262
304
|
}
|
|
263
305
|
|
|
264
|
-
private async
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
306
|
+
private async reconcileConnection(connectionId: string, target: FanoutTarget): Promise<void> {
|
|
307
|
+
if (target.descriptor.state !== ZLinkFrameworkRuntimeState.Serving) {
|
|
308
|
+
await this.closeConnection(target);
|
|
309
|
+
} else if (target.connection === undefined) {
|
|
310
|
+
await this.openConnection(connectionId, target);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
private async openConnection(connectionId: string, target: FanoutTarget): Promise<void> {
|
|
315
|
+
const descriptor = target.descriptor;
|
|
316
|
+
let connection: ActiveFanoutConnection | undefined;
|
|
269
317
|
const subscriber = this.sockets.openFanoutSubscriberConnection(
|
|
270
318
|
descriptor.channelName,
|
|
271
319
|
connectionId,
|
|
272
320
|
descriptor.endpoint,
|
|
273
321
|
{
|
|
274
322
|
onReady: () => {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
this.sockets.admitFanoutPublisher(descriptor, connectionId);
|
|
323
|
+
if (connection !== undefined && target.connection === connection) {
|
|
324
|
+
connection.state = 'ready';
|
|
325
|
+
this.sockets.admitFanoutPublisher(target.descriptor, connectionId);
|
|
279
326
|
}
|
|
280
327
|
},
|
|
281
328
|
onTerminated: () => {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
329
|
+
if (connection !== undefined && target.connection === connection) {
|
|
330
|
+
this.sockets.removeFanoutPublisher(target.descriptor, connectionId);
|
|
331
|
+
connection.state = 'connecting';
|
|
332
|
+
const terminated = connection;
|
|
286
333
|
setImmediate(() => {
|
|
287
|
-
void this.replaceConnection(
|
|
334
|
+
void this.replaceConnection(target, terminated).catch((error) =>
|
|
288
335
|
this.locationRuntime.reportDiscoveryFailure(error)
|
|
289
336
|
);
|
|
290
337
|
});
|
|
@@ -292,50 +339,76 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
292
339
|
}
|
|
293
340
|
}
|
|
294
341
|
);
|
|
295
|
-
|
|
296
|
-
descriptor,
|
|
342
|
+
connection = {
|
|
297
343
|
connectionId,
|
|
298
|
-
subscriber,
|
|
299
|
-
reconnectEligible: true,
|
|
300
344
|
stopReceiver: async () => {},
|
|
301
345
|
state: 'connecting'
|
|
302
346
|
};
|
|
303
|
-
|
|
304
|
-
|
|
347
|
+
const opened = connection;
|
|
348
|
+
await this.lane.run(() => (target.connection = opened));
|
|
349
|
+
connection.stopReceiver = this.onSubscriberOpened(
|
|
350
|
+
descriptor.channelName,
|
|
351
|
+
connectionId,
|
|
352
|
+
subscriber
|
|
353
|
+
);
|
|
305
354
|
}
|
|
306
355
|
|
|
307
|
-
private async
|
|
308
|
-
const
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
this.connections.delete(connectionId);
|
|
313
|
-
}
|
|
314
|
-
return target;
|
|
356
|
+
private async removeTarget(connectionId: string, target: FanoutTarget): Promise<void> {
|
|
357
|
+
const detached = await this.lane.run(() => {
|
|
358
|
+
if (this.targets.get(connectionId) !== target) return undefined;
|
|
359
|
+
this.targets.delete(connectionId);
|
|
360
|
+
return this.detachConnection(target);
|
|
315
361
|
});
|
|
362
|
+
await this.closeDetachedConnection(target.descriptor, detached);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
private async closeConnection(target: FanoutTarget): Promise<void> {
|
|
366
|
+
const detached = await this.lane.run(() => this.detachConnection(target));
|
|
367
|
+
await this.closeDetachedConnection(target.descriptor, detached);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
private detachConnection(target: FanoutTarget): ActiveFanoutConnection | undefined {
|
|
371
|
+
const connection = target.connection;
|
|
372
|
+
target.connection = undefined;
|
|
373
|
+
return connection;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
private async closeDetachedConnection(
|
|
377
|
+
descriptor: ZLinkFanoutPublisherDescriptor,
|
|
378
|
+
current: ActiveFanoutConnection | undefined
|
|
379
|
+
): Promise<void> {
|
|
316
380
|
if (current === undefined) return;
|
|
317
|
-
this.sockets.removeFanoutPublisher(
|
|
318
|
-
await
|
|
319
|
-
|
|
381
|
+
this.sockets.removeFanoutPublisher(descriptor, current.connectionId);
|
|
382
|
+
await closeResources([
|
|
383
|
+
{ close: () => current.stopReceiver() },
|
|
384
|
+
{ close: () => this.sockets.closeFanoutSubscriberConnection(current.connectionId) }
|
|
385
|
+
]);
|
|
320
386
|
}
|
|
321
387
|
|
|
322
|
-
private async replaceConnection(
|
|
388
|
+
private async replaceConnection(
|
|
389
|
+
target: FanoutTarget,
|
|
390
|
+
expected: ActiveFanoutConnection
|
|
391
|
+
): Promise<void> {
|
|
323
392
|
const prepared = await this.lane.run(() => {
|
|
324
393
|
const controller = this.controller;
|
|
325
394
|
if (
|
|
326
|
-
this.
|
|
327
|
-
|
|
395
|
+
this.targets.get(expected.connectionId) !== target ||
|
|
396
|
+
target.connection !== expected ||
|
|
328
397
|
controller === undefined
|
|
329
398
|
)
|
|
330
399
|
return undefined;
|
|
331
|
-
return
|
|
400
|
+
return controller;
|
|
332
401
|
});
|
|
333
402
|
if (prepared === undefined) {
|
|
334
403
|
return;
|
|
335
404
|
}
|
|
336
|
-
await this.closeConnection(
|
|
337
|
-
if (
|
|
338
|
-
await this.
|
|
405
|
+
await this.closeConnection(target);
|
|
406
|
+
if (
|
|
407
|
+
await this.lane.run(
|
|
408
|
+
() => this.controller === prepared && this.targets.get(expected.connectionId) === target
|
|
409
|
+
)
|
|
410
|
+
) {
|
|
411
|
+
await this.reconcileConnection(expected.connectionId, target);
|
|
339
412
|
}
|
|
340
413
|
}
|
|
341
414
|
|
|
@@ -348,7 +421,7 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
348
421
|
do {
|
|
349
422
|
const page = await this.store.listFanoutPublishers(
|
|
350
423
|
channelName,
|
|
351
|
-
{ pageSize:
|
|
424
|
+
{ pageSize: ZLINK_PROVIDER_MAX_PAGE_SIZE, continuationToken },
|
|
352
425
|
signal
|
|
353
426
|
);
|
|
354
427
|
rows.push(...page.items);
|
|
@@ -356,7 +429,6 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
356
429
|
} while (continuationToken !== undefined);
|
|
357
430
|
const live: ZLinkFanoutPublisherDescriptor[] = [];
|
|
358
431
|
for (const descriptor of rows) {
|
|
359
|
-
if (descriptor.state !== ZLinkFrameworkRuntimeState.Serving) continue;
|
|
360
432
|
const lease = await this.storeOwnerLease(descriptor.ownerId, signal);
|
|
361
433
|
if (
|
|
362
434
|
lease.kind === 'found' &&
|
|
@@ -377,17 +449,24 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
377
449
|
const owner = this.locationRuntime.currentOwnerToken;
|
|
378
450
|
if (owner === undefined) return;
|
|
379
451
|
const descriptors = await this.lane.run(() => [...this.localDescriptors.values()]);
|
|
380
|
-
|
|
381
|
-
await
|
|
382
|
-
{
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
452
|
+
try {
|
|
453
|
+
await closeResources(
|
|
454
|
+
descriptors.map((descriptor) => ({
|
|
455
|
+
close: async () => {
|
|
456
|
+
await this.store.removeFanoutPublisher(
|
|
457
|
+
{
|
|
458
|
+
channelName: descriptor.channelName,
|
|
459
|
+
publisherRid: descriptor.publisherRid
|
|
460
|
+
},
|
|
461
|
+
owner,
|
|
462
|
+
signal
|
|
463
|
+
);
|
|
464
|
+
}
|
|
465
|
+
}))
|
|
388
466
|
);
|
|
467
|
+
} finally {
|
|
468
|
+
await this.lane.run(() => this.localDescriptors.clear());
|
|
389
469
|
}
|
|
390
|
-
await this.lane.run(() => this.localDescriptors.clear());
|
|
391
470
|
}
|
|
392
471
|
|
|
393
472
|
private requireOwnerToken(): ZLinkLocationOwnerToken {
|
|
@@ -412,16 +491,6 @@ export class ZLinkFanoutLocationRuntime {
|
|
|
412
491
|
}
|
|
413
492
|
}
|
|
414
493
|
|
|
415
|
-
function advertisedEndpoint(boundEndpoint: string, advertiseHost: string | undefined): string {
|
|
416
|
-
const result = buildAdvertisedEndpoint(boundEndpoint, advertiseHost);
|
|
417
|
-
if (result === undefined) {
|
|
418
|
-
throw new ZLinkConfigurationException(
|
|
419
|
-
`Fanout publisher bound endpoint '${boundEndpoint}' cannot be advertised.`
|
|
420
|
-
);
|
|
421
|
-
}
|
|
422
|
-
return result;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
494
|
function fanoutConnectionId(descriptor: ZLinkFanoutPublisherDescriptor): string {
|
|
426
495
|
return (
|
|
427
496
|
`${descriptor.channelName}\0${String(descriptor.publisherRid)}\0` +
|
|
@@ -3,7 +3,7 @@ import type { ZLinkBackendMessageLike as MessageLike } from '../backend/runtime-
|
|
|
3
3
|
import { ZLinkConfigurationException } from '../configuration';
|
|
4
4
|
import { ZLinkChannelMessageKind } from './channel-envelope';
|
|
5
5
|
|
|
6
|
-
const SPOT_DIRECT_ENVELOPE = 'zlink.framework.spot-direct.v1';
|
|
6
|
+
export const SPOT_DIRECT_ENVELOPE = 'zlink.framework.spot-direct.v1';
|
|
7
7
|
|
|
8
8
|
export function encodeSpotDirectEnvelope(
|
|
9
9
|
kind: ZLinkChannelMessageKind.Request | ZLinkChannelMessageKind.Command,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../contracts/Configuration/Registration';
|
|
1
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
2
3
|
import type { ZLinkFrameworkRegistration } from '../configuration';
|
|
3
4
|
import { awaitWithAbort, throwIfAborted } from '../abort';
|
|
@@ -44,7 +45,8 @@ export class ZLinkSpotNodeRouteTransport {
|
|
|
44
45
|
if (router === undefined) {
|
|
45
46
|
return undefined;
|
|
46
47
|
}
|
|
47
|
-
const effectiveTimeoutMs =
|
|
48
|
+
const effectiveTimeoutMs =
|
|
49
|
+
timeoutMs ?? this.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
48
50
|
throwIfAborted(signal);
|
|
49
51
|
const operation = router.requestToSpot(
|
|
50
52
|
target.targetNodeRid,
|
|
@@ -74,7 +76,8 @@ export class ZLinkSpotNodeRouteTransport {
|
|
|
74
76
|
if (router === undefined) {
|
|
75
77
|
return undefined;
|
|
76
78
|
}
|
|
77
|
-
const effectiveTimeoutMs =
|
|
79
|
+
const effectiveTimeoutMs =
|
|
80
|
+
timeoutMs ?? this.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
78
81
|
throwIfAborted(signal);
|
|
79
82
|
const operation = router.requestToSpot(
|
|
80
83
|
target.targetNodeRid,
|
|
@@ -1,4 +1,39 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkErrorKind,
|
|
3
|
+
ZLinkFrameworkException
|
|
4
|
+
} from '../../contracts/Errors/ZLinkFrameworkException';
|
|
5
|
+
import { ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason } from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
6
|
+
import {
|
|
7
|
+
internalFrameworkErrorKind,
|
|
8
|
+
ZLinkFrameworkInternalErrorKind
|
|
9
|
+
} from '../framework-errors-internal';
|
|
10
|
+
|
|
11
|
+
export function dispatchReasonFromError(error: unknown): ZLinkDispatchErrorReason {
|
|
12
|
+
if (!(error instanceof ZLinkFrameworkException)) return ZLinkDispatchErrorReason.HandlerException;
|
|
13
|
+
const origin = internalFrameworkErrorKind(error);
|
|
14
|
+
if (origin === ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed)
|
|
15
|
+
return ZLinkDispatchErrorReason.PayloadDecodeFailed;
|
|
16
|
+
if (
|
|
17
|
+
origin === ZLinkFrameworkInternalErrorKind.SpotGenerationStale ||
|
|
18
|
+
origin === ZLinkFrameworkInternalErrorKind.ActorGenerationStale ||
|
|
19
|
+
origin === ZLinkFrameworkInternalErrorKind.SpotMoving ||
|
|
20
|
+
origin === ZLinkFrameworkInternalErrorKind.ActorMoving ||
|
|
21
|
+
origin === ZLinkFrameworkInternalErrorKind.ActorLocationStale
|
|
22
|
+
)
|
|
23
|
+
return ZLinkDispatchErrorReason.StaleTarget;
|
|
24
|
+
switch (error.kind) {
|
|
25
|
+
case ZLinkFrameworkErrorKind.NotFound:
|
|
26
|
+
return ZLinkDispatchErrorReason.HandlerMissing;
|
|
27
|
+
case ZLinkFrameworkErrorKind.ProtocolError:
|
|
28
|
+
return ZLinkDispatchErrorReason.InvalidFrame;
|
|
29
|
+
case ZLinkFrameworkErrorKind.ShuttingDown:
|
|
30
|
+
return ZLinkDispatchErrorReason.Shutdown;
|
|
31
|
+
default:
|
|
32
|
+
return ZLinkDispatchErrorReason.HandlerException;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const ERROR_MESSAGE_MAX_LENGTH = 512;
|
|
2
37
|
|
|
3
38
|
const CREDENTIAL_PATTERNS: ReadonlyArray<readonly [RegExp, string]> = [
|
|
4
39
|
[/Authorization\s*:\s*(?:(?:Bearer|Basic)\s+)?[^\s,;]+/gi, 'Authorization: <redacted>'],
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
import { randomBytes } from 'node:crypto';
|
|
3
3
|
import type { ZLinkFlowOrigin } from '../../contracts';
|
|
4
|
+
const FLOW_UUID_BYTES = 16;
|
|
5
|
+
const FLOW_UUID_VARIANT_BYTE = 8;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Spec 27 §3 defines the flow_origin value set as lowercase
|
|
9
|
+
* (`inbound|timer|application|lifecycle`); every language emits these exact
|
|
10
|
+
* strings so records remain comparable across runtimes (spec 26 §3.1).
|
|
11
|
+
*/
|
|
12
|
+
export const FLOW_ORIGIN_VALUES: Readonly<Record<ZLinkFlowOrigin, string>> = Object.freeze({
|
|
13
|
+
Inbound: 'inbound',
|
|
14
|
+
Timer: 'timer',
|
|
15
|
+
Application: 'application',
|
|
16
|
+
Lifecycle: 'lifecycle'
|
|
17
|
+
});
|
|
4
18
|
|
|
5
19
|
export interface ZLinkFlowContextValue {
|
|
6
20
|
readonly flowId: string;
|
|
@@ -84,12 +98,12 @@ export function createInboundFlow(
|
|
|
84
98
|
}
|
|
85
99
|
|
|
86
100
|
function createFlowId(): string {
|
|
87
|
-
const bytes = randomBytes(
|
|
101
|
+
const bytes = randomBytes(FLOW_UUID_BYTES);
|
|
88
102
|
// Date.now() is always within 48 bits, which is exactly the UUIDv7
|
|
89
103
|
// timestamp field.
|
|
90
104
|
bytes.writeUIntBE(Date.now(), 0, 6);
|
|
91
105
|
bytes[6] = 0x70 | (bytes[6] & 0x0f);
|
|
92
|
-
bytes[
|
|
106
|
+
bytes[FLOW_UUID_VARIANT_BYTE] = 0x80 | (bytes[FLOW_UUID_VARIANT_BYTE] & 0x3f);
|
|
93
107
|
const hex = bytes.toString('hex');
|
|
94
108
|
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
95
109
|
}
|
|
@@ -1,37 +1,41 @@
|
|
|
1
|
+
import { AsyncResource } from 'node:async_hooks';
|
|
1
2
|
import type {
|
|
2
3
|
ZLinkLocationRuntimeQuery,
|
|
3
4
|
ZLinkLocationRuntimeStatus,
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
ZLinkLocationServiceSummary,
|
|
6
|
+
ZLinkLocationTopologyEntry
|
|
6
7
|
} from '../../contracts';
|
|
7
|
-
import type {
|
|
8
|
-
ZLinkActorLocation,
|
|
9
|
-
ZLinkPeerLocation,
|
|
10
|
-
ZLinkRouteLocation,
|
|
11
|
-
ZLinkSpotLocation
|
|
12
|
-
} from '../../contracts/Locations/Rows';
|
|
13
8
|
import type {
|
|
14
9
|
ZLinkActorLocationKey,
|
|
15
10
|
ZLinkLocationKey,
|
|
16
11
|
ZLinkRouteLocationKey,
|
|
17
12
|
ZLinkSpotLocationKey
|
|
18
13
|
} from '../../contracts/Locations/Keys';
|
|
14
|
+
import type {
|
|
15
|
+
ZLinkActorLocation,
|
|
16
|
+
ZLinkPeerLocation,
|
|
17
|
+
ZLinkRouteLocation,
|
|
18
|
+
ZLinkSpotLocation
|
|
19
|
+
} from '../../contracts/Locations/Rows';
|
|
20
|
+
import type { ZLinkBackendSocketMonitor, ZLinkBackendSocketMonitorEvent } from '../backend';
|
|
21
|
+
import { ZLinkStateLane } from '../execution/state-lane';
|
|
22
|
+
import { normalizeOpaqueRoutingId } from '../routing-id';
|
|
19
23
|
import {
|
|
20
|
-
ZLinkLocationRuntimeEventKind as LocationRuntimeEventKind,
|
|
21
24
|
ZLinkLocationActorEventKind as ActorLocationEventKind,
|
|
25
|
+
ZLinkLocationRuntimeEventKind as LocationRuntimeEventKind,
|
|
22
26
|
ZLinkLocationPeerEventKind as PeerLocationEventKind,
|
|
23
27
|
ZLinkLocationRouteEventKind as RouteLocationEventKind,
|
|
24
|
-
ZLinkLocationSpotEventKind as SpotLocationEventKind,
|
|
25
28
|
ZLinkSocketEventKind as SocketEventKind,
|
|
26
|
-
ZLinkSocketNativeEventType,
|
|
27
29
|
ZLinkSocketNativeEventType as SocketNativeEventType,
|
|
30
|
+
ZLinkLocationSpotEventKind as SpotLocationEventKind,
|
|
31
|
+
ZLinkSocketNativeEventType,
|
|
28
32
|
type ZLinkAutoConnectDesiredSetChange,
|
|
29
33
|
type ZLinkLocationActorEvent,
|
|
30
34
|
type ZLinkLocationMonitoringRegistration,
|
|
31
35
|
type ZLinkLocationPeerEvent,
|
|
36
|
+
type ZLinkLocationRouteEvent,
|
|
32
37
|
type ZLinkLocationRuntimeEvent,
|
|
33
38
|
type ZLinkLocationRuntimeEventKind,
|
|
34
|
-
type ZLinkLocationRouteEvent,
|
|
35
39
|
type ZLinkLocationSpotEvent,
|
|
36
40
|
type ZLinkPollingMonitoringRegistration,
|
|
37
41
|
type ZLinkRuntimeEvent,
|
|
@@ -40,6 +44,7 @@ import {
|
|
|
40
44
|
type ZLinkSocketEventKind,
|
|
41
45
|
type ZLinkSocketMonitoringRegistration
|
|
42
46
|
} from './internal-event-contracts';
|
|
47
|
+
|
|
43
48
|
export {
|
|
44
49
|
ZLinkLocationActorEventKind,
|
|
45
50
|
ZLinkLocationPeerEventKind,
|
|
@@ -47,10 +52,6 @@ export {
|
|
|
47
52
|
ZLinkLocationSpotEventKind,
|
|
48
53
|
ZLinkSocketNativeEventType
|
|
49
54
|
} from './internal-event-contracts';
|
|
50
|
-
import type { ZLinkBackendSocketMonitor, ZLinkBackendSocketMonitorEvent } from '../backend';
|
|
51
|
-
import { AsyncResource } from 'node:async_hooks';
|
|
52
|
-
import { ZLinkStateLane } from '../execution/state-lane';
|
|
53
|
-
import { normalizeOpaqueRoutingId } from '../routing-id';
|
|
54
55
|
|
|
55
56
|
const ZLINK_DISCONNECT_REASON_HANDSHAKE_FAILED = 3;
|
|
56
57
|
const detachedStateLaneResource = new AsyncResource('zlink:location-runtime-monitoring-source');
|
|
@@ -62,9 +63,18 @@ export interface ZLinkActorOwnerLeaseObservation {
|
|
|
62
63
|
readonly decision: 'owner_unavailable';
|
|
63
64
|
}
|
|
64
65
|
|
|
66
|
+
export function isRelocationDebugEnabled(): boolean {
|
|
67
|
+
return process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION === '1';
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function relocationDebug(marker: string, detail: Record<string, unknown>): void {
|
|
71
|
+
if (!isRelocationDebugEnabled()) return;
|
|
72
|
+
console.error('[zlink.runtime.relocation]', marker, detail);
|
|
73
|
+
}
|
|
74
|
+
|
|
65
75
|
/** Emits high-cardinality resolver detail only on the existing relocation debug path. */
|
|
66
76
|
export function emitActorOwnerLeaseObservation(observation: ZLinkActorOwnerLeaseObservation): void {
|
|
67
|
-
if (
|
|
77
|
+
if (!isRelocationDebugEnabled()) return;
|
|
68
78
|
console.error('[zlink.runtime.relocation]', 'actor_route.owner_lease_observed', observation);
|
|
69
79
|
}
|
|
70
80
|
|