@zlink-systems/framework 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,81 +1,98 @@
1
- import { ZLinkListenerRecords } from '../foundation/listener-records';
2
- import {
3
- ZLinkFrameworkInternalErrorKind,
4
- createInternalFrameworkException,
5
- internalFrameworkWireReply
6
- } from '../framework-errors-internal';
1
+ import { listAllMeshNodeDescriptors } from '../locations/location-store-pages';
2
+ import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
7
3
  import { randomBytes, randomUUID } from 'node:crypto';
8
- import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
9
- import {
10
- RequestResult,
11
- SubmitResult,
12
- type ZLinkBackendMessageLike as MessageLike
13
- } from '../backend/runtime-values';
14
- import {
15
- OperationKind,
16
- ReceiveKind,
17
- type ReadyRecord,
18
- type ReceiveRecord
19
- } from '../foundation/service-runtime-contracts';
20
- import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
21
- import { runtimeAcceptsWork, runtimeStateIsReady } from '../foundation/runtime-state-projections';
22
- import { createDeadlineExceededError, isDeadlineExceededError } from '../abort';
23
- import { meshActorSessionNodeAdapter, ZLinkNodeBackendAdapterFactory } from '../backend';
24
- import type {
25
- ZLinkBackendAdapterFactory,
26
- ZLinkBackendContext,
27
- ZLinkBackendMeshNode
28
- } from '../backend';
29
-
30
- const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
31
- import type { ZLinkFrameworkRegistration } from '../configuration';
32
- import type {
33
- ActorRef,
34
- RoutingId,
35
- ZLinkMeshNodeDescriptor,
36
- ZLinkClientServerRuntime,
37
- ZLinkFanoutRuntime,
38
- ZLinkFrameworkRuntime,
39
- ZLinkListenerKind,
40
- ZLinkListenerStatus,
41
- ZLinkFrameworkLifecycleOptions,
42
- ZLinkFrameworkRelocationOptions,
43
- ZLinkFrameworkRelocationResult,
44
- ZLinkObservedStatus,
45
- ZLinkFrameworkRuntimeStatus,
46
- ZLinkFrameworkTerminationResult,
47
- ZLinkRouteMeshRuntime
48
- } from '../../contracts';
49
- import type { ZLinkLocationOwnerToken } from '../../contracts/Locations';
50
- import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
51
- import type { Type } from '../../contracts/Common/CoreTypes';
52
- import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
53
- import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
54
4
  import {
5
+ type ActorRef,
6
+ type RoutingId,
7
+ type ZLinkClientServerRuntime,
8
+ type ZLinkFanoutRuntime,
9
+ type ZLinkFrameworkLifecycleOptions,
10
+ type ZLinkFrameworkRelocationOptions,
11
+ type ZLinkFrameworkRelocationResult,
12
+ type ZLinkFrameworkRuntime,
13
+ type ZLinkFrameworkRuntimeStatus,
14
+ type ZLinkFrameworkTerminationResult,
15
+ type ZLinkListenerKind,
16
+ type ZLinkListenerStatus,
17
+ type ZLinkMeshNodeDescriptor,
18
+ type ZLinkMessageFlowControl,
19
+ type ZLinkMessageFlowLogMode,
20
+ type ZLinkObservedStatus,
21
+ type ZLinkRouteMeshRuntime,
55
22
  ZLinkFrameworkRelocationMode,
56
23
  ZLinkFrameworkRelocationOutcome,
57
24
  ZLinkFrameworkRelocationReason,
58
25
  ZLinkFrameworkRuntimeState,
59
26
  ZLinkFrameworkTerminationOutcome,
60
27
  ZLinkFrameworkTerminationReason,
28
+ zlinkMessageMetadata,
61
29
  ZLinkObjectRole,
62
30
  ZLinkPeerState,
63
- ZLinkSpotKind,
64
- zlinkMessageMetadata,
65
- ZLinkSpotCreateState
31
+ ZLinkSpotCreateState,
32
+ ZLinkSpotKind
66
33
  } from '../../contracts';
67
- import { ZLinkSubmitStatus } from '../messaging/submission-result';
34
+ import type { Type } from '../../contracts/Common/CoreTypes';
35
+ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
36
+ import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
37
+ import { requireMessageFlowLogMode } from '../../contracts/Configuration/DiagnosticsValidation';
38
+ import { DEFAULT_ACTIVATION_CONCURRENCY_LIMIT } from '../../contracts/Configuration/InternalDefaults';
39
+ import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../contracts/Configuration/Registration';
68
40
  import {
69
- ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
70
41
  ZLinkDispatchErrorSurface,
71
- ZLinkDispatchMessageKind
42
+ ZLinkDispatchMessageKind,
43
+ ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
72
44
  } from '../../contracts/Dispatch/ZLinkDispatchOptions';
73
- import type { ZLinkMessageFlowControl, ZLinkMessageFlowLogMode } from '../../contracts';
74
- import { requireMessageFlowLogMode } from '../../contracts/Configuration/DiagnosticsValidation';
45
+ import {
46
+ type ZLinkLocationOwnerToken,
47
+ zlinkDefaultLocationOptions,
48
+ type ZLinkLocationRuntimeQuery
49
+ } from '../../contracts/Locations';
50
+ import { ZLINK_PROVIDER_MAX_PAGE_SIZE } from '../../contracts/Locations/Stores';
51
+ import { createDeadlineExceededError, isAbortError, isDeadlineExceededError } from '../abort';
52
+ import { ZLinkActivationAdmission } from '../activation-admission';
53
+ import {
54
+ type DefaultZLinkActorManager,
55
+ type ZLinkActorManagerOptions,
56
+ decodeRemoteActorSourceLeaveTerminal,
57
+ DefaultZLinkActorClient,
58
+ isActorAuthorityPayload,
59
+ publishInitialActorAuthority,
60
+ rewriteActorAuthorityOwner,
61
+ ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
62
+ ZLinkActorHandoffCoordinator,
63
+ ZLinkActorTransferRegistry
64
+ } from '../actors';
65
+ import { messageFollowOwnerNodeRid, ownerFence } from '../actors/actor-message-follow-context';
66
+ import {
67
+ ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE,
68
+ type ZLinkInternalActorTransportDeliveryGate
69
+ } from '../actors/actor-transport-delivery-gate';
70
+ import { ZLinkRuntimeAdmissionGate } from '../admission';
71
+ import {
72
+ ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE,
73
+ type ZLinkInternalApplicationJobQueueHandlerStartGate
74
+ } from '../application-jobs/application-job-queue-handler-start-gate';
75
+ import {
76
+ releaseApplicationJobPermitBeforeHandler,
77
+ runWithApplicationJobPermit
78
+ } from '../application-jobs/application-job-queue-scope';
79
+ import {
80
+ type ZLinkBackendAdapterFactory,
81
+ type ZLinkBackendContext,
82
+ type ZLinkBackendMeshNode,
83
+ meshActorSessionNodeAdapter,
84
+ ZLinkNodeBackendAdapterFactory
85
+ } from '../backend';
86
+ import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
87
+ import {
88
+ RequestResult,
89
+ SubmitResult,
90
+ type ZLinkBackendMessageLike as MessageLike
91
+ } from '../backend/runtime-values';
75
92
  import {
76
93
  DefaultZLinkChannelRuntimeOptions,
77
- ZLinkDispatchErrorReporter,
78
94
  ZLinkChannelRuntimeManager,
95
+ ZLinkDispatchErrorReporter,
79
96
  ZLinkRuntimeRouteTransport,
80
97
  type ZLinkDispatchErrorSink
81
98
  } from '../channels';
