@zlink-systems/framework 0.30.0 → 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/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- 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/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- 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 +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- 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 +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -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 +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- 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 +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- 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/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- 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 +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- 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 +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- 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 +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -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 +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -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 +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- 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-runtime-options-factory.js +2 -2
- 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 +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- 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 +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- 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-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- 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/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- 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 +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- 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.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- 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 +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- 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 +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- 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 +22 -42
- 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.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -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 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -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.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- 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/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- 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 +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- 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/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- 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 +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- 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 +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- 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 +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- 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 +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- 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-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- 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 +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- 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/lifecycle.ts +8 -26
- 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 +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- 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 +198 -96
- 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 +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- 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 +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -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 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- 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 +13 -34
- 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");
|
|
@@ -27,7 +28,7 @@ class ZLinkEntrySpotActivation {
|
|
|
27
28
|
spotSerialExecutor;
|
|
28
29
|
timers;
|
|
29
30
|
actorHandlers = new actors_1.ZLinkSpotActorHandlerRegistryRuntime();
|
|
30
|
-
handlers
|
|
31
|
+
handlers;
|
|
31
32
|
outbound;
|
|
32
33
|
workerRuntime;
|
|
33
34
|
lifecycleMetrics;
|
|
@@ -43,6 +44,7 @@ class ZLinkEntrySpotActivation {
|
|
|
43
44
|
if (options.detachedTaskRunner === undefined) {
|
|
44
45
|
throw new configuration_1.ZLinkConfigurationException('Entry Spot activation requires a detached task runner.');
|
|
45
46
|
}
|
|
47
|
+
this.handlers = new spot_handler_registry_1.DefaultZLinkSpotHandlerRegistry(this.actorHandlers, options.providerResolver);
|
|
46
48
|
this.serial = new spot_serial_turn_executor_1.ZLinkSpotSerialTurnExecutor(false, options.nativeSpot.routingId);
|
|
47
49
|
this.spotSerialExecutor = new spot_serial_executor_1.ZLinkSpotSerialExecutor(this.serial, contracts_1.ZLinkUserSpotExecutionMode.PerActor, options.nativeSpot.routingId);
|
|
48
50
|
// Entry Spot lifecycle, timers and detached continuations use this serial
|
|
@@ -139,7 +141,7 @@ class ZLinkEntrySpotActivation {
|
|
|
139
141
|
: this.packetDispatch.sendEncoded(this.spotId, packetName, decodePayload, context);
|
|
140
142
|
}
|
|
141
143
|
async create() {
|
|
142
|
-
const entrySpot = await (0, spot_provider_1.
|
|
144
|
+
const entrySpot = await (0, spot_provider_1.createFreshProviderInstance)(this.options.entrySpotType, this.options.providerResolver, this.context);
|
|
143
145
|
this.entrySpot = entrySpot;
|
|
144
146
|
Object.defineProperty(this.entrySpot, 'context', {
|
|
145
147
|
configurable: true,
|
|
@@ -182,7 +184,10 @@ class ZLinkEntrySpotActivation {
|
|
|
182
184
|
await cleanup(() => this.timers.dispose());
|
|
183
185
|
await cleanup(() => this.spotSerialExecutor.close());
|
|
184
186
|
await cleanup(() => (0, handler_instance_scope_1.disposeLifecycleHandlers)(this.entrySpot, this.options.detachedTaskRunner));
|
|
185
|
-
await cleanup(() =>
|
|
187
|
+
await cleanup(async () => {
|
|
188
|
+
await this.options.entryActorRuntime?.releaseMembers?.(this.options.spotNodeName);
|
|
189
|
+
await this.options.nativeSpot.dispose();
|
|
190
|
+
});
|
|
186
191
|
if (this.initialized) {
|
|
187
192
|
this.lifecycleMetrics.closed('entry');
|
|
188
193
|
}
|
|
@@ -287,18 +292,22 @@ class ZLinkEntrySpotActivation {
|
|
|
287
292
|
}
|
|
288
293
|
async dispatchActorPacket(delivery) {
|
|
289
294
|
const { actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, messageFollowOrigin } = delivery;
|
|
290
|
-
const handoff = this.options.actorHandoffRuntime?.capture(delivery.origin, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, undefined, messageFollowOrigin
|
|
291
|
-
origin: delivery.origin,
|
|
292
|
-
actorId,
|
|
293
|
-
parts: replayedParts,
|
|
294
|
-
returnResponse: replayReturnResponse,
|
|
295
|
-
remoteBoundSessionTarget: replayRemoteBoundSessionTarget,
|
|
296
|
-
fallbackActorRef: replayFallbackActorRef
|
|
297
|
-
})));
|
|
295
|
+
const handoff = this.options.actorHandoffRuntime?.capture(delivery.origin, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, undefined, messageFollowOrigin);
|
|
298
296
|
if (handoff !== undefined)
|
|
299
297
|
return await handoff;
|
|
300
298
|
return this.spotSerialExecutor.executeActor(actorId, () => this.dispatchActorPacketInsideMailbox(delivery));
|
|
301
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
|
+
}
|
|
302
311
|
async replayActorBacklog(actor, backlog) {
|
|
303
312
|
return await (0, actor_handoff_1.replayActorHandoffBacklog)(backlog, (parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => this.spotSerialExecutor.executeActor(actor.context.actorId, () => this.dispatchActorPacketInsideMailbox({
|
|
304
313
|
origin: 'remote',
|
|
@@ -1,8 +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
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
3
4
|
import { ZLinkActorPacketKind, ZLinkSpotActorHandlerRegistryRuntime } from '../actors';
|
|
4
5
|
export interface ZLinkSpotHandlerRegistration {
|
|
5
|
-
readonly kind: 'packet' | 'subscribe' | 'actorSend' | 'actorRequest' | '
|
|
6
|
+
readonly kind: 'packet' | 'subscribe' | 'actorSend' | 'actorRequest' | 'timer';
|
|
6
7
|
readonly handlerType: Type;
|
|
7
8
|
readonly packetName?: string;
|
|
8
9
|
readonly channelName?: string;
|
|
@@ -11,8 +12,9 @@ export interface ZLinkSpotHandlerRegistration {
|
|
|
11
12
|
}
|
|
12
13
|
export declare class DefaultZLinkSpotHandlerRegistry<TActor extends ZLinkActor = ZLinkActor> implements ZLinkSpotHandlerRegistry {
|
|
13
14
|
private readonly actorHandlers?;
|
|
15
|
+
private readonly providerResolver?;
|
|
14
16
|
private readonly entries;
|
|
15
|
-
constructor(actorHandlers?: ZLinkSpotActorHandlerRegistryRuntime | undefined);
|
|
17
|
+
constructor(actorHandlers?: ZLinkSpotActorHandlerRegistryRuntime | undefined, providerResolver?: ZLinkProviderResolver | undefined);
|
|
16
18
|
addHandler<THandler>(handlerType: Type<THandler>, packetName?: string): this;
|
|
17
19
|
addActorPacket<THandler, TRegisteredActor extends ZLinkActor>(handlerType: Type<THandler>, actorType: Type<TRegisteredActor>): this;
|
|
18
20
|
addPacket(handlerType: Type, packetName?: string): this;
|
|
@@ -22,7 +24,7 @@ export declare class DefaultZLinkSpotHandlerRegistry<TActor extends ZLinkActor =
|
|
|
22
24
|
actorRequest(packetName: string, handlerType: Type, actorType?: Type<TActor>): this;
|
|
23
25
|
addSubscribe(handlerType: Type, channelName: string, topic: string): this;
|
|
24
26
|
subscribe(channelName: string, topic: string, handlerType: Type): this;
|
|
25
|
-
|
|
27
|
+
addTimerHandler<THandler extends ZLinkSpotTimerHandler<ZLinkSpot>>(handlerType: Type<THandler>): this;
|
|
26
28
|
snapshot(): readonly ZLinkSpotHandlerRegistration[];
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
@@ -33,6 +35,7 @@ export declare class DefaultZLinkInstanceSpotHandlerRegistry implements ZLinkIns
|
|
|
33
35
|
private readonly registrations;
|
|
34
36
|
constructor(registrations: DefaultZLinkSpotHandlerRegistry);
|
|
35
37
|
addPacket<THandler>(handlerType: Type<THandler>): this;
|
|
38
|
+
addTimerHandler<THandler extends ZLinkSpotTimerHandler<ZLinkInstanceSpot>>(handlerType: Type<THandler>): this;
|
|
36
39
|
snapshot(): readonly ZLinkSpotHandlerRegistration[];
|
|
37
40
|
}
|
|
38
41
|
interface ZLinkEntrySpotHandlerRegistrationSet {
|
|
@@ -3,36 +3,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DefaultZLinkInstanceSpotHandlerRegistry = exports.DefaultZLinkSpotHandlerRegistry = void 0;
|
|
4
4
|
exports.applyEntrySpotHandlerRegistrations = applyEntrySpotHandlerRegistrations;
|
|
5
5
|
exports.applySpotHandlerRegistrations = applySpotHandlerRegistrations;
|
|
6
|
-
const
|
|
6
|
+
const handler_instance_scope_1 = require("../handlers/handler-instance-scope");
|
|
7
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
7
8
|
const actors_1 = require("../actors");
|
|
8
9
|
const Attributes_1 = require("../../contracts/Handlers/Attributes");
|
|
9
10
|
class DefaultZLinkSpotHandlerRegistry {
|
|
10
11
|
actorHandlers;
|
|
12
|
+
providerResolver;
|
|
11
13
|
entries = [];
|
|
12
|
-
constructor(actorHandlers) {
|
|
14
|
+
constructor(actorHandlers, providerResolver) {
|
|
13
15
|
this.actorHandlers = actorHandlers;
|
|
16
|
+
this.providerResolver = providerResolver;
|
|
14
17
|
}
|
|
15
18
|
addHandler(handlerType, packetName) {
|
|
16
19
|
const metadata = (0, Attributes_1.readZLinkDecoratorMetadata)(handlerType).find((entry) => entry.kind === 'spotActorSend' || entry.kind === 'spotActorRequest');
|
|
17
20
|
const resolvedPacketName = packetName ?? metadata?.packetName;
|
|
18
21
|
if (metadata === undefined || resolvedPacketName === undefined) {
|
|
19
|
-
throw
|
|
22
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Actor packet handler '${handlerType.name}' must declare a packet name.`);
|
|
20
23
|
}
|
|
21
24
|
return this.addActorPacketRegistration(metadata.kind === 'spotActorSend' ? actors_1.ZLinkActorPacketKind.Send : actors_1.ZLinkActorPacketKind.Request, handlerType, Object, resolvedPacketName);
|
|
22
25
|
}
|
|
23
26
|
addActorPacket(handlerType, actorType) {
|
|
24
27
|
const metadata = (0, Attributes_1.readZLinkDecoratorMetadata)(handlerType).find((entry) => entry.kind === 'spotActorSend' || entry.kind === 'spotActorRequest');
|
|
25
28
|
if (metadata?.packetName === undefined) {
|
|
26
|
-
throw
|
|
29
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Actor packet handler '${handlerType.name}' must declare a packet name.`);
|
|
27
30
|
}
|
|
28
31
|
return this.addActorPacketRegistration(metadata.kind === 'spotActorSend' ? actors_1.ZLinkActorPacketKind.Send : actors_1.ZLinkActorPacketKind.Request, handlerType, actorType, metadata.packetName);
|
|
29
32
|
}
|
|
30
33
|
addPacket(handlerType, packetName) {
|
|
31
34
|
const declared = (0, Attributes_1.readZLinkDecoratorMetadata)(handlerType).find((entry) => entry.kind === 'packet')?.packetName;
|
|
35
|
+
(0, handler_instance_scope_1.prepareHandlerInstance)(this.providerResolver, handlerType);
|
|
36
|
+
const resolvedPacketName = packetName ?? declared ?? handlerType.name;
|
|
37
|
+
if (this.entries.some((entry) => entry.kind === 'packet' && entry.packetName === resolvedPacketName))
|
|
38
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `SPOT packet '${resolvedPacketName}' is already registered.`);
|
|
32
39
|
this.entries.push({
|
|
33
40
|
kind: 'packet',
|
|
34
41
|
handlerType,
|
|
35
|
-
packetName:
|
|
42
|
+
packetName: resolvedPacketName
|
|
36
43
|
});
|
|
37
44
|
return this;
|
|
38
45
|
}
|
|
@@ -40,6 +47,7 @@ class DefaultZLinkSpotHandlerRegistry {
|
|
|
40
47
|
return this.addPacket(handlerType, packetName);
|
|
41
48
|
}
|
|
42
49
|
addActorPacketRegistration(kind, handlerType, actorType, packetName) {
|
|
50
|
+
(0, handler_instance_scope_1.prepareHandlerInstance)(this.providerResolver, handlerType);
|
|
43
51
|
this.entries.push({
|
|
44
52
|
kind: kind === actors_1.ZLinkActorPacketKind.Send ? 'actorSend' : 'actorRequest',
|
|
45
53
|
handlerType,
|
|
@@ -62,25 +70,27 @@ class DefaultZLinkSpotHandlerRegistry {
|
|
|
62
70
|
}
|
|
63
71
|
addSubscribe(handlerType, channelName, topic) {
|
|
64
72
|
if (channelName.trim().length === 0) {
|
|
65
|
-
throw
|
|
73
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'SPOT subscribe channel name must not be empty.');
|
|
66
74
|
}
|
|
67
75
|
if (topic.trim().length === 0) {
|
|
68
|
-
throw
|
|
76
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'SPOT subscribe topic must not be empty.');
|
|
69
77
|
}
|
|
70
78
|
if (this.entries.some((entry) => entry.kind === 'subscribe' &&
|
|
71
79
|
entry.handlerType === handlerType &&
|
|
72
80
|
entry.channelName === channelName &&
|
|
73
81
|
entry.topic === topic)) {
|
|
74
|
-
|
|
82
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `SPOT subscription '${channelName}/${topic}' is already registered.`);
|
|
75
83
|
}
|
|
84
|
+
(0, handler_instance_scope_1.prepareHandlerInstance)(this.providerResolver, handlerType);
|
|
76
85
|
this.entries.push({ kind: 'subscribe', handlerType, channelName, topic });
|
|
77
86
|
return this;
|
|
78
87
|
}
|
|
79
88
|
subscribe(channelName, topic, handlerType) {
|
|
80
89
|
return this.addSubscribe(handlerType, channelName, topic);
|
|
81
90
|
}
|
|
82
|
-
|
|
83
|
-
this.
|
|
91
|
+
addTimerHandler(handlerType) {
|
|
92
|
+
(0, handler_instance_scope_1.prepareHandlerInstance)(this.providerResolver, handlerType);
|
|
93
|
+
this.entries.push({ kind: 'timer', handlerType });
|
|
84
94
|
return this;
|
|
85
95
|
}
|
|
86
96
|
snapshot() {
|
|
@@ -101,6 +111,10 @@ class DefaultZLinkInstanceSpotHandlerRegistry {
|
|
|
101
111
|
this.registrations.addPacket(handlerType);
|
|
102
112
|
return this;
|
|
103
113
|
}
|
|
114
|
+
addTimerHandler(handlerType) {
|
|
115
|
+
this.registrations.addTimerHandler(handlerType);
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
104
118
|
snapshot() {
|
|
105
119
|
return this.registrations.snapshot();
|
|
106
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,59 +88,36 @@ 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);
|
|
106
105
|
}
|
|
107
106
|
async connect(target) {
|
|
108
|
-
if (this.manualConnections)
|
|
109
|
-
return false;
|
|
110
107
|
const key = connectionKey(target);
|
|
108
|
+
if (!this.connectionIntents.has(key) &&
|
|
109
|
+
this.node.hasPeerRouteOrConnectionIntent?.(target.nodeRid, target.endpoint) === true)
|
|
110
|
+
return false;
|
|
111
111
|
const intent = await this.lane.run(() => this.prepareConnectCore(key));
|
|
112
112
|
if (intent === undefined)
|
|
113
113
|
return true;
|
|
114
|
-
return await
|
|
114
|
+
return await (0, state_lane_1.startOutsideStateLane)(() => this.connectPeer(target, key, intent));
|
|
115
115
|
}
|
|
116
116
|
disconnect(target) {
|
|
117
|
-
if (this.
|
|
117
|
+
if (!this.connectionIntents.has(connectionKey(target)))
|
|
118
118
|
return;
|
|
119
119
|
this.disconnectPeer(target);
|
|
120
120
|
}
|
|
121
|
-
disconnectStalePeers(targets) {
|
|
122
|
-
if (this.manualConnections)
|
|
123
|
-
return;
|
|
124
|
-
const current = new Map(targets
|
|
125
|
-
.filter((target) => target.nodeRid !== undefined)
|
|
126
|
-
.map((target) => [String(target.nodeRid), target]));
|
|
127
|
-
const peers = this.node.peers();
|
|
128
|
-
for (const peer of peers) {
|
|
129
|
-
if (peer.routingId === null)
|
|
130
|
-
continue;
|
|
131
|
-
const target = current.get(String(peer.routingId));
|
|
132
|
-
if (target !== undefined && peer.endpoint === target.endpoint) {
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
this.node.disconnectPeer(peer.routingId, peer.lifecycleGeneration);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
121
|
isDisconnected(target) {
|
|
139
122
|
// A connect intent still owns transport state even when its peer has not
|
|
140
123
|
// reached the admitted table yet. Shutdown must remove that intent before
|
|
@@ -145,7 +128,7 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
145
128
|
.peers()
|
|
146
129
|
.some((peer) => peer.routingId !== null &&
|
|
147
130
|
peer.endpoint === target.endpoint &&
|
|
148
|
-
(target.nodeRid === undefined ||
|
|
131
|
+
(target.nodeRid === undefined || (0, routing_id_1.routingIdsEqual)(peer.routingId, target.nodeRid)) &&
|
|
149
132
|
peer.lifecycleGeneration === target.lifecycleGeneration &&
|
|
150
133
|
peer.state === service_runtime_contracts_1.MeshPeerRuntimeState.Serving);
|
|
151
134
|
}
|
|
@@ -182,7 +165,7 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
182
165
|
async connectPeer(target, key, intent) {
|
|
183
166
|
const connectionIntentId = await this.node.connectPeer({
|
|
184
167
|
endpoint: target.endpoint,
|
|
185
|
-
expectedRid: target.nodeRid === undefined ? undefined : (0,
|
|
168
|
+
expectedRid: target.nodeRid === undefined ? undefined : (0, routing_id_2.toBackendRoutingId)(target.nodeRid),
|
|
186
169
|
expectedSecurityIdentity: toAdmissionSecurityIdentity(target.metadata?.securityIdentity),
|
|
187
170
|
expectedLifecycleGeneration: target.lifecycleGeneration
|
|
188
171
|
});
|
|
@@ -212,16 +195,13 @@ class ZLinkSpotNodeAutoConnectExecutor {
|
|
|
212
195
|
if (peer.endpoint !== target.endpoint) {
|
|
213
196
|
continue;
|
|
214
197
|
}
|
|
215
|
-
if (target.nodeRid !== undefined &&
|
|
198
|
+
if (target.nodeRid !== undefined && !(0, routing_id_1.routingIdsEqual)(peer.routingId, target.nodeRid)) {
|
|
216
199
|
continue;
|
|
217
200
|
}
|
|
218
201
|
this.node.disconnectPeer(peer.routingId, peer.lifecycleGeneration);
|
|
219
202
|
}
|
|
220
203
|
}
|
|
221
204
|
}
|
|
222
|
-
function runDetachedSpotNodeAutoConnect(work) {
|
|
223
|
-
return detachedSpotNodeAutoConnectResource.runInAsyncScope(work);
|
|
224
|
-
}
|
|
225
205
|
function connectionKey(target) {
|
|
226
206
|
return `${target.nodeRid ?? ''}\0${target.lifecycleGeneration}\0${target.endpoint}`;
|
|
227
207
|
}
|