@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
@@ -21,21 +21,151 @@ import {
21
21
  } from './runtime-observation-queue';
22
22
  import {
23
23
  runtimeStateIsReady,
24
- topologyRuntimeIsReady
24
+ topologyRuntimeIsReady,
25
+ topologyObservationIsTerminal
25
26
  } from '../foundation/runtime-state-projections';
27
+ import type {
28
+ ClientServerDescriptor,
29
+ FanoutPublisherDescriptor
30
+ } from '../foundation/service-discovery-registry';
26
31
 
27
32
  export { RuntimeEventQueue } from './runtime-observation-queue';
28
33
 
29
34
  type RuntimeAccessor = () => ZLinkChannelRuntimeManager | undefined;
30
35
  type HostStateAccessor = () => ZLinkFrameworkRuntimeState;
31
- interface HostObserver {
32
- readonly changed: () => void;
33
- readonly stop: () => void;
36
+ type TopologyStatus = ZLinkClientServerStatus | ZLinkFanoutStatus;
37
+ interface TopologySource<T extends TopologyStatus> {
38
+ lastSnapshot?: T;
39
+ readonly observers: Set<RuntimeEventQueue<T>>;
40
+ stop?: () => void;
41
+ }
42
+
43
+ class TopologyStatusSources<T extends TopologyStatus> {
44
+ private readonly sources = new Map<string, TopologySource<T>>();
45
+
46
+ constructor(
47
+ private readonly read: (channelName: string, sequence: bigint) => T,
48
+ private readonly subscribe: (channelName: string, changed: () => void) => () => void,
49
+ private readonly equivalent: (left: T, right: T) => boolean
50
+ ) {}
51
+
52
+ snapshot(channelName: string): T {
53
+ let source = this.sources.get(channelName);
54
+ const current = source?.lastSnapshot;
55
+ if (current !== undefined && topologyObservationIsTerminal(current.state)) return current;
56
+ const snapshot = this.read(channelName, current?.sequence ?? 0n);
57
+ if (source === undefined) {
58
+ source = { observers: new Set() };
59
+ this.sources.set(channelName, source);
60
+ }
61
+ const published = this.publish(channelName, source, snapshot);
62
+ if (source.stop === undefined && !topologyObservationIsTerminal(published.state)) {
63
+ source.stop = this.subscribe(channelName, () => this.snapshot(channelName));
64
+ }
65
+ return published;
66
+ }
67
+
68
+ observe(
69
+ channelName: string,
70
+ capacity: number,
71
+ signal?: AbortSignal
72
+ ): AsyncIterable<ZLinkObservedStatus<T>> {
73
+ const queue = new RuntimeEventQueue<T>(capacity, signal);
74
+ const snapshot = this.snapshot(channelName);
75
+ const current = this.sources.get(channelName)!;
76
+ current.observers.add(queue);
77
+ queue.onClose(() => {
78
+ current.observers.delete(queue);
79
+ });
80
+ this.deliver(queue, snapshot, channelName);
81
+ return queue;
82
+ }
83
+
84
+ hostStateChanged(): void {
85
+ for (const channelName of this.sources.keys()) this.snapshot(channelName);
86
+ }
87
+
88
+ stopObservers(): void {
89
+ for (const [channelName, source] of this.sources) {
90
+ if (
91
+ source.lastSnapshot === undefined ||
92
+ topologyObservationIsTerminal(source.lastSnapshot.state)
93
+ )
94
+ continue;
95
+ this.publish(channelName, source, {
96
+ ...source.lastSnapshot,
97
+ state: ZLinkTopologyState.Stopped,
98
+ isReady: false
99
+ });
100
+ }
101
+ }
102
+
103
+ private publish(channelName: string, source: TopologySource<T>, snapshot: T): T {
104
+ const previous = source.lastSnapshot;
105
+ if (previous !== undefined && this.equivalent(previous, snapshot)) return previous;
106
+ source.lastSnapshot = {
107
+ ...snapshot,
108
+ sequence: (previous?.sequence ?? 0n) + 1n,
109
+ observedAt: new Date()
110
+ };
111
+ for (const queue of source.observers) this.deliver(queue, source.lastSnapshot, channelName);
112
+ if (topologyObservationIsTerminal(source.lastSnapshot.state)) {
113
+ source.stop?.();
114
+ source.stop = undefined;
115
+ }
116
+ return source.lastSnapshot;
117
+ }
118
+
119
+ private deliver(queue: RuntimeEventQueue<T>, snapshot: T, channelName: string): void {
120
+ if (topologyObservationIsTerminal(snapshot.state)) queue.seal(snapshot, channelName);
121
+ else queue.push(snapshot, channelName);
122
+ }
123
+ }
124
+
125
+ function sameTopologyState(left: TopologyStatus, right: TopologyStatus): boolean {
126
+ return left.state === right.state && left.isReady === right.isReady;
127
+ }
128
+
129
+ function samePeer(left: ZLinkPeerStatus, right: ZLinkPeerStatus): boolean {
130
+ return (
131
+ left.nodeRid === right.nodeRid &&
132
+ left.state === right.state &&
133
+ left.unavailableReason === right.unavailableReason
134
+ );
135
+ }
136
+
137
+ function sameClientServerStatus(
138
+ left: ZLinkClientServerStatus,
139
+ right: ZLinkClientServerStatus
140
+ ): boolean {
141
+ return (
142
+ sameTopologyState(left, right) &&
143
+ left.localRole === right.localRole &&
144
+ left.readyTargetCount === right.readyTargetCount &&
145
+ left.targets.length === right.targets.length &&
146
+ left.targets.every(
147
+ (target, index) =>
148
+ samePeer(target, right.targets[index]!) && target.weight === right.targets[index]!.weight
149
+ )
150
+ );
151
+ }
152
+
153
+ function sameFanoutStatus(left: ZLinkFanoutStatus, right: ZLinkFanoutStatus): boolean {
154
+ return (
155
+ sameTopologyState(left, right) &&
156
+ left.readyPublisherCount === right.readyPublisherCount &&
157
+ left.publishers.length === right.publishers.length &&
158
+ left.publishers.every((publisher, index) => samePeer(publisher, right.publishers[index]!))
159
+ );
34
160
  }
35
161
 
36
162
  export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRuntime {
37
- private sequence = 0n;
38
- private readonly hostObservers = new Set<HostObserver>();
163
+ private readonly sources = new TopologyStatusSources<ZLinkClientServerStatus>(
164
+ (channelName, sequence) => this.snapshotCore(channelName, sequence),
165
+ (channelName, changed) =>
166
+ this.requireRuntime().observeClientServerTopology(channelName, changed),
167
+ sameClientServerStatus
168
+ );
39
169
 
40
170
  constructor(
41
171
  private readonly runtime: RuntimeAccessor,
@@ -43,34 +173,19 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
43
173
  ) {}
44
174
 
45
175
  snapshot(channelName: string): ZLinkClientServerStatus {
46
- return this.snapshotCore(channelName);
176
+ return this.sources.snapshot(channelName);
47
177
  }
48
178
 
49
- private snapshotCore(channelName: string): ZLinkClientServerStatus {
179
+ private snapshotCore(channelName: string, sequence: bigint): ZLinkClientServerStatus {
50
180
  const topology = this.requireRuntime().clientServerTopology(channelName);
51
181
  if (topology.localRole === undefined) {
52
182
  throw new ZLinkConfigurationException(
53
183
  `ClientServer channel '${channelName}' is not registered.`
54
184
  );
55
185
  }
56
- const targets = topology.descriptors.map((descriptor): ZLinkClientServerTargetStatus => ({
57
- nodeRid: descriptor.serverRoutingId,
58
- weight: descriptor.weight,
59
- state:
60
- descriptor.state === 'serving'
61
- ? ZLinkPeerState.Ready
62
- : descriptor.state === 'retiring'
63
- ? ZLinkPeerState.Draining
64
- : descriptor.state === 'preparing'
65
- ? ZLinkPeerState.Connecting
66
- : ZLinkPeerState.NotConnected,
67
- unavailableReason:
68
- descriptor.state === 'serving' && descriptor.weight > 0
69
- ? undefined
70
- : descriptor.state === 'retiring'
71
- ? ZLinkTopologyReason.Draining
72
- : ZLinkTopologyReason.NoReadyTarget
73
- }));
186
+ const targets = topology.descriptors.map((descriptor) =>
187
+ peerStatusForAvailability(descriptor, ZLinkTopologyReason.NoReadyTarget)
188
+ );
74
189
  const readyTargetCount = targets.filter(
75
190
  (target) => target.state === ZLinkPeerState.Ready && target.weight > 0
76
191
  ).length;
@@ -83,7 +198,7 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
83
198
  isReady,
84
199
  readyTargetCount,
85
200
  targets,
86
- sequence: this.sequence,
201
+ sequence,
87
202
  observedAt: new Date()
88
203
  };
89
204
  }
@@ -93,72 +208,19 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
93
208
  capacity = ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY,
94
209
  signal?: AbortSignal
95
210
  ): AsyncIterable<ZLinkObservedStatus<ZLinkClientServerStatus>> {
96
- const runtime = this.requireRuntime();
97
- const queue = new RuntimeEventQueue<ZLinkClientServerStatus>(capacity, signal);
98
- let lastSnapshot = this.snapshotCore(channelName);
99
- const stop = runtime.observeClientServerTopology(channelName, () => {
100
- this.sequence += 1n;
101
- lastSnapshot = this.snapshotCore(channelName);
102
- queue.push(lastSnapshot, channelName);
103
- });
104
- const hostObserver: HostObserver = {
105
- changed: () => {
106
- this.sequence += 1n;
107
- lastSnapshot = this.snapshotCore(channelName);
108
- queue.push(lastSnapshot, channelName);
109
- },
110
- stop: () => {
111
- this.sequence += 1n;
112
- let current = lastSnapshot;
113
- try {
114
- current = this.snapshotCore(channelName);
115
- lastSnapshot = current;
116
- } catch {
117
- // The last complete projection remains valid after native teardown.
118
- }
119
- queue.seal(
120
- {
121
- ...current,
122
- state: ZLinkTopologyState.Stopped,
123
- isReady: false,
124
- sequence: this.sequence,
125
- observedAt: new Date()
126
- },
127
- channelName
128
- );
129
- }
130
- };
131
- this.hostObservers.add(hostObserver);
132
- queue.onClose(() => {
133
- stop();
134
- this.hostObservers.delete(hostObserver);
135
- });
136
- return queue;
211
+ return this.sources.observe(channelName, capacity, signal);
137
212
  }
138
213
 
139
214
  hostStateChanged(): void {
140
- for (const observer of this.hostObservers) {
141
- try {
142
- observer.changed();
143
- } catch {
144
- // Monitoring projection failures do not change host lifecycle results.
145
- }
146
- }
215
+ this.sources.hostStateChanged();
147
216
  }
148
217
 
149
218
  stopObservers(): void {
150
- for (const observer of [...this.hostObservers]) {
151
- try {
152
- observer.stop();
153
- } catch {
154
- // The observer is still removed when its terminal snapshot fails.
155
- }
156
- }
157
- this.hostObservers.clear();
219
+ this.sources.stopObservers();
158
220
  }
159
221
 
160
222
  isReady(channelName: string): boolean {
161
- return this.snapshotCore(channelName).isReady;
223
+ return this.snapshot(channelName).isReady;
162
224
  }
163
225
 
164
226
  private requireRuntime(): ZLinkChannelRuntimeManager {
@@ -170,8 +232,11 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
170
232
  }
171
233
 
172
234
  export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
173
- private sequence = 0n;
174
- private readonly hostObservers = new Set<HostObserver>();
235
+ private readonly sources = new TopologyStatusSources<ZLinkFanoutStatus>(
236
+ (channelName, sequence) => this.snapshotCore(channelName, sequence),
237
+ (channelName, changed) => this.requireRuntime().observeFanoutTopology(channelName, changed),
238
+ sameFanoutStatus
239
+ );
175
240
 
176
241
  constructor(
177
242
  private readonly runtime: RuntimeAccessor,
@@ -179,29 +244,15 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
179
244
  ) {}
180
245
 
181
246
  snapshot(channelName: string): ZLinkFanoutStatus {
182
- return this.snapshotCore(channelName);
247
+ return this.sources.snapshot(channelName);
183
248
  }
184
249
 
185
- private snapshotCore(channelName: string): ZLinkFanoutStatus {
250
+ private snapshotCore(channelName: string, sequence: bigint): ZLinkFanoutStatus {
186
251
  const publishers = this.requireRuntime()
187
252
  .fanoutTopology(channelName)
188
- .descriptors.map((descriptor): ZLinkPeerStatus => ({
189
- nodeRid: descriptor.publisherRoutingId,
190
- state:
191
- descriptor.state === 'serving'
192
- ? ZLinkPeerState.Ready
193
- : descriptor.state === 'retiring'
194
- ? ZLinkPeerState.Draining
195
- : descriptor.state === 'preparing'
196
- ? ZLinkPeerState.Connecting
197
- : ZLinkPeerState.NotConnected,
198
- unavailableReason:
199
- descriptor.state === 'serving'
200
- ? undefined
201
- : descriptor.state === 'retiring'
202
- ? ZLinkTopologyReason.Draining
203
- : ZLinkTopologyReason.NoReadyTarget
204
- }));
253
+ .descriptors.map((descriptor) =>
254
+ peerStatusForAvailability(descriptor, ZLinkTopologyReason.NoReadyPeer)
255
+ );
205
256
  const readyPublisherCount = publishers.filter(
206
257
  (publisher) => publisher.state === ZLinkPeerState.Ready
207
258
  ).length;
@@ -217,7 +268,7 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
217
268
  isReady: topologyRuntimeIsReady(hostState, readyPublisherCount),
218
269
  readyPublisherCount,
219
270
  publishers,
220
- sequence: this.sequence,
271
+ sequence,
221
272
  observedAt: new Date()
222
273
  };
223
274
  }
@@ -227,68 +278,15 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
227
278
  capacity = ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY,
228
279
  signal?: AbortSignal
229
280
  ): AsyncIterable<ZLinkObservedStatus<ZLinkFanoutStatus>> {
230
- const runtime = this.requireRuntime();
231
- const queue = new RuntimeEventQueue<ZLinkFanoutStatus>(capacity, signal);
232
- let lastSnapshot = this.snapshotCore(channelName);
233
- const stop = runtime.observeFanoutTopology(channelName, () => {
234
- this.sequence += 1n;
235
- lastSnapshot = this.snapshotCore(channelName);
236
- queue.push(lastSnapshot, channelName);
237
- });
238
- const hostObserver: HostObserver = {
239
- changed: () => {
240
- this.sequence += 1n;
241
- lastSnapshot = this.snapshotCore(channelName);
242
- queue.push(lastSnapshot, channelName);
243
- },
244
- stop: () => {
245
- this.sequence += 1n;
246
- let current = lastSnapshot;
247
- try {
248
- current = this.snapshotCore(channelName);
249
- lastSnapshot = current;
250
- } catch {
251
- // The last complete projection remains valid after native teardown.
252
- }
253
- queue.seal(
254
- {
255
- ...current,
256
- state: ZLinkTopologyState.Stopped,
257
- isReady: false,
258
- sequence: this.sequence,
259
- observedAt: new Date()
260
- },
261
- channelName
262
- );
263
- }
264
- };
265
- this.hostObservers.add(hostObserver);
266
- queue.onClose(() => {
267
- stop();
268
- this.hostObservers.delete(hostObserver);
269
- });
270
- return queue;
281
+ return this.sources.observe(channelName, capacity, signal);
271
282
  }
