@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
@@ -1,28 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkChannelSocketRegistry = void 0;
4
- const listener_records_1 = require("../foundation/listener-records");
4
+ const disposal_1 = require("../disposal");
5
+ const stream_wire_1 = require("@zlink-systems/stream-wire");
6
+ const node_crypto_1 = require("node:crypto");
5
7
  const contracts_1 = require("../../contracts");
6
- const internal_event_contracts_1 = require("../diagnostics/internal-event-contracts");
7
- const configuration_1 = require("../configuration");
8
- const abort_1 = require("../abort");
8
+ const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
9
+ const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
9
10
  const RuntimeEndpointConnections_1 = require("../../contracts/Configuration/RuntimeEndpointConnections");
10
- const route_member_snapshot_1 = require("./route-member-snapshot");
11
- const framework_errors_internal_1 = require("../framework-errors-internal");
12
- const node_crypto_1 = require("node:crypto");
11
+ const abort_1 = require("../abort");
13
12
  const runtime_message_1 = require("../backend/runtime-message");
14
- const service_discovery_registry_1 = require("../foundation/service-discovery-registry");
13
+ const runtime_values_1 = require("../backend/runtime-values");
14
+ const configuration_1 = require("../configuration");
15
+ const internal_event_contracts_1 = require("../diagnostics/internal-event-contracts");
16
+ const listener_records_1 = require("../foundation/listener-records");
15
17
  const runtime_state_projections_1 = require("../foundation/runtime-state-projections");
18
+ const service_discovery_registry_1 = require("../foundation/service-discovery-registry");
19
+ const service_liveness_registry_1 = require("../foundation/service-liveness-registry");
16
20
  const service_wire_m6a_codec_1 = require("../foundation/service-wire-m6a-codec");
21
+ const framework_errors_internal_1 = require("../framework-errors-internal");
17
22
  const client_server_service_wire_1 = require("./client-server-service-wire");
18
23
  const fanout_service_wire_1 = require("./fanout-service-wire");
19
- const runtime_values_1 = require("../backend/runtime-values");
24
+ const route_member_snapshot_1 = require("./route-member-snapshot");
20
25
  const MAX_LIFECYCLE_GENERATION = 0x7fffffffffffffffn;
