@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
@@ -1,10 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkRouteReceiveLoop = exports.ZLinkSubscriberReceiveLoop = exports.ZLinkChannelReceiveLoop = exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT = exports.ZLinkReceiveRoundRobinCoordinator = void 0;
4
+ exports.createChannelApplicationDispatchQueue = createChannelApplicationDispatchQueue;
4
5
  const channel_envelope_1 = require("./channel-envelope");
5
6
  const channel_envelope_inspection_1 = require("./channel-envelope-inspection");
6
7
  const channel_receive_task_tracker_1 = require("./channel-receive-task-tracker");
7
8
  const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
9
+ const serial_execution_queue_1 = require("../execution/serial-execution-queue");
10
+ function createChannelApplicationDispatchQueue() {
11
+ return new serial_execution_queue_1.ZLinkSerialExecutionQueue(async (record) => {
12
+ try {
13
+ record.resolve(await record.operation());
14
+ }
15
+ catch (error) {
16
+ record.reject(error);
17
+ }
18
+ finally {
19
+ record.release();
20
+ }
21
+ });
22
+ }
8
23
  // The loop awaits between reads and the signal can abort in that gap. Reading
9
24
  // through a function keeps the later check honest; an inline read stays
10
25
  // narrowed by the loop condition and the comparison is rejected as dead.
@@ -102,6 +117,7 @@ class ZLinkChannelReceiveLoop {
102
117
  poller;
103
118
  applicationJobQueue;
104
119
  roundRobin;
120
+ applicationDispatchQueue;
105
121
  // The loop awaits between the two reads and stop() can land in that gap.
106
122
  // Reading through a method keeps the second check honest; a field read stays
107
123
  // narrowed to false across the await and is treated as dead code.
@@ -114,7 +130,7 @@ class ZLinkChannelReceiveLoop {
114
130
  receiveOwner;
115
131
  rawReceiveReservations;
116
132
  capacityStop = new AbortController();
117
- constructor(channelName, router, dispatcher, spotRouteBridge, infrastructureHandler, poller, applicationJobQueue, reportError, roundRobin) {
133
+ constructor(channelName, router, dispatcher, spotRouteBridge, infrastructureHandler, poller, applicationJobQueue, reportError, roundRobin, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
118
134
  this.channelName = channelName;
119
135
  this.router = router;
120
136
  this.dispatcher = dispatcher;
@@ -123,6 +139,7 @@ class ZLinkChannelReceiveLoop {
123
139
  this.poller = poller;
124
140
  this.applicationJobQueue = applicationJobQueue;
125
141
  this.roundRobin = roundRobin;
142
+ this.applicationDispatchQueue = applicationDispatchQueue;
126
143
  this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
127
144
  this.receiveOwner = roundRobin?.register() ?? Symbol('channel-receive-owner');
128
145
  this.rawReceiveReservations = new ZLinkRawReceiveReservationPool(exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT);
@@ -218,7 +235,7 @@ class ZLinkChannelReceiveLoop {
218
235
  break;
219
236
  }
220
237
  applicationJobPermit.markApplicationQueued();
221
- const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(received, signal, classification.decodedHeader, true));
238
+ const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(received, signal, classification.decodedHeader, true))));
222
239
  releaseRawReceive();
223
240
  this.inFlight.track(task);
224
241
  if (batch.record(receivedBytes)) {
@@ -292,6 +309,7 @@ class ZLinkSubscriberReceiveLoop {
292
309
  applicationJobQueue;
293
310
  infrastructureHandler;
294
311
  roundRobin;
312
+ applicationDispatchQueue;
295
313
  // The loop awaits between the two reads and stop() can land in that gap.
296
314
  // Reading through a method keeps the second check honest; a field read stays
297
315
  // narrowed to false across the await and is treated as dead code.
@@ -304,13 +322,14 @@ class ZLinkSubscriberReceiveLoop {
304
322
  receiveOwner;
305
323
  rawReceiveReservations;
306
324
  capacityStop = new AbortController();
307
- constructor(adapter, subscriber, dispatcher, applicationJobQueue, infrastructureHandler, roundRobin, reportError) {
325
+ constructor(adapter, subscriber, dispatcher, applicationJobQueue, infrastructureHandler, roundRobin, reportError, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
308
326
  this.adapter = adapter;
309
327
  this.subscriber = subscriber;
310
328
  this.dispatcher = dispatcher;
311
329
  this.applicationJobQueue = applicationJobQueue;
312
330
  this.infrastructureHandler = infrastructureHandler;
313
331
  this.roundRobin = roundRobin;
332
+ this.applicationDispatchQueue = applicationDispatchQueue;
314
333
  this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
315
334
  this.poller = adapter.createReadablePoller(subscriber);
316
335
  this.receiveOwner = roundRobin?.register() ?? Symbol('subscriber-receive-owner');
@@ -406,7 +425,7 @@ class ZLinkSubscriberReceiveLoop {
406
425
  break;
407
426
  }
408
427
  applicationJobPermit.markApplicationQueued();
409
- const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true));
428
+ const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true))));
410
429
  releaseRawReceive();
