@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
@@ -7,39 +7,121 @@ const runtime_observation_queue_1 = require("./runtime-observation-queue");
7
7
  const runtime_state_projections_1 = require("../foundation/runtime-state-projections");
8
8
  var runtime_observation_queue_2 = require("./runtime-observation-queue");
9
9
  Object.defineProperty(exports, "RuntimeEventQueue", { enumerable: true, get: function () { return runtime_observation_queue_2.RuntimeEventQueue; } });
10
+ class TopologyStatusSources {
11
+ read;
12
+ subscribe;
13
+ equivalent;
14
+ sources = new Map();
15
+ constructor(read, subscribe, equivalent) {
16
+ this.read = read;
17
+ this.subscribe = subscribe;
18
+ this.equivalent = equivalent;
19
+ }
20
+ snapshot(channelName) {
21
+ let source = this.sources.get(channelName);
22
+ const current = source?.lastSnapshot;
23
+ if (current !== undefined && (0, runtime_state_projections_1.topologyObservationIsTerminal)(current.state))
24
+ return current;
25
+ const snapshot = this.read(channelName, current?.sequence ?? 0n);
26
+ if (source === undefined) {
27
+ source = { observers: new Set() };
28
+ this.sources.set(channelName, source);
29
+ }
30
+ const published = this.publish(channelName, source, snapshot);
31
+ if (source.stop === undefined && !(0, runtime_state_projections_1.topologyObservationIsTerminal)(published.state)) {
32
+ source.stop = this.subscribe(channelName, () => this.snapshot(channelName));
33
+ }
34
+ return published;
35
+ }
36
+ observe(channelName, capacity, signal) {
37
+ const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
38
+ const snapshot = this.snapshot(channelName);
39
+ const current = this.sources.get(channelName);
40
+ current.observers.add(queue);
41
+ queue.onClose(() => {
42
+ current.observers.delete(queue);
43
+ });
44
+ this.deliver(queue, snapshot, channelName);
45
+ return queue;
46
+ }
47
+ hostStateChanged() {
48
+ for (const channelName of this.sources.keys())
49
+ this.snapshot(channelName);
50
+ }
51
+ stopObservers() {
52
+ for (const [channelName, source] of this.sources) {
53
+ if (source.lastSnapshot === undefined ||
54
+ (0, runtime_state_projections_1.topologyObservationIsTerminal)(source.lastSnapshot.state))
55
+ continue;
56
+ this.publish(channelName, source, {
57
+ ...source.lastSnapshot,
58
+ state: contracts_1.ZLinkTopologyState.Stopped,
59
+ isReady: false
60
+ });
61
+ }
62
+ }
63
+ publish(channelName, source, snapshot) {
64
+ const previous = source.lastSnapshot;
65
+ if (previous !== undefined && this.equivalent(previous, snapshot))
66
+ return previous;
67
+ source.lastSnapshot = {
68
+ ...snapshot,
69
+ sequence: (previous?.sequence ?? 0n) + 1n,
70
+ observedAt: new Date()
71
+ };
72
+ for (const queue of source.observers)
73
+ this.deliver(queue, source.lastSnapshot, channelName);
74
+ if ((0, runtime_state_projections_1.topologyObservationIsTerminal)(source.lastSnapshot.state)) {
75
+ source.stop?.();
76
+ source.stop = undefined;
77
+ }
78
+ return source.lastSnapshot;
79
+ }
80
+ deliver(queue, snapshot, channelName) {
81
+ if ((0, runtime_state_projections_1.topologyObservationIsTerminal)(snapshot.state))
82
+ queue.seal(snapshot, channelName);
83
+ else
84
+ queue.push(snapshot, channelName);
85
+ }
86
+ }
87
+ function sameTopologyState(left, right) {
88
+ return left.state === right.state && left.isReady === right.isReady;
89
+ }
90
+ function samePeer(left, right) {
91
+ return (left.nodeRid === right.nodeRid &&
92
+ left.state === right.state &&
93
+ left.unavailableReason === right.unavailableReason);
94
+ }
95
+ function sameClientServerStatus(left, right) {
96
+ return (sameTopologyState(left, right) &&
97
+ left.localRole === right.localRole &&
98
+ left.readyTargetCount === right.readyTargetCount &&
99
+ left.targets.length === right.targets.length &&
100
+ left.targets.every((target, index) => samePeer(target, right.targets[index]) && target.weight === right.targets[index].weight));
101
+ }
102
+ function sameFanoutStatus(left, right) {
103
+ return (sameTopologyState(left, right) &&
104
+ left.readyPublisherCount === right.readyPublisherCount &&
105
+ left.publishers.length === right.publishers.length &&
106
+ left.publishers.every((publisher, index) => samePeer(publisher, right.publishers[index])));
107
+ }
10
108
  class ZLinkClientServerRuntimeProjection {
11
109
  runtime;
12
110
  hostState;
13
- sequence = 0n;
14
- hostObservers = new Set();
111
+ sources = new TopologyStatusSources((channelName, sequence) => this.snapshotCore(channelName, sequence), (channelName, changed) => this.requireRuntime().observeClientServerTopology(channelName, changed), sameClientServerStatus);
15
112
  constructor(runtime, hostState = () => contracts_1.ZLinkFrameworkRuntimeState.Serving) {
16
113
  this.runtime = runtime;
17
114
  this.hostState = hostState;
18
115
  }
19
116
  snapshot(channelName) {
20
- return this.snapshotCore(channelName);
117
+ return this.sources.snapshot(channelName);
21
118
  }
22
- snapshotCore(channelName) {
119
+ snapshotCore(channelName, sequence) {
23
120
  const topology = this.requireRuntime().clientServerTopology(channelName);
24
121
  if (topology.localRole === undefined) {
25
122
  throw new configuration_1.ZLinkConfigurationException(`ClientServer channel '${channelName}' is not registered.`);
26
123
  }
27
- const targets = topology.descriptors.map((descriptor) => ({
28
- nodeRid: descriptor.serverRoutingId,
29
- weight: descriptor.weight,
30
- state: descriptor.state === 'serving'
31
- ? contracts_1.ZLinkPeerState.Ready
32
- : descriptor.state === 'retiring'
33
- ? contracts_1.ZLinkPeerState.Draining
34
- : descriptor.state === 'preparing'
35
- ? contracts_1.ZLinkPeerState.Connecting
36
- : contracts_1.ZLinkPeerState.NotConnected,
37
- unavailableReason: descriptor.state === 'serving' && descriptor.weight > 0
38
- ? undefined
39
- : descriptor.state === 'retiring'
40
- ? contracts_1.ZLinkTopologyReason.Draining
41
- : contracts_1.ZLinkTopologyReason.NoReadyTarget
42
- }));
124
+ const targets = topology.descriptors.map((descriptor) => peerStatusForAvailability(descriptor, contracts_1.ZLinkTopologyReason.NoReadyTarget));
43
125
  const readyTargetCount = targets.filter((target) => target.state === contracts_1.ZLinkPeerState.Ready && target.weight > 0).length;
44
126
  const hostState = this.hostState();
45
127
  const isReady = (0, runtime_state_projections_1.topologyRuntimeIsReady)(hostState, readyTargetCount);
@@ -50,74 +132,21 @@ class ZLinkClientServerRuntimeProjection {
50
132
  isReady,
51
133
  readyTargetCount,
52
134
  targets,
53
- sequence: this.sequence,
135
+ sequence,
54
136
  observedAt: new Date()
55
137
  };
56
138
  }
57
139
  observe(channelName, capacity = runtime_observation_queue_1.ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY, signal) {
58
- const runtime = this.requireRuntime();
59
- const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
60
- let lastSnapshot = this.snapshotCore(channelName);
61
- const stop = runtime.observeClientServerTopology(channelName, () => {
62
- this.sequence += 1n;
63
- lastSnapshot = this.snapshotCore(channelName);
64
- queue.push(lastSnapshot, channelName);
65
- });
66
- const hostObserver = {
67
- changed: () => {
68
- this.sequence += 1n;
69
- lastSnapshot = this.snapshotCore(channelName);
70
- queue.push(lastSnapshot, channelName);
71
- },
72
- stop: () => {
73
- this.sequence += 1n;
74
- let current = lastSnapshot;
75
- try {
76
- current = this.snapshotCore(channelName);
77
- lastSnapshot = current;
78
- }
79
- catch {
80
- // The last complete projection remains valid after native teardown.
81
- }
82
- queue.seal({
83
- ...current,
84
- state: contracts_1.ZLinkTopologyState.Stopped,
85
- isReady: false,
86
- sequence: this.sequence,
87
- observedAt: new Date()
88
- }, channelName);
89
- }
90
- };
91
- this.hostObservers.add(hostObserver);
92
- queue.onClose(() => {
93
- stop();
94
- this.hostObservers.delete(hostObserver);
95
- });
96
- return queue;
140
+ return this.sources.observe(channelName, capacity, signal);
97
141
  }
98
142
  hostStateChanged() {
99
- for (const observer of this.hostObservers) {
100
- try {
101
- observer.changed();
102
- }
103
- catch {
104
- // Monitoring projection failures do not change host lifecycle results.
105
- }
106
- }
143
+ this.sources.hostStateChanged();
107
144
  }
108
145
  stopObservers() {
109
- for (const observer of [...this.hostObservers]) {
110
- try {
111
- observer.stop();
112
- }
113
- catch {
114
- // The observer is still removed when its terminal snapshot fails.
115
- }
116
- }
117
- this.hostObservers.clear();
146
+ this.sources.stopObservers();
118
147
  }
119
148
  isReady(channelName) {
120
- return this.snapshotCore(channelName).isReady;
149
+ return this.snapshot(channelName).isReady;
121
150
  }
122
151
  requireRuntime() {
123
152
  const runtime = this.runtime();
@@ -130,33 +159,18 @@ exports.ZLinkClientServerRuntimeProjection = ZLinkClientServerRuntimeProjection;
130
159
  class ZLinkFanoutRuntimeProjection {
131
160
  runtime;
132
161
  hostState;
133
- sequence = 0n;
134
- hostObservers = new Set();
162
+ sources = new TopologyStatusSources((channelName, sequence) => this.snapshotCore(channelName, sequence), (channelName, changed) => this.requireRuntime().observeFanoutTopology(channelName, changed), sameFanoutStatus);
135
163
  constructor(runtime, hostState = () => contracts_1.ZLinkFrameworkRuntimeState.Serving) {
136
164
  this.runtime = runtime;
137
165
  this.hostState = hostState;
138
166
  }
139
167
  snapshot(channelName) {
140
- return this.snapshotCore(channelName);
168
+ return this.sources.snapshot(channelName);
141
169
  }
142
- snapshotCore(channelName) {
170
+ snapshotCore(channelName, sequence) {
143
171
  const publishers = this.requireRuntime()
144
172
  .fanoutTopology(channelName)
145
- .descriptors.map((descriptor) => ({
146
- nodeRid: descriptor.publisherRoutingId,
147
- state: descriptor.state === 'serving'
148
- ? contracts_1.ZLinkPeerState.Ready
149
- : descriptor.state === 'retiring'
150
- ? contracts_1.ZLinkPeerState.Draining
151
- : descriptor.state === 'preparing'
152
- ? contracts_1.ZLinkPeerState.Connecting
153
- : contracts_1.ZLinkPeerState.NotConnected,
154
- unavailableReason: descriptor.state === 'serving'
155
- ? undefined
156
- : descriptor.state === 'retiring'
157
- ? contracts_1.ZLinkTopologyReason.Draining
158
- : contracts_1.ZLinkTopologyReason.NoReadyTarget
159
- }));
173
+ .descriptors.map((descriptor) => peerStatusForAvailability(descriptor, contracts_1.ZLinkTopologyReason.NoReadyPeer));
160
174
  const readyPublisherCount = publishers.filter((publisher) => publisher.state === contracts_1.ZLinkPeerState.Ready).length;
161
175
  const hostState = this.hostState();
162
176
  const hostReady = (0, runtime_state_projections_1.runtimeStateIsReady)(hostState);
@@ -170,71 +184,18 @@ class ZLinkFanoutRuntimeProjection {
170
184
  isReady: (0, runtime_state_projections_1.topologyRuntimeIsReady)(hostState, readyPublisherCount),
171
185
  readyPublisherCount,
172
186
  publishers,
173
- sequence: this.sequence,
187
+ sequence,
174
188
  observedAt: new Date()
175
189
  };
176
190
  }
177
191
  observe(channelName, capacity = runtime_observation_queue_1.ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY, signal) {
178
- const runtime = this.requireRuntime();
179
- const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
180
- let lastSnapshot = this.snapshotCore(channelName);
181
- const stop = runtime.observeFanoutTopology(channelName, () => {
182
- this.sequence += 1n;
183
- lastSnapshot = this.snapshotCore(channelName);
184
- queue.push(lastSnapshot, channelName);
185
- });
186
- const hostObserver = {
187
- changed: () => {
188
- this.sequence += 1n;
189
- lastSnapshot = this.snapshotCore(channelName);
190
- queue.push(lastSnapshot, channelName);
191
- },
192
- stop: () => {
193
- this.sequence += 1n;
194
- let current = lastSnapshot;
195
- try {
196
- current = this.snapshotCore(channelName);
197
- lastSnapshot = current;
198
- }
199
- catch {
200
- // The last complete projection remains valid after native teardown.
201
- }
202
- queue.seal({
203
- ...current,
204
- state: contracts_1.ZLinkTopologyState.Stopped,
205
- isReady: false,
206
- sequence: this.sequence,
207
- observedAt: new Date()
208
- }, channelName);
209
- }
210
- };
211
- this.hostObservers.add(hostObserver);
212
- queue.onClose(() => {
213
- stop();
214
- this.hostObservers.delete(hostObserver);
215
- });
216
- return queue;
192
+ return this.sources.observe(channelName, capacity, signal);
217
193
  }
218
194
  hostStateChanged() {
219
- for (const observer of this.hostObservers) {
220
- try {
221
- observer.changed();
222
- }
223
- catch {
224
- // Monitoring projection failures do not change host lifecycle results.
225
- }
226
- }
195
+ this.sources.hostStateChanged();
227
196
  }
228
197
  stopObservers() {
229
- for (const observer of [...this.hostObservers]) {
230
- try {
231
- observer.stop();
232
- }
233
- catch {
234
- // The observer is still removed when its terminal snapshot fails.
235
- }
236
- }
237
- this.hostObservers.clear();
198
+ this.sources.stopObservers();
238
199
  }
239
200
  requireRuntime() {
240
201
  const runtime = this.runtime();
@@ -244,6 +205,26 @@ class ZLinkFanoutRuntimeProjection {
244
205
  }
245
206
  }
246
207
  exports.ZLinkFanoutRuntimeProjection = ZLinkFanoutRuntimeProjection;
208
+ function peerStatusForAvailability(descriptor, noReadyReason) {
209
+ let state = contracts_1.ZLinkPeerState.NotConnected;
210
+ let unavailableReason = noReadyReason;
211
+ switch (descriptor.state) {
212
+ case 'retiring':
213
+ state = contracts_1.ZLinkPeerState.Draining;
214
+ unavailableReason = contracts_1.ZLinkTopologyReason.Draining;
215
+ break;
216
+ case 'serving':
217
+ state = contracts_1.ZLinkPeerState.Ready;
218
+ unavailableReason = undefined;
219
+ break;
220
+ case 'preparing':
221
+ state = contracts_1.ZLinkPeerState.Connecting;
222
+ break;
223
+ }
224
+ return 'serverRoutingId' in descriptor
225
+ ? { nodeRid: descriptor.serverRoutingId, weight: descriptor.weight, state, unavailableReason }
226
+ : { nodeRid: descriptor.publisherRoutingId, state, unavailableReason };
227
+ }
247
228
  function topologyStateForHost(state) {
248
229
  switch (state) {
249
230
  case contracts_1.ZLinkFrameworkRuntimeState.Preparing:
@@ -0,0 +1,5 @@
1
+ export declare class RuntimeDisposal {
2
+ private task?;
3
+ get started(): boolean;
4
+ run(close: () => Promise<void>): Promise<void>;
5
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RuntimeDisposal = void 0;
4
+ class RuntimeDisposal {
5
+ task;
6
+ get started() {
7
+ return this.task !== undefined;
8
+ }
9
+ run(close) {
10
+ if (this.task != null)
11
+ return this.task;
12
+ const task = Promise.resolve()
13
+ .then(close)
14
+ .catch((error) => {
15
+ this.task = null;
16
+ throw error;
17
+ });
18
+ this.task = task;
19
+ return task;
20
+ }
21
+ }
22
+ exports.RuntimeDisposal = RuntimeDisposal;
@@ -23,11 +23,14 @@ export declare class ZLinkSpotSerialTurn {
23
23
  private owner;
24
24
  private frameworkOperationsBlocked;
25
25
  constructor(postResume: (turn: ZLinkSpotSerialTurn, resume: () => void, reject: (reason: unknown) => void) => boolean, executionClaim: ZLinkExecutionBarrierClaim | undefined, yieldAllowed: boolean);
26
- bindExecutionClaim(claim: ZLinkExecutionBarrierClaim | undefined): void;
27
26
  get isSuspended(): boolean;
27
+ /** False when a seal that does not drain yielded turns won before this resume. */
28
+ resumeExecutionClaim(): boolean;
28
29
  releaseBoundExecutionClaim(): void;
29
30
  get suspended(): Promise<void>;
30
31
  bindOwner(owner: Promise<unknown>): void;
32
+ /** Settles when the whole turn ends by any path, including yielded continuations. */
33
+ get completion(): Promise<void>;
31
34
  blockFrameworkOperations(): void;
32
35
  ensureFrameworkOperationAllowed(): void;
33
36
  resetSuspension(): void;
@@ -51,9 +54,13 @@ export declare function captureZLinkExecutionTurn(): ZLinkCapturedExecutionTurn
51
54
  export declare function isCurrentZLinkSpotSerialTurn(executor: ZLinkSpotSerialTurnExecutorLike): boolean;
52
55
  export interface ZLinkExecutionBarrierSeal {
53
56
  readonly generation: bigint;
57
+ readonly kind: 'close' | 'relocation';
54
58
  }
55
59
  export interface ZLinkExecutionBarrierClaim {
56
60
  release(): void;
61
+ /** The turn yielded; it no longer runs until resume() admits it again. */
62
+ suspend(): void;
63
+ resume(): boolean;
57
64
  }
58
65
  /**
59
66
  * Seals application-lane admission and waits for every active Promise turn to
@@ -63,22 +70,28 @@ export interface ZLinkExecutionBarrierClaim {
63
70
  export declare class ZLinkExecutionBarrier {
64
71
  private generation;
65
72
  private activeClaims;
73
+ private suspendedClaims;
74
+ /** Claims whose turn has started and yielded at least once, until released. */
75
+ private yieldedTurnClaims;
66
76
  private currentSeal;
67
77
  private readonly admissionWaiters;
68
78
  private readonly quiescenceWaiters;
69
- private committed;
70
- enter(): Promise<ZLinkExecutionBarrierClaim>;
79
+ private committedSeal?;
80
+ get isSealed(): boolean;
81
+ get isCloseSealed(): boolean;
82
+ enter(): ZLinkExecutionBarrierClaim | Promise<ZLinkExecutionBarrierClaim>;
83
+ seal(kind?: ZLinkExecutionBarrierSeal['kind']): ZLinkExecutionBarrierSeal;
84
+ waitForQuiescence(seal: ZLinkExecutionBarrierSeal, signal?: AbortSignal): Promise<void>;
71
85
  /**
72
- * Re-enters a previously yielded application turn only while admission is
73
- * open. A continuation must fail instead of waiting behind a relocation
74
- * seal that already won the turn-boundary race.
86
+ * Spot messaging §7 step 1: a Close that keeps admission open still lets every
87
+ * already-started (yielded) turn finish in its generation before cleanup.
75
88
  */
76
- tryEnter(): ZLinkExecutionBarrierClaim | undefined;
77
- seal(): ZLinkExecutionBarrierSeal;
78
- waitForQuiescence(seal: ZLinkExecutionBarrierSeal, signal?: AbortSignal): Promise<void>;
89
+ waitForStartedTurns(signal?: AbortSignal): Promise<void>;
79
90
  abort(seal: ZLinkExecutionBarrierSeal): boolean;
80
91
  commit(seal: ZLinkExecutionBarrierSeal): boolean;
81
92
  isCurrent(seal: ZLinkExecutionBarrierSeal): boolean;
93
+ private isQuiescent;
94
+ private notifyQuiescence;
82
95
  private createClaim;
83
96
  private requireCurrent;
84
97
  }
@@ -43,15 +43,13 @@ class ZLinkSpotSerialTurn {
43
43
  this.executionClaim = executionClaim;
44
44
  this.yieldAllowed = yieldAllowed;
45
45
  }
46
- bindExecutionClaim(claim) {
47
- if (this.executionClaim !== undefined) {
48
- throw new Error('ZLink Spot serial turn already owns an execution claim.');
49
- }
50
- this.executionClaim = claim;
51
- }
52
46
  get isSuspended() {
53
47
  return this.suspendSignaled;
54
48
  }
49
+ /** False when a seal that does not drain yielded turns won before this resume. */
50
+ resumeExecutionClaim() {
51
+ return this.executionClaim?.resume() ?? true;
52
+ }
55
53
  releaseBoundExecutionClaim() {
56
54
  this.executionClaim?.release();
57
55
  this.executionClaim = undefined;
@@ -68,6 +66,10 @@ class ZLinkSpotSerialTurn {
68
66
  bindOwner(owner) {
69
67
  this.owner = owner;
70
68
  }
69
+ /** Settles when the whole turn ends by any path, including yielded continuations. */
70
+ get completion() {
71
+ return (this.owner ?? Promise.resolve()).then(() => undefined, () => undefined);
72
+ }
71
73
  blockFrameworkOperations() {
72
74
  this.frameworkOperationsBlocked = true;
73
75
  }
@@ -109,7 +111,7 @@ class ZLinkSpotSerialTurn {
109
111
  return;
110
112
  }
111
113
  this.suspendSignaled = true;
112
- this.releaseBoundExecutionClaim();
114
+ this.executionClaim?.suspend();
113
115
  this.suspendedResolve?.();
114
116
  }
115
117
  awaitResumePermit() {
@@ -175,51 +177,57 @@ function isCurrentZLinkSpotSerialTurn(executor) {
175
177
  class ZLinkExecutionBarrier {
176
178
  generation = 0n;
177
179
  activeClaims = 0;
180
+ suspendedClaims = 0;
181
+ /** Claims whose turn has started and yielded at least once, until released. */
182
+ yieldedTurnClaims = 0;
178
183
  currentSeal;
179
184
  admissionWaiters = [];
180
185
  quiescenceWaiters = new Set();
181
- committed = false;
182
- async enter() {
183
- if (this.committed) {
184
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
186
+ committedSeal;
187
+ get isSealed() {
188
+ return this.currentSeal !== undefined || this.committedSeal !== undefined;
189
+ }
190
+ get isCloseSealed() {
191
+ return (this.currentSeal ?? this.committedSeal)?.kind === 'close';
192
+ }
193
+ enter() {
194
+ if (this.committedSeal !== undefined) {
195
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(this.committedSeal.kind === 'close'
196
+ ? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected
197
+ : framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
185
198
  }
186
199
  if (this.currentSeal !== undefined) {
187
- return await new Promise((resolve, reject) => {
200
+ if (this.currentSeal.kind === 'close') {
201
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, 'ZLink execution barrier is sealed for Close.');
202
+ }
203
+ return new Promise((resolve, reject) => {
188
204
  this.admissionWaiters.push({ resolve, reject });
189
205
  });
190
206
  }
191
207
  return this.createClaim();
192
208
  }
193
- /**
194
- * Re-enters a previously yielded application turn only while admission is
195
- * open. A continuation must fail instead of waiting behind a relocation
196
- * seal that already won the turn-boundary race.
197
- */
198
- tryEnter() {
199
- if (this.committed || this.currentSeal !== undefined) {
200
- return undefined;
201
- }
202
- return this.createClaim();
203
- }
204
- seal() {
205
- if (this.committed) {
209
+ seal(kind = 'relocation') {
210
+ if (this.committedSeal !== undefined) {
206
211
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
207
212
  }
208
213
  if (this.currentSeal !== undefined) {
209
214
  throw new Error('ZLink execution barrier is already sealed.');
210
215
  }
211
- const seal = Object.freeze({ generation: ++this.generation });
216
+ const seal = Object.freeze({ generation: ++this.generation, kind });
212
217
  this.currentSeal = seal;
213
218
  return seal;
214
219
  }
215
220
  async waitForQuiescence(seal, signal) {
216
221
  this.requireCurrent(seal);
217
- if (this.activeClaims === 0)
222
+ if (this.isQuiescent(seal))
218
223
  return;
219
224
  if (signal?.aborted === true)
220
225
  throw signal.reason;
221
226
  await new Promise((resolve, reject) => {
222
227
  const complete = () => {
228
+ if (!this.isQuiescent(seal))
229
+ return;
230
+ this.quiescenceWaiters.delete(complete);
223
231
  signal?.removeEventListener('abort', abort);
224
232
  resolve();
225
233
  };
@@ -232,6 +240,31 @@ class ZLinkExecutionBarrier {
232
240
  });
233
241
  this.requireCurrent(seal);
234
242
  }
243
+ /**
244
+ * Spot messaging §7 step 1: a Close that keeps admission open still lets every
245
+ * already-started (yielded) turn finish in its generation before cleanup.
246
+ */
247
+ async waitForStartedTurns(signal) {
248
+ if (this.yieldedTurnClaims === 0)
249
+ return;
250
+ if (signal?.aborted === true)
251
+ throw signal.reason;
252
+ await new Promise((resolve, reject) => {
253
+ const complete = () => {
254
+ if (this.yieldedTurnClaims !== 0)
255
+ return;
256
+ this.quiescenceWaiters.delete(complete);
257
+ signal?.removeEventListener('abort', abort);
258
+ resolve();
259
+ };
260
+ const abort = () => {
261
+ this.quiescenceWaiters.delete(complete);
262
+ reject(signal?.reason);
263
+ };
264
+ this.quiescenceWaiters.add(complete);
265
+ signal?.addEventListener('abort', abort, { once: true });
266
+ });
267
+ }
235
268
  abort(seal) {
236
269
  if (!this.isCurrent(seal))
237
270
  return false;
@@ -245,8 +278,10 @@ class ZLinkExecutionBarrier {
245
278
  if (!this.isCurrent(seal))
246
279
  return false;
247
280
  this.currentSeal = undefined;
248
- this.committed = true;
249
- const error = (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
281
+ this.committedSeal = seal;
282
+ const error = (0, framework_errors_internal_1.createInternalFrameworkException)(seal.kind === 'close'
283
+ ? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected
284
+ : framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
250
285
  for (const waiter of this.admissionWaiters)
251
286
  waiter.reject(error);
252
287
  this.admissionWaiters.length = 0;
@@ -255,20 +290,55 @@ class ZLinkExecutionBarrier {
255
290
  isCurrent(seal) {
256
291
  return this.currentSeal?.generation === seal.generation;
257
292
  }
293
+ isQuiescent(seal) {
294
+ return this.activeClaims === 0 && (seal.kind !== 'close' || this.suspendedClaims === 0);
295
+ }
296
+ notifyQuiescence() {
297
+ for (const waiter of [...this.quiescenceWaiters])
298
+ waiter();
299
+ }
258
300
  createClaim() {
259
301
  this.activeClaims++;
260
- let released = false;
302
+ let state = 'active';
303
+ let yielded = false;
304
+ const release = () => {
305
+ if (state === 'released')
306
+ return;
307
+ if (state === 'active')
308
+ this.activeClaims--;
309
+ else
310
+ this.suspendedClaims--;
311
+ if (yielded)
312
+ this.yieldedTurnClaims--;
313
+ state = 'released';
314
+ this.notifyQuiescence();
315
+ };
261
316
  return {
262
- release: () => {
263
- if (released)
317
+ release,
318
+ suspend: () => {
319
+ if (state !== 'active')
264
320
  return;
265
- released = true;
321
+ state = 'suspended';
322
+ if (!yielded) {
323
+ yielded = true;
324
+ this.yieldedTurnClaims++;
325
+ }
266
326
  this.activeClaims--;
267
- if (this.activeClaims === 0) {
268
- for (const waiter of this.quiescenceWaiters)
269
- waiter();
270
- this.quiescenceWaiters.clear();
327
+ this.suspendedClaims++;
328
+ this.notifyQuiescence();
329
+ },
330
+ resume: () => {
331
+ if (state !== 'suspended')
332
+ return state === 'active';
333
+ if (this.committedSeal !== undefined ||
334
+ (this.currentSeal !== undefined && this.currentSeal.kind !== 'close')) {
335
+ release();
336
+ return false;
271
337
  }
338
+ state = 'active';
339
+ this.suspendedClaims--;
340
+ this.activeClaims++;
341
+ return true;
272
342
  }
273
343
  };
274
344
  }