@zlink-systems/framework 0.26.0 → 0.28.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 (561) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActorClient.d.ts +1 -1
  3. package/dist/contracts/Channels/Calls.d.ts +1 -1
  4. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  5. package/dist/contracts/Common/CoreTypes.js +7 -0
  6. package/dist/contracts/Common/index.d.ts +1 -1
  7. package/dist/contracts/Common/index.js +0 -1
  8. package/dist/contracts/Configuration/Builders.d.ts +0 -1
  9. package/dist/contracts/Configuration/Configs.d.ts +0 -1
  10. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  11. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  12. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  13. package/dist/contracts/Configuration/Registration.js +58 -36
  14. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  15. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  16. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  17. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  18. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
  19. package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
  20. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  21. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  22. package/dist/contracts/Handlers/JsonContract.js +10 -4
  23. package/dist/contracts/Locations/Authority.d.ts +1 -1
  24. package/dist/contracts/Locations/Authority.js +3 -2
  25. package/dist/contracts/Locations/Options.js +1 -1
  26. package/dist/contracts/Locations/Stores.d.ts +12 -0
  27. package/dist/contracts/Locations/Stores.js +9 -0
  28. package/dist/contracts/Spots/Contracts.d.ts +2 -2
  29. package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
  30. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
  31. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
  32. package/dist/internal.d.ts +4 -0
  33. package/dist/internal.js +15 -1
  34. package/dist/nest-integration.d.ts +4 -2
  35. package/dist/nest-integration.js +14 -4
  36. package/dist/runtime/abort.d.ts +1 -0
  37. package/dist/runtime/abort.js +8 -5
  38. package/dist/runtime/activation-admission.d.ts +1 -2
  39. package/dist/runtime/activation-admission.js +2 -6
  40. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  41. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  42. package/dist/runtime/actors/actor-client.d.ts +2 -2
  43. package/dist/runtime/actors/actor-client.js +49 -153
  44. package/dist/runtime/actors/actor-context.d.ts +3 -5
  45. package/dist/runtime/actors/actor-context.js +13 -11
  46. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  47. package/dist/runtime/actors/actor-handoff.js +8 -8
  48. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  49. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  50. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  51. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  52. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  53. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  54. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  55. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  56. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  57. package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
  58. package/dist/runtime/actors/actor-request-deadline.js +6 -0
  59. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  60. package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
  61. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  62. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  63. package/dist/runtime/actors/bound-session-wire.js +2 -7
  64. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  65. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  66. package/dist/runtime/actors/index.d.ts +9 -7
  67. package/dist/runtime/actors/index.js +87 -69
  68. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  69. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  70. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  71. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  72. package/dist/runtime/admission.d.ts +2 -0
  73. package/dist/runtime/admission.js +7 -1
  74. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  75. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  76. package/dist/runtime/backend/contracts/index.d.ts +7 -27
  77. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  78. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  79. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  80. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
  81. package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
  82. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  83. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
  84. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  85. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  86. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  87. package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
  88. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  89. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  90. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  91. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  92. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  93. package/dist/runtime/backend/runtime-values.js +2 -0
  94. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  95. package/dist/runtime/channels/channel-clients.js +73 -59
  96. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  97. package/dist/runtime/channels/channel-envelope.d.ts +1 -1
  98. package/dist/runtime/channels/channel-envelope.js +51 -39
  99. package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
  100. package/dist/runtime/channels/channel-outbound-operations.js +25 -42
  101. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  102. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  103. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  104. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  105. package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
  106. package/dist/runtime/channels/channel-runtime-manager.js +13 -10
  107. package/dist/runtime/channels/channel-socket-options.js +3 -12
  108. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  109. package/dist/runtime/channels/channel-socket-registry.js +240 -177
  110. package/dist/runtime/channels/channel-transports.d.ts +21 -31
  111. package/dist/runtime/channels/channel-transports.js +80 -62
  112. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  113. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  114. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  115. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  116. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  117. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  118. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  119. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  120. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  121. package/dist/runtime/channels/local-spot-route-transport.js +1 -3
  122. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
  123. package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
  124. package/dist/runtime/channels/source-spot-router.d.ts +1 -1
  125. package/dist/runtime/channels/source-spot-router.js +2 -4
  126. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  127. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  128. package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
  129. package/dist/runtime/channels/spot-node-route-transport.js +5 -5
  130. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
  131. package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
  132. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
  133. package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
  134. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  135. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  136. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  137. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  138. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  139. package/dist/runtime/diagnostics/flow-context.js +16 -2
  140. package/dist/runtime/diagnostics/index.d.ts +4 -2
  141. package/dist/runtime/diagnostics/index.js +14 -4
  142. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  143. package/dist/runtime/diagnostics/message-flow.js +10 -19
  144. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  145. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  146. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  147. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  148. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  149. package/dist/runtime/disposal.d.ts +5 -0
  150. package/dist/runtime/disposal.js +22 -0
  151. package/dist/runtime/execution/index.d.ts +12 -9
  152. package/dist/runtime/execution/index.js +58 -14
  153. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  154. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  155. package/dist/runtime/execution/state-lane.d.ts +8 -1
  156. package/dist/runtime/execution/state-lane.js +118 -3
  157. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  158. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  159. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  160. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  161. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  162. package/dist/runtime/foundation/operation-identity.js +9 -5
  163. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  164. package/dist/runtime/foundation/operation-registry.js +34 -44
  165. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  166. package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
  167. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  168. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  169. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  170. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  171. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  172. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  173. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  174. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  175. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  176. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  177. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  178. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  179. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  180. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  181. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  182. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  183. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  184. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  185. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  186. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  187. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  188. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  189. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  190. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  191. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  192. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  193. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  194. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  195. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  196. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  197. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  198. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  199. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  200. package/dist/runtime/framework-errors-internal.js +343 -122
  201. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  202. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  203. package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
  204. package/dist/runtime/host/actor-packet-relay.js +54 -99
  205. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  206. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  207. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  208. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  209. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  210. package/dist/runtime/host/application-job-queue.js +16 -33
  211. package/dist/runtime/host/bound-session-relay.js +1 -1
  212. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  213. package/dist/runtime/host/index.d.ts +14 -13
  214. package/dist/runtime/host/index.js +190 -171
  215. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  216. package/dist/runtime/host/instance-activation-authority.js +17 -45
  217. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  218. package/dist/runtime/host/location-runtime-owner.js +2 -2
  219. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  220. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  221. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  222. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  223. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  224. package/dist/runtime/host/remote-bound-session-relay.js +15 -28
  225. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  226. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  227. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  228. package/dist/runtime/host/runtime-shutdown.js +18 -21
  229. package/dist/runtime/host/service-relocation-control.js +6 -1
  230. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  231. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  232. package/dist/runtime/host/spot-address-transport.d.ts +3 -12
  233. package/dist/runtime/host/spot-address-transport.js +78 -220
  234. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  235. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  236. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  237. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  238. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  239. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  240. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  241. package/dist/runtime/locations/authority-key-codec.js +4 -3
  242. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  243. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  244. package/dist/runtime/locations/creation-operation-id.js +6 -4
  245. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  246. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  247. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  248. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  249. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  250. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  251. package/dist/runtime/locations/key-codec.js +3 -2
  252. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  253. package/dist/runtime/locations/lease-tracker.js +7 -11
  254. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  255. package/dist/runtime/locations/lifecycle.js +2 -31
  256. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  257. package/dist/runtime/locations/location-store-failure.js +7 -0
  258. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  259. package/dist/runtime/locations/location-store-pages.js +13 -0
  260. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  261. package/dist/runtime/locations/location-store-repository.js +309 -336
  262. package/dist/runtime/locations/relocation-blob.js +18 -5
  263. package/dist/runtime/locations/resolvers.d.ts +5 -5
  264. package/dist/runtime/locations/resolvers.js +37 -28
  265. package/dist/runtime/locations/runtime.d.ts +5 -4
  266. package/dist/runtime/locations/runtime.js +123 -92
  267. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  268. package/dist/runtime/locations/spot-location-claims.js +42 -1
  269. package/dist/runtime/messaging/payload-codec.js +26 -20
  270. package/dist/runtime/messaging/request-deadline.d.ts +3 -0
  271. package/dist/runtime/messaging/request-deadline.js +39 -0
  272. package/dist/runtime/messaging/submission-result.d.ts +4 -0
  273. package/dist/runtime/messaging/submission-result.js +56 -1
  274. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  275. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  276. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  277. package/dist/runtime/spots/index.d.ts +14 -20
  278. package/dist/runtime/spots/index.js +302 -176
  279. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  280. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  281. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  282. package/dist/runtime/spots/spot-activation-state.js +2 -2
  283. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  284. package/dist/runtime/spots/spot-activation.js +49 -32
  285. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  286. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  287. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  288. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  289. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  290. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  291. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  292. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  293. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  294. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  295. package/dist/runtime/spots/spot-context.d.ts +2 -2
  296. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  297. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  298. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  299. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  300. package/dist/runtime/spots/spot-manager-public.js +5 -4
  301. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  302. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  303. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  304. package/dist/runtime/spots/spot-outbound.d.ts +7 -8
  305. package/dist/runtime/spots/spot-outbound.js +21 -23
  306. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  307. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  308. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  309. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  310. package/dist/runtime/spots/spot-route-replies.js +3 -1
  311. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  312. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  313. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  314. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  315. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  316. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  317. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  318. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  319. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  320. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  321. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  322. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  323. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  324. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  325. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
  326. package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
  327. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  328. package/dist/runtime/streams/bound-session-service.js +12 -2
  329. package/dist/runtime/streams/index.d.ts +16 -17
  330. package/dist/runtime/streams/index.js +22 -23
  331. package/dist/runtime/streams/managed-stream.d.ts +5 -2
  332. package/dist/runtime/streams/managed-stream.js +20 -13
  333. package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
  334. package/dist/runtime/streams/protocol.d.ts +6 -33
  335. package/dist/runtime/streams/protocol.js +38 -110
  336. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  337. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  338. package/dist/runtime/streams/session-calls.d.ts +6 -8
  339. package/dist/runtime/streams/session-calls.js +6 -22
  340. package/dist/runtime/streams/session-context.d.ts +10 -10
  341. package/dist/runtime/streams/session-context.js +25 -10
  342. package/dist/runtime/streams/session-requests.js +2 -1
  343. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  344. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  345. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  346. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  347. package/dist/runtime/workers/index.d.ts +2 -2
  348. package/dist/runtime/workers/index.js +5 -4
  349. package/package.json +3 -3
  350. package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
  351. package/src/contracts/Channels/Calls.ts +1 -1
  352. package/src/contracts/Common/CoreTypes.ts +7 -0
  353. package/src/contracts/Common/index.ts +1 -1
  354. package/src/contracts/Configuration/Builders.ts +0 -1
  355. package/src/contracts/Configuration/Configs.ts +0 -1
  356. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  357. package/src/contracts/Configuration/Registration.ts +92 -48
  358. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  359. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
  360. package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
  361. package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
  362. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  363. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  364. package/src/contracts/Handlers/JsonContract.ts +14 -4
  365. package/src/contracts/Locations/Authority.ts +7 -3
  366. package/src/contracts/Locations/Options.ts +1 -1
  367. package/src/contracts/Locations/Stores.ts +14 -0
  368. package/src/contracts/Spots/Contracts.ts +2 -2
  369. package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
  370. package/src/contracts/Streams/IZLinkSession.ts +2 -3
  371. package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
  372. package/src/internal.ts +14 -0
  373. package/src/nest-integration.ts +28 -10
  374. package/src/runtime/abort.ts +6 -5
  375. package/src/runtime/activation-admission.ts +2 -8
  376. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  377. package/src/runtime/actors/actor-client.ts +85 -218
  378. package/src/runtime/actors/actor-context.ts +39 -33
  379. package/src/runtime/actors/actor-handoff.ts +24 -22
  380. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  381. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  382. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  383. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  384. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  385. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  386. package/src/runtime/actors/actor-request-deadline.ts +4 -0
  387. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  388. package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
  389. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  390. package/src/runtime/actors/bound-session-wire.ts +2 -8
  391. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  392. package/src/runtime/actors/index.ts +100 -79
  393. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  394. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  395. package/src/runtime/admission.ts +8 -1
  396. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  397. package/src/runtime/backend/contracts/index.ts +14 -37
  398. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  399. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  400. package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
  401. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
  402. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  403. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  404. package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
  405. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  406. package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
  407. package/src/runtime/backend/raw-binding-port.ts +1 -1
  408. package/src/runtime/backend/runtime-values.ts +4 -1
  409. package/src/runtime/channels/channel-clients.ts +139 -102
  410. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  411. package/src/runtime/channels/channel-envelope.ts +74 -57
  412. package/src/runtime/channels/channel-outbound-operations.ts +40 -55
  413. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  414. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  415. package/src/runtime/channels/channel-runtime-manager.ts +12 -30
  416. package/src/runtime/channels/channel-socket-options.ts +8 -15
  417. package/src/runtime/channels/channel-socket-registry.ts +291 -196
  418. package/src/runtime/channels/channel-transports.ts +168 -145
  419. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  420. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  421. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  422. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  423. package/src/runtime/channels/local-spot-route-transport.ts +1 -5
  424. package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
  425. package/src/runtime/channels/source-spot-router.ts +2 -9
  426. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  427. package/src/runtime/channels/spot-node-route-transport.ts +7 -9
  428. package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
  429. package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
  430. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  431. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  432. package/src/runtime/diagnostics/flow-context.ts +16 -2
  433. package/src/runtime/diagnostics/index.ts +27 -17
  434. package/src/runtime/diagnostics/message-flow.ts +15 -25
  435. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  436. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  437. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  438. package/src/runtime/disposal.ts +19 -0
  439. package/src/runtime/execution/index.ts +60 -20
  440. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  441. package/src/runtime/execution/state-lane.ts +142 -4
  442. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  443. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  444. package/src/runtime/foundation/operation-identity.ts +11 -5
  445. package/src/runtime/foundation/operation-registry.ts +33 -50
  446. package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
  447. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  448. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  449. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  450. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  451. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  452. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  453. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  454. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  455. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  456. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  457. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  458. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  459. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  460. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  461. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  462. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  463. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  464. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  465. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  466. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  467. package/src/runtime/framework-errors-internal.ts +380 -134
  468. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  469. package/src/runtime/host/actor-packet-relay.ts +63 -160
  470. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  471. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  472. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  473. package/src/runtime/host/application-job-queue.ts +28 -34
  474. package/src/runtime/host/bound-session-relay.ts +1 -2
  475. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  476. package/src/runtime/host/index.ts +327 -320
  477. package/src/runtime/host/instance-activation-authority.ts +89 -109
  478. package/src/runtime/host/location-runtime-owner.ts +4 -2
  479. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  480. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  481. package/src/runtime/host/remote-bound-session-relay.ts +16 -57
  482. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  483. package/src/runtime/host/runtime-shutdown.ts +17 -21
  484. package/src/runtime/host/service-relocation-control.ts +14 -1
  485. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  486. package/src/runtime/host/spot-address-transport.ts +175 -356
  487. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  488. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  489. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  490. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  491. package/src/runtime/locations/authority-key-codec.ts +7 -3
  492. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  493. package/src/runtime/locations/creation-operation-id.ts +6 -3
  494. package/src/runtime/locations/domain-store-contract.ts +12 -3
  495. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  496. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  497. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  498. package/src/runtime/locations/key-codec.ts +3 -2
  499. package/src/runtime/locations/lease-tracker.ts +8 -14
  500. package/src/runtime/locations/lifecycle.ts +13 -43
  501. package/src/runtime/locations/location-store-failure.ts +4 -0
  502. package/src/runtime/locations/location-store-pages.ts +18 -0
  503. package/src/runtime/locations/location-store-repository.ts +457 -482
  504. package/src/runtime/locations/relocation-blob.ts +17 -6
  505. package/src/runtime/locations/resolvers.ts +75 -49
  506. package/src/runtime/locations/runtime.ts +220 -110
  507. package/src/runtime/locations/spot-location-claims.ts +58 -1
  508. package/src/runtime/messaging/payload-codec.ts +35 -24
  509. package/src/runtime/messaging/request-deadline.ts +58 -0
  510. package/src/runtime/messaging/submission-result.ts +72 -2
  511. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  512. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  513. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  514. package/src/runtime/spots/index.ts +433 -229
  515. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  516. package/src/runtime/spots/spot-activation-state.ts +2 -2
  517. package/src/runtime/spots/spot-activation.ts +67 -37
  518. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  519. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  520. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  521. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  522. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  523. package/src/runtime/spots/spot-context.ts +3 -3
  524. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  525. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  526. package/src/runtime/spots/spot-manager-public.ts +21 -17
  527. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  528. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  529. package/src/runtime/spots/spot-outbound.ts +59 -47
  530. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  531. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  532. package/src/runtime/spots/spot-route-replies.ts +6 -4
  533. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  534. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  535. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  536. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  537. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  538. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  539. package/src/runtime/spots/spot-timer.ts +3 -2
  540. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  541. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  542. package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
  543. package/src/runtime/streams/bound-session-service.ts +22 -2
  544. package/src/runtime/streams/index.ts +78 -68
  545. package/src/runtime/streams/managed-stream.ts +32 -23
  546. package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
  547. package/src/runtime/streams/protocol.ts +34 -88
  548. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  549. package/src/runtime/streams/session-calls.ts +11 -36
  550. package/src/runtime/streams/session-context.ts +60 -25
  551. package/src/runtime/streams/session-requests.ts +2 -1
  552. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  553. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  554. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  555. package/src/runtime/workers/index.ts +13 -12
  556. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  557. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  558. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  559. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  560. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  561. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -2,7 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkChannelOutboundOperations = void 0;
