@zlink-systems/framework 0.30.1 → 0.30.2
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/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +4 -0
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +0 -1
- package/dist/runtime/actors/actor-client.js +38 -45
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +7 -3
- package/dist/runtime/actors/actor-handoff.js +212 -88
- package/dist/runtime/actors/actor-join-relocation.d.ts +2 -0
- package/dist/runtime/actors/actor-local-native-join.js +4 -0
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +6 -2
- package/dist/runtime/actors/index.js +37 -21
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +55 -32
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +13 -0
- package/dist/runtime/application-jobs/application-job-queue-scope.js +27 -1
- package/dist/runtime/application-jobs/contracts.d.ts +2 -0
- package/dist/runtime/backend/contracts/index.d.ts +19 -3
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.js +5 -0
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +26 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +193 -107
- package/dist/runtime/backend/node/node-raw-binding-port.js +90 -58
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +33 -8
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +142 -143
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +5 -5
- package/dist/runtime/channels/channel-clients.d.ts +1 -0
- package/dist/runtime/channels/channel-clients.js +20 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +22 -3
- package/dist/runtime/channels/channel-dispatch-pipeline.js +103 -57
- package/dist/runtime/channels/channel-dispatchers.d.ts +3 -2
- package/dist/runtime/channels/channel-dispatchers.js +44 -37
- package/dist/runtime/channels/channel-envelope.d.ts +1 -0
- package/dist/runtime/channels/channel-envelope.js +74 -31
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +3 -2
- package/dist/runtime/channels/channel-runtime-manager.js +4 -4
- package/dist/runtime/channels/channel-transports.d.ts +0 -1
- package/dist/runtime/channels/channel-transports.js +35 -33
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +4 -0
- package/dist/runtime/execution/serial-execution-queue.js +21 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +39 -3
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +151 -55
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -35
- package/dist/runtime/foundation/service-relocation-runtime.js +7 -3
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +8 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +72 -6
- package/dist/runtime/foundation/service-stateful-runtime.js +444 -117
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -1
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +10 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +166 -53
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +24 -3
- package/dist/runtime/host/application-job-queue.js +28 -41
- package/dist/runtime/host/index.d.ts +5 -1
- package/dist/runtime/host/index.js +171 -97
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +71 -190
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +5 -3
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +17 -7
- package/dist/runtime/host/service-relocation-host-runtime.js +550 -367
- package/dist/runtime/host/spot-runtime-options-factory.js +15 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +6 -2
- package/dist/runtime/locations/runtime.js +37 -30
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.js +29 -26
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +19 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +85 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +7 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +23 -7
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +3 -2
- package/dist/runtime/spots/index.d.ts +18 -11
- package/dist/runtime/spots/index.js +234 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +6 -3
- package/dist/runtime/spots/spot-activation.js +123 -44
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +14 -9
- package/dist/runtime/spots/spot-handler-registry.d.ts +4 -3
- package/dist/runtime/spots/spot-handler-registry.js +6 -2
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +18 -39
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.js +3 -3
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +0 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -1
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +287 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.js +1 -4
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +8 -0
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +61 -70
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +282 -106
- package/src/runtime/actors/actor-join-relocation.ts +2 -0
- package/src/runtime/actors/actor-local-native-join.ts +4 -0
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +41 -27
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/admission.ts +69 -34
- package/src/runtime/application-jobs/application-job-queue-scope.ts +33 -1
- package/src/runtime/application-jobs/contracts.ts +2 -0
- package/src/runtime/backend/contracts/index.ts +39 -4
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +4 -0
- package/src/runtime/backend/mesh-dispatch-pump.ts +223 -124
- package/src/runtime/backend/node/node-raw-binding-port.ts +106 -70
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +221 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -5
- package/src/runtime/channels/channel-clients.ts +49 -24
- package/src/runtime/channels/channel-dispatch-pipeline.ts +173 -124
- package/src/runtime/channels/channel-dispatchers.ts +116 -72
- package/src/runtime/channels/channel-envelope.ts +105 -36
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +12 -5
- package/src/runtime/channels/channel-transports.ts +49 -58
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +31 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +244 -67
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +54 -37
- package/src/runtime/foundation/service-relocation-runtime.ts +7 -3
- package/src/runtime/foundation/service-runtime-contracts.ts +12 -1
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +667 -152
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -11
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +187 -51
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +29 -44
- package/src/runtime/host/index.ts +286 -129
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +86 -248
- package/src/runtime/host/route-mesh-runtime.ts +11 -5
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-host-runtime.ts +784 -475
- package/src/runtime/host/spot-runtime-options-factory.ts +18 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +70 -40
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +33 -29
- package/src/runtime/protocol/service_wire_codec.generated.ts +87 -4
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +13 -10
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +3 -2
- package/src/runtime/spots/index.ts +375 -281
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +170 -86
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +24 -19
- package/src/runtime/spots/spot-handler-registry.ts +15 -4
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +22 -45
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +3 -3
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-runtime-ports.ts +0 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -1
- package/src/runtime/spots/spot-timer.ts +413 -157
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +1 -5
- package/src/runtime/workers/index.ts +1 -1
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotActorPacketDispatch = void 0;
|
|
4
|
+
const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
|
|
5
|
+
const actor_context_1 = require("../actors/actor-context");
|
|
6
|
+
const session_disconnected_wire_1 = require("../actors/session-disconnected-wire");
|
|
7
|
+
const routing_id_1 = require("../routing-id");
|
|
4
8
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
5
9
|
const contracts_1 = require("../../contracts");
|
|
6
10
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
@@ -12,6 +16,7 @@ const protocol_1 = require("../streams/protocol");
|
|
|
12
16
|
const payload_codec_1 = require("../messaging/payload-codec");
|
|
13
17
|
const serial_work_size_1 = require("../execution/serial-work-size");
|
|
14
18
|
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
19
|
+
const emptyDisconnectedReply = contracts_1.ZLinkMessage.fromEncoded(contracts_1.ZLinkEncodedPayload.fromOwned(Buffer.alloc(0)));
|
|
15
20
|
class ZLinkSpotActorPacketDispatch {
|
|
16
21
|
options;
|
|
17
22
|
constructor(options) {
|
|
@@ -62,9 +67,12 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
62
67
|
? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError
|
|
63
68
|
: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop;
|
|
64
69
|
this.trace(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Received, actorId, header, messageKind);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
const disconnected = header.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET;
|
|
71
|
+
const disconnectedReply = disconnected && header.kind === protocol_1.ZLinkStreamMessageKind.Request
|
|
72
|
+
? emptyDisconnectedReply
|
|
73
|
+
: undefined;
|
|
74
|
+
if (this.options.actorLeft?.(actorId) === true && disconnected) {
|
|
75
|
+
return disconnectedReply;
|
|
68
76
|
}
|
|
69
77
|
const routed = await this.options.routeBeforeLocal?.(delivery);
|
|
70
78
|
if (routed?.handled === true) {
|
|
@@ -74,9 +82,23 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
74
82
|
if (actor === undefined) {
|
|
75
83
|
return this.handleMissingActor(delivery.origin, actorId, parts, header, messageKind, action, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal);
|
|
76
84
|
}
|
|
77
|
-
if (
|
|
85
|
+
if (disconnected) {
|
|
86
|
+
const identity = (0, session_disconnected_wire_1.decodeSessionDisconnected)((0, protocol_1.messageToBytes)(parts[1]));
|
|
87
|
+
if (identity === undefined) {
|
|
88
|
+
if (this.options.dispatchErrors?.captureEnabled() === true)
|
|
89
|
+
this.reportInvalidFrame(actorId, messageKind, new contracts_1.ZLinkFrameworkException(contracts_1.ZLinkFrameworkErrorKind.ProtocolError, 'ProtocolError: malformed Session disconnect identity.'), 'warning');
|
|
90
|
+
return disconnectedReply;
|
|
91
|
+
}
|
|
92
|
+
const current = actor.context instanceof actor_context_1.DefaultZLinkActorContext
|
|
93
|
+
? actor.context.currentSessionBinding
|
|
94
|
+
: undefined;
|
|
95
|
+
if (current !== undefined &&
|
|
96
|
+
(!(0, routing_id_1.routingIdsEqual)(current.sessionNodeRid, identity.sessionOwnerNodeRid) ||
|
|
97
|
+
current.sessionOwnerNodeGeneration !== identity.sessionOwnerNodeGeneration ||
|
|
98
|
+
current.bindingGeneration !== identity.bindingGeneration))
|
|
99
|
+
return disconnectedReply;
|
|
78
100
|
await this.options.onDisconnectActor(actor);
|
|
79
|
-
return
|
|
101
|
+
return disconnectedReply;
|
|
80
102
|
}
|
|
81
103
|
const decodePayload = this.createPayloadDecoder(parts[1], header);
|
|
82
104
|
return this.dispatchActorPacket(actor, actorId, decodePayload, header, messageKind, action, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal, requestDeadlineUnixMs, (0, serial_work_size_1.zlinkSerialWorkOptions)(parts[1].data().byteLength, (0, serial_work_size_1.zlinkMetadataByteLength)(header.metadata)));
|
|
@@ -108,7 +130,9 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
108
130
|
if (messageKind !== ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.ActorRequest) {
|
|
109
131
|
return undefined;
|
|
110
132
|
}
|
|
111
|
-
const missingActorError = (0, framework_errors_internal_1.createInternalFrameworkException)(
|
|
133
|
+
const missingActorError = (0, framework_errors_internal_1.createInternalFrameworkException)((0, actor_message_follow_context_1.actorMessageFollowContext)(fallbackActorRef) === undefined
|
|
134
|
+
? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
|
|
135
|
+
: framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `SPOT actor is not registered locally: ${actorId}`);
|
|
112
136
|
if (header.requestSeq !== undefined &&
|
|
113
137
|
!returnResponse &&
|
|
114
138
|
this.options.actorErrorSender !== undefined) {
|
|
@@ -290,7 +314,7 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
290
314
|
throw error;
|
|
291
315
|
}
|
|
292
316
|
}
|
|
293
|
-
reportInvalidFrame(actorId, messageKind, error) {
|
|
317
|
+
reportInvalidFrame(actorId, messageKind, error, severity) {
|
|
294
318
|
this.options.dispatchErrors?.report({
|
|
295
319
|
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotActor,
|
|
296
320
|
messageKind,
|
|
@@ -298,7 +322,8 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
298
322
|
action: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
|
|
299
323
|
spotId: this.options.spotId(),
|
|
300
324
|
actorId,
|
|
301
|
-
error
|
|
325
|
+
error,
|
|
326
|
+
severity
|
|
302
327
|
});
|
|
303
328
|
}
|
|
304
329
|
trace(outcome, actorId, header, messageKind) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotActorPacketDrain = void 0;
|
|
4
|
-
const contracts_1 = require("../../contracts");
|
|
5
4
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
6
5
|
const runtime_values_1 = require("../backend/runtime-values");
|
|
7
6
|
const spot_remote_codec_1 = require("./spot-remote-codec");
|
|
8
7
|
const spot_native_flags_1 = require("./spot-native-flags");
|
|
9
8
|
const protocol_1 = require("../streams/protocol");
|
|
10
|
-
const
|
|
9
|
+
const actor_reply_1 = require("../actors/actor-reply");
|
|
10
|
+
const bound_session_response_target_1 = require("../streams/bound-session-response-target");
|
|
11
11
|
const ZLINK_SPOT_ACTOR_RECV_INFO_NO_BIND = 1;
|
|
12
12
|
class ZLinkSpotActorPacketDrain {
|
|
13
13
|
options;
|
|
@@ -143,33 +143,13 @@ class ZLinkSpotActorPacketDrain {
|
|
|
143
143
|
}
|
|
144
144
|
catch (error) {
|
|
145
145
|
this.options.replyActorNoBind?.(info, [
|
|
146
|
-
this.encodeActorReplyFrame(parts[0], protocol_1.ZLinkStreamMessageKind.Error,
|
|
146
|
+
this.encodeActorReplyFrame(parts[0], protocol_1.ZLinkStreamMessageKind.Error, (0, bound_session_response_target_1.boundSessionErrorPayload)(error))
|
|
147
147
|
], runtime_values_1.RequestResult.Ok);
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
encodeActorReplyFrame(requestHeaderPart, kind, payload) {
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
try {
|
|
154
|
-
// encodeStreamFrame returns a fresh, unaliased array; view it without re-copying.
|
|
155
|
-
const frame = (0, protocol_1.encodeStreamFrame)({
|
|
156
|
-
kind,
|
|
157
|
-
codec: (0, protocol_1.streamCodecForContentType)(encoded.contentType),
|
|
158
|
-
flags: protocol_1.ZLinkStreamHeaderFlags.None,
|
|
159
|
-
requestSeq: requestHeader.requestSeq,
|
|
160
|
-
name: '',
|
|
161
|
-
metadata: new Map(),
|
|
162
|
-
correlationId: requestHeader.correlationId,
|
|
163
|
-
// Spec 27 §7: preserve the request flow pair on the reply while
|
|
164
|
-
// tracing is on; the gated decode above already strips it at Off.
|
|
165
|
-
flowId: requestHeader.flowId,
|
|
166
|
-
flowOrigin: requestHeader.flowOrigin
|
|
167
|
-
}, encoded.message.data());
|
|
168
|
-
return runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from(frame.buffer, frame.byteOffset, frame.byteLength));
|
|
169
|
-
}
|
|
170
|
-
finally {
|
|
171
|
-
encoded.message.close();
|
|
172
|
-
}
|
|
151
|
+
const [frame] = (0, actor_reply_1.encodeActorReply)((0, protocol_1.messageToBytes)(requestHeaderPart), kind, payload, this.options.messageSerializers, this.flowEnabled());
|
|
152
|
+
return runtime_message_1.ZLinkBufferMessage.fromOwned(frame);
|
|
173
153
|
}
|
|
174
154
|
consumeRemoteBoundSessionBind(actor, sourceNodeRid, sourceSessionRid, parts) {
|
|
175
155
|
if (parts.length < 1) {
|
|
@@ -231,11 +211,3 @@ function closeMessages(messages) {
|
|
|
231
211
|
for (const message of messages)
|
|
232
212
|
message.close();
|
|
233
213
|
}
|
|
234
|
-
function frameworkErrorPayload(error) {
|
|
235
|
-
return {
|
|
236
|
-
message: error instanceof Error ? error.message : String(error),
|
|
237
|
-
kind: error instanceof contracts_1.ZLinkFrameworkException
|
|
238
|
-
? error.kind
|
|
239
|
-
: contracts_1.ZLinkFrameworkErrorKind.InternalFailure
|
|
240
|
-
};
|
|
241
|
-
}
|
|
@@ -100,6 +100,8 @@ export declare class ZLinkEntrySpotActivation {
|
|
|
100
100
|
notifyLeaveActor(actor: ZLinkActor, signal?: AbortSignal, _actorRef?: ActorRef, _membershipEpoch?: bigint): Promise<void>;
|
|
101
101
|
notifyDisconnectActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
102
102
|
dispatchActorPacket(delivery: ZLinkActorPacketDelivery): Promise<unknown>;
|
|
103
|
+
/** Restores source packets through the Entry Actor's existing executor. */
|
|
104
|
+
admitActorPacketPrefix(actorId: string, records: readonly import('../actors/actor-handoff').ZLinkActorHandoffPrefixRecord[]): import('../actors/actor-handoff').ZLinkActorHandoffPrefixAdmission;
|
|
103
105
|
private replayActorBacklog;
|
|
104
106
|
private dispatchActorPacketInsideMailbox;
|
|
105
107
|
private replyActorNoBind;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkEntrySpotActivation = void 0;
|
|
4
|
+
const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
|
|
4
5
|
const contracts_1 = require("../../contracts");
|
|
5
6
|
const abort_1 = require("../abort");
|
|
6
7
|
const routing_id_1 = require("../routing-id");
|
|
@@ -140,7 +141,7 @@ class ZLinkEntrySpotActivation {
|
|
|
140
141
|
: this.packetDispatch.sendEncoded(this.spotId, packetName, decodePayload, context);
|
|
141
142
|
}
|
|
142
143
|
async create() {
|
|
143
|
-
const entrySpot = await (0, spot_provider_1.
|
|
144
|
+
const entrySpot = await (0, spot_provider_1.createFreshProviderInstance)(this.options.entrySpotType, this.options.providerResolver, this.context);
|
|
144
145
|
this.entrySpot = entrySpot;
|
|
145
146
|
Object.defineProperty(this.entrySpot, 'context', {
|
|
146
147
|
configurable: true,
|
|
@@ -291,18 +292,22 @@ class ZLinkEntrySpotActivation {
|
|
|
291
292
|
}
|
|
292
293
|
async dispatchActorPacket(delivery) {
|
|
293
294
|
const { actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, messageFollowOrigin } = delivery;
|
|
294
|
-
const handoff = this.options.actorHandoffRuntime?.capture(delivery.origin, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, undefined, messageFollowOrigin
|
|
295
|
-
origin: delivery.origin,
|
|
296
|
-
actorId,
|
|
297
|
-
parts: replayedParts,
|
|
298
|
-
returnResponse: replayReturnResponse,
|
|
299
|
-
remoteBoundSessionTarget: replayRemoteBoundSessionTarget,
|
|
300
|
-
fallbackActorRef: replayFallbackActorRef
|
|
301
|
-
})));
|
|
295
|
+
const handoff = this.options.actorHandoffRuntime?.capture(delivery.origin, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, undefined, messageFollowOrigin);
|
|
302
296
|
if (handoff !== undefined)
|
|
303
297
|
return await handoff;
|
|
304
298
|
return this.spotSerialExecutor.executeActor(actorId, () => this.dispatchActorPacketInsideMailbox(delivery));
|
|
305
299
|
}
|
|
300
|
+
/** Restores source packets through the Entry Actor's existing executor. */
|
|
301
|
+
admitActorPacketPrefix(actorId, records) {
|
|
302
|
+
return this.spotSerialExecutor.admitActorPacketPrefix(actorId, records, (_serial, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => this.dispatchActorPacketInsideMailbox({
|
|
303
|
+
origin: (0, application_job_queue_scope_1.currentApplicationJobOrigin)(),
|
|
304
|
+
actorId,
|
|
305
|
+
parts,
|
|
306
|
+
returnResponse,
|
|
307
|
+
remoteBoundSessionTarget,
|
|
308
|
+
fallbackActorRef
|
|
309
|
+
}));
|
|
310
|
+
}
|
|
306
311
|
async replayActorBacklog(actor, backlog) {
|
|
307
312
|
return await (0, actor_handoff_1.replayActorHandoffBacklog)(backlog, (parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => this.spotSerialExecutor.executeActor(actor.context.actorId, () => this.dispatchActorPacketInsideMailbox({
|
|
308
313
|
origin: 'remote',
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { Type, ZLinkActor, ZLinkEntrySpot, ZLinkInstanceSpotHandlerRegistry, ZLinkSpot, ZLinkSpotHandlerRegistry } from '../../contracts';
|
|
1
|
+
import type { Type, ZLinkActor, ZLinkEntrySpot, ZLinkInstanceSpot, ZLinkInstanceSpotHandlerRegistry, ZLinkSpot, ZLinkSpotHandlerRegistry, ZLinkSpotTimerHandler } from '../../contracts';
|
|
2
2
|
import type { ZLinkEntrySpotActorRequestHandlerRegistration, ZLinkEntrySpotActorSendHandlerRegistration, ZLinkEntrySpotPacketHandlerRegistration, ZLinkEntrySpotSubscriptionHandlerRegistration, ZLinkSpotActorRequestHandlerRegistration, ZLinkSpotActorSendHandlerRegistration, ZLinkSpotPacketHandlerRegistration, ZLinkSpotSubscriptionHandlerRegistration } from '../../contracts/Configuration/RegistrationTypes';
|
|
3
3
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
4
4
|
import { ZLinkActorPacketKind, ZLinkSpotActorHandlerRegistryRuntime } from '../actors';
|
|
5
5
|
export interface ZLinkSpotHandlerRegistration {
|
|
6
|
-
readonly kind: 'packet' | 'subscribe' | 'actorSend' | 'actorRequest' | '
|
|
6
|
+
readonly kind: 'packet' | 'subscribe' | 'actorSend' | 'actorRequest' | 'timer';
|
|
7
7
|
readonly handlerType: Type;
|
|
8
8
|
readonly packetName?: string;
|
|
9
9
|
readonly channelName?: string;
|
|
@@ -24,7 +24,7 @@ export declare class DefaultZLinkSpotHandlerRegistry<TActor extends ZLinkActor =
|
|
|
24
24
|
actorRequest(packetName: string, handlerType: Type, actorType?: Type<TActor>): this;
|
|
25
25
|
addSubscribe(handlerType: Type, channelName: string, topic: string): this;
|
|
26
26
|
subscribe(channelName: string, topic: string, handlerType: Type): this;
|
|
27
|
-
|
|
27
|
+
addTimerHandler<THandler extends ZLinkSpotTimerHandler<ZLinkSpot>>(handlerType: Type<THandler>): this;
|
|
28
28
|
snapshot(): readonly ZLinkSpotHandlerRegistration[];
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
@@ -35,6 +35,7 @@ export declare class DefaultZLinkInstanceSpotHandlerRegistry implements ZLinkIns
|
|
|
35
35
|
private readonly registrations;
|
|
36
36
|
constructor(registrations: DefaultZLinkSpotHandlerRegistry);
|
|
37
37
|
addPacket<THandler>(handlerType: Type<THandler>): this;
|
|
38
|
+
addTimerHandler<THandler extends ZLinkSpotTimerHandler<ZLinkInstanceSpot>>(handlerType: Type<THandler>): this;
|
|
38
39
|
snapshot(): readonly ZLinkSpotHandlerRegistration[];
|
|
39
40
|
}
|
|
40
41
|
interface ZLinkEntrySpotHandlerRegistrationSet {
|
|
@@ -88,9 +88,9 @@ class DefaultZLinkSpotHandlerRegistry {
|
|
|
88
88
|
subscribe(channelName, topic, handlerType) {
|
|
89
89
|
return this.addSubscribe(handlerType, channelName, topic);
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
addTimerHandler(handlerType) {
|
|
92
92
|
(0, handler_instance_scope_1.prepareHandlerInstance)(this.providerResolver, handlerType);
|
|
93
|
-
this.entries.push({ kind: '
|
|
93
|
+
this.entries.push({ kind: 'timer', handlerType });
|
|
94
94
|
return this;
|
|
95
95
|
}
|
|
96
96
|
snapshot() {
|
|
@@ -111,6 +111,10 @@ class DefaultZLinkInstanceSpotHandlerRegistry {
|
|
|
111
111
|
this.registrations.addPacket(handlerType);
|
|
112
112
|
return this;
|
|
113
113
|
}
|
|
114
|
+
addTimerHandler(handlerType) {
|
|
115
|
+
this.registrations.addTimerHandler(handlerType);
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
114
118
|
snapshot() {
|
|
115
119
|
return this.registrations.snapshot();
|
|
116
120
|
}
|
|
@@ -123,7 +123,7 @@ class ZLinkPublicSpotManager {
|
|
|
123
123
|
yield: (signal) => {
|
|
124
124
|
const yieldTurn = (0, execution_1.requireZLinkYieldTurn)(turn);
|
|
125
125
|
const pending = this.submit(spotId, stableType, generatedIdentity, state, signal);
|
|
126
|
-
return yieldTurn.
|
|
126
|
+
return yieldTurn.yieldFrameworkPromise(pending);
|
|
127
127
|
}
|
|
128
128
|
};
|
|
129
129
|
return call;
|
|
@@ -166,7 +166,7 @@ class ZLinkPublicSpotManager {
|
|
|
166
166
|
};
|
|
167
167
|
}
|
|
168
168
|
catch (error) {
|
|
169
|
-
this.options.local.abortUserSpotPublication(target.meshName, spotId);
|
|
169
|
+
await this.options.local.abortUserSpotPublication(target.meshName, spotId);
|
|
170
170
|
throw error;
|
|
171
171
|
}
|
|
172
172
|
}, async (cleanupSignal) => {
|
|
@@ -4,13 +4,14 @@ import type { ZLinkDomainLocationStore as ZLinkLocationStore } from '../location
|
|
|
4
4
|
import type { ZLinkPeerLocation } from '../../contracts/Locations/Rows';
|
|
5
5
|
import type { ZLinkSpotNodeOptions } from '../configuration';
|
|
6
6
|
import type { ZLinkBackendMeshNode } from '../backend/contracts';
|
|
7
|
-
import { ZLinkLocationRuntime, ZLinkOwnerLeaseTracker, type IZLinkAutoConnectExecutor, type ZLinkAutoConnectLocal, type ZLinkLocationEventSink, type ZLinkLocationRuntimeStores } from '../locations';
|
|
7
|
+
import { ZLinkLocationRuntime, ZLinkOwnerLeaseTracker, ZLinkRequestSourceResolver, type IZLinkAutoConnectExecutor, type ZLinkAutoConnectLocal, type ZLinkLocationEventSink, type ZLinkLocationRuntimeStores } from '../locations';
|
|
8
8
|
export interface ZLinkSpotNodeLocationAutoConnectContext {
|
|
9
9
|
readonly runtime: ZLinkLocationRuntime;
|
|
10
10
|
readonly stores: ZLinkLocationRuntimeStores;
|
|
11
11
|
readonly options: ZLinkLocationOptionOverrides;
|
|
12
12
|
readonly leaseTracker: ZLinkOwnerLeaseTracker;
|
|
13
13
|
readonly resolver: ZLinkPeerLocationResolver;
|
|
14
|
+
readonly requestSources: ZLinkRequestSourceResolver;
|
|
14
15
|
readonly events?: ZLinkLocationEventSink;
|
|
15
16
|
readonly changeStampStore?: Pick<ZLinkLocationStore, 'getMeshNodeChangeStamp'>;
|
|
16
17
|
}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSpotNodeLocationAutoConnectContext = createSpotNodeLocationAutoConnectContext;
|
|
4
4
|
exports.spotNodeAutoConnectCapability = spotNodeAutoConnectCapability;
|
|
5
|
+
const routing_id_1 = require("../routing-id");
|
|
5
6
|
const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
|
|
6
7
|
const Values_1 = require("../../contracts/Locations/Values");
|
|
7
8
|
const contracts_1 = require("../../contracts");
|
|
8
|
-
const node_async_hooks_1 = require("node:async_hooks");
|
|
9
9
|
const state_lane_1 = require("../execution/state-lane");
|
|
10
|
-
const
|
|
10
|
+
const routing_id_2 = require("../routing-id");
|
|
11
11
|
const service_runtime_contracts_1 = require("../foundation/service-runtime-contracts");
|
|
12
12
|
const locations_1 = require("../locations");
|
|
13
13
|
function createSpotNodeLocationAutoConnectContext(runtime, stores, options, events) {
|
|
@@ -15,12 +15,17 @@ function createSpotNodeLocationAutoConnectContext(runtime, stores, options, even
|
|
|
15
15
|
store: stores.ownerLeaseStore,
|
|
16
16
|
options
|
|
17
17
|
});
|
|
18
|
+
const requestSources = new locations_1.ZLinkRequestSourceResolver({
|
|
19
|
+
listLiveMeshNodes: (meshName, signal) => runtime.listLiveMeshNodes(meshName, signal),
|
|
20
|
+
remainingOwnerTokenLeaseMs: (owner, signal) => runtime.remainingOwnerTokenLeaseMs(owner, signal)
|
|
21
|
+
});
|
|
18
22
|
return {
|
|
19
23
|
runtime,
|
|
20
24
|
stores,
|
|
21
25
|
options,
|
|
22
26
|
leaseTracker,
|
|
23
|
-
resolver: meshDescriptorPeerResolver(runtime),
|
|
27
|
+
resolver: meshDescriptorPeerResolver(runtime, requestSources),
|
|
28
|
+
requestSources,
|
|
24
29
|
events,
|
|
25
30
|
// The opaque provider has no cross-process change notification primitive.
|
|
26
31
|
// A process-local inherited stamp would hide descriptors written by peers,
|
|
@@ -46,13 +51,12 @@ function spotNodeAutoConnectCapability(spotNodeName, spotNode, node) {
|
|
|
46
51
|
objectRole: spotNode.objectRole ?? 'none',
|
|
47
52
|
hasRouteMeshServerChannel: Object.values(spotNode.meshChannels ?? {}).some((channel) => channel.server === true)
|
|
48
53
|
};
|
|
49
|
-
const manualConnections = hasManualRouterConnections(spotNode);
|
|
50
54
|
return {
|
|
51
55
|
local,
|
|
52
|
-
executor: new ZLinkSpotNodeAutoConnectExecutor(node
|
|
56
|
+
executor: new ZLinkSpotNodeAutoConnectExecutor(node)
|
|
53
57
|
};
|
|
54
58
|
}
|
|
55
|
-
function meshDescriptorPeerResolver(runtime) {
|
|
59
|
+
function meshDescriptorPeerResolver(runtime, requestSources) {
|
|
56
60
|
return {
|
|
57
61
|
async listLivePeers(filter, signal) {
|
|
58
62
|
if (filter.meshName === undefined ||
|
|
@@ -62,6 +66,8 @@ function meshDescriptorPeerResolver(runtime) {
|
|
|
62
66
|
return [];
|
|
63
67
|
}
|
|
64
68
|
const descriptors = await runtime.listLiveMeshNodes(filter.meshName, signal);
|
|
69
|
+
// The auto-connect poll owns the live descriptors; request acceptance reads them.
|
|
70
|
+
await requestSources.observeLiveDescriptors(filter.meshName, descriptors, signal);
|
|
65
71
|
return descriptors
|
|
66
72
|
.map((descriptor) => ({
|
|
67
73
|
autoConnectType: Values_1.ZLinkLocationAutoConnectType.RouteMesh,
|
|
@@ -82,24 +88,17 @@ function meshDescriptorPeerResolver(runtime) {
|
|
|
82
88
|
securityIdentity: descriptor.securityIdentity
|
|
83
89
|
}
|
|
84
90
|
}))
|
|
85
|
-
.filter((peer) => (filter.nodeRid === undefined ||
|
|
91
|
+
.filter((peer) => (filter.nodeRid === undefined || (0, routing_id_1.routingIdsEqual)(peer.nodeRid, filter.nodeRid)) &&
|
|
86
92
|
(filter.endpoint === undefined || peer.endpoint === filter.endpoint));
|
|
87
93
|
}
|
|
88
94
|
};
|
|
89
95
|
}
|
|
90
|
-
function hasManualRouterConnections(spotNode) {
|
|
91
|
-
return ((spotNode.router?.manualConnections?.length ?? 0) > 0 ||
|
|
92
|
-
(spotNode.router?.manualPeerConnections?.length ?? 0) > 0);
|
|
93
|
-
}
|
|
94
|
-
const detachedSpotNodeAutoConnectResource = new node_async_hooks_1.AsyncResource('zlink:spot-node-autoconnect');
|
|
95
96
|
class ZLinkSpotNodeAutoConnectExecutor {
|
|
96
97
|
node;
|
|
97
|
-
manualConnections;
|
|
98
98
|
lane = new state_lane_1.ZLinkStateLane();
|
|
99
99
|
connectionIntents = new Map();
|
|
100
|
-
constructor(node
|
|
100
|
+
constructor(node) {
|
|
101
101
|
this.node = node;
|
|
102
|
-
this.manualConnections = manualConnections;
|
|
103
102
|
}
|
|
104
103
|
onDisconnected(handler) {
|
|
105
104
|
this.node.onPeerDisconnected?.(handler);
|
|
@@ -112,30 +111,13 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
112
111
|
const intent = await this.lane.run(() => this.prepareConnectCore(key));
|
|
113
112
|
if (intent === undefined)
|
|
114
113
|
return true;
|
|
115
|
-
return await
|
|
114
|
+
return await (0, state_lane_1.startOutsideStateLane)(() => this.connectPeer(target, key, intent));
|
|
116
115
|
}
|
|
117
116
|
disconnect(target) {
|
|
118
117
|
if (!this.connectionIntents.has(connectionKey(target)))
|
|
119
118
|
return;
|
|
120
119
|
this.disconnectPeer(target);
|
|
121
120
|
}
|
|
122
|
-
disconnectStalePeers(targets) {
|
|
123
|
-
if (this.manualConnections)
|
|
124
|
-
return;
|
|
125
|
-
const current = new Map(targets
|
|
126
|
-
.filter((target) => target.nodeRid !== undefined)
|
|
127
|
-
.map((target) => [String(target.nodeRid), target]));
|
|
128
|
-
const peers = this.node.peers();
|
|
129
|
-
for (const peer of peers) {
|
|
130
|
-
if (peer.routingId === null)
|
|
131
|
-
continue;
|
|
132
|
-
const target = current.get(String(peer.routingId));
|
|
133
|
-
if (target !== undefined && peer.endpoint === target.endpoint) {
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
this.node.disconnectPeer(peer.routingId, peer.lifecycleGeneration);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
121
|
isDisconnected(target) {
|
|
140
122
|
// A connect intent still owns transport state even when its peer has not
|
|
141
123
|
// reached the admitted table yet. Shutdown must remove that intent before
|
|
@@ -146,7 +128,7 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
146
128
|
.peers()
|
|
147
129
|
.some((peer) => peer.routingId !== null &&
|
|
148
130
|
peer.endpoint === target.endpoint &&
|
|
149
|
-
(target.nodeRid === undefined ||
|
|
131
|
+
(target.nodeRid === undefined || (0, routing_id_1.routingIdsEqual)(peer.routingId, target.nodeRid)) &&
|
|
150
132
|
peer.lifecycleGeneration === target.lifecycleGeneration &&
|
|
151
133
|
peer.state === service_runtime_contracts_1.MeshPeerRuntimeState.Serving);
|
|
152
134
|
}
|
|
@@ -183,7 +165,7 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
183
165
|
async connectPeer(target, key, intent) {
|
|
184
166
|
const connectionIntentId = await this.node.connectPeer({
|
|
185
167
|
endpoint: target.endpoint,
|
|
186
|
-
expectedRid: target.nodeRid === undefined ? undefined : (0,
|
|
168
|
+
expectedRid: target.nodeRid === undefined ? undefined : (0, routing_id_2.toBackendRoutingId)(target.nodeRid),
|
|
187
169
|
expectedSecurityIdentity: toAdmissionSecurityIdentity(target.metadata?.securityIdentity),
|
|
188
170
|
expectedLifecycleGeneration: target.lifecycleGeneration
|
|
189
171
|
});
|
|
@@ -213,16 +195,13 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
213
195
|
if (peer.endpoint !== target.endpoint) {
|
|
214
196
|
continue;
|
|
215
197
|
}
|
|
216
|
-
if (target.nodeRid !== undefined &&
|
|
198
|
+
if (target.nodeRid !== undefined && !(0, routing_id_1.routingIdsEqual)(peer.routingId, target.nodeRid)) {
|
|
217
199
|
continue;
|
|
218
200
|
}
|
|
219
201
|
this.node.disconnectPeer(peer.routingId, peer.lifecycleGeneration);
|
|
220
202
|
}
|
|
221
203
|
}
|
|
222
204
|
}
|
|
223
|
-
function runDetachedSpotNodeAutoConnect(work) {
|
|
224
|
-
return detachedSpotNodeAutoConnectResource.runInAsyncScope(work);
|
|
225
|
-
}
|
|
226
205
|
function connectionKey(target) {
|
|
227
206
|
return `${target.nodeRid ?? ''}\0${target.lifecycleGeneration}\0${target.endpoint}`;
|
|
228
207
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ZLinkMeshDispatchAdmission } from '../admission';
|
|
1
2
|
import type { ApplicationJobOrigin } from '../application-jobs/contracts';
|
|
2
3
|
import { type ActorRef, type RoutingId, type ZLinkActor, type ZLinkChannelClient, type ZLinkFanoutClient, type ZLinkMeshNodeDescriptor, type ZLinkMessage, type ZLinkMessageSerializer, type ZLinkSpotPublisherClient, ZLinkFrameworkRuntimeState } from '../../contracts';
|
|
3
4
|
import type { Message } from '../../contracts/Common/Message';
|
|
@@ -9,7 +10,7 @@ import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
|
|
|
9
10
|
import type { ZLinkBackendAdapterFactory, ZLinkBackendContext, ZLinkBackendMeshNode } from '../backend/contracts';
|
|
10
11
|
import { ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
|
|
11
12
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
12
|
-
import { type ZLinkFrameworkRegistration } from '../configuration';
|
|
13
|
+
import { type ZLinkFrameworkRegistration, type ZLinkSpotNodeOptions } from '../configuration';
|
|
13
14
|
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
14
15
|
import type { ZLinkListenerRecords } from '../foundation/listener-records';
|
|
15
16
|
import { type ZLinkMessageFollowOrigin, type ReadyRecord, type ReceiveRecord } from '../foundation/service-runtime-contracts';
|
|
@@ -75,6 +76,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
75
76
|
constructor(options: ZLinkSpotNodeRuntimeManagerOptions);
|
|
76
77
|
createTopicMessage(): import("../backend/runtime-values").ZLinkBackendTopicMessage;
|
|
77
78
|
configureLocationAutoConnect(runtime: ZLinkLocationRuntime, stores: ZLinkLocationRuntimeStores, options: ZLinkLocationOptionOverrides, events?: ZLinkLocationEventSink): void;
|
|
79
|
+
requestPeerReconcile(meshName: string, peerRid: string): Promise<void>;
|
|
78
80
|
startLocationAutoConnect(signal?: AbortSignal): Promise<void>;
|
|
79
81
|
/**
|
|
80
82
|
* Fences transport connections that were created under an owner token which
|
|
@@ -85,6 +87,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
85
87
|
start(): Promise<void>;
|
|
86
88
|
publishMeshNodeState(state: ZLinkFrameworkRuntimeState, signal?: AbortSignal, selectedMeshName?: string): Promise<void>;
|
|
87
89
|
private publishMeshNodeStateCore;
|
|
90
|
+
private localDescriptorFields;
|
|
88
91
|
reconcileAndPublishMeshNodeState(state: ZLinkFrameworkRuntimeState, meshName: string, signal?: AbortSignal): Promise<void>;
|
|
89
92
|
private entrySpotId;
|
|
90
93
|
get meshNodesByName(): ReadonlyMap<string, ZLinkBackendMeshNode>;
|
|
@@ -112,13 +115,21 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
112
115
|
serverChannels(meshName: string): [string, import("../configuration").ZLinkMeshChannelOptions][];
|
|
113
116
|
dispose(signal?: AbortSignal, deadline?: Date): Promise<void>;
|
|
114
117
|
private disposeCore;
|
|
118
|
+
/**
|
|
119
|
+
* Node and Channel records go straight to the framework dispatcher in the
|
|
120
|
+
* pump's turn. Only Spot and Actor records addressed to the Entry Spot wait
|
|
121
|
+
* for its activation first.
|
|
122
|
+
*/
|
|
115
123
|
private dispatchMeshRecord;
|
|
116
|
-
|
|
124
|
+
private targetsEntrySpot;
|
|
125
|
+
private dispatchFrameworkRecord;
|
|
126
|
+
dispatchEntrySpotRecord(meshName: string, owner: ReadyRecord, record: ReceiveRecord, admit?: ZLinkMeshDispatchAdmission): Promise<boolean>;
|
|
117
127
|
private ensureEntryActivation;
|
|
118
128
|
private initializeEntrySpot;
|
|
119
129
|
private primaryEntryActivation;
|
|
120
130
|
dispatchEntryActorPacket(origin: ApplicationJobOrigin, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, requestTerminal?: (response: unknown) => Promise<void> | void, messageFollowOrigin?: ZLinkMessageFollowOrigin): Promise<unknown>;
|
|
121
131
|
dispatchEntryActorJoin(meshName: string, actor: ZLinkActor, handoffBacklog?: readonly ZLinkActorHandoffPacket[]): Promise<void>;
|
|
132
|
+
admitEntryActorPacketPrefix(meshName: string, actorId: string, records: readonly import('../actors/actor-handoff').ZLinkActorHandoffPrefixRecord[]): import('../actors/actor-handoff').ZLinkActorHandoffPrefixAdmission;
|
|
122
133
|
executeEntryActor<T>(meshName: string, actorId: string, operation: () => Promise<T>): Promise<T>;
|
|
123
134
|
publish(meshName: string, channelName: string, topic: string, packetName: string | undefined, event: Message, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
|
|
124
135
|
private executePublish;
|
|
@@ -126,3 +137,9 @@ export declare class ZLinkSpotNodeRuntimeManager {
|
|
|
126
137
|
private publishWithFlags;
|
|
127
138
|
}
|
|
128
139
|
export declare function createFrameworkEntrySpotId(prefix: string): string;
|
|
140
|
+
/**
|
|
141
|
+
* The one decision for creating a new Actor on this node (Actor model §6.3): the node registered
|
|
142
|
+
* an Entry Spot type that accepts the Actor type and an Actor factory for it. Publication and the
|
|
143
|
+
* target refusal both read it.
|
|
144
|
+
*/
|
|
145
|
+
export declare function registrationAcceptsNewActor(registration: ZLinkSpotNodeOptions, stableType: string): boolean;
|