@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
|
@@ -27,9 +27,7 @@ import { normalizeOpaqueRoutingId } from '../routing-id';
|
|
|
27
27
|
import { ZLinkConfigurationException } from '../configuration';
|
|
28
28
|
import type { ZLinkBackendSpot } from '../backend/contracts';
|
|
29
29
|
import { deliverOnSerial } from '../workers';
|
|
30
|
-
import {
|
|
31
|
-
requireZLinkYieldTurn
|
|
32
|
-
} from '../execution';
|
|
30
|
+
import { requireZLinkYieldTurn } from '../execution';
|
|
33
31
|
import { resolveFrameworkPacketName } from '../messaging/packet-name';
|
|
34
32
|
import type { ZLinkSpotRouteTarget } from './spot-routing-internal';
|
|
35
33
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
@@ -66,8 +64,8 @@ export class DefaultZLinkSpotOutbound implements ZLinkSpotOutbound {
|
|
|
66
64
|
this.channelClient = options.channelClient;
|
|
67
65
|
this.spotPublisherClient = options.spotPublisherClient;
|
|
68
66
|
this.routedTransport = options.routedTransport;
|
|
69
|
-
this.spotRouterChannelIdForMesh =
|
|
70
|
-
?? ((meshName) => meshName);
|
|
67
|
+
this.spotRouterChannelIdForMesh =
|
|
68
|
+
options.spotRouterChannelIdForMesh ?? ((meshName) => meshName);
|
|
71
69
|
this.sourceSpotProvider = options.sourceSpotProvider;
|
|
72
70
|
this.meshName = options.meshName;
|
|
73
71
|
this.addressTransport = options.addressTransport;
|
|
@@ -99,7 +97,10 @@ export class DefaultZLinkSpotOutbound implements ZLinkSpotOutbound {
|
|
|
99
97
|
requestToSpot(spotId: RoutingId, request: unknown): ZLinkSpotRequestCall;
|
|
100
98
|
/** @internal Compatibility path for an already resolved handle. */
|
|
101
99
|
requestToSpot(spot: SpotHandle, request: unknown): ZLinkRequestCall;
|
|
102
|
-
requestToSpot(
|
|
100
|
+
requestToSpot(
|
|
101
|
+
spot: RoutingId | SpotHandle,
|
|
102
|
+
request: unknown
|
|
103
|
+
): ZLinkSpotRequestCall | ZLinkRequestCall {
|
|
103
104
|
if (typeof spot !== 'object') {
|
|
104
105
|
return createAddressedSpotRequestCall(
|
|
105
106
|
this.serial,
|
|
@@ -126,7 +127,9 @@ export class DefaultZLinkSpotOutbound implements ZLinkSpotOutbound {
|
|
|
126
127
|
this.spotPublisherClient.publish(this.requireMeshName(), channelName, topic, event)
|
|
127
128
|
);
|
|
128
129
|
}
|
|
129
|
-
throw new ZLinkConfigurationException(
|
|
130
|
+
throw new ZLinkConfigurationException(
|
|
131
|
+
'Spot outbound publish requires a configured Spot publisher client.'
|
|
132
|
+
);
|
|
130
133
|
}
|
|
131
134
|
|
|
132
135
|
sendToChannel(channelName: string, message: unknown): ZLinkSendCall {
|
|
@@ -264,11 +267,7 @@ function createAddressedSpotSendCall(
|
|
|
264
267
|
selectOnce(options, 'instanceSpot');
|
|
265
268
|
options.instanceSpot = true;
|
|
266
269
|
if (instanceSpotType !== undefined) {
|
|
267
|
-
options.instanceSpotType = requireAddressValue(
|
|
268
|
-
instanceSpotType,
|
|
269
|
-
'Instance Spot type',
|
|
270
|
-
255
|
|
271
|
-
);
|
|
270
|
+
options.instanceSpotType = requireAddressValue(instanceSpotType, 'Instance Spot type', 255);
|
|
272
271
|
}
|
|
273
272
|
return this;
|
|
274
273
|
},
|
|
@@ -324,11 +323,7 @@ function createAddressedSpotRequestCall(
|
|
|
324
323
|
selectOnce(options, 'instanceSpot');
|
|
325
324
|
options.instanceSpot = true;
|
|
326
325
|
if (instanceSpotType !== undefined) {
|
|
327
|
-
options.instanceSpotType = requireAddressValue(
|
|
328
|
-
instanceSpotType,
|
|
329
|
-
'Instance Spot type',
|
|
330
|
-
255
|
|
331
|
-
);
|
|
326
|
+
options.instanceSpotType = requireAddressValue(instanceSpotType, 'Instance Spot type', 255);
|
|
332
327
|
}
|
|
333
328
|
return this;
|
|
334
329
|
},
|
|
@@ -340,7 +335,9 @@ function createAddressedSpotRequestCall(
|
|
|
340
335
|
timeout(timeoutMs: number) {
|
|
341
336
|
selectOnce(options, 'timeout');
|
|
342
337
|
if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0) {
|
|
343
|
-
throw new ZLinkConfigurationException(
|
|
338
|
+
throw new ZLinkConfigurationException(
|
|
339
|
+
'Spot request timeout must be a positive safe integer.'
|
|
340
|
+
);
|
|
344
341
|
}
|
|
345
342
|
options.timeoutMs = timeoutMs;
|
|
346
343
|
return this;
|
|
@@ -399,13 +396,11 @@ function markSubmitted(options: MutableAddressCallOptions): void {
|
|
|
399
396
|
if (options.submitted) {
|
|
400
397
|
throwAlreadySubmitted('Spot call');
|
|
401
398
|
}
|
|
402
|
-
if (
|
|
403
|
-
options.
|
|
404
|
-
|| options.initialMeshName !== undefined
|
|
405
|
-
)
|
|
406
|
-
throw new ZLinkConfigurationException(
|
|
407
|
-
'Mesh selection requires an Instance Spot intent.'
|
|
408
|
-
);
|
|
399
|
+
if (
|
|
400
|
+
!options.instanceSpot &&
|
|
401
|
+
(options.instanceSpotType !== undefined || options.initialMeshName !== undefined)
|
|
402
|
+
) {
|
|
403
|
+
throw new ZLinkConfigurationException('Mesh selection requires an Instance Spot intent.');
|
|
409
404
|
}
|
|
410
405
|
options.submitted = true;
|
|
411
406
|
}
|
|
@@ -450,7 +445,10 @@ function wrapSendCall(serial: ZLinkSpotSerialTurnExecutor, inner: ZLinkSendCall)
|
|
|
450
445
|
};
|
|
451
446
|
}
|
|
452
447
|
|
|
453
|
-
function wrapPublishCall(
|
|
448
|
+
function wrapPublishCall(
|
|
449
|
+
serial: ZLinkSpotSerialTurnExecutor,
|
|
450
|
+
inner: ZLinkPublishCall
|
|
451
|
+
): ZLinkPublishCall {
|
|
454
452
|
return {
|
|
455
453
|
metadata(key: string | ZLinkMessageMetadata, value?: string) {
|
|
456
454
|
if (typeof key === 'string') inner.metadata(key, value!);
|
|
@@ -501,8 +499,7 @@ function startRequestOnSerial<TReply>(
|
|
|
501
499
|
serial: ZLinkSpotSerialTurnExecutor,
|
|
502
500
|
begin: () => Promise<{ pending: Promise<TReply> }> | { pending: Promise<TReply> }
|
|
503
501
|
): Promise<TReply> {
|
|
504
|
-
return runInternalTransportStart(serial, begin)
|
|
505
|
-
.then((startedRequest) => startedRequest.pending);
|
|
502
|
+
return runInternalTransportStart(serial, begin).then((startedRequest) => startedRequest.pending);
|
|
506
503
|
}
|
|
507
504
|
|
|
508
505
|
/**
|
|
@@ -513,9 +510,7 @@ function runInternalTransportStart<T>(
|
|
|
513
510
|
serial: ZLinkSpotSerialTurnExecutor,
|
|
514
511
|
begin: () => Promise<T> | T
|
|
515
512
|
): Promise<T> {
|
|
516
|
-
return serial.isCurrentTurn
|
|
517
|
-
? Promise.resolve().then(begin)
|
|
518
|
-
: serial.post(begin);
|
|
513
|
+
return serial.isCurrentTurn ? Promise.resolve().then(begin) : serial.post(begin);
|
|
519
514
|
}
|
|
520
515
|
|
|
521
516
|
function wrapRoutedSpotSendCall(
|
|
@@ -540,17 +535,12 @@ function wrapRoutedSpotSendCall(
|
|
|
540
535
|
},
|
|
541
536
|
async submit(signal?: AbortSignal): Promise<void> {
|
|
542
537
|
const pending = startRequestOnSerial(serial, () => ({
|
|
543
|
-
pending: sendToSpotHandle(
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
signal,
|
|
550
|
-
spotRouterChannelIdForMesh,
|
|
551
|
-
sourceSpot: sourceSpotProvider?.()
|
|
552
|
-
}
|
|
553
|
-
)
|
|
538
|
+
pending: sendToSpotHandle(transport, spot, message, {
|
|
539
|
+
metadata,
|
|
540
|
+
signal,
|
|
541
|
+
spotRouterChannelIdForMesh,
|
|
542
|
+
sourceSpot: sourceSpotProvider?.()
|
|
543
|
+
})
|
|
554
544
|
}));
|
|
555
545
|
const result = await (serial.isCurrentTurn ? pending : deliverOnSerial(serial, pending));
|
|
556
546
|
requireOneWayCompletion(
|
|
@@ -644,10 +634,7 @@ export async function sendToSpotHandle(
|
|
|
644
634
|
): Promise<ZLinkSubmitResult> {
|
|
645
635
|
const packetName = resolveFrameworkPacketName(message, undefined, 'SPOT');
|
|
646
636
|
const sendResolved = async (resolved: ResolvedSpotHandle): Promise<ZLinkSubmitResult> => {
|
|
647
|
-
const target = spotRefToSpotRouteTarget(
|
|
648
|
-
resolved,
|
|
649
|
-
options.spotRouterChannelIdForMesh
|
|
650
|
-
);
|
|
637
|
+
const target = spotRefToSpotRouteTarget(resolved, options.spotRouterChannelIdForMesh);
|
|
651
638
|
if (options.sourceSpot !== undefined && transport.sendFromSpotToSpot !== undefined) {
|
|
652
639
|
return transport.sendFromSpotToSpot(options.sourceSpot, target, message, {
|
|
653
640
|
packetName,
|
|
@@ -718,7 +705,10 @@ export async function requestToSpotHandle<TReply = unknown>(
|
|
|
718
705
|
}
|
|
719
706
|
}
|
|
720
707
|
|
|
721
|
-
async function requireSpotRef(
|
|
708
|
+
async function requireSpotRef(
|
|
709
|
+
handle: SpotHandle,
|
|
710
|
+
signal?: AbortSignal
|
|
711
|
+
): Promise<ResolvedSpotHandle> {
|
|
722
712
|
const resolved = await resolveSpotHandle(handle, signal);
|
|
723
713
|
if (resolved === undefined) {
|
|
724
714
|
throw new ZLinkConfigurationException(`Spot '${handle.spotId}' has no live location.`);
|
|
@@ -740,20 +730,18 @@ function spotRefToSpotRouteTarget(
|
|
|
740
730
|
};
|
|
741
731
|
}
|
|
742
732
|
|
|
743
|
-
function shouldRefreshAfterRouteDisconnect(
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
&& internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RouteNotConnected;
|
|
733
|
+
function shouldRefreshAfterRouteDisconnect(target: ResolvedSpotHandle, error: unknown): boolean {
|
|
734
|
+
return (
|
|
735
|
+
target.targetNodeState === ZLinkFrameworkRuntimeState.Serving &&
|
|
736
|
+
error instanceof ZLinkFrameworkException &&
|
|
737
|
+
internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RouteNotConnected
|
|
738
|
+
);
|
|
750
739
|
}
|
|
751
740
|
|
|
752
|
-
function isShutdownTargetState(
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|| state === ZLinkFrameworkRuntimeState.Stopped;
|
|
741
|
+
function isShutdownTargetState(state: ResolvedSpotHandle['targetNodeState']): boolean {
|
|
742
|
+
return (
|
|
743
|
+
state === ZLinkFrameworkRuntimeState.Draining || state === ZLinkFrameworkRuntimeState.Stopped
|
|
744
|
+
);
|
|
757
745
|
}
|
|
758
746
|
|
|
759
747
|
function normalizeSpotRefRoutingId(routingId: RoutingId): RoutingId {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
|
|
2
|
-
import type { Message } from '../../contracts/Common/Message';
|
|
3
1
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from '../framework-errors-internal';
|
|
5
|
+
import type { Message } from '../../contracts/Common/Message';
|
|
6
|
+
import { ZLinkFrameworkException } from '../../contracts';
|
|
6
7
|
import type { ZLinkSpotPublisherClientTransport } from '../channels';
|
|
7
8
|
import type { ZLinkSubmitResult } from '../messaging/submission-result';
|
|
8
9
|
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type { ZLinkBackendActorRef } from '../backend/contracts';
|
|
2
|
-
import {
|
|
3
|
-
decodeActorMessageFollowContext,
|
|
4
|
-
type ZLinkRemoteBoundSessionTarget
|
|
5
|
-
} from '../actors';
|
|
2
|
+
import { decodeActorMessageFollowContext, type ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
6
3
|
import type { RoutingId, ZLinkActor } from '../../contracts';
|
|
7
4
|
import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
|
|
8
5
|
import type { Message } from '../../contracts/Common/Message';
|
|
@@ -75,10 +72,7 @@ export function isRemoteActorJoinPayload(
|
|
|
75
72
|
readonly actorType: string;
|
|
76
73
|
readonly request: string;
|
|
77
74
|
} {
|
|
78
|
-
return (
|
|
79
|
-
hasRemoteActorJoinIdentity(value) &&
|
|
80
|
-
typeof value.request === 'string'
|
|
81
|
-
);
|
|
75
|
+
return hasRemoteActorJoinIdentity(value) && typeof value.request === 'string';
|
|
82
76
|
}
|
|
83
77
|
|
|
84
78
|
export function decodeRemoteActorJoinPayload(
|
|
@@ -91,9 +85,8 @@ export function decodeRemoteActorJoinPayload(
|
|
|
91
85
|
raw: boolean,
|
|
92
86
|
envelope?: ReturnType<typeof decodeChannelEnvelope>
|
|
93
87
|
): ZLinkDecodedRemoteActorJoinRequest {
|
|
94
|
-
const phase =
|
|
95
|
-
? payload.phase
|
|
96
|
-
: undefined;
|
|
88
|
+
const phase =
|
|
89
|
+
payload.phase === 'admission' || payload.phase === 'commit' ? payload.phase : undefined;
|
|
97
90
|
const transferProtocol = phase !== undefined;
|
|
98
91
|
return {
|
|
99
92
|
envelope,
|
|
@@ -106,37 +99,39 @@ export function decodeRemoteActorJoinPayload(
|
|
|
106
99
|
payload.actorId,
|
|
107
100
|
payload.actorGeneration
|
|
108
101
|
),
|
|
109
|
-
expectedMembershipEpoch:
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
102
|
+
expectedMembershipEpoch:
|
|
103
|
+
typeof payload.expectedMembershipEpoch === 'string'
|
|
104
|
+
? BigInt(payload.expectedMembershipEpoch)
|
|
105
|
+
: 0n,
|
|
106
|
+
actorEntryNodeRid:
|
|
107
|
+
typeof payload.actorEntryNodeRid === 'string'
|
|
108
|
+
? decodeWireRoutingId(payload.actorEntryNodeRid, payload.actorEntryNodeRidHex)
|
|
109
|
+
: undefined,
|
|
110
|
+
actorCreateRequest:
|
|
111
|
+
typeof payload.actorCreateRequest === 'string'
|
|
112
|
+
? RuntimeMessage.from(Buffer.from(payload.actorCreateRequest, 'base64'))
|
|
113
|
+
: undefined,
|
|
118
114
|
phase,
|
|
119
115
|
transferId: typeof payload.transferId === 'string' ? payload.transferId : undefined,
|
|
120
|
-
transferAdapterKey:
|
|
121
|
-
? payload.transferAdapterKey
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
116
|
+
transferAdapterKey:
|
|
117
|
+
typeof payload.transferAdapterKey === 'string' ? payload.transferAdapterKey : undefined,
|
|
118
|
+
transferState:
|
|
119
|
+
typeof payload.transferState === 'string'
|
|
120
|
+
? RuntimeMessage.from(Buffer.from(payload.transferState, 'base64'))
|
|
121
|
+
: undefined,
|
|
126
122
|
handoffBacklog: decodeHandoffBacklog(payload.handoffBacklog),
|
|
127
123
|
remoteBoundSessionTarget: decodeRemoteBoundSessionTarget(
|
|
128
|
-
transferProtocol
|
|
124
|
+
transferProtocol
|
|
125
|
+
? payload.boundSessionRouterChannelId
|
|
126
|
+
: (payload.boundSessionRouterChannelId ?? payload.routerChannelId),
|
|
129
127
|
transferProtocol
|
|
130
128
|
? payload.boundSessionTargetNodeRid
|
|
131
|
-
: payload.boundSessionTargetNodeRid ??
|
|
132
|
-
received.routingId === null
|
|
133
|
-
? payload.actorNodeRid
|
|
134
|
-
: String(received.routingId)
|
|
135
|
-
),
|
|
129
|
+
: (payload.boundSessionTargetNodeRid ??
|
|
130
|
+
(received.routingId === null ? payload.actorNodeRid : String(received.routingId))),
|
|
136
131
|
payload.boundSessionTargetNodeRidHex,
|
|
137
132
|
transferProtocol
|
|
138
133
|
? payload.boundSessionSpotId
|
|
139
|
-
: payload.boundSessionSpotId ?? payload.sourceSpotId,
|
|
134
|
+
: (payload.boundSessionSpotId ?? payload.sourceSpotId),
|
|
140
135
|
payload.boundSessionNodeRid,
|
|
141
136
|
payload.boundSessionNodeRidHex,
|
|
142
137
|
payload.boundSessionRid,
|
|
@@ -148,9 +143,10 @@ export function decodeRemoteActorJoinPayload(
|
|
|
148
143
|
payload.boundSessionServiceWireRelocation
|
|
149
144
|
),
|
|
150
145
|
request,
|
|
151
|
-
requestContentType:
|
|
152
|
-
|
|
153
|
-
|
|
146
|
+
requestContentType:
|
|
147
|
+
typeof payload.requestContentType === 'string'
|
|
148
|
+
? payload.requestContentType
|
|
149
|
+
: 'application/json'
|
|
154
150
|
};
|
|
155
151
|
}
|
|
156
152
|
|
|
@@ -158,7 +154,8 @@ export function decodeHandoffBacklog(value: unknown): readonly ZLinkActorHandoff
|
|
|
158
154
|
if (!Array.isArray(value)) return [];
|
|
159
155
|
return value.map((entry, expectedIndex) => {
|
|
160
156
|
if (
|
|
161
|
-
typeof entry !== 'object' ||
|
|
157
|
+
typeof entry !== 'object' ||
|
|
158
|
+
entry === null ||
|
|
162
159
|
(entry as { index?: unknown }).index !== expectedIndex ||
|
|
163
160
|
typeof (entry as { header?: unknown }).header !== 'string' ||
|
|
164
161
|
typeof (entry as { payload?: unknown }).payload !== 'string' ||
|
|
@@ -167,18 +164,19 @@ export function decodeHandoffBacklog(value: unknown): readonly ZLinkActorHandoff
|
|
|
167
164
|
throw new Error('Remote actor handoff backlog is not a contiguous packet sequence.');
|
|
168
165
|
}
|
|
169
166
|
const packet = entry as ZLinkActorHandoffPacket;
|
|
170
|
-
const messageFollowContext = decodeActorMessageFollowContext(
|
|
171
|
-
packet.messageFollowContext
|
|
172
|
-
);
|
|
167
|
+
const messageFollowContext = decodeActorMessageFollowContext(packet.messageFollowContext);
|
|
173
168
|
const source = packet.source;
|
|
174
|
-
if (
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
169
|
+
if (
|
|
170
|
+
messageFollowContext === undefined ||
|
|
171
|
+
(packet.returnResponse &&
|
|
172
|
+
(source === undefined ||
|
|
173
|
+
source.ownerId.length === 0 ||
|
|
174
|
+
BigInt(source.ownerLeaseGeneration) <= 0n ||
|
|
175
|
+
source.nodeRid.length === 0 ||
|
|
176
|
+
BigInt(source.nodeGeneration) <= 0n ||
|
|
177
|
+
source.replyRouteId !== messageFollowContext.replyRouteId)) ||
|
|
178
|
+
(!packet.returnResponse && source !== undefined)
|
|
179
|
+
) {
|
|
182
180
|
throw new Error('Remote actor handoff request source fence is invalid.');
|
|
183
181
|
}
|
|
184
182
|
return { ...packet, messageFollowContext };
|
|
@@ -228,21 +226,22 @@ export function decodeRemoteBoundSessionTarget(
|
|
|
228
226
|
routerChannelId,
|
|
229
227
|
targetNodeRid: decodeWireRoutingId(targetNodeRid, targetNodeRidHex),
|
|
230
228
|
spotId: requireSpotId(String(spotId)),
|
|
231
|
-
sessionNodeRid:
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
: undefined,
|
|
237
|
-
bindingGeneration:
|
|
238
|
-
? BigInt(bindingGeneration)
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
previousOwnerLeaseGeneration:
|
|
244
|
-
|
|
245
|
-
|
|
229
|
+
sessionNodeRid:
|
|
230
|
+
typeof sessionNodeRid === 'string'
|
|
231
|
+
? decodeWireRoutingId(sessionNodeRid, sessionNodeRidHex)
|
|
232
|
+
: undefined,
|
|
233
|
+
sessionRid:
|
|
234
|
+
typeof sessionRid === 'string' ? decodeWireRoutingId(sessionRid, sessionRidHex) : undefined,
|
|
235
|
+
bindingGeneration:
|
|
236
|
+
typeof bindingGeneration === 'string' ? BigInt(bindingGeneration) : undefined,
|
|
237
|
+
previousAuthorityOwnerGeneration:
|
|
238
|
+
typeof previousAuthorityOwnerGeneration === 'string'
|
|
239
|
+
? BigInt(previousAuthorityOwnerGeneration)
|
|
240
|
+
: undefined,
|
|
241
|
+
previousOwnerLeaseGeneration:
|
|
242
|
+
typeof previousOwnerLeaseGeneration === 'string'
|
|
243
|
+
? BigInt(previousOwnerLeaseGeneration)
|
|
244
|
+
: undefined,
|
|
246
245
|
relocationSealId: typeof relocationSealId === 'string' ? relocationSealId : undefined,
|
|
247
246
|
serviceWireRelocation: decodeBoundSessionServiceWireRelocation(serviceWireRelocation)
|
|
248
247
|
};
|
|
@@ -264,12 +263,14 @@ function decodeBoundSessionServiceWireRelocation(
|
|
|
264
263
|
};
|
|
265
264
|
const nonNegative = (key: string): bigint => {
|
|
266
265
|
const candidate = BigInt(text(key));
|
|
267
|
-
if (candidate < 0n)
|
|
266
|
+
if (candidate < 0n)
|
|
267
|
+
throw new TypeError(`Remote bound Session service-wire '${key}' is invalid.`);
|
|
268
268
|
return candidate;
|
|
269
269
|
};
|
|
270
270
|
const positive = (key: string): bigint => {
|
|
271
271
|
const candidate = nonNegative(key);
|
|
272
|
-
if (candidate === 0n)
|
|
272
|
+
if (candidate === 0n)
|
|
273
|
+
throw new TypeError(`Remote bound Session service-wire '${key}' is invalid.`);
|
|
273
274
|
return candidate;
|
|
274
275
|
};
|
|
275
276
|
const relocation = {
|
|
@@ -107,10 +107,10 @@ function decodeActorRef(payload: {
|
|
|
107
107
|
readonly actorOwnershipGeneration?: unknown;
|
|
108
108
|
}): ActorRef | undefined {
|
|
109
109
|
if (
|
|
110
|
-
typeof payload.actorId !== 'string'
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
typeof payload.actorId !== 'string' ||
|
|
111
|
+
typeof payload.actorNodeRid !== 'string' ||
|
|
112
|
+
typeof payload.actorGeneration !== 'string' ||
|
|
113
|
+
typeof payload.actorMeshName !== 'string'
|
|
114
114
|
) {
|
|
115
115
|
return undefined;
|
|
116
116
|
}
|
|
@@ -134,7 +134,12 @@ export function decodeRemoteBoundSessionResponse(
|
|
|
134
134
|
codecs?: ZLinkChannelEnvelopeCodecRegistry,
|
|
135
135
|
flowEnabled = true
|
|
136
136
|
): ZLinkRemoteBoundSessionResponse | undefined {
|
|
137
|
-
const decoded = decodeRemoteBoundSessionControl(
|
|
137
|
+
const decoded = decodeRemoteBoundSessionControl(
|
|
138
|
+
parts,
|
|
139
|
+
ZLINK_REMOTE_BOUND_SESSION_RESPONSE_PACKET,
|
|
140
|
+
codecs,
|
|
141
|
+
flowEnabled
|
|
142
|
+
);
|
|
138
143
|
if (decoded === undefined) {
|
|
139
144
|
return undefined;
|
|
140
145
|
}
|
|
@@ -154,7 +159,12 @@ export function decodeRemoteBoundSessionError(
|
|
|
154
159
|
codecs?: ZLinkChannelEnvelopeCodecRegistry,
|
|
155
160
|
flowEnabled = true
|
|
156
161
|
): ZLinkRemoteBoundSessionError | undefined {
|
|
157
|
-
const decoded = decodeRemoteBoundSessionControl(
|
|
162
|
+
const decoded = decodeRemoteBoundSessionControl(
|
|
163
|
+
parts,
|
|
164
|
+
ZLINK_REMOTE_BOUND_SESSION_ERROR_PACKET,
|
|
165
|
+
codecs,
|
|
166
|
+
flowEnabled
|
|
167
|
+
);
|
|
158
168
|
if (decoded === undefined) {
|
|
159
169
|
return undefined;
|
|
160
170
|
}
|
|
@@ -179,12 +189,15 @@ export function decodeRemoteActorPacketRelay(
|
|
|
179
189
|
const relay = decodeRemoteActorPacketRelayPayload(multipart.payload);
|
|
180
190
|
return {
|
|
181
191
|
...relay,
|
|
182
|
-
actorRef: decodeForwardedActorRef(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
192
|
+
actorRef: decodeForwardedActorRef(
|
|
193
|
+
{
|
|
194
|
+
actorId: relay.actorId,
|
|
195
|
+
actorNodeRid: relay.actorNodeRid,
|
|
196
|
+
actorNodeRidHex: relay.actorNodeRidHex,
|
|
197
|
+
actorGeneration: relay.actorGeneration
|
|
198
|
+
},
|
|
199
|
+
relay.messageFollowContext
|
|
200
|
+
),
|
|
188
201
|
bindingActorRef: decodeActorRef({
|
|
189
202
|
actorId: relay.actorId,
|
|
190
203
|
actorNodeRid: relay.bindingActorNodeRid,
|
|
@@ -199,12 +212,15 @@ export function decodeRemoteActorPacketRelay(
|
|
|
199
212
|
}
|
|
200
213
|
}
|
|
201
214
|
|
|
202
|
-
function decodeForwardedActorRef(
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
215
|
+
function decodeForwardedActorRef(
|
|
216
|
+
payload: {
|
|
217
|
+
readonly actorId?: unknown;
|
|
218
|
+
readonly actorNodeRid?: unknown;
|
|
219
|
+
readonly actorNodeRidHex?: unknown;
|
|
220
|
+
readonly actorGeneration?: unknown;
|
|
221
|
+
},
|
|
222
|
+
messageFollowContext?: import('../actors').ZLinkActorMessageFollowContext
|
|
223
|
+
): ActorRef | undefined {
|
|
208
224
|
const actorRef = decodeActorRef(payload);
|
|
209
225
|
return actorRef === undefined || messageFollowContext === undefined
|
|
210
226
|
? actorRef
|
|
@@ -216,25 +232,28 @@ function decodeRemoteBoundSessionControl(
|
|
|
216
232
|
packetName: string,
|
|
217
233
|
codecs?: ZLinkChannelEnvelopeCodecRegistry,
|
|
218
234
|
flowEnabled = true
|
|
219
|
-
):
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
235
|
+
):
|
|
236
|
+
| {
|
|
237
|
+
readonly actorId: string;
|
|
238
|
+
readonly packetName: string;
|
|
239
|
+
readonly requestSeq: bigint;
|
|
240
|
+
readonly metadata: ReadonlyMap<string, string>;
|
|
241
|
+
readonly payload: {
|
|
242
|
+
readonly message?: unknown;
|
|
243
|
+
readonly error?: unknown;
|
|
244
|
+
readonly compressPayload?: unknown;
|
|
245
|
+
};
|
|
246
|
+
readonly actorPacketTarget?: unknown;
|
|
247
|
+
}
|
|
248
|
+
| undefined {
|
|
231
249
|
try {
|
|
232
250
|
const multipart = decodeMultipartPayload(parts, codecs, flowEnabled);
|
|
233
251
|
if (multipart.packetName !== packetName) return undefined;
|
|
234
252
|
const payload = multipart.payload as Record<string, unknown>;
|
|
235
|
-
const decoded =
|
|
236
|
-
|
|
237
|
-
|
|
253
|
+
const decoded =
|
|
254
|
+
packetName === ZLINK_REMOTE_BOUND_SESSION_RESPONSE_PACKET
|
|
255
|
+
? decodeRemoteBoundSessionResponsePayload(payload)
|
|
256
|
+
: decodeRemoteBoundSessionErrorPayload(payload);
|
|
238
257
|
return {
|
|
239
258
|
actorId: decoded.actorId,
|
|
240
259
|
packetName: decoded.boundPacketName,
|
|
@@ -268,17 +287,18 @@ function decodeMultipartPayload(
|
|
|
268
287
|
const decodedPayload = decodeChannelPayload(envelope, codecs);
|
|
269
288
|
return {
|
|
270
289
|
packetName: envelope.packetName,
|
|
271
|
-
payload:
|
|
272
|
-
|
|
273
|
-
|
|
290
|
+
payload:
|
|
291
|
+
typeof decodedPayload === 'object' && decodedPayload !== null
|
|
292
|
+
? { ...decodedPayload, packetName: envelope.packetName }
|
|
293
|
+
: decodedPayload,
|
|
274
294
|
envelope
|
|
275
295
|
};
|
|
276
296
|
}
|
|
277
297
|
|
|
278
298
|
function metadataOf(value: unknown): ReadonlyMap<string, string> {
|
|
279
|
-
return new Map(
|
|
280
|
-
|
|
281
|
-
? value as Record<string, string>
|
|
282
|
-
|
|
283
|
-
)
|
|
299
|
+
return new Map(
|
|
300
|
+
Object.entries(
|
|
301
|
+
typeof value === 'object' && value !== null ? (value as Record<string, string>) : {}
|
|
302
|
+
)
|
|
303
|
+
);
|
|
284
304
|
}
|