@zlink-systems/framework 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
  3. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  4. package/dist/contracts/Common/CoreTypes.js +7 -0
  5. package/dist/contracts/Common/index.d.ts +1 -1
  6. package/dist/contracts/Common/index.js +0 -1
  7. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  8. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  9. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  10. package/dist/contracts/Configuration/Registration.js +58 -36
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  14. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  15. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  16. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  17. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  18. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  19. package/dist/contracts/Handlers/JsonContract.js +10 -4
  20. package/dist/contracts/Locations/Authority.d.ts +1 -1
  21. package/dist/contracts/Locations/Authority.js +3 -2
  22. package/dist/contracts/Locations/Options.js +1 -1
  23. package/dist/contracts/Locations/Stores.d.ts +12 -0
  24. package/dist/contracts/Locations/Stores.js +9 -0
  25. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
  26. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  27. package/dist/internal.d.ts +5 -0
  28. package/dist/internal.js +16 -1
  29. package/dist/nest-integration.d.ts +4 -2
  30. package/dist/nest-integration.js +14 -4
  31. package/dist/runtime/abort.d.ts +1 -0
  32. package/dist/runtime/abort.js +8 -5
  33. package/dist/runtime/activation-admission.d.ts +28 -0
  34. package/dist/runtime/activation-admission.js +57 -0
  35. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  36. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  37. package/dist/runtime/actors/actor-client.d.ts +2 -2
  38. package/dist/runtime/actors/actor-client.js +42 -143
  39. package/dist/runtime/actors/actor-context.d.ts +3 -5
  40. package/dist/runtime/actors/actor-context.js +19 -17
  41. package/dist/runtime/actors/actor-handoff.d.ts +13 -7
  42. package/dist/runtime/actors/actor-handoff.js +36 -25
  43. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  44. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  45. package/dist/runtime/actors/actor-local-native-join.js +85 -123
  46. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  47. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  48. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  49. package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
  50. package/dist/runtime/actors/actor-remote-joiner.js +11 -17
  51. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  52. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  53. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  54. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  55. package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
  56. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  57. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  58. package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
  59. package/dist/runtime/actors/bound-session-wire.js +2 -7
  60. package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
  61. package/dist/runtime/actors/deferred-join-completion.js +21 -0
  62. package/dist/runtime/actors/index.d.ts +10 -8
  63. package/dist/runtime/actors/index.js +101 -73
  64. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  65. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  66. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  67. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  68. package/dist/runtime/admission.d.ts +7 -1
  69. package/dist/runtime/admission.js +11 -1
  70. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  71. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  72. package/dist/runtime/backend/contracts/index.d.ts +8 -33
  73. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
  74. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  75. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  76. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
  77. package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
  78. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
  79. package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
  80. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  81. package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
  82. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  83. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
  84. package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
  85. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
  86. package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
  87. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  88. package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
  89. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  90. package/dist/runtime/backend/runtime-values.js +2 -0
  91. package/dist/runtime/channels/channel-clients.d.ts +20 -9
  92. package/dist/runtime/channels/channel-clients.js +68 -60
  93. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  94. package/dist/runtime/channels/channel-envelope.js +47 -29
  95. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  96. package/dist/runtime/channels/channel-outbound-operations.js +9 -18
  97. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  98. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  99. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  100. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  101. package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
  102. package/dist/runtime/channels/channel-runtime-manager.js +4 -12
  103. package/dist/runtime/channels/channel-socket-options.js +3 -2
  104. package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
  105. package/dist/runtime/channels/channel-socket-registry.js +296 -235
  106. package/dist/runtime/channels/channel-transports.d.ts +11 -20
  107. package/dist/runtime/channels/channel-transports.js +68 -47
  108. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  109. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  110. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  111. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  112. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  113. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  114. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  115. package/dist/runtime/channels/fanout-location-runtime.js +133 -81
  116. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  117. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  118. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  119. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  120. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  121. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  122. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  123. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  124. package/dist/runtime/diagnostics/flow-context.js +16 -2
  125. package/dist/runtime/diagnostics/index.d.ts +4 -2
  126. package/dist/runtime/diagnostics/index.js +14 -4
  127. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  128. package/dist/runtime/diagnostics/message-flow.js +10 -19
  129. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  130. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  131. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  132. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  133. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  134. package/dist/runtime/disposal.d.ts +5 -0
  135. package/dist/runtime/disposal.js +22 -0
  136. package/dist/runtime/execution/index.d.ts +22 -9
  137. package/dist/runtime/execution/index.js +107 -37
  138. package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
  139. package/dist/runtime/execution/serial-execution-queue.js +99 -26
  140. package/dist/runtime/execution/state-lane.d.ts +8 -1
  141. package/dist/runtime/execution/state-lane.js +118 -3
  142. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  143. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  144. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  145. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  146. package/dist/runtime/foundation/listener-records.d.ts +11 -0
  147. package/dist/runtime/foundation/listener-records.js +20 -0
  148. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  149. package/dist/runtime/foundation/operation-identity.js +9 -5
  150. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  151. package/dist/runtime/foundation/operation-registry.js +34 -44
  152. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
  153. package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
  154. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  155. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  156. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
  157. package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
  158. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  159. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  160. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  161. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  162. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  163. package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
  164. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  165. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  166. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  167. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
  168. package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
  169. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
  170. package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
  171. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  172. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  173. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  174. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
  175. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  176. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  177. package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
  178. package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
  179. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
  180. package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
  181. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
  182. package/dist/runtime/foundation/service-topology-registry.js +22 -61
  183. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  184. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  185. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  186. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  187. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  188. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  189. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  190. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  191. package/dist/runtime/framework-errors-internal.js +343 -122
  192. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  193. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  194. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  195. package/dist/runtime/host/actor-packet-relay.js +48 -91
  196. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  197. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  198. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  199. package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
  200. package/dist/runtime/host/actor-transfer-runtime.js +210 -256
  201. package/dist/runtime/host/application-job-queue.js +16 -33
  202. package/dist/runtime/host/bound-session-relay.js +1 -1
  203. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  204. package/dist/runtime/host/index.d.ts +19 -14
  205. package/dist/runtime/host/index.js +234 -175
  206. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  207. package/dist/runtime/host/instance-activation-authority.js +17 -45
  208. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  209. package/dist/runtime/host/location-runtime-owner.js +2 -2
  210. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  211. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  212. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  213. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  214. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  215. package/dist/runtime/host/remote-bound-session-relay.js +11 -23
  216. package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
  217. package/dist/runtime/host/route-mesh-runtime.js +178 -257
  218. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  219. package/dist/runtime/host/runtime-shutdown.js +18 -21
  220. package/dist/runtime/host/service-relocation-control.js +6 -1
  221. package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
  222. package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
  223. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  224. package/dist/runtime/host/spot-address-transport.js +34 -136
  225. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  226. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  227. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
  228. package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
  229. package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
  230. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
  231. package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
  232. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  233. package/dist/runtime/locations/authority-key-codec.js +4 -3
  234. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  235. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  236. package/dist/runtime/locations/creation-operation-id.js +6 -4
  237. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  238. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  239. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  240. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  241. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  242. package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
  243. package/dist/runtime/locations/key-codec.js +3 -2
  244. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  245. package/dist/runtime/locations/lease-tracker.js +7 -11
  246. package/dist/runtime/locations/lifecycle.d.ts +5 -10
  247. package/dist/runtime/locations/lifecycle.js +4 -33
  248. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  249. package/dist/runtime/locations/location-store-failure.js +7 -0
  250. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  251. package/dist/runtime/locations/location-store-pages.js +13 -0
  252. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  253. package/dist/runtime/locations/location-store-repository.js +303 -332
  254. package/dist/runtime/locations/relocation-blob.js +18 -5
  255. package/dist/runtime/locations/resolvers.d.ts +5 -5
  256. package/dist/runtime/locations/resolvers.js +44 -30
  257. package/dist/runtime/locations/runtime.d.ts +5 -4
  258. package/dist/runtime/locations/runtime.js +123 -92
  259. package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
  260. package/dist/runtime/locations/spot-location-claims.js +40 -23
  261. package/dist/runtime/messaging/payload-codec.js +26 -20
  262. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  263. package/dist/runtime/messaging/submission-result.js +48 -0
  264. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
  265. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
  266. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
  267. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
  268. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
  269. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
  270. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
  271. package/dist/runtime/spots/index.d.ts +29 -29
  272. package/dist/runtime/spots/index.js +441 -313
  273. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
  274. package/dist/runtime/spots/spot-activation-registry.js +27 -60
  275. package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
  276. package/dist/runtime/spots/spot-activation-state.js +4 -17
  277. package/dist/runtime/spots/spot-activation.d.ts +10 -9
  278. package/dist/runtime/spots/spot-activation.js +103 -81
  279. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  280. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  281. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  282. package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
  283. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
  284. package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
  285. package/dist/runtime/spots/spot-actor-membership.js +44 -53
  286. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  287. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  288. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  289. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  290. package/dist/runtime/spots/spot-context.d.ts +2 -2
  291. package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
  292. package/dist/runtime/spots/spot-entry-activation.js +9 -21
  293. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  294. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  295. package/dist/runtime/spots/spot-manager-public.js +6 -5
  296. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  297. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
  298. package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
  299. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  300. package/dist/runtime/spots/spot-outbound.js +10 -37
  301. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  302. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  303. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  304. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  305. package/dist/runtime/spots/spot-route-replies.js +3 -1
  306. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
  307. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
  308. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
  309. package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
  310. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  311. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  312. package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
  313. package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
  314. package/dist/runtime/spots/spot-serial-executor.js +9 -2
  315. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
  316. package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
  317. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  318. package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
  319. package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
  320. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
  321. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  322. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  323. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  324. package/dist/runtime/streams/bound-session-service.js +12 -19
  325. package/dist/runtime/streams/index.d.ts +15 -14
  326. package/dist/runtime/streams/index.js +38 -39
  327. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  328. package/dist/runtime/streams/managed-stream.js +17 -8
  329. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  330. package/dist/runtime/streams/protocol.d.ts +6 -33
  331. package/dist/runtime/streams/protocol.js +38 -110
  332. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  333. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  334. package/dist/runtime/streams/session-calls.d.ts +1 -1
  335. package/dist/runtime/streams/session-calls.js +5 -4
  336. package/dist/runtime/streams/session-context.d.ts +6 -6
  337. package/dist/runtime/streams/session-context.js +22 -4
  338. package/dist/runtime/streams/session-requests.js +2 -1
  339. package/dist/runtime/streams/session-serial-executor.js +2 -2
  340. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  341. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  342. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  343. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  344. package/dist/runtime/workers/index.d.ts +2 -2
  345. package/dist/runtime/workers/index.js +5 -4
  346. package/package.json +3 -3
  347. package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
  348. package/src/contracts/Common/CoreTypes.ts +7 -0
  349. package/src/contracts/Common/index.ts +1 -1
  350. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  351. package/src/contracts/Configuration/Registration.ts +92 -48
  352. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  353. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  354. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  355. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  356. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  357. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  358. package/src/contracts/Handlers/JsonContract.ts +14 -4
  359. package/src/contracts/Locations/Authority.ts +7 -3
  360. package/src/contracts/Locations/Options.ts +1 -1
  361. package/src/contracts/Locations/Stores.ts +14 -0
  362. package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
  363. package/src/contracts/Spots/Contracts.ts +1 -1
  364. package/src/internal.ts +15 -0
  365. package/src/nest-integration.ts +28 -10
  366. package/src/runtime/abort.ts +6 -5
  367. package/src/runtime/activation-admission.ts +72 -0
  368. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  369. package/src/runtime/actors/actor-client.ts +77 -204
  370. package/src/runtime/actors/actor-context.ts +45 -39
  371. package/src/runtime/actors/actor-handoff.ts +55 -45
  372. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  373. package/src/runtime/actors/actor-local-native-join.ts +174 -215
  374. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  375. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  376. package/src/runtime/actors/actor-remote-joiner.ts +15 -36
  377. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  378. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  379. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  380. package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
  381. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  382. package/src/runtime/actors/actor-source-transfer.ts +5 -18
  383. package/src/runtime/actors/bound-session-wire.ts +2 -8
  384. package/src/runtime/actors/deferred-join-completion.ts +44 -0
  385. package/src/runtime/actors/index.ts +122 -88
  386. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  387. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  388. package/src/runtime/admission.ts +13 -2
  389. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  390. package/src/runtime/backend/contracts/index.ts +15 -42
  391. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
  392. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  393. package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
  394. package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
  395. package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
  396. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  397. package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
  398. package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
  399. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
  400. package/src/runtime/backend/raw-binding-port.ts +14 -1
  401. package/src/runtime/backend/runtime-values.ts +4 -1
  402. package/src/runtime/channels/channel-clients.ts +132 -96
  403. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  404. package/src/runtime/channels/channel-envelope.ts +58 -29
  405. package/src/runtime/channels/channel-outbound-operations.ts +10 -31
  406. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  407. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  408. package/src/runtime/channels/channel-runtime-manager.ts +8 -15
  409. package/src/runtime/channels/channel-socket-options.ts +8 -2
  410. package/src/runtime/channels/channel-socket-registry.ts +369 -262
  411. package/src/runtime/channels/channel-transports.ts +161 -115
  412. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  413. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  414. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  415. package/src/runtime/channels/fanout-location-runtime.ts +175 -106
  416. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  417. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  418. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  419. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  420. package/src/runtime/diagnostics/flow-context.ts +16 -2
  421. package/src/runtime/diagnostics/index.ts +27 -17
  422. package/src/runtime/diagnostics/message-flow.ts +15 -25
  423. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  424. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  425. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  426. package/src/runtime/disposal.ts +19 -0
  427. package/src/runtime/execution/index.ts +116 -38
  428. package/src/runtime/execution/serial-execution-queue.ts +179 -34
  429. package/src/runtime/execution/state-lane.ts +142 -4
  430. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  431. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  432. package/src/runtime/foundation/listener-records.ts +21 -0
  433. package/src/runtime/foundation/operation-identity.ts +11 -5
  434. package/src/runtime/foundation/operation-registry.ts +33 -50
  435. package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
  436. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  437. package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
  438. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  439. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  440. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  441. package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
  442. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  443. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  444. package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
  445. package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
  446. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  447. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  448. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
  449. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  450. package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
  451. package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
  452. package/src/runtime/foundation/service-topology-registry.ts +30 -79
  453. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  454. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  455. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  456. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  457. package/src/runtime/framework-errors-internal.ts +380 -134
  458. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  459. package/src/runtime/host/actor-packet-relay.ts +57 -147
  460. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  461. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  462. package/src/runtime/host/actor-transfer-runtime.ts +266 -418
  463. package/src/runtime/host/application-job-queue.ts +28 -34
  464. package/src/runtime/host/bound-session-relay.ts +1 -2
  465. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  466. package/src/runtime/host/index.ts +408 -312
  467. package/src/runtime/host/instance-activation-authority.ts +89 -109
  468. package/src/runtime/host/location-runtime-owner.ts +4 -2
  469. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  470. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  471. package/src/runtime/host/remote-bound-session-relay.ts +12 -44
  472. package/src/runtime/host/route-mesh-runtime.ts +236 -275
  473. package/src/runtime/host/runtime-shutdown.ts +17 -21
  474. package/src/runtime/host/service-relocation-control.ts +14 -1
  475. package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
  476. package/src/runtime/host/spot-address-transport.ts +73 -195
  477. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  478. package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
  479. package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
  480. package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
  481. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  482. package/src/runtime/locations/authority-key-codec.ts +7 -3
  483. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  484. package/src/runtime/locations/creation-operation-id.ts +6 -3
  485. package/src/runtime/locations/domain-store-contract.ts +12 -3
  486. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  487. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  488. package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
  489. package/src/runtime/locations/key-codec.ts +3 -2
  490. package/src/runtime/locations/lease-tracker.ts +8 -14
  491. package/src/runtime/locations/lifecycle.ts +16 -45
  492. package/src/runtime/locations/location-store-failure.ts +4 -0
  493. package/src/runtime/locations/location-store-pages.ts +18 -0
  494. package/src/runtime/locations/location-store-repository.ts +450 -478
  495. package/src/runtime/locations/relocation-blob.ts +17 -6
  496. package/src/runtime/locations/resolvers.ts +90 -58
  497. package/src/runtime/locations/runtime.ts +220 -110
  498. package/src/runtime/locations/spot-location-claims.ts +54 -26
  499. package/src/runtime/messaging/payload-codec.ts +35 -24
  500. package/src/runtime/messaging/submission-result.ts +57 -1
  501. package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
  502. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  503. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
  504. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
  505. package/src/runtime/spots/index.ts +687 -437
  506. package/src/runtime/spots/spot-activation-registry.ts +42 -71
  507. package/src/runtime/spots/spot-activation-state.ts +4 -16
  508. package/src/runtime/spots/spot-activation.ts +167 -115
  509. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  510. package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
  511. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
  512. package/src/runtime/spots/spot-actor-membership.ts +107 -75
  513. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  514. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  515. package/src/runtime/spots/spot-context.ts +3 -3
  516. package/src/runtime/spots/spot-entry-activation.ts +13 -33
  517. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  518. package/src/runtime/spots/spot-manager-public.ts +29 -21
  519. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  520. package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
  521. package/src/runtime/spots/spot-outbound.ts +47 -68
  522. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  523. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  524. package/src/runtime/spots/spot-route-replies.ts +6 -4
  525. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
  526. package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
  527. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  528. package/src/runtime/spots/spot-runtime-ports.ts +10 -43
  529. package/src/runtime/spots/spot-serial-executor.ts +10 -2
  530. package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
  531. package/src/runtime/spots/spot-timer.ts +3 -2
  532. package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
  533. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
  534. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  535. package/src/runtime/streams/bound-session-service.ts +23 -37
  536. package/src/runtime/streams/index.ts +102 -88
  537. package/src/runtime/streams/managed-stream.ts +29 -10
  538. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  539. package/src/runtime/streams/protocol.ts +34 -88
  540. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  541. package/src/runtime/streams/session-calls.ts +6 -5
  542. package/src/runtime/streams/session-context.ts +54 -10
  543. package/src/runtime/streams/session-requests.ts +2 -1
  544. package/src/runtime/streams/session-serial-executor.ts +2 -2
  545. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  546. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  547. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  548. package/src/runtime/workers/index.ts +13 -12
  549. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
  550. package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
  551. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  552. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  553. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  554. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  555. package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
  556. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  557. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -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>;
