@zlink-systems/framework 0.30.3 → 0.32.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 (398) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActor.d.ts +2 -0
  3. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
  4. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
  5. package/dist/contracts/Actors/index.d.ts +1 -0
  6. package/dist/contracts/Actors/index.js +1 -0
  7. package/dist/contracts/Common/CoreTypes.d.ts +1 -0
  8. package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
  9. package/dist/contracts/Common/HandlerMessageType.js +41 -0
  10. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
  11. package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
  12. package/dist/contracts/Common/ZLinkMessage.js +11 -7
  13. package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
  14. package/dist/contracts/Common/encoded-payload-storage.js +4 -16
  15. package/dist/contracts/Common/index.d.ts +1 -1
  16. package/dist/contracts/Common/payload-slab.d.ts +4 -0
  17. package/dist/contracts/Common/payload-slab.js +30 -0
  18. package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
  19. package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
  20. package/dist/contracts/Handlers/Contexts.d.ts +1 -0
  21. package/dist/contracts/Locations/Authority.d.ts +2 -0
  22. package/dist/internal.d.ts +9 -0
  23. package/dist/internal.js +23 -1
  24. package/dist/nest-integration.d.ts +1 -0
  25. package/dist/nest-integration.js +3 -1
  26. package/dist/runtime/actors/actor-client.d.ts +6 -2
  27. package/dist/runtime/actors/actor-client.js +120 -82
  28. package/dist/runtime/actors/actor-context.js +16 -5
  29. package/dist/runtime/actors/actor-execution-context.js +2 -2
  30. package/dist/runtime/actors/actor-handoff.d.ts +12 -1
  31. package/dist/runtime/actors/actor-handoff.js +79 -34
  32. package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
  33. package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
  34. package/dist/runtime/actors/actor-local-native-join.js +19 -17
  35. package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
  36. package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
  37. package/dist/runtime/actors/actor-remote-joiner.js +4 -4
  38. package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
  39. package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
  40. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
  41. package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
  42. package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
  43. package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
  44. package/dist/runtime/admission.d.ts +6 -4
  45. package/dist/runtime/admission.js +21 -10
  46. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
  47. package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
  48. package/dist/runtime/backend/contracts/index.d.ts +26 -10
  49. package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
  50. package/dist/runtime/backend/mesh-completion-table.js +84 -20
  51. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
  52. package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
  53. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
  54. package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
  55. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
  56. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
  57. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  58. package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
  59. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
  60. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
  61. package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
  62. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
  63. package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
  64. package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
  65. package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
  66. package/dist/runtime/channels/channel-clients.js +3 -3
  67. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
  68. package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
  69. package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
  70. package/dist/runtime/channels/channel-dispatch-services.js +7 -6
  71. package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
  72. package/dist/runtime/channels/channel-dispatchers.js +57 -36
  73. package/dist/runtime/channels/channel-envelope.d.ts +2 -2
  74. package/dist/runtime/channels/channel-envelope.js +609 -83
  75. package/dist/runtime/channels/channel-multipart.d.ts +1 -0
  76. package/dist/runtime/channels/channel-multipart.js +10 -6
  77. package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
  78. package/dist/runtime/channels/channel-outbound-operations.js +107 -105
  79. package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
  80. package/dist/runtime/channels/channel-receive-loops.js +126 -90
  81. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
  82. package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
  83. package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
  84. package/dist/runtime/channels/channel-runtime-manager.js +32 -14
  85. package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
  86. package/dist/runtime/channels/channel-socket-registry.js +9 -1
  87. package/dist/runtime/channels/channel-transports.d.ts +23 -16
  88. package/dist/runtime/channels/channel-transports.js +139 -119
  89. package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
  90. package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
  91. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  92. package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
  93. package/dist/runtime/channels/local-spot-route-transport.js +15 -18
  94. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
  95. package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
  96. package/dist/runtime/channels/source-spot-router.d.ts +6 -3
  97. package/dist/runtime/channels/source-spot-router.js +34 -23
  98. package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
  99. package/dist/runtime/channels/spot-node-route-transport.js +23 -17
  100. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
  101. package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
  102. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
  103. package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
  104. package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
  105. package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
  106. package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
  107. package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
  108. package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
  109. package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
  110. package/dist/runtime/diagnostics/message-flow-record.js +228 -0
  111. package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
  112. package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
  113. package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
  114. package/dist/runtime/diagnostics/message-flow.js +42 -290
  115. package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
  116. package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
  117. package/dist/runtime/execution/index.d.ts +1 -0
  118. package/dist/runtime/execution/index.js +6 -3
  119. package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
  120. package/dist/runtime/execution/serial-execution-queue.js +75 -71
  121. package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
  122. package/dist/runtime/foundation/durable-service-request.js +158 -73
  123. package/dist/runtime/foundation/operation-registry.d.ts +33 -3
  124. package/dist/runtime/foundation/operation-registry.js +272 -33
  125. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
  126. package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
  127. package/dist/runtime/foundation/request-runtime.d.ts +17 -0
  128. package/dist/runtime/foundation/request-runtime.js +163 -0
  129. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  130. package/dist/runtime/foundation/service-discovery-registry.js +6 -0
  131. package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
  132. package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
  133. package/dist/runtime/foundation/service-mailbox.js +4 -1
  134. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
  135. package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
  136. package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
  137. package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
  138. package/dist/runtime/foundation/service-stateful-registry.js +38 -17
  139. package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
  140. package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
  141. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
  142. package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
  143. package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
  144. package/dist/runtime/foundation/service-topology-registry.js +13 -3
  145. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  146. package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
  147. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
  148. package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
  149. package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
  150. package/dist/runtime/host/actor-packet-relay.js +58 -57
  151. package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
  152. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  153. package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
  154. package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
  155. package/dist/runtime/host/application-job-queue.d.ts +7 -5
  156. package/dist/runtime/host/application-job-queue.js +33 -21
  157. package/dist/runtime/host/bound-session-relay.js +0 -1
  158. package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
  159. package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
  160. package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
  161. package/dist/runtime/host/entry-actor-runtime.js +2 -2
  162. package/dist/runtime/host/index.d.ts +106 -37
  163. package/dist/runtime/host/index.js +303 -151
  164. package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
  165. package/dist/runtime/host/location-runtime-owner.js +1 -1
  166. package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
  167. package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
  168. package/dist/runtime/host/spot-address-transport.d.ts +3 -0
  169. package/dist/runtime/host/spot-address-transport.js +73 -76
  170. package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
  171. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
  172. package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
  173. package/dist/runtime/internal-observation.d.ts +1 -0
  174. package/dist/runtime/internal-observation.js +5 -0
  175. package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
  176. package/dist/runtime/locations/actor-location-claims.js +15 -6
  177. package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
  178. package/dist/runtime/locations/auto-connect-loop.js +25 -19
  179. package/dist/runtime/locations/auto-connect-planner.js +2 -5
  180. package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
  181. package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
  182. package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
  183. package/dist/runtime/locations/in-memory-authority-store.js +15 -5
  184. package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
  185. package/dist/runtime/locations/in-memory-location-store.js +1 -38
  186. package/dist/runtime/locations/lifecycle.d.ts +1 -1
  187. package/dist/runtime/locations/lifecycle.js +2 -2
  188. package/dist/runtime/locations/location-store-repository.d.ts +0 -1
  189. package/dist/runtime/locations/location-store-repository.js +163 -246
  190. package/dist/runtime/locations/resolvers.d.ts +8 -1
  191. package/dist/runtime/locations/resolvers.js +16 -2
  192. package/dist/runtime/locations/runtime.d.ts +3 -3
  193. package/dist/runtime/locations/runtime.js +12 -16
  194. package/dist/runtime/messaging/creation-payload-codec.js +8 -7
  195. package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
  196. package/dist/runtime/messaging/framework-json-v1.js +6 -2
  197. package/dist/runtime/messaging/payload-codec.js +21 -35
  198. package/dist/runtime/messaging/request-deadline.d.ts +4 -2
  199. package/dist/runtime/messaging/request-deadline.js +40 -25
  200. package/dist/runtime/messaging/request-result.d.ts +14 -1
  201. package/dist/runtime/messaging/request-result.js +74 -13
  202. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
  203. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
  204. package/dist/runtime/spots/index.d.ts +28 -7
  205. package/dist/runtime/spots/index.js +31 -6
  206. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
  207. package/dist/runtime/spots/spot-activation-registry.js +13 -8
  208. package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
  209. package/dist/runtime/spots/spot-activation-state.js +1 -0
  210. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
  211. package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
  212. package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
  213. package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
  214. package/dist/runtime/spots/spot-actor-membership.js +3 -3
  215. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
  216. package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
  217. package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
  218. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
  219. package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
  220. package/dist/runtime/spots/spot-entry-activation.js +7 -12
  221. package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
  222. package/dist/runtime/spots/spot-handler-registry.js +31 -15
  223. package/dist/runtime/spots/spot-manager-public.js +3 -2
  224. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
  225. package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
  226. package/dist/runtime/spots/spot-outbound.d.ts +8 -2
  227. package/dist/runtime/spots/spot-outbound.js +5 -5
  228. package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
  229. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
  230. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
  231. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
  232. package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
  233. package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
  234. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
  235. package/dist/runtime/spots/spot-timer.d.ts +1 -1
  236. package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
  237. package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
  238. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
  239. package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
  240. package/dist/runtime/streams/bound-session-service.js +6 -7
  241. package/dist/runtime/streams/index.d.ts +3 -3
  242. package/dist/runtime/streams/index.js +22 -2
  243. package/dist/runtime/streams/managed-stream.js +2 -1
  244. package/dist/runtime/streams/session-calls.d.ts +1 -1
  245. package/dist/runtime/streams/session-calls.js +3 -9
  246. package/dist/runtime/streams/session-context.d.ts +2 -2
  247. package/dist/runtime/streams/session-context.js +2 -2
  248. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
  249. package/dist/runtime/streams/stream-session-runtime.js +64 -33
  250. package/package.json +3 -3
  251. package/src/contracts/Actors/ZLinkActor.ts +6 -0
  252. package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
  253. package/src/contracts/Actors/index.ts +1 -0
  254. package/src/contracts/Common/CoreTypes.ts +1 -0
  255. package/src/contracts/Common/HandlerMessageType.ts +50 -0
  256. package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
  257. package/src/contracts/Common/ZLinkMessage.ts +11 -7
  258. package/src/contracts/Common/encoded-payload-storage.ts +4 -16
  259. package/src/contracts/Common/index.ts +1 -1
  260. package/src/contracts/Common/payload-slab.ts +29 -0
  261. package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
  262. package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
  263. package/src/contracts/Handlers/Contexts.ts +1 -0
  264. package/src/contracts/Locations/Authority.ts +7 -1
  265. package/src/internal.ts +17 -0
  266. package/src/nest-integration.ts +1 -0
  267. package/src/runtime/actors/actor-client.ts +257 -163
  268. package/src/runtime/actors/actor-context.ts +26 -14
  269. package/src/runtime/actors/actor-execution-context.ts +2 -2
  270. package/src/runtime/actors/actor-handoff.ts +86 -51
  271. package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
  272. package/src/runtime/actors/actor-local-native-join.ts +38 -17
  273. package/src/runtime/actors/actor-mailbox.ts +1 -1
  274. package/src/runtime/actors/actor-remote-joiner.ts +8 -4
  275. package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
  276. package/src/runtime/actors/actor-routed-json-request.ts +3 -0
  277. package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
  278. package/src/runtime/actors/actor-runtime-state.ts +1 -1
  279. package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
  280. package/src/runtime/admission.ts +42 -15
  281. package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
  282. package/src/runtime/backend/contracts/index.ts +77 -10
  283. package/src/runtime/backend/mesh-completion-table.ts +106 -15
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
  285. package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
  286. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
  287. package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
  288. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
  289. package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
  290. package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
  291. package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
  292. package/src/runtime/backend/raw-binding-port.ts +13 -5
  293. package/src/runtime/channels/channel-clients.ts +26 -11
  294. package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
  295. package/src/runtime/channels/channel-dispatch-services.ts +7 -12
  296. package/src/runtime/channels/channel-dispatchers.ts +93 -39
  297. package/src/runtime/channels/channel-envelope.ts +680 -144
  298. package/src/runtime/channels/channel-multipart.ts +17 -13
  299. package/src/runtime/channels/channel-outbound-operations.ts +204 -178
  300. package/src/runtime/channels/channel-receive-loops.ts +160 -107
  301. package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
  302. package/src/runtime/channels/channel-runtime-manager.ts +74 -27
  303. package/src/runtime/channels/channel-socket-registry.ts +20 -5
  304. package/src/runtime/channels/channel-transports.ts +414 -287
  305. package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
  306. package/src/runtime/channels/local-spot-route-transport.ts +27 -29
  307. package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
  308. package/src/runtime/channels/source-spot-router.ts +75 -38
  309. package/src/runtime/channels/spot-node-route-transport.ts +67 -37
  310. package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
  311. package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
  312. package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
  313. package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
  314. package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
  315. package/src/runtime/diagnostics/message-flow-record.ts +295 -0
  316. package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
  317. package/src/runtime/diagnostics/message-flow.ts +49 -362
  318. package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
  319. package/src/runtime/execution/index.ts +6 -0
  320. package/src/runtime/execution/serial-execution-queue.ts +94 -96
  321. package/src/runtime/foundation/durable-service-request.ts +212 -89
  322. package/src/runtime/foundation/operation-registry.ts +287 -38
  323. package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
  324. package/src/runtime/foundation/request-runtime.ts +227 -0
  325. package/src/runtime/foundation/service-discovery-registry.ts +7 -0
  326. package/src/runtime/foundation/service-liveness-registry.ts +1 -1
  327. package/src/runtime/foundation/service-mailbox.ts +7 -2
  328. package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
  329. package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
  330. package/src/runtime/foundation/service-stateful-registry.ts +52 -19
  331. package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
  332. package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
  333. package/src/runtime/foundation/service-topology-registry.ts +21 -3
  334. package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
  335. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
  336. package/src/runtime/host/actor-packet-relay.ts +160 -156
  337. package/src/runtime/host/actor-placement-coordinator.ts +1 -1
  338. package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
  339. package/src/runtime/host/actor-transfer-runtime.ts +3 -3
  340. package/src/runtime/host/application-job-queue.ts +56 -27
  341. package/src/runtime/host/bound-session-relay.ts +0 -1
  342. package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
  343. package/src/runtime/host/entry-actor-runtime.ts +14 -6
  344. package/src/runtime/host/index.ts +388 -113
  345. package/src/runtime/host/location-runtime-owner.ts +3 -3
  346. package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
  347. package/src/runtime/host/spot-address-transport.ts +110 -95
  348. package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
  349. package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
  350. package/src/runtime/internal-observation.ts +2 -0
  351. package/src/runtime/locations/actor-location-claims.ts +42 -16
  352. package/src/runtime/locations/auto-connect-loop.ts +24 -16
  353. package/src/runtime/locations/auto-connect-planner.ts +2 -5
  354. package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
  355. package/src/runtime/locations/in-memory-authority-store.ts +27 -7
  356. package/src/runtime/locations/in-memory-location-store.ts +1 -74
  357. package/src/runtime/locations/lifecycle.ts +4 -2
  358. package/src/runtime/locations/location-store-repository.ts +228 -308
  359. package/src/runtime/locations/resolvers.ts +20 -8
  360. package/src/runtime/locations/runtime.ts +16 -28
  361. package/src/runtime/messaging/creation-payload-codec.ts +12 -10
  362. package/src/runtime/messaging/framework-json-v1.ts +10 -1
  363. package/src/runtime/messaging/payload-codec.ts +50 -75
  364. package/src/runtime/messaging/request-deadline.ts +47 -39
  365. package/src/runtime/messaging/request-result.ts +88 -17
  366. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  367. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  368. package/src/runtime/spots/index.ts +57 -10
  369. package/src/runtime/spots/spot-activation-registry.ts +12 -8
  370. package/src/runtime/spots/spot-activation-state.ts +2 -0
  371. package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
  372. package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
  373. package/src/runtime/spots/spot-actor-membership.ts +8 -5
  374. package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
  375. package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
  376. package/src/runtime/spots/spot-entry-activation.ts +25 -35
  377. package/src/runtime/spots/spot-handler-registry.ts +72 -15
  378. package/src/runtime/spots/spot-manager-public.ts +4 -2
  379. package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
  380. package/src/runtime/spots/spot-outbound.ts +26 -10
  381. package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
  382. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
  383. package/src/runtime/spots/spot-runtime-ports.ts +5 -2
  384. package/src/runtime/spots/spot-serial-executor.ts +1 -1
  385. package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
  386. package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
  387. package/src/runtime/spots/spot-timer.ts +1 -1
  388. package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
  389. package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
  390. package/src/runtime/streams/bound-session-service.ts +10 -7
  391. package/src/runtime/streams/index.ts +30 -4
  392. package/src/runtime/streams/managed-stream.ts +2 -1
  393. package/src/runtime/streams/session-calls.ts +9 -14
  394. package/src/runtime/streams/session-context.ts +6 -11
  395. package/src/runtime/streams/stream-session-runtime.ts +79 -40
  396. package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
  397. package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
  398. package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
