@zlink-systems/framework 0.30.1 → 0.30.2

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 (340) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  3. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  4. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  5. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  6. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  7. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  8. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  9. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  10. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  11. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  12. package/dist/contracts/Locations/Rows.d.ts +2 -0
  13. package/dist/contracts/Spots/Contracts.d.ts +4 -0
  14. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  15. package/dist/runtime/abort.d.ts +5 -0
  16. package/dist/runtime/abort.js +10 -0
  17. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  18. package/dist/runtime/actors/actor-client.d.ts +0 -1
  19. package/dist/runtime/actors/actor-client.js +38 -45
  20. package/dist/runtime/actors/actor-context.d.ts +2 -0
  21. package/dist/runtime/actors/actor-context.js +46 -9
  22. package/dist/runtime/actors/actor-handoff.d.ts +7 -3
  23. package/dist/runtime/actors/actor-handoff.js +212 -88
  24. package/dist/runtime/actors/actor-join-relocation.d.ts +2 -0
  25. package/dist/runtime/actors/actor-local-native-join.js +4 -0
  26. package/dist/runtime/actors/actor-mailbox.js +27 -1
  27. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  28. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  29. package/dist/runtime/actors/actor-reply.js +29 -0
  30. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  31. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  32. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  33. package/dist/runtime/actors/index.d.ts +6 -2
  34. package/dist/runtime/actors/index.js +37 -21
  35. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  36. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  37. package/dist/runtime/admission.d.ts +9 -1
  38. package/dist/runtime/admission.js +55 -32
  39. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +13 -0
  40. package/dist/runtime/application-jobs/application-job-queue-scope.js +27 -1
  41. package/dist/runtime/application-jobs/contracts.d.ts +2 -0
  42. package/dist/runtime/backend/contracts/index.d.ts +19 -3
  43. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  44. package/dist/runtime/backend/mesh-completion-table.js +5 -0
  45. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +26 -2
  46. package/dist/runtime/backend/mesh-dispatch-pump.js +193 -107
  47. package/dist/runtime/backend/node/node-raw-binding-port.js +90 -58
  48. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +33 -8
  49. package/dist/runtime/backend/node/node-raw-mesh-backend.js +142 -143
  50. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  51. package/dist/runtime/backend/node/node-socket-backend-adapter.js +5 -5
  52. package/dist/runtime/channels/channel-clients.d.ts +1 -0
  53. package/dist/runtime/channels/channel-clients.js +20 -5
  54. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +22 -3
  55. package/dist/runtime/channels/channel-dispatch-pipeline.js +103 -57
  56. package/dist/runtime/channels/channel-dispatchers.d.ts +3 -2
  57. package/dist/runtime/channels/channel-dispatchers.js +44 -37
  58. package/dist/runtime/channels/channel-envelope.d.ts +1 -0
  59. package/dist/runtime/channels/channel-envelope.js +74 -31
  60. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  62. package/dist/runtime/channels/channel-runtime-manager.d.ts +3 -2
  63. package/dist/runtime/channels/channel-runtime-manager.js +4 -4
  64. package/dist/runtime/channels/channel-transports.d.ts +0 -1
  65. package/dist/runtime/channels/channel-transports.js +35 -33
  66. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  67. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  68. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  69. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  70. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  71. package/dist/runtime/diagnostics/flow-context.js +19 -7
  72. package/dist/runtime/diagnostics/index.js +4 -9
  73. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  74. package/dist/runtime/diagnostics/message-flow.js +35 -5
  75. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  76. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  77. package/dist/runtime/execution/index.d.ts +4 -2
  78. package/dist/runtime/execution/index.js +33 -10
  79. package/dist/runtime/execution/serial-execution-queue.d.ts +4 -0
  80. package/dist/runtime/execution/serial-execution-queue.js +21 -2
  81. package/dist/runtime/execution/state-lane.d.ts +2 -0
  82. package/dist/runtime/execution/state-lane.js +5 -0
  83. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  84. package/dist/runtime/foundation/operation-registry.js +86 -18
  85. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +39 -3
  86. package/dist/runtime/foundation/raw-service-mesh-runtime.js +151 -55
  87. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  88. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  89. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  90. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  91. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -3
  92. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -35
  93. package/dist/runtime/foundation/service-relocation-runtime.js +7 -3
  94. package/dist/runtime/foundation/service-runtime-contracts.d.ts +8 -1
  95. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  96. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  97. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  98. package/dist/runtime/foundation/service-stateful-runtime.d.ts +72 -6
  99. package/dist/runtime/foundation/service-stateful-runtime.js +444 -117
  100. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -1
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  102. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  103. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  104. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  105. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  106. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +10 -0
  107. package/dist/runtime/foundation/service-wire-m6a-codec.js +166 -53
  108. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  109. package/dist/runtime/host/actor-packet-relay.js +59 -72
  110. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  111. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  112. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  113. package/dist/runtime/host/application-job-queue.d.ts +24 -3
  114. package/dist/runtime/host/application-job-queue.js +28 -41
  115. package/dist/runtime/host/index.d.ts +5 -1
  116. package/dist/runtime/host/index.js +171 -97
  117. package/dist/runtime/host/location-runtime-owner.js +2 -6
  118. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  119. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  120. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  121. package/dist/runtime/host/remote-bound-session-relay.js +71 -190
  122. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  123. package/dist/runtime/host/route-mesh-runtime.js +5 -3
  124. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  125. package/dist/runtime/host/runtime-shutdown.js +3 -2
  126. package/dist/runtime/host/service-relocation-host-runtime.d.ts +17 -7
  127. package/dist/runtime/host/service-relocation-host-runtime.js +550 -367
  128. package/dist/runtime/host/spot-runtime-options-factory.js +15 -7
  129. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  130. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  131. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  132. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  133. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  134. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  135. package/dist/runtime/locations/descriptor-publication.js +11 -0
  136. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  137. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  138. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  139. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  140. package/dist/runtime/locations/index.d.ts +1 -0
  141. package/dist/runtime/locations/index.js +1 -0
  142. package/dist/runtime/locations/lease-tracker.js +1 -6
  143. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  144. package/dist/runtime/locations/location-store-repository.js +363 -139
  145. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  146. package/dist/runtime/locations/relocation-blob.js +52 -1
  147. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  148. package/dist/runtime/locations/request-source-resolver.js +80 -0
  149. package/dist/runtime/locations/resolvers.js +1 -1
  150. package/dist/runtime/locations/runtime.d.ts +6 -2
  151. package/dist/runtime/locations/runtime.js +37 -30
  152. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  153. package/dist/runtime/messaging/payload-codec.js +7 -6
  154. package/dist/runtime/messaging/request-result.js +29 -26
  155. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +19 -1
  156. package/dist/runtime/protocol/service_wire_codec.generated.js +85 -0
  157. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +7 -1
  158. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +23 -7
  159. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +3 -2
  160. package/dist/runtime/spots/index.d.ts +18 -11
  161. package/dist/runtime/spots/index.js +234 -176
  162. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  163. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  164. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  165. package/dist/runtime/spots/spot-activation-state.js +7 -7
  166. package/dist/runtime/spots/spot-activation.d.ts +6 -3
  167. package/dist/runtime/spots/spot-activation.js +123 -44
  168. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  169. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  170. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  171. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  172. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  173. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  174. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  175. package/dist/runtime/spots/spot-entry-activation.js +14 -9
  176. package/dist/runtime/spots/spot-handler-registry.d.ts +4 -3
  177. package/dist/runtime/spots/spot-handler-registry.js +6 -2
  178. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  179. package/dist/runtime/spots/spot-manager-public.js +2 -2
  180. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  181. package/dist/runtime/spots/spot-node-autoconnect.js +18 -39
  182. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  183. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  184. package/dist/runtime/spots/spot-outbound.js +3 -3
  185. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  186. package/dist/runtime/spots/spot-runtime-ports.d.ts +0 -1
  187. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  188. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  189. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  190. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -1
  191. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  192. package/dist/runtime/spots/spot-timer.js +287 -103
  193. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  194. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  195. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  196. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  197. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  198. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  199. package/dist/runtime/streams/bound-session-service.js +6 -11
  200. package/dist/runtime/streams/index.d.ts +3 -2
  201. package/dist/runtime/streams/index.js +6 -4
  202. package/dist/runtime/streams/managed-stream.js +3 -2
  203. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  204. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  205. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  206. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  207. package/dist/runtime/streams/stream-session-runtime.js +1 -4
  208. package/dist/runtime/workers/index.js +1 -1
  209. package/package.json +3 -3
  210. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  211. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  212. package/src/contracts/Configuration/Builders.ts +4 -1
  213. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  214. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  215. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  216. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  217. package/src/contracts/Locations/Rows.ts +2 -0
  218. package/src/contracts/Spots/Contracts.ts +8 -0
  219. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  220. package/src/runtime/abort.ts +12 -0
  221. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  222. package/src/runtime/actors/actor-client.ts +61 -70
  223. package/src/runtime/actors/actor-context.ts +49 -9
  224. package/src/runtime/actors/actor-handoff.ts +282 -106
  225. package/src/runtime/actors/actor-join-relocation.ts +2 -0
  226. package/src/runtime/actors/actor-local-native-join.ts +4 -0
  227. package/src/runtime/actors/actor-mailbox.ts +40 -2
  228. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  229. package/src/runtime/actors/actor-reply.ts +42 -0
  230. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  231. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  232. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  233. package/src/runtime/actors/index.ts +41 -27
  234. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  235. package/src/runtime/admission.ts +69 -34
  236. package/src/runtime/application-jobs/application-job-queue-scope.ts +33 -1
  237. package/src/runtime/application-jobs/contracts.ts +2 -0
  238. package/src/runtime/backend/contracts/index.ts +39 -4
  239. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  240. package/src/runtime/backend/mesh-completion-table.ts +4 -0
  241. package/src/runtime/backend/mesh-dispatch-pump.ts +223 -124
  242. package/src/runtime/backend/node/node-raw-binding-port.ts +106 -70
  243. package/src/runtime/backend/node/node-raw-mesh-backend.ts +221 -170
  244. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -5
  245. package/src/runtime/channels/channel-clients.ts +49 -24
  246. package/src/runtime/channels/channel-dispatch-pipeline.ts +173 -124
  247. package/src/runtime/channels/channel-dispatchers.ts +116 -72
  248. package/src/runtime/channels/channel-envelope.ts +105 -36
  249. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  250. package/src/runtime/channels/channel-runtime-manager.ts +12 -5
  251. package/src/runtime/channels/channel-transports.ts +49 -58
  252. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  253. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  254. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  255. package/src/runtime/diagnostics/flow-context.ts +20 -7
  256. package/src/runtime/diagnostics/index.ts +1 -7
  257. package/src/runtime/diagnostics/message-flow.ts +47 -9
  258. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  259. package/src/runtime/execution/index.ts +40 -14
  260. package/src/runtime/execution/serial-execution-queue.ts +31 -4
  261. package/src/runtime/execution/state-lane.ts +7 -0
  262. package/src/runtime/foundation/operation-registry.ts +98 -20
  263. package/src/runtime/foundation/raw-service-mesh-runtime.ts +244 -67
  264. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  265. package/src/runtime/foundation/service-mailbox.ts +8 -0
  266. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  267. package/src/runtime/foundation/service-relocation-object-owner.ts +54 -37
  268. package/src/runtime/foundation/service-relocation-runtime.ts +7 -3
  269. package/src/runtime/foundation/service-runtime-contracts.ts +12 -1
  270. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  271. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  272. package/src/runtime/foundation/service-stateful-runtime.ts +667 -152
  273. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -11
  274. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  275. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  276. package/src/runtime/foundation/service-wire-m6a-codec.ts +187 -51
  277. package/src/runtime/host/actor-packet-relay.ts +113 -94
  278. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  279. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  280. package/src/runtime/host/application-job-queue.ts +29 -44
  281. package/src/runtime/host/index.ts +286 -129
  282. package/src/runtime/host/location-runtime-owner.ts +2 -6
  283. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  284. package/src/runtime/host/remote-bound-session-relay.ts +86 -248
  285. package/src/runtime/host/route-mesh-runtime.ts +11 -5
  286. package/src/runtime/host/runtime-shutdown.ts +15 -4
  287. package/src/runtime/host/service-relocation-host-runtime.ts +784 -475
  288. package/src/runtime/host/spot-runtime-options-factory.ts +18 -7
  289. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  290. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  291. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  292. package/src/runtime/locations/auto-connect-types.ts +0 -1
  293. package/src/runtime/locations/descriptor-publication.ts +7 -0
  294. package/src/runtime/locations/domain-store-contract.ts +5 -0
  295. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  296. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  297. package/src/runtime/locations/index.ts +1 -0
  298. package/src/runtime/locations/lease-tracker.ts +2 -9
  299. package/src/runtime/locations/location-store-repository.ts +628 -152
  300. package/src/runtime/locations/relocation-blob.ts +75 -1
  301. package/src/runtime/locations/request-source-resolver.ts +138 -0
  302. package/src/runtime/locations/resolvers.ts +2 -2
  303. package/src/runtime/locations/runtime.ts +70 -40
  304. package/src/runtime/messaging/payload-codec.ts +8 -11
  305. package/src/runtime/messaging/request-result.ts +33 -29
  306. package/src/runtime/protocol/service_wire_codec.generated.ts +87 -4
  307. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +13 -10
  308. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +3 -2
  309. package/src/runtime/spots/index.ts +375 -281
  310. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  311. package/src/runtime/spots/spot-activation-state.ts +12 -19
  312. package/src/runtime/spots/spot-activation.ts +170 -86
  313. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  314. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  315. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  316. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  317. package/src/runtime/spots/spot-entry-activation.ts +24 -19
  318. package/src/runtime/spots/spot-handler-registry.ts +15 -4
  319. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  320. package/src/runtime/spots/spot-manager-public.ts +2 -2
  321. package/src/runtime/spots/spot-node-autoconnect.ts +22 -45
  322. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  323. package/src/runtime/spots/spot-outbound.ts +3 -3
  324. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  325. package/src/runtime/spots/spot-runtime-ports.ts +0 -1
  326. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  327. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  328. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -1
  329. package/src/runtime/spots/spot-timer.ts +413 -157
  330. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  331. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  332. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  333. package/src/runtime/streams/bound-session-service.ts +7 -10
  334. package/src/runtime/streams/index.ts +12 -6
  335. package/src/runtime/streams/managed-stream.ts +4 -2
  336. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  337. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  338. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  339. package/src/runtime/streams/stream-session-runtime.ts +1 -5
  340. package/src/runtime/workers/index.ts +1 -1