@@ -34,6 +38,7 @@ export declare class ZLinkSerialExecutionQueue {
34
38
  private readonly executeRecord;
35
39
  private readonly application;
36
40
  private readonly lifecycle;
41
+ private activeLifecycle?;
37
42
  private readonly ownerTimeBudget;
38
43
  private readonly lifecycleBurstLimit;
39
44
  private nextAcceptedSequence;
@@ -56,16 +61,16 @@ export declare class ZLinkSerialExecutionQueue {
56
61
  * It remains held through handler terminal completion.
57
62
  */
58
63
  submitPreAdmitted<T>(operation: () => Promise<T> | T, options?: ZLinkSerialWorkOptions, context?: unknown): Promise<T>;
59
- snapshot(): {
60
- readonly applicationMessages: number;
61
- readonly applicationBytes: number;
62
- readonly lifecycleMessages: number;
63
- readonly lifecycleBytes: number;
64
- };
64
+ /** Holds lifecycle FIFO through an operation result while its application turns can run. */
65
+ submitLifecycleOperation<T>(operation: () => Promise<T> | T, context?: ZLinkSerialLifecycleContext): Promise<T>;
66
+ visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void;
65
67
  get hasPendingWork(): boolean;
66
68
  whenIdle(): Promise<void>;
67
69
  /** Stops new submissions while allowing the accepted FIFO to finish. */
68
70
  close(): Promise<void>;
71
+ /** Stops admission within the lifecycle operation that owns this queue's close. */
72
+ closeAdmission(): void;
73
+ get admissionClosed(): boolean;
69
74
  private admit;
70
75
  private scheduleDrain;
71
76
  private drain;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkSerialExecutionQueue = exports.ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS = void 0;
4
+ const abort_1 = require("../abort");
5
+ const state_lane_1 = require("./state-lane");
4
6
  exports.ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS = Object.freeze({
5
7
  ownerTimeBudget: 10,
6
8
  lifecycleBurstLimit: 8
@@ -13,6 +15,7 @@ class ZLinkSerialExecutionQueue {
13
15
  executeRecord;
14
16
  application;
15
17
  lifecycle;
18
+ activeLifecycle;
16
19
  ownerTimeBudget;
17
20
  lifecycleBurstLimit;
18
21
  nextAcceptedSequence = 1n;
@@ -71,16 +74,19 @@ class ZLinkSerialExecutionQueue {
71
74
  submitPreAdmitted(operation, options = {}, context) {
72
75
  return this.admit(operation, options, context);
73
76
  }
74
- snapshot() {
75
- return {
76
- applicationMessages: this.application.records.length,
77
- applicationBytes: 0,
78
- lifecycleMessages: this.lifecycle.records.length,
79
- lifecycleBytes: 0
80
- };
77
+ /** Holds lifecycle FIFO through an operation result while its application turns can run. */
78
+ submitLifecycleOperation(operation, context) {
79
+ return this.admit(operation, { lane: 'lifecycle' }, context, undefined, true);
80
+ }
81
+ visitPendingApplication(visitor) {
82
+ for (const record of this.application.records)
83
+ visitor(record);
81
84
  }
82
85
  get hasPendingWork() {
83
- return (this.draining || this.application.records.length > 0 || this.lifecycle.records.length > 0);
86
+ return (this.draining ||
87
+ this.activeLifecycle !== undefined ||
88
+ this.application.records.length > 0 ||
89
+ this.lifecycle.records.length > 0);
84
90
  }
85
91
  whenIdle() {
86
92
  if (!this.hasPendingWork)
@@ -89,10 +95,17 @@ class ZLinkSerialExecutionQueue {
89
95
  }
90
96
  /** Stops new submissions while allowing the accepted FIFO to finish. */
91
97
  close() {
92
- this.closed = true;
98
+ this.closeAdmission();
93
99
  return this.whenIdle();
94
100
  }
95
- admit(operation, options, context, preparation) {
101
+ /** Stops admission within the lifecycle operation that owns this queue's close. */
102
+ closeAdmission() {
103
+ this.closed = true;
104
+ }
105
+ get admissionClosed() {
106
+ return this.closed;
107
+ }
108
+ admit(operation, options, context, preparation, operationEnvelope = false) {
96
109
  if (this.closed)
97
110
  throw new Error('The serial execution queue is closed.');
98
111
  const lane = options.lane ?? 'application';
@@ -109,6 +122,15 @@ class ZLinkSerialExecutionQueue {
109
122
  if (released)
110
123
  return;
111
124
  released = true;
125
+ if (this.activeLifecycle === record) {
126
+ this.activeLifecycle = undefined;
127
+ if (this.application.records.length > 0 || this.lifecycle.records.length > 0) {
128
+ this.scheduleDrain();
129
+ }
130
+ else if (!this.draining) {
131
+ this.resolveIdleWaiters();
132
+ }
133
+ }
112
134
  };
113
135
  const resolve = (value) => {
114
136
  if (settled)
@@ -126,6 +148,7 @@ class ZLinkSerialExecutionQueue {
126
148
  acceptedSequence: 0n,
127
149
  lane,
128
150
  operation,
151
+ operationEnvelope,
129
152
  context,
130
153
  preparation,
131
154
  preparationState: preparation === undefined ? 'ready' : 'idle',
@@ -197,7 +220,24 @@ class ZLinkSerialExecutionQueue {
197
220
  }
198
221
  this.claimStartedAt ??= performance.now();
199
222
  try {
200
- await this.executeRecord(record);
223
+ if (record.operationEnvelope) {
224
+ try {
225
+ const outcome = record.operation();
226
+ void Promise.resolve(outcome).then((value) => {
227
+ record.resolve(value);
228
+ record.release();
229
+ }, (error) => {
230
+ record.reject(error);
231
+ record.release();
232
+ });
233
+ }
234
+ catch (error) {
235
+ record.fail(error);
236
+ }
237
+ }
238
+ else {
239
+ await this.executeRecord(record);
240
+ }
201
241
  }
202
242
  catch (error) {
203
243
  record.fail(error);
@@ -207,42 +247,47 @@ class ZLinkSerialExecutionQueue {
207
247
  }
208
248
  if (this.shouldYield()) {
209
249
  this.claimStartedAt = undefined;
210
- await macrotaskBoundary();
250
+ await (0, abort_1.macrotaskBoundary)();
211
251
  }
212
252
  }
213
253
  }
214
254
  finally {
215
255
  this.draining = false;
216
256
  this.claimStartedAt = undefined;
217
- if (!waitingForPreparation &&
218
- (this.application.records.length > 0 || this.lifecycle.records.length > 0)) {
257
+ if (!waitingForPreparation && this.selectNext() !== undefined) {
219
258
  this.scheduleDrain();
220
259
  }
221
260
  else {
222
- if (this.application.records.length === 0 && this.lifecycle.records.length === 0) {
261
+ if (!this.hasPendingWork) {
223
262
  this.resolveIdleWaiters();
224
263
  }
225
264
  }
226
265
  }
227
266
  }
228
267
  selectNext() {
229
- const applicationReady = this.application.records.length > 0;
230
- const lifecycleReady = this.lifecycle.records.length > 0;
268
+ const lifecycleOwner = this.activeLifecycle?.context;
269
+ const applicationRecord = lifecycleOwner === undefined
270
+ ? this.application.records[0]
271
+ : this.application.records.find((record) => lifecycleOwner.canExecuteApplication(record));
272
+ const applicationReady = applicationRecord !== undefined;
273
+ const lifecycleReady = this.activeLifecycle === undefined && this.lifecycle.records.length > 0;
231
274
  if (!applicationReady && !lifecycleReady)
232
275
  return undefined;
233
276
  if (!applicationReady) {
234
277
  return { lane: 'lifecycle', record: this.lifecycle.records[0] };
235
278
  }
236
279
  if (!lifecycleReady) {
237
- return { lane: 'application', record: this.application.records[0] };
280
+ return { lane: 'application', record: applicationRecord };
238
281
  }
239
282
  if (!this.lifecycleDebt && this.lifecycleStreak < this.lifecycleBurstLimit) {
240
283
  return { lane: 'lifecycle', record: this.lifecycle.records[0] };
241
284
  }
242
- return { lane: 'application', record: this.application.records[0] };
285
+ return { lane: 'application', record: applicationRecord };
243
286
  }
244
287
  takeSelected(selection) {
245
- const record = selection.lane === 'lifecycle' ? this.takeLifecycle() : this.takeApplication();
288
+ const record = selection.lane === 'lifecycle'
289
+ ? this.takeLifecycle()
290
+ : this.takeApplication(selection.record);
246
291
  if (record !== selection.record) {
247
292
  throw new Error('The selected serial work record changed before owner claim.');
248
293
  }
@@ -253,12 +298,17 @@ class ZLinkSerialExecutionQueue {
253
298
  if (this.application.records.length > 0 && this.lifecycleStreak >= this.lifecycleBurstLimit) {
254
299
  this.lifecycleDebt = true;
255
300
  }
256
- return this.lifecycle.records.shift();
301
+ const record = this.lifecycle.records.shift();
302
+ this.activeLifecycle = record;
303
+ return record;
257
304
  }
258
- takeApplication() {
305
+ takeApplication(selected) {
259
306
  this.lifecycleStreak = 0;
260
307
  this.lifecycleDebt = false;
261
- return this.application.records.shift();
308
+ if (this.application.records[0] === selected)
309
+ return this.application.records.shift();
310
+ const index = this.application.records.indexOf(selected);
311
+ return this.application.records.splice(index, 1)[0];
262
312
  }
263
313
  startPreparation(record) {
264
314
  const preparation = record.preparation;
@@ -321,6 +371,32 @@ class ZLinkSerialExecutionQueue {
321
371
  }
322
372
  }
323
373
  exports.ZLinkSerialExecutionQueue = ZLinkSerialExecutionQueue;
374
+ if ((0, state_lane_1.isStructuralGuardEnabled)()) {
375
+ const submit = ZLinkSerialExecutionQueue.prototype.submit;
376
+ ZLinkSerialExecutionQueue.prototype.submit = function (operation, options = {}, context) {
377
+ return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(submit.call(this, operation, options, context), `serial ${options.lane ?? 'application'} ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
378
+ };
379
+ const submitPreAdmitted = ZLinkSerialExecutionQueue.prototype.submitPreAdmitted;
380
+ ZLinkSerialExecutionQueue.prototype.submitPreAdmitted = function (operation, options = {}, context) {
381
+ return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(submitPreAdmitted.call(this, operation, options, context), `serial ${options.lane ?? 'application'} ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
382
+ };
383
+ const submitContinuation = ZLinkSerialExecutionQueue.prototype.submitContinuation;
384
+ ZLinkSerialExecutionQueue.prototype.submitContinuation = function (operation, context) {
385
+ return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(submitContinuation.call(this, operation, context), `serial continuation ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
386
+ };
387
+ const admitDurablePrefix = ZLinkSerialExecutionQueue.prototype.admitDurablePrefix;
388
+ ZLinkSerialExecutionQueue.prototype.admitDurablePrefix = function (operation, options = {}, context, preparation) {
389
+ return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(admitDurablePrefix.call(this, operation, options, context, preparation), `serial durable ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
390
+ };
391
+ const submitLifecycleOperation = ZLinkSerialExecutionQueue.prototype.submitLifecycleOperation;
392
+ ZLinkSerialExecutionQueue.prototype.submitLifecycleOperation = function (operation) {
393
+ return (0, state_lane_1.guardStateLaneCompletion)((0, state_lane_1.trackDiagnosticCompletion)(submitLifecycleOperation.call(this, operation), `serial lifecycle ${(0, state_lane_1.diagnosticWorkName)(operation)}`), 'serial completion');
394
+ };
395
+ const whenIdle = ZLinkSerialExecutionQueue.prototype.whenIdle;
396
+ ZLinkSerialExecutionQueue.prototype.whenIdle = function () {
397
+ return (0, state_lane_1.guardStateLaneCompletion)(whenIdle.call(this), 'serial completion');
398
+ };
399
+ }
324
400
  function createLane() {
325
401
  return {
326
402
  records: []
@@ -336,6 +412,3 @@ function validateNonNegative(value, field) {
336
412
  throw new RangeError(`${field} must be a non-negative safe integer.`);
337
413
  }
338
414
  }
339
- function macrotaskBoundary() {
340
- return new Promise((resolve) => setImmediate(resolve));
341
- }
@@ -1,4 +1,5 @@
1
1
  type ZLinkStateLaneWork<T> = () => Promise<T> | T;
2
+ export declare function isStructuralGuardEnabled(): boolean;
2
3
  /**
3
4
  * Single-owner execution lane for a component's mutable state.
4
5
  *
@@ -7,7 +8,6 @@ type ZLinkStateLaneWork<T> = () => Promise<T> | T;
7
8
  * Actor serial executors, which also own lifecycle and relocation concerns.
8
9
  */
9
10
  export declare class ZLinkStateLane {
10
- private static readonly currentLaneStorage;
11
11
  private readonly mailbox;
12
12
  private draining;
13
13
  private drainPromise;
@@ -25,4 +25,11 @@ export declare class ZLinkStateLane {
25
25
  private scheduleDrain;
26
26
  private drain;
27
27
  }
28
+ /** Applied only by debug-installed wrappers; release completions keep their original identity. */
29
+ export declare function guardStateLaneCompletion<T>(completion: Promise<T>, label: string, owner?: ZLinkStateLane): Promise<T>;
30
+ export declare function trackDiagnosticCompletion<T>(completion: Promise<T>, name: string): Promise<T>;
31
+ export declare function debugPendingWorkNames(): string[];
32
+ export declare function diagnosticWorkName(work: {
33
+ readonly name: string;
34
+ }): string;
28
35
  export {};
@@ -1,7 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkStateLane = void 0;
4
+ exports.isStructuralGuardEnabled = isStructuralGuardEnabled;
5
+ exports.guardStateLaneCompletion = guardStateLaneCompletion;
6
+ exports.trackDiagnosticCompletion = trackDiagnosticCompletion;
7
+ exports.debugPendingWorkNames = debugPendingWorkNames;
8
+ exports.diagnosticWorkName = diagnosticWorkName;
4
9
  const node_async_hooks_1 = require("node:async_hooks");
10
+ const UNKNOWN_DIAGNOSTIC_CALLER = '<unknown caller>';
11
+ function isStructuralGuardEnabled() {
12
+ return process.env.ZLINK_NODE_STRUCTURAL_GUARD === '1' || process.env.NODE_ENV === 'test';
13
+ }
14
+ const currentLaneStorage = new node_async_hooks_1.AsyncLocalStorage();
15
+ const diagnosticPending = isStructuralGuardEnabled() ? new Map() : undefined;
16
+ let nextDiagnosticWork = 0;
17
+ const diagnosticTurnStorage = diagnosticPending === undefined ? undefined : new node_async_hooks_1.AsyncLocalStorage();
5
18
  /**
6
19
  * Single-owner execution lane for a component's mutable state.
7
20
  *
@@ -10,13 +23,12 @@ const node_async_hooks_1 = require("node:async_hooks");
10
23
  * Actor serial executors, which also own lifecycle and relocation concerns.
11
24
  */
12
25
  class ZLinkStateLane {
13
- static currentLaneStorage = new node_async_hooks_1.AsyncLocalStorage();
14
26
  mailbox = [];
15
27
  draining = false;
16
28
  drainPromise;
17
29
  closed = false;
18
30
  static get current() {
19
- return ZLinkStateLane.currentLaneStorage.getStore();
31
+ return currentLaneStorage.getStore();
20
32
  }
21
33
  get isOnLane() {
22
34
  return ZLinkStateLane.current === this;
@@ -86,7 +98,7 @@ class ZLinkStateLane {
86
98
  return;
87
99
  }
88
100
  try {
89
- await ZLinkStateLane.currentLaneStorage.run(this, work);
101
+ await currentLaneStorage.run(this, work);
90
102
  }
91
103
  catch {
92
104
  // Posted callbacks own their errors. One failure must not strand later work.
@@ -103,3 +115,106 @@ class ZLinkStateLane {
103
115
  }
104
116
  }
105
117
  exports.ZLinkStateLane = ZLinkStateLane;
118
+ // Install the structural check only in diagnostic processes. The release run()
119
+ // method and its returned Promise are left untouched.
120
+ if (isStructuralGuardEnabled()) {
121
+ Object.defineProperty(ZLinkStateLane, 'current', {
122
+ configurable: true,
123
+ get: () => {
124
+ const turn = diagnosticTurnStorage?.getStore();
125
+ return turn?.active === true ? turn.lane : undefined;
126
+ }
127
+ });
128
+ const run = ZLinkStateLane.prototype.run;
129
+ ZLinkStateLane.prototype.run = function (work) {
130
+ const completion = run.call(this, () => runDiagnosticTurn(this, work));
131
+ return guardStateLaneCompletion(trackDiagnosticCompletion(completion, `state lane ${diagnosticWorkName(work)}`), 'another state lane completion', this);
132
+ };
133
+ const tryPost = ZLinkStateLane.prototype.tryPost;
134
+ ZLinkStateLane.prototype.tryPost = function (work) {
135
+ const release = registerDiagnosticWork(`state lane post ${diagnosticWorkName(work)}`);
136
+ const accepted = tryPost.call(this, () => {
137
+ try {
138
+ const result = runDiagnosticTurn(this, work);
139
+ if (result instanceof Promise)
140
+ return result.finally(release);
141
+ release();
142
+ return result;
143
+ }
144
+ catch (error) {
145
+ release();
146
+ throw error;
147
+ }
148
+ });
149
+ if (!accepted)
150
+ release();
151
+ return accepted;
152
+ };
153
+ }
154
+ function runDiagnosticTurn(lane, work) {
155
+ const turn = { lane, active: true };
156
+ return diagnosticTurnStorage.run(turn, () => {
157
+ try {
158
+ const result = work();
159
+ if (result instanceof Promise) {
160
+ return result.finally(() => {
161
+ turn.active = false;
162
+ });
163
+ }
164
+ turn.active = false;
165
+ return result;
166
+ }
167
+ catch (error) {
168
+ turn.active = false;
169
+ throw error;
170
+ }
171
+ });
172
+ }
173
+ /** Applied only by debug-installed wrappers; release completions keep their original identity. */
174
+ function guardStateLaneCompletion(completion, label, owner) {
175
+ return new Proxy(completion, {
176
+ get(target, property) {
177
+ if (property === 'then') {
178
+ return (onFulfilled, onRejected) => {
179
+ const current = ZLinkStateLane.current;
180
+ if (current !== undefined && current !== owner) {
181
+ throw new Error(`A state lane turn cannot wait for ${label}.`);
182
+ }
183
+ return target.then(onFulfilled, onRejected);
184
+ };
185
+ }
186
+ if (property === 'catch') {
187
+ return (onRejected) => guardStateLaneCompletion(target.catch(onRejected), label, owner);
188
+ }
189
+ if (property === 'finally') {
190
+ return (onFinally) => guardStateLaneCompletion(target.finally(onFinally), label, owner);
191
+ }
192
+ const value = Reflect.get(target, property, target);
193
+ return typeof value === 'function' ? value.bind(target) : value;
194
+ }
195
+ });
196
+ }
197
+ function trackDiagnosticCompletion(completion, name) {
198
+ const release = registerDiagnosticWork(name);
199
+ void completion.then(release, release);
200
+ return completion;
201
+ }
202
+ function debugPendingWorkNames() {
203
+ return [...(diagnosticPending?.values() ?? [])];
204
+ }
205
+ function diagnosticWorkName(work) {
206
+ return work.name.length > 0 ? work.name : '<anonymous>';
207
+ }
208
+ function registerDiagnosticWork(name) {
209
+ if (diagnosticPending === undefined)
210
+ return () => undefined;
211
+ const id = ++nextDiagnosticWork;
212
+ const frames = new Error().stack?.split('\n').slice(2) ?? [];
213
+ const caller = frames
214
+ .find((frame) => !frame.includes('state-lane.') && !frame.includes('serial-execution-queue.'))
215
+ ?.trim() ?? UNKNOWN_DIAGNOSTIC_CALLER;
216
+ diagnosticPending.set(id, `${name} ${caller}`);
217
+ return () => {
218
+ diagnosticPending.delete(id);
219
+ };
220
+ }
@@ -1,4 +1,7 @@
1
1
  import type { RoutingId, ZLinkActorJoinOperationId } from '../../contracts';
2
+ export declare const SHA256_DIGEST_BYTES = 32;
3
+ export declare const RECREATE_RELOCATION_CONTENT_TYPE = "application/vnd.zlink.actor-relocation.recreate";
4
+ export declare const SNAPSHOT_RELOCATION_CONTENT_TYPE = "application/vnd.zlink.actor-relocation.snapshot";
2
5
  export interface CanonicalActorJoinRecoveryRequest {
3
6
  readonly actorId: string;
4
7
  readonly actorType: string;
@@ -1,24 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SNAPSHOT_RELOCATION_CONTENT_TYPE = exports.RECREATE_RELOCATION_CONTENT_TYPE = exports.SHA256_DIGEST_BYTES = void 0;
3
4
  exports.canonicalActorJoinHandoffId = canonicalActorJoinHandoffId;
4
5
  exports.encodeCanonicalActorJoinRecoverySavedWork = encodeCanonicalActorJoinRecoverySavedWork;
5
6
  exports.decodeCanonicalActorJoinRecoverySavedWork = decodeCanonicalActorJoinRecoverySavedWork;
6
7
  exports.routingIdBytes = routingIdBytes;
8
+ const stream_wire_1 = require("@zlink-systems/stream-wire");
7
9
  const node_crypto_1 = require("node:crypto");
8
- const routing_id_1 = require("../routing-id");
9
10
  const service_wire_pilot_codec_generated_1 = require("../protocol/service_wire_pilot_codec.generated");
11
+ const routing_id_1 = require("../routing-id");
10
12
  const service_stateful_wire_codec_1 = require("./service-stateful-wire-codec");
13
+ const ACTOR_ID_DIGEST_MAX_BYTES = 0xffff;
14
+ exports.SHA256_DIGEST_BYTES = 32;
11
15
  const RECOVERY_PACKET_NAME = '__zlink.actor.routed_join.recovery';
12
16
  const RECOVERY_CONTENT_TYPE = 'application/x-zlink-actor-routed-join-recovery-v1';
13
17
  const MAXIMUM_METADATA_BYTES = 256 * 1024;
14
18
  const FRAMEWORK_METADATA_UPPER_BOUND_BYTES = 64 * 1024;
15
19
  const ACCEPTED_JOURNAL_UPPER_BOUND_BYTES = 16 * 1024 * 1024;
16
20
  const SNAPSHOT_APPLICATION_STATE_RESERVATION_BYTES = 64 * 1024 * 1024;
17
- const RECREATE_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.recreate';
18
- const SNAPSHOT_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.snapshot';
21
+ exports.RECREATE_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.recreate';
22
+ exports.SNAPSHOT_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.snapshot';
19
23
  function canonicalActorJoinHandoffId(input) {
20
24
  const actor = textBytes(input.actorId, 'actorId');
21
- if (actor.byteLength > 0xffff)
25
+ if (actor.byteLength > ACTOR_ID_DIGEST_MAX_BYTES)
22
26
  throw new RangeError('Actor id exceeds u16 bytes.');
23
27
  const digest = (0, node_crypto_1.createHash)('sha256')
24
28
  .update(Buffer.concat([
@@ -65,7 +69,7 @@ function encodeCanonicalActorJoinRecoverySavedWork(input) {
65
69
  RelocationChecksumCrc32c: 0,
66
70
  RelocationAggregateId: canonicalUuid(input.relocationId),
67
71
  RelocationAggregateGeneration: 1n,
68
- RelocationInventoryDigest: Buffer.alloc(32).toString('base64'),
72
+ RelocationInventoryDigest: Buffer.alloc(exports.SHA256_DIGEST_BYTES).toString('base64'),
69
73
  RequestContentType: requireText(input.requestContentType, 'Actor Join request content type'),
70
74
  Request: '',
71
75
  HandoffFrames: [],
@@ -258,14 +262,14 @@ function predictedRelocationPayloadBytes(requestBytes, relocationContentType) {
258
262
  if (!Number.isSafeInteger(requestBytes) || requestBytes < 0) {
259
263
  throw new RangeError('Actor Join request size is invalid.');
260
264
  }
261
- if (relocationContentType !== RECREATE_RELOCATION_CONTENT_TYPE &&
262
- relocationContentType !== SNAPSHOT_RELOCATION_CONTENT_TYPE) {
265
+ if (relocationContentType !== exports.RECREATE_RELOCATION_CONTENT_TYPE &&
266
+ relocationContentType !== exports.SNAPSHOT_RELOCATION_CONTENT_TYPE) {
263
267
  throw new TypeError('Actor Join relocation content type is invalid.');
264
268
  }
265
269
  return (FRAMEWORK_METADATA_UPPER_BOUND_BYTES +
266
270
  ACCEPTED_JOURNAL_UPPER_BOUND_BYTES +
267
271
  requestBytes +
268
- (relocationContentType === SNAPSHOT_RELOCATION_CONTENT_TYPE
272
+ (relocationContentType === exports.SNAPSHOT_RELOCATION_CONTENT_TYPE
269
273
  ? SNAPSHOT_APPLICATION_STATE_RESERVATION_BYTES
270
274
  : 0));
271
275
  }
@@ -281,7 +285,7 @@ function requireText(value, name) {
281
285
  return value;
282
286
  }
283
287
  function nonZeroU64(value, name) {
284
- if (value < 1n || value > 0xffffffffffffffffn)
288
+ if (value < 1n || value > stream_wire_1.UINT64_MAX)
285
289
  throw new RangeError(`${name} is invalid.`);
286
290
  return value;
287
291
  }
@@ -293,7 +297,7 @@ function u16(value) {
293
297
  return result;
294
298
  }
295
299
  function u64(value) {
296
- if (value < 0n || value > 0xffffffffffffffffn)
300
+ if (value < 0n || value > stream_wire_1.UINT64_MAX)
297
301
  throw new RangeError('u64');
298
302
  const result = Buffer.alloc(8);
299
303
  result.writeBigUInt64BE(value);
@@ -317,7 +321,7 @@ function integer(value, name) {
317
321
  if (typeof value !== 'string' || !/^\d+$/u.test(value))
318
322
  throw new TypeError(`${name} is invalid.`);
319
323
  const parsed = BigInt(value);
320
- if (parsed > 0xffffffffffffffffn)
324
+ if (parsed > stream_wire_1.UINT64_MAX)
321
325
  throw new TypeError(`${name} exceeds u64.`);
322
326
  return parsed;
323
327
  }
@@ -8,27 +8,5 @@ export declare class EventLoopResourceStack {
8
8
  own<T extends CloseableResource>(resource: T): T;
9
9
  close(): Promise<void>;
10
10
  }
11
- export type EventLoopTask = () => void | Promise<void>;
12
- /** Keeps infrastructure progress independent from awaiting application handlers. */
13
- export declare class EventLoopWorkQueues {
14
- private readonly infrastructure;
15
- private infrastructureHead;
16
- private infrastructureCount;
17
- private readonly application;
18
- private applicationHead;
19
- private applicationCount;
20
- private infrastructureScheduled;
21
- private applicationScheduled;
22
- private accepting;
23
- submitInfrastructure(task: EventLoopTask): boolean;
24
- submitApplication(task: EventLoopTask): boolean;
25
- stopAdmission(): void;
26
- private scheduleInfrastructure;
27
- private drainInfrastructure;
28
- private scheduleApplication;
29
- private drainApplication;
30
- private takeInfrastructure;
31
- private takeApplication;
32
- private compactInfrastructure;
33
- private compactApplication;
34
- }
11
+ export declare function closeResources(resources: readonly CloseableResource[]): Promise<void>;
12
+ export declare function finishResourceCleanup(failures: readonly unknown[]): void;