@@ -85,33 +102,72 @@ import {
85
102
  encodeChannelErrorReplyParts,
86
103
  encodeChannelReplyParts
87
104
  } from '../channels/channel-envelope';
88
- import { ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET } from '../actors';
89
- import {
90
- ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE,
91
- type ZLinkInternalActorTransportDeliveryGate
92
- } from '../actors/actor-transport-delivery-gate';
93
- import {
94
- ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE,
95
- type ZLinkInternalApplicationJobQueueHandlerStartGate
96
- } from '../application-jobs/application-job-queue-handler-start-gate';
97
- import { ZLinkFrameworkExecutionState, ZLinkRuntimeTaskErrorSink } from '../execution';
105
+ import type { ZLinkFrameworkRegistration } from '../configuration';
98
106
  import {
107
+ type ZLinkRuntimeEventPublisher,
99
108
  createDiagnosticsContext,
100
109
  createInboundFlow,
101
110
  currentOrCreateFlow,
102
111
  DefaultZLinkRuntimeEventPublisher,
103
112
  flowIfEnabled,
104
113
  runWithFlow,
114
+ ZLinkRuntimeMetrics,
105
115
  type ZLinkDiagnosticsContext,
106
116
  type ZLinkMessageFlowModeCell,
107
- type ZLinkRuntimeMetricMeshSnapshot,
108
- ZLinkRuntimeMetrics
117
+ type ZLinkRuntimeMetricMeshSnapshot
109
118
  } from '../diagnostics';
