@zlink-systems/framework 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -7,8 +7,7 @@ type HostStateAccessor = () => ZLinkFrameworkRuntimeState;
7
7
  export declare class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRuntime {
8
8
  private readonly runtime;
9
9
  private readonly hostState;
10
- private sequence;
11
- private readonly hostObservers;
10
+ private readonly sources;
12
11
  constructor(runtime: RuntimeAccessor, hostState?: HostStateAccessor);
13
12
  snapshot(channelName: string): ZLinkClientServerStatus;
14
13
  private snapshotCore;
@@ -21,8 +20,7 @@ export declare class ZLinkClientServerRuntimeProjection implements ZLinkClientSe
21
20
  export declare class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
22
21
  private readonly runtime;
23
22
  private readonly hostState;
24
- private sequence;
25
- private readonly hostObservers;
23
+ private readonly sources;
26
24
  constructor(runtime: RuntimeAccessor, hostState?: HostStateAccessor);
27
25
  snapshot(channelName: string): ZLinkFanoutStatus;
28
26
  private snapshotCore;
@@ -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;
@@ -54,12 +54,7 @@ export declare function captureZLinkExecutionTurn(): ZLinkCapturedExecutionTurn
54
54
  export declare function isCurrentZLinkSpotSerialTurn(executor: ZLinkSpotSerialTurnExecutorLike): boolean;
55
55
  export interface ZLinkExecutionBarrierSeal {
56
56
  readonly generation: bigint;
57
- /**
58
- * A Spot Close seal waits for yielded turns accepted before it and lets them
59
- * resume (Spot address messaging §7 step 2); a relocation seal does not, and
60
- * their continuation fails (execution gate §4).
61
- */
62
- readonly drainsYieldedTurns: boolean;
57
+ readonly kind: 'close' | 'relocation';
63
58
  }
64
59
  export interface ZLinkExecutionBarrierClaim {
65
60
  release(): void;
@@ -76,14 +71,22 @@ export declare class ZLinkExecutionBarrier {
76
71
  private generation;
77
72
  private activeClaims;
78
73
  private suspendedClaims;
74
+ /** Claims whose turn has started and yielded at least once, until released. */
75
+ private yieldedTurnClaims;
79
76
  private currentSeal;
80
77
  private readonly admissionWaiters;
81
78
  private readonly quiescenceWaiters;
82
- private committed;
79
+ private committedSeal?;
83
80
  get isSealed(): boolean;
84
- enter(): Promise<ZLinkExecutionBarrierClaim>;
85
- seal(drainsYieldedTurns?: boolean): ZLinkExecutionBarrierSeal;
81
+ get isCloseSealed(): boolean;
82
+ enter(): ZLinkExecutionBarrierClaim | Promise<ZLinkExecutionBarrierClaim>;
83
+ seal(kind?: ZLinkExecutionBarrierSeal['kind']): ZLinkExecutionBarrierSeal;
86
84
  waitForQuiescence(seal: ZLinkExecutionBarrierSeal, signal?: AbortSignal): Promise<void>;
85
+ /**
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.
88
+ */
89
+ waitForStartedTurns(signal?: AbortSignal): Promise<void>;
87
90
  abort(seal: ZLinkExecutionBarrierSeal): boolean;
88
91
  commit(seal: ZLinkExecutionBarrierSeal): boolean;
89
92
  isCurrent(seal: ZLinkExecutionBarrierSeal): boolean;
@@ -178,32 +178,42 @@ class ZLinkExecutionBarrier {
178
178
  generation = 0n;
179
179
  activeClaims = 0;
180
180
  suspendedClaims = 0;
181
+ /** Claims whose turn has started and yielded at least once, until released. */
182
+ yieldedTurnClaims = 0;
181
183
  currentSeal;
182
184
  admissionWaiters = [];
183
185
  quiescenceWaiters = new Set();
184
- committed = false;
186
+ committedSeal;
185
187
  get isSealed() {
186
- return this.currentSeal !== undefined || this.committed;
188
+ return this.currentSeal !== undefined || this.committedSeal !== undefined;
187
189
  }
188
- async enter() {
189
- if (this.committed) {
190
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
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.');
191
198
  }
192
199
  if (this.currentSeal !== undefined) {
193
- 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) => {
194
204
  this.admissionWaiters.push({ resolve, reject });
195
205
  });
196
206
  }
197
207
  return this.createClaim();
198
208
  }
199
- seal(drainsYieldedTurns = false) {
200
- if (this.committed) {
209
+ seal(kind = 'relocation') {
210
+ if (this.committedSeal !== undefined) {
201
211
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'ZLink execution barrier is committed.');
202
212
  }
203
213
  if (this.currentSeal !== undefined) {
204
214
  throw new Error('ZLink execution barrier is already sealed.');
205
215
  }
206
- const seal = Object.freeze({ generation: ++this.generation, drainsYieldedTurns });
216
+ const seal = Object.freeze({ generation: ++this.generation, kind });
207
217
  this.currentSeal = seal;
208
218
  return seal;
209
219
  }
@@ -230,6 +240,31 @@ class ZLinkExecutionBarrier {
230
240
  });
231
241
  this.requireCurrent(seal);
232
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
+ }
233
268
  abort(seal) {
234
269
  if (!this.isCurrent(seal))
235
270
  return false;
@@ -243,8 +278,10 @@ class ZLinkExecutionBarrier {
243
278
  if (!this.isCurrent(seal))
244
279
  return false;
245
280
  this.currentSeal = undefined;
246
- this.committed = true;
247
- 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.');
248
285
  for (const waiter of this.admissionWaiters)
249
286
  waiter.reject(error);
250
287
  this.admissionWaiters.length = 0;
@@ -254,7 +291,7 @@ class ZLinkExecutionBarrier {
254
291
  return this.currentSeal?.generation === seal.generation;
255
292
  }
256
293
  isQuiescent(seal) {
257
- return this.activeClaims === 0 && (!seal.drainsYieldedTurns || this.suspendedClaims === 0);
294
+ return this.activeClaims === 0 && (seal.kind !== 'close' || this.suspendedClaims === 0);
258
295
  }
259
296
  notifyQuiescence() {
260
297
  for (const waiter of [...this.quiescenceWaiters])
@@ -263,6 +300,7 @@ class ZLinkExecutionBarrier {
263
300
  createClaim() {
264
301
  this.activeClaims++;
265
302
  let state = 'active';
303
+ let yielded = false;
266
304
  const release = () => {
267
305
  if (state === 'released')
268
306
  return;
@@ -270,6 +308,8 @@ class ZLinkExecutionBarrier {
270
308
  this.activeClaims--;
271
309
  else
272
310
  this.suspendedClaims--;
311
+ if (yielded)
312
+ this.yieldedTurnClaims--;
273
313
  state = 'released';
274
314
  this.notifyQuiescence();
275
315
  };
@@ -279,6 +319,10 @@ class ZLinkExecutionBarrier {
279
319
  if (state !== 'active')
280
320
  return;
281
321
  state = 'suspended';
322
+ if (!yielded) {
323
+ yielded = true;
324
+ this.yieldedTurnClaims++;
325
+ }
282
326
  this.activeClaims--;
283
327
  this.suspendedClaims++;
284
328
  this.notifyQuiescence();
@@ -286,8 +330,8 @@ class ZLinkExecutionBarrier {
286
330
  resume: () => {
287
331
  if (state !== 'suspended')
288
332
  return state === 'active';
289
- if (this.committed ||
290
- (this.currentSeal !== undefined && !this.currentSeal.drainsYieldedTurns)) {
333
+ if (this.committedSeal !== undefined ||
334
+ (this.currentSeal !== undefined && this.currentSeal.kind !== 'close')) {
291
335
  release();
292
336
  return false;
293
337
  }
@@ -13,7 +13,7 @@ export declare const ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS: Required<ZLinkSeria
13
13
  export interface ZLinkSerialWorkRecord<T> {
14
14
  readonly acceptedSequence: bigint;
15
15
  readonly lane: ZLinkSerialWorkLane;
16
- readonly operation: () => Promise<T> | T;
16
+ operation: () => Promise<T> | T;
17
17
  readonly context?: unknown;
18
18
  resolve(value: T): void;
19
19
  reject(reason: unknown): void;
@@ -21,6 +21,10 @@ export interface ZLinkSerialWorkRecord<T> {
21
21
  release(): void;
22
22
  fail(reason: unknown): void;
23
23
  }
24
+ /** The active lifecycle owner decides which existing application records can run. */
25
+ export interface ZLinkSerialLifecycleContext {
26
+ canExecuteApplication(record: ZLinkSerialWorkRecord<unknown>): boolean;
27
+ }
24
28
  /** Readiness work that must complete without claiming the serial owner. */
25
29
  export interface ZLinkSerialWorkPreparation {
26
30
  prepare(signal: AbortSignal): Promise<void>;
@@ -58,13 +62,15 @@ export declare class ZLinkSerialExecutionQueue {
58
62
  */
59
63
  submitPreAdmitted<T>(operation: () => Promise<T> | T, options?: ZLinkSerialWorkOptions, context?: unknown): Promise<T>;
60
64
  /** Holds lifecycle FIFO through an operation result while its application turns can run. */
61
- submitLifecycleOperation<T>(operation: () => Promise<T> | T): Promise<T>;
65
+ submitLifecycleOperation<T>(operation: () => Promise<T> | T, context?: ZLinkSerialLifecycleContext): Promise<T>;
66
+ visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void;
62
67
  get hasPendingWork(): boolean;
63
68
  whenIdle(): Promise<void>;
64
69
  /** Stops new submissions while allowing the accepted FIFO to finish. */
65
70
  close(): Promise<void>;
66
71
  /** Stops admission within the lifecycle operation that owns this queue's close. */
67
72
  closeAdmission(): void;
73
+ get admissionClosed(): boolean;
68
74
  private admit;
69
75
  private scheduleDrain;
70
76
  private drain;