@@ -330,9 +330,9 @@ export function wrapSocket<T extends { close(): void }>(
330
330
  );
331
331
  },
332
332
  disconnectPeer(routingId: unknown): void {
333
- disconnectStreamPeer(
333
+ disconnectSocketPeer(
334
334
  nativeInstance as T & { disconnectRid(value: unknown): void },
335
- routingId
335
+ toNativeRoutingId(routingId)
336
336
  );
337
337
  },
338
338
  async bindActor(
@@ -376,15 +376,15 @@ export function nodeEventLoopPollerOf(socket: object): ZLinkNodeEventLoopPoller
376
376
  return poller;
377
377
  }
378
378
 
379
- export function disconnectStreamPeer(
379
+ export function disconnectSocketPeer(
380
380
  socket: { disconnectRid(routingId: unknown): void },
381
381
  routingId: unknown
382
382
  ): void {
383
383
  try {
384
- socket.disconnectRid(toNativeRoutingId(routingId));
384
+ socket.disconnectRid(routingId);
385
385
  } catch (error) {
386
386
  // An absent RID has already completed the physical close. The existing
387
- // session lifecycle still owns local cleanup and unbind.
387
+ // logical lifecycle still owns local cleanup and unbind.
388
388
  if (!isBindingNotFound(error)) throw error;
389
389
  }
390
390
  }
@@ -177,8 +177,14 @@ interface PreparedNodeSend {
177
177
  ) => ZLinkSubmitResult | Promise<ZLinkSubmitResult>;
178
178
  }
179
179
 
180
+ interface PreparedNodeRequest {
181
+ readonly validate: () => void;
182
+ readonly submit: ZLinkRequestSubmitter;
183
+ }
184
+
180
185
  export class DefaultZLinkRouteClient implements ZLinkRouteClient {
181
186
  private readonly nodeSends = new Map<string, Map<string, PreparedNodeSend>>();
187
+ private readonly nodeRequests = new Map<string, Map<string, PreparedNodeRequest>>();
182
188
  constructor(
183
189
  private readonly registration: ZLinkFrameworkRegistration,
184
190
  private readonly transport?: ZLinkRouteClientTransport,
@@ -207,20 +213,31 @@ export class DefaultZLinkRouteClient implements ZLinkRouteClient {
207
213
  }
208
214
 
209
215
  requestToNode(meshName: string, targetNodeRid: string, request: unknown): ZLinkRequestCall {
216
+ let targets = this.nodeRequests.get(meshName);
217
+ if (targets === undefined) this.nodeRequests.set(meshName, (targets = new Map()));
218
+ let prepared = targets.get(targetNodeRid);
219
+ if (prepared === undefined) {
220
+ prepared = {
221
+ validate: () => this.requireMesh(meshName),
222
+ submit: (packetName, timeoutMs, metadata, signal, onAdmitted, message) =>
223
+ this.requireTransport().request(
224
+ meshName,
225
+ targetNodeRid,
226
+ packetName,
227
+ message,
228
+ timeoutMs,
229
+ signal,
230
+ metadata,
231
+ onAdmitted
232
+ )
233
+ };
234
+ targets.set(targetNodeRid, prepared);
235
+ }
210
236
  return new DefaultZLinkRequestCall(
211
- () => this.requireMesh(meshName),
212
- (packetName, timeoutMs, metadata, signal, onAdmitted) =>
213
- this.requireTransport().request(
214
- meshName,
215
- targetNodeRid,
216
- packetName,
217
- request,
218
- timeoutMs,
219
- signal,
220
- metadata,
221
- onAdmitted
222
- ),
223
- this.defaultRequestTimeout(meshName)
237
+ prepared.validate,
238
+ prepared.submit,
239
+ this.defaultRequestTimeout(meshName),
240
+ request
224
241
  );
225
242
  }
226
243
 
@@ -504,21 +521,26 @@ function normalizeSubmitResult(
504
521
  : (result ?? submittedResult);
505
522
  }
506
523
 
524
+ type ZLinkRequestSubmitter = <TReply>(
525
+ packetName: string | undefined,
526
+ timeoutMs: number | undefined,
527
+ metadata: ReadonlyMap<string, string>,
528
+ signal?: AbortSignal,
529
+ onAdmitted?: () => void,
530
+ message?: unknown
531
+ ) => Promise<TReply>;
532
+
507
533
  class DefaultZLinkRequestCall implements ZLinkChannelRequestCall {
508
534
  private timeoutMs?: number;
509
535
  private selectedMetadata?: Map<string, string>;
510
536
  private readonly turn: ZLinkSpotSerialTurn | undefined = captureZLinkSpotSerialTurn();
511
537
 
538
+ /** `message` is the request payload a prepared submitter receives per call. */
512
539
  constructor(
513
540
  private readonly validate: () => void,
514
- private readonly submitter: <TReply>(
515
- packetName: string | undefined,
516
- timeoutMs: number | undefined,
517
- metadata: ReadonlyMap<string, string>,
518
- signal?: AbortSignal,
519
- onAdmitted?: () => void
520
- ) => Promise<TReply>,
521
- private readonly defaultRequestTimeoutMs?: number
541
+ private readonly submitter: ZLinkRequestSubmitter,
542
+ private readonly defaultRequestTimeoutMs?: number,
543
+ private readonly message?: unknown
522
544
  ) {}
523
545
 
524
546
  metadata(key: string, value: string): this;
@@ -549,7 +571,8 @@ class DefaultZLinkRequestCall implements ZLinkChannelRequestCall {
549
571
  this.timeoutMs ?? this.defaultRequestTimeoutMs,
550
572
  this.selectedMetadata === undefined ? EMPTY_CALL_METADATA : new Map(this.selectedMetadata),
551
573
  signal,
552
- onAdmitted
574
+ onAdmitted,
575
+ this.message
553
576
  );
554
577
  });
555
578
  }
@@ -562,9 +585,11 @@ class DefaultZLinkRequestCall implements ZLinkChannelRequestCall {
562
585
  undefined,
563
586
  this.timeoutMs ?? this.defaultRequestTimeoutMs,
564
587
  this.selectedMetadata === undefined ? EMPTY_CALL_METADATA : new Map(this.selectedMetadata),
565
- signal
588
+ signal,
589
+ undefined,
590
+ this.message
566
591
  );
567
- return turn.yieldPromise(pending);
592
+ return turn.yieldFrameworkPromise(pending);
568
593
  }