119
+ import { METRIC_NAMES, MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
120
+ import { RuntimeEventQueue } from '../diagnostics/runtime-observation-queue';
110
121
  import {
111
122
  ZLinkClientServerRuntimeProjection,
112
123
  ZLinkFanoutRuntimeProjection
113
124
  } from '../diagnostics/topology-runtime-projections';
114
- import { RuntimeEventQueue } from '../diagnostics/runtime-observation-queue';
125
+ import { ZLinkFrameworkExecutionState, ZLinkRuntimeTaskErrorSink } from '../execution';
126
+ import { ZLinkListenerRecords } from '../foundation/listener-records';
127
+ import {
128
+ runtimeAcceptsWork,
129
+ runtimeObservationIsTerminal,
130
+ runtimeStateIsReady
131
+ } from '../foundation/runtime-state-projections';
132
+ import { rewriteServiceAuthorityOwner } from '../foundation/service-authority-payload-codec';
133
+ import { ServiceRelocationAuthorityError } from '../foundation/service-relocation-coordinator';
134
+ import {
135
+ replaceServiceRelocationAuthorityApplicationPayload,
136
+ serviceRelocationAuthorityApplicationPayload
137
+ } from '../foundation/service-relocation-runtime';
138
+ import {
139
+ MeshPeerRuntimeState,
140
+ OperationKind,
141
+ ReceiveKind,
142
+ type ReadyRecord,
143
+ type ReceiveRecord
144
+ } from '../foundation/service-runtime-contracts';
145
+ import type {
146
+ ServiceAsyncInstanceActivationAuthority,
147
+ ServiceInstanceApplicationLifecycle
148
+ } from '../foundation/service-stateful-runtime';
149
+ import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
150
+ import {
151
+ createInternalFrameworkException,
152
+ internalFrameworkWireReply,
153
+ ZLinkFrameworkInternalErrorKind
154
+ } from '../framework-errors-internal';
155
+ import {
156
+ ZLinkAuthoritySpotRouteResolver,
157
+ ZLinkOwnerCleanupError,
158
+ type ZLinkLocationRuntime,
159
+ type ZLinkStoreLocationResolvers
160
+ } from '../locations';
161
+ import {
162
+ decodeFrameworkCreationPayload,
163
+ encodeFrameworkCreationPayload
164
+ } from '../messaging/creation-payload-codec';
165
+ import {
166
+ decodeFrameworkPayloadMessage,
167
+ encodeFrameworkPayloadMessage
168
+ } from '../messaging/payload-codec';
169
+ import { ZLinkSubmitStatus } from '../messaging/submission-result';
170
+ import { decodeRoutingId, encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
115
171
  import {
116
172
  DefaultZLinkSpotManager,
117
173
  ZLinkPublicSpotManager,
@@ -120,85 +176,52 @@ import {
120
176
  type ZLinkDetachedTaskRunner,
121
177
  type ZLinkSpotManagerOptions
122
178
  } from '../spots';
123
- import type { DefaultZLinkActorManager, ZLinkActorManagerOptions } from '../actors';
124
- import { messageFollowOwnerNodeRid, ownerFence } from '../actors/actor-message-follow-context';
125
- import {
126
- DefaultZLinkActorClient,
127
- ZLinkActorHandoffCoordinator,
128
- ZLinkActorTransferRegistry,
129
- decodeRemoteActorSourceLeaveTerminal,
130
- isActorAuthorityPayload,
131
- publishInitialActorAuthority,
132
- rewriteActorAuthorityOwner
133
- } from '../actors';
179
+ import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
134
180
  import {
135
181
  DefaultZLinkBoundSessionFactory,
136
- type DefaultZLinkBoundSession,
137
- type ZLinkStreamPayloadCodec,
138
182
  ZLinkStreamBindingRuntime,
139
- ZLinkStreamRuntimeManager
183
+ ZLinkStreamRuntimeManager,
184
+ type DefaultZLinkBoundSession,
185
+ type ZLinkStreamPayloadCodec
140
186
  } from '../streams';
141
- import {
142
- ZLinkOwnerCleanupError,
143
- ZLinkAuthoritySpotRouteResolver,
144
- type ZLinkLocationRuntime,
145
- type ZLinkStoreLocationResolvers
146
- } from '../locations';
147
- import {
148
- zlinkDefaultLocationOptions,
149
- type ZLinkLocationRuntimeQuery
150
- } from '../../contracts/Locations';
187
+ import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
151
188
  import { ZLinkActorRuntimeOptionsFactory } from './actor-runtime-options-factory';
152
- import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
153
189
  import { ZLinkActorTransferAuthorityRuntime } from './actor-transfer-authority-runtime';
154
- import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
155
- import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
156
- import { MeshRouterResolver } from './mesh-router-resolver';
157
- import { ZLinkBoundSessionRelay } from './bound-session-relay';
158
- import { decodeRoutingId, encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
159
- import { rewriteServiceAuthorityOwner } from '../foundation/service-authority-payload-codec';
190
+ import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
160
191
  import {
161
- replaceServiceRelocationAuthorityApplicationPayload,
162
- serviceRelocationAuthorityApplicationPayload
163
- } from '../foundation/service-relocation-runtime';
164
- import { ZLinkSpotRuntimeOptionsFactory } from './spot-runtime-options-factory';
192
+ ApplicationJobQueue,
193
+ nodeEffectiveProcessorCount,
194
+ resolveApplicationJobQueueConfiguration
195
+ } from './application-job-queue';
196
+ import { ZLinkBoundSessionRelay } from './bound-session-relay';
165
197
  import { ZLinkChannelRuntimeOptionsFactory } from './channel-runtime-options-factory';
166
- import { ZLinkSpotNodeRuntimeOptionsFactory } from './spot-node-runtime-options-factory';
167
- import { rollbackRuntimeStart, stopRuntimeParts } from './runtime-shutdown';
168
- import { ZLinkRuntimeAdmissionGate } from '../admission';
169
- import { ZLinkActivationAdmission } from '../activation-admission';
170
- import { ZLinkRetiringRollbackError, ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
171
- import { ServiceRelocationAuthorityError } from '../foundation/service-relocation-coordinator';
172
- import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
173
- import { ZLinkStatefulAuthorityRouteRuntime } from './stateful-authority-route-runtime';
198
+ import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
199
+ import { HostCapacityStatusProjection } from './host-capacity-status';
174
200
  import { ZLinkInstanceActivationAuthority } from './instance-activation-authority';
175
- import type {
176
- ServiceAsyncInstanceActivationAuthority,
177
- ServiceInstanceApplicationLifecycle
178
- } from '../foundation/service-stateful-runtime';
179
- import { hasObjectClientCapability, ZLinkHostSpotAddressTransport } from './spot-address-transport';
180
- import { ZLinkUserSpotCreationCoordinator } from './user-spot-creation-coordinator';
181
- import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
182
- import {
183
- decodeFrameworkPayloadMessage,
184
- encodeFrameworkPayloadMessage
185
- } from '../messaging/payload-codec';
201
+ import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
202
+ import { MeshRouterResolver } from './mesh-router-resolver';
186
203
  import {
187
- decodeFrameworkCreationPayload,
188
- encodeFrameworkCreationPayload
189
- } from '../messaging/creation-payload-codec';
204
+ ZLinkDrainingStatePublishError,
205
+ ZLinkRetiringRollbackError,
206
+ ZLinkRouteMeshRuntimeCoordinator
207
+ } from './route-mesh-runtime';
190
208
  import { DefaultZLinkRouteMeshRuntimeOptions } from './route-mesh-runtime-options';
209
+ import { rollbackRuntimeStart, stopRuntimeParts } from './runtime-shutdown';
191
210
  import {
192
211
  ZLinkHostServiceRelocationRuntime,
193
212
  ZLinkRelocationStateIncompatibleError
194
213
  } from './service-relocation-host-runtime';
195
- import {
196
- ApplicationJobQueue,
197
- nodeEffectiveProcessorCount,
198
- resolveApplicationJobQueueConfiguration
199
- } from './application-job-queue';
200
- import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
201
- import { HostCapacityStatusProjection } from './host-capacity-status';
214
+ import { hasObjectClientCapability, ZLinkHostSpotAddressTransport } from './spot-address-transport';
215
+ import { ZLinkSpotNodeRuntimeOptionsFactory } from './spot-node-runtime-options-factory';
216
+ import { ZLinkSpotRuntimeOptionsFactory } from './spot-runtime-options-factory';
217
+ import { ZLinkStatefulAuthorityRouteRuntime } from './stateful-authority-route-runtime';
218
+ import { ZLinkUserSpotCreationCoordinator } from './user-spot-creation-coordinator';
219
+
220
+ const HOST_SHUTDOWN_POLL_INTERVAL_MS = 100;
221
+ const HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS = 10;
222
+ const DEFAULT_HOST_CONTROL_TIMEOUT_MS = 30_000;
223
+
224
+ const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
202
225
 
203
226
  export interface ZLinkFrameworkRuntimeLifecycle {
204
227
  readonly isStarted: boolean;
@@ -224,6 +247,7 @@ export class ZLinkFrameworkRuntimeHost
224
247
  private runtimeSequence = 0n;
225
248
  private readonly runtimeObservationSource = Symbol('zlink.framework-runtime');
226
249
  private runtimeDeadline?: Date;
250
+ private shutdownDeadline?: AbortController;
227
251
  private runtimeRelocationResult?: ZLinkFrameworkRelocationResult;
228
252
  private runtimeTerminationResult?: ZLinkFrameworkTerminationResult;
229
253
  private relocationOperation?: Promise<ZLinkFrameworkRelocationResult>;
@@ -264,16 +288,8 @@ export class ZLinkFrameworkRuntimeHost
264
288
  private readonly admission = new ZLinkRuntimeAdmissionGate(() => this.ownerAdmissionOpen());
265
289
  private readonly activationAdmission = new ZLinkActivationAdmission(
266
290
  (meshName) =>
267
- this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ?? 128,
268
- (meshName) => {
269
- void this.spotNodeRuntime
270
- ?.publishMeshNodeState(
271
- this.runtimeState,
272
- this.executionState?.abortController.signal,
273
- meshName
274
- )
275
- .catch(() => undefined);
276
- }
291
+ this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
292
+ DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
277
293
  );
278
294
  private cachedLocationSpotRouteResolver?: ZLinkSpotRouteResolver;
279
295
  private actorClientLocationResolver?: ZLinkStoreLocationResolvers;
@@ -379,7 +395,8 @@ export class ZLinkFrameworkRuntimeHost
379
395
  this.meshRouters.classifyManualNodeTarget(meshName, targetNodeRid),
380
396
  (meshName, sourceNodeRid, parts) => this.submitLocalMeshRoute(meshName, sourceNodeRid, parts),
381
397
  this.metrics,
382
- () => this.flowCreationEnabled()
398
+ () => this.flowCreationEnabled(),
399
+ () => this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink).flow
383
400
  );
384
401
  this.spotAddressTransport = new ZLinkHostSpotAddressTransport({
385
402
  resolver: () => this.createLocationSpotRouteResolver(),
@@ -392,7 +409,7 @@ export class ZLinkFrameworkRuntimeHost
392
409
  meshNode: (meshName) => this.spotNodeRuntime?.meshNode(meshName),
393
410
  completions: (meshName) => this.spotNodeRuntime?.meshCompletionTable(meshName),
394
411
  codecs: { serializers: options.registration.messageSerializers },
395
- defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? 30_000,
412
+ defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
396
413
  defaultSendTimeoutMs: defaultSpotSendTimeoutMs,
397
414
  sendTimeoutMsForMesh: sendTimeoutMsForSpotMesh,
398
415
  sendTimeoutMsForRouteChannel: sendTimeoutMsForSpotRouteChannel,
@@ -406,6 +423,7 @@ export class ZLinkFrameworkRuntimeHost
406
423
  rewriteAuthorityPayloadForOwner
407
424
  });
408
425
  this.streamBindingRuntime = new ZLinkStreamBindingRuntime({
426
+ dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink),
409
427
  streamPayloadCodec: resolveStreamPayloadCodec(options.registration),
410
428
  streamCompression: options.registration.streamCompression,
411
429
  messageSerializers: options.registration.messageSerializers,
@@ -784,6 +802,7 @@ export class ZLinkFrameworkRuntimeHost
784
802
  });
785
803
  this.serviceRelocation = new ZLinkHostServiceRelocationRuntime({
786
804
  registration: options.registration,
805
+ targetAdmissionSealed: () => this.shutdownOperationStartedAt !== undefined,
787
806
  providerResolver: options.providerResolver,
788
807
  locationStore: () => this.locationOwner.currentStores?.locationStore,
789
808
  currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
@@ -870,7 +889,7 @@ export class ZLinkFrameworkRuntimeHost
870
889
  }
871
890
 
872
891
  get isStarted(): boolean {
873
- return this.executionState !== undefined;
892
+ return this.executionState !== undefined && !this.executionState.abortController.signal.aborted;
874
893
  }
875
894
 
876
895
  get status(): ZLinkFrameworkRuntimeStatus {
@@ -905,6 +924,7 @@ export class ZLinkFrameworkRuntimeHost
905
924
  const queue = new RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>(undefined, signal);
906
925
  this.runtimeObservers.add(queue);
907
926
  queue.onClose(() => this.runtimeObservers.delete(queue));
927
+ this.publishRuntimeStatus(queue, this.status);
908
928
  return queue;
909
929
  }
910
930
 
@@ -921,7 +941,7 @@ export class ZLinkFrameworkRuntimeHost
921
941
  options,
922
942
  this.options.registration.applicationVersion
923
943
  );
924
- const deadlineMs = options.deadlineMs ?? 30_000;
944
+ const deadlineMs = options.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
925
945
  if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
926
946
  return Promise.reject(new RangeError('Relocation deadlineMs must be greater than zero.'));
927
947
  }