@@ -21,3 +21,4 @@ export declare function appendParts<TNext extends ZLinkMultipartOperation<TNext>
21
21
  export declare function submitRequestOperation(operation: {
22
22
  submit(): Promise<readonly Message[]>;
23
23
  }, label: string): Promise<readonly Message[]>;
24
+ export declare function mapRequestFailure(error: unknown, label: string): unknown;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.appendParts = appendParts;
4
4
  exports.submitRequestOperation = submitRequestOperation;
5
+ exports.mapRequestFailure = mapRequestFailure;
5
6
  const framework_errors_internal_1 = require("../framework-errors-internal");
6
7
  const runtime_values_1 = require("../backend/runtime-values");
7
8
  const configuration_1 = require("../configuration");
@@ -21,11 +22,14 @@ async function submitRequestOperation(operation, label) {
21
22
  return await operation.submit();
22
23
  }
23
24
  catch (error) {
24
- // Spec 32-framework-error-model:81-92 — classify the backend request
25
- // terminal rather than collapsing every failure to Unavailable.
26
- if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'request') {
27
- throw new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `${label} failed with result ${error.result}.`, error);
28
- }
29
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `${label} failed before a reply was received.`, true, error);
25
+ throw mapRequestFailure(error, label);
30
26
  }
31
27
  }