411
430
  this.inFlight.track(task);
412
431
  if (batch.record(receivedBytes)) {
@@ -469,6 +488,7 @@ class ZLinkRouteReceiveLoop {
469
488
  poller;
470
489
  applicationJobQueue;
471
490
  roundRobin;
491
+ applicationDispatchQueue;
472
492
  // The loop awaits between the two reads and stop() can land in that gap.
473
493
  // Reading through a method keeps the second check honest; a field read stays
474
494
  // narrowed to false across the await and is treated as dead code.
@@ -481,12 +501,13 @@ class ZLinkRouteReceiveLoop {
481
501
  receiveOwner;
482
502
  rawReceiveReservations;
483
503
  capacityStop = new AbortController();
484
- constructor(router, dispatcher, poller, applicationJobQueue, roundRobin, reportError) {
504
+ constructor(router, dispatcher, poller, applicationJobQueue, roundRobin, reportError, applicationDispatchQueue = createChannelApplicationDispatchQueue()) {
485
505
  this.router = router;
486
506
  this.dispatcher = dispatcher;
487
507
  this.poller = poller;
488
508
  this.applicationJobQueue = applicationJobQueue;
489
509
  this.roundRobin = roundRobin;
510
+ this.applicationDispatchQueue = applicationDispatchQueue;
490
511
  this.inFlight = new channel_receive_task_tracker_1.ZLinkReceiveTaskTracker(reportError);
491
512
  this.receiveOwner = roundRobin?.register() ?? Symbol('route-receive-owner');
492
513
  this.rawReceiveReservations = new ZLinkRawReceiveReservationPool(exports.ZLINK_CHANNEL_RAW_RECEIVE_RESERVATION_LIMIT);
@@ -596,7 +617,7 @@ class ZLinkRouteReceiveLoop {
596
617
  break;
597
618
  }
598
619
  applicationJobPermit.markApplicationQueued();
599
- const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.dispatchAndClose(received, signal, true));
620
+ const task = (0, application_job_queue_scope_1.runWithApplicationJobPermit)(applicationJobPermit, () => this.applicationDispatchQueue.submitPreAdmitted((0, application_job_queue_scope_1.bindApplicationJobPermit)(() => this.dispatchAndClose(received, signal, true))));
600
621
  releaseRawReceive();
601
622
  this.inFlight.track(task);
602
623
  if (batch.record(receivedBytes)) {
@@ -33,15 +33,24 @@ export declare class ZLinkChannelRuntimeLifecycle {
33
33
  private readonly manualFanoutSubscribers;
34
34
  private readonly manualFanoutSubscriberOwners;
35
35
  private readonly routeReceiveLoops;
36
+ private readonly applicationDispatchQueues;
36
37
  private readonly meshChannelDispatchers;
37
38
  private readonly meshRouteDispatchers;
38
39
  private nextManualFanoutIndex;
39
- private disposed;
40
+ private readonly disposal;
40
41
  private locationAutoConnect?;
41
42
  private clientServerLocation?;
42
43
  private fanoutLocation?;
43
44
  private taskRunner?;
44
45
  constructor(options: ZLinkChannelRuntimeLifecycleOptions);
46
+ fanoutTopologyTargets(channelName: string): {
47
+ channelName: string;
48
+ publisherRoutingId: string;
49
+ lifecycleGeneration: bigint;
50
+ descriptorRevision: bigint;
51
+ advertisedEndpoint: string;
52
+ state: "error" | "preparing" | "serving" | "retiring" | "stopped";
53
+ }[] | undefined;
45
54
  configureLocationAutoConnect(runtime: ZLinkLocationRuntime, stores: ZLinkLocationRuntimeStores, options: ZLinkLocationOptionOverrides, events?: ZLinkLocationEventSink): void;
46
55
  private beginLocationAutoConnectCore;
47
56
  private beginFanoutLocationAutoConnectCore;
@@ -56,7 +65,9 @@ export declare class ZLinkChannelRuntimeLifecycle {
56
65
  dispatchLocalMeshRoute(meshName: string, sourceNodeRid: RoutingId, parts: readonly Message[], signal?: AbortSignal): Promise<void>;
57
66
  canDispatchLocalMeshRoute(meshName: string): boolean;
58
67
  dispose(signal?: AbortSignal): Promise<void>;
68
+ private disposeCore;
59
69
  private beginDisposeCore;
70
+ private applicationDispatchQueue;
60
71
  private openOutboundSockets;
61
72
  private startChannelReceivers;
62
73
  private startSubscriberReceivers;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkChannelRuntimeLifecycle = void 0;
4
+ const disposal_1 = require("../disposal");
4
5
  const configuration_1 = require("../configuration");
5
6
  const contracts_1 = require("../backend/contracts");
6
7
  const channel_autoconnect_1 = require("./channel-autoconnect");
@@ -21,10 +22,11 @@ class ZLinkChannelRuntimeLifecycle {
21
22
  manualFanoutSubscribers = new Map();
22
23
  manualFanoutSubscriberOwners = new Set();
23
24
  routeReceiveLoops = [];
25
+ applicationDispatchQueues = new Map();
24
26
  meshChannelDispatchers = new Map();
25
27
  meshRouteDispatchers = new Map();
26
28
  nextManualFanoutIndex = 0;
27
- disposed = false;
29
+ disposal = new disposal_1.RuntimeDisposal();
28
30
  locationAutoConnect;
29
31
  clientServerLocation;
30
32
  fanoutLocation;
@@ -32,6 +34,9 @@ class ZLinkChannelRuntimeLifecycle {
32
34
  constructor(options) {
33
35
  this.options = options;
34
36
  }
37
+ fanoutTopologyTargets(channelName) {
38
+ return this.fanoutLocation?.topologyTargets(channelName);
39
+ }
35
40
  configureLocationAutoConnect(runtime, stores, options, events) {
36
41
  this.locationAutoConnect = (0, channel_autoconnect_1.createChannelLocationAutoConnectContext)(runtime, stores, options, events);
37
42
  }
@@ -201,7 +206,10 @@ class ZLinkChannelRuntimeLifecycle {
201
206
  canDispatchLocalMeshRoute(meshName) {
202
207
  return this.meshRouteDispatchers.has(meshName);
203
208
  }
204
- async dispose(signal) {
209
+ dispose(signal) {
210
+ return this.disposal.run(() => this.disposeCore(signal));
211
+ }
212
+ async disposeCore(signal) {
205
213
  const work = await this.lane.run(() => this.beginDisposeCore());
206
214
  const transportStopped = await startOutsideStateLane(() => Promise.allSettled([
207
215
  ...work.channelLoops.map((loop) => loop.stop()),
@@ -209,6 +217,7 @@ class ZLinkChannelRuntimeLifecycle {
209
217
  ...work.routeLoops.map((loop) => loop.stop()),
210
218
  ...work.manualTransitions
211
219
  ]));
220
+ const applicationStopped = await startOutsideStateLane(() => Promise.allSettled(work.applicationDispatchQueues.map((queue) => queue.close())));
212
221
  const descriptorStopped = work.clientServerLocation === undefined
213
222
  ? []
214
223
  : await startOutsideStateLane(() => Promise.allSettled([work.clientServerLocation?.stop(signal)]));
@@ -221,6 +230,7 @@ class ZLinkChannelRuntimeLifecycle {
221
230
  ]));
222
231
  const errors = [
223
232
  ...transportStopped,
233
+ ...applicationStopped,
224
234
  ...descriptorStopped,
225
235
  ...fanoutDescriptorStopped,
226
236
  ...cleanup
@@ -231,46 +241,58 @@ class ZLinkChannelRuntimeLifecycle {
231
241
  throw errors[0];
232
242
  if (errors.length > 1)
233
243
  throw new AggregateError(errors, 'Channel runtime cleanup failed.');
244
+ await this.lane.run(() => {
245
+ this.manualFanoutSubscriberOwners.clear();
246
+ this.manualFanoutSubscribers.clear();
247
+ this.channelReceiveLoops.length = 0;
248
+ this.subscriberReceiveLoops.length = 0;
249
+ this.routeReceiveLoops.length = 0;
250
+ this.applicationDispatchQueues.clear();
251
+ this.clientServerLocation = undefined;
252
+ this.fanoutLocation = undefined;
253
+ this.taskRunner = undefined;
254
+ this.meshChannelDispatchers.clear();
255
+ this.meshRouteDispatchers.clear();
256
+ this.options.spotRouteBridges.clear();
257
+ });
234
258
  }
235
259
  beginDisposeCore() {
236
260
  const channelLoops = [...this.channelReceiveLoops];
237
261
  const manualStates = [...this.manualFanoutSubscribers.values()];
238
- this.disposed = true;
239
262
  for (const state of manualStates)
240
263
  state.desired = false;
241
264
  for (const owner of this.manualFanoutSubscriberOwners) {
242
265
  (0, RuntimeEndpointConnections_1.detachEndpointConnections)(owner);
243
266
  }
244
- this.manualFanoutSubscriberOwners.clear();
245
- this.manualFanoutSubscribers.clear();
246
267
  const manualLoops = new Set(manualStates
247
268
  .map((state) => state.active?.loop ?? state.stopping?.loop)
248
269
  .filter((loop) => loop !== undefined));
249
270
  const subscriberLoops = [...this.subscriberReceiveLoops].filter((loop) => !manualLoops.has(loop));
250
271
  const manualTransitions = manualStates.map((state) => this.drainManualFanoutSubscriberCore(state));
251
272
  const routeLoops = [...this.routeReceiveLoops];
273
+ const applicationDispatchQueues = [...this.applicationDispatchQueues.values()];
252
274
  const clientServerLocation = this.clientServerLocation;
253
275
  const fanoutLocation = this.fanoutLocation;
254
276
  const spotRouteBridges = [...this.options.spotRouteBridges.values()];
255
- this.channelReceiveLoops.length = 0;
256
- this.subscriberReceiveLoops.length = 0;
257
- this.routeReceiveLoops.length = 0;
258
- this.clientServerLocation = undefined;
259
- this.fanoutLocation = undefined;
260
- this.taskRunner = undefined;
261
- this.meshChannelDispatchers.clear();
262
- this.meshRouteDispatchers.clear();
263
- this.options.spotRouteBridges.clear();
264
277
  return {
265
278
  channelLoops,
266
279
  subscriberLoops,
267
280
  manualTransitions,
268
281
  routeLoops,
282
+ applicationDispatchQueues,
269
283
  clientServerLocation,
270
284
  fanoutLocation,
271
285
  spotRouteBridges
272
286
  };
273
287
  }
288
+ applicationDispatchQueue(channelName) {
289
+ let queue = this.applicationDispatchQueues.get(channelName);
290
+ if (queue === undefined) {
291
+ queue = (0, channel_receive_loops_1.createChannelApplicationDispatchQueue)();
292
+ this.applicationDispatchQueues.set(channelName, queue);
293
+ }
294
+ return queue;
295
+ }
274
296
  openOutboundSockets() {
275
297
  // The process-local Server is an independent peer source. Location Store
276
298
  // discovery may later alias the same admitted identity, but startup and
@@ -310,7 +332,7 @@ class ZLinkChannelRuntimeLifecycle {
310
332
  unhandled: this.options.registration.dispatch?.unhandled
311
333
  });
312
334
  const spotRouteBridge = this.createSpotRouteBridgeForRouter(channelName, router);
313
- const loop = new channel_receive_loops_1.ZLinkChannelReceiveLoop(channelName, router, dispatcher, spotRouteBridge, (received, socket) => this.options.sockets.tryHandleClientServerControl(channelName, received, socket), this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, (error) => taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error), this.receiveRoundRobin);
335
+ const loop = new channel_receive_loops_1.ZLinkChannelReceiveLoop(channelName, router, dispatcher, spotRouteBridge, (received, socket) => this.options.sockets.tryHandleClientServerControl(channelName, received, socket), this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, (error) => taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error), this.receiveRoundRobin, this.applicationDispatchQueue(channelName));
314
336
  this.channelReceiveLoops.push(loop);
315
337
  tasks.push(taskRunner.run(`channel:${channelName}`, (signal) => loop.run(signal)));
316
338
  }
@@ -369,7 +391,7 @@ class ZLinkChannelRuntimeLifecycle {
369
391
  return state;
370
392
  }
371
393
  requestManualFanoutConnect(channelName, endpoint, taskRunner, dispatcher) {
372
- if (this.disposed)
394
+ if (this.disposal.started)
373
395
  return;
374
396
  const state = this.getOrCreateManualFanoutSubscriber(channelName, endpoint, this.nextManualFanoutIndex++, taskRunner, dispatcher);
375
397
  state.desired = true;
@@ -403,7 +425,7 @@ class ZLinkChannelRuntimeLifecycle {
403
425
  }
404
426
  openManualFanoutSubscriber(state) {
405
427
  const { channelName, endpoint, connectionId, taskRunner, dispatcher } = state;
406
- if (this.disposed || !state.desired || this.taskRunner !== taskRunner) {
428
+ if (this.disposal.started || !state.desired || this.taskRunner !== taskRunner) {
407
429
  return Promise.resolve();
408
430
  }
409
431
  const token = Symbol(`manual-fanout:${channelName}:${endpoint}`);
@@ -414,20 +436,20 @@ class ZLinkChannelRuntimeLifecycle {
414
436
  const subscriber = this.options.sockets.openFanoutSubscriberConnection(channelName, connectionId, endpoint, {
415
437
  onReady() { },
416
438
  onTerminated: () => {
417
- if (this.disposed ||
439
+ if (this.disposal.started ||
418
440
  (state.active?.token !== token && state.openingToken !== token) ||
419
441
  reconnecting)
420
442
  return;
421
443
  reconnecting = true;
422
444
  setImmediate(() => {
423
- if (this.disposed ||
445
+ if (this.disposal.started ||
424
446
  (state.active?.token !== token && state.openingToken !== token)) {
425
447
  reconnecting = false;
426
448
  return;
427
449
  }
428
450
  this.enqueueManualFanoutTransition(state, async () => {
429
451
  reconnecting = false;
430
- if (this.disposed || state.active?.token !== token)
452
+ if (this.disposal.started || state.active?.token !== token)
431
453
  return;
432
454
  try {
433
455
  await this.closeManualFanoutSubscriber(state, token);
@@ -442,7 +464,7 @@ class ZLinkChannelRuntimeLifecycle {
442
464
  });
443
465
  }
444
466
  });
445
- loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${state.channelName}:manual:${state.index}:dispatch`, error));
467
+ loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${state.channelName}:manual:${state.index}:dispatch`, error), this.applicationDispatchQueue(channelName));
446
468
  state.openingToken = undefined;
447
469
  state.active = { token, loop };
448
470
  this.subscriberReceiveLoops.push(loop);
@@ -471,9 +493,6 @@ class ZLinkChannelRuntimeLifecycle {
471
493
  catch (error) {
472
494
  errors.push(error);
473
495
  }
474
- finally {
475
- await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
476
- }
477
496
  try {
478
497
  await startOutsideStateLane(() => this.options.sockets.closeFanoutSubscriberConnection(state.connectionId));
479
498
  }
@@ -485,12 +504,13 @@ class ZLinkChannelRuntimeLifecycle {
485
504
  if (errors.length > 1) {
486
505
  throw new AggregateError(errors, `Fanout subscriber '${state.connectionId}' cleanup failed.`);
487
506
  }
507
+ await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
488
508
  }
489
509
  shouldReconnectManualFanoutSubscriber(state) {
490
- return !this.disposed && state.desired;
510
+ return !this.disposal.started && state.desired;
491
511
  }
492
512
  beginCloseManualFanoutSubscriberCore(state, expectedToken) {
493
- const active = state.active;
513
+ const active = state.active ?? state.stopping;
494
514
  if (active === undefined || (expectedToken !== undefined && active.token !== expectedToken)) {
495
515
  return undefined;
496
516
  }
@@ -521,7 +541,7 @@ class ZLinkChannelRuntimeLifecycle {
521
541
  unhandled: this.options.registration.dispatch?.unhandled,
522
542
  metrics: this.options.dispatchServices.metrics()
523
543
  });
524
- const loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), undefined, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${channelName}:automatic:${connectionId}:dispatch`, error));
544
+ const loop = new channel_receive_loops_1.ZLinkSubscriberReceiveLoop(this.options.adapter, subscriber, dispatcher, this.options.applicationJobQueue, (message) => this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber), undefined, (error) => taskRunner.errorSink.reportRuntimeTaskException(`subscriber:${channelName}:automatic:${connectionId}:dispatch`, error), this.applicationDispatchQueue(channelName));
525
545
  this.subscriberReceiveLoops.push(loop);
526
546
  void taskRunner.run(`subscriber:${channelName}:automatic:${connectionId}`, (signal) => loop.run(signal));
527
547
  return async () => {
@@ -567,7 +587,7 @@ class ZLinkChannelRuntimeLifecycle {
567
587
  unhandled: this.options.registration.dispatch?.unhandled,
568
588
  spotRouteBridge
569
589
  });
570
- const loop = new channel_receive_loops_1.ZLinkRouteReceiveLoop(router, dispatcher, this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`route:${routeChannel.routerChannelId}:dispatch`, error));
590
+ const loop = new channel_receive_loops_1.ZLinkRouteReceiveLoop(router, dispatcher, this.options.adapter.createReadablePoller(router), this.options.applicationJobQueue, this.receiveRoundRobin, (error) => taskRunner.errorSink.reportRuntimeTaskException(`route:${routeChannel.routerChannelId}:dispatch`, error), this.applicationDispatchQueue(routeChannel.routerChannelId));
571
591
  this.routeReceiveLoops.push(loop);
572
592
  tasks.push(taskRunner.run(`route:${routeChannel.routerChannelId}`, (signal) => loop.run(signal)));
573
593
  }
@@ -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';
@@ -27,11 +28,6 @@ export declare class ZLinkChannelRuntimeManager {
27
28
  fanoutTopology(channelName: string): {
28
29
  descriptors: readonly import("../foundation").FanoutPublisherDescriptor[];
29
30
  };
30
- getFanoutListenerStatus(channelName: string): {
31
- channelName: string;
32
- endpoint: string;
33
- observedAt: Date;
34
- };
35
31
  observeClientServerTopology(channelName: string, changed: () => void): () => void;
36
32
  observeFanoutTopology(channelName: string, changed: () => void): () => void;
37
33
  configureLocationAutoConnect(runtime: ZLinkLocationRuntime, stores: ZLinkLocationRuntimeStores, options: ZLinkLocationOptionOverrides, events?: ZLinkLocationEventSink): void;
@@ -65,6 +61,7 @@ export declare class ZLinkChannelRuntimeManager {
65
61
  dispose(signal?: AbortSignal): Promise<void>;
66
62
  }
67
63
  export interface ZLinkChannelRuntimeManagerOptions {
64
+ readonly listenerRecords?: ZLinkListenerRecords;
68
65
  readonly internalRouteSendHandlers?: ReadonlyMap<string, ZLinkRouteRuntimeSendHandler>;
69
66
  readonly internalRouteRequestHandlers?: ReadonlyMap<string, ZLinkRouteRuntimeRequestHandler>;
70
67
  readonly monitoringAdapter?: ZLinkMonitoringBackendAdapter;
@@ -18,7 +18,7 @@ class ZLinkChannelRuntimeManager {
18
18
  this.registration = registration;
19
19
  const applicationJobQueue = options.applicationJobQueue ??
20
20
  new application_job_queue_1.ApplicationJobQueue((0, application_job_queue_1.resolveApplicationJobQueueConfiguration)());
21
- this.sockets = new channel_socket_registry_1.ZLinkChannelSocketRegistry(registration, adapter, context, options.monitoringAdapter, options.oneWayFailureSink, applicationJobQueue);
21
+ this.sockets = new channel_socket_registry_1.ZLinkChannelSocketRegistry(registration, adapter, context, options.monitoringAdapter, options.oneWayFailureSink, applicationJobQueue, options.listenerRecords);
22
22
  const codecs = {
23
23
  serializers: registration.messageSerializers
24
24
  };
@@ -63,22 +63,14 @@ class ZLinkChannelRuntimeManager {
63
63
  };
64
64
  }
65
65
  fanoutTopology(channelName) {
66
- return { descriptors: this.sockets.fanoutActiveTargets(channelName) };
67
- }
68
- getFanoutListenerStatus(channelName) {
69
- const endpoint = this.sockets.fanoutPublisherEndpoint(channelName);
70
- if (endpoint === undefined) {
71
- throw new configuration_1.ZLinkConfigurationException(`Fanout publisher '${channelName}' has not reported a bound listener.`);
72
- }
73
66
  return {
74
- channelName,
75
- endpoint,
76
- observedAt: new Date()
67
+ descriptors: this.lifecycle.fanoutTopologyTargets(channelName) ??
68
+ this.sockets.fanoutActiveTargets(channelName)
77
69
  };
78
70
  }
79
71
  observeClientServerTopology(channelName, changed) {
80
72
  const monitor = this.sockets.clientServerMonitoringSource(channelName);
81
- monitor.onEvent(changed);
73
+ monitor.onChange(changed);
82
74
  return () => {
83
75
  void monitor.dispose();
84
76
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultZLinkChannelRuntimeOptions = void 0;
4
+ const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
4
5
  const configuration_1 = require("../configuration");
5
6
  const SendTimeoutValidation_1 = require("../../contracts/Configuration/SendTimeoutValidation");
6
7
  class ZLinkLiveSocketConfig {
@@ -112,8 +113,8 @@ function requireChannelName(channelName) {
112
113
  }
113
114
  }
114
115
  function validatePublicWeight(value) {
115
- if (!Number.isInteger(value) || value < 0 || value > 10_000) {
116
- throw new configuration_1.ZLinkConfigurationException('Weight must be an integer in 0..10000.');
116
+ if (!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(value)) {
117
+ throw new configuration_1.ZLinkConfigurationException(`Weight must be an integer in 0..${RegistrationBuilderPolicy_1.ZLINK_MAX_PUBLIC_WEIGHT}.`);
117
118
  }
118
119
  }
119
120
  function validateHighWaterMark(value, label) {
@@ -1,10 +1,11 @@
1
1
  import { type ZLinkClientServerServerDescriptor, type ZLinkFanoutPublisherDescriptor } from '../../contracts';
2
- import { type ZLinkFrameworkRegistration } from '../configuration';
3
- import type { ZLinkBackendContext, ZLinkBackendDealerSocket, ZLinkBackendPublisherSocket, ZLinkBackendRouterSocket, ZLinkBackendSocketMonitor, ZLinkBackendSubscriberSocket, ZLinkChannelBackendAdapter, ZLinkMonitoringBackendAdapter } from '../backend/contracts';
4
2
  import type { Message } from '../../contracts/Common/Message';
3
+ import type { ZLinkBackendContext, ZLinkBackendDealerSocket, ZLinkBackendPublisherSocket, ZLinkBackendRouterSocket, ZLinkBackendSocketMonitor, ZLinkBackendSubscriberSocket, ZLinkChannelBackendAdapter, ZLinkMonitoringBackendAdapter } from '../backend/contracts';
4
+ import { type ZLinkFrameworkRegistration } from '../configuration';
5
+ import { ZLinkListenerRecords } from '../foundation/listener-records';
5
6
  import { ServiceDiscoveryRegistry } from '../foundation/service-discovery-registry';
6
- import type { ZLinkChannelEnvelopeHeader } from './channel-envelope';
7
7
  import type { ApplicationJobQueue } from '../host/application-job-queue';
8
+ import type { ZLinkChannelEnvelopeHeader } from './channel-envelope';
8
9
  export interface ZLinkClientServerServerSocketIdentity {
9
10
  readonly serverRid: string;
10
11
  readonly lifecycleGeneration: bigint;
@@ -40,7 +41,8 @@ export declare class ZLinkChannelSocketRegistry {
40
41
  private readonly routeMeshPublicWeights;
41
42
  private readonly clientServerAdmittedClients;
42
43
  private readonly clientServerServerPeers;
43
- private readonly ownedMonitors;
44
+ private readonly disposal;
45
+ private readonly ownedResources;
44
46
  private readonly fanoutConnections;
45
47
  private readonly fanoutPublisherNextBeacon;
46
48
  private clientServerLivenessTimer?;
@@ -48,11 +50,15 @@ export declare class ZLinkChannelSocketRegistry {
48
50
  private readonly clientServerMonitorHandlers;
49
51
  private readonly fanoutMonitorHandlers;
50
52
  private readonly fanoutTopologyHandlers;
51
- constructor(registration: ZLinkFrameworkRegistration, adapter: ZLinkChannelBackendAdapter, context: ZLinkBackendContext, monitoringAdapter?: ZLinkMonitoringBackendAdapter | undefined, oneWayFailureSink?: ((error: unknown) => void) | undefined, applicationJobQueue?: ApplicationJobQueue | undefined);
53
+ private readonly listenerRecords;
54
+ constructor(registration: ZLinkFrameworkRegistration, adapter: ZLinkChannelBackendAdapter, context: ZLinkBackendContext, monitoringAdapter?: ZLinkMonitoringBackendAdapter | undefined, oneWayFailureSink?: ((error: unknown) => void) | undefined, applicationJobQueue?: ApplicationJobQueue | undefined, listenerRecords?: ZLinkListenerRecords);
52
55
  dispose(): Promise<void>;
56
+ private disposeCore;
53
57
  clientDealer(channelName: string): ZLinkBackendDealerSocket;
54
58
  channelRouter(channelName: string): ZLinkBackendRouterSocket;
55
59
  clientServerServerIdentity(channelName: string): ZLinkClientServerServerSocketIdentity;
60
+ fanoutPublisherEndpoint(channelName: string): string | undefined;
61
+ private recordListener;
56
62
  clientServerServerSocket(channelName: string): ZLinkBackendRouterSocket;
57
63
  clientServerServerWeight(channelName: string): number;
58
64
  setClientServerServerWeight(channelName: string, weight: number): void;
@@ -64,37 +70,19 @@ export declare class ZLinkChannelSocketRegistry {
64
70
  selectClientServerDealer(channelName: string): ZLinkBackendDealerSocket | undefined;
65
71
  clientDealerForOutbound(channelName: string): ZLinkBackendDealerSocket | undefined;
66
72
  selectedClientServerRid(channelName: string, dealer: ZLinkBackendDealerSocket): string | undefined;
67
- /**
68
- * Resolves a ClientServer send target, waiting when the ready candidate set is still empty, as
69
- * `framework/doc/framework/common/spec/server/02-channel-transport/02-channel-messaging.ko.md` §3.2 requires: the call waits
70
- * at call time for a bounded period and then fails with no-target. The bound is the shorter of
71
- * the call's remaining deadline and five seconds, mirroring the .NET reference
72
- * `ZLinkClientServerClientRuntime.WaitForReadyAsync`. The wait lives here because this registry
73
- * owns ClientServer connections, admission and weighted selection. Sends have no per-call
74
- * timeout, so they use the Channel's request timeout.
75
- *
76
- * The wait only observes admission that is already in flight: it never opens or reconnects a
77
- * connection, so it cannot trigger the admission it waits for, and Framework startup keeps not
78
- * waiting for local ClientServer admission. It applies whenever nothing is selectable, including
79
- * candidate sets excluded by weight 0 or drain, because `selectClientServerDealer` filters the
80
- * same way the reference `SelectReady()` does.
81
- *
82
- * Every attempt yields to the event loop between polls. ClientServer admission completes on the
83
- * monitor drains that the backend poll timer pumps, so a synchronous wait would starve the
84
- * admission it is waiting for and burn the whole bound before failing anyway. That is this
85
- * execution model's form of the hazard the JVM mirror avoids by not holding the admission
86
- * monitor across its sleep.
87
- */
88
- awaitClientDealerForOutbound(channelName: string, signal?: AbortSignal, deadlineAtMs?: number): Promise<ZLinkBackendDealerSocket | undefined>;
73
+ /** Observes discovery changes until the client DEALER admission deadline. */
74
+ awaitClientDealerForOutbound(channelName: string, signal?: AbortSignal): Promise<ZLinkBackendDealerSocket | undefined>;
89
75
  startManualClientServerConnections(): void;
90
76
  startLocalClientServerConnections(): void;
91
- clientServerMonitoringSource(channelName: string): ZLinkBackendSocketMonitor;
77
+ clientServerMonitoringSource(channelName: string): ZLinkBackendSocketMonitor & {
78
+ onChange(handler: () => void): void;
79
+ };
92
80
  clientServerActiveTargets(channelName: string): readonly Pick<ClientServerDiscoveryDescriptor, 'serverRoutingId' | 'weight' | 'state'>[];
93
- hasKnownClientServerTargets(channelName: string): boolean;
94
81
  fanoutActiveTargets(channelName: string): readonly import("../foundation/service-discovery-registry").FanoutPublisherDescriptor[];
95
82
  admitFanoutPublisher(descriptor: ZLinkFanoutPublisherDescriptor, connectionId: string): boolean;
96
83
  removeFanoutPublisher(descriptor: ZLinkFanoutPublisherDescriptor, connectionId: string): boolean;
97
84
  setClientServerServerDescriptor(descriptor: ZLinkClientServerServerDescriptor | undefined, channelName: string): void;
85
+ private notifyClientServerTopology;
98
86
  tryHandleClientServerControl(channelName: string, received: {
99
87
  readonly parts: readonly Message[];
100
88
  readonly replyToken: unknown | null;
@@ -124,13 +112,24 @@ export declare class ZLinkChannelSocketRegistry {
124
112
  onChange(handler: () => void): void;
125
113
  dispose(): Promise<void>;
126
114
  };
127
- private notifyFanoutTopology;
115
+ notifyFanoutTopology(channelName: string): void;
128
116
  private tickFanoutLiveness;
129
117
  private openManualClientServerConnection;
130
118
  private openConfiguredClientServerConnection;
131
119
  private admitConfiguredClientServerConnection;
132
120
  private drainClientServerControl;
133
- private requestClientServerEndpointTermination;
121
+ /**
122
+ * Ends the current logical admission of this connection: later replies of
123
+ * the fenced attempt no longer apply and its ready target is withdrawn.
124
+ */
125
+ private endClientServerAdmission;
126
+ /**
127
+ * A peer deadline or an invalid pushed control ends only the current logical
128
+ * admission. The connect intent stays with Core, which owns the endpoint
129
+ * reconnect (transport liveness §6); the service handshake starts again on
130
+ * the existing admission path.
131
+ */
132
+ private restartClientServerAdmission;
134
133
  private applyClientServerDescriptorUpdate;
135
134
  private ensureClientServerLivenessTimer;
136
135
  private drainSocketMonitors;
@@ -143,7 +142,6 @@ export declare class ZLinkChannelSocketRegistry {
143
142
  private pushClientServerDescriptorUpdate;
144
143
  private allocateClientServerProbeId;
145
144
  publisher(channelName: string): ZLinkBackendPublisherSocket;
146
- fanoutPublisherEndpoint(channelName: string): string | undefined;
147
145
  routeRouter(routerChannelId: string): ZLinkBackendRouterSocket;
148
146
  routeMeshSocket(routerChannelId: string): ZLinkBackendRouterSocket;
149
147
  routeMeshWeight(routerChannelId: string): number;