@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
@@ -33,7 +33,6 @@ import {
33
33
  type ZLinkRouteRuntimeSendHandler
34
34
  } from './channel-dispatchers';
35
35
  import {
36
- createChannelApplicationDispatchQueue,
37
36
  ZLinkChannelReceiveLoop,
38
37
  ZLinkReceiveRoundRobinCoordinator,
39
38
  ZLinkRouteReceiveLoop,
@@ -52,7 +51,6 @@ import {
52
51
  } from '../../contracts/Configuration/RuntimeEndpointConnections';
53
52
  import type { ApplicationJobQueue } from '../host/application-job-queue';
54
53
  import { startOutsideStateLane, ZLinkStateLane } from '../execution/state-lane';
55
- import { ZLinkSerialExecutionQueue } from '../execution/serial-execution-queue';
56
54
 
57
55
  interface ManualFanoutSubscriberState {
58
56
  readonly channelName: string;
@@ -83,7 +81,6 @@ interface ChannelRuntimeDisposeWork {
83
81
  readonly subscriberLoops: readonly ZLinkSubscriberReceiveLoop[];
84
82
  readonly manualTransitions: readonly Promise<void>[];
85
83
  readonly routeLoops: readonly { stop(): Promise<void> }[];
86
- readonly applicationDispatchQueues: readonly ZLinkSerialExecutionQueue[];
87
84
  readonly clientServerLocation?: ZLinkClientServerLocationRuntime;
88
85
  readonly fanoutLocation?: ZLinkFanoutLocationRuntime;
89
86
  readonly spotRouteBridges: readonly ZLinkBackendSpotRouteBridge[];
@@ -107,10 +104,9 @@ export class ZLinkChannelRuntimeLifecycle {
107
104
  private readonly receiveRoundRobin = new ZLinkReceiveRoundRobinCoordinator();
108
105
  private readonly channelReceiveLoops: ZLinkChannelReceiveLoop[] = [];
109
106
  private readonly subscriberReceiveLoops: ZLinkSubscriberReceiveLoop[] = [];
110
- private readonly manualFanoutSubscribers = new Map<string, ManualFanoutSubscriberState>();
107
+ readonly manualFanoutSubscribers = new Map<string, ManualFanoutSubscriberState>();
111
108
  private readonly manualFanoutSubscriberOwners = new Set<object>();
112
109
  private readonly routeReceiveLoops: Array<{ stop(): Promise<void> }> = [];
113
- private readonly applicationDispatchQueues = new Map<string, ZLinkSerialExecutionQueue>();
114
110
  private readonly meshChannelDispatchers = new Map<string, ZLinkChannelRequestDispatcher>();
115
111
  private readonly meshRouteDispatchers = new Map<string, ZLinkRoutePacketDispatcher>();
116
112
  private nextManualFanoutIndex = 0;
@@ -259,11 +255,13 @@ export class ZLinkChannelRuntimeLifecycle {
259
255
  ...(mesh.routeSendHandlers ?? []).map((registration) => ({
260
256
  kind: 'send' as const,
261
257
  packetName: registration.packetName,
258
+ messageType: registration.messageType,
262
259
  handler: this.options.dispatchServices.routeSendHandler(registration.handlerType)
263
260
  })),
264
261
  ...(mesh.routeRequestHandlers ?? []).map((registration) => ({
265
262
  kind: 'request' as const,
266
263
  packetName: registration.packetName,
264
+ messageType: registration.messageType,
267
265
  handler: this.options.dispatchServices.routeRequestHandler(registration.handlerType)
268
266
  })),
269
267
  ...[...(this.options.internalRouteSendHandlers?.entries() ?? [])].map(
@@ -314,27 +312,42 @@ export class ZLinkChannelRuntimeLifecycle {
314
312
  taskRunner.errorSink
315
313
  ),
316
314
  handlers: new Map(
317
- channel.requestHandlers?.map((handler) => [
318
- handler.packetName,
319
- (
315
+ channel.requestHandlers?.map((handler) => {
316
+ const configuredHandler = (
320
317
  handler as typeof handler & {
321
318
  readonly handler?: ZLinkRequestHandler<unknown, unknown>;
322
319
  }
323
- ).handler ??
324
- adaptRouteRequestHandler(
325
- this.options.dispatchServices.routeRequestHandler(handler.handlerType)
326
- )
327
- ])
320
+ ).handler;
321
+ return [
322
+ handler.packetName,
323
+ {
324
+ messageType: handler.messageType,
325
+ handler:
326
+ configuredHandler ??
327
+ adaptRouteRequestHandler(
328
+ this.options.dispatchServices.routeRequestHandler(handler.handlerType)
329
+ )
330
+ }
331
+ ];
332
+ })
328
333
  ),
329
334
  sendHandlers: new Map(
330
- channel.sendHandlers?.map((handler) => [
331
- handler.packetName,
332
- (handler as typeof handler & { readonly handler?: ZLinkSendHandler<unknown> })
333
- .handler ??
334
- adaptRouteSendHandler(
335
- this.options.dispatchServices.routeSendHandler(handler.handlerType)
336
- )
337
- ])
335
+ channel.sendHandlers?.map((handler) => {
336
+ const configuredHandler = (
337
+ handler as typeof handler & { readonly handler?: ZLinkSendHandler<unknown> }
338
+ ).handler;
339
+ return [
340
+ handler.packetName,
341
+ {
342
+ messageType: handler.messageType,
343
+ handler:
344
+ configuredHandler ??
345
+ adaptRouteSendHandler(
346
+ this.options.dispatchServices.routeSendHandler(handler.handlerType)
347
+ )
348
+ }
349
+ ];
350
+ })
338
351
  ),
339
352
  filters: this.options.dispatchServices.handlerFilters(),
340
353
  unhandled: this.options.registration.dispatch?.unhandled
@@ -411,9 +424,6 @@ export class ZLinkChannelRuntimeLifecycle {
411
424
  ...work.manualTransitions
412
425
  ])
413
426
  );
414
- const applicationStopped = await startOutsideStateLane(() =>
415
- Promise.allSettled(work.applicationDispatchQueues.map((queue) => queue.close()))
416
- );
417
427
  const descriptorStopped =
418
428
  work.clientServerLocation === undefined
419
429
  ? []
@@ -434,7 +444,6 @@ export class ZLinkChannelRuntimeLifecycle {
434
444
  );
435
445
  const errors = [
436
446
  ...transportStopped,
437
- ...applicationStopped,
438
447
  ...descriptorStopped,
439
448
  ...fanoutDescriptorStopped,
440
449
  ...cleanup
@@ -449,7 +458,6 @@ export class ZLinkChannelRuntimeLifecycle {
449
458
  this.channelReceiveLoops.length = 0;
450
459
  this.subscriberReceiveLoops.length = 0;
451
460
  this.routeReceiveLoops.length = 0;
452
- this.applicationDispatchQueues.clear();
453
461
  this.clientServerLocation = undefined;
454
462
  this.fanoutLocation = undefined;
455
463
  this.taskRunner = undefined;
@@ -478,7 +486,6 @@ export class ZLinkChannelRuntimeLifecycle {
478
486
  this.drainManualFanoutSubscriberCore(state)
479
487
  );
480
488
  const routeLoops = [...this.routeReceiveLoops];
481
- const applicationDispatchQueues = [...this.applicationDispatchQueues.values()];
482
489
  const clientServerLocation = this.clientServerLocation;
483
490
  const fanoutLocation = this.fanoutLocation;
484
491
  const spotRouteBridges = [...this.options.spotRouteBridges.values()];
@@ -487,22 +494,12 @@ export class ZLinkChannelRuntimeLifecycle {
487
494
  subscriberLoops,
488
495
  manualTransitions,
489
496
  routeLoops,
490
- applicationDispatchQueues,
491
497
  clientServerLocation,
492
498
  fanoutLocation,
493
499
  spotRouteBridges
494
500
  };
495
501
  }
496
502
 
497
- private applicationDispatchQueue(channelName: string): ZLinkSerialExecutionQueue {
498
- let queue = this.applicationDispatchQueues.get(channelName);
499
- if (queue === undefined) {
500
- queue = createChannelApplicationDispatchQueue();
501
- this.applicationDispatchQueues.set(channelName, queue);
502
- }
503
- return queue;
504
- }
505
-
506
503
  private openOutboundSockets(): void {
507
504
  // The process-local Server is an independent peer source. Location Store
508
505
  // discovery may later alias the same admitted identity, but startup and
@@ -536,19 +533,27 @@ export class ZLinkChannelRuntimeLifecycle {
536
533
  handlers: new Map(
537
534
  channel.requestHandlers?.map((handler) => [
538
535
  handler.packetName,
539
- handler.handler ??
540
- this.options.dispatchServices.channelRequestHandler(
541
- requireChannelHandlerType(handler.handlerType, channelName, handler.packetName)
542
- )
536
+ {
537
+ messageType: handler.messageType,
538
+ handler:
539
+ handler.handler ??
540
+ this.options.dispatchServices.channelRequestHandler(
541
+ requireChannelHandlerType(handler.handlerType, channelName, handler.packetName)
542
+ )
543
+ }
543
544
  ])
544
545
  ),
545
546
  sendHandlers: new Map(
546
547
  channel.sendHandlers?.map((handler) => [
547
548
  handler.packetName,
548
- handler.handler ??
549
- this.options.dispatchServices.channelSendHandler(
550
- requireChannelHandlerType(handler.handlerType, channelName, handler.packetName)
551
- )
549
+ {
550
+ messageType: handler.messageType,
551
+ handler:
552
+ handler.handler ??
553
+ this.options.dispatchServices.channelSendHandler(
554
+ requireChannelHandlerType(handler.handlerType, channelName, handler.packetName)
555
+ )
556
+ }
552
557
  ])
553
558
  ),
554
559
  filters: this.options.dispatchServices.handlerFilters(),
@@ -572,8 +577,7 @@ export class ZLinkChannelRuntimeLifecycle {
572
577
  this.options.applicationJobQueue,
573
578
  (error) =>
574
579
  taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error),
575
- this.receiveRoundRobin,
576
- this.applicationDispatchQueue(channelName)
580
+ this.receiveRoundRobin
577
581
  );
578
582
  this.channelReceiveLoops.push(loop);
579
583
  tasks.push(taskRunner.run(`channel:${channelName}`, (signal) => loop.run(signal)));
@@ -599,7 +603,10 @@ export class ZLinkChannelRuntimeLifecycle {
599
603
  codecs: this.options.codecs,
600
604
  dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(taskRunner.errorSink),
601
605
  handlers: new Map(
602
- channel.publishHandlers?.map((handler) => [handler.packetName, handler.handler])
606
+ channel.publishHandlers?.map((handler) => [
607
+ handler.packetName,
608
+ { handler: handler.handler, messageType: handler.messageType }
609
+ ])
603
610
  ),
604
611
  filters: this.options.dispatchServices.handlerFilters(),
605
612
  unhandled: this.options.registration.dispatch?.unhandled,
@@ -657,7 +664,7 @@ export class ZLinkChannelRuntimeLifecycle {
657
664
  return state;
658
665
  }
659
666
 
660
- private requestManualFanoutConnect(
667
+ requestManualFanoutConnect(
661
668
  channelName: string,
662
669
  endpoint: string,
663
670
  taskRunner: ZLinkRuntimeTaskRunner,
@@ -785,8 +792,7 @@ export class ZLinkChannelRuntimeLifecycle {
785
792
  taskRunner.errorSink.reportRuntimeTaskException(
786
793
  `subscriber:${state.channelName}:manual:${state.index}:dispatch`,
787
794
  error
788
- ),
789
- this.applicationDispatchQueue(channelName)
795
+ )
790
796
  );
791
797
  state.openingToken = undefined;
792
798
  state.active = { token, loop };
@@ -887,7 +893,10 @@ export class ZLinkChannelRuntimeLifecycle {
887
893
  codecs: this.options.codecs,
888
894
  dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(taskRunner.errorSink),
889
895
  handlers: new Map(
890
- channel.publishHandlers?.map((handler) => [handler.packetName, handler.handler])
896
+ channel.publishHandlers?.map((handler) => [
897
+ handler.packetName,
898
+ { handler: handler.handler, messageType: handler.messageType }
899
+ ])
891
900
  ),
892
901
  filters: this.options.dispatchServices.handlerFilters(),
893
902
  unhandled: this.options.registration.dispatch?.unhandled,
@@ -905,8 +914,7 @@ export class ZLinkChannelRuntimeLifecycle {
905
914
  taskRunner.errorSink.reportRuntimeTaskException(
906
915
  `subscriber:${channelName}:automatic:${connectionId}:dispatch`,
907
916
  error
908
- ),
909
- this.applicationDispatchQueue(channelName)
917
+ )
910
918
  );
911
919
  this.subscriberReceiveLoops.push(loop);
912
920
  void taskRunner.run(`subscriber:${channelName}:automatic:${connectionId}`, (signal) =>
@@ -975,8 +983,7 @@ export class ZLinkChannelRuntimeLifecycle {
975
983
  taskRunner.errorSink.reportRuntimeTaskException(
976
984
  `route:${routeChannel.routerChannelId}:dispatch`,
977
985
  error
978
- ),
979
- this.applicationDispatchQueue(routeChannel.routerChannelId)
986
+ )
980
987
  );
981
988
  this.routeReceiveLoops.push(loop);
982
989
  tasks.push(
@@ -1006,9 +1013,7 @@ export class ZLinkChannelRuntimeLifecycle {
1006
1013
  function adaptRouteRequestHandler(
1007
1014
  handler: ZLinkRouteRuntimeRequestHandler
1008
1015
  ): ZLinkRequestHandler<unknown, unknown> {
1009
- return {
1010
- handle: async (payload, context) => handler.handle(payload, context as never)
1011
- };
1016
+ return { handle: async (payload, context) => handler.handle(payload, context as never) };
1012
1017
  }
1013
1018
 
1014
1019
  function adaptRouteSendHandler(handler: ZLinkRouteRuntimeSendHandler): ZLinkSendHandler<unknown> {
@@ -1,4 +1,11 @@
1
+ import { RequestRuntime } from '../foundation/request-runtime';
2
+ import type { PendingOperation, OperationObserver } from '../foundation/operation-registry';
1
3
  import type { ZLinkMeshDispatchAdmission } from '../admission';
4
+ import {
5
+ identityRequestReply,
6
+ rejectZLinkRequestReply,
7
+ type ZLinkRequestResult
8
+ } from '../messaging/request-result';
2
9
  import type { ZLinkListenerRecords } from '../foundation/listener-records';
3
10
  import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
4
11
  import type { RoutingId } from '../../contracts';
@@ -6,6 +13,7 @@ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProvider
6
13
  import type { ZLinkSubmitResult } from '../messaging/submission-result';
7
14
  import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
8
15
  import type { ZLinkMessageFlowModeCell } from '../diagnostics';
16
+ import type { ZLinkTelemetryLease } from '../diagnostics/message-flow-delivery';
9
17
  import type { Message } from '../../contracts/Common/Message';
10
18
  import type { ReceiveRecord } from '../foundation/service-runtime-contracts';
11
19
  import { ZLinkConfigurationException, type ZLinkFrameworkRegistration } from '../configuration';
@@ -41,6 +49,7 @@ import {
41
49
  } from '../host/application-job-queue';
42
50
 
43
51
  export class ZLinkChannelRuntimeManager {
52
+ private readonly requests: RequestRuntime;
44
53
  private readonly registration: ZLinkFrameworkRegistration;
45
54
  private readonly sockets: ZLinkChannelSocketRegistry;
46
55
  private readonly spotRoutes: ZLinkSpotRouteDispatchStrategy;
@@ -55,6 +64,7 @@ export class ZLinkChannelRuntimeManager {
55
64
  options: ZLinkChannelRuntimeManagerOptions = {}
56
65
  ) {
57
66
  this.registration = registration;
67
+ this.requests = options.requests ?? new RequestRuntime();
58
68
  const applicationJobQueue =
59
69
  options.applicationJobQueue ??
60
70
  new ApplicationJobQueue(resolveApplicationJobQueueConfiguration());
@@ -73,10 +83,12 @@ export class ZLinkChannelRuntimeManager {
73
83
  const dispatchServices = new ZLinkChannelDispatchServices(
74
84
  registration,
75
85
  providerResolver,
76
- options.messageFlowModeCell
86
+ options.messageFlowModeCell,
87
+ options.telemetryLease
77
88
  );
78
89
  const spotRouteBridges = new Map<string, ZLinkBackendSpotRouteBridge>();
79
90
  this.spotRoutes = new ZLinkSpotRouteDispatchStrategy({
91
+ requests: this.requests,
80
92
  registration,
81
93
  sockets: this.sockets,
82
94
  codecs,
@@ -84,7 +96,12 @@ export class ZLinkChannelRuntimeManager {
84
96
  localSpotRouteDispatcher: options.localSpotRouteDispatcher,
85
97
  flowCreationEnabled: () => dispatchServices.flowCreationEnabled()
86
98
  });
87
- this.outbound = new ZLinkChannelOutboundOperations(this.sockets, codecs, dispatchServices);
99
+ this.outbound = new ZLinkChannelOutboundOperations(
100
+ this.sockets,
101
+ codecs,
102
+ dispatchServices,
103
+ this.requests
104
+ );
88
105
  this.lifecycle = new ZLinkChannelRuntimeLifecycle({
89
106
  registration,
90
107
  adapter,
@@ -245,24 +262,37 @@ export class ZLinkChannelRuntimeManager {
245
262
  return this.outbound.send(channelName, packetName, message, metadata);
246
263
  }
247
264
 
248
- async request<TReply>(
265
+ request<TReply>(
249
266
  channelName: string,
250
267
  packetName: string | undefined,
251
268
  request: unknown,
252
269
  timeoutMs: number | undefined,
253
270
  signal?: AbortSignal,
254
271
  metadata?: ReadonlyMap<string, string>,
255
- onAdmitted?: () => void
256
- ): Promise<TReply> {
257
- return this.outbound.request<TReply>(
258
- channelName,
259
- packetName,
260
- request,
261
- timeoutMs,
262
- signal,
263
- metadata,
264
- onAdmitted
265
- );
272
+ onAdmitted?: () => void,
273
+ requestOperation?: PendingOperation<unknown>
274
+ ): ZLinkRequestResult<TReply> {
275
+ try {
276
+ const operation = this.requests.begin(timeoutMs, signal, requestOperation);
277
+ const pending = this.outbound.request<TReply>(
278
+ channelName,
279
+ packetName,
280
+ request,
281
+ timeoutMs,
282
+ signal,
283
+ metadata,
284
+ onAdmitted,
285
+ operation
286
+ );
287
+ return {
288
+ pending,
289
+ decode: identityRequestReply<TReply>,
290
+ mapFailure: identityRequestReply,
291
+ operation: operation as PendingOperation<TReply>
292
+ };
293
+ } catch (error) {
294
+ return rejectZLinkRequestReply(error);
295
+ }
266
296
  }
267
297
 
268
298
  tryPublish(
@@ -296,7 +326,7 @@ export class ZLinkChannelRuntimeManager {
296
326
  return this.outbound.routeSubmit(routerChannelId, targetNodeRid, packetName, message, metadata);
297
327
  }
298
328
 
299
- async routeRequest<TReply>(
329
+ routeRequest<TReply>(
300
330
  routerChannelId: string,
301
331
  targetNodeRid: string,
302
332
  packetName: string | undefined,
@@ -304,7 +334,8 @@ export class ZLinkChannelRuntimeManager {
304
334
  timeoutMs: number | undefined,
305
335
  signal?: AbortSignal,
306
336
  metadata?: ReadonlyMap<string, string>,
307
- onAdmitted?: () => void
337
+ onAdmitted?: () => void,
338
+ requestOperation?: PendingOperation<unknown>
308
339
  ): Promise<TReply> {
309
340
  return this.outbound.routeRequest<TReply>(
310
341
  routerChannelId,
@@ -314,7 +345,8 @@ export class ZLinkChannelRuntimeManager {
314
345
  timeoutMs,
315
346
  signal,
316
347
  metadata,
317
- onAdmitted
348
+ onAdmitted,
349
+ requestOperation
318
350
  );
319
351
  }
320
352
 
@@ -327,14 +359,16 @@ export class ZLinkChannelRuntimeManager {
327
359
  return this.spotRoutes.routeSendToSpot(spotRouteTarget, packetName, message, metadata);
328
360
  }
329
361
 
330
- async routeRequestToSpot<TReply>(
362
+ routeRequestToSpot<TReply>(
331
363
  spotRouteTarget: ZLinkSpotRouteTarget,
332
364
  packetName: string | undefined,
333
365
  request: unknown,
334
366
  timeoutMs: number | undefined,
335
367
  signal?: AbortSignal,
336
368
  metadata?: ReadonlyMap<string, string>,
337
- onAdmitted?: () => void
369
+ onAdmitted?: () => void,
370
+ requestOperation?: PendingOperation<unknown>,
371
+ destination?: OperationObserver<unknown, unknown>
338
372
  ): Promise<TReply> {
339
373
  return this.spotRoutes.routeRequestToSpot<TReply>(
340
374
  spotRouteTarget,
@@ -343,18 +377,22 @@ export class ZLinkChannelRuntimeManager {
343
377
  timeoutMs,
344
378
  signal,
345
379
  metadata,
346
- onAdmitted
380
+ onAdmitted,
381
+ requestOperation,
382
+ destination
347
383
  );
348
384
  }
349
385
 
350
- async routeRequestFromSpotToSpot<TReply>(
386
+ routeRequestFromSpotToSpot<TReply>(
351
387
  sourceSpot: ZLinkBackendSpot,
352
388
  spotRouteTarget: ZLinkSpotRouteTarget,
353
389
  packetName: string | undefined,
354
390
  request: unknown,
355
391
  timeoutMs: number | undefined,
356
392
  signal?: AbortSignal,
357
- onAdmitted?: () => void
393
+ onAdmitted?: () => void,
394
+ requestOperation?: PendingOperation<unknown>,
395
+ destination?: OperationObserver<unknown, unknown>
358
396
  ): Promise<TReply> {
359
397
  return this.spotRoutes.routeRequestFromSpotToSpot<TReply>(
360
398
  sourceSpot,
@@ -363,7 +401,9 @@ export class ZLinkChannelRuntimeManager {
363
401
  request,
364
402
  timeoutMs,
365
403
  signal,
366
- onAdmitted
404
+ onAdmitted,
405
+ requestOperation,
406
+ destination
367
407
  );
368
408
  }
369
409
 
@@ -389,7 +429,8 @@ export class ZLinkChannelRuntimeManager {
389
429
  request: Message,
390
430
  timeoutMs: number | undefined,
391
431
  signal?: AbortSignal,
392
- onAdmitted?: () => void
432
+ onAdmitted?: () => void,
433
+ requestOperation?: PendingOperation<unknown>
393
434
  ): Promise<readonly Message[]> {
394
435
  return this.spotRoutes.routeRequestRawFromSpotToSpot(
395
436
  sourceSpot,
@@ -397,7 +438,8 @@ export class ZLinkChannelRuntimeManager {
397
438
  request,
398
439
  timeoutMs,
399
440
  signal,
400
- onAdmitted
441
+ onAdmitted,
442
+ requestOperation
401
443
  );
402
444
  }
403
445
 
@@ -406,14 +448,16 @@ export class ZLinkChannelRuntimeManager {
406
448
  request: Message,
407
449
  timeoutMs: number | undefined,
408
450
  signal?: AbortSignal,
409
- onAdmitted?: () => void
451
+ onAdmitted?: () => void,
452
+ requestOperation?: PendingOperation<unknown>
410
453
  ): Promise<readonly Message[]> {
411
454
  return this.spotRoutes.routeRequestRawToSpot(
412
455
  spotRouteTarget,
413
456
  request,
414
457
  timeoutMs,
415
458
  signal,
416
- onAdmitted
459
+ onAdmitted,
460
+ requestOperation
417
461
  );
418
462
  }
419
463
 
@@ -426,6 +470,7 @@ export class ZLinkChannelRuntimeManager {
426
470
  }
427
471
 
428
472
  async dispose(signal?: AbortSignal): Promise<void> {
473
+ this.requests.close();
429
474
  await this.lifecycle.dispose(signal);
430
475
  }
431
476
  }
@@ -441,6 +486,7 @@ function splitMonitoringSocketSourceName(sourceName: string): readonly [string,
441
486
  }
442
487
 
443
488
  export interface ZLinkChannelRuntimeManagerOptions {
489
+ readonly requests?: RequestRuntime;
444
490
  readonly listenerRecords?: ZLinkListenerRecords;
445
491
  readonly internalRouteSendHandlers?: ReadonlyMap<string, ZLinkRouteRuntimeSendHandler>;
446
492
  readonly internalRouteRequestHandlers?: ReadonlyMap<string, ZLinkRouteRuntimeRequestHandler>;
@@ -460,6 +506,7 @@ export interface ZLinkChannelRuntimeManagerOptions {
460
506
  ): Promise<TReply>;
461
507
  };
462
508
  readonly messageFlowModeCell?: ZLinkMessageFlowModeCell;
509
+ readonly telemetryLease?: ZLinkTelemetryLease;
463
510
  readonly oneWayFailureSink?: (error: unknown) => void;
464
511
  readonly applicationJobQueue?: ApplicationJobQueue;
465
512
  }
@@ -1,3 +1,4 @@
1
+ import { inspectRuntime } from '../internal-observation';
1
2
  import { RuntimeDisposal } from '../disposal';
2
3
  import { UINT64_MAX } from '@zlink-systems/stream-wire';
3
4
  import { randomBytes, randomUUID } from 'node:crypto';
@@ -16,7 +17,10 @@ import {
16
17
  ZLINK_MAX_PUBLIC_WEIGHT
17
18
  } from '../../contracts/Configuration/RegistrationBuilderPolicy';
18
19
  import type { ZLinkChannelOptions } from '../../contracts/Configuration/RegistrationTypes';
19
- import { attachEndpointConnections } from '../../contracts/Configuration/RuntimeEndpointConnections';
20
+ import {
21
+ attachEndpointConnections,
22
+ endpointConnections
23
+ } from '../../contracts/Configuration/RuntimeEndpointConnections';
20
24
  import { createAbortError, throwIfAborted } from '../abort';
21
25
  import type {
22
26
  ZLinkBackendContext,
@@ -132,6 +136,14 @@ interface FanoutPublisherConnection {
132
136
  }
133
137
 
134
138
  export class ZLinkChannelSocketRegistry {
139
+ [inspectRuntime]() {
140
+ return Object.freeze({
141
+ clientServerConnections: this.clientServerConnections.size,
142
+ fanoutConnections: this.fanoutConnections.size,
143
+ clientServerObservers: this.clientServerDiscovery[inspectRuntime]().clientServerObservers
144
+ });
145
+ }
146
+
135
147
  private readonly clientDealers = new Map<string, ZLinkBackendDealerSocket>();
136
148
  private readonly channelRouters = new Map<string, ZLinkBackendRouterSocket>();
137
149
  private readonly publishers = new Map<string, ZLinkBackendPublisherSocket>();
@@ -144,7 +156,7 @@ export class ZLinkChannelSocketRegistry {
144
156
  readonly lifecycleGeneration: bigint;
145
157
  }
146
158
  >();
147
- private readonly clientServerConnections = new Map<string, ClientServerPhysicalConnection>();
159
+ readonly clientServerConnections = new Map<string, ClientServerPhysicalConnection>();
148
160
  private readonly clientServerDiscovery = new ServiceDiscoveryRegistry();
149
161
  private readonly clientServerReadyIdentities = new Map<
150
162
  string,
@@ -1443,7 +1455,7 @@ export class ZLinkChannelSocketRegistry {
1443
1455
  }
1444
1456
  }
1445
1457
 
1446
- private applyClientServerDescriptorUpdate(
1458
+ applyClientServerDescriptorUpdate(
1447
1459
  connectionId: string,
1448
1460
  connection: { readonly channelName: string; readonly physicalConnectionId: symbol },
1449
1461
  admission: ZLinkClientServerAdmission
@@ -1506,7 +1518,7 @@ export class ZLinkChannelSocketRegistry {
1506
1518
  this.clientServerLivenessTimer.unref();
1507
1519
  }
1508
1520
 
1509
- private drainSocketMonitors(): void {
1521
+ drainSocketMonitors(): void {
1510
1522
  for (const monitor of this.ownedResources) if ('drain' in monitor) monitor.drain();
1511
1523
  }
1512
1524
 
@@ -1714,7 +1726,10 @@ export class ZLinkChannelSocketRegistry {
1714
1726
  applySocketConfig(router, routeChannel);
1715
1727
  this.trackRouteMonitor(routerChannelId, router);
1716
1728
  if ((routeChannel.manualConnections ?? []).length > 0) {
1717
- for (const endpoint of routeChannel.manualConnections ?? []) {
1729
+ for (const endpoint of endpointConnections(
1730
+ routeChannel,
1731
+ routeChannel.manualConnections ?? []
1732
+ ).listConnections()) {
1718
1733
  router.connect(endpoint);
1719
1734
  }
1720
1735
  }