21
- const CLIENT_SERVER_PROBE_INTERVAL_MS = 5_000;
22
- const CLIENT_SERVER_PEER_DEADLINE_MS = 15_000;
23
- const CLIENT_SERVER_READY_WAIT_CAP_MS = 5_000;
24
- const CLIENT_SERVER_READY_POLL_INTERVAL_MS = 5;
25
- const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
26
+ const CLIENT_SERVER_PROBE_INTERVAL_MS = service_liveness_registry_1.DEFAULT_SERVICE_PROBE_INTERVAL_MS;
27
+ const CLIENT_SERVER_PEER_DEADLINE_MS = service_liveness_registry_1.DEFAULT_SERVICE_PEER_TIMEOUT_MS;
28
+ const CLIENT_SERVER_LIVENESS_TICK_MS = 100;
29
+ const DEFAULT_SEND_TIMEOUT_MS = 1_000;
26
30
  class ZLinkChannelSocketRegistry {
27
31
  registration;
28
32
  adapter;
@@ -44,7 +48,8 @@ class ZLinkChannelSocketRegistry {
44
48
  routeMeshPublicWeights = new Map();
45
49
  clientServerAdmittedClients = new Map();
46
50
  clientServerServerPeers = new Map();
47
- ownedMonitors = new Set();
51
+ disposal = new disposal_1.RuntimeDisposal();
52
+ ownedResources = new Set();
48
53
  fanoutConnections = new Map();
49
54
  fanoutPublisherNextBeacon = new Map();
50
55
  clientServerLivenessTimer;
@@ -62,9 +67,13 @@ class ZLinkChannelSocketRegistry {
62
67
  this.applicationJobQueue = applicationJobQueue;
63
68
  this.listenerRecords = listenerRecords ?? new listener_records_1.ZLinkListenerRecords();
64
69
  }
65
- async dispose() {
70
+ dispose() {
71
+ return this.disposal.run(() => this.disposeCore());
72
+ }
73
+ async disposeCore() {
74
+ this.clientServerDiscovery.dispose((0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RuntimeShutdown, 'Channel sockets are shutting down.'));
66
75
  const clientServerConnections = [...new Set(this.clientServerConnections.values())];
67
- const clientServerPollers = clientServerConnections.map((connection) => connection.readablePoller);
76
+ const clientServerPollers = clientServerConnections.flatMap((connection) => connection.readablePoller === undefined ? [] : [connection.readablePoller]);
68
77
  const sockets = [
69
78
  ...this.clientDealers.values(),
70
79
  ...clientServerConnections.map((value) => value.dealer),
@@ -80,8 +89,6 @@ class ZLinkChannelSocketRegistry {
80
89
  ...this.routeRouters.values()
81
90
  ]))
82
91
  this.unregisterReceiveFlowSocket(socket);
83
- this.clientDealers.clear();
84
- this.clientServerConnections.clear();
85
92
  this.clientServerReadyIdentities.clear();
86
93
  this.clientServerServerDescriptors.clear();
87
94
  this.clientServerPublicWeights.clear();
@@ -91,23 +98,40 @@ class ZLinkChannelSocketRegistry {
91
98
  this.clientServerMonitorHandlers.clear();
92
99
  this.fanoutMonitorHandlers.clear();
93
100
  this.fanoutTopologyHandlers.clear();
94
- this.fanoutConnections.clear();
95
101
  this.fanoutPublisherNextBeacon.clear();
96
102
  if (this.clientServerLivenessTimer !== undefined) {
97
103
  clearInterval(this.clientServerLivenessTimer);
98
104
  this.clientServerLivenessTimer = undefined;
99
105
  }
100
- this.channelRouters.clear();
101
- this.publishers.clear();
102
- this.routeRouters.clear();
103
106
  this.routeMembers.clear();
104
- const monitors = [...this.ownedMonitors];
105
- this.ownedMonitors.clear();
106
- const cleanup = await Promise.allSettled([
107
- ...clientServerPollers.map((poller) => poller.dispose()),
108
- ...monitors.map((monitor) => monitor.dispose()),
109
- ...sockets.map((socket) => socket.dispose())
110
- ]);
107
+ const cleanup = await Promise.allSettled([...new Set([...clientServerPollers, ...this.ownedResources, ...sockets])].map(async (resource) => {
108
+ await resource.dispose();
109
+ this.ownedResources.delete(resource);
110
+ for (const owners of [
111
+ this.clientDealers,
112
+ this.channelRouters,
113
+ this.publishers,
114
+ this.routeRouters
115
+ ]) {
116
+ for (const [name, owned] of owners)
117
+ if (owned === resource)
118
+ owners.delete(name);
119
+ }
120
+ for (const [name, owned] of this.clientServerConnections) {
121
+ if (owned.dealer === resource)
122
+ this.clientServerConnections.delete(name);
123
+ if (owned.readablePoller === resource)
124
+ owned.readablePoller = undefined;
125
+ if (owned.monitor === resource)
126
+ owned.monitor = undefined;
127
+ }
128
+ for (const [name, owned] of this.fanoutConnections) {
129
+ if (owned.subscriber === resource)
130
+ this.fanoutConnections.delete(name);
131
+ if (owned.monitor === resource)
132
+ owned.monitor = undefined;
133
+ }
134
+ }));
111
135
  const errors = cleanup
112
136
  .filter((result) => result.status === 'rejected')
113
137
  .map((result) => result.reason);
@@ -127,13 +151,16 @@ class ZLinkChannelSocketRegistry {
127
151
  throw new configuration_1.ZLinkConfigurationException(`Channel client '${channelName}' is not registered.`);
128
152
  }
129
153
  const dealer = this.adapter.createDealerSocket(this.context);
154
+ this.clientDealers.set(channelName, dealer);
130
155
  this.registerReceiveFlowSocket(dealer);
131
156
  dealer.setChannelName(channelName);
132
157
  if (channel?.routingId !== undefined && channel.routingId.length > 0) {
133
158
  dealer.setRoutingId(deriveRoutingId(channel.routingId, 'dealer'));
134
159
  }
135
- applySocketConfig(dealer, client);
136
- this.clientDealers.set(channelName, dealer);
160
+ applySocketConfig(dealer, {
161
+ ...client,
162
+ sendTimeoutMs: configuredSendTimeoutMs(client.sendTimeoutMs)
163
+ });
137
164
  return dealer;
138
165
  }
139
166
  channelRouter(channelName) {
@@ -149,6 +176,7 @@ class ZLinkChannelSocketRegistry {
149
176
  throw new configuration_1.ZLinkConfigurationException(`Channel server '${channelName}' does not define a bind endpoint.`);
150
177
  }
151
178
  const router = this.adapter.createRouterSocket(this.context);
179
+ this.channelRouters.set(channelName, router);
152
180
  this.registerReceiveFlowSocket(router);
153
181
  router.setChannelName(channelName);
154
182
  const identity = this.clientServerIdentities.get(channelName) ?? {
@@ -157,14 +185,14 @@ class ZLinkChannelSocketRegistry {
157
185
  };
158
186
  this.clientServerIdentities.set(channelName, identity);
159
187
  router.setRoutingId(identity.serverRid);
160
- const publicWeight = channel.server.weight ?? 100;
188
+ const publicWeight = channel.server.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT;
161
189
  this.clientServerPublicWeights.set(channelName, publicWeight);
162
190
  router.peerWeight = rawAvailabilityWeight(publicWeight);
163
191
  applySocketConfig(router, channel.server);
164
192
  router.bind(channel.server.bind);
165
193
  if (this.monitoringAdapter !== undefined) {
166
194
  const monitor = this.monitoringAdapter.openSocketMonitor(router);
167
- this.ownedMonitors.add(monitor);
195
+ this.ownedResources.add(monitor);
168
196
  monitor.onEvent((event) => {
169
197
  if (event.routingId === undefined)
170
198
  return;
@@ -179,7 +207,6 @@ class ZLinkChannelSocketRegistry {
179
207
  this.clientServerAdmittedClients.get(channelName)?.delete(routingId);
180
208
  });
181
209
  }
182
- this.channelRouters.set(channelName, router);
183
210
  const endpoint = advertisedEndpoint(router.lastEndpoint ?? channel.server.bind, channel.server.advertiseHost);
184
211
  this.recordListener('clientServer', channelName, endpoint);
185
212
  if (!this.clientServerServerDescriptors.has(channelName)) {
@@ -219,7 +246,7 @@ class ZLinkChannelSocketRegistry {
219
246
  }
220
247
  clientServerServerWeight(channelName) {
221
248
  this.channelRouter(channelName);
222
- return this.clientServerPublicWeights.get(channelName) ?? 100;
249
+ return this.clientServerPublicWeights.get(channelName) ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT;
223
250
  }
224
251
  setClientServerServerWeight(channelName, weight) {
225
252
  requirePublicWeight(weight);
@@ -240,49 +267,33 @@ class ZLinkChannelSocketRegistry {
240
267
  throw new configuration_1.ZLinkConfigurationException(`Channel client '${channelName}' is not registered.`);
241
268
  }
242
269
  const dealer = this.adapter.createDealerSocket(this.context);
243
- this.registerReceiveFlowSocket(dealer);
244
- dealer.setChannelName(channelName);
245
- dealer.setRoutingId(`cs-client-${(0, node_crypto_1.randomUUID)()}`);
246
- applySocketConfig(dealer, client);
247
- const cleanupDealer = () => {
248
- this.unregisterReceiveFlowSocket(dealer);
249
- void Promise.allSettled([dealer.dispose()]);
250
- };
251
- let readablePoller;
252
- try {
253
- readablePoller = this.adapter.createReadablePoller(dealer);
254
- }
255
- catch (error) {
256
- cleanupDealer();
257
- throw error;
258
- }
259
- let monitor;
260
- try {
261
- monitor = this.monitoringAdapter.openSocketMonitor(dealer);
262
- }
263
- catch (error) {
264
- try {
265
- readablePoller.dispose();
266
- }
267
- finally {
268
- cleanupDealer();
269
- }
270
- throw error;
271
- }
272
- this.ownedMonitors.add(monitor);
273
270
  const connection = {
274
271
  channelName,
275
272
  endpoint,
276
273
  dealer,
277
- readablePoller,
278
- monitor,
279
274
  aliases: new Set([connectionId]),
280
275
  callbacksByAlias: new Map([[connectionId, callbacks]]),
281
276
  physicalConnectionId: Symbol(connectionId)
282
277
  };
283
- this.clientServerConnections.set(connectionId, connection);
284
- this.ensureClientServerLivenessTimer();
278
+ this.ownedResources.add(dealer);
279
+ const created = [dealer];
285
280
  try {
281
+ this.clientServerConnections.set(connectionId, connection);
282
+ this.registerReceiveFlowSocket(dealer);
283
+ dealer.setChannelName(channelName);
284
+ dealer.setRoutingId(`cs-client-${(0, node_crypto_1.randomUUID)()}`);
285
+ applySocketConfig(dealer, {
286
+ ...client,
287
+ sendTimeoutMs: configuredSendTimeoutMs(client.sendTimeoutMs)
288
+ });
289
+ connection.readablePoller = this.adapter.createReadablePoller(dealer);
290
+ created.push(connection.readablePoller);
291
+ this.ownedResources.add(connection.readablePoller);
292
+ const monitor = this.monitoringAdapter.openSocketMonitor(dealer);
293
+ connection.monitor = monitor;
294
+ created.push(monitor);
295
+ this.ownedResources.add(monitor);
296
+ this.ensureClientServerLivenessTimer();
286
297
  monitor.onEvent((event) => {
287
298
  if (![...connection.aliases].some((alias) => this.clientServerConnections.get(alias) === connection))
288
299
  return;
@@ -312,26 +323,26 @@ class ZLinkChannelSocketRegistry {
312
323
  }
313
324
  });
314
325
  dealer.connect(endpoint);
326
+ return dealer;
315
327
  }
316
328
  catch (error) {
317
329
  this.clientServerConnections.delete(connectionId);
318
- this.ownedMonitors.delete(monitor);
319
- try {
320
- readablePoller.dispose();
321
- }
322
- finally {
323
- cleanupDealer();
324
- void Promise.allSettled([monitor.dispose()]);
325
- }
330
+ this.unregisterReceiveFlowSocket(dealer);
331
+ void Promise.allSettled(created.map(async (resource) => {
332
+ await resource.dispose();
333
+ this.ownedResources.delete(resource);
334
+ })).then((results) => {
335
+ for (const result of results)
336
+ if (result.status === 'rejected')
337
+ this.oneWayFailureSink?.(result.reason);
338
+ });
326
339
  throw error;
327
340
  }
328
- return dealer;
329
341
  }
330
342
  async closeClientServerConnection(connectionId) {
331
343
  const current = this.clientServerConnections.get(connectionId);
332
344
  if (current === undefined)
333
345
  return;
334
- this.clientServerConnections.delete(connectionId);
335
346
  current.aliases.delete(connectionId);
336
347
  current.callbacksByAlias.delete(connectionId);
337
348
  const ready = this.clientServerReadyIdentities.get(connectionId);
@@ -351,21 +362,34 @@ class ZLinkChannelSocketRegistry {
351
362
  });
352
363
  }
353
364
  }
354
- if (current.aliases.size > 0)
365
+ this.notifyClientServerTopology(current.channelName);
366
+ if (current.aliases.size > 0) {
367
+ this.clientServerConnections.delete(connectionId);
355
368
  return;
369
+ }
356
370
  await this.disposeClientServerPhysical(connectionId, current);
371
+ this.clientServerConnections.delete(connectionId);
357
372
  }
358
373
  async disposeClientServerPhysical(connectionId, current) {
359
374
  try {
360
375
  current.dealer.disconnect(current.endpoint);
361
376
  }
362
377
  catch {
363
- // Disposal below is the terminal cleanup if the transport already closed.
378
+ // The socket close below releases an endpoint that is already disconnected.
364
379
  }
365
- this.ownedMonitors.delete(current.monitor);
366
380
  this.unregisterReceiveFlowSocket(current.dealer);
367
- current.readablePoller.dispose();
368
- const results = await Promise.allSettled([current.monitor.dispose(), current.dealer.dispose()]);
381
+ if (current.readablePoller !== undefined) {
382
+ current.readablePoller.dispose();
383
+ this.ownedResources.delete(current.readablePoller);
384
+ current.readablePoller = undefined;
385
+ }
386
+ const results = await Promise.allSettled([
387
+ current.monitor?.dispose(),
388
+ (async () => {
389
+ await current.dealer.dispose();
390
+ this.ownedResources.delete(current.dealer);
391
+ })()
392
+ ]);
369
393
  const errors = results
370
394
  .filter((result) => result.status === 'rejected')
371
395
  .map((result) => result.reason);
@@ -374,6 +398,8 @@ class ZLinkChannelSocketRegistry {
374
398
  if (errors.length > 1) {
375
399
  throw new AggregateError(errors, `ClientServer connection '${connectionId}' cleanup failed.`);
376
400
  }
401
+ if (current.monitor !== undefined)
402
+ this.ownedResources.delete(current.monitor);
377
403
  }
378
404
  admitClientServerConnection(descriptor, connectionId) {
379
405
  const connection = this.clientServerConnections.get(connectionId);
@@ -383,6 +409,7 @@ class ZLinkChannelSocketRegistry {
383
409
  const admitted = this.clientServerDiscovery.admitClientServer(descriptor, connection.readyConnectionId);
384
410
  if (admitted)
385
411
  connection.admittedDescriptor = descriptor;
412
+ this.notifyClientServerTopology(descriptor.channelName);
386
413
  return admitted;
387
414
  }
388
415
  const duplicateId = [...this.clientServerReadyIdentities].find(([, identity]) => identity.channelName === descriptor.channelName &&
@@ -416,6 +443,7 @@ class ZLinkChannelSocketRegistry {
416
443
  connection.readyConnectionId = connectionId;
417
444
  connection.admittedDescriptor = descriptor;
418
445
  }
446
+ this.notifyClientServerTopology(descriptor.channelName);
419
447
  return admitted;
420
448
  }
421
449
  removeClientServerReady(channelName, serverRoutingId, connectionId) {
@@ -430,6 +458,7 @@ class ZLinkChannelSocketRegistry {
430
458
  connection.outstandingProbeId = undefined;
431
459
  }
432
460
  }
461
+ this.notifyClientServerTopology(channelName);
433
462
  return removed;
434
463
  }
435
464
  selectClientServerDealer(channelName) {
@@ -453,47 +482,58 @@ class ZLinkChannelSocketRegistry {
453
482
  }
454
483
  return undefined;
455
484
  }
456
- /**
457
- * Resolves a ClientServer send target, waiting when the ready candidate set is still empty, as
458
- * `framework/doc/framework/common/spec/server/02-channel-transport/02-channel-messaging.ko.md` §3.2 requires: the call waits
459
- * at call time for a bounded period and then fails with no-target. The bound is the shorter of
460
- * the call's remaining deadline and five seconds, mirroring the .NET reference
461
- * `ZLinkClientServerClientRuntime.WaitForReadyAsync`. The wait lives here because this registry
462
- * owns ClientServer connections, admission and weighted selection. Sends have no per-call
463
- * timeout, so they use the Channel's request timeout.
464
- *
465
- * The wait only observes admission that is already in flight: it never opens or reconnects a
466
- * connection, so it cannot trigger the admission it waits for, and Framework startup keeps not
467
- * waiting for local ClientServer admission. It applies whenever nothing is selectable, including
468
- * candidate sets excluded by weight 0 or drain, because `selectClientServerDealer` filters the
469
- * same way the reference `SelectReady()` does.
470
- *
471
- * Every attempt yields to the event loop between polls. ClientServer admission completes on the
472
- * monitor drains that the backend poll timer pumps, so a synchronous wait would starve the
473
- * admission it is waiting for and burn the whole bound before failing anyway. That is this
474
- * execution model's form of the hazard the JVM mirror avoids by not holding the admission
475
- * monitor across its sleep.
476
- */
477
- async awaitClientDealerForOutbound(channelName, signal, deadlineAtMs) {
478
- const startedAtMs = performance.now();
479
- const deadline = Math.min(deadlineAtMs ??
480
- startedAtMs +
481
- (this.registration.channels.get(channelName)?.requestTimeoutMs ??
482
- this.registration.requestTimeoutMs ??
483
- DEFAULT_REQUEST_TIMEOUT_MS), startedAtMs + CLIENT_SERVER_READY_WAIT_CAP_MS);
484
- for (;;) {
485
- this.drainSocketMonitors();
485
+ /** Observes discovery changes until the client DEALER admission deadline. */
486
+ async awaitClientDealerForOutbound(channelName, signal) {
487
+ (0, abort_1.throwIfAborted)(signal);
488
+ const select = () => {
486
489
  const dealer = this.clientDealerForOutbound(channelName);
487
490
  if (dealer !== undefined)
488
491
  return dealer;
489
- const remainingMs = deadline - performance.now();
490
- if (remainingMs <= 0)
491
- return undefined;
492
- (0, abort_1.throwIfAborted)(signal);
493
- await new Promise((resolve) => {
494
- setTimeout(resolve, Math.min(CLIENT_SERVER_READY_POLL_INTERVAL_MS, remainingMs));
495
- });
496
- }
492
+ if (this.clientServerDiscovery.hasReadyClientServer(channelName)) {
493
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Channel '${channelName}' has no eligible ClientServer member.`);
494
+ }
495
+ return undefined;
496
+ };
497
+ const dealer = select();
498
+ if (dealer !== undefined)
499
+ return dealer;
500
+ const sendTimeoutMs = configuredSendTimeoutMs(this.registration.channels.get(channelName)?.client?.sendTimeoutMs);
501
+ return new Promise((resolve, reject) => {
502
+ const cleanup = () => {
503
+ clearTimeout(deadline);
504
+ unsubscribe();
505
+ signal?.removeEventListener('abort', abort);
506
+ };
507
+ const abort = () => {
508
+ cleanup();
509
+ reject((0, abort_1.createAbortError)());
510
+ };
511
+ const changed = (error) => {
512
+ try {
513
+ if (error !== undefined)
514
+ throw error;
515
+ const selected = select();
516
+ if (selected === undefined)
517
+ return;
518
+ cleanup();
519
+ resolve(selected);
520
+ }
521
+ catch (error) {
522
+ cleanup();
523
+ reject(error);
524
+ }
525
+ };
526
+ const unsubscribe = this.clientServerDiscovery.onClientServerChanged(changed);
527
+ const deadline = setTimeout(() => {
528
+ cleanup();
529
+ resolve(undefined);
530
+ }, sendTimeoutMs);
531
+ signal?.addEventListener('abort', abort, { once: true });
532
+ // Registration and selection share one event-loop turn; recheck after subscribing.
533
+ changed();
534
+ if (signal?.aborted === true)
535
+ abort();
536
+ });
497
537
  }
498
538
  startManualClientServerConnections() {
499
539
  for (const [channelName, channel] of this.registration.channels) {
@@ -522,26 +562,39 @@ class ZLinkChannelSocketRegistry {
522
562
  }
523
563
  }
524
564
  clientServerMonitoringSource(channelName) {
525
- if (this.registration.channels.get(channelName)?.client === undefined) {
526
- throw new configuration_1.ZLinkConfigurationException(`Channel client '${channelName}' is not registered.`);
565
+ const channel = this.registration.channels.get(channelName);
566
+ if (channel?.client === undefined && channel?.server === undefined) {
567
+ throw new configuration_1.ZLinkConfigurationException(`ClientServer channel '${channelName}' is not registered.`);
527
568
  }
528
569
  let disposed = false;
529
570
  let handler;
571
+ const register = (next) => {
572
+ if (disposed)
573
+ return;
574
+ if (handler !== undefined) {
575
+ this.clientServerMonitorHandlers.get(channelName)?.delete(handler);
576
+ }
577
+ handler = next;
578
+ let handlers = this.clientServerMonitorHandlers.get(channelName);
579
+ if (handlers === undefined) {
580
+ handlers = new Set();
581
+ this.clientServerMonitorHandlers.set(channelName, handlers);
582
+ }
583
+ handlers.add(next);
584
+ };
530
585
  return {
531
586
  nativeInstance: {},
532
587
  onEvent: (next) => {
533
- if (disposed)
534
- return;
535
- if (handler !== undefined) {
536
- this.clientServerMonitorHandlers.get(channelName)?.delete(handler);
537
- }
538
- handler = next;
539
- let handlers = this.clientServerMonitorHandlers.get(channelName);
540
- if (handlers === undefined) {
541
- handlers = new Set();
542
- this.clientServerMonitorHandlers.set(channelName, handlers);
543
- }
544
- handlers.add(next);
588
+ register((event) => {
589
+ if (event !== undefined)
590
+ next(event);
591
+ });
592
+ },
593
+ onChange: (next) => {
594
+ register((event) => {
595
+ if (event === undefined)
596
+ next();
597
+ });
545
598
  },
546
599
  drain: () => 0,
547
600
  dispose: async () => {
@@ -606,6 +659,11 @@ class ZLinkChannelSocketRegistry {
606
659
  this.clientServerServerDescriptors.set(channelName, descriptor);
607
660
  this.pushClientServerDescriptorUpdate(channelName, descriptor);
608
661
  }
662
+ this.notifyClientServerTopology(channelName);
663
+ }
664
+ notifyClientServerTopology(channelName) {
665
+ for (const handler of this.clientServerMonitorHandlers.get(channelName) ?? [])
666
+ handler();
609
667
  }
610
668
  tryHandleClientServerControl(channelName, received, router) {
611
669
  if (received.parts.length === 0)
@@ -632,17 +690,17 @@ class ZLinkChannelSocketRegistry {
632
690
  else if (record.kind !== 'hello' ||
633
691
  received.parts.length !== 1 ||
634
692
  received.replyToken === null) {
635
- reply = (0, client_server_service_wire_1.encodeClientServerReject)(1);
693
+ reply = (0, client_server_service_wire_1.encodeClientServerReject)(client_server_service_wire_1.ClientServerRejectReason.ProtocolVersionUnsupported);
636
694
  }
637
695
  else {
638
696
  const descriptor = this.clientServerServerDescriptors.get(channelName);
639
697
  if (descriptor === undefined ||
640
698
  record.hello.channelName !== channelName ||
641
699
  record.hello.securityIdentity !== descriptor.securityIdentity) {
642
- reply = (0, client_server_service_wire_1.encodeClientServerReject)(3);
700
+ reply = (0, client_server_service_wire_1.encodeClientServerReject)(client_server_service_wire_1.ClientServerRejectReason.AdmissionMismatch);
643
701
  }
644
702
  else {
645
- const normalizedEffectiveMaxMessageBytes = Math.min(normalizedMessageLimit(router.maxMessageSize), record.hello.normalizedEffectiveMaxMessageBytes);
703
+ const normalizedEffectiveMaxMessageBytes = Math.min((0, client_server_service_wire_1.normalizeClientServerMessageLimit)(router.maxMessageSize), record.hello.normalizedEffectiveMaxMessageBytes);
646
704
  reply = (0, client_server_service_wire_1.encodeClientServerAdmit)(descriptor, normalizedEffectiveMaxMessageBytes);
647
705
  this.admitClientServerServerPeer(channelName, String(received.routingId), normalizedEffectiveMaxMessageBytes);
648
706
  }
@@ -716,23 +774,26 @@ class ZLinkChannelSocketRegistry {
716
774
  throw new configuration_1.ZLinkConfigurationException(`Fanout subscriber '${channelName}' is not registered.`);
717
775
  }
718
776
  const subscriber = this.adapter.createSubscriberSocket(this.context);
719
- subscriber.setChannelName(channelName);
720
- setFanoutSubscriptions(subscriber, channel.subscriptions);
721
- const monitor = this.monitoringAdapter.openSocketMonitor(subscriber);
722
777
  const connection = {
723
778
  channelName,
724
779
  endpoint,
725
780
  subscriber,
726
- monitor,
727
781
  callbacks,
728
782
  physicalConnectionId: Symbol(connectionId),
729
783
  transportReady: false,
730
784
  ready: false
731
785
  };
732
- this.fanoutConnections.set(connectionId, connection);
733
- this.ownedMonitors.add(monitor);
734
- this.ensureClientServerLivenessTimer();
786
+ this.ownedResources.add(subscriber);
787
+ const created = [subscriber];
735
788
  try {
789
+ this.fanoutConnections.set(connectionId, connection);
790
+ subscriber.setChannelName(channelName);
791
+ setFanoutSubscriptions(subscriber, channel.subscriptions);
792
+ const monitor = this.monitoringAdapter.openSocketMonitor(subscriber);
793
+ connection.monitor = monitor;
794
+ created.push(monitor);
795
+ this.ownedResources.add(monitor);
796
+ this.ensureClientServerLivenessTimer();
736
797
  monitor.onEvent((event) => {
737
798
  if (this.fanoutConnections.get(connectionId) !== connection)
738
799
  return;
@@ -755,30 +816,37 @@ class ZLinkChannelSocketRegistry {
755
816
  }
756
817
  });
757
818
  subscriber.connect(endpoint);
819
+ return subscriber;
758
820
  }
759
821
  catch (error) {
760
822
  this.fanoutConnections.delete(connectionId);
761
- this.ownedMonitors.delete(monitor);
762
- void Promise.allSettled([monitor.dispose(), subscriber.dispose()]);
823
+ void Promise.allSettled(created.map(async (resource) => {
824
+ await resource.dispose();
825
+ this.ownedResources.delete(resource);
826
+ })).then((results) => {
827
+ for (const result of results)
828
+ if (result.status === 'rejected')
829
+ this.oneWayFailureSink?.(result.reason);
830
+ });
763
831
  throw error;
764
832
  }
765
- return subscriber;
766
833
  }
767
834
  async closeFanoutSubscriberConnection(connectionId) {
768
835
  const connection = this.fanoutConnections.get(connectionId);
769
836
  if (connection === undefined)
770
837
  return;
771
- this.fanoutConnections.delete(connectionId);
772
838
  try {
773
839
  connection.subscriber.disconnect(connection.endpoint);
774
840
  }
775
841
  catch {
776
- // Disposal remains the terminal cleanup path.
842
+ // The socket close below releases an endpoint that is already disconnected.
777
843
  }
778
- this.ownedMonitors.delete(connection.monitor);
779
844
  const results = await Promise.allSettled([
780
- connection.monitor.dispose(),
781
- connection.subscriber.dispose()
845
+ connection.monitor?.dispose(),
846
+ (async () => {
847
+ await connection.subscriber.dispose();
848
+ this.ownedResources.delete(connection.subscriber);
849
+ })()
782
850
  ]);
783
851
  const errors = results
784
852
  .filter((result) => result.status === 'rejected')
@@ -788,6 +856,9 @@ class ZLinkChannelSocketRegistry {
788
856
  if (errors.length > 1) {
789
857
  throw new AggregateError(errors, `Fanout connection '${connectionId}' cleanup failed.`);
790
858
  }
859
+ this.fanoutConnections.delete(connectionId);
860
+ if (connection.monitor !== undefined)
861
+ this.ownedResources.delete(connection.monitor);
791
862
  }
792
863
  handleFanoutInbound(connectionId, topicMessage, source, nowMs = performance.now()) {
793
864
  return this.handleFanoutInboundResult(connectionId, topicMessage, source, nowMs).consumed;
@@ -978,7 +1049,7 @@ class ZLinkChannelSocketRegistry {
978
1049
  }
979
1050
  drainClientServerControl(connectionId, connection) {
980
1051
  for (;;) {
981
- if (!connection.readablePoller.wait(0))
1052
+ if (connection.readablePoller === undefined || !connection.readablePoller.wait(0))
982
1053
  return;
983
1054
  const received = connection.dealer.recv(1);
984
1055
  if (received === undefined) {
@@ -1082,12 +1153,13 @@ class ZLinkChannelSocketRegistry {
1082
1153
  ensureClientServerLivenessTimer() {
1083
1154
  if (this.clientServerLivenessTimer !== undefined)
1084
1155
  return;
1085
- this.clientServerLivenessTimer = setInterval(() => this.tickClientServerLiveness(), 100);
1156
+ this.clientServerLivenessTimer = setInterval(() => this.tickClientServerLiveness(), CLIENT_SERVER_LIVENESS_TICK_MS);
1086
1157
  this.clientServerLivenessTimer.unref();
1087
1158
  }
1088
1159
  drainSocketMonitors() {
1089
- for (const monitor of this.ownedMonitors)
1090
- monitor.drain();
1160
+ for (const monitor of this.ownedResources)
1161
+ if ('drain' in monitor)
1162
+ monitor.drain();
1091
1163
  }
1092
1164
  removeReadyConnection(connectionId) {
1093
1165
  const identity = this.clientServerReadyIdentities.get(connectionId);
@@ -1104,6 +1176,7 @@ class ZLinkChannelSocketRegistry {
1104
1176
  connection.nextProbeAt = undefined;
1105
1177
  connection.outstandingProbeId = undefined;
1106
1178
  }
1179
+ this.notifyClientServerTopology(identity.channelName);
1107
1180
  }
1108
1181
  requestClientServerLiveness(connectionId, connection, probeId) {
1109
1182
  const message = runtime_message_1.ZLinkBufferMessage.from((0, client_server_service_wire_1.encodeClientServerLivenessProbe)(probeId));
@@ -1197,7 +1270,7 @@ class ZLinkChannelSocketRegistry {
1197
1270
  }
1198
1271
  allocateClientServerProbeId() {
1199
1272
  const result = this.nextClientServerProbeId;
1200
- this.nextClientServerProbeId = result === 0xffffffffffffffffn ? 1n : result + 1n;
1273
+ this.nextClientServerProbeId = result === stream_wire_1.UINT64_MAX ? 1n : result + 1n;
1201
1274
  return result;
1202
1275
  }
1203
1276
  publisher(channelName) {
@@ -1213,10 +1286,10 @@ class ZLinkChannelSocketRegistry {
1213
1286
  throw new configuration_1.ZLinkConfigurationException(`Channel publisher '${channelName}' does not define a bind endpoint.`);
1214
1287
  }
1215
1288
  const publisher = this.adapter.createPublisherSocket(this.context);
1289
+ this.publishers.set(channelName, publisher);
1216
1290
  publisher.setChannelName(channelName);
1217
1291
  applyFanoutPublisherSocketOptions(publisher, channel);
1218
1292
  publisher.bind(channel.publisher.bind);
1219
- this.publishers.set(channelName, publisher);
1220
1293
  const endpoint = (0, configuration_1.buildAdvertisedEndpoint)(publisher.lastEndpoint ?? channel.publisher.bind, channel.publisher.advertiseHost);
1221
1294
  if (endpoint !== undefined && endpoint.length > 0) {
1222
1295
  this.recordListener('fanout', channelName, endpoint);
@@ -1235,6 +1308,7 @@ class ZLinkChannelSocketRegistry {
1235
1308
  throw new configuration_1.ZLinkConfigurationException(`Route channel '${routerChannelId}' is not registered.`);
1236
1309
  }
1237
1310
  const router = this.adapter.createRouterSocket(this.context);
1311
+ this.routeRouters.set(routerChannelId, router);
1238
1312
  this.registerReceiveFlowSocket(router);
1239
1313
  router.setChannelName(routerChannelId);
1240
1314
  if ((routeChannel.manualConnections?.length ?? 0) > 0 &&
@@ -1242,7 +1316,7 @@ class ZLinkChannelSocketRegistry {
1242
1316
  router.setProbe(true);
1243
1317
  }
1244
1318
  router.setRoutingId(routeChannel.routingId ?? `${routeChannel.routingIdPrefix ?? routerChannelId}-${(0, node_crypto_1.randomUUID)()}`);
1245
- const publicWeight = routeChannel.weight ?? 100;
1319
+ const publicWeight = routeChannel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT;
1246
1320
  this.routeMeshPublicWeights.set(routerChannelId, publicWeight);
1247
1321
  router.peerWeight = rawAvailabilityWeight(publicWeight);
1248
1322
  applySocketConfig(router, routeChannel);
@@ -1256,7 +1330,6 @@ class ZLinkChannelSocketRegistry {
1256
1330
  if (routeChannel.bind !== undefined && routeChannel.bind.trim().length > 0) {
1257
1331
  router.bind(routeChannel.bind);
1258
1332
  }
1259
- this.routeRouters.set(routerChannelId, router);
1260
1333
  return router;
1261
1334
  }
1262
1335
  routeMeshSocket(routerChannelId) {
@@ -1264,7 +1337,7 @@ class ZLinkChannelSocketRegistry {
1264
1337
  }
1265
1338
  routeMeshWeight(routerChannelId) {
1266
1339
  this.routeRouter(routerChannelId);
1267
- return this.routeMeshPublicWeights.get(routerChannelId) ?? 100;
1340
+ return this.routeMeshPublicWeights.get(routerChannelId) ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT;
1268
1341
  }
1269
1342
  setRouteMeshWeight(routerChannelId, weight) {
1270
1343
  requirePublicWeight(weight);
@@ -1286,7 +1359,7 @@ class ZLinkChannelSocketRegistry {
1286
1359
  return;
1287
1360
  }
1288
1361
  const monitor = this.monitoringAdapter.openSocketMonitor(socket);
1289
- this.ownedMonitors.add(monitor);
1362
+ this.ownedResources.add(monitor);
1290
1363
  monitor.onEvent((event) => {
1291
1364
  if (event.nativeEvent === internal_event_contracts_1.ZLinkSocketNativeEventType.Disconnected &&
1292
1365
  event.remoteAddr.length > 0) {
@@ -1299,7 +1372,7 @@ class ZLinkChannelSocketRegistry {
1299
1372
  return;
1300
1373
  }
1301
1374
  const monitor = this.monitoringAdapter.openSocketMonitor(router);
1302
- this.ownedMonitors.add(monitor);
1375
+ this.ownedResources.add(monitor);
1303
1376
  monitor.onEvent((event) => {
1304
1377
  const routingId = event.routingId === undefined ? undefined : String(event.routingId);
1305
1378
  if (event.nativeEvent === internal_event_contracts_1.ZLinkSocketNativeEventType.ConnectionReady &&
@@ -1328,7 +1401,7 @@ async function requestClientServerAdmission(dealer, channelName, securityIdentit
1328
1401
  const message = runtime_message_1.ZLinkBufferMessage.from((0, client_server_service_wire_1.encodeClientServerHello)({
1329
1402
  channelName,
1330
1403
  securityIdentity,
1331
- normalizedEffectiveMaxMessageBytes: normalizedMessageLimit(dealer.maxMessageSize)
1404
+ normalizedEffectiveMaxMessageBytes: (0, client_server_service_wire_1.normalizeClientServerMessageLimit)(dealer.maxMessageSize)
1332
1405
  }));
1333
1406
  try {
1334
1407
  const parts = await dealer.request(message, timeoutMs);
@@ -1391,13 +1464,14 @@ function setFanoutSubscriptions(subscriber, applicationTopics) {
1391
1464
  }
1392
1465
  function deriveRoutingId(baseRoutingId, suffix) {
1393
1466
  const derived = `${baseRoutingId}\0${suffix}`;
1394
- if (Buffer.byteLength(derived, 'utf8') > 255) {
1395
- throw new configuration_1.ZLinkConfigurationException(`Derived routing id with suffix '${suffix}' exceeds the 255 byte limit.`);
1467
+ if (Buffer.byteLength(derived, 'utf8') > CoreTypes_1.ZLINK_MAX_ROUTING_ID_BYTES) {
1468
+ throw new configuration_1.ZLinkConfigurationException(`Derived routing id with suffix '${suffix}' exceeds the ${CoreTypes_1.ZLINK_MAX_ROUTING_ID_BYTES} byte limit.`);
1396
1469
  }
1397
1470
  return derived;
1398
1471
  }
1399
1472
  function applyFanoutPublisherSocketOptions(publisher, channel) {
1400
1473
  publisher.noDrop = channel.noDrop ?? false;
1474
+ publisher.sendTimeoutMs = configuredSendTimeoutMs(channel.publisher?.sendTimeoutMs);
1401
1475
  }
1402
1476
  function fanoutDiscoveryConnectionId(connectionId) {
1403
1477
  return `fanout:${connectionId.replaceAll('\0', '/')}`;
@@ -1416,12 +1490,9 @@ function advertisedEndpoint(boundEndpoint, advertiseHost) {
1416
1490
  }
1417
1491
  return result;
1418
1492
  }
1419
- function normalizedMessageLimit(value) {
1420
- return Number.isSafeInteger(value) && value > 0 ? Math.min(value, 0xffff_ffff) : 0x7fff_ffff;
1421
- }
1422
1493
  function requirePublicWeight(weight) {
1423
- if (!Number.isInteger(weight) || weight < 0 || weight > 10_000) {
1424
- throw new configuration_1.ZLinkConfigurationException('Weight must be an integer in 0..10000.');
1494
+ if (!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(weight)) {
1495
+ throw new configuration_1.ZLinkConfigurationException(`Weight must be an integer in 0..${RegistrationBuilderPolicy_1.ZLINK_MAX_PUBLIC_WEIGHT}.`);
1425
1496
  }
1426
1497
  }
1427
1498
  function rawAvailabilityWeight(weight) {
@@ -1446,3 +1517,6 @@ function applySocketConfig(socket, config) {
1446
1517
  socket.maxMessageSize = config.maxMessageSize;
1447
1518
  }
1448
1519
  }
1520
+ function configuredSendTimeoutMs(value) {
1521
+ return value ?? DEFAULT_SEND_TIMEOUT_MS;
1522
+ }