28
+ function mapRequestFailure(error, label) {
29
+ // Spec 32-framework-error-model:81-92 — classify the backend request
30
+ // terminal rather than collapsing every failure to Unavailable.
31
+ if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'request') {
32
+ return new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `${label} failed with result ${error.result}.`, error);
33
+ }
34
+ return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `${label} failed before a reply was received.`, true, error);
35
+ }
@@ -1,3 +1,5 @@
1
+ import { RequestRuntime } from '../foundation/request-runtime';
2
+ import type { PendingOperation } from '../foundation/operation-registry';
1
3
  import { type ZLinkSubmitResult } from '../messaging/submission-result';
2
4
  import { type ZLinkRuntimeMessageFlowResult } from '../../contracts/Dispatch/ZLinkDispatchOptions';
3
5
  import { type ZLinkChannelEnvelopeCodecRegistry } from './channel-envelope';
@@ -7,13 +9,14 @@ export declare class ZLinkChannelOutboundOperations {
7
9
  private readonly sockets;
8
10
  private readonly codecs;
9
11
  private readonly dispatchServices;
12
+ private readonly requests;
10
13
  private readonly pendingRequests;
11
- constructor(sockets: ZLinkChannelSocketRegistry, codecs: ZLinkChannelEnvelopeCodecRegistry, dispatchServices: ZLinkChannelDispatchServices);
14
+ constructor(sockets: ZLinkChannelSocketRegistry, codecs: ZLinkChannelEnvelopeCodecRegistry, dispatchServices: ZLinkChannelDispatchServices, requests?: RequestRuntime);
12
15
  pendingRequestCount(channelName: string): number;
13
16
  send(channelName: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
14
17
  private sendScoped;
15
18
  private traceSend;
16
- request<TReply>(channelName: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): Promise<TReply>;
19
+ request<TReply>(channelName: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void, requestOperation?: PendingOperation<unknown>): Promise<TReply>;
17
20
  private requestScoped;
18
21
  tryPublish(channelName: string, topic: string, packetName: string | undefined, event: unknown, metadata?: ReadonlyMap<string, string>): ZLinkSubmitResult;
19
22
  private tryPublishScoped;
@@ -22,15 +25,9 @@ export declare class ZLinkChannelOutboundOperations {
22
25
  routeSubmit(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
23
26
  private routeSubmitScoped;
24
27
  private traceRouteSend;
25
- routeRequest<TReply>(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): Promise<TReply>;
28
+ routeRequest<TReply>(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void, requestOperation?: PendingOperation<unknown>): Promise<TReply>;
26
29
  private routeRequestScoped;
27
30
  private measureRequest;
28
31
  }
29
- /**
30
- * A ClientServer DEALER's request progress poller is intentionally unref'ed.
31
- * The public request promise is live work, however, so it needs its own
32
- * ref'ed handle until reply, cancellation, timeout, or failure settles it.
33
- */
34
- export declare function keepChannelRequestAlive<T>(request: Promise<T>): Promise<T>;
35
32
  export declare function requestTerminalResult(error: unknown, signal: AbortSignal | undefined): ZLinkRuntimeMessageFlowResult;
36
33
  export declare function isRemoteChannelErrorReply(error: unknown): boolean;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkChannelOutboundOperations = void 0;
4
- exports.keepChannelRequestAlive = keepChannelRequestAlive;
5
4
  exports.requestTerminalResult = requestTerminalResult;
6
5
  exports.isRemoteChannelErrorReply = isRemoteChannelErrorReply;
6
+ const request_runtime_1 = require("../foundation/request-runtime");
7
7
  const framework_errors_internal_1 = require("../framework-errors-internal");
8
8
  const request_deadline_1 = require("../messaging/request-deadline");
9
9
  const runtime_values_1 = require("../backend/runtime-values");
@@ -16,19 +16,18 @@ const channel_framework_packets_1 = require("./channel-framework-packets");
16
16
  const contracts_1 = require("../../contracts");
17
17
  const route_disconnected_error_1 = require("./route-disconnected-error");
18
18
  const flow_context_1 = require("../diagnostics/flow-context");
19
- const CHANNEL_REQUEST_LOOP_KEEPALIVE_MS = 0x7fff_ffff;
20
- // Shared default for the dominant no-metadata call; avoids a Map allocation
21
- // per outbound operation.
22
19
  const EMPTY_OUTBOUND_METADATA = new Map();
23
20
  class ZLinkChannelOutboundOperations {
24
21
  sockets;
25
22
  codecs;
26
23
  dispatchServices;
24
+ requests;
27
25
  pendingRequests = new Map();
28
- constructor(sockets, codecs, dispatchServices) {
26
+ constructor(sockets, codecs, dispatchServices, requests = new request_runtime_1.RequestRuntime()) {
29
27
  this.sockets = sockets;
30
28
  this.codecs = codecs;
31
29
  this.dispatchServices = dispatchServices;
30
+ this.requests = requests;
32
31
  }
33
32
  pendingRequestCount(channelName) {
34
33
  return this.pendingRequests.get(channelName) ?? 0;
@@ -68,19 +67,13 @@ class ZLinkChannelOutboundOperations {
68
67
  correlationId: undefined
69
68
  });
70
69
  }
71
- request(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
72
- return keepChannelRequestAlive((0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.requestScoped(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted)));
70
+ request(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted, requestOperation) {
71
+ return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.requestScoped(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted, requestOperation));
73
72
  }
74
- async requestScoped(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
75
- const deadlineMs = timeoutMs === undefined ? undefined : performance.now() + timeoutMs;
76
- const deadlineUnixMs = timeoutMs === undefined ? undefined : Date.now() + timeoutMs;
73
+ requestScoped(channelName, packetName, request, timeoutMs, signal, metadata, onAdmitted, existing) {
77
74
  let correlationId;
78
75
  let selectedServerRid;
79
- let terminalRecorded = false;
80
76
  const traceTerminal = (result) => {
81
- if (terminalRecorded)
82
- return;
83
- terminalRecorded = true;
84
77
  this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.ReplyReceived, result)?.trace({
85
78
  surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel,
86
79
  messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
@@ -93,60 +86,68 @@ class ZLinkChannelOutboundOperations {
93
86
  });
94
87
  };
95
88
  try {
96
- (0, abort_1.throwIfAborted)(signal);
97
- const readyWait = new AbortController();
98
- const readySignal = signal === undefined ? readyWait.signal : AbortSignal.any([signal, readyWait.signal]);
99
- const dealer = await (0, request_deadline_1.waitRequestReply)(this.sockets.awaitClientDealerForOutbound(channelName, readySignal), `Channel request '${channelName}'`, deadlineMs, signal, () => readyWait.abort());
100
- if (dealer === undefined) {
101
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Channel '${channelName}' has no ready ClientServer server before its admission deadline.`);
102
- }
103
- const serverRid = this.sockets.selectedClientServerRid(channelName, dealer);
104
- selectedServerRid = serverRid;
105
- correlationId = (0, channel_envelope_1.newChannelCorrelationId)();
106
- const parts = (0, channel_envelope_1.encodeChannelEnvelopePartsAtDeadline)(1 /* ZLinkChannelMessageKind.Request */, channelName, packetName, request, deadlineUnixMs, undefined, this.codecs, correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
107
- this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent)?.trace({
108
- surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel,
109
- messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
110
- channelName,
111
- channelRouteKind: 'client_server',
112
- serverRid,
113
- packetName,
114
- correlationId
115
- });
116
- const reply = await this.measureRequest(channelName, async () => {
117
- let replyParts = [];
118
- try {
119
- try {
120
- replyParts = await (0, abort_1.awaitWithAbort)(dealer.request(parts, (0, request_deadline_1.remainingRequestTimeout)(`Channel request '${channelName}'`, deadlineMs), onAdmitted), signal);
121
- }
122
- catch (error) {
123
- if (signal?.aborted === true)
124
- throw error;
125
- // Spec 32-framework-error-model:81-92 — classify the backend request
126
- // terminal (deadline -> DeadlineExceeded, lost route -> Unavailable,
127
- // etc.) instead of collapsing every failure to Unavailable.
128
- if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'request') {
129
- throw new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `Channel '${channelName}' request failed with result ${error.result}.`, error);
130
- }
131
- throw error;
89
+ signal?.throwIfAborted();
90
+ const operation = this.requests.begin(timeoutMs, signal, existing);
91
+ const reply = this.requests.run(operation, (receiver) => {
92
+ this.measureRequest(channelName, operation);
93
+ operation.mapCaller((value) => {
94
+ traceTerminal('succeeded');
95
+ return value;
96
+ }, (error) => {
97
+ if (!isRemoteChannelErrorReply(error))
98
+ traceTerminal(requestTerminalResult(error, signal));
99
+ throw error;
100
+ });
101
+ void (async () => {
102
+ const requestOperation = operation;
103
+ const deadlineMs = requestOperation.deadlineMs;
104
+ const deadlineUnixMs = timeoutMs === undefined ? undefined : Date.now() + timeoutMs;
105
+ const readyWait = new AbortController();
106
+ const readySignal = signal === undefined ? readyWait.signal : AbortSignal.any([signal, readyWait.signal]);
107
+ const dealer = await (0, request_deadline_1.waitRequestReply)(this.sockets.awaitClientDealerForOutbound(channelName, readySignal), `Channel request '${channelName}'`, requestOperation, () => readyWait.abort());
108
+ if (dealer === undefined) {
109
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Channel '${channelName}' has no ready ClientServer server before its admission deadline.`);
132
110
  }
111
+ const serverRid = this.sockets.selectedClientServerRid(channelName, dealer);
112
+ selectedServerRid = serverRid;
113
+ correlationId = (0, channel_envelope_1.newChannelCorrelationId)();
114
+ const parts = (0, channel_envelope_1.encodeChannelEnvelopePartsAtDeadline)(1 /* ZLinkChannelMessageKind.Request */, channelName, packetName, request, deadlineUnixMs, undefined, this.codecs, correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
115
+ this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent)?.trace({
116
+ surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel,
117
+ messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
118
+ channelName,
119
+ channelRouteKind: 'client_server',
120
+ serverRid,
121
+ packetName,
122
+ correlationId
123
+ });
124
+ dealer.request(parts, (0, request_deadline_1.remainingRequestTimeout)(`Channel request '${channelName}'`, deadlineMs), onAdmitted, requestOperation, receiver);
125
+ })().catch((error) => receiver.operationFailed(operation.id, error, undefined));
126
+ }, (raw) => {
127
+ const replyParts = raw;
128
+ try {
133
129
  return (0, channel_envelope_1.decodeChannelReply)(replyParts, this.codecs);
134
130
  }
135
131
  finally {
136
132
  (0, channel_envelope_1.closeMessages)(replyParts);
137
133
  }
134
+ }, (error) => {
135
+ if (signal?.aborted !== true &&
136
+ (0, runtime_values_1.isZLinkBackendResultError)(error) &&
137
+ error.operation === 'request') {
138
+ return new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `Channel '${channelName}' request failed with result ${error.result}.`, error);
139
+ }
140
+ return error;
138
141
  });
139
- traceTerminal('succeeded');
140
142
  return reply;
141
143
  }