4
4
  exports.keepChannelRequestAlive = keepChannelRequestAlive;
5
+ exports.requestTerminalResult = requestTerminalResult;
6
+ exports.isRemoteChannelErrorReply = isRemoteChannelErrorReply;
5
7
  const framework_errors_internal_1 = require("../framework-errors-internal");
8
+ const request_deadline_1 = require("../messaging/request-deadline");
6
9
  const runtime_values_1 = require("../backend/runtime-values");
7
10
  const submission_result_1 = require("../messaging/submission-result");
8
11
  const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
@@ -30,16 +33,15 @@ class ZLinkChannelOutboundOperations {
30
33
  pendingRequestCount(channelName) {
31
34
  return this.pendingRequests.get(channelName) ?? 0;
32
35
  }
33
- send(channelName, packetName, message, signal, metadata = EMPTY_OUTBOUND_METADATA) {
36
+ send(channelName, packetName, message, metadata = EMPTY_OUTBOUND_METADATA) {
34
37
  // Call-scoped flow (spec 27 §4): the envelope encoder and the trace
35
38
  // points below share one ambient flow that does not outlive this call.
36
- return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.sendScoped(channelName, packetName, message, signal, metadata));
39
+ return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.sendScoped(channelName, packetName, message, metadata));
37
40
  }