@@ -990,7 +1010,7 @@ export class ZLinkFrameworkRuntimeHost
990
1010
  }
991
1011
 
992
1012
  shutdown(options?: ZLinkFrameworkLifecycleOptions): Promise<ZLinkFrameworkTerminationResult> {
993
- const deadlineMs = options?.deadlineMs ?? 30_000;
1013
+ const deadlineMs = options?.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
994
1014
  if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
995
1015
  return Promise.reject(new RangeError('Shutdown deadlineMs must be greater than zero.'));
996
1016
  }
@@ -1103,52 +1123,78 @@ export class ZLinkFrameworkRuntimeHost
1103
1123
  }
1104
1124
 
1105
1125
  private async runShutdown(deadlineMs: number): Promise<ZLinkFrameworkTerminationResult> {
1106
- const deadlineAtMs = performance.now() + deadlineMs;
1107
- try {
1108
- this.admission.close();
1109
- this.setRuntimeState(ZLinkFrameworkRuntimeState.Draining);
1110
- if (
1111
- this.relocationOperation !== undefined &&
1112
- this.relocationStopStarting?.signal.aborted === true
1113
- ) {
1114
- await this.relocationOperation;
1115
- }
1116
- // Seal application admission before the public status reports that the
1117
- // host no longer accepts work. This prevents status polling from racing
1118
- // with the coordinator's synchronous seal step.
1119
- const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
1120
- const shutdown = this.routeMeshCoordinator.shutdownHost(
1121
- this.runtimeDeadline!,
1122
- undefined,
1123
- Math.max(0, deadlineAtMs - performance.now())
1124
- );
1125
- const drain = await shutdown;
1126
- await unscopedStreamDrain;
1127
- await this.stop();
1128
- if (drain.kind === 'forceStopped') {
1126
+ return await this.runWithShutdownDeadline(deadlineMs, async () => {
1127
+ const deadlineAtMs = performance.now() + deadlineMs;
1128
+ try {
1129
+ this.admission.close();
1130
+ if (this.runtimeState === ZLinkFrameworkRuntimeState.Preparing) {
1131
+ this.executionState?.abortController.abort();
1132
+ }
1133
+ this.setRuntimeState(ZLinkFrameworkRuntimeState.Draining);
1134
+ if (
1135
+ this.relocationOperation !== undefined &&
1136
+ this.relocationStopStarting?.signal.aborted === true
1137
+ ) {
1138
+ await this.relocationOperation;
1139
+ }
1140
+ // Seal application admission before the public status reports that the
1141
+ // host no longer accepts work. This prevents status polling from racing
1142
+ // with the coordinator's synchronous seal step.
1143
+ const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
1144
+ const shutdown = this.routeMeshCoordinator.shutdownHost(
1145
+ this.runtimeDeadline!,
1146
+ this.shutdownDeadline!.signal
1147
+ );
1148
+ const drain = await shutdown;
1149
+ await unscopedStreamDrain;
1150
+ await this.stop();
1151
+ if (drain.kind === 'forceStopped') {
1152
+ return this.completeTermination({
1153
+ outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1154
+ reason:
1155
+ drain.reason === 'deadline_exceeded'
1156
+ ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1157
+ : ZLinkFrameworkTerminationReason.TeardownFailed
1158
+ });
1159
+ }
1160
+ if (performance.now() >= deadlineAtMs) {
1161
+ throw createDeadlineExceededError('Shutdown resource cleanup exceeded its deadline.');
1162
+ }
1163
+ return this.completeTermination({
1164
+ outcome: ZLinkFrameworkTerminationOutcome.Stopped,
1165
+ reason: ZLinkFrameworkTerminationReason.None
1166
+ });
1167
+ } catch (error) {
1168
+ await this.stop().catch(() => undefined);
1129
1169
  return this.completeTermination({
1130
1170
  outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1131
- reason:
1132
- drain.reason === 'deadline_exceeded'
1133
- ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1134
- : ZLinkFrameworkTerminationReason.TeardownFailed
1171
+ reason: isDeadlineExceededError(error)
1172
+ ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1173
+ : ZLinkFrameworkTerminationReason.TeardownFailed
1135
1174
  });
1136
1175
  }
1137
- if (performance.now() >= deadlineAtMs) {
1138
- throw createDeadlineExceededError('Shutdown resource cleanup exceeded its deadline.');
1139
- }
1140
- return this.completeTermination({
1141
- outcome: ZLinkFrameworkTerminationOutcome.Stopped,
1142
- reason: ZLinkFrameworkTerminationReason.None
1143
- });
1144
- } catch (error) {
1145
- await this.stop().catch(() => undefined);
1146
- return this.completeTermination({
1147
- outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1148
- reason: isDeadlineExceededError(error)
1149
- ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1150
- : ZLinkFrameworkTerminationReason.TeardownFailed
1151
- });
1176
+ });
1177
+ }
1178
+
1179
+ private async runWithShutdownDeadline<T>(
1180
+ deadlineMs: number,
1181
+ operation: () => Promise<T>
1182
+ ): Promise<T> {
1183
+ if (this.shutdownDeadline !== undefined) return await operation();
1184
+ const deadline = new AbortController();
1185
+ this.shutdownDeadline = deadline;
1186
+ const ownsRuntimeDeadline = this.runtimeDeadline === undefined;
1187
+ this.runtimeDeadline ??= new Date(Date.now() + deadlineMs);
1188
+ const timer = setTimeout(
1189
+ () => deadline.abort(createDeadlineExceededError('Shutdown deadline exceeded.')),
1190
+ Math.max(0, this.runtimeDeadline.getTime() - Date.now())
1191
+ );
1192
+ try {
1193
+ return await operation();
1194
+ } finally {
1195
+ clearTimeout(timer);
1196
+ this.shutdownDeadline = undefined;
1197
+ if (ownsRuntimeDeadline) this.runtimeDeadline = undefined;
1152
1198
  }
1153
1199
  }
1154
1200
 
@@ -1185,8 +1231,9 @@ export class ZLinkFrameworkRuntimeHost
1185
1231
  private recordRelocationResult(result: ZLinkFrameworkRelocationResult): void {
1186
1232
  if (this.relocationOperationStartedAt !== undefined) {
1187
1233
  this.metrics.duration(
1188
- 'zlink.host.relocation.duration',
1189
- Math.max(0, performance.now() - this.relocationOperationStartedAt) / 1000,
1234
+ METRIC_NAMES.HostRelocationDuration,
1235
+ Math.max(0, performance.now() - this.relocationOperationStartedAt) /
1236
+ MILLISECONDS_PER_SECOND,
1190
1237
  {
1191
1238
  mode: relocationModeMetricName(result.mode),
1192
1239
  outcome:
@@ -1195,7 +1242,7 @@ export class ZLinkFrameworkRuntimeHost
1195
1242
  );
1196
1243
  }
1197
1244
  if (result.outcome === ZLinkFrameworkRelocationOutcome.Blocked) {
1198
- this.metrics.count('zlink.host.relocation.blocked', 1, {
1245
+ this.metrics.count(METRIC_NAMES.HostRelocationBlocked, 1, {
1199
1246
  mode: relocationModeMetricName(result.mode),
1200
1247
  reason: relocationReasonMetricName(result.reason)
1201
1248
  });
@@ -1218,8 +1265,8 @@ export class ZLinkFrameworkRuntimeHost
1218
1265
  this.runtimeDeadline = undefined;
1219
1266
  if (this.shutdownOperationStartedAt !== undefined) {
1220
1267
  this.metrics.duration(
1221
- 'zlink.host.shutdown.duration',
1222
- Math.max(0, performance.now() - this.shutdownOperationStartedAt) / 1000,
1268
+ METRIC_NAMES.HostShutdownDuration,
1269
+ Math.max(0, performance.now() - this.shutdownOperationStartedAt) / MILLISECONDS_PER_SECOND,
1223
1270
  {
1224
1271
  outcome:
1225
1272
  result.outcome === ZLinkFrameworkTerminationOutcome.Stopped
@@ -1229,7 +1276,7 @@ export class ZLinkFrameworkRuntimeHost
1229
1276
  );
1230
1277
  }
1231
1278
  if (result.outcome === ZLinkFrameworkTerminationOutcome.ForceStopped) {
1232
- this.metrics.count('zlink.host.shutdown.forced', 1, {
1279
+ this.metrics.count(METRIC_NAMES.HostShutdownForced, 1, {
1233
1280
  reason: terminationReasonMetricName(result.reason)
1234
1281
  });
1235
1282
  }
@@ -1251,14 +1298,18 @@ export class ZLinkFrameworkRuntimeHost
1251
1298
  this.notifyTopologyHostStateChanged();
1252
1299
  const status = this.status;
1253
1300
  for (const observer of this.runtimeObservers) {
1254
- if (state === ZLinkFrameworkRuntimeState.Stopped) {
1255
- observer.seal(status, this.runtimeObservationSource);
1256
- } else {
1257
- observer.push(status, this.runtimeObservationSource);
1258
- }
1301
+ this.publishRuntimeStatus(observer, status);
1259
1302
  }
1260
- if (state === ZLinkFrameworkRuntimeState.Stopped) {
1261
- this.runtimeObservers.clear();
1303
+ }
1304
+
1305
+ private publishRuntimeStatus(
1306
+ observer: RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>,
1307
+ status: ZLinkFrameworkRuntimeStatus
1308
+ ): void {
1309
+ if (runtimeObservationIsTerminal(status.state)) {
1310
+ observer.complete(status, this.runtimeObservationSource);
1311
+ } else {
1312
+ observer.push(status, this.runtimeObservationSource);
1262
1313
  }
1263
1314
  }
1264
1315
 
@@ -1410,7 +1461,9 @@ export class ZLinkFrameworkRuntimeHost
1410
1461
  const locationRuntime = await this.locationOwner.startForRuntime(
1411
1462
  this.meshRouters.primaryMeshName(),
1412
1463
  spotNodeRuntime,
1413
- channelRuntime
1464
+ channelRuntime,
1465
+ this.executionState.abortController.signal,
1466
+ () => this.shutdownDeadline!.signal
1414
1467
  );
1415
1468
  startedLocationRuntime = locationRuntime;
1416
1469
  if (locationRuntime !== undefined) {
@@ -1462,15 +1515,27 @@ export class ZLinkFrameworkRuntimeHost
1462
1515
  this.setRuntimeState(ZLinkFrameworkRuntimeState.Serving);
1463
1516
  this.lifecycleSink?.push('framework:started');
1464
1517
  } catch (error) {
1518
+ if (this.shutdownDeadline !== undefined && isAbortError(error)) throw error;
1465
1519
  await statefulAuthorityRoutes?.stop();
1466
- await rollbackRuntimeStart({
1467
- context,
1468
- startedLocationRuntime,
1469
- streamRuntime,
1470
- spotNodeRuntime,
1471
- channelRuntime,
1472
- ownedStores: registeredRuntimeStores(this.options.registration)
1473
- });
1520
+ try {
1521
+ await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
1522
+ rollbackRuntimeStart({
1523
+ context,
1524
+ startedLocationRuntime: startedLocationRuntime ?? this.locationOwner.currentRuntime,
1525
+ shutdownSignal: this.shutdownDeadline!.signal,
1526
+ streamRuntime,
1527
+ spotNodeRuntime,
1528
+ channelRuntime,
1529
+ ownedStores: registeredRuntimeStores(this.options.registration)
1530
+ })
1531
+ );
1532
+ } catch (cleanupError) {
1533
+ this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
1534
+ 'framework start rollback',
1535
+ cleanupError
1536
+ );
1537
+ throw new AggregateError([error, cleanupError], 'Framework start and rollback failed.');
1538
+ }
1474
1539
  this.executionState = undefined;
1475
1540
  this.channelRuntime = undefined;
1476
1541
  this.spotNodeRuntime = undefined;
@@ -1484,7 +1549,9 @@ export class ZLinkFrameworkRuntimeHost
1484
1549
  }
1485
1550
 
1486
1551
  async stop(): Promise<void> {
1487
- await this.runLifecycle(() => this.stopCore());
1552
+ await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
1553
+ this.runLifecycle(() => this.stopCore())
1554
+ );
1488
1555
  }
1489
1556
 
1490
1557
  private runtimeMetricMeshSnapshots(): readonly ZLinkRuntimeMetricMeshSnapshot[] {
@@ -1537,6 +1604,7 @@ export class ZLinkFrameworkRuntimeHost
1537
1604
  if (state === undefined) {
1538
1605
  return;
1539
1606
  }
1607
+ state.abortController.abort();
1540
1608
 
1541
1609
  const channelRuntime = this.channelRuntime;
1542
1610
  const spotNodeRuntime = this.spotNodeRuntime;
@@ -1545,24 +1613,25 @@ export class ZLinkFrameworkRuntimeHost
1545
1613
  this.stopTopologyObservers();
1546
1614
  this.removeOwnerLeaseRecoveryPublication();
1547
1615
  const locationSnapshot = this.locationOwner.clearForStop();
1548
- this.executionState = undefined;
1549
- this.channelRuntime = undefined;
1550
- this.spotNodeRuntime = undefined;
1551
- this.streamRuntime = undefined;
1552
- this.statefulAuthorityRoutes = undefined;
1553
- this.cachedLocationSpotRouteResolver = undefined;
1554
1616
  this.lifecycleSink?.push('framework:stop');
1555
1617
  await statefulAuthorityRoutes?.stop();
1556
1618
  await stopRuntimeParts({
1557
1619
  state,
1558
1620
  locationSnapshot,
1559
1621
  cleanupDeadline: this.runtimeDeadline,
1622
+ shutdownSignal: this.shutdownDeadline!.signal,
1560
1623
  streamRuntime,
1561
1624
  spotNodeRuntime,
1562
1625
  channelRuntime,
1563
1626
  serviceRelocation: this.serviceRelocation,
1564
1627
  ownedStores: registeredRuntimeStores(this.options.registration)
1565
1628
  });
1629
+ this.executionState = undefined;
1630
+ this.channelRuntime = undefined;
1631
+ this.spotNodeRuntime = undefined;
1632
+ this.streamRuntime = undefined;
1633
+ this.statefulAuthorityRoutes = undefined;
1634
+ this.cachedLocationSpotRouteResolver = undefined;
1566
1635
  this.listenerRecords.clear();
1567
1636
  this.lifecycleSink?.push('framework:stopped');
1568
1637
  if (this.shutdownOperation === undefined) {
@@ -1628,7 +1697,7 @@ export class ZLinkFrameworkRuntimeHost
1628
1697
  pollingIntervalMs:
1629
1698
  this.options.registration.locations.options.pollingIntervalMs ??
1630
1699
  zlinkDefaultLocationOptions.pollingIntervalMs,
1631
- pageSize: 1000,
1700
+ pageSize: ZLINK_PROVIDER_MAX_PAGE_SIZE,
1632
1701
  reportError: (error) =>
1633
1702
  this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
1634
1703
  'stateful authority route reconciliation',
@@ -1657,11 +1726,6 @@ export class ZLinkFrameworkRuntimeHost
1657
1726
  ): void {
1658
1727
  for (const [meshName, node] of spotNodeRuntime.meshNodesByName) {
1659
1728
  const activationNode = node as typeof node & {
1660
- setSpotAdmissionProvider?: (provider: {
1661
- isClosing(spotId: string): boolean;
1662
- awaitCloseDecision(spotId: string): Promise<void> | undefined;
1663
- runtimeState(): ZLinkFrameworkRuntimeState;
1664
- }) => void;
1665
1729
  registerAsyncInstanceActivationAuthority?: (
1666
1730
  authority: ServiceAsyncInstanceActivationAuthority
1667
1731
  ) => void;
@@ -1677,11 +1741,6 @@ export class ZLinkFrameworkRuntimeHost
1677
1741
  };
1678
1742
  const spotManager = this.spotManager;
1679
1743
  if (spotManager !== undefined) {
1680
- activationNode.setSpotAdmissionProvider?.({
1681
- isClosing: (spotId) => spotManager.isSpotClosing(meshName, spotId),
1682
- awaitCloseDecision: (spotId) => spotManager.pendingSpotCloseDecision(meshName, spotId),
1683
- runtimeState: () => this.runtimeState
1684
- });
1685
1744
  this.registerInstanceApplicationLifecycle(meshName, activationNode, spotManager);
1686
1745
  }
1687
1746
  activationNode.registerAsyncInstanceActivationAuthority?.(
@@ -1893,6 +1952,7 @@ export class ZLinkFrameworkRuntimeHost
1893
1952
  } catch (error) {
1894
1953
  throw new ZLinkDrainingStatePublishError(error);
1895
1954
  }
1955
+ await awaitWithDrainSignal(this.serviceRelocation.drainTargetAttempts(), signal);
1896
1956
  }
1897
1957
 
1898
1958
  private async cleanupOwnerForDrain(signal: AbortSignal): Promise<void> {
@@ -1929,7 +1989,6 @@ export class ZLinkFrameworkRuntimeHost
1929
1989
  ),
1930
1990
  isMaterializing: (target) =>
1931
1991
  spotManager.isInstanceMaterializing(meshName, target.targetSpotId as never),
1932
- isClosing: (target) => spotManager.isInstanceClosing(meshName, target.targetSpotId as never),
1933
1992
  isIdleEvicting: (target) =>
1934
1993
  spotManager.isInstanceSpotIdleEvicting(meshName, target.targetSpotId as never),
1935
1994
  beginIdleEviction: (target) =>
@@ -1965,19 +2024,6 @@ export class ZLinkFrameworkRuntimeHost
1965
2024
  setSpotManager(spotManager: DefaultZLinkSpotManager): void {
1966
2025
  this.spotManager = spotManager;
1967
2026
  for (const [meshName, node] of this.spotNodeRuntime?.meshNodesByName ?? []) {
1968
- const admissionNode = node as typeof node & {
1969
- setSpotAdmissionProvider?: (provider: {
1970
- isClosing(spotId: string): boolean;
1971
- awaitCloseDecision(spotId: string): Promise<void> | undefined;
1972
- runtimeState(): ZLinkFrameworkRuntimeState;
1973
- }) => void;
1974
- };
1975
- admissionNode.setSpotAdmissionProvider?.({
1976
- isClosing: (spotId: string) => spotManager.isSpotClosing(meshName, spotId),
1977
- awaitCloseDecision: (spotId: string) =>
1978
- spotManager.pendingSpotCloseDecision(meshName, spotId),
1979
- runtimeState: () => this.runtimeState
1980
- });
1981
2027
  this.registerInstanceApplicationLifecycle(meshName, node, spotManager);
1982
2028
  }
1983
2029
  }
@@ -2099,7 +2145,10 @@ export class ZLinkFrameworkRuntimeHost
2099
2145
  detachedTaskRunner: this.detachedTaskRunner(),
2100
2146
  metrics: this.metrics,
2101
2147
  admission: this.admission,
2102
- statefulExecutionAllowed: () => this.ownerAdmissionOpen()
2148
+ statefulExecution: {
2149
+ admissionOpen: () => this.ownerAdmissionOpen(),
2150
+ hostState: () => this.runtimeState
2151
+ }
2103
2152
  }).create(this.actorTransferRuntime),
2104
2153
  activationAdmission: this.activationAdmission
2105
2154
  };
@@ -2160,7 +2209,7 @@ export class ZLinkFrameworkRuntimeHost
2160
2209
  );
2161
2210
  }
2162
2211
  const meshNode = this.spotNodeRuntime?.meshNode(meshName);
2163
- const descriptors = (await locationStore.listMeshNodes(meshName, undefined, signal)).items;
2212
+ const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
2164
2213
  const selected = await selectReadyLocationPlacementDescriptor(
2165
2214
  descriptors,
2166
2215
  meshNode,
@@ -2270,7 +2319,7 @@ export class ZLinkFrameworkRuntimeHost
2270
2319
  );
2271
2320
  }
2272
2321
  const meshNode = this.spotNodeRuntime?.meshNode(meshName);
2273
- const descriptors = (await locationStore.listMeshNodes(meshName, undefined, signal)).items;
2322
+ const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
2274
2323
  const selected = await selectReadyLocationPlacementDescriptor(
2275
2324
  descriptors,
2276
2325
  meshNode,
@@ -2381,7 +2430,7 @@ export class ZLinkFrameworkRuntimeHost
2381
2430
  try {
2382
2431
  payload = {
2383
2432
  packetName: 'ZLinkFrameworkUserSpotReply',
2384
- contentType: 'application/octet-stream',
2433
+ contentType: ZlinkStreamContentType.Raw,
2385
2434
  payload: Buffer.from(message.data())
2386
2435
  };
2387
2436
  } finally {
@@ -2560,7 +2609,7 @@ export class ZLinkFrameworkRuntimeHost
2560
2609
  }
2561
2610
  return node.requestUserSpotClose(targetNodeRid, request, timeoutMs);
2562
2611
  },
2563
- defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? 30_000,
2612
+ defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
2564
2613
  messageSerializers: this.options.registration.messageSerializers
2565
2614
  });
2566
2615
  }