142
144
  catch (error) {
143
145
  // A framework peer has already made the terminal dispatch error record
144
146
  // before it sends an Error reply. Do not turn that same remote dispatch
145
147
  // failure into a second local `reply_received` terminal at Errors level.
146
- if (!isRemoteChannelErrorReply(error)) {
148
+ if (!isRemoteChannelErrorReply(error))
147
149
  traceTerminal(requestTerminalResult(error, signal));
148
- }
149
- throw error;
150
+ return Promise.reject(error);
150
151
  }
151
152
  }
152
153
  tryPublish(channelName, topic, packetName, event, metadata = EMPTY_OUTBOUND_METADATA) {
@@ -205,17 +206,12 @@ class ZLinkChannelOutboundOperations {
205
206
  targetRid: targetNodeRid
206
207
  });
207
208
  }
208
- routeRequest(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
209
- return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.routeRequestScoped(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted));
209
+ routeRequest(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted, requestOperation) {
210
+ return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.routeRequestScoped(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted, requestOperation));
210
211
  }
211
- async routeRequestScoped(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted) {
212
+ routeRequestScoped(routerChannelId, targetNodeRid, packetName, request, timeoutMs, signal, metadata, onAdmitted, existing) {
212
213
  let correlationId;
213
- let router;
214
- let terminalRecorded = false;
215
214
  const traceTerminal = (result) => {
216
- if (terminalRecorded)
217
- return;
218
- terminalRecorded = true;
219
215
  this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.ReplyReceived, result)?.trace({
220
216
  surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
221
217
  messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
@@ -228,71 +224,77 @@ class ZLinkChannelOutboundOperations {
228
224
  });
229
225
  };
230
226
  try {
231
- (0, abort_1.throwIfAborted)(signal);
232
- router = this.sockets.routeRouter(routerChannelId);
233
- if (this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'missing') {
234
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `Route channel '${routerChannelId}' has no member '${targetNodeRid}'.`);
235
- }
236
- correlationId = (0, channel_envelope_1.newChannelCorrelationId)();
237
- const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, routerChannelId, packetName, request, timeoutMs, undefined, (0, channel_framework_packets_1.codecsForFrameworkPacket)(packetName, this.codecs), correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
238
- this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent)?.trace({
239
- surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
240
- messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
241
- channelName: routerChannelId,
242
- channelRouteKind: 'route_mesh',
243
- packetName,
244
- correlationId,
245
- targetRid: targetNodeRid
246
- });
247
- const reply = await this.measureRequest(routerChannelId, async () => {
248
- const replyParts = await (0, abort_1.awaitWithAbort)(router.request(targetNodeRid, parts, timeoutMs, onAdmitted), signal);
227
+ signal?.throwIfAborted();
228
+ const operation = this.requests.begin(timeoutMs, signal, existing);
229
+ const reply = this.requests.run(operation, (receiver) => {
230
+ this.measureRequest(routerChannelId, operation);
231
+ operation.mapCaller((value) => {
232
+ traceTerminal('succeeded');
233
+ return value;
234
+ }, (error) => {
235
+ if (!isRemoteChannelErrorReply(error))
236
+ traceTerminal(requestTerminalResult(error, signal));
237
+ throw error;
238
+ });
239
+ const requestOperation = operation;
240
+ const router = this.sockets.routeRouter(routerChannelId);
241
+ if (this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'missing') {
242
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `Route channel '${routerChannelId}' has no member '${targetNodeRid}'.`);
243
+ }
244
+ correlationId = (0, channel_envelope_1.newChannelCorrelationId)();
245
+ const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, routerChannelId, packetName, request, timeoutMs, undefined, (0, channel_framework_packets_1.codecsForFrameworkPacket)(packetName, this.codecs), correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
246
+ this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent)?.trace({
247
+ surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
248
+ messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
249
+ channelName: routerChannelId,
250
+ channelRouteKind: 'route_mesh',
251
+ packetName,
252
+ correlationId,
253
+ targetRid: targetNodeRid
254
+ });
255
+ router.request(targetNodeRid, parts, timeoutMs, onAdmitted, requestOperation, receiver);
256
+ }, (raw) => {
257
+ const replyParts = raw;
249
258
  try {
250
259
  return (0, channel_envelope_1.decodeChannelReply)(replyParts, this.codecs);
251
260
  }
252
261
  finally {
253
262
  (0, channel_envelope_1.closeMessages)(replyParts);
254
263
  }
264
+ }, (error) => {
265
+ if (this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'disconnected' &&
266
+ (isSubmitDeadline(error) || error instanceof route_disconnected_error_1.ZLinkRouteDisconnectedError)) {
267
+ return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Route channel '${routerChannelId}' member '${targetNodeRid}' is not connected.`, true, error);
268
+ }
269
+ return error;
255
270
  });
256
- traceTerminal('succeeded');
257
271
  return reply;
258
272
  }
259
273
  catch (error) {
260
- // See the ClientServer request path: the remote dispatch error owns this
261
- // terminal record when the reply itself is an Error envelope.
262
- if (!isRemoteChannelErrorReply(error)) {
274
+ if (!isRemoteChannelErrorReply(error))
263
275
  traceTerminal(requestTerminalResult(error, signal));
264
- }
265
- if (this.sockets.routeMemberStatus(routerChannelId, targetNodeRid) === 'disconnected' &&
266
- (isSubmitDeadline(error) || error instanceof route_disconnected_error_1.ZLinkRouteDisconnectedError)) {
267
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Route channel '${routerChannelId}' member '${targetNodeRid}' is not connected.`, true, error);
268
- }
269
- throw error;
276
+ return Promise.reject(error);
270
277
  }
271
278
  }
