@zlink-systems/framework 0.26.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/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/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -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 +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- 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 +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- 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 +83 -105
- 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 +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- 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-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- 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 +2 -0
- package/dist/runtime/admission.js +7 -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 +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- 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-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -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 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- 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 -10
- 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.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- 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 +130 -72
- 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 +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- 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/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 +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- 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.js +22 -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 +0 -6
- 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-object-owner.js +3 -2
- 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 -12
- 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 +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- 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 +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- 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 +14 -13
- package/dist/runtime/host/index.js +190 -157
- 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 +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- 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 +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- 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 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- 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 +72 -22
- 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 +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- 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 +37 -28
- 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 +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- 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 +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- 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 +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- 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 +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- 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 +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- 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 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- 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 +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- 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 +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- 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/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/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/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- 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 +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- 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 +9 -11
- 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-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- 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 +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- 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 -23
- 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 +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- 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 +172 -91
- 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 +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- 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/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -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 +0 -10
- 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-object-owner.ts +5 -2
- 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 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- 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 +180 -260
- 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 +327 -296
- 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 +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- 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 +699 -561
- 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 +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- 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 +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- 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 +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- 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 +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- 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 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- 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 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- 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/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/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/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -4,8 +4,11 @@ exports.ZLinkFanoutLocationRuntime = void 0;
|
|
|
4
4
|
const node_crypto_1 = require("node:crypto");
|
|
5
5
|
const Locations_1 = require("../../contracts/Locations");
|
|
6
6
|
const Options_1 = require("../../contracts/Locations/Options");
|
|
7
|
+
const Stores_1 = require("../../contracts/Locations/Stores");
|
|
7
8
|
const configuration_1 = require("../configuration");
|
|
8
9
|
const state_lane_1 = require("../execution/state-lane");
|
|
10
|
+
const runtime_state_projections_1 = require("../foundation/runtime-state-projections");
|
|
11
|
+
const event_loop_resources_1 = require("../foundation/event-loop-resources");
|
|
9
12
|
class ZLinkFanoutLocationRuntime {
|
|
10
13
|
registration;
|
|
11
14
|
sockets;
|
|
@@ -17,7 +20,7 @@ class ZLinkFanoutLocationRuntime {
|
|
|
17
20
|
store;
|
|
18
21
|
localDescriptors = new Map();
|
|
19
22
|
publisherIdentities = new Map();
|
|
20
|
-
|
|
23
|
+
targets = new Map();
|
|
21
24
|
controller;
|
|
22
25
|
timer;
|
|
23
26
|
constructor(registration, sockets, locationRuntime, stores, options, onSubscriberOpened) {
|
|
@@ -64,16 +67,39 @@ class ZLinkFanoutLocationRuntime {
|
|
|
64
67
|
});
|
|
65
68
|
if (timer !== undefined)
|
|
66
69
|
clearTimeout(timer);
|
|
67
|
-
const
|
|
68
|
-
await Promise.allSettled(
|
|
69
|
-
await this.removeLocalPublishers(signal);
|
|
70
|
+
const targets = await this.lane.run(() => [...this.targets]);
|
|
71
|
+
const targetResults = await Promise.allSettled(targets.map(([id, target]) => this.removeTarget(id, target)));
|
|
72
|
+
const publisherResults = await Promise.allSettled([this.removeLocalPublishers(signal)]);
|
|
73
|
+
(0, event_loop_resources_1.finishResourceCleanup)([...targetResults, ...publisherResults].flatMap((result) => result.status === 'rejected' ? [result.reason] : []));
|
|
70
74
|
}
|
|
71
75
|
activeTargets(channelName) {
|
|
72
|
-
return [...this.
|
|
73
|
-
.filter((target) => target.state === 'ready')
|
|
76
|
+
return [...this.targets.values()]
|
|
77
|
+
.filter((target) => target.connection?.state === 'ready')
|
|
74
78
|
.map((target) => target.descriptor)
|
|
75
79
|
.filter((descriptor) => descriptor.channelName === channelName);
|
|
76
80
|
}
|
|
81
|
+
topologyTargets(channelName) {
|
|
82
|
+
if (!this.isAutomaticSubscriber(channelName))
|
|
83
|
+
return undefined;
|
|
84
|
+
return [...this.targets.values()]
|
|
85
|
+
.filter((target) => target.descriptor.channelName === channelName)
|
|
86
|
+
.map((target) => ({
|
|
87
|
+
channelName,
|
|
88
|
+
publisherRoutingId: String(target.descriptor.publisherRid),
|
|
89
|
+
lifecycleGeneration: target.descriptor.lifecycleGeneration,
|
|
90
|
+
descriptorRevision: target.descriptor.descriptorRevision,
|
|
91
|
+
advertisedEndpoint: target.descriptor.endpoint,
|
|
92
|
+
state: target.descriptor.state === Locations_1.ZLinkFrameworkRuntimeState.Serving
|
|
93
|
+
? target.connection?.state === 'ready'
|
|
94
|
+
? 'serving'
|
|
95
|
+
: 'preparing'
|
|
96
|
+
: (0, runtime_state_projections_1.discoveryAvailabilityForRuntimeState)(target.descriptor.state)
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
isAutomaticSubscriber(channelName) {
|
|
100
|
+
const subscriber = this.registration.channels.get(channelName)?.subscriber;
|
|
101
|
+
return subscriber !== undefined && (subscriber.manualConnections?.length ?? 0) === 0;
|
|
102
|
+
}
|
|
77
103
|
async reclaimOwnerRows(signal) {
|
|
78
104
|
const owner = this.requireOwnerToken();
|
|
79
105
|
const descriptors = await this.lane.run(() => [...this.localDescriptors]);
|
|
@@ -154,124 +180,150 @@ class ZLinkFanoutLocationRuntime {
|
|
|
154
180
|
}
|
|
155
181
|
}
|
|
156
182
|
async reconcileSubscribers(signal) {
|
|
157
|
-
for (const
|
|
158
|
-
if (
|
|
159
|
-
(channel.subscriber.manualConnections?.length ?? 0) > 0) {
|
|
183
|
+
for (const channelName of this.registration.channels.keys()) {
|
|
184
|
+
if (!this.isAutomaticSubscriber(channelName))
|
|
160
185
|
continue;
|
|
161
|
-
|
|
186
|
+
const previous = this.topologyTargets(channelName);
|
|
162
187
|
const rows = await this.listLivePublishers(channelName, signal);
|
|
163
188
|
const desired = new Map(rows.map((row) => [fanoutConnectionId(row), row]));
|
|
164
189
|
for (const [connectionId, descriptor] of desired) {
|
|
165
|
-
|
|
190
|
+
let current = await this.lane.run(() => this.targets.get(connectionId));
|
|
166
191
|
if (current === undefined) {
|
|
167
|
-
|
|
168
|
-
|
|
192
|
+
const created = { descriptor };
|
|
193
|
+
current = created;
|
|
194
|
+
await this.lane.run(() => this.targets.set(connectionId, created));
|
|
169
195
|
}
|
|
170
|
-
if (descriptor.descriptorRevision < current.descriptor.descriptorRevision) {
|
|
196
|
+
else if (descriptor.descriptorRevision < current.descriptor.descriptorRevision) {
|
|
171
197
|
continue;
|
|
172
198
|
}
|
|
173
|
-
if (descriptor.descriptorRevision === current.descriptor.descriptorRevision) {
|
|
199
|
+
else if (descriptor.descriptorRevision === current.descriptor.descriptorRevision) {
|
|
174
200
|
if (!sameFanoutDescriptor(descriptor, current.descriptor)) {
|
|
175
|
-
await this.
|
|
201
|
+
await this.removeTarget(connectionId, current);
|
|
202
|
+
continue;
|
|
176
203
|
}
|
|
177
|
-
continue;
|
|
178
204
|
}
|
|
179
|
-
if (!sameFanoutImmutableIdentity(descriptor, current.descriptor)) {
|
|
180
|
-
await this.
|
|
205
|
+
else if (!sameFanoutImmutableIdentity(descriptor, current.descriptor)) {
|
|
206
|
+
await this.removeTarget(connectionId, current);
|
|
181
207
|
continue;
|
|
182
208
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
209
|
+
else {
|
|
210
|
+
const target = current;
|
|
211
|
+
await this.lane.run(() => {
|
|
212
|
+
if (this.targets.get(connectionId) === target)
|
|
213
|
+
target.descriptor = descriptor;
|
|
214
|
+
});
|
|
215
|
+
if (current.connection?.state === 'ready') {
|
|
216
|
+
this.sockets.admitFanoutPublisher(current.descriptor, connectionId);
|
|
217
|
+
}
|
|
189
218
|
}
|
|
219
|
+
await this.reconcileConnection(connectionId, current);
|
|
190
220
|
}
|
|
191
|
-
const
|
|
192
|
-
for (const [connectionId, current] of
|
|
221
|
+
const targets = await this.lane.run(() => [...this.targets]);
|
|
222
|
+
for (const [connectionId, current] of targets) {
|
|
193
223
|
if (current.descriptor.channelName === channelName && !desired.has(connectionId)) {
|
|
194
|
-
await this.
|
|
224
|
+
await this.removeTarget(connectionId, current);
|
|
195
225
|
}
|
|
196
226
|
}
|
|
227
|
+
const next = this.topologyTargets(channelName);
|
|
228
|
+
if (previous.length !== next.length ||
|
|
229
|
+
previous.some((publisher, index) => publisher.publisherRoutingId !== next[index].publisherRoutingId ||
|
|
230
|
+
publisher.state !== next[index].state)) {
|
|
231
|
+
this.sockets.notifyFanoutTopology(channelName);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
async reconcileConnection(connectionId, target) {
|
|
236
|
+
if (target.descriptor.state !== Locations_1.ZLinkFrameworkRuntimeState.Serving) {
|
|
237
|
+
await this.closeConnection(target);
|
|
238
|
+
}
|
|
239
|
+
else if (target.connection === undefined) {
|
|
240
|
+
await this.openConnection(connectionId, target);
|
|
197
241
|
}
|
|
198
242
|
}
|
|
199
|
-
async openConnection(connectionId,
|
|
200
|
-
|
|
243
|
+
async openConnection(connectionId, target) {
|
|
244
|
+
const descriptor = target.descriptor;
|
|
245
|
+
let connection;
|
|
201
246
|
const subscriber = this.sockets.openFanoutSubscriberConnection(descriptor.channelName, connectionId, descriptor.endpoint, {
|
|
202
247
|
onReady: () => {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
this.sockets.admitFanoutPublisher(descriptor, connectionId);
|
|
248
|
+
if (connection !== undefined && target.connection === connection) {
|
|
249
|
+
connection.state = 'ready';
|
|
250
|
+
this.sockets.admitFanoutPublisher(target.descriptor, connectionId);
|
|
207
251
|
}
|
|
208
252
|
},
|
|
209
253
|
onTerminated: () => {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
254
|
+
if (connection !== undefined && target.connection === connection) {
|
|
255
|
+
this.sockets.removeFanoutPublisher(target.descriptor, connectionId);
|
|
256
|
+
connection.state = 'connecting';
|
|
257
|
+
const terminated = connection;
|
|
214
258
|
setImmediate(() => {
|
|
215
|
-
void this.replaceConnection(
|
|
259
|
+
void this.replaceConnection(target, terminated).catch((error) => this.locationRuntime.reportDiscoveryFailure(error));
|
|
216
260
|
});
|
|
217
261
|
}
|
|
218
262
|
}
|
|
219
263
|
});
|
|
220
|
-
|
|
221
|
-
descriptor,
|
|
264
|
+
connection = {
|
|
222
265
|
connectionId,
|
|
223
|
-
subscriber,
|
|
224
|
-
reconnectEligible: true,
|
|
225
266
|
stopReceiver: async () => { },
|
|
226
267
|
state: 'connecting'
|
|
227
268
|
};
|
|
228
|
-
|
|
229
|
-
|
|
269
|
+
const opened = connection;
|
|
270
|
+
await this.lane.run(() => (target.connection = opened));
|
|
271
|
+
connection.stopReceiver = this.onSubscriberOpened(descriptor.channelName, connectionId, subscriber);
|
|
230
272
|
}
|
|
231
|
-
async
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}
|
|
238
|
-
return target;
|
|
273
|
+
async removeTarget(connectionId, target) {
|
|
274
|
+
const detached = await this.lane.run(() => {
|
|
275
|
+
if (this.targets.get(connectionId) !== target)
|
|
276
|
+
return undefined;
|
|
277
|
+
this.targets.delete(connectionId);
|
|
278
|
+
return this.detachConnection(target);
|
|
239
279
|
});
|
|
280
|
+
await this.closeDetachedConnection(target.descriptor, detached);
|
|
281
|
+
}
|
|
282
|
+
async closeConnection(target) {
|
|
283
|
+
const detached = await this.lane.run(() => this.detachConnection(target));
|
|
284
|
+
await this.closeDetachedConnection(target.descriptor, detached);
|
|
285
|
+
}
|
|
286
|
+
detachConnection(target) {
|
|
287
|
+
const connection = target.connection;
|
|
288
|
+
target.connection = undefined;
|
|
289
|
+
return connection;
|
|
290
|
+
}
|
|
291
|
+
async closeDetachedConnection(descriptor, current) {
|
|
240
292
|
if (current === undefined)
|
|
241
293
|
return;
|
|
242
|
-
this.sockets.removeFanoutPublisher(
|
|
243
|
-
await
|
|
244
|
-
|
|
294
|
+
this.sockets.removeFanoutPublisher(descriptor, current.connectionId);
|
|
295
|
+
await (0, event_loop_resources_1.closeResources)([
|
|
296
|
+
{ close: () => current.stopReceiver() },
|
|
297
|
+
{ close: () => this.sockets.closeFanoutSubscriberConnection(current.connectionId) }
|
|
298
|
+
]);
|
|
245
299
|
}
|
|
246
|
-
async replaceConnection(expected) {
|
|
300
|
+
async replaceConnection(target, expected) {
|
|
247
301
|
const prepared = await this.lane.run(() => {
|
|
248
302
|
const controller = this.controller;
|
|
249
|
-
if (this.
|
|
250
|
-
|
|
303
|
+
if (this.targets.get(expected.connectionId) !== target ||
|
|
304
|
+
target.connection !== expected ||
|
|
251
305
|
controller === undefined)
|
|
252
306
|
return undefined;
|
|
253
|
-
return
|
|
307
|
+
return controller;
|
|
254
308
|
});
|
|
255
309
|
if (prepared === undefined) {
|
|
256
310
|
return;
|
|
257
311
|
}
|
|
258
|
-
await this.closeConnection(
|
|
259
|
-
if (await this.lane.run(() => this.controller === prepared.
|
|
260
|
-
await this.
|
|
312
|
+
await this.closeConnection(target);
|
|
313
|
+
if (await this.lane.run(() => this.controller === prepared && this.targets.get(expected.connectionId) === target)) {
|
|
314
|
+
await this.reconcileConnection(expected.connectionId, target);
|
|
261
315
|
}
|
|
262
316
|
}
|
|
263
317
|
async listLivePublishers(channelName, signal) {
|
|
264
318
|
const rows = [];
|
|
265
319
|
let continuationToken;
|
|
266
320
|
do {
|
|
267
|
-
const page = await this.store.listFanoutPublishers(channelName, { pageSize:
|
|
321
|
+
const page = await this.store.listFanoutPublishers(channelName, { pageSize: Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE, continuationToken }, signal);
|
|
268
322
|
rows.push(...page.items);
|
|
269
323
|
continuationToken = page.continuationToken;
|
|
270
324
|
} while (continuationToken !== undefined);
|
|
271
325
|
const live = [];
|
|
272
326
|
for (const descriptor of rows) {
|
|
273
|
-
if (descriptor.state !== Locations_1.ZLinkFrameworkRuntimeState.Serving)
|
|
274
|
-
continue;
|
|
275
327
|
const lease = await this.storeOwnerLease(descriptor.ownerId, signal);
|
|
276
328
|
if (lease.kind === 'found' &&
|
|
277
329
|
lease.token.leaseGeneration === descriptor.leaseGeneration &&
|
|
@@ -289,13 +341,19 @@ class ZLinkFanoutLocationRuntime {
|
|
|
289
341
|
if (owner === undefined)
|
|
290
342
|
return;
|
|
291
343
|
const descriptors = await this.lane.run(() => [...this.localDescriptors.values()]);
|
|
292
|
-
|
|
293
|
-
await
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
344
|
+
try {
|
|
345
|
+
await (0, event_loop_resources_1.closeResources)(descriptors.map((descriptor) => ({
|
|
346
|
+
close: async () => {
|
|
347
|
+
await this.store.removeFanoutPublisher({
|
|
348
|
+
channelName: descriptor.channelName,
|
|
349
|
+
publisherRid: descriptor.publisherRid
|
|
350
|
+
}, owner, signal);
|
|
351
|
+
}
|
|
352
|
+
})));
|
|
353
|
+
}
|
|
354
|
+
finally {
|
|
355
|
+
await this.lane.run(() => this.localDescriptors.clear());
|
|
297
356
|
}
|
|
298
|
-
await this.lane.run(() => this.localDescriptors.clear());
|
|
299
357
|
}
|
|
300
358
|
requireOwnerToken() {
|
|
301
359
|
const token = this.locationRuntime.currentOwnerToken;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Message } from '../../contracts/Common/Message';
|
|
2
2
|
import type { ZLinkBackendMessageLike as MessageLike } from '../backend/runtime-values';
|
|
3
3
|
import { ZLinkChannelMessageKind } from './channel-envelope';
|
|
4
|
+
export declare const SPOT_DIRECT_ENVELOPE = "zlink.framework.spot-direct.v1";
|
|
4
5
|
export declare function encodeSpotDirectEnvelope(kind: ZLinkChannelMessageKind.Request | ZLinkChannelMessageKind.Command, channelName: string, packetName: string | undefined, payload: unknown, metadata?: ReadonlyMap<string, string>): MessageLike;
|
|
5
6
|
export declare function decodeSpotDirectReply<TReply>(parts: readonly Message[]): TReply;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SPOT_DIRECT_ENVELOPE = void 0;
|
|
3
4
|
exports.encodeSpotDirectEnvelope = encodeSpotDirectEnvelope;
|
|
4
5
|
exports.decodeSpotDirectReply = decodeSpotDirectReply;
|
|
5
6
|
const configuration_1 = require("../configuration");
|
|
6
|
-
|
|
7
|
+
exports.SPOT_DIRECT_ENVELOPE = 'zlink.framework.spot-direct.v1';
|
|
7
8
|
function encodeSpotDirectEnvelope(kind, channelName, packetName, payload, metadata) {
|
|
8
9
|
return Buffer.from(JSON.stringify({
|
|
9
|
-
marker: SPOT_DIRECT_ENVELOPE,
|
|
10
|
+
marker: exports.SPOT_DIRECT_ENVELOPE,
|
|
10
11
|
kind,
|
|
11
12
|
channelName,
|
|
12
13
|
packetName,
|
|
@@ -19,7 +20,7 @@ function decodeSpotDirectReply(parts) {
|
|
|
19
20
|
throw new configuration_1.ZLinkConfigurationException('Spot direct reply is missing.');
|
|
20
21
|
}
|
|
21
22
|
const reply = JSON.parse(parts[0].data().toString());
|
|
22
|
-
if (reply.marker !== SPOT_DIRECT_ENVELOPE) {
|
|
23
|
+
if (reply.marker !== exports.SPOT_DIRECT_ENVELOPE) {
|
|
23
24
|
throw new configuration_1.ZLinkConfigurationException('Spot direct reply marker is invalid.');
|
|
24
25
|
}
|
|
25
26
|
if (reply.ok !== true) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotNodeRouteTransport = void 0;
|
|
4
|
+
const Registration_1 = require("../../contracts/Configuration/Registration");
|
|
4
5
|
const abort_1 = require("../abort");
|
|
5
6
|
const channel_envelope_1 = require("./channel-envelope");
|
|
6
7
|
class ZLinkSpotNodeRouteTransport {
|
|
@@ -29,7 +30,7 @@ class ZLinkSpotNodeRouteTransport {
|
|
|
29
30
|
if (router === undefined) {
|
|
30
31
|
return undefined;
|
|
31
32
|
}
|
|
32
|
-
const effectiveTimeoutMs = timeoutMs ?? this.registration.requestTimeoutMs ??
|
|
33
|
+
const effectiveTimeoutMs = timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
33
34
|
(0, abort_1.throwIfAborted)(signal);
|
|
34
35
|
const operation = router.requestToSpot(target.targetNodeRid, target.spotId, parts, effectiveTimeoutMs);
|
|
35
36
|
return (0, abort_1.awaitWithAbort)(operation, signal, () => {
|
|
@@ -49,7 +50,7 @@ class ZLinkSpotNodeRouteTransport {
|
|
|
49
50
|
if (router === undefined) {
|
|
50
51
|
return undefined;
|
|
51
52
|
}
|
|
52
|
-
const effectiveTimeoutMs = timeoutMs ?? this.registration.requestTimeoutMs ??
|
|
53
|
+
const effectiveTimeoutMs = timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
53
54
|
(0, abort_1.throwIfAborted)(signal);
|
|
54
55
|
const operation = router.requestToSpot(target.targetNodeRid, target.spotId, request, effectiveTimeoutMs);
|
|
55
56
|
return (0, abort_1.awaitWithAbort)(operation, signal, () => {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.diagnosticTextOrAbsent = diagnosticTextOrAbsent;
|
|
4
|
+
/** Formats absent diagnostic text consistently across the Node runtime. */
|
|
5
|
+
function diagnosticTextOrAbsent(value) {
|
|
6
|
+
return value ?? '<none>';
|
|
7
|
+
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason } from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
2
|
+
export declare function dispatchReasonFromError(error: unknown): ZLinkDispatchErrorReason;
|
|
3
|
+
export declare const ERROR_MESSAGE_MAX_LENGTH = 512;
|
|
1
4
|
export declare function dispatchErrorDetails(error: unknown): {
|
|
2
5
|
readonly errorType?: string;
|
|
3
6
|
readonly errorMessage?: string;
|
|
@@ -1,7 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERROR_MESSAGE_MAX_LENGTH = void 0;
|
|
4
|
+
exports.dispatchReasonFromError = dispatchReasonFromError;
|
|
3
5
|
exports.dispatchErrorDetails = dispatchErrorDetails;
|
|
4
|
-
const
|
|
6
|
+
const ZLinkFrameworkException_1 = require("../../contracts/Errors/ZLinkFrameworkException");
|
|
7
|
+
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
8
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
9
|
+
function dispatchReasonFromError(error) {
|
|
10
|
+
if (!(error instanceof ZLinkFrameworkException_1.ZLinkFrameworkException))
|
|
11
|
+
return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException;
|
|
12
|
+
const origin = (0, framework_errors_internal_1.internalFrameworkErrorKind)(error);
|
|
13
|
+
if (origin === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed)
|
|
14
|
+
return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.PayloadDecodeFailed;
|
|
15
|
+
if (origin === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale ||
|
|
16
|
+
origin === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorGenerationStale ||
|
|
17
|
+
origin === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving ||
|
|
18
|
+
origin === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorMoving ||
|
|
19
|
+
origin === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale)
|
|
20
|
+
return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.StaleTarget;
|
|
21
|
+
switch (error.kind) {
|
|
22
|
+
case ZLinkFrameworkException_1.ZLinkFrameworkErrorKind.NotFound:
|
|
23
|
+
return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerMissing;
|
|
24
|
+
case ZLinkFrameworkException_1.ZLinkFrameworkErrorKind.ProtocolError:
|
|
25
|
+
return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.InvalidFrame;
|
|
26
|
+
case ZLinkFrameworkException_1.ZLinkFrameworkErrorKind.ShuttingDown:
|
|
27
|
+
return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.Shutdown;
|
|
28
|
+
default:
|
|
29
|
+
return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.ERROR_MESSAGE_MAX_LENGTH = 512;
|
|
5
33
|
const CREDENTIAL_PATTERNS = [
|
|
6
34
|
[/Authorization\s*:\s*(?:(?:Bearer|Basic)\s+)?[^\s,;]+/gi, 'Authorization: <redacted>'],
|
|
7
35
|
[/Bearer\s+[^\s,;]+/gi, 'Bearer <redacted>'],
|
|
@@ -51,5 +79,5 @@ function sanitizeErrorMessage(message) {
|
|
|
51
79
|
pattern.lastIndex = 0;
|
|
52
80
|
sanitized = sanitized.replace(pattern, replacement);
|
|
53
81
|
}
|
|
54
|
-
return sanitized.slice(0, ERROR_MESSAGE_MAX_LENGTH);
|
|
82
|
+
return sanitized.slice(0, exports.ERROR_MESSAGE_MAX_LENGTH);
|
|
55
83
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { ZLinkFlowOrigin } from '../../contracts';
|
|
2
|
+
/**
|
|
3
|
+
* Spec 27 §3 defines the flow_origin value set as lowercase
|
|
4
|
+
* (`inbound|timer|application|lifecycle`); every language emits these exact
|
|
5
|
+
* strings so records remain comparable across runtimes (spec 26 §3.1).
|
|
6
|
+
*/
|
|
7
|
+
export declare const FLOW_ORIGIN_VALUES: Readonly<Record<ZLinkFlowOrigin, string>>;
|
|
2
8
|
export interface ZLinkFlowContextValue {
|
|
3
9
|
readonly flowId: string;
|
|
4
10
|
readonly flowOrigin: ZLinkFlowOrigin;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FLOW_ORIGIN_VALUES = void 0;
|
|
3
4
|
exports.currentFlowContext = currentFlowContext;
|
|
4
5
|
exports.currentOrCreateFlow = currentOrCreateFlow;
|
|
5
6
|
exports.runWithFlow = runWithFlow;
|
|
@@ -7,6 +8,19 @@ exports.runWithOutboundFlow = runWithOutboundFlow;
|
|
|
7
8
|
exports.createInboundFlow = createInboundFlow;
|
|
8
9
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
9
10
|
const node_crypto_1 = require("node:crypto");
|
|
11
|
+
const FLOW_UUID_BYTES = 16;
|
|
12
|
+
const FLOW_UUID_VARIANT_BYTE = 8;
|
|
13
|
+
/**
|
|
14
|
+
* Spec 27 §3 defines the flow_origin value set as lowercase
|
|
15
|
+
* (`inbound|timer|application|lifecycle`); every language emits these exact
|
|
16
|
+
* strings so records remain comparable across runtimes (spec 26 §3.1).
|
|
17
|
+
*/
|
|
18
|
+
exports.FLOW_ORIGIN_VALUES = Object.freeze({
|
|
19
|
+
Inbound: 'inbound',
|
|
20
|
+
Timer: 'timer',
|
|
21
|
+
Application: 'application',
|
|
22
|
+
Lifecycle: 'lifecycle'
|
|
23
|
+
});
|
|
10
24
|
const flowStorage = new node_async_hooks_1.AsyncLocalStorage();
|
|
11
25
|
function currentFlowContext() {
|
|
12
26
|
return flowStorage.getStore();
|
|
@@ -57,12 +71,12 @@ function createInboundFlow(flowId, flowOrigin, createIfAbsent, streamSessionId)
|
|
|
57
71
|
return { flowId: flowId ?? createFlowId(), flowOrigin: flowOrigin ?? 'Inbound', streamSessionId };
|
|
58
72
|
}
|
|
59
73
|
function createFlowId() {
|
|
60
|
-
const bytes = (0, node_crypto_1.randomBytes)(
|
|
74
|
+
const bytes = (0, node_crypto_1.randomBytes)(FLOW_UUID_BYTES);
|
|
61
75
|
// Date.now() is always within 48 bits, which is exactly the UUIDv7
|
|
62
76
|
// timestamp field.
|
|
63
77
|
bytes.writeUIntBE(Date.now(), 0, 6);
|
|
64
78
|
bytes[6] = 0x70 | (bytes[6] & 0x0f);
|
|
65
|
-
bytes[
|
|
79
|
+
bytes[FLOW_UUID_VARIANT_BYTE] = 0x80 | (bytes[FLOW_UUID_VARIANT_BYTE] & 0x3f);
|
|
66
80
|
const hex = bytes.toString('hex');
|
|
67
81
|
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
68
82
|
}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import type { ZLinkLocationRuntimeQuery } from '../../contracts';
|
|
2
|
-
import type { ZLinkActorLocation, ZLinkPeerLocation, ZLinkRouteLocation, ZLinkSpotLocation } from '../../contracts/Locations/Rows';
|
|
3
2
|
import type { ZLinkActorLocationKey, ZLinkLocationKey, ZLinkRouteLocationKey, ZLinkSpotLocationKey } from '../../contracts/Locations/Keys';
|
|
3
|
+
import type { ZLinkActorLocation, ZLinkPeerLocation, ZLinkRouteLocation, ZLinkSpotLocation } from '../../contracts/Locations/Rows';
|
|
4
|
+
import type { ZLinkBackendSocketMonitor, ZLinkBackendSocketMonitorEvent } from '../backend';
|
|
4
5
|
import { type ZLinkAutoConnectDesiredSetChange, type ZLinkLocationMonitoringRegistration, type ZLinkPollingMonitoringRegistration, type ZLinkRuntimeEvent, type ZLinkRuntimeEventHandler, type ZLinkSocketMonitoringRegistration } from './internal-event-contracts';
|
|
5
6
|
export { ZLinkLocationActorEventKind, ZLinkLocationPeerEventKind, ZLinkLocationRouteEventKind, ZLinkLocationSpotEventKind, ZLinkSocketNativeEventType } from './internal-event-contracts';
|
|
6
|
-
import type { ZLinkBackendSocketMonitor, ZLinkBackendSocketMonitorEvent } from '../backend';
|
|
7
7
|
export interface ZLinkActorOwnerLeaseObservation {
|
|
8
8
|
readonly actorId: string;
|
|
9
9
|
readonly authorityGeneration: bigint;
|
|
10
10
|
readonly remainingLeaseMs: number;
|
|
11
11
|
readonly decision: 'owner_unavailable';
|
|
12
12
|
}
|
|
13
|
+
export declare function isRelocationDebugEnabled(): boolean;
|
|
14
|
+
export declare function relocationDebug(marker: string, detail: Record<string, unknown>): void;
|
|
13
15
|
/** Emits high-cardinality resolver detail only on the existing relocation debug path. */
|
|
14
16
|
export declare function emitActorOwnerLeaseObservation(observation: ZLinkActorOwnerLeaseObservation): void;
|
|
15
17
|
/** Runtime composition port. It is intentionally absent from the public contract barrel. */
|
|
@@ -15,7 +15,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.ZLinkLocationMonitoringEventEmitter = exports.ZLinkLocationRuntimeMonitoringSource = exports.ZLinkSocketMonitoringSource = exports.DefaultZLinkRuntimeEventPublisher = exports.ZLinkSocketNativeEventType = exports.ZLinkLocationSpotEventKind = exports.ZLinkLocationRouteEventKind = exports.ZLinkLocationPeerEventKind = exports.ZLinkLocationActorEventKind = void 0;
|
|
18
|
+
exports.isRelocationDebugEnabled = isRelocationDebugEnabled;
|
|
19
|
+
exports.relocationDebug = relocationDebug;
|
|
18
20
|
exports.emitActorOwnerLeaseObservation = emitActorOwnerLeaseObservation;
|
|
21
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
22
|
+
const state_lane_1 = require("../execution/state-lane");
|
|
23
|
+
const routing_id_1 = require("../routing-id");
|
|
19
24
|
const internal_event_contracts_1 = require("./internal-event-contracts");
|
|
20
25
|
var internal_event_contracts_2 = require("./internal-event-contracts");
|
|
21
26
|
Object.defineProperty(exports, "ZLinkLocationActorEventKind", { enumerable: true, get: function () { return internal_event_contracts_2.ZLinkLocationActorEventKind; } });
|
|
@@ -23,14 +28,19 @@ Object.defineProperty(exports, "ZLinkLocationPeerEventKind", { enumerable: true,
|
|
|
23
28
|
Object.defineProperty(exports, "ZLinkLocationRouteEventKind", { enumerable: true, get: function () { return internal_event_contracts_2.ZLinkLocationRouteEventKind; } });
|
|
24
29
|
Object.defineProperty(exports, "ZLinkLocationSpotEventKind", { enumerable: true, get: function () { return internal_event_contracts_2.ZLinkLocationSpotEventKind; } });
|
|
25
30
|
Object.defineProperty(exports, "ZLinkSocketNativeEventType", { enumerable: true, get: function () { return internal_event_contracts_2.ZLinkSocketNativeEventType; } });
|
|
26
|
-
const node_async_hooks_1 = require("node:async_hooks");
|
|
27
|
-
const state_lane_1 = require("../execution/state-lane");
|
|
28
|
-
const routing_id_1 = require("../routing-id");
|
|
29
31
|
const ZLINK_DISCONNECT_REASON_HANDSHAKE_FAILED = 3;
|
|
30
32
|
const detachedStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:location-runtime-monitoring-source');
|
|
33
|
+
function isRelocationDebugEnabled() {
|
|
34
|
+
return process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION === '1';
|
|
35
|
+
}
|
|
36
|
+
function relocationDebug(marker, detail) {
|
|
37
|
+
if (!isRelocationDebugEnabled())
|
|
38
|
+
return;
|
|
39
|
+
console.error('[zlink.runtime.relocation]', marker, detail);
|
|
40
|
+
}
|
|
31
41
|
/** Emits high-cardinality resolver detail only on the existing relocation debug path. */
|
|
32
42
|
function emitActorOwnerLeaseObservation(observation) {
|
|
33
|
-
if (
|
|
43
|
+
if (!isRelocationDebugEnabled())
|
|
34
44
|
return;
|
|
35
45
|
console.error('[zlink.runtime.relocation]', 'actor_route.owner_lease_observed', observation);
|
|
36
46
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ZLinkDiagnosticsOptions, type ZLinkMessageFlowLogMode } from '../../contracts';
|
|
2
|
-
import { ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome, type
|
|
2
|
+
import { ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome, type ZLinkRuntimeMessageFlowEvent, type ZLinkRuntimeMessageFlowResult } from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
3
3
|
import type { ZLinkDispatchErrorSink } from './dispatch-error-port';
|
|
4
4
|
export interface ZLinkMessageFlowModeCell {
|
|
5
5
|
mode: ZLinkMessageFlowLogMode;
|
|
@@ -9,7 +9,10 @@ const api_1 = require("@opentelemetry/api");
|
|
|
9
9
|
const api_logs_1 = require("@opentelemetry/api-logs");
|
|
10
10
|
const contracts_1 = require("../../contracts");
|
|
11
11
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
12
|
+
const dispatch_error_details_1 = require("./dispatch-error-details");
|
|
12
13
|
const flow_context_1 = require("./flow-context");
|
|
14
|
+
const MESSAGE_FLOW_EVENT_ID = 'zlink.message_flow';
|
|
15
|
+
const DISPATCH_ERROR_EVENT_ID = 'zlink.dispatch_error';
|
|
13
16
|
exports.DEFAULT_ZLINK_DIAGNOSTICS = {
|
|
14
17
|
messageFlow: 'errors',
|
|
15
18
|
sampleRate: 1,
|
|
@@ -17,7 +20,6 @@ exports.DEFAULT_ZLINK_DIAGNOSTICS = {
|
|
|
17
20
|
};
|
|
18
21
|
const telemetryLogger = api_logs_1.logs.getLogger('@zlink-systems/framework');
|
|
19
22
|
const telemetryTracer = api_1.trace.getTracer('@zlink-systems/framework');
|
|
20
|
-
const ERROR_MESSAGE_MAX_LENGTH = 512;
|
|
21
23
|
let diagnosticsGeneration = 0n;
|
|
22
24
|
function effectiveMessageFlow(ctx) {
|
|
23
25
|
return ctx.liveMode.mode;
|
|
@@ -162,12 +164,12 @@ class ZLinkMessageFlowTracer {
|
|
|
162
164
|
}
|
|
163
165
|
publishToLogger(record) {
|
|
164
166
|
try {
|
|
165
|
-
const severityNumber = record.eventId ===
|
|
167
|
+
const severityNumber = record.eventId === DISPATCH_ERROR_EVENT_ID ? api_logs_1.SeverityNumber.ERROR : api_logs_1.SeverityNumber.INFO;
|
|
166
168
|
telemetryLogger.emit({
|
|
167
169
|
eventName: record.eventId,
|
|
168
170
|
timestamp: record.timestamp,
|
|
169
171
|
severityNumber,
|
|
170
|
-
severityText: record.eventId ===
|
|
172
|
+
severityText: record.eventId === DISPATCH_ERROR_EVENT_ID ? 'ERROR' : 'INFO',
|
|
171
173
|
body: structuredLogBody(record),
|
|
172
174
|
attributes: structuredLogAttributes(record)
|
|
173
175
|
});
|
|
@@ -181,7 +183,7 @@ class ZLinkMessageFlowTracer {
|
|
|
181
183
|
const span = telemetryTracer.startSpan(record.eventId, {
|
|
182
184
|
attributes: traceAttributes(record)
|
|
183
185
|
});
|
|
184
|
-
if (record.eventId ===
|
|
186
|
+
if (record.eventId === DISPATCH_ERROR_EVENT_ID) {
|
|
185
187
|
span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: record.reason });
|
|
186
188
|
}
|
|
187
189
|
span.end();
|
|
@@ -201,22 +203,11 @@ class ZLinkMessageFlowTracer {
|
|
|
201
203
|
}
|
|
202
204
|
}
|
|
203
205
|
exports.ZLinkMessageFlowTracer = ZLinkMessageFlowTracer;
|
|
204
|
-
/**
|
|
205
|
-
* Spec 27 §3 defines the flow_origin value set as lowercase
|
|
206
|
-
* (`inbound|timer|application|lifecycle`); every language emits these exact
|
|
207
|
-
* strings so records remain comparable across runtimes (spec 26 §3.1).
|
|
208
|
-
*/
|
|
209
|
-
const FLOW_ORIGIN_TELEMETRY_VALUES = {
|
|
210
|
-
Inbound: 'inbound',
|
|
211
|
-
Timer: 'timer',
|
|
212
|
-
Application: 'application',
|
|
213
|
-
Lifecycle: 'lifecycle'
|
|
214
|
-
};
|
|
215
206
|
function toTelemetryRecord(flow, messageSizeBytes, durationSeconds) {
|
|
216
207
|
return {
|
|
217
208
|
eventId: flow.outcome === ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error
|
|
218
|
-
?
|
|
219
|
-
:
|
|
209
|
+
? DISPATCH_ERROR_EVENT_ID
|
|
210
|
+
: MESSAGE_FLOW_EVENT_ID,
|
|
220
211
|
timestamp: new Date(),
|
|
221
212
|
phase: messageFlowPhase(flow.outcome),
|
|
222
213
|
outcome: flow.result ?? messageFlowOutcome(flow.outcome),
|
|
@@ -234,7 +225,7 @@ function toTelemetryRecord(flow, messageSizeBytes, durationSeconds) {
|
|
|
234
225
|
targetRid: flow.targetRid,
|
|
235
226
|
serverRid: flow.serverRid,
|
|
236
227
|
flowId: flow.flowId,
|
|
237
|
-
flowOrigin: flow.flowOrigin === undefined ? undefined :
|
|
228
|
+
flowOrigin: flow.flowOrigin === undefined ? undefined : flow_context_1.FLOW_ORIGIN_VALUES[flow.flowOrigin],
|
|
238
229
|
spotId: flow.spotId,
|
|
239
230
|
instanceSpotType: flow.instanceSpotType,
|
|
240
231
|
activationState: flow.activationState,
|
|
@@ -429,7 +420,7 @@ function hashFlowId(flowId) {
|
|
|
429
420
|
return hash >>> 0;
|
|
430
421
|
}
|
|
431
422
|
function boundedText(value) {
|
|
432
|
-
return value === undefined ? undefined : value.slice(0, ERROR_MESSAGE_MAX_LENGTH);
|
|
423
|
+
return value === undefined ? undefined : value.slice(0, dispatch_error_details_1.ERROR_MESSAGE_MAX_LENGTH);
|
|
433
424
|
}
|
|
434
425
|
function toSnakeCase(value) {
|
|
435
426
|
return value.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|