38
- async sendScoped(channelName, packetName, message, signal, metadata = EMPTY_OUTBOUND_METADATA) {
39
- (0, abort_1.throwIfAborted)(signal);
40
- const dealer = await this.sockets.awaitClientDealerForOutbound(channelName, signal);
41
+ async sendScoped(channelName, packetName, message, metadata = EMPTY_OUTBOUND_METADATA) {
42
+ const dealer = await this.sockets.awaitClientDealerForOutbound(channelName);
41
43
  if (dealer === undefined) {
42
- return { status: submission_result_1.ZLinkSubmitStatus.RouteNotConnected };
44
+ return { status: submission_result_1.ZLinkSubmitStatus.Shutdown };
43
45
  }
44
46
  const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(3 /* ZLinkChannelMessageKind.Command */, channelName, packetName, message, undefined, undefined, this.codecs, undefined, this.dispatchServices.flowCreationEnabled(), metadata);
45
47
  try {
@@ -47,17 +49,8 @@ class ZLinkChannelOutboundOperations {
47
49
  }
48
50
  catch (error) {
49
51
  (0, channel_envelope_1.closeMessages)(parts);
50
- if (isSubmitDeadline(error)) {
51
- this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Backpressured)?.trace({
52
- surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel,
53
- messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
54
- channelName,
55
- channelRouteKind: 'client_server',
56
- packetName,
57
- correlationId: undefined,
58
- result: 'backpressured'
59
- });
60
- return { status: submission_result_1.ZLinkSubmitStatus.TimedOut };
52
+ if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'submit') {
53
+ return (0, submission_result_1.classifySubmitResult)(error.result, 'One-way send', error.phase);
61
54
  }
62
55
  throw error;
63
56
  }
@@ -79,7 +72,8 @@ class ZLinkChannelOutboundOperations {
79
72
  return keepChannelRequestAlive((0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.requestScoped(channelName, packetName, request, timeoutMs, signal, metadata)));
80
73
  }
81
74
  async requestScoped(channelName, packetName, request, timeoutMs, signal, metadata) {
82
- const deadlineAtMs = timeoutMs === undefined ? undefined : performance.now() + timeoutMs;
75
+ const deadlineMs = timeoutMs === undefined ? undefined : performance.now() + timeoutMs;
76
+ const deadlineUnixMs = timeoutMs === undefined ? undefined : Date.now() + timeoutMs;
83
77
  let correlationId;
84
78
  let selectedServerRid;
85
79
  let terminalRecorded = false;
@@ -100,16 +94,16 @@ class ZLinkChannelOutboundOperations {
100
94
  };
101
95
  try {
102
96
  (0, abort_1.throwIfAborted)(signal);
103
- const dealer = await this.sockets.awaitClientDealerForOutbound(channelName, signal, deadlineAtMs);
104
- // Binding timeouts are whole milliseconds; rounding down keeps the call's deadline.
105
- const remainingMs = deadlineAtMs === undefined ? undefined : Math.floor(deadlineAtMs - performance.now());
106
- if (dealer === undefined || (remainingMs !== undefined && remainingMs <= 0)) {
107
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Channel '${channelName}' has no ready ClientServer server.`);
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.`);
108
102
  }
109
103
  const serverRid = this.sockets.selectedClientServerRid(channelName, dealer);
110
104
  selectedServerRid = serverRid;
111
105
  correlationId = (0, channel_envelope_1.newChannelCorrelationId)();
112
- const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(1 /* ZLinkChannelMessageKind.Request */, channelName, packetName, request, remainingMs, undefined, this.codecs, correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
106
+ const parts = (0, channel_envelope_1.encodeChannelEnvelopePartsAtDeadline)(1 /* ZLinkChannelMessageKind.Request */, channelName, packetName, request, deadlineUnixMs, undefined, this.codecs, correlationId, this.dispatchServices.flowCreationEnabled(), metadata);
113
107
  this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent)?.trace({
114
108
  surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.Channel,
115
109
  messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
@@ -123,7 +117,7 @@ class ZLinkChannelOutboundOperations {
123
117
  let replyParts = [];
124
118
  try {
125
119
  try {
126
- replyParts = await (0, abort_1.awaitWithAbort)(dealer.request(parts, remainingMs), signal);
120
+ replyParts = await (0, abort_1.awaitWithAbort)(dealer.request(parts, (0, request_deadline_1.remainingRequestTimeout)(`Channel request '${channelName}'`, deadlineMs)), signal);
127
121
  }
128
122
  catch (error) {
129
123
  if (signal?.aborted === true)
@@ -134,7 +128,7 @@ class ZLinkChannelOutboundOperations {
134
128
  if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'request') {
135
129
  throw new contracts_1.ZLinkFrameworkException((0, framework_errors_internal_1.requestResultToPublicErrorKind)(error.result), `Channel '${channelName}' request failed with result ${error.result}.`, error);
136
130
  }
137
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Channel '${channelName}' request failed before a reply was received.`, true, error);
131
+ throw error;
138
132
  }
139
133
  return (0, channel_envelope_1.decodeChannelReply)(replyParts, this.codecs);
140
134
  }
@@ -183,29 +177,18 @@ class ZLinkChannelOutboundOperations {
183
177
  publisher.publish(topic, parts);
184
178
  return publishResult(submission_result_1.ZLinkSubmitStatus.Submitted);
185
179
  }
186
- routeSubmit(routerChannelId, targetNodeRid, packetName, message, signal, metadata = EMPTY_OUTBOUND_METADATA) {
187
- return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.routeSubmitScoped(routerChannelId, targetNodeRid, packetName, message, signal, metadata));
180
+ routeSubmit(routerChannelId, targetNodeRid, packetName, message, metadata = EMPTY_OUTBOUND_METADATA) {
181
+ return (0, flow_context_1.runWithOutboundFlow)(this.dispatchServices.flowCreationEnabled(), () => this.routeSubmitScoped(routerChannelId, targetNodeRid, packetName, message, metadata));
188
182
  }
189
- async routeSubmitScoped(routerChannelId, targetNodeRid, packetName, message, signal, metadata = EMPTY_OUTBOUND_METADATA) {
190
- (0, abort_1.throwIfAborted)(signal);
183
+ async routeSubmitScoped(routerChannelId, targetNodeRid, packetName, message, metadata = EMPTY_OUTBOUND_METADATA) {
191
184
  const router = this.sockets.routeRouter(routerChannelId);
192
185
  const parts = (0, channel_envelope_1.encodeChannelEnvelopeParts)(3 /* ZLinkChannelMessageKind.Command */, routerChannelId, packetName, message, undefined, undefined, (0, channel_framework_packets_1.codecsForFrameworkPacket)(packetName, this.codecs), undefined, this.dispatchServices.flowCreationEnabled(), metadata);
193
186
  try {
194
187
  await router.send(targetNodeRid, parts);
195
188
  }
196
189
  catch (error) {
197
- if (isSubmitDeadline(error)) {
198
- this.dispatchServices.beginOutbound(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Backpressured)?.trace({
199
- surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
200
- messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
201
- channelName: routerChannelId,
202
- channelRouteKind: 'route_mesh',
203
- packetName,
204
- correlationId: undefined,
205
- targetRid: targetNodeRid,
206
- result: 'backpressured'
207
- });
208
- return { status: submission_result_1.ZLinkSubmitStatus.TimedOut };
190
+ if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'submit') {
191
+ return (0, submission_result_1.classifySubmitResult)(error.result, 'One-way send', error.phase);
209
192
  }
210
193
  throw error;
211
194
  }
@@ -5,6 +5,8 @@ import type { ZLinkMultipartAsyncSubmitOperation } from './channel-multipart';
5
5
  import type { ZLinkChannelEnvelopeHeader } from './channel-envelope';
6
6
  import { type ZLinkReceiveTaskErrorReporter } from './channel-receive-task-tracker';
7
7
  import { ApplicationJobQueue } from '../host/application-job-queue';
8
+ import { ZLinkSerialExecutionQueue } from '../execution/serial-execution-queue';
9
+ export declare function createChannelApplicationDispatchQueue(): ZLinkSerialExecutionQueue;
8
10
  interface ZLinkMultipartOperation<TNext> {
9
11
  message(message: MessageLike): TNext;
10
12
  }
@@ -84,6 +86,7 @@ export declare class ZLinkChannelReceiveLoop {
84
86
  private readonly poller;
85
87
  private readonly applicationJobQueue;
86
88
  private readonly roundRobin?;
89
+ private readonly applicationDispatchQueue;
87
90
  private stoppedFlag;
88
91
  private isStopped;
89
92
  private running?;
@@ -93,7 +96,7 @@ export declare class ZLinkChannelReceiveLoop {
93
96
  private readonly capacityStop;
94
97
  constructor(channelName: string, router: ZLinkBackendRouterSocket & {
95
98
  reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
96
- }, dispatcher: ZLinkChannelRequestDispatchLoop, spotRouteBridge: ZLinkBackendSpotRouteBridge | undefined, infrastructureHandler: ZLinkChannelInfrastructureHandler | undefined, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, reportError?: ZLinkReceiveTaskErrorReporter, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined);
99
+ }, dispatcher: ZLinkChannelRequestDispatchLoop, spotRouteBridge: ZLinkBackendSpotRouteBridge | undefined, infrastructureHandler: ZLinkChannelInfrastructureHandler | undefined, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, reportError?: ZLinkReceiveTaskErrorReporter, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
97
100
  run(signal?: AbortSignal): Promise<void>;
98
101
  private runLoop;
99
102
  stop(): Promise<void>;
@@ -108,6 +111,7 @@ export declare class ZLinkSubscriberReceiveLoop {
108
111
  private readonly applicationJobQueue;
109
112
  private readonly infrastructureHandler?;
110
113
  private readonly roundRobin?;
114
+ private readonly applicationDispatchQueue;
111
115
  private stoppedFlag;
112
116
  private isStopped;
113
117
  private running?;
@@ -115,7 +119,7 @@ export declare class ZLinkSubscriberReceiveLoop {
115
119
  private readonly receiveOwner;
116
120
  private readonly rawReceiveReservations;
117
121
  private readonly capacityStop;
118
- constructor(adapter: ZLinkChannelBackendAdapter, subscriber: ZLinkBackendSubscriberSocket, dispatcher: ZLinkChannelPublishDispatchLoop, applicationJobQueue: ApplicationJobQueue, infrastructureHandler?: ((topicMessage: ReturnType<ZLinkChannelBackendAdapter["createTopicMessage"]>) => boolean | ZLinkSubscriberInfrastructureResult) | undefined, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter);
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);
119
123
  private readonly poller;
120
124
  run(signal?: AbortSignal): Promise<void>;
121
125
  private runLoop;
@@ -130,6 +134,7 @@ export declare class ZLinkRouteReceiveLoop {
130
134
  private readonly poller;
131
135
  private readonly applicationJobQueue;
132
136
  private readonly roundRobin?;
137
+ private readonly applicationDispatchQueue;
133
138
  private stoppedFlag;
134
139
  private isStopped;
135
140
  private running?;
@@ -139,7 +144,7 @@ export declare class ZLinkRouteReceiveLoop {
139
144
  private readonly capacityStop;
140
145
  constructor(router: ZLinkBackendRouterSocket & {
141
146
  reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
142
- }, dispatcher: ZLinkRoutePacketDispatchLoop, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter);
147
+ }, dispatcher: ZLinkRoutePacketDispatchLoop, poller: ZLinkBackendReadablePoller, applicationJobQueue: ApplicationJobQueue, roundRobin?: ZLinkReceiveRoundRobinCoordinator | undefined, reportError?: ZLinkReceiveTaskErrorReporter, applicationDispatchQueue?: ZLinkSerialExecutionQueue);
143
148
  run(signal?: AbortSignal): Promise<void>;
144
149
  private runLoop;
145
150
  stop(): Promise<void>;
@@ -1,10 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkRouteReceiveLoop = exports.ZLinkSubscriberReceiveLoop = exports.ZLinkChannelReceiveLoop = exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT = exports.ZLinkReceiveRoundRobinCoordinator = void 0;
4
+ exports.createChannelApplicationDispatchQueue = createChannelApplicationDispatchQueue;
4
5
  const channel_envelope_1 = require("./channel-envelope");
5
6
  const channel_envelope_inspection_1 = require("./channel-envelope-inspection");
6
7
  const channel_receive_task_tracker_1 = require("./channel-receive-task-tracker");
7
8
  const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
9
+ const serial_execution_queue_1 = require("../execution/serial-execution-queue");
10
+ function createChannelApplicationDispatchQueue() {
11
+ return new serial_execution_queue_1.ZLinkSerialExecutionQueue(async (record) => {
12
+ try {
13
+ record.resolve(await record.operation());
14
+ }
15
+ catch (error) {
16
+ record.reject(error);
17
+ }
18
+ finally {
19
+ record.release();
20
+ }
21
+ });
22
+ }
8
23
  // The loop awaits between reads and the signal can abort in that gap. Reading
9
24
  // through a function keeps the later check honest; an inline read stays
10
25
  // narrowed by the loop condition and the comparison is rejected as dead.
@@ -102,6 +117,7 @@ class ZLinkChannelReceiveLoop {
102
117
  poller;
103
118
  applicationJobQueue;
104
119
  roundRobin;
120
+ applicationDispatchQueue;
105
121
  // The loop awaits between the two reads and stop() can land in that gap.
106
122
  // Reading through a method keeps the second check honest; a field read stays
107
123
  // narrowed to false across the await and is treated as dead code.
@@ -114,7 +130,7 @@ class ZLinkChannelReceiveLoop {
114
130
  receiveOwner;
115
131
  rawReceiveReservations;
116
132
  capacityStop = new AbortController();
117
- constructor(channelName, router, dispatcher, spotRouteBridge, infrastructureHandler, poller, applicationJobQueue, reportError, roundRobin) {
133
+ constructor(channelName, router, dispatcher, spotRouteBridge, infrastructureHandler, poller, applicationJobQueue, reportError, roundRobin, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
118
134
  this.channelName = channelName;
119
135
  this.router = router;
120
136
  this.dispatcher = dispatcher;
@@ -123,6 +139,7 @@ class ZLinkChannelReceiveLoop {
123
139
  this.poller = poller;
124
140
  this.applicationJobQueue = applicationJobQueue;
125
141
  this.roundRobin = roundRobin;
142
+ this.applicationDispatchQueue = applicationDispatchQueue;
126
143
  this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
127
144
  this.receiveOwner = roundRobin?.register() ?? Symbol('channel-receive-owner');
128
145
  this.rawReceiveReservations = new ZLinkRawReceiveReservationPool(exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT);
@@ -218,7 +235,7 @@ class ZLinkChannelReceiveLoop {
218
235
  break;
219
236
  }
220
237
  applicationJobPermit.markApplicationQueued();
221
- const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(received, signal, classification.decodedHeader, true));
238
+ const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(received, signal, classification.decodedHeader, true))));
222
239
  releaseRawReceive();
223
240
  this.inFlight.track(task);
224
241
  if (batch.record(receivedBytes)) {
@@ -292,6 +309,7 @@ class ZLinkSubscriberReceiveLoop {
292
309
  applicationJobQueue;
293
310
  infrastructureHandler;
294
311
  roundRobin;
312
+ applicationDispatchQueue;
295
313
  // The loop awaits between the two reads and stop() can land in that gap.
296
314
  // Reading through a method keeps the second check honest; a field read stays
297
315
  // narrowed to false across the await and is treated as dead code.
@@ -304,13 +322,14 @@ class ZLinkSubscriberReceiveLoop {
304
322
  receiveOwner;
305
323
  rawReceiveReservations;
306
324
  capacityStop = new AbortController();
307
- constructor(adapter, subscriber, dispatcher, applicationJobQueue, infrastructureHandler, roundRobin, reportError) {
325
+ constructor(adapter, subscriber, dispatcher, applicationJobQueue, infrastructureHandler, roundRobin, reportError, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
308
326
  this.adapter = adapter;
309
327
  this.subscriber = subscriber;
310
328
  this.dispatcher = dispatcher;
311
329
  this.applicationJobQueue = applicationJobQueue;
312
330
  this.infrastructureHandler = infrastructureHandler;
313
331
  this.roundRobin = roundRobin;
332
+ this.applicationDispatchQueue = applicationDispatchQueue;
314
333
  this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
315
334
  this.poller = adapter.createReadablePoller(subscriber);
316
335
  this.receiveOwner = roundRobin?.register() ?? Symbol('subscriber-receive-owner');
@@ -406,7 +425,7 @@ class ZLinkSubscriberReceiveLoop {
406
425
  break;
407
426
  }
408
427
  applicationJobPermit.markApplicationQueued();
409
- const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true));
428
+ const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true))));
410
429
  releaseRawReceive();
411
430
  this.inFlight.track(task);
412
431
  if (batch.record(receivedBytes)) {
@@ -469,6 +488,7 @@ class ZLinkRouteReceiveLoop {
469
488
  poller;
470
489
  applicationJobQueue;
471
490
  roundRobin;
491
+ applicationDispatchQueue;
472
492
  // The loop awaits between the two reads and stop() can land in that gap.
473
493
  // Reading through a method keeps the second check honest; a field read stays
474
494
  // narrowed to false across the await and is treated as dead code.
@@ -481,12 +501,13 @@ class ZLinkRouteReceiveLoop {
481
501
  receiveOwner;
482
502
  rawReceiveReservations;
483
503
  capacityStop = new AbortController();
484
- constructor(router, dispatcher, poller, applicationJobQueue, roundRobin, reportError) {
504
+ constructor(router, dispatcher, poller, applicationJobQueue, roundRobin, reportError, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
485
505
  this.router = router;
486
506
  this.dispatcher = dispatcher;
487
507
  this.poller = poller;
488
508
  this.applicationJobQueue = applicationJobQueue;
489
509
  this.roundRobin = roundRobin;
510
+ this.applicationDispatchQueue = applicationDispatchQueue;
490
511
  this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
491
512
  this.receiveOwner = roundRobin?.register() ?? Symbol('route-receive-owner');
492
513
  this.rawReceiveReservations = new ZLinkRawReceiveReservationPool(exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT);
@@ -596,7 +617,7 @@ class ZLinkRouteReceiveLoop {
596
617
  break;
597
618
  }
598
619
  applicationJobPermit.markApplicationQueued();
599
- const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(received, signal, true));
620
+ const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(received, signal, true))));
600
621
  releaseRawReceive();
601
622
  this.inFlight.track(task);
602
623
  if (batch.record(receivedBytes)) {
@@ -33,15 +33,24 @@ export declare class ZLinkChannelRuntimeLifecycle {
33
33
  private readonly manualFanoutSubscribers;
34
34
  private readonly manualFanoutSubscriberOwners;
35
35
  private readonly routeReceiveLoops;
36
+ private readonly applicationDispatchQueues;
36
37
  private readonly meshChannelDispatchers;
37
38
  private readonly meshRouteDispatchers;
38
39
  private nextManualFanoutIndex;
39
- private disposed;
40
+ private readonly disposal;
40
41
  private locationAutoConnect?;
41
42
  private clientServerLocation?;
42
43
  private fanoutLocation?;
43
44
  private taskRunner?;
44
45
  constructor(options: ZLinkChannelRuntimeLifecycleOptions);
46
+ fanoutTopologyTargets(channelName: string): {
47
+ channelName: string;
48
+ publisherRoutingId: string;
49
+ lifecycleGeneration: bigint;
50
+ descriptorRevision: bigint;
51
+ advertisedEndpoint: string;
52
+ state: "error" | "preparing" | "serving" | "retiring" | "stopped";
53
+ }[] | undefined;
45
54
  configureLocationAutoConnect(runtime: ZLinkLocationRuntime, stores: ZLinkLocationRuntimeStores, options: ZLinkLocationOptionOverrides, events?: ZLinkLocationEventSink): void;
46
55
  private beginLocationAutoConnectCore;
47
56
  private beginFanoutLocationAutoConnectCore;
@@ -56,7 +65,9 @@ export declare class ZLinkChannelRuntimeLifecycle {
56
65
  dispatchLocalMeshRoute(meshName: string, sourceNodeRid: RoutingId, parts: readonly Message[], signal?: AbortSignal): Promise<void>;
57
66
  canDispatchLocalMeshRoute(meshName: string): boolean;
58
67
  dispose(signal?: AbortSignal): Promise<void>;
68
+ private disposeCore;
59
69
  private beginDisposeCore;
70
+ private applicationDispatchQueue;
60
71
  private openOutboundSockets;
61
72
  private startChannelReceivers;
62
73
  private startSubscriberReceivers;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkChannelRuntimeLifecycle = void 0;
4
+ const disposal_1 = require("../disposal");
4
5
  const configuration_1 = require("../configuration");
5
6
  const contracts_1 = require("../backend/contracts");
6
7
  const channel_autoconnect_1 = require("./channel-autoconnect");
@@ -21,10 +22,11 @@ class ZLinkChannelRuntimeLifecycle {
21
22
  manualFanoutSubscribers = new Map();
22
23
  manualFanoutSubscriberOwners = new Set();
23
24
  routeReceiveLoops = [];
25
+ applicationDispatchQueues = new Map();
24
26
  meshChannelDispatchers = new Map();
25
27
  meshRouteDispatchers = new Map();
26
28
  nextManualFanoutIndex = 0;
27
- disposed = false;
29
+ disposal = new disposal_1.RuntimeDisposal();
28
30
  locationAutoConnect;
29
31
  clientServerLocation;
30
32
  fanoutLocation;
@@ -32,6 +34,9 @@ class ZLinkChannelRuntimeLifecycle {
32
34
  constructor(options) {
33
35
  this.options = options;
34
36
  }
37
+ fanoutTopologyTargets(channelName) {
38
+ return this.fanoutLocation?.topologyTargets(channelName);
39
+ }
35
40
  configureLocationAutoConnect(runtime, stores, options, events) {
36
41
  this.locationAutoConnect = (0, channel_autoconnect_1.createChannelLocationAutoConnectContext)(runtime, stores, options, events);
37
42
  }
@@ -201,7 +206,10 @@ class ZLinkChannelRuntimeLifecycle {
201
206
  canDispatchLocalMeshRoute(meshName) {
202
207
  return this.meshRouteDispatchers.has(meshName);
203
208
  }
204
- async dispose(signal) {
209
+ dispose(signal) {
210
+ return this.disposal.run(() => this.disposeCore(signal));
211
+ }
212
+ async disposeCore(signal) {
205
213
  const work = await this.lane.run(() => this.beginDisposeCore());
206
214
  const transportStopped = await startOutsideStateLane(() => Promise.allSettled([
207
215
  ...work.channelLoops.map((loop) => loop.stop()),
@@ -209,6 +217,7 @@ class ZLinkChannelRuntimeLifecycle {
209
217
  ...work.routeLoops.map((loop) => loop.stop()),
210
218
  ...work.manualTransitions
211
219
  ]));
220
+ const applicationStopped = await startOutsideStateLane(() => Promise.allSettled(work.applicationDispatchQueues.map((queue) => queue.close())));
212
221
  const descriptorStopped = work.clientServerLocation === undefined
213
222
  ? []
214
223
  : await startOutsideStateLane(() => Promise.allSettled([work.clientServerLocation?.stop(signal)]));
@@ -221,6 +230,7 @@ class ZLinkChannelRuntimeLifecycle {
221
230
  ]));
222
231
  const errors = [
223
232
  ...transportStopped,
233
+ ...applicationStopped,
224
234
  ...descriptorStopped,
225
235
  ...fanoutDescriptorStopped,
226
236
  ...cleanup
@@ -231,46 +241,58 @@ class ZLinkChannelRuntimeLifecycle {
231
241
  throw errors[0];
232
242
  if (errors.length > 1)
233
243
  throw new AggregateError(errors, 'Channel runtime cleanup failed.');
244
+ await this.lane.run(() => {
245
+ this.manualFanoutSubscriberOwners.clear();
246
+ this.manualFanoutSubscribers.clear();
247
+ this.channelReceiveLoops.length = 0;
248
+ this.subscriberReceiveLoops.length = 0;
249
+ this.routeReceiveLoops.length = 0;
250
+ this.applicationDispatchQueues.clear();
251
+ this.clientServerLocation = undefined;
252
+ this.fanoutLocation = undefined;
253
+ this.taskRunner = undefined;
254
+ this.meshChannelDispatchers.clear();
255
+ this.meshRouteDispatchers.clear();
256
+ this.options.spotRouteBridges.clear();
257
+ });
234
258
  }
235
259
  beginDisposeCore() {
236
260
  const channelLoops = [...this.channelReceiveLoops];
237
261
  const manualStates = [...this.manualFanoutSubscribers.values()];
238
- this.disposed = true;
239
262
  for (const state of manualStates)
240
263
  state.desired = false;
241
264
  for (const owner of this.manualFanoutSubscriberOwners) {
242
265
  (0, RuntimeEndpointConnections_1.detachEndpointConnections)(owner);
243
266
  }
244
- this.manualFanoutSubscriberOwners.clear();
245
- this.manualFanoutSubscribers.clear();
246
267
  const manualLoops = new Set(manualStates
247
268
  .map((state) => state.active?.loop ?? state.stopping?.loop)
248
269
  .filter((loop) => loop !== undefined));
249
270
  const subscriberLoops = [...this.subscriberReceiveLoops].filter((loop) => !manualLoops.has(loop));
250
271
  const manualTransitions = manualStates.map((state) => this.drainManualFanoutSubscriberCore(state));
251
272
  const routeLoops = [...this.routeReceiveLoops];
273
+ const applicationDispatchQueues = [...this.applicationDispatchQueues.values()];
252
274
  const clientServerLocation = this.clientServerLocation;
253
275
  const fanoutLocation = this.fanoutLocation;
254
276
  const spotRouteBridges = [...this.options.spotRouteBridges.values()];
255
- this.channelReceiveLoops.length = 0;
256
- this.subscriberReceiveLoops.length = 0;
257
- this.routeReceiveLoops.length = 0;
258
- this.clientServerLocation = undefined;
259
- this.fanoutLocation = undefined;
260
- this.taskRunner = undefined;
261
- this.meshChannelDispatchers.clear();
262
- this.meshRouteDispatchers.clear();
263
- this.options.spotRouteBridges.clear();
264
277
  return {
265
278
  channelLoops,
266
279
  subscriberLoops,
267
280
  manualTransitions,
268
281
  routeLoops,
282
+ applicationDispatchQueues,
269
283
  clientServerLocation,
270
284
  fanoutLocation,
271
285
  spotRouteBridges
272
286
  };
273
287
  }
288
+ applicationDispatchQueue(channelName) {
289
+ let queue = this.applicationDispatchQueues.get(channelName);
290
+ if (queue === undefined) {
291
+ queue = (0, channel_receive_loops_1.createChannelApplicationDispatchQueue)();
292
+ this.applicationDispatchQueues.set(channelName, queue);
293
+ }
294
+ return queue;
295
+ }
274
296
  openOutboundSockets() {
275
297
  // The process-local Server is an independent peer source. Location Store
276
298
  // discovery may later alias the same admitted identity, but startup and
@@ -310,7 +332,7 @@ class ZLinkChannelRuntimeLifecycle {
310
332
  unhandled: this.options.registration.dispatch?.unhandled
311
333
  });
312
334
  const spotRouteBridge = this.createSpotRouteBridgeForRouter(channelName, router);
313
- const loop = new channel_receive_loops_1.ZLinkChannelReceiveLoop(channelName, router, dispatcher, spotRouteBridge, (received, socket) => this.options.sockets.tryHandleClientServerControl(channelName, received, socket), this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, (error) => taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error), this.receiveRoundRobin);
335
+ const loop = new channel_receive_loops_1.ZLinkChannelReceiveLoop(channelName, router, dispatcher, spotRouteBridge, (received, socket) => this.options.sockets.tryHandleClientServerControl(channelName, received, socket), this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, (error) => taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error), this.receiveRoundRobin, this.applicationDispatchQueue(channelName));
314
336
  this.channelReceiveLoops.push(loop);
315
337
  tasks.push(taskRunner.run(`channel:${channelName}`, (signal) => loop.run(signal)));
316
338
  }
@@ -369,7 +391,7 @@ class ZLinkChannelRuntimeLifecycle {
369
391
  return state;
370
392
  }
371
393
  requestManualFanoutConnect(channelName, endpoint, taskRunner, dispatcher) {
372
- if (this.disposed)
394
+ if (this.disposal.started)
373
395
  return;
374
396
  const state = this.getOrCreateManualFanoutSubscriber(channelName, endpoint, this.nextManualFanoutIndex++, taskRunner, dispatcher);
375
397
  state.desired = true;
@@ -403,7 +425,7 @@ class ZLinkChannelRuntimeLifecycle {
403
425
  }
404
426
  openManualFanoutSubscriber(state) {
405
427
  const { channelName, endpoint, connectionId, taskRunner, dispatcher } = state;
406
- if (this.disposed || !state.desired || this.taskRunner !== taskRunner) {
428
+ if (this.disposal.started || !state.desired || this.taskRunner !== taskRunner) {
407
429
  return Promise.resolve();
408
430
  }
409
431
  const token = Symbol(`manual-fanout:${channelName}:${endpoint}`);
@@ -414,20 +436,20 @@ class ZLinkChannelRuntimeLifecycle {
414
436
  const subscriber = this.options.sockets.openFanoutSubscriberConnection(channelName, connectionId, endpoint, {
415
437
  onReady() { },
416
438
  onTerminated: () => {
417
- if (this.disposed ||
439
+ if (this.disposal.started ||
418
440
  (state.active?.token !== token && state.openingToken !== token) ||
419
441
  reconnecting)
420
442
  return;
421
443
  reconnecting = true;
422
444
  setImmediate(() => {
423
- if (this.disposed ||
445
+ if (this.disposal.started ||
424
446
  (state.active?.token !== token && state.openingToken !== token)) {
425
447
  reconnecting = false;
426
448
  return;
427
449
  }
428
450
  this.enqueueManualFanoutTransition(state, async () => {
429
451
  reconnecting = false;
430
- if (this.disposed || state.active?.token !== token)
452
+ if (this.disposal.started || state.active?.token !== token)
431
453
  return;
432
454
  try {
433
455
  await this.closeManualFanoutSubscriber(state, token);
@@ -442,7 +464,7 @@ class ZLinkChannelRuntimeLifecycle {
442
464
  });
443
465
  }
444
466
  });
445
- loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${state.channelName}:manual:${state.index}:dispatch`, error));
467
+ loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${state.channelName}:manual:${state.index}:dispatch`, error), this.applicationDispatchQueue(channelName));
446
468
  state.openingToken = undefined;
447
469
  state.active = { token, loop };
448
470
  this.subscriberReceiveLoops.push(loop);
@@ -471,9 +493,6 @@ class ZLinkChannelRuntimeLifecycle {
471
493
  catch (error) {
472
494
  errors.push(error);
473
495
  }
474
- finally {
475
- await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
476
- }
477
496
  try {
478
497
  await startOutsideStateLane(() => this.options.sockets.closeFanoutSubscriberConnection(state.connectionId));
479
498
  }
@@ -485,12 +504,13 @@ class ZLinkChannelRuntimeLifecycle {
485
504
  if (errors.length > 1) {
486
505
  throw new AggregateError(errors, `Fanout subscriber '${state.connectionId}' cleanup failed.`);
487
506
  }
507
+ await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
488
508
  }
489
509
  shouldReconnectManualFanoutSubscriber(state) {
490
- return !this.disposed && state.desired;
510
+ return !this.disposal.started && state.desired;
491
511
  }
492
512
  beginCloseManualFanoutSubscriberCore(state, expectedToken) {
493
- const active = state.active;
513
+ const active = state.active ?? state.stopping;
494
514
  if (active === undefined || (expectedToken !== undefined && active.token !== expectedToken)) {
495
515
  return undefined;
496
516
  }
@@ -521,7 +541,7 @@ class ZLinkChannelRuntimeLifecycle {
521
541
  unhandled: this.options.registration.dispatch?.unhandled,
522
542
  metrics: this.options.dispatchServices.metrics()
523
543
  });
524
- const loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), undefined, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${channelName}:automatic:${connectionId}:dispatch`, error));
544
+ const loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), undefined, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${channelName}:automatic:${connectionId}:dispatch`, error), this.applicationDispatchQueue(channelName));
525
545
  this.subscriberReceiveLoops.push(loop);
526
546
  void taskRunner.run(`subscriber:${channelName}:automatic:${connectionId}`, (signal) => loop.run(signal));
527
547
  return async () => {
@@ -567,7 +587,7 @@ class ZLinkChannelRuntimeLifecycle {
567
587
  unhandled: this.options.registration.dispatch?.unhandled,
568
588
  spotRouteBridge
569
589
  });
570
- const loop = new channel_receive_loops_1.ZLinkRouteReceiveLoop(router, dispatcher, this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`route:${routeChannel.routerChannelId}:dispatch`, error));
590
+ const loop = new channel_receive_loops_1.ZLinkRouteReceiveLoop(router, dispatcher, this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`route:${routeChannel.routerChannelId}:dispatch`, error), this.applicationDispatchQueue(routeChannel.routerChannelId));
571
591
  this.routeReceiveLoops.push(loop);
572
592
  tasks.push(taskRunner.run(`route:${routeChannel.routerChannelId}`, (signal) => loop.run(signal)));
573
593
  }
@@ -44,16 +44,16 @@ export declare class ZLinkChannelRuntimeManager {
44
44
  dispatchMeshRoute(meshName: string, record: ReceiveRecord, signal?: AbortSignal): Promise<void>;
45
45
  dispatchLocalMeshRoute(meshName: string, sourceNodeRid: RoutingId, parts: readonly Message[], signal?: AbortSignal): Promise<void>;
46
46
  canDispatchLocalMeshRoute(meshName: string): boolean;
47
- send(channelName: string, packetName: string | undefined, message: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
47
+ send(channelName: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
48
48
  request<TReply>(channelName: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<TReply>;
49
49
  tryPublish(channelName: string, topic: string, packetName: string | undefined, event: unknown, metadata?: ReadonlyMap<string, string>): ZLinkSubmitResult;
50
50
  publish(channelName: string, topic: string, packetName: string | undefined, event: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
51
- routeSubmit(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, message: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
51
+ routeSubmit(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
52
52
  routeRequest<TReply>(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<TReply>;
53
- routeSendToSpot(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, timeoutMs?: number): Promise<void>;
53
+ routeSendToSpot(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<void>;
54
54
  routeRequestToSpot<TReply>(spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<TReply>;
55
55
  routeRequestFromSpotToSpot<TReply>(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal): Promise<TReply>;
56
- routeSendFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>, timeoutMs?: number): Promise<void>;
56
+ routeSendFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<void>;
57
57
  routeRequestRawFromSpotToSpot(sourceSpot: ZLinkBackendSpot, spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
58
58
  routeRequestRawToSpot(spotRouteTarget: ZLinkSpotRouteTarget, request: Message, timeoutMs: number | undefined, signal?: AbortSignal): Promise<readonly Message[]>;
59
59
  canRouteChannel(routerChannelId: string): boolean;