@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
|
@@ -14,9 +14,7 @@ import {
|
|
|
14
14
|
ZLinkDispatchMessageKind
|
|
15
15
|
} from '../../contracts/Dispatch/ZLinkDispatchOptions';
|
|
16
16
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
17
|
-
import type {
|
|
18
|
-
ZLinkBackendReceived as BackendReceived
|
|
19
|
-
} from '../backend/runtime-values';
|
|
17
|
+
import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
|
|
20
18
|
import type { Message } from '../../contracts/Common/Message';
|
|
21
19
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
22
20
|
import {
|
|
@@ -41,11 +39,7 @@ import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
|
41
39
|
import type { ZLinkApplicationWorkClaim } from '../admission';
|
|
42
40
|
import { zlinkMetadataByteLength, zlinkSerialWorkOptions } from '../execution/serial-work-size';
|
|
43
41
|
import { REMOTE_ACTOR_JOIN_PACKET } from './spot-remote-codec';
|
|
44
|
-
import {
|
|
45
|
-
appendRouteReplyParts,
|
|
46
|
-
hasReplyToken,
|
|
47
|
-
submitRouteReply
|
|
48
|
-
} from './spot-route-replies';
|
|
42
|
+
import { appendRouteReplyParts, hasReplyToken, submitRouteReply } from './spot-route-replies';
|
|
49
43
|
import { createInboundFlow, runWithFlow } from '../diagnostics/flow-context';
|
|
50
44
|
import {
|
|
51
45
|
ZLinkFrameworkInternalErrorKind,
|
|
@@ -115,9 +109,7 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
115
109
|
}
|
|
116
110
|
const registrations = this.options.packetHandlers.get(envelope.packetName ?? '');
|
|
117
111
|
const replyable = hasReplyToken(received.replyToken);
|
|
118
|
-
const action = replyable
|
|
119
|
-
? ZLinkDispatchErrorAction.ReplyError
|
|
120
|
-
: ZLinkDispatchErrorAction.Drop;
|
|
112
|
+
const action = replyable ? ZLinkDispatchErrorAction.ReplyError : ZLinkDispatchErrorAction.Drop;
|
|
121
113
|
if (registrations === undefined || registrations.length === 0) {
|
|
122
114
|
this.options.dispatchErrors?.report({
|
|
123
115
|
surface: ZLinkDispatchErrorSurface.SpotRoute,
|
|
@@ -136,14 +128,16 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
136
128
|
// D5: this error is generated by the framework itself, so the reply
|
|
137
129
|
// carries the framework-origin marker (never set for application
|
|
138
130
|
// handler failures).
|
|
139
|
-
submitRouteReply(
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
131
|
+
submitRouteReply(
|
|
132
|
+
appendRouteReplyParts(
|
|
133
|
+
received.reply(),
|
|
134
|
+
encodeChannelErrorReplyParts(
|
|
135
|
+
envelope.header,
|
|
136
|
+
`SPOT route handler not found: ${envelope.packetName}`,
|
|
137
|
+
FRAMEWORK_ORIGIN_REPLY_METADATA
|
|
138
|
+
)
|
|
145
139
|
)
|
|
146
|
-
)
|
|
140
|
+
);
|
|
147
141
|
}
|
|
148
142
|
return true;
|
|
149
143
|
}
|
|
@@ -158,43 +152,55 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
158
152
|
let response: unknown;
|
|
159
153
|
const applicationClaim = this.options.claimApplicationWork?.();
|
|
160
154
|
try {
|
|
161
|
-
await runWithFlow(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
155
|
+
await runWithFlow(
|
|
156
|
+
createInboundFlow(
|
|
157
|
+
envelope.header.flowId,
|
|
158
|
+
envelope.header.flowOrigin,
|
|
159
|
+
this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
160
|
+
),
|
|
161
|
+
() =>
|
|
162
|
+
this.options.serial.execute(
|
|
163
|
+
async () => {
|
|
164
|
+
const spot = this.options.getTarget();
|
|
165
|
+
// Keep the wire payload raw until this Spot has acquired its
|
|
166
|
+
// execution authority. A rejected or superseded work item must not
|
|
167
|
+
// pay the deserialization cost.
|
|
168
|
+
const payload = decodeChannelPayload(envelope, this.channelCodecs());
|
|
169
|
+
for (const registration of registrations) {
|
|
170
|
+
const handler = await resolveLifecycleHandler(
|
|
171
|
+
spot,
|
|
172
|
+
registration.handlerType as Type<
|
|
173
|
+
| ZLinkSpotPacketHandler<ZLinkSpot, unknown>
|
|
174
|
+
| ZLinkSpotRequestHandler<ZLinkSpot, unknown, unknown>
|
|
175
|
+
>,
|
|
176
|
+
this.options.providerResolver
|
|
177
|
+
);
|
|
178
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
179
|
+
response = await handler.handle(spot, payload, context);
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
zlinkSerialWorkOptions(
|
|
183
|
+
envelope.payload.byteLength,
|
|
184
|
+
zlinkMetadataByteLength(envelope.header.metadata)
|
|
185
|
+
)
|
|
186
|
+
)
|
|
187
|
+
);
|
|
185
188
|
} finally {
|
|
186
189
|
applicationClaim?.close();
|
|
187
190
|
}
|
|
188
191
|
if (replyable) {
|
|
189
|
-
submitRouteReply(
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
192
|
+
submitRouteReply(
|
|
193
|
+
appendRouteReplyParts(
|
|
194
|
+
received.reply(),
|
|
195
|
+
encodeChannelReplyParts(envelope.header, response)
|
|
196
|
+
)
|
|
197
|
+
);
|
|
193
198
|
}
|
|
194
199
|
return true;
|
|
195
200
|
} catch (error) {
|
|
196
|
-
const payloadDecodeFailed =
|
|
197
|
-
|
|
201
|
+
const payloadDecodeFailed =
|
|
202
|
+
error instanceof ZLinkFrameworkException &&
|
|
203
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed;
|
|
198
204
|
this.options.dispatchErrors?.report({
|
|
199
205
|
surface: ZLinkDispatchErrorSurface.SpotRoute,
|
|
200
206
|
messageKind: replyable ? ZLinkDispatchMessageKind.Request : ZLinkDispatchMessageKind.Send,
|
|
@@ -215,14 +221,16 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
215
221
|
// D5: only a decode failure created by the framework's own payload
|
|
216
222
|
// decoding carries the framework-origin marker; application handler
|
|
217
223
|
// failures never do.
|
|
218
|
-
submitRouteReply(
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
+
submitRouteReply(
|
|
225
|
+
appendRouteReplyParts(
|
|
226
|
+
received.reply(),
|
|
227
|
+
encodeChannelErrorReplyParts(
|
|
228
|
+
envelope.header,
|
|
229
|
+
error,
|
|
230
|
+
payloadDecodeFailed ? FRAMEWORK_ORIGIN_REPLY_METADATA : undefined
|
|
231
|
+
)
|
|
224
232
|
)
|
|
225
|
-
)
|
|
233
|
+
);
|
|
226
234
|
}
|
|
227
235
|
return true;
|
|
228
236
|
}
|
|
@@ -232,8 +240,11 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
232
240
|
received: BackendReceived,
|
|
233
241
|
envelope: ZLinkSpotDirectEnvelope
|
|
234
242
|
): Promise<void> {
|
|
235
|
-
const replyable =
|
|
236
|
-
|
|
243
|
+
const replyable =
|
|
244
|
+
envelope.kind === ZLinkChannelMessageKind.Request && hasReplyToken(received.replyToken);
|
|
245
|
+
const messageKind = replyable
|
|
246
|
+
? ZLinkDispatchMessageKind.Request
|
|
247
|
+
: ZLinkDispatchMessageKind.Send;
|
|
237
248
|
const action = replyable ? ZLinkDispatchErrorAction.ReplyError : ZLinkDispatchErrorAction.Drop;
|
|
238
249
|
const registrations = this.options.packetHandlers.get(envelope.packetName ?? '');
|
|
239
250
|
if (registrations === undefined || registrations.length === 0) {
|
|
@@ -247,39 +258,49 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
247
258
|
});
|
|
248
259
|
if (replyable) {
|
|
249
260
|
submitRouteReply(
|
|
250
|
-
received
|
|
251
|
-
.
|
|
261
|
+
received
|
|
262
|
+
.reply()
|
|
263
|
+
.message(
|
|
264
|
+
encodeSpotDirectReply(
|
|
265
|
+
false,
|
|
266
|
+
undefined,
|
|
267
|
+
`SPOT route handler not found: ${envelope.packetName}`
|
|
268
|
+
)
|
|
269
|
+
)
|
|
252
270
|
);
|
|
253
271
|
}
|
|
254
272
|
return;
|
|
255
273
|
}
|
|
256
274
|
try {
|
|
257
275
|
let response: unknown;
|
|
258
|
-
await this.options.serial.execute(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
276
|
+
await this.options.serial.execute(
|
|
277
|
+
async () => {
|
|
278
|
+
const spot = this.options.getTarget();
|
|
279
|
+
for (const registration of registrations) {
|
|
280
|
+
const handler = await resolveLifecycleHandler(
|
|
281
|
+
spot,
|
|
282
|
+
registration.handlerType as Type<
|
|
283
|
+
| ZLinkSpotPacketHandler<ZLinkSpot, unknown>
|
|
284
|
+
| ZLinkSpotRequestHandler<ZLinkSpot, unknown, unknown>
|
|
285
|
+
>,
|
|
286
|
+
this.options.providerResolver
|
|
287
|
+
);
|
|
288
|
+
releaseApplicationJobPermitBeforeHandler();
|
|
289
|
+
response = await handler.handle(spot, envelope.payload, {
|
|
290
|
+
channelName: envelope.channelName,
|
|
291
|
+
packetName: envelope.packetName!,
|
|
292
|
+
metadata: zlinkMessageMetadata(envelope.metadata),
|
|
293
|
+
correlationId: undefined
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
zlinkSerialWorkOptions(
|
|
298
|
+
received.parts[0]?.size() ?? 0,
|
|
299
|
+
zlinkMetadataByteLength(envelope.metadata)
|
|
300
|
+
)
|
|
301
|
+
);
|
|
278
302
|
if (replyable) {
|
|
279
|
-
submitRouteReply(
|
|
280
|
-
received.reply()
|
|
281
|
-
.message(encodeSpotDirectReply(true, response))
|
|
282
|
-
);
|
|
303
|
+
submitRouteReply(received.reply().message(encodeSpotDirectReply(true, response)));
|
|
283
304
|
}
|
|
284
305
|
} catch (error) {
|
|
285
306
|
this.options.dispatchErrors?.report({
|
|
@@ -293,8 +314,15 @@ export class ZLinkSpotRoutePacketDispatch {
|
|
|
293
314
|
});
|
|
294
315
|
if (replyable) {
|
|
295
316
|
submitRouteReply(
|
|
296
|
-
received
|
|
297
|
-
.
|
|
317
|
+
received
|
|
318
|
+
.reply()
|
|
319
|
+
.message(
|
|
320
|
+
encodeSpotDirectReply(
|
|
321
|
+
false,
|
|
322
|
+
undefined,
|
|
323
|
+
error instanceof Error ? error.message : String(error)
|
|
324
|
+
)
|
|
325
|
+
)
|
|
298
326
|
);
|
|
299
327
|
return;
|
|
300
328
|
}
|
|
@@ -324,16 +352,17 @@ function decodeSpotDirectEnvelope(parts: readonly Message[]): ZLinkSpotDirectEnv
|
|
|
324
352
|
};
|
|
325
353
|
if (
|
|
326
354
|
decoded.marker !== SPOT_DIRECT_ENVELOPE ||
|
|
327
|
-
(decoded.kind !== ZLinkChannelMessageKind.Request &&
|
|
355
|
+
(decoded.kind !== ZLinkChannelMessageKind.Request &&
|
|
356
|
+
decoded.kind !== ZLinkChannelMessageKind.Command) ||
|
|
328
357
|
typeof decoded.channelName !== 'string'
|
|
329
358
|
) {
|
|
330
359
|
return undefined;
|
|
331
360
|
}
|
|
332
361
|
const metadata = decoded.metadata ?? {};
|
|
333
362
|
if (
|
|
334
|
-
typeof metadata !== 'object'
|
|
335
|
-
|
|
336
|
-
|
|
363
|
+
typeof metadata !== 'object' ||
|
|
364
|
+
Array.isArray(metadata) ||
|
|
365
|
+
!Object.values(metadata).every((value) => typeof value === 'string')
|
|
337
366
|
) {
|
|
338
367
|
return undefined;
|
|
339
368
|
}
|
|
@@ -350,10 +379,14 @@ function decodeSpotDirectEnvelope(parts: readonly Message[]): ZLinkSpotDirectEnv
|
|
|
350
379
|
}
|
|
351
380
|
|
|
352
381
|
function encodeSpotDirectReply(ok: boolean, response?: unknown, error?: string): Message {
|
|
353
|
-
return RuntimeMessage.fromOwned(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
382
|
+
return RuntimeMessage.fromOwned(
|
|
383
|
+
Buffer.from(
|
|
384
|
+
JSON.stringify({
|
|
385
|
+
marker: SPOT_DIRECT_ENVELOPE,
|
|
386
|
+
ok,
|
|
387
|
+
response,
|
|
388
|
+
error
|
|
389
|
+
})
|
|
390
|
+
)
|
|
391
|
+
);
|
|
359
392
|
}
|
|
@@ -34,15 +34,11 @@ export function submitRoutePayloadReply(
|
|
|
34
34
|
payload: unknown
|
|
35
35
|
): boolean {
|
|
36
36
|
if (envelope === undefined) {
|
|
37
|
-
return submitRouteReply(
|
|
38
|
-
received.reply()
|
|
39
|
-
.message(Buffer.from(JSON.stringify(payload)))
|
|
40
|
-
);
|
|
37
|
+
return submitRouteReply(received.reply().message(Buffer.from(JSON.stringify(payload))));
|
|
41
38
|
}
|
|
42
|
-
return submitRouteReply(
|
|
43
|
-
received.reply(),
|
|
44
|
-
|
|
45
|
-
));
|
|
39
|
+
return submitRouteReply(
|
|
40
|
+
appendRouteReplyParts(received.reply(), encodeChannelReplyParts(envelope.header, payload))
|
|
41
|
+
);
|
|
46
42
|
}
|
|
47
43
|
|
|
48
44
|
export function submitSpotRouteBridgeReply(
|
|
@@ -59,15 +55,14 @@ export function submitRoutedActorJoinReply(
|
|
|
59
55
|
payload: unknown
|
|
60
56
|
): boolean {
|
|
61
57
|
if (decoded.raw) {
|
|
62
|
-
return submitRouteReply(
|
|
63
|
-
received.reply()
|
|
64
|
-
.message(Buffer.from(JSON.stringify(payload)))
|
|
65
|
-
);
|
|
58
|
+
return submitRouteReply(received.reply().message(Buffer.from(JSON.stringify(payload))));
|
|
66
59
|
}
|
|
67
|
-
return submitRouteReply(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
return submitRouteReply(
|
|
61
|
+
appendRouteReplyParts(
|
|
62
|
+
received.reply(),
|
|
63
|
+
encodeChannelReplyParts(requireRoutedActorJoinEnvelope(decoded).header, payload)
|
|
64
|
+
)
|
|
65
|
+
);
|
|
71
66
|
}
|
|
72
67
|
|
|
73
68
|
export function submitRoutedActorJoinError(
|
|
@@ -83,13 +78,15 @@ export function submitRoutedActorJoinError(
|
|
|
83
78
|
actorGeneration: '0'
|
|
84
79
|
});
|
|
85
80
|
}
|
|
86
|
-
return submitRouteReply(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
return submitRouteReply(
|
|
82
|
+
appendRouteReplyParts(
|
|
83
|
+
received.reply(),
|
|
84
|
+
encodeChannelErrorReplyParts(
|
|
85
|
+
requireRoutedActorJoinEnvelope(decoded).header,
|
|
86
|
+
error instanceof Error ? error.message : String(error)
|
|
87
|
+
)
|
|
91
88
|
)
|
|
92
|
-
)
|
|
89
|
+
);
|
|
93
90
|
}
|
|
94
91
|
|
|
95
92
|
export function appendRouteReplyParts(
|
|
@@ -120,7 +117,9 @@ function requireRoutedActorJoinEnvelope(
|
|
|
120
117
|
}
|
|
121
118
|
|
|
122
119
|
function isNativeBadAddress(error: unknown): boolean {
|
|
123
|
-
return
|
|
120
|
+
return (
|
|
121
|
+
typeof error === 'object' &&
|
|
124
122
|
error !== null &&
|
|
125
|
-
Number((error as { nativeErrno?: unknown }).nativeErrno) === 14
|
|
123
|
+
Number((error as { nativeErrno?: unknown }).nativeErrno) === 14
|
|
124
|
+
);
|
|
126
125
|
}
|
|
@@ -9,7 +9,8 @@ export interface ZLinkSpotRouteBridgeReplyPayload {
|
|
|
9
9
|
readonly actorPacketTarget?: ZLinkRemoteActorPacketTargetWire;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export function encodeSpotRouteBridgeReply(
|
|
12
|
+
export function encodeSpotRouteBridgeReply(
|
|
13
|
+
payload: ZLinkSpotRouteBridgeReplyPayload
|
|
14
|
+
): ZLinkSpotRouteBridgeReplyPayload {
|
|
13
15
|
return payload;
|
|
14
16
|
}
|
|
15
|
-
|
|
@@ -26,10 +26,7 @@ import {
|
|
|
26
26
|
type ZLinkRoutedActorTransferProvider,
|
|
27
27
|
type ZLinkRemoteActorJoinWirePayload
|
|
28
28
|
} from './spot-remote-codec';
|
|
29
|
-
import {
|
|
30
|
-
submitRoutedActorJoinError,
|
|
31
|
-
submitRoutedActorJoinReply
|
|
32
|
-
} from './spot-route-replies';
|
|
29
|
+
import { submitRoutedActorJoinError, submitRoutedActorJoinReply } from './spot-route-replies';
|
|
33
30
|
import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
34
31
|
import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
|
|
35
32
|
|
|
@@ -107,8 +104,9 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
107
104
|
const existing = this.pending.get(decoded.transferId);
|
|
108
105
|
if (existing !== undefined) {
|
|
109
106
|
this.requireMatchingTransfer(existing, decoded);
|
|
110
|
-
const reply = existing.admissionReply ?? await existing.admissionTask;
|
|
111
|
-
if (reply === undefined)
|
|
107
|
+
const reply = existing.admissionReply ?? (await existing.admissionTask);
|
|
108
|
+
if (reply === undefined)
|
|
109
|
+
throw new Error(`Remote actor transfer '${decoded.transferId}' has no admission result.`);
|
|
112
110
|
submitRoutedActorJoinReply(received, decoded, reply);
|
|
113
111
|
return;
|
|
114
112
|
}
|
|
@@ -138,8 +136,14 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
138
136
|
throw new Error('Remote actor transfer commit requires a transfer id.');
|
|
139
137
|
}
|
|
140
138
|
const pending = this.pending.get(transferId);
|
|
141
|
-
if (
|
|
142
|
-
|
|
139
|
+
if (
|
|
140
|
+
pending === undefined ||
|
|
141
|
+
pending.actorId !== decoded.actorId ||
|
|
142
|
+
pending.actorType !== decoded.actorType
|
|
143
|
+
) {
|
|
144
|
+
throw new Error(
|
|
145
|
+
`Remote actor transfer '${transferId}' does not have a matching admission.`
|
|
146
|
+
);
|
|
143
147
|
}
|
|
144
148
|
if (pending.phase === 'rejected') {
|
|
145
149
|
throw new Error(`Remote actor transfer '${transferId}' admission was rejected.`);
|
|
@@ -152,7 +156,7 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
152
156
|
if (pending.deadline !== undefined) clearTimeout(pending.deadline);
|
|
153
157
|
pending.commitTask = this.evaluateCommit(decoded, transferId, pending);
|
|
154
158
|
}
|
|
155
|
-
const commitReply = pending.commitReply ?? await pending.commitTask;
|
|
159
|
+
const commitReply = pending.commitReply ?? (await pending.commitTask);
|
|
156
160
|
submitRoutedActorJoinReply(received, decoded, commitReply);
|
|
157
161
|
} catch (error) {
|
|
158
162
|
submitRoutedActorJoinError(received, decoded, error);
|
|
@@ -167,15 +171,17 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
167
171
|
): Promise<Record<string, unknown>> {
|
|
168
172
|
try {
|
|
169
173
|
const response = await this.runJoinCallback(decoded, decoded.request);
|
|
170
|
-
const reply =
|
|
171
|
-
|
|
172
|
-
|
|
174
|
+
const reply =
|
|
175
|
+
response.reply === undefined
|
|
176
|
+
? undefined
|
|
177
|
+
: encodeFrameworkPayloadMessage(response.reply, this.options.messageSerializers);
|
|
173
178
|
try {
|
|
174
179
|
const actorRef = decoded.actorRef;
|
|
175
180
|
const admissionReply = {
|
|
176
181
|
accepted: response.accepted,
|
|
177
182
|
actorNodeRid: String(actorRef?.nodeRid ?? ''),
|
|
178
|
-
actorNodeRidHex:
|
|
183
|
+
actorNodeRidHex:
|
|
184
|
+
actorRef?.nodeRid === undefined ? undefined : encodeRoutingIdHex(actorRef.nodeRid),
|
|
179
185
|
actorId: decoded.actorId,
|
|
180
186
|
actorGeneration: (actorRef?.generation ?? 0n).toString(),
|
|
181
187
|
reply: reply?.data().toString('base64')
|
|
@@ -199,7 +205,10 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
199
205
|
pending: ZLinkPendingRoutedActorTransfer
|
|
200
206
|
): Promise<Record<string, unknown>> {
|
|
201
207
|
try {
|
|
202
|
-
if (
|
|
208
|
+
if (
|
|
209
|
+
decoded.transferState === undefined ||
|
|
210
|
+
this.options.routedActorTransferProvider === undefined
|
|
211
|
+
) {
|
|
203
212
|
throw new Error('Remote actor transfer commit cannot materialize the target actor.');
|
|
204
213
|
}
|
|
205
214
|
const { actor, actorRef } = await this.options.routedActorTransferProvider(
|
|
@@ -210,7 +219,8 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
210
219
|
decoded.actorEntryNodeRid,
|
|
211
220
|
decoded.remoteBoundSessionTarget
|
|
212
221
|
);
|
|
213
|
-
const handoffResults =
|
|
222
|
+
const handoffResults =
|
|
223
|
+
(await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog)) ?? [];
|
|
214
224
|
const commitReply = {
|
|
215
225
|
accepted: true,
|
|
216
226
|
actorNodeRid: String(actorRef.nodeRid),
|
|
@@ -258,18 +268,17 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
258
268
|
decoded: ZLinkDecodedRemoteActorJoinRequest
|
|
259
269
|
): void {
|
|
260
270
|
if (pending.actorId !== decoded.actorId || pending.actorType !== decoded.actorType) {
|
|
261
|
-
throw new Error(
|
|
271
|
+
throw new Error(
|
|
272
|
+
`Remote actor transfer '${decoded.transferId}' identity does not match its first request.`
|
|
273
|
+
);
|
|
262
274
|
}
|
|
263
275
|
}
|
|
264
276
|
|
|
265
277
|
private scheduleExpiration(transferId: string, pending: ZLinkPendingRoutedActorTransfer): void {
|
|
266
278
|
if (pending.deadline !== undefined) clearTimeout(pending.deadline);
|
|
267
|
-
pending.deadline = setTimeout(
|
|
268
|
-
()
|
|
269
|
-
|
|
270
|
-
},
|
|
271
|
-
this.options.pendingAdmissionTimeoutMs ?? 30_000
|
|
272
|
-
);
|
|
279
|
+
pending.deadline = setTimeout(() => {
|
|
280
|
+
if (this.pending.get(transferId) === pending) this.pending.delete(transferId);
|
|
281
|
+
}, this.options.pendingAdmissionTimeoutMs ?? 30_000);
|
|
273
282
|
pending.deadline.unref();
|
|
274
283
|
}
|
|
275
284
|
|
|
@@ -289,10 +298,7 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
289
298
|
}
|
|
290
299
|
try {
|
|
291
300
|
const payload = JSON.parse(parts[0].data().toString()) as ZLinkRemoteActorJoinWirePayload;
|
|
292
|
-
if (
|
|
293
|
-
payload.packetName !== REMOTE_ACTOR_JOIN_PACKET ||
|
|
294
|
-
!isRemoteActorJoinPayload(payload)
|
|
295
|
-
) {
|
|
301
|
+
if (payload.packetName !== REMOTE_ACTOR_JOIN_PACKET || !isRemoteActorJoinPayload(payload)) {
|
|
296
302
|
return undefined;
|
|
297
303
|
}
|
|
298
304
|
return decodeRemoteActorJoinPayload(
|
|
@@ -306,7 +312,11 @@ export class ZLinkSpotRoutedActorAdmission {
|
|
|
306
312
|
}
|
|
307
313
|
}
|
|
308
314
|
try {
|
|
309
|
-
const envelope = decodeChannelEnvelope(
|
|
315
|
+
const envelope = decodeChannelEnvelope(
|
|
316
|
+
parts,
|
|
317
|
+
undefined,
|
|
318
|
+
this.options.flowEnabled?.() ?? true
|
|
319
|
+
);
|
|
310
320
|
if (envelope.packetName !== REMOTE_ACTOR_JOIN_PACKET) {
|
|
311
321
|
return undefined;
|
|
312
322
|
}
|
|
@@ -6,11 +6,7 @@ import {
|
|
|
6
6
|
decodeRemoteBoundSessionResponse,
|
|
7
7
|
decodeRemoteBoundSessionSend
|
|
8
8
|
} from './spot-remote-route-codec';
|
|
9
|
-
import {
|
|
10
|
-
hasReplyToken,
|
|
11
|
-
submitRoutePayloadReply,
|
|
12
|
-
submitRouteReply
|
|
13
|
-
} from './spot-route-replies';
|
|
9
|
+
import { hasReplyToken, submitRoutePayloadReply, submitRouteReply } from './spot-route-replies';
|
|
14
10
|
import type { ZLinkActorResponseOptions } from './spot-actor-packet-dispatch';
|
|
15
11
|
import { createInboundFlow, runWithFlow } from '../diagnostics/flow-context';
|
|
16
12
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
@@ -63,14 +59,15 @@ export class ZLinkSpotRoutedBoundSessionDispatch {
|
|
|
63
59
|
boundSessionSend.flowOrigin ?? boundSessionSend.envelope?.header.flowOrigin,
|
|
64
60
|
this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
65
61
|
),
|
|
66
|
-
() =>
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
62
|
+
() =>
|
|
63
|
+
this.options.routedBoundSessionReceiver?.(
|
|
64
|
+
boundSessionSend.actorId,
|
|
65
|
+
boundSessionSend.message,
|
|
66
|
+
boundSessionSend.packetName,
|
|
67
|
+
boundSessionSend.metadata,
|
|
68
|
+
boundSessionSend.actorRef,
|
|
69
|
+
boundSessionSend.actorPacketTarget
|
|
70
|
+
)
|
|
74
71
|
);
|
|
75
72
|
if (hasReplyToken(received.replyToken)) {
|
|
76
73
|
submitRoutePayloadReply(received, boundSessionSend.envelope, { ok: true });
|
|
@@ -124,9 +121,6 @@ export class ZLinkSpotRoutedBoundSessionDispatch {
|
|
|
124
121
|
if (!hasReplyToken(received.replyToken)) {
|
|
125
122
|
return;
|
|
126
123
|
}
|
|
127
|
-
submitRouteReply(
|
|
128
|
-
received.reply()
|
|
129
|
-
.message(Buffer.from(JSON.stringify({ ok: true })))
|
|
130
|
-
);
|
|
124
|
+
submitRouteReply(received.reply().message(Buffer.from(JSON.stringify({ ok: true }))));
|
|
131
125
|
}
|
|
132
126
|
}
|
|
@@ -8,14 +8,8 @@ import type {
|
|
|
8
8
|
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
9
9
|
import type { RoutingId } from '../../contracts';
|
|
10
10
|
import type { ActorRef } from '../../contracts/Common/ActorRef';
|
|
11
|
-
import type {
|
|
12
|
-
|
|
13
|
-
ZLinkRemoteBoundSessionTarget
|
|
14
|
-
} from '../actors';
|
|
15
|
-
import type {
|
|
16
|
-
ZLinkBackendReceived,
|
|
17
|
-
ZLinkBackendSpot
|
|
18
|
-
} from '../backend/contracts';
|
|
11
|
+
import type { ZLinkRemoteActorPacketTarget, ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
12
|
+
import type { ZLinkBackendReceived, ZLinkBackendSpot } from '../backend/contracts';
|
|
19
13
|
import type { ZLinkDispatchErrorReporter } from '../channels';
|
|
20
14
|
import type { ZLinkChannelEnvelopeCodecRegistry } from '../channels/channel-envelope';
|
|
21
15
|
import { decodeRemoteActorPacketRelay } from './spot-remote-route-codec';
|
|
@@ -79,7 +73,9 @@ interface ZLinkSpotRoutedFrameDispatchOptions {
|
|
|
79
73
|
actorPacketTarget?: unknown,
|
|
80
74
|
signal?: AbortSignal
|
|
81
75
|
) => Promise<void>;
|
|
82
|
-
readonly actorPacketTargetProvider?: (
|
|
76
|
+
readonly actorPacketTargetProvider?: (
|
|
77
|
+
actorId: string
|
|
78
|
+
) => ZLinkRemoteActorPacketTarget | undefined;
|
|
83
79
|
readonly bindRemoteSession?: (
|
|
84
80
|
actor: ActorRef,
|
|
85
81
|
sourceNodeRid: RoutingId,
|
|
@@ -148,7 +144,10 @@ export class ZLinkSpotRoutedFrameDispatch {
|
|
|
148
144
|
}
|
|
149
145
|
}
|
|
150
146
|
|
|
151
|
-
async drain(
|
|
147
|
+
async drain(
|
|
148
|
+
received: ZLinkBackendReceived | undefined = undefined,
|
|
149
|
+
retryDeadlineMs = performance.now()
|
|
150
|
+
): Promise<void> {
|
|
152
151
|
if (this.routeDraining) {
|
|
153
152
|
if (received !== undefined) {
|
|
154
153
|
try {
|
|
@@ -226,7 +225,10 @@ export class ZLinkSpotRoutedFrameDispatch {
|
|
|
226
225
|
this.channelCodecs(),
|
|
227
226
|
this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
|
|
228
227
|
);
|
|
229
|
-
if (
|
|
228
|
+
if (
|
|
229
|
+
actorPacketRelay !== undefined &&
|
|
230
|
+
(await this.actorPacketRelayDispatch.dispatch(received, actorPacketRelay))
|
|
231
|
+
) {
|
|
230
232
|
return;
|
|
231
233
|
}
|
|
232
234
|
if (await this.routePacketDispatch.dispatch(received)) {
|
|
@@ -237,14 +239,15 @@ export class ZLinkSpotRoutedFrameDispatch {
|
|
|
237
239
|
}
|
|
238
240
|
|
|
239
241
|
function isRouteRecvRetryable(error: unknown): boolean {
|
|
240
|
-
return
|
|
242
|
+
return (
|
|
243
|
+
typeof error === 'object' &&
|
|
241
244
|
error !== null &&
|
|
242
|
-
[201, 202, 204].includes(Number((error as { result?: unknown }).result))
|
|
245
|
+
[201, 202, 204].includes(Number((error as { result?: unknown }).result))
|
|
246
|
+
);
|
|
243
247
|
}
|
|
244
248
|
|
|
245
249
|
function closeReceivedQuietly(received: ZLinkBackendReceived): void {
|
|
246
250
|
try {
|
|
247
251
|
received.close();
|
|
248
|
-
} catch {
|
|
249
|
-
}
|
|
252
|
+
} catch {}
|
|
250
253
|
}
|