@@ -2582,6 +2631,10 @@ export class ZLinkFrameworkRuntimeHost
2582
2631
  notifyEntrySpotActorCreated: (nodeRid, actor, createRequest, signal) =>
2583
2632
  this.spotNodeRuntime?.notifyEntrySpotActorCreated(nodeRid, actor, createRequest, signal) ??
2584
2633
  Promise.resolve(undefined),
2634
+ notifyEntrySpotActorJoined: (actor, signal) =>
2635
+ this.spotNodeRuntime?.notifyPrimaryEntrySpotActorJoined(actor, signal) ?? Promise.resolve(),
2636
+ notifyEntrySpotActorLeft: (actor, signal) =>
2637
+ this.spotNodeRuntime?.notifyPrimaryEntrySpotActorLeft(actor, signal) ?? Promise.resolve(),
2585
2638
  locationLifecycle: () => this.locationOwner.currentLifecycle,
2586
2639
  primaryMeshName: () => this.meshRouters.primaryMeshName(),
2587
2640
  actorMeshName: (actorType) => this.meshRouters.actorMeshName(actorType),
@@ -2699,6 +2752,7 @@ export class ZLinkFrameworkRuntimeHost
2699
2752
  }).create();
2700
2753
  return {
2701
2754
  ...options,
2755
+ errorSink: this.runtimeOrPreStartErrorSink,
2702
2756
  peerAdmissionSealed: (meshName: string) => !this.admission.accepts(meshName),
2703
2757
  messageFollowReceiver: (record: ServiceMessageFollowRecord) => {
2704
2758
  if (record.source.kind === 'actor') {
@@ -2753,14 +2807,8 @@ export class ZLinkFrameworkRuntimeHost
2753
2807
  );
2754
2808
  }
2755
2809
  const binding = record.kindData;
2756
- const replyBindingFailure = (
2757
- kind: ZLinkFrameworkInternalErrorKind,
2758
- message: string
2759
- ): void => {
2760
- const terminal =
2761
- kind === ZLinkFrameworkInternalErrorKind.ActorGenerationStale
2762
- ? { terminalResult: RequestResult.InvalidState, failureCode: 0 }
2763
- : internalFrameworkWireReply(createInternalFrameworkException(kind, message));
2810
+ const replyBindingFailure = (kind: ZLinkFrameworkInternalErrorKind): void => {
2811
+ const terminal = internalFrameworkWireReply(kind);
2764
2812
  if (
2765
2813
  record.replyFailure?.(terminal.terminalResult, terminal.failureCode) !== SubmitResult.Ok
2766
2814
  ) {
@@ -2784,17 +2832,11 @@ export class ZLinkFrameworkRuntimeHost
2784
2832
  nativeActorRef.actorId !== binding.actor.actorId ||
2785
2833
  !routingIdsEqual(nativeActorRef.nodeRid, binding.actor.nodeRid)
2786
2834
  ) {
2787
- replyBindingFailure(
2788
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2789
- `Actor '${binding.actor.actorId}' binding target is no longer current.`
2790
- );
2835
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2791
2836
  return;
2792
2837
  }
2793
2838
  if (nativeActorRef.generation !== binding.actor.generation) {
2794
- replyBindingFailure(
2795
- ZLinkFrameworkInternalErrorKind.ActorGenerationStale,
2796
- `Actor '${binding.actor.actorId}' binding object generation is stale.`
2797
- );
2839
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorGenerationStale);
2798
2840
  return;
2799
2841
  }
2800
2842
  const node =
@@ -2809,10 +2851,7 @@ export class ZLinkFrameworkRuntimeHost
2809
2851
  state.locationGeneration !== binding.authorityOwnerGeneration ||
2810
2852
  state.isMoving
2811
2853
  ) {
2812
- replyBindingFailure(
2813
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2814
- `Actor '${binding.actor.actorId}' binding authority fence is stale.`
2815
- );
2854
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2816
2855
  return;
2817
2856
  }
2818
2857
  const sessionOwnerIsLocal =
@@ -2826,6 +2865,7 @@ export class ZLinkFrameworkRuntimeHost
2826
2865
  nodeRid: binding.actor.nodeRid
2827
2866
  };
