@zlink-systems/framework 0.21.0 → 0.23.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.
Files changed (516) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
  13. package/dist/contracts/Handlers/JsonContract.js +23 -11
  14. package/dist/contracts/Spots/SpotKind.js +16 -8
  15. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
  16. package/dist/location-store-integration.js +16 -16
  17. package/dist/nest-integration.js +17 -11
  18. package/dist/runtime/abort.js +9 -5
  19. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  20. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  21. package/dist/runtime/actors/actor-client.js +83 -63
  22. package/dist/runtime/actors/actor-context.js +28 -22
  23. package/dist/runtime/actors/actor-creation.js +4 -3
  24. package/dist/runtime/actors/actor-handoff.js +89 -92
  25. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
  26. package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
  27. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  28. package/dist/runtime/actors/actor-mailbox.js +1 -1
  29. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  30. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  31. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  32. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  33. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  34. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  35. package/dist/runtime/actors/bound-session-wire.js +14 -9
  36. package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
  37. package/dist/runtime/actors/index.js +2 -5
  38. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  39. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  40. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  41. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  42. package/dist/runtime/admission.js +2 -6
  43. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  44. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  45. package/dist/runtime/backend/contracts/index.d.ts +1 -0
  46. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  47. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  48. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  49. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  51. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  52. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
  54. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  55. package/dist/runtime/backend/runtime-message.js +3 -3
  56. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  57. package/dist/runtime/backend/runtime-values.js +4 -5
  58. package/dist/runtime/channels/channel-clients.js +27 -24
  59. package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
  60. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  61. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  62. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  63. package/dist/runtime/channels/channel-envelope.js +83 -47
  64. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  65. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  66. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  67. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  68. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  69. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  70. package/dist/runtime/channels/channel-transports.js +46 -42
  71. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  72. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  73. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
  74. package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
  75. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  76. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  77. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  78. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  79. package/dist/runtime/channels/source-spot-router.js +6 -2
  80. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  81. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  82. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  83. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
  84. package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
  85. package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
  86. package/dist/runtime/diagnostics/flow-context.js +2 -2
  87. package/dist/runtime/diagnostics/index.js +38 -10
  88. package/dist/runtime/diagnostics/message-flow.js +58 -42
  89. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  90. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  91. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  92. package/dist/runtime/execution/index.js +7 -6
  93. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  94. package/dist/runtime/execution/state-lane.js +2 -2
  95. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
  96. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  97. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  98. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
  99. package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
  100. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  101. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  102. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  103. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  104. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  105. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  106. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  107. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  108. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  109. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  110. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  111. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
  112. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  113. package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
  114. package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
  115. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  116. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
  117. package/dist/runtime/foundation/service-topology-registry.js +105 -96
  118. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  119. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  120. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  121. package/dist/runtime/framework-errors-internal.js +7 -10
  122. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  123. package/dist/runtime/handlers/index.js +3 -1
  124. package/dist/runtime/host/actor-packet-relay.js +74 -70
  125. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  126. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  127. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  128. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  129. package/dist/runtime/host/application-job-queue.js +18 -22
  130. package/dist/runtime/host/bound-session-relay.js +3 -1
  131. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  132. package/dist/runtime/host/host-capacity-status.js +8 -4
  133. package/dist/runtime/host/index.js +245 -228
  134. package/dist/runtime/host/instance-activation-authority.js +93 -96
  135. package/dist/runtime/host/location-runtime-owner.js +16 -14
  136. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  137. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  138. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  139. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  140. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  141. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  142. package/dist/runtime/host/runtime-shutdown.js +1 -2
  143. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  144. package/dist/runtime/host/spot-address-transport.js +69 -71
  145. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  146. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  147. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  148. package/dist/runtime/locations/actor-location-claims.js +26 -20
  149. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  150. package/dist/runtime/locations/authority-key-codec.js +7 -7
  151. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  152. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  153. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  154. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  155. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  156. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  157. package/dist/runtime/locations/key-codec.js +1 -1
  158. package/dist/runtime/locations/lease-tracker.js +23 -21
  159. package/dist/runtime/locations/lifecycle.js +4 -5
  160. package/dist/runtime/locations/location-store-repository.js +368 -324
  161. package/dist/runtime/locations/opaque-record-key.js +2 -2
  162. package/dist/runtime/locations/resolvers.js +73 -82
  163. package/dist/runtime/locations/runtime.js +68 -63
  164. package/dist/runtime/locations/spot-location-claims.js +39 -35
  165. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  166. package/dist/runtime/messaging/packet-name.js +7 -6
  167. package/dist/runtime/messaging/payload-codec.js +21 -18
  168. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  169. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  170. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
  171. package/dist/runtime/routing-id.js +3 -5
  172. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  173. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  174. package/dist/runtime/spots/index.js +209 -220
  175. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  176. package/dist/runtime/spots/spot-activation-state.js +17 -15
  177. package/dist/runtime/spots/spot-activation.js +33 -16
  178. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  179. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  180. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
  182. package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
  183. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  184. package/dist/runtime/spots/spot-closing.js +3 -7
  185. package/dist/runtime/spots/spot-context.js +2 -2
  186. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  187. package/dist/runtime/spots/spot-handle.js +6 -3
  188. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  189. package/dist/runtime/spots/spot-manager-public.js +5 -6
  190. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  191. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  192. package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
  193. package/dist/runtime/spots/spot-outbound.js +10 -14
  194. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  195. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  196. package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
  197. package/dist/runtime/spots/spot-route-replies.js +4 -6
  198. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  199. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
  200. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  201. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  202. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  203. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  204. package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
  205. package/dist/runtime/spots/spot-timer.js +26 -30
  206. package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
  207. package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
  208. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
  209. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  210. package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
  211. package/dist/runtime/streams/bound-session-response-target.js +8 -1
  212. package/dist/runtime/streams/bound-session-service.d.ts +1 -0
  213. package/dist/runtime/streams/bound-session-service.js +14 -12
  214. package/dist/runtime/streams/index.js +28 -20
  215. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  216. package/dist/runtime/streams/managed-stream.js +52 -31
  217. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  218. package/dist/runtime/streams/protocol.d.ts +5 -1
  219. package/dist/runtime/streams/protocol.js +68 -20
  220. package/dist/runtime/streams/session-actor-coordinator.js +37 -41
  221. package/dist/runtime/streams/session-context.d.ts +9 -2
  222. package/dist/runtime/streams/session-context.js +50 -32
  223. package/dist/runtime/streams/session-local-actors.d.ts +3 -1
  224. package/dist/runtime/streams/session-local-actors.js +17 -2
  225. package/dist/runtime/streams/session-provider.js +2 -2
  226. package/dist/runtime/streams/session-serial-executor.js +1 -2
  227. package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
  228. package/dist/runtime/streams/stream-frame-factory.js +14 -7
  229. package/dist/runtime/streams/stream-session-runtime.js +112 -78
  230. package/dist/runtime/workers/index.js +15 -4
  231. package/package.json +3 -3
  232. package/src/contracts/Channels/RouteCalls.ts +6 -1
  233. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  234. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  235. package/src/contracts/Configuration/Builders.ts +14 -14
  236. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  237. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  238. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  239. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  240. package/src/contracts/Configuration/Registration.ts +46 -17
  241. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  242. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  243. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  244. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  245. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  246. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  247. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  248. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  249. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  250. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  251. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
  252. package/src/contracts/Errors/index.ts +1 -4
  253. package/src/contracts/Handlers/Attributes.ts +15 -9
  254. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  255. package/src/contracts/Handlers/JsonContract.ts +53 -19
  256. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  257. package/src/contracts/Locations/Authority.ts +4 -11
  258. package/src/contracts/Locations/Keys.ts +6 -1
  259. package/src/contracts/Locations/Options.ts +3 -2
  260. package/src/contracts/Locations/RelocationStore.ts +1 -4
  261. package/src/contracts/Locations/Resolvers.ts +5 -5
  262. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  263. package/src/contracts/Locations/Stores.ts +1 -2
  264. package/src/contracts/Locations/index.ts +2 -8
  265. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  266. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  267. package/src/contracts/Spots/Contracts.ts +2 -8
  268. package/src/contracts/Spots/SpotKind.ts +16 -8
  269. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  270. package/src/contracts/Streams/IZLinkSession.ts +2 -2
  271. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  272. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  273. package/src/internal.ts +5 -4
  274. package/src/location-store-integration.ts +24 -16
  275. package/src/nest-integration.ts +40 -25
  276. package/src/runtime/abort.ts +10 -4
  277. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  278. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  279. package/src/runtime/actors/actor-client.ts +162 -133
  280. package/src/runtime/actors/actor-context.ts +142 -134
  281. package/src/runtime/actors/actor-creation.ts +47 -44
  282. package/src/runtime/actors/actor-execution-context.ts +6 -4
  283. package/src/runtime/actors/actor-handoff.ts +269 -293
  284. package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
  285. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  286. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  287. package/src/runtime/actors/actor-mailbox.ts +16 -19
  288. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  289. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  290. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  291. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  292. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  293. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  294. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  295. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  296. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  297. package/src/runtime/actors/bound-session-wire.ts +37 -17
  298. package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
  299. package/src/runtime/actors/index.ts +43 -86
  300. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  301. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  302. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  303. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  304. package/src/runtime/admission.ts +9 -9
  305. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  306. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  307. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  308. package/src/runtime/backend/contracts/index.ts +77 -52
  309. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  310. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  311. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  312. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  313. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  314. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  315. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  316. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  317. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  318. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  319. package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
  320. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  321. package/src/runtime/backend/runtime-message.ts +5 -3
  322. package/src/runtime/backend/runtime-values.ts +10 -7
  323. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  324. package/src/runtime/channels/channel-clients.ts +93 -73
  325. package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
  326. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  327. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  328. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  329. package/src/runtime/channels/channel-envelope.ts +256 -150
  330. package/src/runtime/channels/channel-multipart.ts +13 -5
  331. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  332. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  333. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  334. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  335. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  336. package/src/runtime/channels/channel-socket-options.ts +3 -10
  337. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  338. package/src/runtime/channels/channel-transports.ts +218 -206
  339. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  340. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  341. package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
  342. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  343. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  344. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  345. package/src/runtime/channels/index.ts +1 -4
  346. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  347. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  348. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  349. package/src/runtime/channels/source-spot-router.ts +26 -22
  350. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  351. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  352. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  353. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  354. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  355. package/src/runtime/codecs/index.ts +3 -2
  356. package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
  357. package/src/runtime/diagnostics/flow-context.ts +18 -7
  358. package/src/runtime/diagnostics/index.ts +96 -61
  359. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  360. package/src/runtime/diagnostics/message-flow.ts +107 -79
  361. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  362. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  363. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  364. package/src/runtime/execution/index.ts +18 -26
  365. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  366. package/src/runtime/execution/state-lane.ts +2 -2
  367. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
  368. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  369. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  370. package/src/runtime/foundation/operation-identity.ts +1 -2
  371. package/src/runtime/foundation/operation-registry.ts +8 -2
  372. package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
  373. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  374. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  375. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  376. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  377. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  378. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  379. package/src/runtime/foundation/service-mailbox.ts +14 -14
  380. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  381. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  382. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  383. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  384. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  385. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  386. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  387. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
  388. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  389. package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
  390. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  391. package/src/runtime/foundation/service-topology-registry.ts +170 -159
  392. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  393. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  394. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  395. package/src/runtime/framework-errors-internal.ts +31 -30
  396. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  397. package/src/runtime/handlers/index.ts +18 -8
  398. package/src/runtime/host/actor-packet-relay.ts +290 -261
  399. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  400. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  401. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  402. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  403. package/src/runtime/host/application-job-queue.ts +32 -48
  404. package/src/runtime/host/bound-session-relay.ts +7 -9
  405. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  406. package/src/runtime/host/host-capacity-status.ts +10 -9
  407. package/src/runtime/host/index.ts +861 -789
  408. package/src/runtime/host/instance-activation-authority.ts +125 -143
  409. package/src/runtime/host/location-runtime-owner.ts +38 -26
  410. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  411. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  412. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  413. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  414. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  415. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  416. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  417. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  418. package/src/runtime/host/runtime-shutdown.ts +4 -3
  419. package/src/runtime/host/service-relocation-control.ts +14 -5
  420. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  421. package/src/runtime/host/spot-address-transport.ts +284 -237
  422. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  423. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  424. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  425. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  426. package/src/runtime/locations/actor-location-claims.ts +61 -49
  427. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  428. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  429. package/src/runtime/locations/authority-key-codec.ts +13 -10
  430. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  431. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  432. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  433. package/src/runtime/locations/canonical-codec.ts +3 -1
  434. package/src/runtime/locations/creation-operation-id.ts +4 -3
  435. package/src/runtime/locations/domain-store-contract.ts +13 -7
  436. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  437. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  438. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  439. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  440. package/src/runtime/locations/key-codec.ts +3 -4
  441. package/src/runtime/locations/lease-tracker.ts +36 -27
  442. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  443. package/src/runtime/locations/lifecycle.ts +33 -28
  444. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  445. package/src/runtime/locations/opaque-record-key.ts +4 -9
  446. package/src/runtime/locations/resolvers.ts +201 -178
  447. package/src/runtime/locations/runtime.ts +251 -159
  448. package/src/runtime/locations/spot-location-claims.ts +110 -112
  449. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  450. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  451. package/src/runtime/messaging/packet-name.ts +8 -6
  452. package/src/runtime/messaging/payload-codec.ts +70 -50
  453. package/src/runtime/messaging/submission-result.ts +6 -9
  454. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  455. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
  456. package/src/runtime/routing-id.ts +10 -7
  457. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  458. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  459. package/src/runtime/spots/index.ts +595 -564
  460. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  461. package/src/runtime/spots/spot-activation-state.ts +43 -51
  462. package/src/runtime/spots/spot-activation.ts +179 -116
  463. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  464. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  465. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  466. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  467. package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
  468. package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
  469. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  470. package/src/runtime/spots/spot-closing.ts +11 -12
  471. package/src/runtime/spots/spot-context.ts +46 -26
  472. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  473. package/src/runtime/spots/spot-handle.ts +17 -15
  474. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  475. package/src/runtime/spots/spot-location-claim.ts +5 -4
  476. package/src/runtime/spots/spot-manager-public.ts +62 -82
  477. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  478. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  479. package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
  480. package/src/runtime/spots/spot-outbound.ts +47 -59
  481. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  482. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  483. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  484. package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
  485. package/src/runtime/spots/spot-route-replies.ts +23 -24
  486. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  487. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  488. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
  489. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  490. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  491. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  492. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  493. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  494. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  495. package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
  496. package/src/runtime/spots/spot-timer.ts +103 -91
  497. package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
  498. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
  499. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  500. package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
  501. package/src/runtime/streams/bound-session-response-target.ts +39 -9
  502. package/src/runtime/streams/bound-session-service.ts +52 -42
  503. package/src/runtime/streams/index.ts +183 -100
  504. package/src/runtime/streams/managed-stream.ts +123 -90
  505. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  506. package/src/runtime/streams/protocol.ts +115 -46
  507. package/src/runtime/streams/session-actor-coordinator.ts +109 -93
  508. package/src/runtime/streams/session-calls.ts +2 -8
  509. package/src/runtime/streams/session-context.ts +96 -51
  510. package/src/runtime/streams/session-local-actors.ts +19 -3
  511. package/src/runtime/streams/session-provider.ts +5 -7
  512. package/src/runtime/streams/session-serial-executor.ts +7 -6
  513. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  514. package/src/runtime/streams/stream-frame-factory.ts +59 -40
  515. package/src/runtime/streams/stream-session-runtime.ts +317 -214
  516. package/src/runtime/workers/index.ts +68 -29
