@zlink-systems/framework 0.26.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 (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. 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(
@@ -117,12 +117,16 @@ export class ZLinkChannelRuntimeManager {
117
117
  }
118
118
 
119
119
  fanoutTopology(channelName: string) {
120
- return { descriptors: this.sockets.fanoutActiveTargets(channelName) };
120
+ return {
121
+ descriptors:
122
+ this.lifecycle.fanoutTopologyTargets(channelName) ??
123
+ this.sockets.fanoutActiveTargets(channelName)
124
+ };
121
125
  }
122
126
 
123
127
  observeClientServerTopology(channelName: string, changed: () => void): () => void {
124
128
  const monitor = this.sockets.clientServerMonitoringSource(channelName);
125
- monitor.onEvent(changed);
129
+ monitor.onChange(changed);
126
130
  return () => {
127
131
  void monitor.dispose();
128
132
  };
@@ -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