2828
2867
  if (sessionOwnerIsLocal) {
2868
+ releaseApplicationJobPermitBeforeHandler();
2829
2869
  await this.streamBindingRuntime.retireRemoteBinding(
2830
2870
  actorRef,
2831
2871
  binding.sessionRid,
@@ -2842,10 +2882,7 @@ export class ZLinkFrameworkRuntimeHost
2842
2882
  binding.sessionRid
2843
2883
  );
2844
2884
  if (target === undefined) {
2845
- replyBindingFailure(
2846
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2847
- `Actor '${binding.actor.actorId}' Session route is unavailable.`
2848
- );
2885
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2849
2886
  return;
2850
2887
  }
2851
2888
  const installed = state.installBoundSessionBinding({
@@ -2858,10 +2895,7 @@ export class ZLinkFrameworkRuntimeHost
2858
2895
  bindingGeneration: binding.bindingGeneration
2859
2896
  });
2860
2897
  if (!installed) {
2861
- replyBindingFailure(
2862
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2863
- `Actor '${binding.actor.actorId}' Session binding generation is stale.`
2864
- );
2898
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2865
2899
  return;
2866
2900
  }
2867
2901
  replyBindingSuccess();
@@ -3082,7 +3116,7 @@ export class ZLinkFrameworkRuntimeHost
3082
3116
  return reporter;
3083
3117
  }