@@ -1,15 +1,17 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException, internalFrameworkErrorKind } from '../framework-errors-internal';
1
+ import {
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException,
4
+ internalFrameworkErrorKind
5
+ } from '../framework-errors-internal';
2
6
  import type {
3
7
  ActorRef,
8
+ RoutingId,
4
9
  ZLinkActor,
5
10
  ZLinkMessageSerializer,
6
11
  ZLinkSpot
7
12
  } from '../../contracts';
8
13
  import type { Message } from '../../contracts/Common/Message';
9
- import {
10
- ZLinkFrameworkException,
11
- zlinkMessageMetadata
12
- } from '../../contracts';
14
+ import { ZLinkFrameworkException, zlinkMessageMetadata } from '../../contracts';
13
15
  import {
14
16
  ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
15
17
  ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
@@ -18,7 +20,8 @@ import {
18
20
  ZLinkDispatchMessageKind
19
21
  } from '../../contracts/Dispatch/ZLinkDispatchOptions';
20
22
  import { flowIfEnabled } from '../diagnostics';
21
- import { createInboundFlow, runWithFlow } from '../diagnostics/flow-context';
23
+ import { createInboundFlow, currentFlowContext, runWithFlow } from '../diagnostics/flow-context';
24
+ import { streamSessionIdFromRoutingId } from '../streams/managed-stream';
22
25
  import type { ZLinkRemoteBoundSessionTarget } from '../actors';
23
26
  import {
24
27
  actorMessageFollowContext,
@@ -62,6 +65,7 @@ export interface ZLinkActorPacketDelivery {
62
65
  readonly fallbackActorRef?: ActorRef;
63
66
  readonly requestTerminal?: ZLinkActorRequestTerminal;
64
67
  readonly messageFollowOrigin?: ZLinkMessageFollowOrigin;
68
+ readonly sourceSessionRid?: RoutingId;
65
69
  }
66
70
 
67
71
  /**
@@ -96,9 +100,10 @@ interface ZLinkSpotActorPacketDispatchOptions {
96
100
  readonly actorLeft?: (actorId: string) => boolean;
97
101
  readonly routeBeforeLocal?: (
98
102
  delivery: ZLinkActorPacketDelivery
99
- ) => Promise<{ readonly handled: boolean; readonly response?: unknown } | undefined> |
100
- { readonly handled: boolean; readonly response?: unknown } |
101
- undefined;
103
+ ) =>
104
+ | Promise<{ readonly handled: boolean; readonly response?: unknown } | undefined>
105
+ | { readonly handled: boolean; readonly response?: unknown }
106
+ | undefined;
102
107
  readonly onRemoteBoundSessionTarget?: (
103
108
  actorId: string,
104
109
  target: ZLinkRemoteBoundSessionTarget | undefined
@@ -170,85 +175,94 @@ export class ZLinkSpotActorPacketDispatch {
170
175
  let requestDeadlineUnixMs: number | undefined;
171
176
  try {
172
177
  header = decodeStreamHeader(messageToBytes(parts[0]), flowEnabled);
173
- requestDeadlineUnixMs = header.kind === ZLinkStreamMessageKind.Request
174
- ? decodeActorRequestDeadlineUnixMs(messageToBytes(parts[0]))
175
- : undefined;
178
+ requestDeadlineUnixMs =
179
+ header.kind === ZLinkStreamMessageKind.Request
180
+ ? decodeActorRequestDeadlineUnixMs(messageToBytes(parts[0]))
181
+ : undefined;
176
182
  } catch (error) {
177
183
  this.reportInvalidFrame(actorId, ZLinkDispatchMessageKind.ActorSend, error);
178
184
  throw error;
179
185
  }
180
- return runWithFlow(createInboundFlow(
181
- header.flowId,
182
- header.flowOrigin,
183
- flowEnabled
184
- ), async () => {
185
- const messageKind = header.kind === ZLinkStreamMessageKind.Request
186
- ? ZLinkDispatchMessageKind.ActorRequest
187
- : ZLinkDispatchMessageKind.ActorSend;
188
- const action = messageKind === ZLinkDispatchMessageKind.ActorRequest
189
- ? ZLinkDispatchErrorAction.ReplyError
190
- : ZLinkDispatchErrorAction.Drop;
191
- this.trace(ZLinkMessageFlowOutcome.Received, actorId, header, messageKind);
192
- if (
193
- this.options.actorLeft?.(actorId) === true &&
194
- header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET
195
- ) {
196
- return undefined;
197
- }
198
- if (
199
- remoteBoundSessionTarget !== undefined
200
- && actorMessageFollowContext(fallbackActorRef) === undefined
201
- ) {
202
- // A replayed handoff/Message Follow packet keeps its captured Session
203
- // route solely for that packet's response. It cannot republish the
204
- // predecessor route over a binding already confirmed by a later Actor
205
- // owner turn.
206
- this.options.onRemoteBoundSessionTarget?.(actorId, remoteBoundSessionTarget);
207
- }
208
- const routed = await this.options.routeBeforeLocal?.(
209
- delivery
210
- );
211
- if (routed?.handled === true) {
212
- return routed.response;
213
- }
214
- const actor = this.options.resolveActor(actorId);
215
- if (actor === undefined) {
216
- return this.handleMissingActor(
186
+ return runWithFlow(
187
+ createInboundFlow(
188
+ header.flowId,
189
+ header.flowOrigin,
190
+ flowEnabled,
191
+ !flowEnabled
192
+ ? undefined
193
+ : delivery.sourceSessionRid === undefined
194
+ ? currentFlowContext()?.streamSessionId
195
+ : streamSessionIdFromRoutingId(delivery.sourceSessionRid)
196
+ ),
197
+ async () => {
198
+ const messageKind =
199
+ header.kind === ZLinkStreamMessageKind.Request
200
+ ? ZLinkDispatchMessageKind.ActorRequest
201
+ : ZLinkDispatchMessageKind.ActorSend;
202
+ const action =
203
+ messageKind === ZLinkDispatchMessageKind.ActorRequest
204
+ ? ZLinkDispatchErrorAction.ReplyError
205
+ : ZLinkDispatchErrorAction.Drop;
206
+ this.trace(ZLinkMessageFlowOutcome.Received, actorId, header, messageKind);
207
+ if (
208
+ this.options.actorLeft?.(actorId) === true &&
209
+ header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET
210
+ ) {
211
+ return undefined;
212
+ }
213
+ if (
214
+ remoteBoundSessionTarget !== undefined &&
215
+ actorMessageFollowContext(fallbackActorRef) === undefined
216
+ ) {
217
+ // A replayed handoff/Message Follow packet keeps its captured Session
218
+ // route solely for that packet's response. It cannot republish the
219
+ // predecessor route over a binding already confirmed by a later Actor
220
+ // owner turn.
221
+ this.options.onRemoteBoundSessionTarget?.(actorId, remoteBoundSessionTarget);
222
+ }
223
+ const routed = await this.options.routeBeforeLocal?.(delivery);
224
+ if (routed?.handled === true) {
225
+ return routed.response;
226
+ }
227
+ const actor = this.options.resolveActor(actorId);
228
+ if (actor === undefined) {
229
+ return this.handleMissingActor(
230
+ actorId,
231
+ parts,
232
+ header,
233
+ messageKind,
234
+ action,
235
+ returnResponse,
236
+ remoteBoundSessionTarget,
237
+ fallbackActorRef,
238
+ requestTerminal
239
+ );
240
+ }
241
+ if (header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
242
+ this.options.onRemoteBoundSessionTarget?.(actorId, undefined);
243
+ await this.options.onDisconnectActor(actor);
244
+ return undefined;
245
+ }
246
+ const decodePayload = this.createPayloadDecoder(parts[1], header);
247
+ return this.dispatchActorPacket(
248
+ actor,
217
249
  actorId,
218
- parts,
250
+ decodePayload,
219
251
  header,
220
252
  messageKind,
221
253
  action,
222
254
  returnResponse,
223
255
  remoteBoundSessionTarget,
224
256
  fallbackActorRef,
225
- requestTerminal
257
+ requestTerminal,
258
+ requestDeadlineUnixMs,
259
+ zlinkSerialWorkOptions(
260
+ parts[1].data().byteLength,
261
+ zlinkMetadataByteLength(header.metadata)
262
+ )
226
263
  );
227
264
  }
228
- if (header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
229
- this.options.onRemoteBoundSessionTarget?.(actorId, undefined);
230
- await this.options.onDisconnectActor(actor);
231
- return undefined;
232
- }
233
- const decodePayload = this.createPayloadDecoder(parts[1], header);
234
- return this.dispatchActorPacket(
235
- actor,
236
- actorId,
237
- decodePayload,
238
- header,
239
- messageKind,
240
- action,
241
- returnResponse,
242
- remoteBoundSessionTarget,
243
- fallbackActorRef,
244
- requestTerminal,
245
- requestDeadlineUnixMs,
246
- zlinkSerialWorkOptions(
247
- parts[1].data().byteLength,
248
- zlinkMetadataByteLength(header.metadata)
249
- )
250
- );
251
- });
265
+ );
252
266
  }
253
267
 
254
268
  private async handleMissingActor(
@@ -263,14 +277,14 @@ export class ZLinkSpotActorPacketDispatch {
263
277
  requestTerminal: ZLinkActorRequestTerminal | undefined
264
278
  ): Promise<unknown> {
265
279
  if (
266
- this.options.routeToActorJoinPrewarm !== undefined
267
- && fallbackActorRef !== undefined
268
- && parts.length >= 2
280
+ this.options.routeToActorJoinPrewarm !== undefined &&
281
+ fallbackActorRef !== undefined &&
282
+ parts.length >= 2 &&
269
283
  // A Request without a terminal has no way to complete once
270
284
  // migrated later — parking it would leave the caller hanging
271
285
  // forever with no reply route. Fall through to the existing
272
286
  // missing-actor handling for that shape instead.
273
- && (messageKind !== ZLinkDispatchMessageKind.ActorRequest || requestTerminal !== undefined)
287
+ (messageKind !== ZLinkDispatchMessageKind.ActorRequest || requestTerminal !== undefined)
274
288
  ) {
275
289
  const parked = this.parkForActorJoinPrewarm(
276
290
  actorId,
@@ -300,7 +314,11 @@ export class ZLinkSpotActorPacketDispatch {
300
314
  ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound,
301
315
  `SPOT actor is not registered locally: ${actorId}`
302
316
  );
303
- if (header.requestSeq !== undefined && !returnResponse && this.options.actorErrorSender !== undefined) {
317
+ if (
318
+ header.requestSeq !== undefined &&
319
+ !returnResponse &&
320
+ this.options.actorErrorSender !== undefined
321
+ ) {
304
322
  await this.options.actorErrorSender(
305
323
  actorId,
306
324
  header.name,
@@ -389,13 +407,14 @@ export class ZLinkSpotActorPacketDispatch {
389
407
  message: Message,
390
408
  header: ReturnType<typeof decodeStreamHeader>
391
409
  ): () => unknown {
392
- return () => decodeFrameworkTypedPayloadMessage(
393
- message,
394
- this.options.messageSerializers,
395
- undefined,
396
- streamCodecContentType(header.codec),
397
- header.name
398
- );
410
+ return () =>
411
+ decodeFrameworkTypedPayloadMessage(
412
+ message,
413
+ this.options.messageSerializers,
414
+ undefined,
415
+ streamCodecContentType(header.codec),
416
+ header.name
417
+ );
399
418
  }
400
419
 
401
420
  private async dispatchActorPacket(
@@ -412,9 +431,7 @@ export class ZLinkSpotActorPacketDispatch {
412
431
  requestDeadlineUnixMs: number | undefined,
413
432
  workOptions: ZLinkSerialWorkOptions
414
433
  ): Promise<unknown> {
415
- const spot = typeof this.options.spot === 'function'
416
- ? this.options.spot()
417
- : this.options.spot;
434
+ const spot = typeof this.options.spot === 'function' ? this.options.spot() : this.options.spot;
418
435
  const dispatcher = new ZLinkSpotActorDispatcher({
419
436
  registry: this.options.registry,
420
437
  spot,
@@ -422,20 +439,15 @@ export class ZLinkSpotActorPacketDispatch {
422
439
  serial: this.options.serial,
423
440
  serialWorkOptions: workOptions,
424
441
  messageSerializers: this.options.messageSerializers,
425
- onAdmitted: () => this.trace(
426
- ZLinkMessageFlowOutcome.Admitted,
427
- actorId,
428
- header,
429
- messageKind
430
- ),
442
+ onAdmitted: () => this.trace(ZLinkMessageFlowOutcome.Admitted, actorId, header, messageKind),
431
443
  onHandlerStart: () => {
432
444
  // A transferred backlog is returned to the Actor queue as one FIFO
433
445
  // prefix. Check the request deadline when its owner turn actually
434
446
  // starts, not when that prefix is admitted.
435
447
  if (
436
- messageKind === ZLinkDispatchMessageKind.ActorRequest
437
- && requestDeadlineUnixMs !== undefined
438
- && Date.now() >= requestDeadlineUnixMs
448
+ messageKind === ZLinkDispatchMessageKind.ActorRequest &&
449
+ requestDeadlineUnixMs !== undefined &&
450
+ Date.now() >= requestDeadlineUnixMs
439
451
  ) {
440
452
  throw createInternalFrameworkException(
441
453
  ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
@@ -443,12 +455,7 @@ export class ZLinkSpotActorPacketDispatch {
443
455
  );
444
456
  }
445
457
  releaseApplicationJobPermitBeforeHandler();
446
- this.trace(
447
- ZLinkMessageFlowOutcome.Dispatched,
448
- actorId,
449
- header,
450
- messageKind
451
- );
458
+ this.trace(ZLinkMessageFlowOutcome.Dispatched, actorId, header, messageKind);
452
459
  }
453
460
  });
454
461
  try {
@@ -458,7 +465,12 @@ export class ZLinkSpotActorPacketDispatch {
458
465
  metadata: zlinkMessageMetadata(header.metadata),
459
466
  correlationId: header.correlationId ?? undefined
460
467
  });
461
- this.trace(ZLinkMessageFlowOutcome.Completed, actorId, header, ZLinkDispatchMessageKind.ActorSend);
468
+ this.trace(
469
+ ZLinkMessageFlowOutcome.Completed,
470
+ actorId,
471
+ header,
472
+ ZLinkDispatchMessageKind.ActorSend
473
+ );
462
474
  return undefined;
463
475
  }
464
476
  if (header.kind !== ZLinkStreamMessageKind.Request || header.requestSeq === undefined) {
@@ -477,59 +489,95 @@ export class ZLinkSpotActorPacketDispatch {
477
489
  if (returnResponse && requestTerminal !== undefined) {
478
490
  let preparedReply: unknown;
479
491
  let preparedReplyReady = false;
480
- await dispatcher.dispatchRequestThenDecoded(actor, header.name, decodePayload, {
481
- meshName: spot.context.meshName,
482
- metadata: zlinkMessageMetadata(header.metadata),
483
- correlationId: header.correlationId ?? header.requestSeq.toString()
484
- }, async (response) => {
485
- this.trace(ZLinkMessageFlowOutcome.Replied, actorId, header, ZLinkDispatchMessageKind.ActorRequest);
486
- await requestTerminal(response, preparedReplyReady ? preparedReply : undefined);
487
- }, requestTerminal.prepare === undefined
488
- ? undefined
489
- : async (response) => {
490
- preparedReply = await requestTerminal.prepare!(response);
491
- preparedReplyReady = true;
492
- });
492
+ await dispatcher.dispatchRequestThenDecoded(
493
+ actor,
494
+ header.name,
495
+ decodePayload,
496
+ {
497
+ meshName: spot.context.meshName,
498
+ metadata: zlinkMessageMetadata(header.metadata),
499
+ correlationId: header.correlationId ?? header.requestSeq.toString()
500
+ },
501
+ async (response) => {
502
+ this.trace(
503
+ ZLinkMessageFlowOutcome.Replied,
504
+ actorId,
505
+ header,
506
+ ZLinkDispatchMessageKind.ActorRequest
507
+ );
508
+ await requestTerminal(response, preparedReplyReady ? preparedReply : undefined);
509
+ },
510
+ requestTerminal.prepare === undefined
511
+ ? undefined
512
+ : async (response) => {
513
+ preparedReply = await requestTerminal.prepare!(response);
514
+ preparedReplyReady = true;
515
+ }
516
+ );
493
517
  return undefined;
494
518
  }
495
519
  if (returnResponse || this.options.actorResponseSender === undefined) {
496
- const response = await dispatcher.dispatchRequestDecoded(actor, header.name, decodePayload, {
497
- meshName: spot.context.meshName,
498
- metadata: zlinkMessageMetadata(header.metadata),
499
- correlationId: header.correlationId ?? header.requestSeq.toString()
500
- });
501
- this.trace(ZLinkMessageFlowOutcome.Replied, actorId, header, ZLinkDispatchMessageKind.ActorRequest);
502
- return response;
503
- }
504
- await dispatcher.dispatchRequestThenDecoded(actor, header.name, decodePayload, {
505
- meshName: spot.context.meshName,
506
- metadata: zlinkMessageMetadata(header.metadata),
507
- correlationId: header.correlationId ?? header.requestSeq.toString()
508
- }, async (response, replyOptions) => {
509
- this.trace(ZLinkMessageFlowOutcome.Replied, actorId, header, ZLinkDispatchMessageKind.ActorRequest);
510
- await this.options.actorResponseSender?.(
520
+ const response = await dispatcher.dispatchRequestDecoded(
511
521
  actor,
512
522
  header.name,
513
- requestSeq,
514
- response,
515
- replyOptions,
516
- fallbackBoundSessionTarget,
517
- fallbackActorRef,
518
- undefined
523
+ decodePayload,
524
+ {
525
+ meshName: spot.context.meshName,
526
+ metadata: zlinkMessageMetadata(header.metadata),
527
+ correlationId: header.correlationId ?? header.requestSeq.toString()
528
+ }
519
529
  );
520
- });
530
+ this.trace(
531
+ ZLinkMessageFlowOutcome.Replied,
532
+ actorId,
533
+ header,
534
+ ZLinkDispatchMessageKind.ActorRequest
535
+ );
536
+ return response;
537
+ }
538
+ await dispatcher.dispatchRequestThenDecoded(
539
+ actor,
540
+ header.name,
541
+ decodePayload,
542
+ {
543
+ meshName: spot.context.meshName,
544
+ metadata: zlinkMessageMetadata(header.metadata),
545
+ correlationId: header.correlationId ?? header.requestSeq.toString()
546
+ },
547
+ async (response, replyOptions) => {
548
+ this.trace(
549
+ ZLinkMessageFlowOutcome.Replied,
550
+ actorId,
551
+ header,
552
+ ZLinkDispatchMessageKind.ActorRequest
553
+ );
554
+ await this.options.actorResponseSender?.(
555
+ actor,
556
+ header.name,
557
+ requestSeq,
558
+ response,
559
+ replyOptions,
560
+ fallbackBoundSessionTarget,
561
+ fallbackActorRef,
562
+ undefined
563
+ );
564
+ }
565
+ );
521
566
  return undefined;
522
567
  } catch (error) {
523
568
  this.options.dispatchErrors?.report({
524
569
  surface: ZLinkDispatchErrorSurface.SpotActor,
525
570
  messageKind,
526
- reason: error instanceof ZLinkFrameworkException
527
- && internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
528
- ? ZLinkDispatchErrorReason.HandlerMissing
529
- : error instanceof ZLinkFrameworkException
530
- && internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed
531
- ? ZLinkDispatchErrorReason.PayloadDecodeFailed
532
- : ZLinkDispatchErrorReason.HandlerException,
571
+ reason:
572
+ error instanceof ZLinkFrameworkException &&
573
+ internalFrameworkErrorKind(error) ===
574
+ ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
575
+ ? ZLinkDispatchErrorReason.HandlerMissing
576
+ : error instanceof ZLinkFrameworkException &&
577
+ internalFrameworkErrorKind(error) ===
578
+ ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed
579
+ ? ZLinkDispatchErrorReason.PayloadDecodeFailed
580
+ : ZLinkDispatchErrorReason.HandlerException,
533
581
  action,
534
582
  packetName: header.name,
535
583
  spotId: this.options.spotId(),
@@ -1,19 +1,9 @@
1
- import type {
2
- ActorRef,
3
- RoutingId,
4
- ZLinkMessageSerializer
5
- } from '../../contracts';
6
- import {
7
- ZLinkFrameworkException,
8
- ZLinkFrameworkErrorKind
9
- } from '../../contracts';
1
+ import type { ActorRef, RoutingId, ZLinkMessageSerializer } from '../../contracts';
2
+ import { ZLinkFrameworkException, ZLinkFrameworkErrorKind } from '../../contracts';
10
3
  import type { Message } from '../../contracts/Common/Message';
11
4
  import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
12
5
  import { RequestResult } from '../backend/runtime-values';
13
- import type {
14
- ZLinkBackendActorRef,
15
- ZLinkBackendActorRecvInfo
16
- } from '../backend/contracts';
6
+ import type { ZLinkBackendActorRef, ZLinkBackendActorRecvInfo } from '../backend/contracts';
17
7
  import type { ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
18
8
  import { REMOTE_BOUND_SESSION_BIND_PACKET } from './spot-remote-codec';
19
9
  import { ZLINK_RECV_DONT_WAIT } from './spot-native-flags';
@@ -59,7 +49,10 @@ interface ZLinkSpotActorPacketDrainOptions {
59
49
  const ZLINK_SPOT_ACTOR_RECV_INFO_NO_BIND = 1;
60
50
 
61
51
  export class ZLinkSpotActorPacketDrain {
62
- private readonly continuations = new Map<string, { readonly owner: string; readonly parts: Message[] }>();
52
+ private readonly continuations = new Map<
53
+ string,
54
+ { readonly owner: string; readonly parts: Message[] }
55
+ >();
63
56
 
64
57
  constructor(private readonly options: ZLinkSpotActorPacketDrainOptions) {}
65
58
 
@@ -96,7 +89,9 @@ export class ZLinkSpotActorPacketDrain {
96
89
  if (isStreamHeaderMessage(part.message, this.flowEnabled())) {
97
90
  closeMessages(pending.parts);
98
91
  this.continuations.delete(currentPacketKey);
99
- throw new Error(`Actor packet continuation '${pending.owner}' was replaced before completion.`);
92
+ throw new Error(
93
+ `Actor packet continuation '${pending.owner}' was replaced before completion.`
94
+ );
100
95
  }
101
96
  this.continuations.delete(currentPacketKey);
102
97
  parts.push(...pending.parts);
@@ -115,7 +110,14 @@ export class ZLinkSpotActorPacketDrain {
115
110
  break;
116
111
  }
117
112
  }
118
- const noBindInfo = this.createNoBindReplyInfo(actorRef, sourceNodeRid, sourceSessionRid, requestId, flags, parts);
113
+ const noBindInfo = this.createNoBindReplyInfo(
114
+ actorRef,
115
+ sourceNodeRid,
116
+ sourceSessionRid,
117
+ requestId,
118
+ flags,
119
+ parts
120
+ );
119
121
  if (this.consumeRemoteBoundSessionBind(actorRef, sourceNodeRid, sourceSessionRid, parts)) {
120
122
  return;
121
123
  }
@@ -136,6 +138,7 @@ export class ZLinkSpotActorPacketDrain {
136
138
  actorId,
137
139
  parts,
138
140
  returnResponse: false,
141
+ sourceSessionRid,
139
142
  fallbackActorRef: actorRef as unknown as ActorRef | undefined
140
143
  });
141
144
  }
@@ -160,15 +163,15 @@ export class ZLinkSpotActorPacketDrain {
160
163
  parts: readonly Message[]
161
164
  ): ZLinkBackendActorRecvInfo | undefined {
162
165
  if (
163
- actor === undefined
164
- || sourceNodeRid === undefined
165
- || sourceSessionRid === undefined
166
- || requestId === undefined
167
- || requestId === 0n
168
- || flags === undefined
169
- || (flags & ZLINK_SPOT_ACTOR_RECV_INFO_NO_BIND) === 0
170
- || this.options.replyActorNoBind === undefined
171
- || !this.isActorRequest(parts)
166
+ actor === undefined ||
167
+ sourceNodeRid === undefined ||
168
+ sourceSessionRid === undefined ||
169
+ requestId === undefined ||
170
+ requestId === 0n ||
171
+ flags === undefined ||
172
+ (flags & ZLINK_SPOT_ACTOR_RECV_INFO_NO_BIND) === 0 ||
173
+ this.options.replyActorNoBind === undefined ||
174
+ !this.isActorRequest(parts)
172
175
  ) {
173
176
  return undefined;
174
177
  }
@@ -198,6 +201,7 @@ export class ZLinkSpotActorPacketDrain {
198
201
  actorId,
199
202
  parts,
200
203
  returnResponse: true,
204
+ sourceSessionRid: info.sourceSessionRid,
201
205
  fallbackActorRef: actorRef as unknown as ActorRef | undefined
202
206
  });
203
207
  this.options.replyActorNoBind?.(
@@ -208,7 +212,13 @@ export class ZLinkSpotActorPacketDrain {
208
212
  } catch (error) {
209
213
  this.options.replyActorNoBind?.(
210
214
  info,
211
- [this.encodeActorReplyFrame(parts[0], ZLinkStreamMessageKind.Error, frameworkErrorPayload(error))],
215
+ [
216
+ this.encodeActorReplyFrame(
217
+ parts[0],
218
+ ZLinkStreamMessageKind.Error,
219
+ frameworkErrorPayload(error)
220
+ )
221
+ ],
212
222
  RequestResult.Ok
213
223
  );
214
224
  }
@@ -228,19 +238,22 @@ export class ZLinkSpotActorPacketDrain {
228
238
  );
229
239
  try {
230
240
  // encodeStreamFrame returns a fresh, unaliased array; view it without re-copying.
231
- const frame = encodeStreamFrame({
232
- kind,
233
- codec: streamCodecForContentType(encoded.contentType),
234
- flags: ZLinkStreamHeaderFlags.None,
235
- requestSeq: requestHeader.requestSeq,
236
- name: '',
237
- metadata: new Map(),
238
- correlationId: requestHeader.correlationId,
239
- // Spec 27 §7: preserve the request flow pair on the reply while
240
- // tracing is on; the gated decode above already strips it at Off.
241
- flowId: requestHeader.flowId,
242
- flowOrigin: requestHeader.flowOrigin
243
- }, encoded.message.data());
241
+ const frame = encodeStreamFrame(
242
+ {
243
+ kind,
244
+ codec: streamCodecForContentType(encoded.contentType),
245
+ flags: ZLinkStreamHeaderFlags.None,
246
+ requestSeq: requestHeader.requestSeq,
247
+ name: '',
248
+ metadata: new Map(),
249
+ correlationId: requestHeader.correlationId,
250
+ // Spec 27 §7: preserve the request flow pair on the reply while
251
+ // tracing is on; the gated decode above already strips it at Off.
252
+ flowId: requestHeader.flowId,
253
+ flowOrigin: requestHeader.flowOrigin
254
+ },
255
+ encoded.message.data()
256
+ );
244
257
  return RuntimeMessage.fromOwned(
245
258
  Buffer.from(frame.buffer, frame.byteOffset, frame.byteLength)
246
259
  ) as Message;
@@ -321,8 +334,9 @@ function frameworkErrorPayload(error: unknown): {
321
334
  } {
322
335
  return {
323
336
  message: error instanceof Error ? error.message : String(error),
324
- kind: error instanceof ZLinkFrameworkException
325
- ? error.kind
326
- : ZLinkFrameworkErrorKind.InternalFailure
337
+ kind:
338
+ error instanceof ZLinkFrameworkException
339
+ ? error.kind
340
+ : ZLinkFrameworkErrorKind.InternalFailure
327
341
  };
328
342
  }