@zlink-systems/framework 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +15 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +1 -2
- package/dist/runtime/activation-admission.js +2 -6
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +13 -11
- package/dist/runtime/actors/actor-handoff.d.ts +4 -4
- package/dist/runtime/actors/actor-handoff.js +8 -8
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +83 -105
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.js +5 -9
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
- package/dist/runtime/actors/deferred-join-completion.js +1 -0
- package/dist/runtime/actors/index.d.ts +9 -7
- package/dist/runtime/actors/index.js +87 -69
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +2 -0
- package/dist/runtime/admission.js +7 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +6 -23
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
- package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -8
- package/dist/runtime/channels/channel-clients.js +68 -52
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -10
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.js +5 -2
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
- package/dist/runtime/channels/channel-socket-registry.js +248 -174
- package/dist/runtime/channels/channel-transports.d.ts +11 -17
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +130 -72
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +12 -9
- package/dist/runtime/execution/index.js +58 -14
- package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
- package/dist/runtime/execution/serial-execution-queue.js +54 -15
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
- package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
- package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
- package/dist/runtime/foundation/service-topology-registry.js +17 -32
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
- package/dist/runtime/host/actor-transfer-runtime.js +143 -176
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +14 -13
- package/dist/runtime/host/index.js +190 -157
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +7 -20
- package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
- package/dist/runtime/host/route-mesh-runtime.js +171 -252
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
- package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
- package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +4 -9
- package/dist/runtime/locations/lifecycle.js +2 -31
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +37 -28
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
- package/dist/runtime/locations/spot-location-claims.js +42 -1
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
- package/dist/runtime/spots/index.d.ts +14 -20
- package/dist/runtime/spots/index.js +302 -176
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
- package/dist/runtime/spots/spot-activation-registry.js +14 -50
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +2 -2
- package/dist/runtime/spots/spot-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-activation.js +49 -32
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
- package/dist/runtime/spots/spot-actor-membership.js +22 -45
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +9 -20
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +5 -4
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +9 -8
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
- package/dist/runtime/spots/spot-serial-executor.js +2 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
- package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +11 -1
- package/dist/runtime/streams/index.d.ts +14 -15
- package/dist/runtime/streams/index.js +20 -21
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +14 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +2 -8
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +39 -33
- package/src/runtime/actors/actor-handoff.ts +24 -22
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +172 -174
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +9 -11
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +10 -6
- package/src/runtime/actors/index.ts +100 -79
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +8 -1
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +13 -29
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
- package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
- package/src/runtime/backend/raw-binding-port.ts +1 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -85
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -23
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +6 -2
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +301 -192
- package/src/runtime/channels/channel-transports.ts +161 -112
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +172 -91
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +60 -20
- package/src/runtime/execution/serial-execution-queue.ts +131 -18
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
- package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
- package/src/runtime/foundation/service-topology-registry.ts +23 -32
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +180 -260
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +327 -296
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +8 -41
- package/src/runtime/host/route-mesh-runtime.ts +228 -271
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
- package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +13 -43
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +75 -49
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +58 -1
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
- package/src/runtime/spots/index.ts +433 -229
- package/src/runtime/spots/spot-activation-registry.ts +30 -69
- package/src/runtime/spots/spot-activation-state.ts +2 -2
- package/src/runtime/spots/spot-activation.ts +67 -37
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
- package/src/runtime/spots/spot-actor-membership.ts +40 -72
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -30
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +21 -17
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
- package/src/runtime/spots/spot-outbound.ts +45 -23
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +5 -27
- package/src/runtime/spots/spot-serial-executor.ts +2 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +21 -1
- package/src/runtime/streams/index.ts +76 -64
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZLinkActorSessionBindingRegistry = exports.ZLinkActorSessionBindingTermination = void 0;
|
|
4
|
-
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
5
|
-
const abort_1 = require("../abort");
|
|
3
|
+
exports.ZLinkActorSessionBindingRegistry = exports.ZLinkActorSessionBindingTermination = exports.DEFAULT_TERMINAL_RELOCATION_CAPACITY = void 0;
|
|
6
4
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
5
|
+
const ZLinkFrameworkException_1 = require("../../contracts/Errors/ZLinkFrameworkException");
|
|
6
|
+
const Options_1 = require("../../contracts/Locations/Options");
|
|
7
|
+
const abort_1 = require("../abort");
|
|
7
8
|
const state_lane_1 = require("../execution/state-lane");
|
|
9
|
+
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
10
|
+
exports.DEFAULT_TERMINAL_RELOCATION_CAPACITY = 4096;
|
|
8
11
|
const detachedStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:actor-session-binding-registry');
|
|
9
12
|
var ZLinkActorSessionBindingTermination;
|
|
10
13
|
(function (ZLinkActorSessionBindingTermination) {
|
|
@@ -13,7 +16,6 @@ var ZLinkActorSessionBindingTermination;
|
|
|
13
16
|
})(ZLinkActorSessionBindingTermination || (exports.ZLinkActorSessionBindingTermination = ZLinkActorSessionBindingTermination = {}));
|
|
14
17
|
class ZLinkActorSessionBindingRegistry {
|
|
15
18
|
terminalRelocationCapacity;
|
|
16
|
-
outboundCapacity;
|
|
17
19
|
sealWaitTimeoutMs;
|
|
18
20
|
errorSink;
|
|
19
21
|
lane = new state_lane_1.ZLinkStateLane();
|
|
@@ -23,24 +25,20 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
23
25
|
activeFrameWaiters = new Map();
|
|
24
26
|
relocations = new Map();
|
|
25
27
|
terminalRelocations = new Map();
|
|
26
|
-
constructor(terminalRelocationCapacity =
|
|
28
|
+
constructor(terminalRelocationCapacity = exports.DEFAULT_TERMINAL_RELOCATION_CAPACITY,
|
|
27
29
|
// Spec 06 — SessionRelocationSealTimeout bounds how long a session
|
|
28
30
|
// relocation seal may hold ingress (default 3,000 ms, finite only).
|
|
29
31
|
// Every wait on the seal (accept paths) and on active-frame drain
|
|
30
32
|
// (the sealing side) must observe that bound; an unbounded wait here
|
|
31
33
|
// turns a lost control or a lifecycle interlock into a silent stall
|
|
32
34
|
// (spec 48:205 — transport/deadline limits apply during relocation).
|
|
33
|
-
sealWaitTimeoutMs =
|
|
35
|
+
sealWaitTimeoutMs = Options_1.zlinkDefaultLocationOptions.sessionRelocationSealTimeoutMs, errorSink) {
|
|
34
36
|
this.terminalRelocationCapacity = terminalRelocationCapacity;
|
|
35
|
-
this.outboundCapacity = outboundCapacity;
|
|
36
37
|
this.sealWaitTimeoutMs = sealWaitTimeoutMs;
|
|
37
38
|
this.errorSink = errorSink;
|
|
38
39
|
if (!Number.isSafeInteger(terminalRelocationCapacity) || terminalRelocationCapacity <= 0) {
|
|
39
40
|
throw new RangeError('Session relocation terminal capacity must be a positive safe integer.');
|
|
40
41
|
}
|
|
41
|
-
if (!Number.isSafeInteger(outboundCapacity) || outboundCapacity <= 0) {
|
|
42
|
-
throw new RangeError('Session relocation outbound capacity must be a positive safe integer.');
|
|
43
|
-
}
|
|
44
42
|
if (!Number.isSafeInteger(sealWaitTimeoutMs) || sealWaitTimeoutMs <= 0) {
|
|
45
43
|
throw new RangeError('Session relocation seal timeout must be a positive safe integer.');
|
|
46
44
|
}
|
|
@@ -48,7 +46,7 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
48
46
|
async bind(context, actor, bindingToken, authorityFence, sessionIdentity, commitActor) {
|
|
49
47
|
await this.lane.run(() => this.commitCore(undefined, context, actor, bindingToken, authorityFence, sessionIdentity, commitActor));
|
|
50
48
|
}
|
|
51
|
-
|
|
49
|
+
commitCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity, commitActor) {
|
|
52
50
|
const current = this.routes.get(actor.actorId);
|
|
53
51
|
if (current !== previous) {
|
|
54
52
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${actor.actorId}' session binding changed before route commit.`, true);
|
|
@@ -75,7 +73,17 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
75
73
|
}
|
|
76
74
|
}
|
|
77
75
|
if (!sameBinding && actorSlot !== undefined) {
|
|
78
|
-
|
|
76
|
+
// Session–Actor binding §5-2: `$zlink.actor.bound` enters the ordered
|
|
77
|
+
// STREAM queue before the slot is published; transport completion is
|
|
78
|
+
// not awaited inside the state lane (execution gate).
|
|
79
|
+
void context
|
|
80
|
+
.actorSlotControls.enqueueBound(actorSlot, actor.actorId)
|
|
81
|
+
.catch(async (error) => {
|
|
82
|
+
this.errorSink?.()?.reportRuntimeTaskException('session actor bound', error);
|
|
83
|
+
// The client never learned the slot, so the binding ends through
|
|
84
|
+
// the one unbind path; no `$zlink.actor.unbound` follows.
|
|
85
|
+
await this.unbind(actor.actorId, context, bindingToken, ZLinkActorSessionBindingTermination.PhysicalDisconnect).catch((unbindError) => this.errorSink?.()?.reportRuntimeTaskException('session actor bound', unbindError));
|
|
86
|
+
});
|
|
79
87
|
}
|
|
80
88
|
}
|
|
81
89
|
catch (error) {
|
|
@@ -109,14 +117,14 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
109
117
|
async replaceAndReleaseSeal(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity, commitActor) {
|
|
110
118
|
await this.lane.run(() => this.replaceAndReleaseSealCore(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity, commitActor));
|
|
111
119
|
}
|
|
112
|
-
|
|
120
|
+
replaceAndReleaseSealCore(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity, commitActor) {
|
|
113
121
|
if (previous.sealId !== sealId) {
|
|
114
122
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actor.actorId}' route switch did not match its relocation seal.`, true);
|
|
115
123
|
}
|
|
116
124
|
// JavaScript cannot interleave another ingress turn between these two
|
|
117
125
|
// synchronous mutations. The replacement preserves the seal, then the
|
|
118
126
|
// exact release publishes the route to held ingress as one owner turn.
|
|
119
|
-
|
|
127
|
+
this.commitCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity, commitActor);
|
|
120
128
|
if (!this.abortSealCore(actor.actorId, sealId)) {
|
|
121
129
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actor.actorId}' route switch lost its relocation seal.`, true);
|
|
122
130
|
}
|
|
@@ -130,6 +138,17 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
130
138
|
async route(actorId) {
|
|
131
139
|
return await this.lane.run(() => this.routeCore(actorId));
|
|
132
140
|
}
|
|
141
|
+
/** Selects the route only when it is the exact Session binding (§8.1 validation values). */
|
|
142
|
+
async routeForSessionBinding(actorId, sessionRid, bindingGeneration) {
|
|
143
|
+
return await this.lane.run(() => {
|
|
144
|
+
const route = this.routeCore(actorId);
|
|
145
|
+
const generation = route?.actor.ref.bindingGeneration;
|
|
146
|
+
return route?.sessionIdentity === sessionRid &&
|
|
147
|
+
(bindingGeneration === undefined || generation === bindingGeneration)
|
|
148
|
+
? route
|
|
149
|
+
: undefined;
|
|
150
|
+
});
|
|
151
|
+
}
|
|
133
152
|
routeCore(actorId) {
|
|
134
153
|
return this.routes.get(actorId);
|
|
135
154
|
}
|
|
@@ -144,9 +163,13 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
144
163
|
return Object.freeze({ context: route.context });
|
|
145
164
|
}
|
|
146
165
|
async unbind(actorId, context, bindingToken, termination = ZLinkActorSessionBindingTermination.BindingEnd) {
|
|
147
|
-
await this.lane.run(() =>
|
|
166
|
+
const { submission } = await this.lane.run(() => ({
|
|
167
|
+
submission: this.unbindCore(actorId, context, bindingToken, termination)
|
|
168
|
+
}));
|
|
169
|
+
await submission;
|
|
148
170
|
}
|
|
149
|
-
|
|
171
|
+
/** Fixes the unbind order in the lane; the caller awaits transport completion outside it. */
|
|
172
|
+
unbindCore(actorId, context, bindingToken, termination) {
|
|
150
173
|
const route = this.routes.get(actorId);
|
|
151
174
|
if (route === undefined || route.context !== context || route.bindingToken !== bindingToken) {
|
|
152
175
|
return;
|
|
@@ -155,29 +178,33 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
155
178
|
context.unbindLocal(actorId, bindingToken);
|
|
156
179
|
this.rejectSealWaiters(actorId, new Error(`Actor '${actorId}' session binding was removed while ingress was held.`));
|
|
157
180
|
this.rejectActiveFrameWaiters(actorId, new Error(`Actor '${actorId}' session binding was removed while accepted frames were active.`));
|
|
158
|
-
this.clearRouteRelocation(actorId, route
|
|
181
|
+
this.clearRouteRelocation(actorId, route);
|
|
159
182
|
if (termination === ZLinkActorSessionBindingTermination.BindingEnd &&
|
|
160
183
|
route.actorSlot !== undefined) {
|
|
161
|
-
|
|
184
|
+
return context.actorSlotControls?.enqueueUnbound(route.actorSlot);
|
|
162
185
|
}
|
|
186
|
+
return undefined;
|
|
163
187
|
}
|
|
164
188
|
async unbindActor(actorId) {
|
|
165
|
-
await this.lane.run(() =>
|
|
189
|
+
const { submission } = await this.lane.run(() => ({
|
|
190
|
+
submission: this.unbindActorCore(actorId)
|
|
191
|
+
}));
|
|
192
|
+
await submission;
|
|
166
193
|
}
|
|
167
|
-
|
|
194
|
+
unbindActorCore(actorId) {
|
|
168
195
|
const route = this.routes.get(actorId);
|
|
169
196
|
if (route === undefined) {
|
|
170
|
-
return;
|
|
197
|
+
return undefined;
|
|
171
198
|
}
|
|
172
|
-
|
|
199
|
+
return this.unbindCore(actorId, route.context, route.bindingToken, ZLinkActorSessionBindingTermination.BindingEnd);
|
|
173
200
|
}
|
|
174
201
|
async cleanup(context) {
|
|
175
202
|
await this.lane.run(() => this.cleanupCore(context));
|
|
176
203
|
}
|
|
177
|
-
|
|
204
|
+
cleanupCore(context) {
|
|
178
205
|
for (const route of [...this.routes.values()]) {
|
|
179
206
|
if (route.context === context) {
|
|
180
|
-
|
|
207
|
+
this.unbindCore(route.actor.actorId, context, route.bindingToken, ZLinkActorSessionBindingTermination.PhysicalDisconnect);
|
|
181
208
|
}
|
|
182
209
|
}
|
|
183
210
|
}
|
|
@@ -213,6 +240,25 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
213
240
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actorId}' session ingress is sealed for relocation.`, true);
|
|
214
241
|
}
|
|
215
242
|
}
|
|
243
|
+
async acceptOneWay(actorId, bindingToken, prepare) {
|
|
244
|
+
return await this.lane.run(() => {
|
|
245
|
+
const route = this.requireRouteCore(actorId);
|
|
246
|
+
this.requireCurrentTokenCore(actorId, bindingToken);
|
|
247
|
+
const queue = this.relocations.get(actorId);
|
|
248
|
+
if (queue === undefined ||
|
|
249
|
+
(route.sealId === undefined &&
|
|
250
|
+
queue.ingress.length === 0 &&
|
|
251
|
+
queue.ingressDrain === undefined))
|
|
252
|
+
return false;
|
|
253
|
+
queue.ingress.push({
|
|
254
|
+
...prepare(),
|
|
255
|
+
sealId: route.sealId
|
|
256
|
+
});
|
|
257
|
+
if (route.sealId === undefined)
|
|
258
|
+
this.startHeldOneWayDrain(actorId, queue);
|
|
259
|
+
return true;
|
|
260
|
+
});
|
|
261
|
+
}
|
|
216
262
|
/**
|
|
217
263
|
* Holds Session ingress accepted after a relocation seal until the target
|
|
218
264
|
* route is published and the seal is released. The caller keeps the
|
|
@@ -349,6 +395,9 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
349
395
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${actorId}' session route seal was fenced by its binding identity.`, true);
|
|
350
396
|
}
|
|
351
397
|
route.sealId = sealId;
|
|
398
|
+
if (!this.relocations.has(actorId)) {
|
|
399
|
+
this.relocations.set(actorId, { actorId, seals: new Map(), ingress: [] });
|
|
400
|
+
}
|
|
352
401
|
// A pre-seal REQUEST is captured as part of installing command 42. Its
|
|
353
402
|
// Session frame no longer gates the seal; its single submission attempt
|
|
354
403
|
// and terminal continue under the request admission state above.
|
|
@@ -397,13 +446,7 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
397
446
|
resolveTerminal = resolve;
|
|
398
447
|
});
|
|
399
448
|
const ready = this.waitForActiveFramesCore(claim.actorId, signal);
|
|
400
|
-
const actorQueue =
|
|
401
|
-
actorId: claim.actorId,
|
|
402
|
-
seals: new Map(),
|
|
403
|
-
outbound: [],
|
|
404
|
-
nextArrivalOrder: 1n,
|
|
405
|
-
outboundCount: 0
|
|
406
|
-
};
|
|
449
|
+
const actorQueue = this.relocations.get(claim.actorId);
|
|
407
450
|
const state = {
|
|
408
451
|
...claim,
|
|
409
452
|
phase: 'sealed',
|
|
@@ -422,75 +465,6 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
422
465
|
relocationSnapshotCore(actorId, sealId) {
|
|
423
466
|
return this.relocations.get(actorId)?.seals.get(sealId);
|
|
424
467
|
}
|
|
425
|
-
async retainRelocationOutbound(actorId, operation, sealId) {
|
|
426
|
-
return await this.lane.run(() => this.retainRelocationOutboundCorePublic(actorId, operation, sealId));
|
|
427
|
-
}
|
|
428
|
-
retainRelocationOutboundCorePublic(actorId, operation, sealId) {
|
|
429
|
-
if (sealId !== undefined) {
|
|
430
|
-
const queue = this.relocations.get(actorId);
|
|
431
|
-
const state = queue?.seals.get(sealId);
|
|
432
|
-
if (queue === undefined ||
|
|
433
|
-
state === undefined ||
|
|
434
|
-
(queue.activeSealId !== sealId &&
|
|
435
|
-
!(queue.activeSealId === undefined && state.phase === 'terminal'))) {
|
|
436
|
-
failRetainedOutbound(operation, new Error(`Actor '${actorId}' Session outbound did not match its exact relocation seal.`));
|
|
437
|
-
return 'rejected';
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
return this.retainRelocationOutboundCore(actorId, operation);
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* Session–Actor binding §8.1: the Session owner holds a push only while the
|
|
444
|
-
* binding's relocation seal is open, and keeps it behind earlier held pushes.
|
|
445
|
-
* Whether the push names the current binding was decided once by the Session
|
|
446
|
-
* owner's binding record before this call.
|
|
447
|
-
*/
|
|
448
|
-
retainRelocationOutboundCore(actorId, operation) {
|
|
449
|
-
const queue = this.relocations.get(actorId);
|
|
450
|
-
const state = queue?.activeSealId === undefined ? undefined : queue.seals.get(queue.activeSealId);
|
|
451
|
-
if (queue === undefined)
|
|
452
|
-
return 'passThrough';
|
|
453
|
-
if (state === undefined || state.phase === 'applied' || state.phase === 'terminal') {
|
|
454
|
-
if (queue.drainPromise === undefined && queue.outbound.length === 0)
|
|
455
|
-
return 'passThrough';
|
|
456
|
-
if (!this.reserveOutbound(queue, operation))
|
|
457
|
-
return 'rejected';
|
|
458
|
-
queue.outbound.push({
|
|
459
|
-
operation,
|
|
460
|
-
arrivalOrder: queue.nextArrivalOrder++,
|
|
461
|
-
released: true,
|
|
462
|
-
settled: false
|
|
463
|
-
});
|
|
464
|
-
this.startOutboundDrain(queue);
|
|
465
|
-
return 'retained';
|
|
466
|
-
}
|
|
467
|
-
if (!this.reserveOutbound(queue, operation))
|
|
468
|
-
return 'rejected';
|
|
469
|
-
queue.outbound.push({
|
|
470
|
-
sealId: state.sealId,
|
|
471
|
-
operation,
|
|
472
|
-
arrivalOrder: queue.nextArrivalOrder++,
|
|
473
|
-
released: false,
|
|
474
|
-
settled: false
|
|
475
|
-
});
|
|
476
|
-
return 'retained';
|
|
477
|
-
}
|
|
478
|
-
async discardRelocationOutbound(actorId, sealId, error) {
|
|
479
|
-
await this.lane.run(() => this.discardRelocationOutboundCore(actorId, sealId, error));
|
|
480
|
-
}
|
|
481
|
-
discardRelocationOutboundCore(actorId, sealId, error) {
|
|
482
|
-
const queue = this.relocations.get(actorId);
|
|
483
|
-
if (queue === undefined)
|
|
484
|
-
return;
|
|
485
|
-
for (let index = queue.outbound.length - 1; index >= 0; index--) {
|
|
486
|
-
const entry = queue.outbound[index];
|
|
487
|
-
if (entry.sealId !== sealId)
|
|
488
|
-
continue;
|
|
489
|
-
queue.outbound.splice(index, 1);
|
|
490
|
-
this.failOutbound(queue, entry, error);
|
|
491
|
-
}
|
|
492
|
-
this.deleteEmptyRelocationQueue(queue);
|
|
493
|
-
}
|
|
494
468
|
async applyRelocation(actorId, sealId, applyFingerprint, commitOwnerTransition) {
|
|
495
469
|
const prepared = await this.lane.run(() => this.prepareRelocationApply(actorId, sealId, applyFingerprint));
|
|
496
470
|
if (prepared.applyPromise !== undefined) {
|
|
@@ -522,7 +496,7 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
522
496
|
if (state.applyFingerprint !== applyFingerprint || state.applyPromise === undefined) {
|
|
523
497
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actorId}' Session seal received a conflicting route apply.`, true);
|
|
524
498
|
}
|
|
525
|
-
return {
|
|
499
|
+
return { state, applyPromise: state.applyPromise };
|
|
526
500
|
}
|
|
527
501
|
state.phase = 'applying';
|
|
528
502
|
state.applyFingerprint = applyFingerprint;
|
|
@@ -534,27 +508,14 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
534
508
|
});
|
|
535
509
|
state.applyPromise = promise;
|
|
536
510
|
return {
|
|
537
|
-
queue,
|
|
538
511
|
state,
|
|
539
512
|
promise,
|
|
540
513
|
resolve,
|
|
541
|
-
reject
|
|
542
|
-
sealId
|
|
514
|
+
reject
|
|
543
515
|
};
|
|
544
516
|
}
|
|
545
|
-
/**
|
|
546
|
-
* Command 44 commit or abort releases every push held under this seal in
|
|
547
|
-
* arrival order (Session–Actor binding §8.1). The held pushes were admitted
|
|
548
|
-
* by the current binding; the route change does not judge them again.
|
|
549
|
-
*/
|
|
550
517
|
completeRelocationApply(prepared) {
|
|
551
|
-
|
|
552
|
-
for (const entry of queue.outbound) {
|
|
553
|
-
if (entry.sealId === sealId)
|
|
554
|
-
entry.released = true;
|
|
555
|
-
}
|
|
556
|
-
this.startOutboundDrain(queue);
|
|
557
|
-
state.phase = 'applied';
|
|
518
|
+
prepared.state.phase = 'applied';
|
|
558
519
|
}
|
|
559
520
|
failRelocationApply(prepared) {
|
|
560
521
|
prepared.state.phase = 'sealed';
|
|
@@ -585,7 +546,7 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
585
546
|
}
|
|
586
547
|
/**
|
|
587
548
|
* Actor-wide relocation teardown: every seal (active and terminal-retained)
|
|
588
|
-
*
|
|
549
|
+
* for `actorId` is discarded unconditionally.
|
|
589
550
|
* Reserved for paths where the Actor itself is gone or being torn down
|
|
590
551
|
* (destroy, ownership clear, relocation-seal expiry/failure) — never for a
|
|
591
552
|
* single physical route's disconnect, which must not disturb a relocation
|
|
@@ -598,9 +559,14 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
598
559
|
const queue = this.relocations.get(actorId);
|
|
599
560
|
if (queue === undefined)
|
|
600
561
|
return;
|
|
562
|
+
this.rejectSealWaiters(actorId, error, error instanceof ZLinkFrameworkException_1.ZLinkFrameworkException &&
|
|
563
|
+
error.kind === ZLinkFrameworkException_1.ZLinkFrameworkErrorKind.DeadlineExceeded
|
|
564
|
+
? 'target_closed'
|
|
565
|
+
: error instanceof ZLinkFrameworkException_1.ZLinkFrameworkException &&
|
|
566
|
+
error.kind === ZLinkFrameworkException_1.ZLinkFrameworkErrorKind.ShuttingDown
|
|
567
|
+
? 'shutdown'
|
|
568
|
+
: 'stale_target');
|
|
601
569
|
this.relocations.delete(actorId);
|
|
602
|
-
for (const entry of queue.outbound.splice(0))
|
|
603
|
-
this.failOutbound(queue, entry, error);
|
|
604
570
|
for (const state of queue.seals.values()) {
|
|
605
571
|
this.terminalRelocations.delete(state);
|
|
606
572
|
if (state.phase !== 'terminal')
|
|
@@ -611,14 +577,14 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
611
577
|
* Spec 48 §137: a relocation seal's lifecycle is independent of any single
|
|
612
578
|
* physical route's binding. Unbinding one physical route (a disconnect)
|
|
613
579
|
* must retire only the still-open (nonterminal) relocation seal that this
|
|
614
|
-
* exact route's Session owns
|
|
580
|
+
* exact route's Session owns — it
|
|
615
581
|
* must never reach into a seal that has already reached 'terminal' (its
|
|
616
582
|
* bounded retention exists precisely so a late same-seal relay can still
|
|
617
583
|
* pass on a successor route) nor into a different Session's active seal
|
|
618
584
|
* (a concurrent successor that already re-sealed before this stale route
|
|
619
585
|
* noticed the disconnect).
|
|
620
586
|
*/
|
|
621
|
-
clearRouteRelocation(actorId, route
|
|
587
|
+
clearRouteRelocation(actorId, route) {
|
|
622
588
|
const queue = this.relocations.get(actorId);
|
|
623
589
|
if (queue === undefined)
|
|
624
590
|
return;
|
|
@@ -633,13 +599,6 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
633
599
|
this.deleteEmptyRelocationQueue(queue);
|
|
634
600
|
return;
|
|
635
601
|
}
|
|
636
|
-
for (let index = queue.outbound.length - 1; index >= 0; index--) {
|
|
637
|
-
const entry = queue.outbound[index];
|
|
638
|
-
if (entry.sealId !== activeSealId)
|
|
639
|
-
continue;
|
|
640
|
-
queue.outbound.splice(index, 1);
|
|
641
|
-
this.failOutbound(queue, entry, error);
|
|
642
|
-
}
|
|
643
602
|
queue.activeSealId = undefined;
|
|
644
603
|
queue.seals.delete(activeSealId);
|
|
645
604
|
this.terminalRelocations.delete(activeState);
|
|
@@ -823,77 +782,6 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
823
782
|
for (const waiter of waiters)
|
|
824
783
|
waiter.reject(error);
|
|
825
784
|
}
|
|
826
|
-
startOutboundDrain(queue) {
|
|
827
|
-
if (queue.drainPromise !== undefined)
|
|
828
|
-
return;
|
|
829
|
-
const drain = startOutsideStateLane(async () => {
|
|
830
|
-
for (;;) {
|
|
831
|
-
const entry = await this.lane.run(() => {
|
|
832
|
-
const current = queue.outbound.at(0);
|
|
833
|
-
if (current === undefined || !current.released)
|
|
834
|
-
return undefined;
|
|
835
|
-
if (current.settled) {
|
|
836
|
-
queue.outbound.shift();
|
|
837
|
-
return null;
|
|
838
|
-
}
|
|
839
|
-
return current;
|
|
840
|
-
});
|
|
841
|
-
if (entry === undefined)
|
|
842
|
-
return;
|
|
843
|
-
if (entry === null)
|
|
844
|
-
continue;
|
|
845
|
-
try {
|
|
846
|
-
const delivered = await entry.operation.deliver();
|
|
847
|
-
await this.lane.run(() => {
|
|
848
|
-
if (delivered)
|
|
849
|
-
this.settleOutbound(queue, entry);
|
|
850
|
-
else
|
|
851
|
-
this.failOutbound(queue, entry, new Error(`Actor '${queue.actorId}' retained Session outbound delivery was rejected.`));
|
|
852
|
-
if (queue.outbound[0] === entry)
|
|
853
|
-
queue.outbound.shift();
|
|
854
|
-
});
|
|
855
|
-
}
|
|
856
|
-
catch (error) {
|
|
857
|
-
await this.lane.run(() => {
|
|
858
|
-
this.failOutbound(queue, entry, error);
|
|
859
|
-
if (queue.outbound[0] === entry)
|
|
860
|
-
queue.outbound.shift();
|
|
861
|
-
});
|
|
862
|
-
}
|
|
863
|
-
}
|
|
864
|
-
});
|
|
865
|
-
startOutsideStateLane(() => {
|
|
866
|
-
void drain.finally(async () => await this.lane.run(() => {
|
|
867
|
-
if (queue.drainPromise === drain)
|
|
868
|
-
queue.drainPromise = undefined;
|
|
869
|
-
if (queue.outbound[0]?.released === true)
|
|
870
|
-
this.startOutboundDrain(queue);
|
|
871
|
-
else
|
|
872
|
-
this.deleteEmptyRelocationQueue(queue);
|
|
873
|
-
}));
|
|
874
|
-
});
|
|
875
|
-
queue.drainPromise = drain;
|
|
876
|
-
}
|
|
877
|
-
reserveOutbound(queue, operation) {
|
|
878
|
-
if (queue.outboundCount < this.outboundCapacity) {
|
|
879
|
-
queue.outboundCount++;
|
|
880
|
-
return true;
|
|
881
|
-
}
|
|
882
|
-
failRetainedOutbound(operation, new Error(`Actor '${queue.actorId}' Session relocation outbound capacity was exhausted.`));
|
|
883
|
-
return false;
|
|
884
|
-
}
|
|
885
|
-
settleOutbound(queue, entry) {
|
|
886
|
-
if (entry.settled)
|
|
887
|
-
return;
|
|
888
|
-
entry.settled = true;
|
|
889
|
-
queue.outboundCount--;
|
|
890
|
-
}
|
|
891
|
-
failOutbound(queue, entry, error) {
|
|
892
|
-
if (entry.settled)
|
|
893
|
-
return;
|
|
894
|
-
this.settleOutbound(queue, entry);
|
|
895
|
-
failRetainedOutbound(entry.operation, error);
|
|
896
|
-
}
|
|
897
785
|
rememberTerminalRelocation(state) {
|
|
898
786
|
this.terminalRelocations.delete(state);
|
|
899
787
|
this.terminalRelocations.set(state, true);
|
|
@@ -912,13 +800,21 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
912
800
|
deleteEmptyRelocationQueue(queue) {
|
|
913
801
|
if (queue.activeSealId === undefined &&
|
|
914
802
|
queue.seals.size === 0 &&
|
|
915
|
-
queue.
|
|
916
|
-
queue.
|
|
803
|
+
queue.ingress.length === 0 &&
|
|
804
|
+
queue.ingressDrain === undefined &&
|
|
917
805
|
this.relocations.get(queue.actorId) === queue) {
|
|
918
806
|
this.relocations.delete(queue.actorId);
|
|
919
807
|
}
|
|
920
808
|
}
|
|
921
|
-
resolveSealWaiters(actorId,
|
|
809
|
+
resolveSealWaiters(actorId, sealId) {
|
|
810
|
+
const queue = this.relocations.get(actorId);
|
|
811
|
+
if (queue !== undefined) {
|
|
812
|
+
for (const entry of queue.ingress) {
|
|
813
|
+
if (entry.sealId === sealId)
|
|
814
|
+
entry.sealId = undefined;
|
|
815
|
+
}
|
|
816
|
+
this.startHeldOneWayDrain(actorId, queue);
|
|
817
|
+
}
|
|
922
818
|
const waiters = this.sealWaiters.get(actorId);
|
|
923
819
|
if (waiters === undefined)
|
|
924
820
|
return;
|
|
@@ -926,7 +822,12 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
926
822
|
for (const waiter of waiters)
|
|
927
823
|
waiter.resolve();
|
|
928
824
|
}
|
|
929
|
-
rejectSealWaiters(actorId, error) {
|
|
825
|
+
rejectSealWaiters(actorId, error, reason = 'target_closed') {
|
|
826
|
+
const queue = this.relocations.get(actorId);
|
|
827
|
+
if (queue !== undefined) {
|
|
828
|
+
for (const delivery of queue.ingress.splice(0))
|
|
829
|
+
delivery.drop(reason, error);
|
|
830
|
+
}
|
|
930
831
|
const waiters = this.sealWaiters.get(actorId);
|
|
931
832
|
if (waiters === undefined)
|
|
932
833
|
return;
|
|
@@ -934,6 +835,44 @@ class ZLinkActorSessionBindingRegistry {
|
|
|
934
835
|
for (const waiter of waiters)
|
|
935
836
|
waiter.reject(error);
|
|
936
837
|
}
|
|
838
|
+
startHeldOneWayDrain(actorId, queue) {
|
|
839
|
+
if (queue.ingressDrain !== undefined)
|
|
840
|
+
return;
|
|
841
|
+
const drain = startOutsideStateLane(async () => {
|
|
842
|
+
for (;;) {
|
|
843
|
+
const next = await this.lane.run(() => {
|
|
844
|
+
if (this.relocations.get(actorId) !== queue)
|
|
845
|
+
return undefined;
|
|
846
|
+
const first = queue.ingress.at(0);
|
|
847
|
+
if (first === undefined || first.sealId !== undefined)
|
|
848
|
+
return undefined;
|
|
849
|
+
return queue.ingress.shift();
|
|
850
|
+
});
|
|
851
|
+
if (next === undefined)
|
|
852
|
+
return;
|
|
853
|
+
try {
|
|
854
|
+
await next.deliver();
|
|
855
|
+
}
|
|
856
|
+
catch (error) {
|
|
857
|
+
next.drop('stale_target', error);
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
});
|
|
861
|
+
queue.ingressDrain = drain;
|
|
862
|
+
startOutsideStateLane(() => {
|
|
863
|
+
void drain.finally(async () => {
|
|
864
|
+
await this.lane.run(() => {
|
|
865
|
+
if (queue.ingressDrain !== drain)
|
|
866
|
+
return;
|
|
867
|
+
queue.ingressDrain = undefined;
|
|
868
|
+
if (queue.ingress.at(0)?.sealId === undefined && queue.ingress.length > 0)
|
|
869
|
+
this.startHeldOneWayDrain(actorId, queue);
|
|
870
|
+
else
|
|
871
|
+
this.deleteEmptyRelocationQueue(queue);
|
|
872
|
+
});
|
|
873
|
+
});
|
|
874
|
+
});
|
|
875
|
+
}
|
|
937
876
|
}
|
|
938
877
|
exports.ZLinkActorSessionBindingRegistry = ZLinkActorSessionBindingRegistry;
|
|
939
878
|
function assertRelocationClaim(state, claim) {
|
|
@@ -948,15 +887,6 @@ function assertRelocationClaim(state, claim) {
|
|
|
948
887
|
function startOutsideStateLane(work) {
|
|
949
888
|
return detachedStateLaneResource.runInAsyncScope(work);
|
|
950
889
|
}
|
|
951
|
-
function failRetainedOutbound(operation, error) {
|
|
952
|
-
try {
|
|
953
|
-
operation.fail(error);
|
|
954
|
-
}
|
|
955
|
-
catch {
|
|
956
|
-
// The aggregate has already removed the entry. A failure observer cannot
|
|
957
|
-
// retain or settle the same delivery a second time.
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
890
|
function assertSuccessorSessionIdentity(predecessor, successor) {
|
|
961
891
|
if (predecessor.actorGeneration !== successor.actorGeneration ||
|
|
962
892
|
predecessor.bindingGeneration !== successor.bindingGeneration ||
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import type { ActorRef } from '../../contracts';
|
|
2
|
-
import type {
|
|
3
|
-
import type { ZLinkActorSessionAuthorityFence, ZLinkActorSessionRelocationClaim, ZLinkActorSessionRelocationSnapshot, ZLinkActorSessionRetainedOutbound, ZLinkActorSessionRouteFence } from './actor-session-binding-registry';
|
|
2
|
+
import type { ZLinkActorSessionAuthorityFence, ZLinkActorSessionRelocationClaim, ZLinkActorSessionRelocationSnapshot, ZLinkActorSessionRouteFence } from './actor-session-binding-registry';
|
|
4
3
|
export interface ZLinkActorSessionBindingRuntimeOwner {
|
|
5
4
|
actorSlot(actorId: string, sessionRid: string): Promise<number | undefined>;
|
|
6
5
|
sealRelocation(claim: ZLinkActorSessionRelocationClaim, expected: ZLinkActorSessionRouteFence, signal?: AbortSignal): Promise<void>;
|
|
7
6
|
relocationSnapshot(actorId: string, sealId: string): Promise<ZLinkActorSessionRelocationSnapshot | undefined>;
|
|
8
|
-
retainRelocationOutbound(actorId: string, operation: ZLinkActorSessionRetainedOutbound, sealId?: string): Promise<ServiceSessionBindingAdmissionResult>;
|
|
9
|
-
discardRelocationOutbound(actorId: string, sealId: string, error: unknown): Promise<void>;
|
|
10
7
|
applyRelocation(actorId: string, sealId: string, applyFingerprint: string, commitOwnerTransition: () => Promise<void>): Promise<void>;
|
|
11
8
|
observeRelocationTerminal(actorId: string, sealId: string, applyFingerprint: string): Promise<void>;
|
|
12
9
|
clearRelocation(actorId: string, error: unknown): Promise<void>;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { ZLinkMessage, ZLinkMessageSerializer, ZLinkSessionActor } from '../../contracts';
|
|
2
|
-
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
3
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
4
|
-
import {
|
|
3
|
+
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
4
|
+
import { type ZLinkSubmitResult } from '../messaging/submission-result';
|
|
5
5
|
import { ZLinkActorSessionBindingRegistry } from './actor-session-binding-registry';
|
|
6
6
|
import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
|
|
7
|
+
import { type ZLinkStreamFrameHeader } from './protocol';
|
|
7
8
|
import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
|
|
8
9
|
import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
|
|
10
|
+
export declare const DEFAULT_RELAY_ACTOR_BIND_TIMEOUT_MS = 2000;
|
|
9
11
|
export interface ZLinkBoundActorRelaySenderOptions {
|
|
12
|
+
readonly dispatchErrors?: ZLinkDispatchErrorReporter;
|
|
10
13
|
readonly actorBindTimeoutMs?: number;
|
|
11
14
|
readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
12
15
|
readonly relay?: (actor: ZLinkSessionActor, header: ZLinkStreamFrameHeader, payload: Message, signal?: AbortSignal) => Promise<boolean>;
|
|
@@ -19,6 +22,7 @@ export declare class ZLinkBoundActorRelaySender {
|
|
|
19
22
|
private readonly lifecycle;
|
|
20
23
|
constructor(routes: ZLinkActorSessionBindingRegistry<DefaultZLinkSessionContext, DefaultZLinkSessionActor>, frameMessages: ZLinkStreamFrameMessageFactory, options?: ZLinkBoundActorRelaySenderOptions, lifecycle?: ZLinkActorSessionLifecycleCoordinator);
|
|
21
24
|
relay(actor: DefaultZLinkSessionActor, payload: ZLinkMessage, signal?: AbortSignal, dispatchHeader?: ZLinkStreamFrameHeader): Promise<ZLinkSubmitResult>;
|
|
25
|
+
private traceHeldDrop;
|
|
22
26
|
private relayAcceptedFrame;
|
|
23
27
|
private currentHeader;
|
|
24
28
|
private requireDispatchHeader;
|