@zlink-systems/framework 0.21.0 → 0.22.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/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -86,8 +86,11 @@ export function decodeActorMessageFollowContext(
|
|
|
86
86
|
const hopCount = input.hopCount;
|
|
87
87
|
const checksum = input.payloadChecksumSha256;
|
|
88
88
|
if (typeof request !== 'boolean') throw invalidContext('request must be boolean');
|
|
89
|
-
if (
|
|
90
|
-
|
|
89
|
+
if (
|
|
90
|
+
!Number.isSafeInteger(hopCount) ||
|
|
91
|
+
(hopCount as number) < 0 ||
|
|
92
|
+
(hopCount as number) > ZLINK_MESSAGE_FOLLOW_MAX_HOPS
|
|
93
|
+
) {
|
|
91
94
|
throw invalidContext('hopCount is outside 0..8');
|
|
92
95
|
}
|
|
93
96
|
if (typeof checksum !== 'string' || !/^[0-9a-f]{64}$/.test(checksum)) {
|
|
@@ -102,16 +105,20 @@ export function decodeActorMessageFollowContext(
|
|
|
102
105
|
if (!request && replyRouteId !== undefined) {
|
|
103
106
|
throw invalidContext('one-way context must not contain replyRouteId');
|
|
104
107
|
}
|
|
105
|
-
if (
|
|
106
|
-
|
|
107
|
-
|
|
108
|
+
if (
|
|
109
|
+
!Array.isArray(input.visitedOwners) ||
|
|
110
|
+
input.visitedOwners.some((item) => typeof item !== 'string' || item.length === 0) ||
|
|
111
|
+
input.visitedOwners.length !== (hopCount as number) + 1
|
|
112
|
+
) {
|
|
108
113
|
throw invalidContext('visitedOwners does not match hopCount');
|
|
109
114
|
}
|
|
110
115
|
const visitedOwners = [...input.visitedOwners] as string[];
|
|
111
116
|
const targetOwnerKeys = messageFollowOwnerFenceCompatibleKeys(targetOwner);
|
|
112
|
-
if (
|
|
113
|
-
|
|
114
|
-
|
|
117
|
+
if (
|
|
118
|
+
new Set(visitedOwners).size !== visitedOwners.length ||
|
|
119
|
+
!targetOwnerKeys.includes(visitedOwners[visitedOwners.length - 1]) ||
|
|
120
|
+
visitedOwners.slice(0, -1).some((key) => targetOwnerKeys.includes(key))
|
|
121
|
+
) {
|
|
115
122
|
throw invalidContext('visited owner fence chain is invalid');
|
|
116
123
|
}
|
|
117
124
|
return freezeContext({
|
|
@@ -141,8 +148,11 @@ export function advanceActorMessageFollowContext(
|
|
|
141
148
|
throw invalidContext('Message Follow reached the 8-hop limit');
|
|
142
149
|
}
|
|
143
150
|
const targetKey = messageFollowOwnerFenceKey(targetOwner);
|
|
144
|
-
if (
|
|
145
|
-
.some(
|
|
151
|
+
if (
|
|
152
|
+
messageFollowOwnerFenceCompatibleKeys(targetOwner).some((key) =>
|
|
153
|
+
context.visitedOwners.includes(key)
|
|
154
|
+
)
|
|
155
|
+
) {
|
|
146
156
|
throw invalidContext('Message Follow owner loop was detected');
|
|
147
157
|
}
|
|
148
158
|
return freezeContext({
|
|
@@ -167,8 +177,7 @@ export function attachActorMessageFollowContext(
|
|
|
167
177
|
export function actorMessageFollowContext(
|
|
168
178
|
actorRef: ActorRef | undefined
|
|
169
179
|
): ZLinkActorMessageFollowContext | undefined {
|
|
170
|
-
return (actorRef as ActorRefWithMessageFollow | undefined)
|
|
171
|
-
?.__zlinkMessageFollowContext;
|
|
180
|
+
return (actorRef as ActorRefWithMessageFollow | undefined)?.__zlinkMessageFollowContext;
|
|
172
181
|
}
|
|
173
182
|
|
|
174
183
|
export function actorMessageFollowPayloadChecksum(parts: readonly Message[]): string {
|
|
@@ -192,9 +201,7 @@ export function verifyActorMessageFollowPayload(
|
|
|
192
201
|
}
|
|
193
202
|
}
|
|
194
203
|
|
|
195
|
-
export function messageFollowOwnerFenceKey(
|
|
196
|
-
fence: ZLinkActorMessageFollowOwnerFence
|
|
197
|
-
): string {
|
|
204
|
+
export function messageFollowOwnerFenceKey(fence: ZLinkActorMessageFollowOwnerFence): string {
|
|
198
205
|
return JSON.stringify([
|
|
199
206
|
'zlink-actor-message-follow-owner-fence',
|
|
200
207
|
2,
|
|
@@ -245,10 +252,7 @@ export function ownerFence(input: {
|
|
|
245
252
|
return Object.freeze(value);
|
|
246
253
|
}
|
|
247
254
|
|
|
248
|
-
function decodeOwnerFence(
|
|
249
|
-
value: unknown,
|
|
250
|
-
name: string
|
|
251
|
-
): ZLinkActorMessageFollowOwnerFence {
|
|
255
|
+
function decodeOwnerFence(value: unknown, name: string): ZLinkActorMessageFollowOwnerFence {
|
|
252
256
|
if (typeof value !== 'object' || value === null) {
|
|
253
257
|
throw invalidContext(`${name} must be an object`);
|
|
254
258
|
}
|
|
@@ -269,9 +273,7 @@ function decodeOwnerFence(
|
|
|
269
273
|
});
|
|
270
274
|
}
|
|
271
275
|
|
|
272
|
-
function freezeContext(
|
|
273
|
-
context: ZLinkActorMessageFollowContext
|
|
274
|
-
): ZLinkActorMessageFollowContext {
|
|
276
|
+
function freezeContext(context: ZLinkActorMessageFollowContext): ZLinkActorMessageFollowContext {
|
|
275
277
|
return Object.freeze({
|
|
276
278
|
...context,
|
|
277
279
|
sourceOwner: Object.freeze({ ...context.sourceOwner }),
|
|
@@ -281,8 +283,7 @@ function freezeContext(
|
|
|
281
283
|
}
|
|
282
284
|
|
|
283
285
|
function requireId(value: unknown, name: string): string {
|
|
284
|
-
if (typeof value !== 'string' || !/^[0-9a-f]{32}$/.test(value)
|
|
285
|
-
|| /^0+$/.test(value)) {
|
|
286
|
+
if (typeof value !== 'string' || !/^[0-9a-f]{32}$/.test(value) || /^0+$/.test(value)) {
|
|
286
287
|
throw invalidContext(`${name} must be a nonzero 128-bit lowercase hex value`);
|
|
287
288
|
}
|
|
288
289
|
return value;
|
|
@@ -308,8 +309,12 @@ function requirePositiveBigInt(value: unknown, name: string): string {
|
|
|
308
309
|
|
|
309
310
|
function optionalNodeRidHex(value: unknown, name: string): string | undefined {
|
|
310
311
|
if (value === undefined) return undefined;
|
|
311
|
-
if (
|
|
312
|
-
|
|
312
|
+
if (
|
|
313
|
+
typeof value !== 'string' ||
|
|
314
|
+
value.length === 0 ||
|
|
315
|
+
value.length % 2 !== 0 ||
|
|
316
|
+
!/^[0-9a-f]+$/.test(value)
|
|
317
|
+
) {
|
|
313
318
|
throw invalidContext(`${name} must be non-empty lowercase hexadecimal bytes`);
|
|
314
319
|
}
|
|
315
320
|
return value;
|
|
@@ -320,18 +325,23 @@ function messageFollowOwnerFenceCompatibleKeys(
|
|
|
320
325
|
): readonly string[] {
|
|
321
326
|
const canonical = messageFollowOwnerFenceKey(fence);
|
|
322
327
|
const textHex = encodeRoutingIdStorageHex(fence.nodeRid);
|
|
323
|
-
if (
|
|
324
|
-
|
|
325
|
-
|
|
328
|
+
if (
|
|
329
|
+
fence.nodeRid.includes('\u0000') ||
|
|
330
|
+
fence.ownerId.includes('\u0000') ||
|
|
331
|
+
(fence.nodeRidHex !== undefined && fence.nodeRidHex !== textHex)
|
|
332
|
+
) {
|
|
326
333
|
return [canonical];
|
|
327
334
|
}
|
|
328
|
-
return [
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
+
return [
|
|
336
|
+
canonical,
|
|
337
|
+
[
|
|
338
|
+
fence.nodeRid,
|
|
339
|
+
fence.nodeGeneration,
|
|
340
|
+
fence.ownerId,
|
|
341
|
+
fence.ownerLeaseGeneration,
|
|
342
|
+
fence.authorityOwnerGeneration
|
|
343
|
+
].join('\u0000')
|
|
344
|
+
];
|
|
335
345
|
}
|
|
336
346
|
|
|
337
347
|
function optionalPositiveSafeInteger(value: unknown, name: string): number | undefined {
|
|
@@ -8,19 +8,22 @@ import {
|
|
|
8
8
|
} from './actor-message-follow-context';
|
|
9
9
|
|
|
10
10
|
export const ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET = '__zlink.actor.packet.relay';
|
|
11
|
-
export const ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET =
|
|
11
|
+
export const ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET =
|
|
12
|
+
'zlink.framework.actor.session_disconnected';
|
|
12
13
|
export const ZLINK_REMOTE_ACTOR_SESSION_BIND_PACKET = 'framework.internal.actor-session-bind';
|
|
13
14
|
|
|
14
15
|
export function encodeRemoteActorSessionBinding(input: {
|
|
15
16
|
readonly sessionNodeRid: RoutingId;
|
|
16
17
|
readonly sessionRid: RoutingId;
|
|
17
18
|
}): Uint8Array {
|
|
18
|
-
return Buffer.from(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
return Buffer.from(
|
|
20
|
+
JSON.stringify({
|
|
21
|
+
sessionNodeRid: String(input.sessionNodeRid),
|
|
22
|
+
sessionNodeRidHex: routingIdWireHex(input.sessionNodeRid),
|
|
23
|
+
sessionRid: String(input.sessionRid),
|
|
24
|
+
sessionRidHex: routingIdWireHex(input.sessionRid)
|
|
25
|
+
})
|
|
26
|
+
);
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
export function decodeRemoteActorSessionBinding(payload: Uint8Array): {
|
|
@@ -57,18 +60,23 @@ export function encodeRemoteActorPacketRelayPayload(input: {
|
|
|
57
60
|
boundSessionTargetNodeRid: input.boundSessionTargetNodeRid,
|
|
58
61
|
boundSessionSpotId: input.boundSessionSpotId,
|
|
59
62
|
actorNodeRid: input.actorRef === undefined ? undefined : String(input.actorRef.nodeRid),
|
|
60
|
-
actorNodeRidHex:
|
|
61
|
-
? undefined
|
|
62
|
-
: routingIdWireHex(input.actorRef.nodeRid),
|
|
63
|
+
actorNodeRidHex:
|
|
64
|
+
input.actorRef === undefined ? undefined : routingIdWireHex(input.actorRef.nodeRid),
|
|
63
65
|
actorGeneration: input.actorRef?.objectGeneration.toString(),
|
|
64
|
-
bindingActorNodeRid:
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
bindingActorNodeRid:
|
|
67
|
+
input.bindingActorRef === undefined ? undefined : String(input.bindingActorRef.nodeRid),
|
|
68
|
+
bindingActorNodeRidHex:
|
|
69
|
+
input.bindingActorRef === undefined
|
|
70
|
+
? undefined
|
|
71
|
+
: routingIdWireHex(input.bindingActorRef.nodeRid),
|
|
68
72
|
bindingActorGeneration: input.bindingActorRef?.objectGeneration.toString(),
|
|
69
|
-
bindingGeneration: (
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
bindingGeneration: (
|
|
74
|
+
input.bindingActorRef as
|
|
75
|
+
| (ActorRef & {
|
|
76
|
+
readonly bindingGeneration?: bigint;
|
|
77
|
+
})
|
|
78
|
+
| undefined
|
|
79
|
+
)?.bindingGeneration?.toString(),
|
|
72
80
|
returnResponse: input.returnResponse,
|
|
73
81
|
messageFollowContext: input.messageFollowContext,
|
|
74
82
|
header: Buffer.from(input.header).toString('base64'),
|
|
@@ -127,7 +135,9 @@ export function encodeRemoteActorPacketTarget(
|
|
|
127
135
|
};
|
|
128
136
|
}
|
|
129
137
|
|
|
130
|
-
export function decodeRemoteActorPacketTarget(
|
|
138
|
+
export function decodeRemoteActorPacketTarget(
|
|
139
|
+
value: unknown
|
|
140
|
+
): ZLinkRemoteActorPacketTarget | undefined {
|
|
131
141
|
if (
|
|
132
142
|
typeof value !== 'object' ||
|
|
133
143
|
value === null ||
|
|
@@ -144,9 +154,10 @@ export function decodeRemoteActorPacketTarget(value: unknown): ZLinkRemoteActorP
|
|
|
144
154
|
(value as { targetNodeRidHex?: unknown }).targetNodeRidHex
|
|
145
155
|
),
|
|
146
156
|
spotId: requireSpotId((value as { spotId: string }).spotId),
|
|
147
|
-
spotKind:
|
|
148
|
-
|
|
149
|
-
|
|
157
|
+
spotKind:
|
|
158
|
+
(value as { spotKind?: unknown }).spotKind === ZLinkSpotKind.Entry
|
|
159
|
+
? ZLinkSpotKind.Entry
|
|
160
|
+
: ZLinkSpotKind.User,
|
|
150
161
|
targetSpotGeneration: optionalBigInt(value, 'targetSpotGeneration'),
|
|
151
162
|
targetNodeGeneration: optionalBigInt(value, 'targetNodeGeneration'),
|
|
152
163
|
authorityOwnerGeneration: optionalBigInt(value, 'authorityOwnerGeneration'),
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ActorRef,
|
|
3
|
-
RoutingId,
|
|
4
|
-
ZLinkActor,
|
|
5
|
-
ZLinkMessageSerializer
|
|
6
|
-
} from '../../contracts';
|
|
1
|
+
import type { ActorRef, RoutingId, ZLinkActor, ZLinkMessageSerializer } from '../../contracts';
|
|
7
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
8
3
|
import type { ZLinkBackendMeshNode, ZLinkMeshCompletionTable } from '../backend';
|
|
9
4
|
import type { ZLinkLocationLifecycle } from '../locations';
|
|
10
5
|
import { throwIfAborted } from '../abort';
|
|
6
|
+
import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
|
|
11
7
|
import type {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
ZLinkActorJoinCoordinator,
|
|
9
|
+
ZLinkActorJoinRuntimeResult
|
|
10
|
+
} from './actor-runtime-contracts';
|
|
15
11
|
import type { ZLinkActorSourceTransfer } from './actor-source-transfer';
|
|
16
12
|
import { ZLinkActorRuntimeState, toFrameworkRoutingId } from './actor-runtime-state';
|
|
17
13
|
import { lookupNativeActorRef } from './actor-native-lookup';
|
|
@@ -28,7 +24,11 @@ export interface ZLinkActorNativeJoinCoordinatorOptions {
|
|
|
28
24
|
readonly completionTableProvider: () => ZLinkMeshCompletionTable | undefined;
|
|
29
25
|
readonly spotRouteResolver?: ZLinkSpotRouteResolver;
|
|
30
26
|
readonly locationLifecycle?: ZLinkLocationLifecycle;
|
|
31
|
-
readonly remoteActorBinder?: (
|
|
27
|
+
readonly remoteActorBinder?: (
|
|
28
|
+
actorRef: ActorRef,
|
|
29
|
+
signal?: AbortSignal,
|
|
30
|
+
force?: boolean
|
|
31
|
+
) => Promise<void>;
|
|
32
32
|
readonly postCommitErrorReporter?: (error: unknown) => void;
|
|
33
33
|
readonly sourceTransfer?: ZLinkActorSourceTransfer;
|
|
34
34
|
readonly actorJoinRelocation?: ZLinkActorJoinRelocation;
|
|
@@ -47,22 +47,24 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
constructor(private readonly options: ZLinkActorNativeJoinCoordinatorOptions) {
|
|
50
|
-
const postCommitLocation =
|
|
51
|
-
|
|
52
|
-
: new ZLinkPostCommitActorLocation({
|
|
53
|
-
lifecycle: options.locationLifecycle,
|
|
54
|
-
reportError: options.postCommitErrorReporter,
|
|
55
|
-
signal: options.shutdownSignal
|
|
56
|
-
});
|
|
57
|
-
this.localJoin = new ZLinkLocalNativeActorJoin({
|
|
58
|
-
postCommitLocation,
|
|
59
|
-
postCommitBinder: options.remoteActorBinder === undefined
|
|
50
|
+
const postCommitLocation =
|
|
51
|
+
options.locationLifecycle === undefined
|
|
60
52
|
? undefined
|
|
61
|
-
: new
|
|
62
|
-
|
|
53
|
+
: new ZLinkPostCommitActorLocation({
|
|
54
|
+
lifecycle: options.locationLifecycle,
|
|
63
55
|
reportError: options.postCommitErrorReporter,
|
|
64
56
|
signal: options.shutdownSignal
|
|
65
|
-
})
|
|
57
|
+
});
|
|
58
|
+
this.localJoin = new ZLinkLocalNativeActorJoin({
|
|
59
|
+
postCommitLocation,
|
|
60
|
+
postCommitBinder:
|
|
61
|
+
options.remoteActorBinder === undefined
|
|
62
|
+
? undefined
|
|
63
|
+
: new ZLinkPostCommitActorBinder({
|
|
64
|
+
bind: (actorRef, force) => options.remoteActorBinder!(actorRef, undefined, force),
|
|
65
|
+
reportError: options.postCommitErrorReporter,
|
|
66
|
+
signal: options.shutdownSignal
|
|
67
|
+
}),
|
|
66
68
|
completionTableProvider: options.completionTableProvider,
|
|
67
69
|
actorJoinRelocation: options.actorJoinRelocation,
|
|
68
70
|
messageSerializers: options.messageSerializers
|
|
@@ -104,7 +106,10 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
|
|
|
104
106
|
): Promise<ZLinkActorJoinRuntimeResult<Message>> {
|
|
105
107
|
throwIfAborted(signal);
|
|
106
108
|
const node = this.node();
|
|
107
|
-
const actorRef =
|
|
109
|
+
const actorRef =
|
|
110
|
+
state.nativeActorRef ??
|
|
111
|
+
lookupNativeActorRef(node, actor.context.actorId) ??
|
|
112
|
+
node.createActor(actor.context.actorId);
|
|
108
113
|
state.setNativeActorRef(actorRef as never);
|
|
109
114
|
let target: Awaited<ReturnType<ZLinkSpotRouteResolver['resolve']>> | undefined;
|
|
110
115
|
target = await this.options.spotRouteResolver?.resolve(spotId, signal);
|
|
@@ -121,13 +126,7 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
|
|
|
121
126
|
signal,
|
|
122
127
|
completionOperationId
|
|
123
128
|
);
|
|
124
|
-
return this.withDeferredJoinFinalizer(
|
|
125
|
-
actor,
|
|
126
|
-
state,
|
|
127
|
-
target,
|
|
128
|
-
result,
|
|
129
|
-
completionOperationId
|
|
130
|
-
);
|
|
129
|
+
return this.withDeferredJoinFinalizer(actor, state, target, result, completionOperationId);
|
|
131
130
|
}
|
|
132
131
|
|
|
133
132
|
async joinEntrySpot(
|
|
@@ -141,21 +140,26 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
|
|
|
141
140
|
): Promise<ZLinkActorJoinRuntimeResult<Message>> {
|
|
142
141
|
throwIfAborted(signal);
|
|
143
142
|
const node = this.node();
|
|
144
|
-
const actorRef =
|
|
143
|
+
const actorRef =
|
|
144
|
+
state.nativeActorRef ??
|
|
145
|
+
lookupNativeActorRef(node, actor.context.actorId) ??
|
|
146
|
+
node.createActor(actor.context.actorId);
|
|
145
147
|
state.setNativeActorRef(actorRef as never);
|
|
146
148
|
const meshName = state.meshName ?? actor.context.meshName;
|
|
147
149
|
const entrySpotId = this.options.entrySpotIdProvider?.(meshName);
|
|
148
150
|
let resolvedTarget: Awaited<ReturnType<ZLinkSpotRouteResolver['resolve']>> | undefined;
|
|
149
|
-
resolvedTarget =
|
|
150
|
-
|
|
151
|
-
|
|
151
|
+
resolvedTarget =
|
|
152
|
+
entrySpotId === undefined
|
|
153
|
+
? undefined
|
|
154
|
+
: await this.options.spotRouteResolver?.resolve(entrySpotId, signal);
|
|
152
155
|
// The caller may carry the Entry node from the previous membership.
|
|
153
156
|
// Entry placement can change while the Actor is in a User Spot, so the
|
|
154
157
|
// current authority route is the source of truth whenever it is available.
|
|
155
|
-
const selectedNodeRid =
|
|
156
|
-
??
|
|
157
|
-
??
|
|
158
|
-
??
|
|
158
|
+
const selectedNodeRid =
|
|
159
|
+
resolvedTarget?.targetNodeRid ??
|
|
160
|
+
nodeRid ??
|
|
161
|
+
state.entryNodeRid ??
|
|
162
|
+
toFrameworkRoutingId(node.status().routingId);
|
|
159
163
|
const target = resolvedTarget;
|
|
160
164
|
const result = await this.localJoin.joinEntrySpot(
|
|
161
165
|
node,
|
|
@@ -169,13 +173,7 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
|
|
|
169
173
|
signal,
|
|
170
174
|
completionOperationId
|
|
171
175
|
);
|
|
172
|
-
return this.withDeferredJoinFinalizer(
|
|
173
|
-
actor,
|
|
174
|
-
state,
|
|
175
|
-
target,
|
|
176
|
-
result,
|
|
177
|
-
completionOperationId
|
|
178
|
-
);
|
|
176
|
+
return this.withDeferredJoinFinalizer(actor, state, target, result, completionOperationId);
|
|
179
177
|
}
|
|
180
178
|
|
|
181
179
|
private withDeferredJoinFinalizer(
|
|
@@ -205,9 +203,7 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
|
|
|
205
203
|
}
|
|
206
204
|
|
|
207
205
|
private node(): ZLinkBackendMeshNode {
|
|
208
|
-
return typeof this.options.node === 'function'
|
|
209
|
-
? this.options.node()
|
|
210
|
-
: this.options.node;
|
|
206
|
+
return typeof this.options.node === 'function' ? this.options.node() : this.options.node;
|
|
211
207
|
}
|
|
212
208
|
}
|
|
213
209
|
|
|
@@ -216,11 +212,11 @@ function installResolvedSpotRoute(
|
|
|
216
212
|
target: Awaited<ReturnType<ZLinkSpotRouteResolver['resolve']>> | undefined
|
|
217
213
|
): void {
|
|
218
214
|
if (
|
|
219
|
-
target?.targetSpotGeneration === undefined
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
215
|
+
target?.targetSpotGeneration === undefined ||
|
|
216
|
+
target.targetNodeGeneration === undefined ||
|
|
217
|
+
target.authorityOwnerGeneration === undefined ||
|
|
218
|
+
target.ownerLeaseGeneration === undefined ||
|
|
219
|
+
target.authorityStoreVersion === undefined
|
|
224
220
|
) {
|
|
225
221
|
return;
|
|
226
222
|
}
|
|
@@ -2,8 +2,7 @@ import type { RoutingId, SpotId } from '../../contracts';
|
|
|
2
2
|
import { decodeRoutingId } from '../routing-id';
|
|
3
3
|
|
|
4
4
|
export const ZLINK_REMOTE_ACTOR_JOIN_PACKET = '__zlink.actor.join_spot.request';
|
|
5
|
-
export const ZLINK_REMOTE_ACTOR_SOURCE_LEAVE_TERMINAL =
|
|
6
|
-
'__zlink.actor.source_leave.terminal';
|
|
5
|
+
export const ZLINK_REMOTE_ACTOR_SOURCE_LEAVE_TERMINAL = '__zlink.actor.source_leave.terminal';
|
|
7
6
|
export const REMOTE_ACTOR_JOIN_PACKET = ZLINK_REMOTE_ACTOR_JOIN_PACKET;
|
|
8
7
|
export const REMOTE_ACTOR_JOIN_ADMISSION = 'admission';
|
|
9
8
|
export const REMOTE_ACTOR_JOIN_COMMIT = 'commit';
|
|
@@ -30,13 +29,12 @@ export function decodeRemoteActorSourceLeaveTerminal(
|
|
|
30
29
|
return undefined;
|
|
31
30
|
}
|
|
32
31
|
if (
|
|
33
|
-
typeof decoded !== 'object'
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|| typeof (decoded as { succeeded?: unknown }).succeeded !== 'boolean'
|
|
32
|
+
typeof decoded !== 'object' ||
|
|
33
|
+
decoded === null ||
|
|
34
|
+
(decoded as { packetName?: unknown }).packetName !== ZLINK_REMOTE_ACTOR_SOURCE_LEAVE_TERMINAL ||
|
|
35
|
+
typeof (decoded as { transferId?: unknown }).transferId !== 'string' ||
|
|
36
|
+
typeof (decoded as { actorId?: unknown }).actorId !== 'string' ||
|
|
37
|
+
typeof (decoded as { succeeded?: unknown }).succeeded !== 'boolean'
|
|
40
38
|
) {
|
|
41
39
|
return undefined;
|
|
42
40
|
}
|
|
@@ -123,10 +121,8 @@ export function decodeRemoteActorJoinPayload(payload: unknown): {
|
|
|
123
121
|
),
|
|
124
122
|
actorGeneration: (payload as { actorGeneration: string }).actorGeneration,
|
|
125
123
|
actorNodeGeneration: optionalString(payload, 'actorNodeGeneration'),
|
|
126
|
-
expectedAuthorityOwnerGeneration:
|
|
127
|
-
|
|
128
|
-
expectedOwnerLeaseGeneration:
|
|
129
|
-
optionalString(payload, 'expectedOwnerLeaseGeneration'),
|
|
124
|
+
expectedAuthorityOwnerGeneration: optionalString(payload, 'expectedAuthorityOwnerGeneration'),
|
|
125
|
+
expectedOwnerLeaseGeneration: optionalString(payload, 'expectedOwnerLeaseGeneration'),
|
|
130
126
|
sourceSpotId: optionalSpotId(payload, 'sourceSpotId'),
|
|
131
127
|
routerChannelId: optionalString(payload, 'routerChannelId'),
|
|
132
128
|
boundSessionRouterChannelId: optionalString(payload, 'boundSessionRouterChannelId'),
|
|
@@ -41,13 +41,21 @@ export interface ZLinkActorRoutedJoinTransport {
|
|
|
41
41
|
requestToSpot<TReply = unknown>(
|
|
42
42
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
43
43
|
request: unknown,
|
|
44
|
-
options: {
|
|
44
|
+
options: {
|
|
45
|
+
readonly packetName?: string;
|
|
46
|
+
readonly timeoutMs?: number;
|
|
47
|
+
readonly signal?: AbortSignal;
|
|
48
|
+
}
|
|
45
49
|
): Promise<TReply>;
|
|
46
50
|
requestFromSpotToSpot?<TReply = unknown>(
|
|
47
51
|
sourceSpot: ZLinkBackendSpot,
|
|
48
52
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
49
53
|
request: unknown,
|
|
50
|
-
options: {
|
|
54
|
+
options: {
|
|
55
|
+
readonly packetName?: string;
|
|
56
|
+
readonly timeoutMs?: number;
|
|
57
|
+
readonly signal?: AbortSignal;
|
|
58
|
+
}
|
|
51
59
|
): Promise<TReply>;
|
|
52
60
|
requestRawFromSpotToSpot?(
|
|
53
61
|
sourceSpot: ZLinkBackendSpot,
|
|
@@ -8,7 +8,7 @@ import type {
|
|
|
8
8
|
ZLinkBoundSession,
|
|
9
9
|
ZLinkMessage,
|
|
10
10
|
ZLinkActorCreateResponse,
|
|
11
|
-
ZLinkMessageSerializer
|
|
11
|
+
ZLinkMessageSerializer
|
|
12
12
|
} from '../../contracts';
|
|
13
13
|
import type { Message } from '../../contracts/Common/Message';
|
|
14
14
|
import type { ZLinkBackendMeshNode, ZLinkMeshCompletionTable } from '../backend';
|
|
@@ -75,10 +75,7 @@ export interface ZLinkActorManagerOptions {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
export interface ZLinkActorRuntimeLocationLookup {
|
|
78
|
-
resolveActorRef(
|
|
79
|
-
actorId: string,
|
|
80
|
-
signal?: AbortSignal
|
|
81
|
-
): Promise<ActorRef | undefined>;
|
|
78
|
+
resolveActorRef(actorId: string, signal?: AbortSignal): Promise<ActorRef | undefined>;
|
|
82
79
|
}
|
|
83
80
|
|
|
84
81
|
export type ZLinkActorBoundSessionFactory = (actorId: string) => ZLinkBoundSession;
|