@zlink-systems/framework 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -4,21 +4,17 @@ exports.ZLinkSpotActorJoinDispatch = void 0;
|
|
|
4
4
|
const contracts_1 = require("../backend/contracts");
|
|
5
5
|
const spot_actor_lifecycle_drain_1 = require("./spot-actor-lifecycle-drain");
|
|
6
6
|
const spot_actor_packet_drain_1 = require("./spot-actor-packet-drain");
|
|
7
|
-
const spot_native_flags_1 = require("./spot-native-flags");
|
|
8
|
-
const spot_native_actor_join_admission_1 = require("./spot-native-actor-join-admission");
|
|
9
7
|
const spot_routed_frame_dispatch_1 = require("./spot-routed-frame-dispatch");
|
|
10
8
|
const spot_subscription_dispatch_1 = require("./spot-subscription-dispatch");
|
|
9
|
+
const ACTOR_JOIN_POLL_INTERVAL_MS = 5;
|
|
11
10
|
const ZLINK_SPOT_DISPATCH_SUBJECT_SPOT = 1;
|
|
12
11
|
const ZLINK_SPOT_DISPATCH_SUBJECT_CHANNEL_DEALER = 3;
|
|
13
12
|
class ZLinkSpotActorJoinDispatch {
|
|
14
13
|
options;
|
|
15
|
-
draining = false;
|
|
16
|
-
redrainRequested = false;
|
|
17
14
|
nativeSpotId;
|
|
18
15
|
subscriptions;
|
|
19
16
|
actorLifecycleDrain;
|
|
20
17
|
actorPacketDrain;
|
|
21
|
-
nativeActorJoinAdmission;
|
|
22
18
|
routedFrames;
|
|
23
19
|
nativeSpot;
|
|
24
20
|
constructor(options) {
|
|
@@ -43,19 +39,7 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
43
39
|
waitIdle: waitSpotDispatchIdle,
|
|
44
40
|
flowEnabled: () => options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
45
41
|
});
|
|
46
|
-
this.nativeActorJoinAdmission = new spot_native_actor_join_admission_1.ZLinkSpotNativeActorJoinAdmission({
|
|
47
|
-
nativeSpot: options.nativeSpot,
|
|
48
|
-
serial: options.serial,
|
|
49
|
-
resolveActor: actors.resolveActor,
|
|
50
|
-
getTarget: actors.getTarget,
|
|
51
|
-
defaultAccept: actors.defaultAccept,
|
|
52
|
-
commitAcceptedActor: actors.commitNativeActor,
|
|
53
|
-
messageSerializers: options.messageSerializers,
|
|
54
|
-
dispatchErrors: options.dispatchErrors
|
|
55
|
-
});
|
|
56
42
|
this.routedFrames = new spot_routed_frame_dispatch_1.ZLinkSpotRoutedFrameDispatch({
|
|
57
|
-
nativeSpot: options.nativeSpot,
|
|
58
|
-
createReceived: options.createReceived,
|
|
59
43
|
nativeSpotId: this.nativeSpotId,
|
|
60
44
|
serial: options.serial,
|
|
61
45
|
resolveActor: actors.resolveActor,
|
|
@@ -66,11 +50,11 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
66
50
|
actorPacketHandler: options.packets?.handle,
|
|
67
51
|
bindRemoteSession: options.packets?.bindRemoteSession === undefined
|
|
68
52
|
? undefined
|
|
69
|
-
: (actor, sourceNodeRid, sourceSessionRid
|
|
53
|
+
: (actor, sourceNodeRid, sourceSessionRid) => options.packets.bindRemoteSession({
|
|
70
54
|
actorId: actor.actorId,
|
|
71
55
|
generation: actor.objectGeneration,
|
|
72
56
|
nodeRid: actor.nodeRid
|
|
73
|
-
}, sourceNodeRid, sourceSessionRid
|
|
57
|
+
}, sourceNodeRid, sourceSessionRid),
|
|
74
58
|
routedBoundSessionReceiver: options.boundSessionRuntime?.receiveRoutedBoundSession.bind(options.boundSessionRuntime),
|
|
75
59
|
routedBoundSessionResponseReceiver: options.boundSessionRuntime?.receiveRoutedBoundSessionResponse.bind(options.boundSessionRuntime),
|
|
76
60
|
routedBoundSessionErrorReceiver: options.boundSessionRuntime?.receiveRoutedBoundSessionError.bind(options.boundSessionRuntime),
|
|
@@ -78,8 +62,7 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
78
62
|
messageSerializers: options.messageSerializers,
|
|
79
63
|
providerResolver: options.providerResolver,
|
|
80
64
|
dispatchErrors: options.dispatchErrors,
|
|
81
|
-
claimApplicationWork: options.claimApplicationWork
|
|
82
|
-
waitIdle: waitSpotDispatchIdle
|
|
65
|
+
claimApplicationWork: options.claimApplicationWork
|
|
83
66
|
});
|
|
84
67
|
this.subscriptions = new spot_subscription_dispatch_1.ZLinkSpotSubscriptionDispatch({
|
|
85
68
|
nativeSpot: options.nativeSpot,
|
|
@@ -107,10 +90,6 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
107
90
|
return;
|
|
108
91
|
}
|
|
109
92
|
this.nativeSpot.setDispatchHandler((info) => {
|
|
110
|
-
if (info.event === contracts_1.ZLinkBackendSpotDispatchEvent.ActorJoinReadable) {
|
|
111
|
-
this.runDetached('spot actor join drain', () => this.drain());
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
93
|
if (info.event === contracts_1.ZLinkBackendSpotDispatchEvent.SubscribeReadable) {
|
|
115
94
|
this.runDetached('spot subscription drain', () => this.subscriptions.drain());
|
|
116
95
|
return;
|
|
@@ -149,37 +128,8 @@ class ZLinkSpotActorJoinDispatch {
|
|
|
149
128
|
}
|
|
150
129
|
void callback().catch(() => undefined);
|
|
151
130
|
}
|
|
152
|
-
async drain() {
|
|
153
|
-
if (this.draining) {
|
|
154
|
-
this.redrainRequested = true;
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
this.draining = true;
|
|
158
|
-
try {
|
|
159
|
-
do {
|
|
160
|
-
this.redrainRequested = false;
|
|
161
|
-
await this.drainAvailableActorJoins();
|
|
162
|
-
} while (this.redrainWasRequested());
|
|
163
|
-
}
|
|
164
|
-
finally {
|
|
165
|
-
this.draining = false;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
redrainWasRequested() {
|
|
169
|
-
return this.redrainRequested;
|
|
170
|
-
}
|
|
171
|
-
async drainAvailableActorJoins() {
|
|
172
|
-
for (;;) {
|
|
173
|
-
const request = this.nativeSpot.recvActorJoin(spot_native_flags_1.ZLINK_RECV_DONT_WAIT);
|
|
174
|
-
if (request === null) {
|
|
175
|
-
await waitSpotDispatchIdle();
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
await this.nativeActorJoinAdmission.admit(request);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
131
|
}
|
|
182
132
|
exports.ZLinkSpotActorJoinDispatch = ZLinkSpotActorJoinDispatch;
|
|
183
133
|
function waitSpotDispatchIdle() {
|
|
184
|
-
return new Promise((resolve) => setTimeout(resolve,
|
|
134
|
+
return new Promise((resolve) => setTimeout(resolve, ACTOR_JOIN_POLL_INTERVAL_MS));
|
|
185
135
|
}
|
|
@@ -26,7 +26,7 @@ class ZLinkSpotActorLifecycleDrain {
|
|
|
26
26
|
}
|
|
27
27
|
if (actorRef === null || actorRef === undefined)
|
|
28
28
|
continue;
|
|
29
|
-
await this.options.serial.execute(() => {
|
|
29
|
+
await this.options.serial.executeLifecycleOperation(() => this.options.serial.execute(() => {
|
|
30
30
|
const actor = this.options.resolveActor(actorId);
|
|
31
31
|
if (actor === undefined) {
|
|
32
32
|
return undefined;
|
|
@@ -44,7 +44,7 @@ class ZLinkSpotActorLifecycleDrain {
|
|
|
44
44
|
return target.onDisconnectActor?.(actor);
|
|
45
45
|
}
|
|
46
46
|
return undefined;
|
|
47
|
-
});
|
|
47
|
+
}));
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
1
|
+
import { type RoutingId, type ZLinkActor, type ZLinkMessageSerializer, type ZLinkSpot, type ZLinkSpotActorJoinResult } from '../../contracts';
|
|
3
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
3
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
4
4
|
import { ZLinkDispatchErrorReporter } from '../channels';
|
|
5
5
|
import type { ZLinkSpotActivation } from './spot-activation-state';
|
|
6
|
-
import type { ZLinkSpotActorTransferRuntime } from './spot-runtime-ports';
|
|
7
6
|
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
7
|
+
import type { ZLinkSpotActorTransferRuntime } from './spot-runtime-ports';
|
|
8
8
|
export interface ZLinkSpotActorMembershipOptions {
|
|
9
9
|
readonly resolveActivation: (spotId: RoutingId, meshName?: string) => ZLinkSpotActivation | undefined;
|
|
10
10
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
@@ -21,12 +21,13 @@ export interface ZLinkSpotActorMembershipOptions {
|
|
|
21
21
|
readonly spotRouteResolver?: ZLinkSpotRouteResolver;
|
|
22
22
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
23
23
|
}
|
|
24
|
-
export type ZLinkActorJoinRollback = () => Promise<void> | void;
|
|
25
24
|
export declare class ZLinkSpotActorMembership {
|
|
26
25
|
private readonly options;
|
|
27
26
|
constructor(options: ZLinkSpotActorMembershipOptions);
|
|
28
|
-
admitActorJoin(spotId: RoutingId, actor: ZLinkActor, request: Message, commit: (spot: ZLinkSpot) => Promise<
|
|
27
|
+
admitActorJoin(spotId: RoutingId, actor: ZLinkActor, request: Message, commit: (spot: ZLinkSpot) => Promise<void> | void, signal?: AbortSignal, leaveSource?: () => Promise<void>, contentType?: string): Promise<ZLinkSpotActorJoinResult>;
|
|
28
|
+
private admitActorJoinCore;
|
|
29
29
|
leaveActor(spotId: RoutingId, actor: ZLinkActor, signal?: AbortSignal, meshName?: string): Promise<void>;
|
|
30
|
+
private leaveActorCore;
|
|
30
31
|
notifyActorLeftAfterTransfer(spotId: RoutingId, actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
31
32
|
prepareActorLeaveForTransfer(spotId: RoutingId, actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
|
|
32
33
|
commitActorLeaveAfterTransfer(spotId: RoutingId, actorId: string): Promise<void>;
|
|
@@ -35,5 +36,6 @@ export declare class ZLinkSpotActorMembership {
|
|
|
35
36
|
cancelActorTransfer(spotId: RoutingId, actorId: string): Promise<void>;
|
|
36
37
|
notifyJoinedActorDisconnected(spotId: RoutingId, actor: ZLinkActor, signal?: AbortSignal): Promise<boolean>;
|
|
37
38
|
private requireActivation;
|
|
39
|
+
private runLifecycleOperation;
|
|
38
40
|
private createActorDispatcher;
|
|
39
41
|
}
|
|
@@ -1,48 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotActorMembership = void 0;
|
|
4
|
+
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
4
5
|
const contracts_1 = require("../../contracts");
|
|
6
|
+
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
5
7
|
const abort_1 = require("../abort");
|
|
8
|
+
const actors_1 = require("../actors");
|
|
6
9
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
7
10
|
const configuration_1 = require("../configuration");
|
|
8
|
-
const actors_1 = require("../actors");
|
|
9
11
|
const payload_codec_1 = require("../messaging/payload-codec");
|
|
10
|
-
const routing_id_1 = require("../routing-id");
|
|
11
12
|
class ZLinkSpotActorMembership {
|
|
12
13
|
options;
|
|
13
14
|
constructor(options) {
|
|
14
15
|
this.options = options;
|
|
15
16
|
}
|
|
16
|
-
async admitActorJoin(spotId, actor, request, commit, signal, leaveSource, contentType =
|
|
17
|
+
async admitActorJoin(spotId, actor, request, commit, signal, leaveSource, contentType = stream_wire_1.ZlinkStreamContentType.Json) {
|
|
17
18
|
(0, abort_1.throwIfAborted)(signal);
|
|
18
19
|
const activation = this.requireActivation(spotId);
|
|
20
|
+
return await this.runLifecycleOperation(activation, async () => {
|
|
21
|
+
return await this.admitActorJoinCore(activation, actor, request, commit, signal, leaveSource, contentType);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
async admitActorJoinCore(activation, actor, request, commit, signal, leaveSource, contentType) {
|
|
19
25
|
const dispatcher = this.createActorDispatcher(activation);
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
const response = await dispatcher.evaluateActorJoin(actor, request, contentType);
|
|
27
|
+
if (response.accepted) {
|
|
28
|
+
await commit(activation.spot);
|
|
29
|
+
activation.commitActorJoin(actor);
|
|
30
|
+
try {
|
|
31
|
+
await dispatcher.notifyJoinActor(actor);
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
25
34
|
if (leaveSource === undefined) {
|
|
26
|
-
|
|
35
|
+
void this.options.entrySpotCallbacks?.onLeaveActor(actor, signal).catch((error) => {
|
|
36
|
+
this.options.dispatchErrors?.report({
|
|
37
|
+
surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotActor,
|
|
38
|
+
messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.ActorSend,
|
|
39
|
+
reason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
40
|
+
action: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
|
|
41
|
+
actorId: actor.context.actorId,
|
|
42
|
+
error
|
|
43
|
+
});
|
|
44
|
+
});
|
|
27
45
|
}
|
|
28
46
|
else {
|
|
29
47
|
await leaveSource();
|
|
30
48
|
}
|
|
31
|
-
await dispatcher.commitActorJoin(actor, async () => {
|
|
32
|
-
const rollback = await commit(activation.spot);
|
|
33
|
-
if (rollback !== undefined)
|
|
34
|
-
transaction.rollbackExternal = rollback;
|
|
35
|
-
transaction.rollbackMembership = activation.commitActorJoin(actor);
|
|
36
|
-
transaction.committed = true;
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
if (transaction.committed) {
|
|
42
|
-
transaction.rollbackMembership?.();
|
|
43
|
-
await transaction.rollbackExternal?.();
|
|
44
49
|
}
|
|
45
|
-
throw error;
|
|
46
50
|
}
|
|
47
51
|
return {
|
|
48
52
|
accepted: response.accepted,
|
|
@@ -54,6 +58,9 @@ class ZLinkSpotActorMembership {
|
|
|
54
58
|
async leaveActor(spotId, actor, signal, meshName) {
|
|
55
59
|
(0, abort_1.throwIfAborted)(signal);
|
|
56
60
|
const activation = this.requireActivation(spotId, meshName);
|
|
61
|
+
await this.runLifecycleOperation(activation, () => this.leaveActorCore(activation, actor, signal, meshName));
|
|
62
|
+
}
|
|
63
|
+
async leaveActorCore(activation, actor, signal, meshName) {
|
|
57
64
|
const localEntryNodeRid = (meshName === undefined ? undefined : this.options.nodeRidProvider?.(meshName)) ??
|
|
58
65
|
this.options.entryNodeRidProvider?.() ??
|
|
59
66
|
this.options.entryNodeRid ??
|
|
@@ -68,24 +75,6 @@ class ZLinkSpotActorMembership {
|
|
|
68
75
|
if (entryNodeRid === undefined) {
|
|
69
76
|
throw new configuration_1.ZLinkConfigurationException('Spot actor leave requires an Entry Spot node routing id.');
|
|
70
77
|
}
|
|
71
|
-
const remoteEntry = localEntryNodeRid !== undefined && !(0, routing_id_1.routingIdsEqual)(entryNodeRid, localEntryNodeRid);
|
|
72
|
-
if (!remoteEntry) {
|
|
73
|
-
const leaveSource = async () => {
|
|
74
|
-
activation.beginActorTransfer(actor.context.actorId);
|
|
75
|
-
await activation.spot.onLeaveActor(actor);
|
|
76
|
-
activation.commitActorDeparture(actor.context.actorId);
|
|
77
|
-
this.options.actorTransferRuntime?.clearRoutedActor(actor);
|
|
78
|
-
};
|
|
79
|
-
// A Spot actor handler already owns this activation's serial turn.
|
|
80
|
-
// Complete its lifecycle transition inside that turn instead of trying
|
|
81
|
-
// to acquire a second turn for the same owner.
|
|
82
|
-
if (activation.serial.isCurrentTurn) {
|
|
83
|
-
await leaveSource();
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
await activation.serial.execute(leaveSource);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
78
|
const request = runtime_message_1.ZLinkBufferMessage.from(Buffer.alloc(0));
|
|
90
79
|
try {
|
|
91
80
|
const context = actor.context;
|
|
@@ -109,40 +98,36 @@ class ZLinkSpotActorMembership {
|
|
|
109
98
|
async notifyActorLeftAfterTransfer(spotId, actor, signal) {
|
|
110
99
|
(0, abort_1.throwIfAborted)(signal);
|
|
111
100
|
const activation = this.requireActivation(spotId);
|
|
112
|
-
await activation.serial.execute(async () => {
|
|
101
|
+
await this.runLifecycleOperation(activation, () => activation.serial.execute(async () => {
|
|
113
102
|
activation.beginActorTransfer(actor.context.actorId);
|
|
114
103
|
await activation.spot.onLeaveActor(actor);
|
|
115
104
|
activation.commitActorDeparture(actor.context.actorId);
|
|
116
|
-
});
|
|
105
|
+
}));
|
|
117
106
|
}
|
|
118
107
|
async prepareActorLeaveForTransfer(spotId, actor, signal) {
|
|
119
108
|
(0, abort_1.throwIfAborted)(signal);
|
|
120
109
|
const activation = this.requireActivation(spotId);
|
|
121
|
-
await activation.serial.execute(() => activation.spot.onLeaveActor(actor));
|
|
110
|
+
await this.runLifecycleOperation(activation, () => activation.serial.execute(() => activation.spot.onLeaveActor(actor)));
|
|
122
111
|
}
|
|
123
112
|
async commitActorLeaveAfterTransfer(spotId, actorId) {
|
|
124
113
|
const activation = this.requireActivation(spotId);
|
|
125
|
-
await activation.serial.execute(() => activation.commitActorDeparture(actorId));
|
|
114
|
+
await this.runLifecycleOperation(activation, () => activation.serial.execute(() => activation.commitActorDeparture(actorId)));
|
|
126
115
|
}
|
|
127
116
|
async restoreActorAfterFailedTransfer(spotId, actor, signal) {
|
|
128
117
|
(0, abort_1.throwIfAborted)(signal);
|
|
129
118
|
const activation = this.requireActivation(spotId);
|
|
130
|
-
await activation.serial.execute(async () => {
|
|
119
|
+
await this.runLifecycleOperation(activation, () => activation.serial.execute(async () => {
|
|
131
120
|
activation.cancelActorTransfer(actor.context.actorId);
|
|
132
121
|
await activation.spot.onJoinedActor(actor);
|
|
133
|
-
});
|
|
122
|
+
}));
|
|
134
123
|
}
|
|
135
124
|
async beginActorTransfer(spotId, actorId) {
|
|
136
125
|
const activation = this.requireActivation(spotId);
|
|
137
|
-
await activation.serial.execute(() =>
|
|
138
|
-
activation.beginActorTransfer(actorId);
|
|
139
|
-
});
|
|
126
|
+
await this.runLifecycleOperation(activation, () => activation.serial.execute(() => activation.beginActorTransfer(actorId)));
|
|
140
127
|
}
|
|
141
128
|
async cancelActorTransfer(spotId, actorId) {
|
|
142
129
|
const activation = this.requireActivation(spotId);
|
|
143
|
-
await activation.serial.execute(() =>
|
|
144
|
-
activation.cancelActorTransfer(actorId);
|
|
145
|
-
});
|
|
130
|
+
await this.runLifecycleOperation(activation, () => activation.serial.execute(() => activation.cancelActorTransfer(actorId)));
|
|
146
131
|
}
|
|
147
132
|
async notifyJoinedActorDisconnected(spotId, actor, signal) {
|
|
148
133
|
(0, abort_1.throwIfAborted)(signal);
|
|
@@ -164,6 +149,12 @@ class ZLinkSpotActorMembership {
|
|
|
164
149
|
}
|
|
165
150
|
return activation;
|
|
166
151
|
}
|
|
152
|
+
async runLifecycleOperation(activation, operation) {
|
|
153
|
+
const pending = activation.serial.executeLifecycleOperation(operation);
|
|
154
|
+
return activation.serial.isCurrentTurn
|
|
155
|
+
? await activation.serial.currentTurn.yieldFrameworkPromise(pending)
|
|
156
|
+
: await pending;
|
|
157
|
+
}
|
|
167
158
|
createActorDispatcher(activation) {
|
|
168
159
|
return new actors_1.ZLinkSpotActorDispatcher({
|
|
169
160
|
registry: activation.actorHandlers,
|
|
@@ -58,7 +58,6 @@ interface ZLinkSpotActorPacketDispatchOptions {
|
|
|
58
58
|
readonly handled: boolean;
|
|
59
59
|
readonly response?: unknown;
|
|
60
60
|
} | undefined;
|
|
61
|
-
readonly onRemoteBoundSessionTarget?: (actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined) => void;
|
|
62
61
|
readonly onDisconnectActor: (actor: ZLinkActor) => Promise<void>;
|
|
63
62
|
readonly actorResponseSender?: (actor: ZLinkActor, packetName: string, requestSeq: bigint, response: unknown, replyOptions: ZLinkActorResponseOptions, fallbackBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, signal?: AbortSignal) => Promise<void> | void;
|
|
64
63
|
readonly actorErrorSender?: (actorId: string, packetName: string, requestSeq: bigint, error: unknown, metadata: ReadonlyMap<string, string>, fallbackBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef) => Promise<void> | void;
|
|
@@ -65,14 +65,6 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
65
65
|
header.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
66
66
|
return undefined;
|
|
67
67
|
}
|
|
68
|
-
if (remoteBoundSessionTarget !== undefined &&
|
|
69
|
-
(0, actors_1.actorMessageFollowContext)(fallbackActorRef) === undefined) {
|
|
70
|
-
// A replayed handoff/Message Follow packet keeps its captured Session
|
|
71
|
-
// route solely for that packet's response. It cannot republish the
|
|
72
|
-
// predecessor route over a binding already confirmed by a later Actor
|
|
73
|
-
// owner turn.
|
|
74
|
-
this.options.onRemoteBoundSessionTarget?.(actorId, remoteBoundSessionTarget);
|
|
75
|
-
}
|
|
76
68
|
const routed = await this.options.routeBeforeLocal?.(delivery);
|
|
77
69
|
if (routed?.handled === true) {
|
|
78
70
|
return routed.response;
|
|
@@ -82,7 +74,6 @@ class ZLinkSpotActorPacketDispatch {
|
|
|
82
74
|
return this.handleMissingActor(actorId, parts, header, messageKind, action, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal);
|
|
83
75
|
}
|
|
84
76
|
if (header.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
|
|
85
|
-
this.options.onRemoteBoundSessionTarget?.(actorId, undefined);
|
|
86
77
|
await this.options.onDisconnectActor(actor);
|
|
87
78
|
return undefined;
|
|
88
79
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type ActorRef, type RoutingId } from '../../contracts';
|
|
2
2
|
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
3
|
-
import type { ZLinkRemoteActorPacketTarget
|
|
3
|
+
import type { ZLinkRemoteActorPacketTarget } from '../actors';
|
|
4
4
|
import type { ZLinkRemoteActorPacketRelay } from './spot-remote-route-codec';
|
|
5
5
|
import type { ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
|
|
6
6
|
interface ZLinkSpotActorPacketRelayDispatchOptions {
|
|
7
7
|
readonly actorPacketHandler?: (delivery: ZLinkActorPacketDelivery) => Promise<unknown>;
|
|
8
8
|
readonly actorPacketTargetProvider?: (actorId: string) => ZLinkRemoteActorPacketTarget | undefined;
|
|
9
|
-
readonly bindRemoteSession?: (actor: ActorRef, sourceNodeRid: RoutingId, sourceSessionRid: RoutingId
|
|
9
|
+
readonly bindRemoteSession?: (actor: ActorRef, sourceNodeRid: RoutingId, sourceSessionRid: RoutingId) => void;
|
|
10
10
|
readonly flowEnabled?: () => boolean;
|
|
11
11
|
}
|
|
12
12
|
export declare class ZLinkSpotActorPacketRelayDispatch {
|
|
@@ -44,13 +44,7 @@ class ZLinkSpotActorPacketRelayDispatch {
|
|
|
44
44
|
if (!(0, routing_id_1.routingIdsEqual)(sourceNodeRid, declaredSourceNodeRid)) {
|
|
45
45
|
throw new Error('Remote actor session binding source did not match the declared session node.');
|
|
46
46
|
}
|
|
47
|
-
this.options.bindRemoteSession(actorRef, declaredSourceNodeRid, binding.sessionRid
|
|
48
|
-
? undefined
|
|
49
|
-
: {
|
|
50
|
-
...remoteBoundSessionTarget,
|
|
51
|
-
sessionNodeRid: declaredSourceNodeRid,
|
|
52
|
-
sessionRid: binding.sessionRid
|
|
53
|
-
});
|
|
47
|
+
this.options.bindRemoteSession(actorRef, declaredSourceNodeRid, binding.sessionRid);
|
|
54
48
|
if ((0, spot_route_replies_1.hasReplyToken)(received.replyToken)) {
|
|
55
49
|
(0, spot_route_replies_1.submitSpotRouteBridgeReply)(received, actorPacketRelay.envelope, {
|
|
56
50
|
ok: true,
|
|
@@ -6,7 +6,7 @@ import { type ZLinkSpotTimerRegistry } from './spot-timer';
|
|
|
6
6
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
7
7
|
interface ZLinkEntrySpotContextOptions {
|
|
8
8
|
readonly spotId: SpotId;
|
|
9
|
-
readonly objectGeneration:
|
|
9
|
+
readonly objectGeneration: bigint;
|
|
10
10
|
readonly nodeRid: RoutingId;
|
|
11
11
|
readonly handlers: ZLinkSpotHandlerRegistry;
|
|
12
12
|
readonly outbound: ZLinkSpotOutbound;
|
|
@@ -22,7 +22,7 @@ interface ZLinkEntrySpotContextOptions {
|
|
|
22
22
|
interface ZLinkSpotContextOptions {
|
|
23
23
|
readonly meshName: string;
|
|
24
24
|
readonly spotId: SpotId;
|
|
25
|
-
readonly objectGeneration:
|
|
25
|
+
readonly objectGeneration: bigint;
|
|
26
26
|
readonly handlers: ZLinkSpotHandlerRegistry;
|
|
27
27
|
readonly outbound: ZLinkSpotOutbound;
|
|
28
28
|
readonly timers: ZLinkSpotTimerRegistry;
|
|
@@ -3,7 +3,7 @@ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProvider
|
|
|
3
3
|
import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
|
|
4
4
|
import type { ZLinkEntrySpotActorRequestHandlerRegistration, ZLinkEntrySpotActorSendHandlerRegistration, ZLinkEntrySpotPacketHandlerRegistration, ZLinkEntrySpotSubscriptionHandlerRegistration, ZLinkEntrySpotTimerHandlerRegistration } from '../../contracts/Configuration/RegistrationTypes';
|
|
5
5
|
import type { Message } from '../../contracts/Common/Message';
|
|
6
|
-
import type {
|
|
6
|
+
import type { ZLinkBackendSpot, ZLinkBackendSpotNode, ZLinkBackendTopicMessage } from '../backend/contracts';
|
|
7
7
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
8
8
|
import { ZLinkWorkerRuntime } from '../workers';
|
|
9
9
|
import { type ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
|
|
@@ -21,7 +21,6 @@ interface ZLinkEntrySpotActivationOptions {
|
|
|
21
21
|
readonly actorRequestHandlers?: readonly ZLinkEntrySpotActorRequestHandlerRegistration[];
|
|
22
22
|
readonly nativeSpot: ZLinkBackendSpot;
|
|
23
23
|
readonly nativeNode: ZLinkBackendSpotNode;
|
|
24
|
-
readonly createReceived: () => ZLinkBackendReceived;
|
|
25
24
|
readonly createTopicMessage: () => ZLinkBackendTopicMessage;
|
|
26
25
|
readonly nodeRid: RoutingId;
|
|
27
26
|
readonly spotNodeName: string;
|
|
@@ -30,7 +29,6 @@ interface ZLinkEntrySpotActivationOptions {
|
|
|
30
29
|
readonly spotPublisherClient?: ZLinkSpotPublisherClient;
|
|
31
30
|
readonly routedTransport?: ZLinkSpotRoutedTransport;
|
|
32
31
|
readonly spotRouterChannelIdForMesh?: (meshName: string) => string;
|
|
33
|
-
readonly channelMeshNameForChannel?: (channelName: string) => string | undefined;
|
|
34
32
|
readonly providerResolver?: ZLinkProviderResolver;
|
|
35
33
|
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
36
34
|
readonly runtimeEventPublisher?: ZLinkRuntimeEventPublisher;
|
|
@@ -41,7 +39,7 @@ interface ZLinkEntrySpotActivationOptions {
|
|
|
41
39
|
readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
|
|
42
40
|
readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
|
|
43
41
|
readonly actorHandoffRuntime?: ZLinkSpotActorHandoffRuntime;
|
|
44
|
-
readonly detachedTaskRunner
|
|
42
|
+
readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
|
|
45
43
|
}
|
|
46
44
|
export declare class ZLinkEntrySpotActivation {
|
|
47
45
|
private readonly options;
|
|
@@ -90,6 +88,7 @@ export declare class ZLinkEntrySpotActivation {
|
|
|
90
88
|
* actor-manager transaction in its admission callback.
|
|
91
89
|
*/
|
|
92
90
|
commitServiceActorJoin(actor: ZLinkActor, handoffBacklog?: readonly ZLinkActorHandoffPacket[], signal?: AbortSignal): Promise<void>;
|
|
91
|
+
executeActor<T>(actorId: string, operation: () => Promise<T>): Promise<T>;
|
|
93
92
|
/**
|
|
94
93
|
* Entry Spot membership does not have an application admission callback.
|
|
95
94
|
* The shared core round-trip therefore accepts a valid returning Actor and
|
|
@@ -40,6 +40,9 @@ class ZLinkEntrySpotActivation {
|
|
|
40
40
|
context;
|
|
41
41
|
constructor(options) {
|
|
42
42
|
this.options = options;
|
|
43
|
+
if (options.detachedTaskRunner === undefined) {
|
|
44
|
+
throw new configuration_1.ZLinkConfigurationException('Entry Spot activation requires a detached task runner.');
|
|
45
|
+
}
|
|
43
46
|
this.serial = new spot_serial_turn_executor_1.ZLinkSpotSerialTurnExecutor(false, options.nativeSpot.routingId);
|
|
44
47
|
this.spotSerialExecutor = new spot_serial_executor_1.ZLinkSpotSerialExecutor(this.serial, contracts_1.ZLinkUserSpotExecutionMode.PerActor, options.nativeSpot.routingId);
|
|
45
48
|
// Entry Spot lifecycle, timers and detached continuations use this serial
|
|
@@ -57,7 +60,7 @@ class ZLinkEntrySpotActivation {
|
|
|
57
60
|
this.workerRuntime = options.workerRuntime ?? new workers_1.ZLinkWorkerRuntime();
|
|
58
61
|
this.context = (0, spot_context_1.createEntrySpotContext)({
|
|
59
62
|
spotId: String(options.nativeSpot.routingId),
|
|
60
|
-
objectGeneration:
|
|
63
|
+
objectGeneration: entrySpotGeneration(options.nativeSpot),
|
|
61
64
|
nodeRid: options.nodeRid,
|
|
62
65
|
handlers: this.handlers,
|
|
63
66
|
outbound: this.outbound,
|
|
@@ -97,7 +100,6 @@ class ZLinkEntrySpotActivation {
|
|
|
97
100
|
registry: this.actorHandlers,
|
|
98
101
|
resolveActor: (targetActorId) => this.options.entryActorRuntime?.resolveActor(targetActorId),
|
|
99
102
|
routeBeforeLocal: (target) => this.options.entryActorRuntime?.routePacket(target.actorId, target.parts, target.returnResponse, target.remoteBoundSessionTarget, target.fallbackActorRef),
|
|
100
|
-
onRemoteBoundSessionTarget: (targetActorId, target) => this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(targetActorId, target),
|
|
101
103
|
onDisconnectActor: (actor) => this.notifyDisconnectActor(actor),
|
|
102
104
|
actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(this.options.boundSessionRuntime),
|
|
103
105
|
actorErrorSender: this.options.boundSessionRuntime?.sendActorError.bind(this.options.boundSessionRuntime),
|
|
@@ -179,7 +181,7 @@ class ZLinkEntrySpotActivation {
|
|
|
179
181
|
await cleanup(() => this.actorDispatch?.dispose());
|
|
180
182
|
await cleanup(() => this.timers.dispose());
|
|
181
183
|
await cleanup(() => this.spotSerialExecutor.close());
|
|
182
|
-
await cleanup(() => (0, handler_instance_scope_1.disposeLifecycleHandlers)(this.entrySpot));
|
|
184
|
+
await cleanup(() => (0, handler_instance_scope_1.disposeLifecycleHandlers)(this.entrySpot, this.options.detachedTaskRunner));
|
|
183
185
|
await cleanup(() => this.options.nativeSpot.dispose());
|
|
184
186
|
if (this.initialized) {
|
|
185
187
|
this.lifecycleMetrics.closed('entry');
|
|
@@ -215,6 +217,9 @@ class ZLinkEntrySpotActivation {
|
|
|
215
217
|
await this.replayActorBacklog(actor, handoffBacklog);
|
|
216
218
|
}
|
|
217
219
|
}
|
|
220
|
+
executeActor(actorId, operation) {
|
|
221
|
+
return this.spotSerialExecutor.executeActor(actorId, operation);
|
|
222
|
+
}
|
|
218
223
|
/**
|
|
219
224
|
* Entry Spot membership does not have an application admission callback.
|
|
220
225
|
* The shared core round-trip therefore accepts a valid returning Actor and
|
|
@@ -223,7 +228,6 @@ class ZLinkEntrySpotActivation {
|
|
|
223
228
|
attachActorJoinDispatch() {
|
|
224
229
|
const dispatch = new spot_actor_join_dispatch_1.ZLinkSpotActorJoinDispatch({
|
|
225
230
|
nativeSpot: this.options.nativeSpot,
|
|
226
|
-
createReceived: this.options.createReceived,
|
|
227
231
|
createTopicMessage: this.options.createTopicMessage,
|
|
228
232
|
serial: this.serial,
|
|
229
233
|
actors: {
|
|
@@ -236,7 +240,6 @@ class ZLinkEntrySpotActivation {
|
|
|
236
240
|
kind: 'enabled',
|
|
237
241
|
runtime: this.options.actorTransferRuntime
|
|
238
242
|
},
|
|
239
|
-
commitNativeActor: (actor) => this.commitEntryActorTransaction(actor),
|
|
240
243
|
commitTransferredActor: async (actor, backlog) => {
|
|
241
244
|
await this.commitEntryActorTransaction(actor);
|
|
242
245
|
return await this.replayActorBacklog(actor, backlog);
|
|
@@ -244,19 +247,10 @@ class ZLinkEntrySpotActivation {
|
|
|
244
247
|
},
|
|
245
248
|
packets: {
|
|
246
249
|
handle: (delivery) => this.dispatchActorPacket(delivery),
|
|
247
|
-
bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid
|
|
250
|
+
bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid) => {
|
|
248
251
|
if ((0, routing_id_1.routingIdsEqual)(sourceNodeRid, this.options.nativeNode.routingId)) {
|
|
249
252
|
return;
|
|
250
253
|
}
|
|
251
|
-
const target = declaredTarget ??
|
|
252
|
-
this.options.boundSessionRuntime?.resolveRemoteBoundSessionTarget(sourceNodeRid, sourceSessionRid);
|
|
253
|
-
if (target !== undefined) {
|
|
254
|
-
this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(actor.actorId, {
|
|
255
|
-
...target,
|
|
256
|
-
sessionNodeRid: sourceNodeRid,
|
|
257
|
-
sessionRid: sourceSessionRid
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
254
|
this.options.nativeNode.bindRemoteActorSession(actor, sourceNodeRid, sourceSessionRid);
|
|
261
255
|
},
|
|
262
256
|
replyNoBind: (info, parts, result) => this.replyActorNoBind(info, parts, result)
|
|
@@ -328,12 +322,6 @@ function notifyEntryActorJoined(entrySpot, actor) {
|
|
|
328
322
|
const callback = entrySpot.onJoinedActor;
|
|
329
323
|
return callback === undefined ? Promise.resolve() : callback.call(entrySpot, actor);
|
|
330
324
|
}
|
|
331
|
-
function toContextGeneration(generation) {
|
|
332
|
-
if (generation < 0n || generation > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
333
|
-
throw new configuration_1.ZLinkConfigurationException(`Entry Spot object generation '${generation}' cannot be represented by the Node.js public context.`);
|
|
334
|
-
}
|
|
335
|
-
return Number(generation);
|
|
336
|
-
}
|
|
337
325
|
function entrySpotGeneration(spot) {
|
|
338
326
|
return (spot.lifecycleGeneration ??
|
|
339
327
|
spot.status?.().lifecycleGeneration ??
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkSpotLifecycleMetrics = void 0;
|
|
4
|
+
const runtime_metrics_1 = require("../diagnostics/runtime-metrics");
|
|
4
5
|
class ZLinkSpotLifecycleMetrics {
|
|
5
6
|
metrics;
|
|
6
7
|
constructor(metrics) {
|
|
7
8
|
this.metrics = metrics;
|
|
8
9
|
}
|
|
9
10
|
opened(kind) {
|
|
10
|
-
this.metrics?.change(
|
|
11
|
+
this.metrics?.change(runtime_metrics_1.METRIC_NAMES.SpotCount, 1, { kind });
|
|
11
12
|
}
|
|
12
13
|
closed(kind) {
|
|
13
|
-
this.metrics?.change(
|
|
14
|
+
this.metrics?.change(runtime_metrics_1.METRIC_NAMES.SpotCount, -1, { kind });
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
exports.ZLinkSpotLifecycleMetrics = ZLinkSpotLifecycleMetrics;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { type RoutingId, type SpotId, type SpotRef, type ZLinkSpot, type ZLinkSpotCreateCall, type ZLinkSpotGetOrCreateCall, type ZLinkSpotManager } from '../../contracts';
|
|
2
|
-
import type { ZLinkMessageSerializer } from '../../contracts';
|
|
1
|
+
import { type ZLinkMessageSerializer, type RoutingId, type SpotId, type SpotRef, type ZLinkSpot, type ZLinkSpotCreateCall, type ZLinkSpotGetOrCreateCall, type ZLinkSpotManager } from '../../contracts';
|
|
3
2
|
import type { ZLinkObjectFactoryRegistration } from '../../contracts/Configuration/RegistrationTypes';
|
|
4
|
-
import type { ZLinkUserSpotCreationCoordinator } from '../host/user-spot-creation-coordinator';
|
|
5
|
-
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
6
|
-
import type { DefaultZLinkSpotManager } from './index';
|
|
7
|
-
import type { ServiceUserSpotCloseRecord } from '../foundation/service-stateful-wire-codec';
|
|
8
3
|
import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
|
|
4
|
+
import type { ServiceUserSpotCloseRecord } from '../foundation/service-stateful-wire-codec';
|
|
5
|
+
import type { ZLinkUserSpotCreationCoordinator } from '../host/user-spot-creation-coordinator';
|
|
9
6
|
import type { ZLinkAuthoritySnapshot } from '../locations/internal-location-contracts';
|
|
7
|
+
import type { DefaultZLinkSpotManager } from './index';
|
|
8
|
+
import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
|
|
10
9
|
export interface ZLinkPublicSpotManagerOptions {
|
|
11
10
|
readonly local: DefaultZLinkSpotManager;
|
|
12
11
|
readonly coordinator: ZLinkUserSpotCreationCoordinator;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ZLinkPublicSpotManager = void 0;
|
|
4
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
5
4
|
const node_crypto_1 = require("node:crypto");
|
|
6
5
|
const contracts_1 = require("../../contracts");
|
|
6
|
+
const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
|
|
7
7
|
const configuration_1 = require("../configuration");
|
|
8
|
-
const creation_payload_codec_1 = require("../messaging/creation-payload-codec");
|
|
9
8
|
const execution_1 = require("../execution");
|
|
9
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
10
|
+
const creation_payload_codec_1 = require("../messaging/creation-payload-codec");
|
|
10
11
|
class ZLinkPublicSpotManager {
|
|
11
12
|
options;
|
|
12
13
|
constructor(options) {
|
|
@@ -51,7 +52,7 @@ class ZLinkPublicSpotManager {
|
|
|
51
52
|
return false;
|
|
52
53
|
const current = resolved.spot;
|
|
53
54
|
if (this.options.isLocalNode(current.meshName, current.nodeRid)) {
|
|
54
|
-
const closed = await this.options.coordinator.close(spot, (local) => this.options.local.
|
|
55
|
+
const closed = await this.options.coordinator.close(spot, (local, beginAuthority) => this.options.local.closeUserWithAuthority(local.meshName, local.spotId, beginAuthority, signal), signal);
|
|
55
56
|
if (closed)
|
|
56
57
|
this.options.resolver()?.invalidate?.(spot.spotId);
|
|
57
58
|
return closed;
|
|
@@ -208,8 +209,8 @@ function selectFactory(factories, stableType, selectedMesh) {
|
|
|
208
209
|
}
|
|
209
210
|
function requireText(value, label) {
|
|
210
211
|
const bytes = Buffer.byteLength(value);
|
|
211
|
-
if (bytes < 1 || bytes >
|
|
212
|
-
throw invalidConfiguration(`${label} must contain 1
|
|
212
|
+
if (bytes < 1 || bytes > CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES || value.includes('\0')) {
|
|
213
|
+
throw invalidConfiguration(`${label} must contain 1..${CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes and no NUL.`);
|
|
213
214
|
}
|
|
214
215
|
return value;
|
|
215
216
|
}
|