569
594
  }
570
595
 
@@ -1,8 +1,10 @@
1
+ import type { ZLinkMeshDispatchAdmission } from '../admission';
1
2
  import {
2
3
  ZLinkFrameworkInternalErrorKind,
3
4
  createInternalFrameworkException,
4
5
  internalFrameworkErrorKind
5
6
  } from '../framework-errors-internal';
7
+ import { isPromiseLike } from '../abort';
6
8
  import type {
7
9
  ZLinkMessageContext,
8
10
  ZLinkHandlerFilter,
@@ -65,7 +67,7 @@ interface ZLinkOneWayDispatch<TContext extends ZLinkMessageContext> {
65
67
  readonly signal?: AbortSignal;
66
68
  }
67
69
 
68
- interface ZLinkRequestDispatch<TContext extends ZLinkMessageContext> {
70
+ export interface ZLinkRequestDispatch<TContext extends ZLinkMessageContext> {
69
71
  readonly fields: ZLinkChannelDispatchFields;
70
72
  readonly envelope: ZLinkChannelEnvelope;
71
73
  readonly codecs?: ZLinkChannelEnvelopeCodecRegistry;
@@ -86,158 +88,205 @@ export class ZLinkChannelDispatchPipeline {
86
88
  this.unhandled = options.unhandled ?? DEFAULT_UNHANDLED_DISPATCH;
87
89
  }
88
90
 
89
- async dispatchOneWay<TContext extends ZLinkMessageContext>(
90
- dispatch: ZLinkOneWayDispatch<TContext>
91
- ): Promise<void> {
91
+ /**
92
+ * Runs the handler in the caller's execution turn. A synchronous handler
93
+ * completes here; an asynchronous handler adds exactly one continuation
94
+ * for its terminal trace or error record.
95
+ */
96
+ dispatchOneWay<TContext extends ZLinkMessageContext>(
97
+ dispatch: ZLinkOneWayDispatch<TContext>,
98
+ admit?: ZLinkMeshDispatchAdmission
99
+ ): void | Promise<void> {
100
+ if (admit !== undefined) {
101
+ const pipeline = this;
102
+ const record = dispatch;
103
+ return admit(
104
+ () => pipeline.dispatchOneWay(record),
105
+ (error) => pipeline.failOneWay(record.fields, error)
106
+ );
107
+ }
92
108
  this.trace(ZLinkMessageFlowOutcome.Received, dispatch.fields);
93
109
  this.trace(ZLinkMessageFlowOutcome.Admitted, dispatch.fields);
94
- if (dispatch.handler === undefined) {
95
- const action =
96
- dispatch.fields.messageKind === ZLinkDispatchMessageKind.Publish
97
- ? this.unhandled.publish
98
- : this.unhandled.send;
99
- this.report(
100
- dispatch.fields,
101
- ZLinkDispatchErrorReason.HandlerMissing,
102
- ZLinkDispatchErrorAction.Drop
103
- );
104
- this.applyOneWayUnhandled(action, dispatch.fields);
110
+ if (dispatch.handler === undefined) return this.dispatchMissingOneWay(dispatch.fields);
111
+ let invocation: unknown;
112
+ try {
113
+ invocation = this.invokeInFlow(dispatch, dispatch.handler);
114
+ } catch (error) {
115
+ this.failOneWay(dispatch.fields, error);
116
+ return;
117
+ }
118
+ if (!isPromiseLike(invocation)) {
119
+ this.completeOneWay(dispatch.fields, invocation);
105
120
  return;
106
121
  }
122
+ return Promise.resolve(invocation).then(
123
+ (value) => this.completeOneWay(dispatch.fields, value),
124
+ (error: unknown) => this.failOneWay(dispatch.fields, error)
125
+ );
126
+ }
107
127
 
108
- try {
109
- const flow = createInboundFlow(
110
- dispatch.fields.flowId,
111
- dispatch.fields.flowOrigin,
112
- this.options.dispatchErrors.flow.flowCreationEnabled(),
113
- undefined
114
- );
115
- const invocation = await (flow === undefined
116
- ? this.invoke(
117
- dispatch.envelope,
118
- dispatch.codecs,
119
- dispatch.handler,
120
- dispatch.context,
121
- dispatch.fields,
122
- dispatch.signal
123
- )
124
- : runWithFlow(flow, () =>
125
- this.invoke(
126
- dispatch.envelope,
127
- dispatch.codecs,
128
- dispatch.handler!,
129
- dispatch.context,
130
- dispatch.fields,
131
- dispatch.signal
132
- )
133
- ));
128
+ private async dispatchMissingOneWay(fields: ZLinkChannelDispatchFields): Promise<void> {
129
+ const action =
130
+ fields.messageKind === ZLinkDispatchMessageKind.Publish
131
+ ? this.unhandled.publish
132
+ : this.unhandled.send;
133
+ this.report(fields, ZLinkDispatchErrorReason.HandlerMissing, ZLinkDispatchErrorAction.Drop);
134
+ this.applyOneWayUnhandled(action, fields);
135
+ }
134
136
 
135
- if (invocation !== HANDLER_FILTER_REJECTED) {
136
- this.trace(ZLinkMessageFlowOutcome.Completed, dispatch.fields);
137
- }
137
+ private completeOneWay(fields: ZLinkChannelDispatchFields, invocation: unknown): void {
138
+ if (invocation !== HANDLER_FILTER_REJECTED) {
139
+ this.trace(ZLinkMessageFlowOutcome.Completed, fields);
140
+ }
141
+ }
142
+
143
+ private failOneWay(fields: ZLinkChannelDispatchFields, error: unknown): void {
144
+ this.report(fields, this.failureReason(error), ZLinkDispatchErrorAction.Drop, error);
145
+ }
146
+
147
+ /**
148
+ * Runs the handler in the caller's execution turn and writes its reply in
149
+ * the same turn when the handler completes synchronously. An asynchronous
150
+ * handler adds exactly one continuation that writes the reply.
151
+ */
152
+ dispatchRequest<TContext extends ZLinkMessageContext>(
153
+ dispatch: ZLinkRequestDispatch<TContext>,
154
+ admit?: ZLinkMeshDispatchAdmission
155
+ ): void | Promise<void> {
156
+ if (admit !== undefined) {
157
+ const pipeline = this;
158
+ const record = dispatch;
159
+ return admit(
160
+ () => pipeline.dispatchRequest(record),
161
+ (error) => pipeline.failRequest(record, error)
162
+ );
163
+ }
164
+ this.trace(ZLinkMessageFlowOutcome.Received, dispatch.fields);
165
+ this.trace(ZLinkMessageFlowOutcome.Admitted, dispatch.fields);
166
+ if (dispatch.handler === undefined) return this.dispatchMissingRequest(dispatch);
167
+ let invocation: unknown;
168
+ try {
169
+ invocation = this.invokeInFlow(dispatch, dispatch.handler);
138
170
  } catch (error) {
139
- this.report(dispatch.fields, this.failureReason(error), ZLinkDispatchErrorAction.Drop, error);
171
+ return this.failRequest(dispatch, error);
140
172
  }
173
+ if (!isPromiseLike(invocation)) return this.completeRequest(dispatch, invocation);
174
+ return Promise.resolve(invocation).then(
175
+ (value) => this.completeRequest(dispatch, value),
176
+ (error: unknown) => this.failRequest(dispatch, error)
177
+ );
141
178
  }
142
179
 
143
- async dispatchRequest<TContext extends ZLinkMessageContext>(
180
+ private async dispatchMissingRequest<TContext extends ZLinkMessageContext>(
144
181
  dispatch: ZLinkRequestDispatch<TContext>
145
182
  ): Promise<void> {
146
- this.trace(ZLinkMessageFlowOutcome.Received, dispatch.fields);
147
- this.trace(ZLinkMessageFlowOutcome.Admitted, dispatch.fields);
148
- if (dispatch.handler === undefined) {
149
- const missing = createInternalFrameworkException(
150
- ZLinkFrameworkInternalErrorKind.HandlerNotFound,
151
- dispatch.missingHandlerMessage
152
- );
153
- if (this.unhandled.request === ZLinkUnhandledDispatchAction.ReplyError) {
154
- await dispatch.writeError(missing);
155
- }
156
- this.report(
157
- dispatch.fields,
158
- ZLinkDispatchErrorReason.HandlerMissing,
159
- this.unhandled.request === ZLinkUnhandledDispatchAction.ReplyError
160
- ? ZLinkDispatchErrorAction.ReplyError
161
- : ZLinkDispatchErrorAction.Drop
162
- );
163
- if (this.unhandled.request === ZLinkUnhandledDispatchAction.Throw) {
164
- throw missing;
165
- }
166
- return;
183
+ const missing = createInternalFrameworkException(
184
+ ZLinkFrameworkInternalErrorKind.HandlerNotFound,
185
+ dispatch.missingHandlerMessage
186
+ );
187
+ if (this.unhandled.request === ZLinkUnhandledDispatchAction.ReplyError) {
188
+ await dispatch.writeError(missing);
189
+ }
190
+ this.report(
191
+ dispatch.fields,
192
+ ZLinkDispatchErrorReason.HandlerMissing,
193
+ this.unhandled.request === ZLinkUnhandledDispatchAction.ReplyError
194
+ ? ZLinkDispatchErrorAction.ReplyError
195
+ : ZLinkDispatchErrorAction.Drop
196
+ );
197
+ if (this.unhandled.request === ZLinkUnhandledDispatchAction.Throw) {
198
+ throw missing;
167
199
  }
200
+ }
168
201
 
169
- let reply: unknown;
170
- try {
171
- const flow = createInboundFlow(
172
- dispatch.fields.flowId,
173
- dispatch.fields.flowOrigin,
174
- this.options.dispatchErrors.flow.flowCreationEnabled(),
175
- undefined
176
- );
177
- const invocation = await (flow === undefined
178
- ? this.invoke(
202
+ private invokeInFlow<TContext extends ZLinkMessageContext, TResult>(
203
+ dispatch: ZLinkOneWayDispatch<TContext> | ZLinkRequestDispatch<TContext>,
204
+ handler: ZLinkChannelDispatchHandler<TContext, TResult>
205
+ ): unknown {
206
+ const flow = createInboundFlow(
207
+ dispatch.fields.flowId,
208
+ dispatch.fields.flowOrigin,
209
+ this.options.dispatchErrors.flow.flowCreationEnabled(),
210
+ undefined
211
+ );
212
+ return flow === undefined
213
+ ? this.invoke(
214
+ dispatch.envelope,
215
+ dispatch.codecs,
216
+ handler,
217
+ dispatch.context,
218
+ dispatch.fields,
219
+ dispatch.signal
220
+ )
221
+ : runWithFlow(flow, () =>
222
+ this.invoke(
179
223
  dispatch.envelope,
180
224
  dispatch.codecs,
181
- dispatch.handler,
225
+ handler,
182
226
  dispatch.context,
183
227
  dispatch.fields,
184
228
  dispatch.signal
185
229
  )
186
- : runWithFlow(flow, () =>
187
- this.invoke(
188
- dispatch.envelope,
189
- dispatch.codecs,
190
- dispatch.handler!,
191
- dispatch.context,
192
- dispatch.fields,
193
- dispatch.signal
194
- )
195
- ));
230
+ );
231
+ }
196
232
 
197
- if (invocation === HANDLER_FILTER_REJECTED) {
198
- throw createInternalFrameworkException(
233
+ private completeRequest<TContext extends ZLinkMessageContext>(
234
+ dispatch: ZLinkRequestDispatch<TContext>,
235
+ invocation: unknown
236
+ ): void | Promise<void> {
237
+ if (invocation === HANDLER_FILTER_REJECTED) {
238
+ return this.failRequest(
239
+ dispatch,
240
+ createInternalFrameworkException(
199
241
  ZLinkFrameworkInternalErrorKind.RequestRejected,
200
242
  `A handler filter rejected '${this.options.channelName}:${dispatch.fields.packetName}'.`
201
- );
202
- }
203
- reply = invocation;
204
- } catch (error) {
205
- try {
206
- await dispatch.writeError(error);
207
- } catch (replyError) {
208
- // Spec 26 §3.1: a failed reply write means the reply delivery path is
209
- // gone; `unexpected_reply` names a surplus/late reply instead.
210
- this.report(
211
- dispatch.fields,
212
- ZLinkDispatchErrorReason.ReplyPathMissing,
213
- ZLinkDispatchErrorAction.Drop,
214
- replyError
215
- );
216
- return;
217
- }
218
- this.report(
219
- dispatch.fields,
220
- this.failureReason(error),
221
- ZLinkDispatchErrorAction.ReplyError,
222
- error
243
+ )
223
244
  );
245
+ }
246
+ let written: void | Promise<void>;
247
+ try {
248
+ written = dispatch.writeReply(invocation);
249
+ } catch (error) {
250
+ this.replyPathMissing(dispatch.fields, error);
251
+ return;
252
+ }
253
+ if (written === undefined) {
254
+ this.trace(ZLinkMessageFlowOutcome.Replied, dispatch.fields);
224
255
  return;
225
256
  }
257
+ return written.then(
258
+ () => this.trace(ZLinkMessageFlowOutcome.Replied, dispatch.fields),
259
+ (error: unknown) => this.replyPathMissing(dispatch.fields, error)
260
+ );
261
+ }
226
262
 
263
+ private replyPathMissing(fields: ZLinkChannelDispatchFields, error: unknown): void {
264
+ // Spec 26 §3.1: a failed reply write means the reply delivery path is
265
+ // gone; `unexpected_reply` names a surplus/late reply instead.
266
+ this.report(
267
+ fields,
268
+ ZLinkDispatchErrorReason.ReplyPathMissing,
269
+ ZLinkDispatchErrorAction.Drop,
270
+ error
271
+ );
272
+ }
273
+
274
+ private async failRequest<TContext extends ZLinkMessageContext>(
275
+ dispatch: ZLinkRequestDispatch<TContext>,
276
+ error: unknown
277
+ ): Promise<void> {
227
278
  try {
228
- const written = dispatch.writeReply(reply);
229
- if (written !== undefined) await written;
230
- this.trace(ZLinkMessageFlowOutcome.Replied, dispatch.fields);
231
- } catch (error) {
232
- // Spec 26 §3.1: a failed reply write means the reply delivery path is
233
- // gone; `unexpected_reply` names a surplus/late reply instead.
234
- this.report(
235
- dispatch.fields,
236
- ZLinkDispatchErrorReason.ReplyPathMissing,
237
- ZLinkDispatchErrorAction.Drop,
238
- error
239
- );
279
+ await dispatch.writeError(error);
280
+ } catch (replyError) {
281
+ this.replyPathMissing(dispatch.fields, replyError);
282
+ return;
240
283
  }
284
+ this.report(
285
+ dispatch.fields,
286
+ this.failureReason(error),
287
+ ZLinkDispatchErrorAction.ReplyError,
288
+ error
289
+ );
241
290
  }
242
291
 
243
292
  dropMissingReplyPath(fields: ZLinkChannelDispatchFields): void {