272
- async measureRequest(channel, operation) {
279
+ measureRequest(channel, operation) {
273
280
  this.pendingRequests.set(channel, this.pendingRequestCount(channel) + 1);
274
- try {
275
- return await operation();
276
- }
277
- finally {
281
+ const complete = () => {
278
282
  const remaining = this.pendingRequestCount(channel) - 1;
279
283
  if (remaining === 0)
280
284
  this.pendingRequests.delete(channel);
281
285
  else
282
286
  this.pendingRequests.set(channel, remaining);
283
- }
287
+ };
288
+ operation.mapCaller((value) => {
289
+ complete();
290
+ return value;
291
+ }, (error) => {
292
+ complete();
293
+ throw error;
294
+ });
284
295
  }
285
296
  }
286
297
  exports.ZLinkChannelOutboundOperations = ZLinkChannelOutboundOperations;
287
- /**
288
- * A ClientServer DEALER's request progress poller is intentionally unref'ed.
289
- * The public request promise is live work, however, so it needs its own
290
- * ref'ed handle until reply, cancellation, timeout, or failure settles it.
291
- */
292
- function keepChannelRequestAlive(request) {
293
- const keepalive = setTimeout(() => { }, CHANNEL_REQUEST_LOOP_KEEPALIVE_MS);
294
- return request.finally(() => clearTimeout(keepalive));
295
- }
296
298
  function isSubmitDeadline(error) {
297
299
  return (error instanceof contracts_1.ZLinkFrameworkException &&
298
300
  (0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded);
@@ -25,13 +25,13 @@ interface ZLinkChannelRequestDispatchLoop {
25
25
  readonly send?: () => ZLinkMultipartOperation<ZLinkMultipartAsyncSubmitOperation>;
26
26
  }, router: ZLinkBackendRouterSocket & {
27
27
  reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
28
- }, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader): Promise<boolean | void>;
28
+ }, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader, receivedAt?: Date): Promise<boolean | void>;
29
29
  }
