@zlink-systems/framework 0.25.0 → 0.27.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 (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
  3. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  4. package/dist/contracts/Common/CoreTypes.js +7 -0
  5. package/dist/contracts/Common/index.d.ts +1 -1
  6. package/dist/contracts/Common/index.js +0 -1
  7. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  8. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  9. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  10. package/dist/contracts/Configuration/Registration.js +58 -36
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  14. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  15. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  16. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  17. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  18. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  19. package/dist/contracts/Handlers/JsonContract.js +10 -4
  20. package/dist/contracts/Locations/Authority.d.ts +1 -1
  21. package/dist/contracts/Locations/Authority.js +3 -2
  22. package/dist/contracts/Locations/Options.js +1 -1
  23. package/dist/contracts/Locations/Stores.d.ts +12 -0
  24. package/dist/contracts/Locations/Stores.js +9 -0
  25. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
  26. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  27. package/dist/internal.d.ts +5 -0
  28. package/dist/internal.js +16 -1
  29. package/dist/nest-integration.d.ts +4 -2
  30. package/dist/nest-integration.js +14 -4
  31. package/dist/runtime/abort.d.ts +1 -0
  32. package/dist/runtime/abort.js +8 -5
  33. package/dist/runtime/activation-admission.d.ts +28 -0
  34. package/dist/runtime/activation-admission.js +57 -0
  35. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  36. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  37. package/dist/runtime/actors/actor-client.d.ts +2 -2
  38. package/dist/runtime/actors/actor-client.js +42 -143
  39. package/dist/runtime/actors/actor-context.d.ts +3 -5
  40. package/dist/runtime/actors/actor-context.js +19 -17
  41. package/dist/runtime/actors/actor-handoff.d.ts +13 -7
  42. package/dist/runtime/actors/actor-handoff.js +36 -25
  43. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  44. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  45. package/dist/runtime/actors/actor-local-native-join.js +85 -123
  46. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  47. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  48. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  49. package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
  50. package/dist/runtime/actors/actor-remote-joiner.js +11 -17
  51. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  52. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  53. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  54. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  55. package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
  56. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  57. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  58. package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
  59. package/dist/runtime/actors/bound-session-wire.js +2 -7
  60. package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
  61. package/dist/runtime/actors/deferred-join-completion.js +21 -0
  62. package/dist/runtime/actors/index.d.ts +10 -8
  63. package/dist/runtime/actors/index.js +101 -73
  64. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  65. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  66. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  67. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  68. package/dist/runtime/admission.d.ts +7 -1
  69. package/dist/runtime/admission.js +11 -1
  70. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  71. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  72. package/dist/runtime/backend/contracts/index.d.ts +8 -33
  73. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
  74. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  75. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  76. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
  77. package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
  78. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
  79. package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
  80. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  81. package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
  82. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  83. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
  84. package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
  85. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
  86. package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
  87. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  88. package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
  89. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  90. package/dist/runtime/backend/runtime-values.js +2 -0
  91. package/dist/runtime/channels/channel-clients.d.ts +20 -9
  92. package/dist/runtime/channels/channel-clients.js +68 -60
  93. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  94. package/dist/runtime/channels/channel-envelope.js +47 -29
  95. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  96. package/dist/runtime/channels/channel-outbound-operations.js +9 -18
  97. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  98. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  99. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  100. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  101. package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
  102. package/dist/runtime/channels/channel-runtime-manager.js +4 -12
  103. package/dist/runtime/channels/channel-socket-options.js +3 -2
  104. package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
  105. package/dist/runtime/channels/channel-socket-registry.js +296 -235
  106. package/dist/runtime/channels/channel-transports.d.ts +11 -20
  107. package/dist/runtime/channels/channel-transports.js +68 -47
  108. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  109. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  110. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  111. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  112. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  113. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  114. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  115. package/dist/runtime/channels/fanout-location-runtime.js +133 -81
  116. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  117. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  118. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  119. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  120. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  121. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  122. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  123. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  124. package/dist/runtime/diagnostics/flow-context.js +16 -2
  125. package/dist/runtime/diagnostics/index.d.ts +4 -2
  126. package/dist/runtime/diagnostics/index.js +14 -4
  127. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  128. package/dist/runtime/diagnostics/message-flow.js +10 -19
  129. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  130. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  131. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  132. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  133. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  134. package/dist/runtime/disposal.d.ts +5 -0
  135. package/dist/runtime/disposal.js +22 -0
  136. package/dist/runtime/execution/index.d.ts +22 -9
  137. package/dist/runtime/execution/index.js +107 -37
  138. package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
  139. package/dist/runtime/execution/serial-execution-queue.js +99 -26
  140. package/dist/runtime/execution/state-lane.d.ts +8 -1
  141. package/dist/runtime/execution/state-lane.js +118 -3
  142. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  143. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  144. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  145. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  146. package/dist/runtime/foundation/listener-records.d.ts +11 -0
  147. package/dist/runtime/foundation/listener-records.js +20 -0
  148. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  149. package/dist/runtime/foundation/operation-identity.js +9 -5
  150. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  151. package/dist/runtime/foundation/operation-registry.js +34 -44
  152. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
  153. package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
  154. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  155. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  156. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
  157. package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
  158. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  159. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  160. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  161. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  162. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  163. package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
  164. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  165. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  166. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  167. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
  168. package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
  169. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
  170. package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
  171. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  172. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  173. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  174. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
  175. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  176. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  177. package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
  178. package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
  179. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
  180. package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
  181. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
  182. package/dist/runtime/foundation/service-topology-registry.js +22 -61
  183. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  184. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  185. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  186. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  187. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  188. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  189. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  190. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  191. package/dist/runtime/framework-errors-internal.js +343 -122
  192. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  193. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  194. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  195. package/dist/runtime/host/actor-packet-relay.js +48 -91
  196. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  197. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  198. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  199. package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
  200. package/dist/runtime/host/actor-transfer-runtime.js +210 -256
  201. package/dist/runtime/host/application-job-queue.js +16 -33
  202. package/dist/runtime/host/bound-session-relay.js +1 -1
  203. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  204. package/dist/runtime/host/index.d.ts +19 -14
  205. package/dist/runtime/host/index.js +234 -175
  206. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  207. package/dist/runtime/host/instance-activation-authority.js +17 -45
  208. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  209. package/dist/runtime/host/location-runtime-owner.js +2 -2
  210. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  211. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  212. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  213. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  214. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  215. package/dist/runtime/host/remote-bound-session-relay.js +11 -23
  216. package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
  217. package/dist/runtime/host/route-mesh-runtime.js +178 -257
  218. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  219. package/dist/runtime/host/runtime-shutdown.js +18 -21
  220. package/dist/runtime/host/service-relocation-control.js +6 -1
  221. package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
  222. package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
  223. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  224. package/dist/runtime/host/spot-address-transport.js +34 -136
  225. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  226. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  227. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
  228. package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
  229. package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
  230. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
  231. package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
  232. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  233. package/dist/runtime/locations/authority-key-codec.js +4 -3
  234. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  235. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  236. package/dist/runtime/locations/creation-operation-id.js +6 -4
  237. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  238. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  239. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  240. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  241. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  242. package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
  243. package/dist/runtime/locations/key-codec.js +3 -2
  244. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  245. package/dist/runtime/locations/lease-tracker.js +7 -11
  246. package/dist/runtime/locations/lifecycle.d.ts +5 -10
  247. package/dist/runtime/locations/lifecycle.js +4 -33
  248. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  249. package/dist/runtime/locations/location-store-failure.js +7 -0
  250. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  251. package/dist/runtime/locations/location-store-pages.js +13 -0
  252. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  253. package/dist/runtime/locations/location-store-repository.js +303 -332
  254. package/dist/runtime/locations/relocation-blob.js +18 -5
  255. package/dist/runtime/locations/resolvers.d.ts +5 -5
  256. package/dist/runtime/locations/resolvers.js +44 -30
  257. package/dist/runtime/locations/runtime.d.ts +5 -4
  258. package/dist/runtime/locations/runtime.js +123 -92
  259. package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
  260. package/dist/runtime/locations/spot-location-claims.js +40 -23
  261. package/dist/runtime/messaging/payload-codec.js +26 -20
  262. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  263. package/dist/runtime/messaging/submission-result.js +48 -0
  264. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
  265. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
  266. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
  267. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
  268. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
  269. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
  270. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
  271. package/dist/runtime/spots/index.d.ts +29 -29
  272. package/dist/runtime/spots/index.js +441 -313
  273. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
  274. package/dist/runtime/spots/spot-activation-registry.js +27 -60
  275. package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
  276. package/dist/runtime/spots/spot-activation-state.js +4 -17
  277. package/dist/runtime/spots/spot-activation.d.ts +10 -9
  278. package/dist/runtime/spots/spot-activation.js +103 -81
  279. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  280. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  281. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  282. package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
  283. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
  284. package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
  285. package/dist/runtime/spots/spot-actor-membership.js +44 -53
  286. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  287. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  288. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  289. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  290. package/dist/runtime/spots/spot-context.d.ts +2 -2
  291. package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
  292. package/dist/runtime/spots/spot-entry-activation.js +9 -21
  293. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  294. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  295. package/dist/runtime/spots/spot-manager-public.js +6 -5
  296. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  297. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
  298. package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
  299. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  300. package/dist/runtime/spots/spot-outbound.js +10 -37
  301. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  302. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  303. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  304. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  305. package/dist/runtime/spots/spot-route-replies.js +3 -1
  306. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
  307. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
  308. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
  309. package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
  310. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  311. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  312. package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
  313. package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
  314. package/dist/runtime/spots/spot-serial-executor.js +9 -2
  315. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
  316. package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
  317. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  318. package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
  319. package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
  320. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
  321. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  322. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  323. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  324. package/dist/runtime/streams/bound-session-service.js +12 -19
  325. package/dist/runtime/streams/index.d.ts +15 -14
  326. package/dist/runtime/streams/index.js +38 -39
  327. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  328. package/dist/runtime/streams/managed-stream.js +17 -8
  329. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  330. package/dist/runtime/streams/protocol.d.ts +6 -33
  331. package/dist/runtime/streams/protocol.js +38 -110
  332. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  333. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  334. package/dist/runtime/streams/session-calls.d.ts +1 -1
  335. package/dist/runtime/streams/session-calls.js +5 -4
  336. package/dist/runtime/streams/session-context.d.ts +6 -6
  337. package/dist/runtime/streams/session-context.js +22 -4
  338. package/dist/runtime/streams/session-requests.js +2 -1
  339. package/dist/runtime/streams/session-serial-executor.js +2 -2
  340. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  341. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  342. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  343. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  344. package/dist/runtime/workers/index.d.ts +2 -2
  345. package/dist/runtime/workers/index.js +5 -4
  346. package/package.json +3 -3
  347. package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
  348. package/src/contracts/Common/CoreTypes.ts +7 -0
  349. package/src/contracts/Common/index.ts +1 -1
  350. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  351. package/src/contracts/Configuration/Registration.ts +92 -48
  352. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  353. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  354. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  355. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  356. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  357. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  358. package/src/contracts/Handlers/JsonContract.ts +14 -4
  359. package/src/contracts/Locations/Authority.ts +7 -3
  360. package/src/contracts/Locations/Options.ts +1 -1
  361. package/src/contracts/Locations/Stores.ts +14 -0
  362. package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
  363. package/src/contracts/Spots/Contracts.ts +1 -1
  364. package/src/internal.ts +15 -0
  365. package/src/nest-integration.ts +28 -10
  366. package/src/runtime/abort.ts +6 -5
  367. package/src/runtime/activation-admission.ts +72 -0
  368. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  369. package/src/runtime/actors/actor-client.ts +77 -204
  370. package/src/runtime/actors/actor-context.ts +45 -39
  371. package/src/runtime/actors/actor-handoff.ts +55 -45
  372. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  373. package/src/runtime/actors/actor-local-native-join.ts +174 -215
  374. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  375. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  376. package/src/runtime/actors/actor-remote-joiner.ts +15 -36
  377. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  378. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  379. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  380. package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
  381. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  382. package/src/runtime/actors/actor-source-transfer.ts +5 -18
  383. package/src/runtime/actors/bound-session-wire.ts +2 -8
  384. package/src/runtime/actors/deferred-join-completion.ts +44 -0
  385. package/src/runtime/actors/index.ts +122 -88
  386. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  387. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  388. package/src/runtime/admission.ts +13 -2
  389. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  390. package/src/runtime/backend/contracts/index.ts +15 -42
  391. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
  392. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  393. package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
  394. package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
  395. package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
  396. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  397. package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
  398. package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
  399. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
  400. package/src/runtime/backend/raw-binding-port.ts +14 -1
  401. package/src/runtime/backend/runtime-values.ts +4 -1
  402. package/src/runtime/channels/channel-clients.ts +132 -96
  403. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  404. package/src/runtime/channels/channel-envelope.ts +58 -29
  405. package/src/runtime/channels/channel-outbound-operations.ts +10 -31
  406. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  407. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  408. package/src/runtime/channels/channel-runtime-manager.ts +8 -15
  409. package/src/runtime/channels/channel-socket-options.ts +8 -2
  410. package/src/runtime/channels/channel-socket-registry.ts +369 -262
  411. package/src/runtime/channels/channel-transports.ts +161 -115
  412. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  413. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  414. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  415. package/src/runtime/channels/fanout-location-runtime.ts +175 -106
  416. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  417. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  418. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  419. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  420. package/src/runtime/diagnostics/flow-context.ts +16 -2
  421. package/src/runtime/diagnostics/index.ts +27 -17
  422. package/src/runtime/diagnostics/message-flow.ts +15 -25
  423. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  424. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  425. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  426. package/src/runtime/disposal.ts +19 -0
  427. package/src/runtime/execution/index.ts +116 -38
  428. package/src/runtime/execution/serial-execution-queue.ts +179 -34
  429. package/src/runtime/execution/state-lane.ts +142 -4
  430. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  431. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  432. package/src/runtime/foundation/listener-records.ts +21 -0
  433. package/src/runtime/foundation/operation-identity.ts +11 -5
  434. package/src/runtime/foundation/operation-registry.ts +33 -50
  435. package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
  436. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  437. package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
  438. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  439. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  440. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  441. package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
  442. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  443. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  444. package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
  445. package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
  446. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  447. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  448. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
  449. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  450. package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
  451. package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
  452. package/src/runtime/foundation/service-topology-registry.ts +30 -79
  453. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  454. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  455. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  456. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  457. package/src/runtime/framework-errors-internal.ts +380 -134
  458. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  459. package/src/runtime/host/actor-packet-relay.ts +57 -147
  460. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  461. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  462. package/src/runtime/host/actor-transfer-runtime.ts +266 -418
  463. package/src/runtime/host/application-job-queue.ts +28 -34
  464. package/src/runtime/host/bound-session-relay.ts +1 -2
  465. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  466. package/src/runtime/host/index.ts +408 -312
  467. package/src/runtime/host/instance-activation-authority.ts +89 -109
  468. package/src/runtime/host/location-runtime-owner.ts +4 -2
  469. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  470. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  471. package/src/runtime/host/remote-bound-session-relay.ts +12 -44
  472. package/src/runtime/host/route-mesh-runtime.ts +236 -275
  473. package/src/runtime/host/runtime-shutdown.ts +17 -21
  474. package/src/runtime/host/service-relocation-control.ts +14 -1
  475. package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
  476. package/src/runtime/host/spot-address-transport.ts +73 -195
  477. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  478. package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
  479. package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
  480. package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
  481. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  482. package/src/runtime/locations/authority-key-codec.ts +7 -3
  483. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  484. package/src/runtime/locations/creation-operation-id.ts +6 -3
  485. package/src/runtime/locations/domain-store-contract.ts +12 -3
  486. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  487. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  488. package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
  489. package/src/runtime/locations/key-codec.ts +3 -2
  490. package/src/runtime/locations/lease-tracker.ts +8 -14
  491. package/src/runtime/locations/lifecycle.ts +16 -45
  492. package/src/runtime/locations/location-store-failure.ts +4 -0
  493. package/src/runtime/locations/location-store-pages.ts +18 -0
  494. package/src/runtime/locations/location-store-repository.ts +450 -478
  495. package/src/runtime/locations/relocation-blob.ts +17 -6
  496. package/src/runtime/locations/resolvers.ts +90 -58
  497. package/src/runtime/locations/runtime.ts +220 -110
  498. package/src/runtime/locations/spot-location-claims.ts +54 -26
  499. package/src/runtime/messaging/payload-codec.ts +35 -24
  500. package/src/runtime/messaging/submission-result.ts +57 -1
  501. package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
  502. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  503. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
  504. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
  505. package/src/runtime/spots/index.ts +687 -437
  506. package/src/runtime/spots/spot-activation-registry.ts +42 -71
  507. package/src/runtime/spots/spot-activation-state.ts +4 -16
  508. package/src/runtime/spots/spot-activation.ts +167 -115
  509. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  510. package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
  511. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
  512. package/src/runtime/spots/spot-actor-membership.ts +107 -75
  513. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  514. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  515. package/src/runtime/spots/spot-context.ts +3 -3
  516. package/src/runtime/spots/spot-entry-activation.ts +13 -33
  517. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  518. package/src/runtime/spots/spot-manager-public.ts +29 -21
  519. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  520. package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
  521. package/src/runtime/spots/spot-outbound.ts +47 -68
  522. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  523. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  524. package/src/runtime/spots/spot-route-replies.ts +6 -4
  525. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
  526. package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
  527. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  528. package/src/runtime/spots/spot-runtime-ports.ts +10 -43
  529. package/src/runtime/spots/spot-serial-executor.ts +10 -2
  530. package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
  531. package/src/runtime/spots/spot-timer.ts +3 -2
  532. package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
  533. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
  534. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  535. package/src/runtime/streams/bound-session-service.ts +23 -37
  536. package/src/runtime/streams/index.ts +102 -88
  537. package/src/runtime/streams/managed-stream.ts +29 -10
  538. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  539. package/src/runtime/streams/protocol.ts +34 -88
  540. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  541. package/src/runtime/streams/session-calls.ts +6 -5
  542. package/src/runtime/streams/session-context.ts +54 -10
  543. package/src/runtime/streams/session-requests.ts +2 -1
  544. package/src/runtime/streams/session-serial-executor.ts +2 -2
  545. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  546. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  547. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  548. package/src/runtime/workers/index.ts +13 -12
  549. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
  550. package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
  551. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  552. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  553. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  554. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  555. package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
  556. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  557. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -18,7 +18,26 @@ import {
18
18
  type ZLinkReceiveTaskErrorReporter
19
19
  } from './channel-receive-task-tracker';
20
20
  import { ApplicationJobQueue, type ApplicationJobQueuePermit } from '../host/application-job-queue';
21
- import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
21
+ import {
22
+ bindApplicationJobPermit,
23
+ runWithApplicationJobPermit
24
+ } from '../application-jobs/application-job-queue-scope';
25
+ import {
26
+ ZLinkSerialExecutionQueue,
27
+ type ZLinkSerialWorkRecord
28
+ } from '../execution/serial-execution-queue';
29
+
30
+ export function createChannelApplicationDispatchQueue(): ZLinkSerialExecutionQueue {
31
+ return new ZLinkSerialExecutionQueue(async (record: ZLinkSerialWorkRecord<unknown>) => {
32
+ try {
33
+ record.resolve(await record.operation());
34
+ } catch (error) {
35
+ record.reject(error);
36
+ } finally {
37
+ record.release();
38
+ }
39
+ });
40
+ }
22
41
 
23
42
  // The loop awaits between reads and the signal can abort in that gap. Reading
24
43
  // through a function keeps the later check honest; an inline read stays
@@ -212,7 +231,8 @@ export class ZLinkChannelReceiveLoop {
212
231
  private readonly poller: ZLinkBackendReadablePoller,
213
232
  private readonly applicationJobQueue: ApplicationJobQueue,
214
233
  reportError?: ZLinkReceiveTaskErrorReporter,
215
- private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator
234
+ private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
235
+ private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
216
236
  ) {
217
237
  this.inFlight = new ZLinkReceiveTaskTracker(reportError);
218
238
  this.receiveOwner = roundRobin?.register() ?? Symbol('channel-receive-owner');
@@ -310,7 +330,11 @@ export class ZLinkChannelReceiveLoop {
310
330
  }
311
331
  applicationJobPermit.markApplicationQueued();
312
332
  const task = runWithApplicationJobPermit(applicationJobPermit, () =>
313
- this.dispatchAndClose(received, signal, classification.decodedHeader, true)
333
+ this.applicationDispatchQueue.submitPreAdmitted(
334
+ bindApplicationJobPermit(() =>
335
+ this.dispatchAndClose(received, signal, classification.decodedHeader, true)
336
+ )
337
+ )
314
338
  );
315
339
  releaseRawReceive();
316
340
  this.inFlight.track(task);
@@ -431,7 +455,8 @@ export class ZLinkSubscriberReceiveLoop {
431
455
  topicMessage: ReturnType<ZLinkChannelBackendAdapter['createTopicMessage']>
432
456
  ) => boolean | ZLinkSubscriberInfrastructureResult,
433
457
  private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
434
- reportError?: ZLinkReceiveTaskErrorReporter
458
+ reportError?: ZLinkReceiveTaskErrorReporter,
459
+ private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
435
460
  ) {
436
461
  this.inFlight = new ZLinkReceiveTaskTracker(reportError);
437
462
  this.poller = adapter.createReadablePoller(subscriber);
@@ -531,7 +556,11 @@ export class ZLinkSubscriberReceiveLoop {
531
556
  }
532
557
  applicationJobPermit.markApplicationQueued();
533
558
  const task = runWithApplicationJobPermit(applicationJobPermit, () =>
534
- this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true)
559
+ this.applicationDispatchQueue.submitPreAdmitted(
560
+ bindApplicationJobPermit(() =>
561
+ this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true)
562
+ )
563
+ )
535
564
  );