3084
3118
 
3085
- private detachedTaskRunner(): ZLinkDetachedTaskRunner {
3119
+ detachedTaskRunner(): ZLinkDetachedTaskRunner {
3086
3120
  return {
3087
3121
  runDetached: (taskName, callback) => {
3088
3122
  const runner = this.executionState?.taskRunner;
@@ -3158,8 +3192,8 @@ export class ZLinkFrameworkRuntimeHost
3158
3192
  undefined,
3159
3193
  async (meshName, nodeRid, expectedLifecycleGeneration, signal) => {
3160
3194
  const descriptor = (
3161
- await authority.listMeshNodes(meshName, undefined, signal)
3162
- ).items.find(
3195
+ await listAllMeshNodeDescriptors(authority, meshName, signal)
3196
+ ).find(
3163
3197
  (candidate) =>
3164
3198
  routingIdsEqual(candidate.rid, nodeRid) &&
3165
3199
  candidate.lifecycleGeneration === expectedLifecycleGeneration
@@ -3256,7 +3290,7 @@ export function hasExactPeerReadiness(
3256
3290
  peer.routingId !== null &&
3257
3291
  String(peer.routingId) === String(descriptor.rid) &&
3258
3292
  peer.lifecycleGeneration === descriptor.lifecycleGeneration &&
3259
- peer.state === 3
3293
+ peer.state === MeshPeerRuntimeState.Serving
3260
3294
  )
3261
3295
  )
3262
3296
  );
@@ -3266,7 +3300,11 @@ export {
3266
3300
  ZLinkActorTransferAuthorityRuntime,
3267
3301
  transferIdString
3268
3302
  } from './actor-transfer-authority-runtime';
3269
- export { ZLinkRetiringRollbackError, ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
3303
+ export {
3304
+ ZLinkDrainingStatePublishError,
3305
+ ZLinkRetiringRollbackError,
3306
+ ZLinkRouteMeshRuntimeCoordinator
3307
+ } from './route-mesh-runtime';
3270
3308
  export { ZLinkRelocationStateIncompatibleError } from './service-relocation-host-runtime';
3271
3309
  export {
3272
3310
  ZLinkHostSpotAddressTransport,
@@ -3285,7 +3323,7 @@ async function waitForForcedSessionNotification(
3285
3323
  if (operation === undefined) return;
3286
3324
  let timeoutHandle: ReturnType<typeof setTimeout> | undefined;
3287
3325
  const timeout = new Promise<void>((resolve) => {
3288
- timeoutHandle = setTimeout(resolve, 100);
3326
+ timeoutHandle = setTimeout(resolve, HOST_SHUTDOWN_POLL_INTERVAL_MS);
3289
3327
  });
3290
3328
  try {
3291
3329
  await Promise.race([operation.catch(() => undefined), timeout]);
@@ -3318,13 +3356,6 @@ async function awaitWithDrainSignal(
3318
3356
  });
3319
3357
  }
3320
3358
 
3321
- class ZLinkDrainingStatePublishError extends Error {
3322
- constructor(cause: unknown) {
3323
- super('Failed to publish draining peer rows.', { cause });
3324
- this.name = 'ZLinkDrainingStatePublishError';
3325
- }
3326
- }
3327
-
3328
3359
  function resolveBackendAdapterFactory(internalOptions: unknown): ZLinkBackendAdapterFactory {
3329
3360
  if (
3330
3361
  typeof internalOptions === 'object' &&
@@ -3483,7 +3514,7 @@ function waitForPlacementReadiness(signal?: AbortSignal): Promise<void> {
3483
3514
  const timer = setTimeout(() => {
3484
3515
  signal?.removeEventListener('abort', abort);
3485
3516
  resolve();
3486
- }, 10);
3517
+ }, HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS);
3487
3518
  const abort = () => {
3488
3519
  clearTimeout(timer);
3489
3520
  signal?.removeEventListener('abort', abort);