30
30
  interface ZLinkChannelPublishDispatchLoop {
31
31
  dispatch(topicMessage: {
32
32
  readonly topic: string;
33
33
  readonly parts: readonly Message[];
34
- }, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader): Promise<void>;
34
+ }, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader, receivedAt?: Date): Promise<void>;
35
35
  }
36
36
  interface ZLinkSubscriberInfrastructureResult {
37
37
  readonly consumed: boolean;
@@ -54,7 +54,7 @@ interface ZLinkRoutePacketDispatchLoop {
54
54
  readonly replyToken: unknown | null;
55
55
  }, router: {
56
56
  reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
57
- }, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader, infrastructureChecked?: boolean): Promise<boolean | void>;
57
+ }, signal?: AbortSignal, decodedHeader?: ZLinkChannelEnvelopeHeader, infrastructureChecked?: boolean, receivedAt?: Date): Promise<boolean | void>;
58
58
  }
59
59
  interface ZLinkChannelInfrastructureHandler {
60
60
  (received: {
@@ -87,6 +87,7 @@ export declare class ZLinkChannelReceiveLoop {
87
87
  private readonly applicationJobQueue;
88
88
  private readonly roundRobin?;
89
89
  private readonly applicationDispatchQueue;
90
+ private readonly receivedAtClock;
90
91
  private stoppedFlag;
91
92
  private isStopped;
92
93
  private running?;
@@ -96,11 +97,10 @@ export declare class ZLinkChannelReceiveLoop {
96
97
  private readonly capacityStop;
97
98
  constructor(channelName: string, router: ZLinkBackendRouterSocket & {
98
99
  reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
99
- }, dispatcher: ZLinkChannelRequestDispatchLoop, spotRouteBridge: ZLinkBackendSpotRouteBridge | undefined, infrastructureHandler: ZLinkChannelInfrastructureHandler | undefined, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, reportError?: ZLinkReceiveTaskErrorReporter, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
100
+ }, dispatcher: ZLinkChannelRequestDispatchLoop, spotRouteBridge: ZLinkBackendSpotRouteBridge | undefined, infrastructureHandler: ZLinkChannelInfrastructureHandler | undefined, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, reportError?: ZLinkReceiveTaskErrorReporter, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, applicationDispatchQueue?: ZLinkSerialExecutionQueue, receivedAtClock?: () => Date);
100
101
  run(signal?: AbortSignal): Promise<void>;
101
102
  private runLoop;
102
103
  stop(): Promise<void>;
103
- private acquirePermit;
104
104
  private dispatchAndClose;
105
105
  private classify;
106
106
  }
@@ -112,6 +112,7 @@ export declare class ZLinkSubscriberReceiveLoop {
112
112
  private readonly infrastructureHandler?;
113
113
  private readonly roundRobin?;
114
114
  private readonly applicationDispatchQueue;
115
+ private readonly receivedAtClock;
115
116
  private stoppedFlag;
116
117
  private isStopped;
117
118
  private running?;
@@ -119,7 +120,7 @@ export declare class ZLinkSubscriberReceiveLoop {
119
120
  private readonly receiveOwner;
120
121
  private readonly rawReceiveReservations;
121
122
  private readonly capacityStop;
122
- constructor(adapter: ZLinkChannelBackendAdapter, subscriber: ZLinkBackendSubscriberSocket, dispatcher: ZLinkChannelPublishDispatchLoop, applicationJobQueue: ApplicationJobQueue, infrastructureHandler?: ((topicMessage: ReturnType<ZLinkChannelBackendAdapter["createTopicMessage"]>) => boolean | ZLinkSubscriberInfrastructureResult) | undefined, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
123
+ constructor(adapter: ZLinkChannelBackendAdapter, subscriber: ZLinkBackendSubscriberSocket, dispatcher: ZLinkChannelPublishDispatchLoop, applicationJobQueue: ApplicationJobQueue, infrastructureHandler?: ((topicMessage: ReturnType<ZLinkChannelBackendAdapter["createTopicMessage"]>) => boolean | ZLinkSubscriberInfrastructureResult) | undefined, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue, receivedAtClock?: () => Date);
123
124
  private readonly poller;
124
125
  run(signal?: AbortSignal): Promise<void>;
125
126
  private runLoop;
@@ -135,6 +136,7 @@ export declare class ZLinkRouteReceiveLoop {
135
136
  private readonly applicationJobQueue;
136
137
  private readonly roundRobin?;
137
138
  private readonly applicationDispatchQueue;
139
+ private readonly receivedAtClock;
138
140
  private stoppedFlag;
139
141
  private isStopped;
140
142
  private running?;
@@ -144,7 +146,7 @@ export declare class ZLinkRouteReceiveLoop {
144
146
  private readonly capacityStop;
145
147
  constructor(router: ZLinkBackendRouterSocket & {
146
148
  reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
147
- }, dispatcher: ZLinkRoutePacketDispatchLoop, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
149
+ }, dispatcher: ZLinkRoutePacketDispatchLoop, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue, receivedAtClock?: () => Date);
148
150
  run(signal?: AbortSignal): Promise<void>;
149
151
  private runLoop;
150
152
  stop(): Promise<void>;