536
565
  releaseRawReceive();
537
566
  this.inFlight.track(task);
@@ -624,7 +653,8 @@ export class ZLinkRouteReceiveLoop {
624
653
  private readonly poller: ZLinkBackendReadablePoller,
625
654
  private readonly applicationJobQueue: ApplicationJobQueue,
626
655
  private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
627
- reportError?: ZLinkReceiveTaskErrorReporter
656
+ reportError?: ZLinkReceiveTaskErrorReporter,
657
+ private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
628
658
  ) {
629
659
  this.inFlight = new ZLinkReceiveTaskTracker(reportError);
630
660
  this.receiveOwner = roundRobin?.register() ?? Symbol('route-receive-owner');
@@ -738,7 +768,9 @@ export class ZLinkRouteReceiveLoop {
738
768
  }
739
769
  applicationJobPermit.markApplicationQueued();
740
770
  const task = runWithApplicationJobPermit(applicationJobPermit, () =>
741
- this.dispatchAndClose(received, signal, true)
771
+ this.applicationDispatchQueue.submitPreAdmitted(
772
+ bindApplicationJobPermit(() => this.dispatchAndClose(received, signal, true))
773
+ )
742
774
  );
743
775
  releaseRawReceive();
744
776
  this.inFlight.track(task);
@@ -1,3 +1,4 @@
1
+ import { RuntimeDisposal } from '../disposal';
1
2
  import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
2
3
  import type { ZLinkRequestHandler, ZLinkSendHandler } from '../../contracts/Handlers';
3
4
  import { ZLinkConfigurationException } from '../configuration';
@@ -31,6 +32,7 @@ import {
31
32
  type ZLinkRouteRuntimeSendHandler
32
33
  } from './channel-dispatchers';
33
34
  import {
35
+ createChannelApplicationDispatchQueue,
34
36
  ZLinkChannelReceiveLoop,
35
37
  ZLinkReceiveRoundRobinCoordinator,
36
38
  ZLinkRouteReceiveLoop,
@@ -50,6 +52,7 @@ import {
50
52
  import type { ApplicationJobQueue } from '../host/application-job-queue';
51
53
  import { AsyncResource } from 'node:async_hooks';
52
54
  import { ZLinkStateLane } from '../execution/state-lane';
55
+ import { ZLinkSerialExecutionQueue } from '../execution/serial-execution-queue';
53
56
 
54
57
  const detachedStateLaneResource = new AsyncResource('zlink:channel-runtime-lifecycle');
55
58
 
@@ -82,6 +85,7 @@ interface ChannelRuntimeDisposeWork {
82
85
  readonly subscriberLoops: readonly ZLinkSubscriberReceiveLoop[];
83
86
  readonly manualTransitions: readonly Promise<void>[];
84
87
  readonly routeLoops: readonly { stop(): Promise<void> }[];
88
+ readonly applicationDispatchQueues: readonly ZLinkSerialExecutionQueue[];
85
89
  readonly clientServerLocation?: ZLinkClientServerLocationRuntime;
86
90
  readonly fanoutLocation?: ZLinkFanoutLocationRuntime;
87
91
  readonly spotRouteBridges: readonly ZLinkBackendSpotRouteBridge[];
@@ -108,10 +112,11 @@ export class ZLinkChannelRuntimeLifecycle {
108
112
  private readonly manualFanoutSubscribers = new Map<string, ManualFanoutSubscriberState>();
109
113
  private readonly manualFanoutSubscriberOwners = new Set<object>();
110
114
  private readonly routeReceiveLoops: Array<{ stop(): Promise<void> }> = [];
115
+ private readonly applicationDispatchQueues = new Map<string, ZLinkSerialExecutionQueue>();
111
116
  private readonly meshChannelDispatchers = new Map<string, ZLinkChannelRequestDispatcher>();
112
117
  private readonly meshRouteDispatchers = new Map<string, ZLinkRoutePacketDispatcher>();
113
118
  private nextManualFanoutIndex = 0;
114
- private disposed = false;
119
+ private readonly disposal = new RuntimeDisposal();
115
120
  private locationAutoConnect?: ZLinkChannelLocationAutoConnectContext;
116
121
  private clientServerLocation?: ZLinkClientServerLocationRuntime;
117
122
  private fanoutLocation?: ZLinkFanoutLocationRuntime;
@@ -119,6 +124,10 @@ export class ZLinkChannelRuntimeLifecycle {
119
124
 
120
125
  constructor(private readonly options: ZLinkChannelRuntimeLifecycleOptions) {}
121
126
 
127
+ fanoutTopologyTargets(channelName: string) {
128
+ return this.fanoutLocation?.topologyTargets(channelName);
129
+ }
130
+
122
131
  configureLocationAutoConnect(
123
132
  runtime: ZLinkLocationRuntime,
124
133
  stores: ZLinkLocationRuntimeStores,
@@ -384,7 +393,11 @@ export class ZLinkChannelRuntimeLifecycle {
384
393
  return this.meshRouteDispatchers.has(meshName);
385
394
  }
386
395
 
387
- async dispose(signal?: AbortSignal): Promise<void> {
396
+ dispose(signal?: AbortSignal): Promise<void> {
397
+ return this.disposal.run(() => this.disposeCore(signal));
398
+ }
399
+
400
+ private async disposeCore(signal?: AbortSignal): Promise<void> {
388
401
  const work = await this.lane.run(() => this.beginDisposeCore());
389
402
  const transportStopped = await startOutsideStateLane(() =>
390
403
  Promise.allSettled([
@@ -394,6 +407,9 @@ export class ZLinkChannelRuntimeLifecycle {
394
407
  ...work.manualTransitions
395
408
  ])
396
409
  );
410
+ const applicationStopped = await startOutsideStateLane(() =>
411
+ Promise.allSettled(work.applicationDispatchQueues.map((queue) => queue.close()))
412
+ );
397
413
  const descriptorStopped =
398
414
  work.clientServerLocation === undefined
399
415
  ? []
@@ -414,6 +430,7 @@ export class ZLinkChannelRuntimeLifecycle {
414
430
  );
415
431
  const errors = [
416
432
  ...transportStopped,
433
+ ...applicationStopped,
417
434
  ...descriptorStopped,
418
435
  ...fanoutDescriptorStopped,
419
436
  ...cleanup
@@ -422,18 +439,29 @@ export class ZLinkChannelRuntimeLifecycle {
422
439
  .map((result) => result.reason);
423
440
  if (errors.length === 1) throw errors[0];
424
441
  if (errors.length > 1) throw new AggregateError(errors, 'Channel runtime cleanup failed.');
442
+ await this.lane.run(() => {
443
+ this.manualFanoutSubscriberOwners.clear();
444
+ this.manualFanoutSubscribers.clear();
445
+ this.channelReceiveLoops.length = 0;
446
+ this.subscriberReceiveLoops.length = 0;
447
+ this.routeReceiveLoops.length = 0;
448
+ this.applicationDispatchQueues.clear();
449
+ this.clientServerLocation = undefined;
450
+ this.fanoutLocation = undefined;
451
+ this.taskRunner = undefined;
452
+ this.meshChannelDispatchers.clear();
453
+ this.meshRouteDispatchers.clear();
454
+ this.options.spotRouteBridges.clear();
455
+ });
425
456
  }
426
457
 
427
458
  private beginDisposeCore(): ChannelRuntimeDisposeWork {
428
459
  const channelLoops = [...this.channelReceiveLoops];
429
460
  const manualStates = [...this.manualFanoutSubscribers.values()];
430
- this.disposed = true;
431
461
  for (const state of manualStates) state.desired = false;
432
462
  for (const owner of this.manualFanoutSubscriberOwners) {
433
463
  detachEndpointConnections(owner);
434
464
  }
435
- this.manualFanoutSubscriberOwners.clear();
436
- this.manualFanoutSubscribers.clear();
437
465
  const manualLoops = new Set(
438
466
  manualStates
439
467
  .map((state) => state.active?.loop ?? state.stopping?.loop)
@@ -446,29 +474,31 @@ export class ZLinkChannelRuntimeLifecycle {
446
474
  this.drainManualFanoutSubscriberCore(state)
447
475
  );
448
476
  const routeLoops = [...this.routeReceiveLoops];
477
+ const applicationDispatchQueues = [...this.applicationDispatchQueues.values()];
449
478
  const clientServerLocation = this.clientServerLocation;
450
479
  const fanoutLocation = this.fanoutLocation;
451
480
  const spotRouteBridges = [...this.options.spotRouteBridges.values()];
452
- this.channelReceiveLoops.length = 0;
453
- this.subscriberReceiveLoops.length = 0;
454
- this.routeReceiveLoops.length = 0;
455
- this.clientServerLocation = undefined;
456
- this.fanoutLocation = undefined;
457
- this.taskRunner = undefined;
458
- this.meshChannelDispatchers.clear();
459
- this.meshRouteDispatchers.clear();
460
- this.options.spotRouteBridges.clear();
461
481
  return {
462
482
  channelLoops,
463
483
  subscriberLoops,
464
484
  manualTransitions,
465
485
  routeLoops,
486
+ applicationDispatchQueues,
466
487
  clientServerLocation,
467
488
  fanoutLocation,
468
489
  spotRouteBridges
469
490
  };
470
491
  }
471
492
 
493
+ private applicationDispatchQueue(channelName: string): ZLinkSerialExecutionQueue {
494
+ let queue = this.applicationDispatchQueues.get(channelName);
495
+ if (queue === undefined) {
496
+ queue = createChannelApplicationDispatchQueue();
497
+ this.applicationDispatchQueues.set(channelName, queue);
498
+ }
499
+ return queue;
500
+ }
501
+
472
502
  private openOutboundSockets(): void {
473
503
  // The process-local Server is an independent peer source. Location Store
474
504
  // discovery may later alias the same admitted identity, but startup and
@@ -532,7 +562,8 @@ export class ZLinkChannelRuntimeLifecycle {
532
562
  this.options.applicationJobQueue,
533
563
  (error) =>
534
564
  taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error),
535
- this.receiveRoundRobin
565
+ this.receiveRoundRobin,
566
+ this.applicationDispatchQueue(channelName)
536
567
  );
537
568
  this.channelReceiveLoops.push(loop);
538
569
  tasks.push(taskRunner.run(`channel:${channelName}`, (signal) => loop.run(signal)));
@@ -622,7 +653,7 @@ export class ZLinkChannelRuntimeLifecycle {
622
653
  taskRunner: ZLinkRuntimeTaskRunner,
623
654
  dispatcher: ZLinkChannelPublishDispatcher
624
655
  ): void {
625
- if (this.disposed) return;
656
+ if (this.disposal.started) return;
626
657
  const state = this.getOrCreateManualFanoutSubscriber(
627
658
  channelName,
628
659
  endpoint,
@@ -678,7 +709,7 @@ export class ZLinkChannelRuntimeLifecycle {
678
709
 
679
710
  private openManualFanoutSubscriber(state: ManualFanoutSubscriberState): Promise<void> {
680
711
  const { channelName, endpoint, connectionId, taskRunner, dispatcher } = state;
681
- if (this.disposed || !state.desired || this.taskRunner !== taskRunner) {
712
+ if (this.disposal.started || !state.desired || this.taskRunner !== taskRunner) {
682
713
  return Promise.resolve();
683
714
  }
684
715
  const token = Symbol(`manual-fanout:${channelName}:${endpoint}`);
@@ -694,7 +725,7 @@ export class ZLinkChannelRuntimeLifecycle {
694
725
  onReady() {},
695
726
  onTerminated: () => {
696
727
  if (
697
- this.disposed ||
728
+ this.disposal.started ||
698
729
  (state.active?.token !== token && state.openingToken !== token) ||
699
730
  reconnecting
700
731
  )
@@ -702,7 +733,7 @@ export class ZLinkChannelRuntimeLifecycle {
702
733
  reconnecting = true;
703
734
  setImmediate(() => {
704
735
  if (
705
- this.disposed ||
736
+ this.disposal.started ||
706
737
  (state.active?.token !== token && state.openingToken !== token)
707
738
  ) {
708
739
  reconnecting = false;
@@ -710,7 +741,7 @@ export class ZLinkChannelRuntimeLifecycle {
710
741
  }
711
742
  this.enqueueManualFanoutTransition(state, async () => {
712
743
  reconnecting = false;
713
- if (this.disposed || state.active?.token !== token) return;
744
+ if (this.disposal.started || state.active?.token !== token) return;
714
745
  try {
715
746
  await this.closeManualFanoutSubscriber(state, token);
716
747
  } catch (error) {
@@ -744,7 +775,8 @@ export class ZLinkChannelRuntimeLifecycle {
744
775
  taskRunner.errorSink.reportRuntimeTaskException(
745
776
  `subscriber:${state.channelName}:manual:${state.index}:dispatch`,
746
777
  error
747
- )
778
+ ),
779
+ this.applicationDispatchQueue(channelName)
748
780
  );
749
781
  state.openingToken = undefined;
750
782
  state.active = { token, loop };
@@ -780,8 +812,6 @@ export class ZLinkChannelRuntimeLifecycle {
780
812
  await startOutsideStateLane(() => active.loop.stop());
781
813
  } catch (error) {
782
814
  errors.push(error);
783
- } finally {
784
- await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
785
815
  }
786
816
  try {
787
817
  await startOutsideStateLane(() =>
@@ -794,17 +824,18 @@ export class ZLinkChannelRuntimeLifecycle {
794
824
  if (errors.length > 1) {
795
825
  throw new AggregateError(errors, `Fanout subscriber '${state.connectionId}' cleanup failed.`);
796
826
  }
827
+ await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
797
828
  }
798
829
 
799
830
  private shouldReconnectManualFanoutSubscriber(state: ManualFanoutSubscriberState): boolean {
800
- return !this.disposed && state.desired;
831
+ return !this.disposal.started && state.desired;
801
832
  }
802
833
 
803
834
  private beginCloseManualFanoutSubscriberCore(
804
835
  state: ManualFanoutSubscriberState,
805
836
  expectedToken?: symbol
806
837
  ): ManualFanoutSubscriberActive | undefined {
807
- const active = state.active;
838
+ const active = state.active ?? state.stopping;
808
839
  if (active === undefined || (expectedToken !== undefined && active.token !== expectedToken)) {
809
840
  return undefined;
810
841
  }
@@ -864,7 +895,8 @@ export class ZLinkChannelRuntimeLifecycle {
864
895
  taskRunner.errorSink.reportRuntimeTaskException(
865
896
  `subscriber:${channelName}:automatic:${connectionId}:dispatch`,
866
897
  error
867
- )
898
+ ),
899
+ this.applicationDispatchQueue(channelName)
868
900
  );
869
901
  this.subscriberReceiveLoops.push(loop);
870
902
  void taskRunner.run(`subscriber:${channelName}:automatic:${connectionId}`, (signal) =>
@@ -933,7 +965,8 @@ export class ZLinkChannelRuntimeLifecycle {
933
965
  taskRunner.errorSink.reportRuntimeTaskException(
934
966
  `route:${routeChannel.routerChannelId}:dispatch`,
935
967
  error
936
- )
968
+ ),
969
+ this.applicationDispatchQueue(routeChannel.routerChannelId)
937
970
  );
938
971
  this.routeReceiveLoops.push(loop);
939
972
  tasks.push(
@@ -1,3 +1,4 @@
1
+ import type { ZLinkListenerRecords } from '../foundation/listener-records';
1
2
  import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
2
3
  import type { RoutingId } from '../../contracts';
3
4
  import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
@@ -62,7 +63,8 @@ export class ZLinkChannelRuntimeManager {
62
63
  context,
63
64
  options.monitoringAdapter,
64
65
  options.oneWayFailureSink,
65
- applicationJobQueue
66
+ applicationJobQueue,
67
+ options.listenerRecords
66
68
  );
67
69
  const codecs: ZLinkChannelEnvelopeCodecRegistry = {
68
70
  serializers: registration.messageSerializers
@@ -115,26 +117,16 @@ export class ZLinkChannelRuntimeManager {
115
117
  }
116
118
 
117
119
  fanoutTopology(channelName: string) {
118
- return { descriptors: this.sockets.fanoutActiveTargets(channelName) };
119
- }
120
-
121
- getFanoutListenerStatus(channelName: string) {
122
- const endpoint = this.sockets.fanoutPublisherEndpoint(channelName);
123
- if (endpoint === undefined) {
124
- throw new ZLinkConfigurationException(
125
- `Fanout publisher '${channelName}' has not reported a bound listener.`
126
- );
127
- }
128
120
  return {
129
- channelName,
130
- endpoint,
131
- observedAt: new Date()
121
+ descriptors:
122
+ this.lifecycle.fanoutTopologyTargets(channelName) ??
123
+ this.sockets.fanoutActiveTargets(channelName)
132
124
  };
133
125
  }
134
126
 
135
127
  observeClientServerTopology(channelName: string, changed: () => void): () => void {
136
128
  const monitor = this.sockets.clientServerMonitoringSource(channelName);
137
- monitor.onEvent(changed);
129
+ monitor.onChange(changed);
138
130
  return () => {
139
131
  void monitor.dispose();
140
132
  };
@@ -447,6 +439,7 @@ function splitMonitoringSocketSourceName(sourceName: string): readonly [string,
447
439
  }
448
440
 
449
441
  export interface ZLinkChannelRuntimeManagerOptions {
442
+ readonly listenerRecords?: ZLinkListenerRecords;
450
443
  readonly internalRouteSendHandlers?: ReadonlyMap<string, ZLinkRouteRuntimeSendHandler>;
451
444
  readonly internalRouteRequestHandlers?: ReadonlyMap<string, ZLinkRouteRuntimeRequestHandler>;
452
445
  readonly monitoringAdapter?: ZLinkMonitoringBackendAdapter;
@@ -1,3 +1,7 @@
1
+ import {
2
+ ZLINK_MAX_PUBLIC_WEIGHT,
3
+ isValidPublicWeight
4
+ } from '../../contracts/Configuration/RegistrationBuilderPolicy';
1
5
  import type { ZLinkSocketConfig } from '../../contracts';
2
6
  import type { ZLinkSocketConfig as ZLinkRuntimeSocketConfig } from '../../contracts/Configuration';
3
7
  import { ZLinkConfigurationException } from '../configuration';
@@ -139,8 +143,10 @@ function requireChannelName(channelName: string): void {
139
143
  }
140
144
 
141
145
  function validatePublicWeight(value: number): void {
142
- if (!Number.isInteger(value) || value < 0 || value > 10_000) {
143
- throw new ZLinkConfigurationException('Weight must be an integer in 0..10000.');
146
+ if (!isValidPublicWeight(value)) {
147
+ throw new ZLinkConfigurationException(
148
+ `Weight must be an integer in 0..${ZLINK_MAX_PUBLIC_WEIGHT}.`
149
+ );
144
150
  }
145
151
  }
146
152