272
283
 
273
284
  hostStateChanged(): void {
274
- for (const observer of this.hostObservers) {
275
- try {
276
- observer.changed();
277
- } catch {
278
- // Monitoring projection failures do not change host lifecycle results.
279
- }
280
- }
285
+ this.sources.hostStateChanged();
281
286
  }
282
287
 
283
288
  stopObservers(): void {
284
- for (const observer of [...this.hostObservers]) {
285
- try {
286
- observer.stop();
287
- } catch {
288
- // The observer is still removed when its terminal snapshot fails.
289
- }
290
- }
291
- this.hostObservers.clear();
289
+ this.sources.stopObservers();
292
290
  }
293
291
 
294
292
  private requireRuntime(): ZLinkChannelRuntimeManager {
@@ -299,6 +297,40 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
299
297
  }
300
298
  }
301
299
 
300
+ function peerStatusForAvailability(
301
+ descriptor: Pick<ClientServerDescriptor, 'serverRoutingId' | 'weight' | 'state'>,
302
+ unavailableReason: ZLinkTopologyReason.NoReadyTarget
303
+ ): ZLinkClientServerTargetStatus;
304
+ function peerStatusForAvailability(
305
+ descriptor: Pick<FanoutPublisherDescriptor, 'publisherRoutingId' | 'state'>,
306
+ unavailableReason: ZLinkTopologyReason.NoReadyPeer
307
+ ): ZLinkPeerStatus;
308
+ function peerStatusForAvailability(
309
+ descriptor:
310
+ | Pick<ClientServerDescriptor, 'serverRoutingId' | 'weight' | 'state'>
311
+ | Pick<FanoutPublisherDescriptor, 'publisherRoutingId' | 'state'>,
312
+ noReadyReason: ZLinkTopologyReason.NoReadyTarget | ZLinkTopologyReason.NoReadyPeer
313
+ ): ZLinkClientServerTargetStatus | ZLinkPeerStatus {
314
+ let state = ZLinkPeerState.NotConnected;
315
+ let unavailableReason: ZLinkTopologyReason | undefined = noReadyReason;
316
+ switch (descriptor.state) {
317
+ case 'retiring':
318
+ state = ZLinkPeerState.Draining;
319
+ unavailableReason = ZLinkTopologyReason.Draining;
320
+ break;
321
+ case 'serving':
322
+ state = ZLinkPeerState.Ready;
323
+ unavailableReason = undefined;
324
+ break;
325
+ case 'preparing':
326
+ state = ZLinkPeerState.Connecting;
327
+ break;
328
+ }
329
+ return 'serverRoutingId' in descriptor
330
+ ? { nodeRid: descriptor.serverRoutingId, weight: descriptor.weight, state, unavailableReason }
331
+ : { nodeRid: descriptor.publisherRoutingId, state, unavailableReason };
332
+ }
333
+
302
334
  function topologyStateForHost(state: ZLinkFrameworkRuntimeState): ZLinkTopologyState {
303
335
  switch (state) {
304
336
  case ZLinkFrameworkRuntimeState.Preparing:
@@ -0,0 +1,19 @@
1
+ export class RuntimeDisposal {
2
+ private task?: Promise<void> | null;
3
+
4
+ get started(): boolean {
5
+ return this.task !== undefined;
6
+ }
7
+
8
+ run(close: () => Promise<void>): Promise<void> {
9
+ if (this.task != null) return this.task;
10
+ const task = Promise.resolve()
11
+ .then(close)
12
+ .catch((error: unknown) => {
13
+ this.task = null;
14
+ throw error;
15
+ });
16
+ this.task = task;
17
+ return task;
18
+ }
19
+ }