@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
@@ -1,7 +1,23 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const UNKNOWN_DIAGNOSTIC_CALLER = '<unknown caller>';
2
3
 
3
4
  type ZLinkStateLaneWork<T> = () => Promise<T> | T;
4
5
 
6
+ interface ZLinkStateLaneTurn {
7
+ readonly lane: ZLinkStateLane;
8
+ active: boolean;
9
+ }
10
+
11
+ export function isStructuralGuardEnabled(): boolean {
12
+ return process.env.ZLINK_NODE_STRUCTURAL_GUARD === '1' || process.env.NODE_ENV === 'test';
13
+ }
14
+
15
+ const currentLaneStorage = new AsyncLocalStorage<ZLinkStateLane>();
16
+ const diagnosticPending = isStructuralGuardEnabled() ? new Map<number, string>() : undefined;
17
+ let nextDiagnosticWork = 0;
18
+ const diagnosticTurnStorage =
19
+ diagnosticPending === undefined ? undefined : new AsyncLocalStorage<ZLinkStateLaneTurn>();
20
+
5
21
  /**
6
22
  * Single-owner execution lane for a component's mutable state.
7
23
  *
@@ -10,15 +26,13 @@ type ZLinkStateLaneWork<T> = () => Promise<T> | T;
10
26
  * Actor serial executors, which also own lifecycle and relocation concerns.
11
27
  */
12
28
  export class ZLinkStateLane {
13
- private static readonly currentLaneStorage = new AsyncLocalStorage<ZLinkStateLane>();
14
-
15
29
  private readonly mailbox: Array<() => Promise<void>> = [];
16
30
  private draining = false;
17
31
  private drainPromise: Promise<void> | undefined;
18
32
  private closed = false;
19
33
 
20
34
  static get current(): ZLinkStateLane | undefined {
21
- return ZLinkStateLane.currentLaneStorage.getStore();
35
+ return currentLaneStorage.getStore();
22
36
  }
23
37
 
24
38
  get isOnLane(): boolean {
@@ -100,7 +114,7 @@ export class ZLinkStateLane {
100
114
  return;
101
115
  }
102
116
  try {
103
- await ZLinkStateLane.currentLaneStorage.run(this, work);
117
+ await currentLaneStorage.run(this, work);
104
118
  } catch {
105
119
  // Posted callbacks own their errors. One failure must not strand later work.
106
120
  }
@@ -114,3 +128,127 @@ export class ZLinkStateLane {
114
128
  }
115
129
  }
116
130
  }
131
+
132
+ // Install the structural check only in diagnostic processes. The release run()
133
+ // method and its returned Promise are left untouched.
134
+ if (isStructuralGuardEnabled()) {
135
+ Object.defineProperty(ZLinkStateLane, 'current', {
136
+ configurable: true,
137
+ get: () => {
138
+ const turn = diagnosticTurnStorage?.getStore();
139
+ return turn?.active === true ? turn.lane : undefined;
140
+ }
141
+ });
142
+
143
+ const run = ZLinkStateLane.prototype.run;
144
+ ZLinkStateLane.prototype.run = function <T>(
145
+ this: ZLinkStateLane,
146
+ work: ZLinkStateLaneWork<T>
147
+ ): Promise<T> {
148
+ const completion = run.call(this, () => runDiagnosticTurn(this, work)) as Promise<T>;
149
+ return guardStateLaneCompletion(
150
+ trackDiagnosticCompletion(completion, `state lane ${diagnosticWorkName(work)}`),
151
+ 'another state lane completion',
152
+ this
153
+ );
154
+ };
155
+
156
+ const tryPost = ZLinkStateLane.prototype.tryPost;
157
+ ZLinkStateLane.prototype.tryPost = function (
158
+ this: ZLinkStateLane,
159
+ work: ZLinkStateLaneWork<void>
160
+ ): boolean {
161
+ const release = registerDiagnosticWork(`state lane post ${diagnosticWorkName(work)}`);
162
+ const accepted = tryPost.call(this, () => {
163
+ try {
164
+ const result = runDiagnosticTurn(this, work);
165
+ if (result instanceof Promise) return result.finally(release);
166
+ release();
167
+ return result;
168
+ } catch (error) {
169
+ release();
170
+ throw error;
171
+ }
172
+ });
173
+ if (!accepted) release();
174
+ return accepted;
175
+ };
176
+ }
177
+
178
+ function runDiagnosticTurn<T>(lane: ZLinkStateLane, work: ZLinkStateLaneWork<T>): Promise<T> | T {
179
+ const turn: ZLinkStateLaneTurn = { lane, active: true };
180
+ return diagnosticTurnStorage!.run(turn, () => {
181
+ try {
182
+ const result = work();
183
+ if (result instanceof Promise) {
184
+ return result.finally(() => {
185
+ turn.active = false;
186
+ });
187
+ }
188
+ turn.active = false;
189
+ return result;
190
+ } catch (error) {
191
+ turn.active = false;
192
+ throw error;
193
+ }
194
+ });
195
+ }
196
+
197
+ /** Applied only by debug-installed wrappers; release completions keep their original identity. */
198
+ export function guardStateLaneCompletion<T>(
199
+ completion: Promise<T>,
200
+ label: string,
201
+ owner?: ZLinkStateLane
202
+ ): Promise<T> {
203
+ return new Proxy(completion, {
204
+ get(target, property) {
205
+ if (property === 'then') {
206
+ return (onFulfilled: (value: T) => unknown, onRejected: (error: unknown) => unknown) => {
207
+ const current = ZLinkStateLane.current;
208
+ if (current !== undefined && current !== owner) {
209
+ throw new Error(`A state lane turn cannot wait for ${label}.`);
210
+ }
211
+ return target.then(onFulfilled, onRejected);
212
+ };
213
+ }
214
+ if (property === 'catch') {
215
+ return (onRejected: (error: unknown) => unknown) =>
216
+ guardStateLaneCompletion(target.catch(onRejected), label, owner);
217
+ }
218
+ if (property === 'finally') {
219
+ return (onFinally: () => void) =>
220
+ guardStateLaneCompletion(target.finally(onFinally), label, owner);
221
+ }
222
+ const value = Reflect.get(target, property, target) as unknown;
223
+ return typeof value === 'function' ? value.bind(target) : value;
224
+ }
225
+ });
226
+ }
227
+
228
+ export function trackDiagnosticCompletion<T>(completion: Promise<T>, name: string): Promise<T> {
229
+ const release = registerDiagnosticWork(name);
230
+ void completion.then(release, release);
231
+ return completion;
232
+ }
233
+
234
+ export function debugPendingWorkNames(): string[] {
235
+ return [...(diagnosticPending?.values() ?? [])];
236
+ }
237
+
238
+ export function diagnosticWorkName(work: { readonly name: string }): string {
239
+ return work.name.length > 0 ? work.name : '<anonymous>';
240
+ }
241
+
242
+ function registerDiagnosticWork(name: string): () => void {
243
+ if (diagnosticPending === undefined) return () => undefined;
244
+ const id = ++nextDiagnosticWork;
245
+ const frames = new Error().stack?.split('\n').slice(2) ?? [];
246
+ const caller =
247
+ frames
248
+ .find((frame) => !frame.includes('state-lane.') && !frame.includes('serial-execution-queue.'))
249
+ ?.trim() ?? UNKNOWN_DIAGNOSTIC_CALLER;
250
+ diagnosticPending.set(id, `${name} ${caller}`);
251
+ return () => {
252
+ diagnosticPending.delete(id);
253
+ };
254
+ }
@@ -1,11 +1,15 @@
1
+ import { UINT64_MAX } from '@zlink-systems/stream-wire';
1
2
  import { createHash } from 'node:crypto';
2
3
  import type { RoutingId, ZLinkActorJoinOperationId } from '../../contracts';
3
- import { decodeRoutingId, encodeRoutingIdStorageHex } from '../routing-id';
4
4
  import {
5
5
  decodeZljrRecordV1 as decodeGeneratedZljrRecordV1,
6
6
  encodeZljrRecordV1 as encodeGeneratedZljrRecordV1
7
7
  } from '../protocol/service_wire_pilot_codec.generated';
8
+ import { decodeRoutingId, encodeRoutingIdStorageHex } from '../routing-id';
8
9
  import { decodeServiceWireFrozenRecord } from './service-stateful-wire-codec';
10
+ const ACTOR_ID_DIGEST_MAX_BYTES = 0xffff;
11
+
12
+ export const SHA256_DIGEST_BYTES = 32;
9
13
 
10
14
  const RECOVERY_PACKET_NAME = '__zlink.actor.routed_join.recovery';
11
15
  const RECOVERY_CONTENT_TYPE = 'application/x-zlink-actor-routed-join-recovery-v1';
@@ -13,8 +17,8 @@ const MAXIMUM_METADATA_BYTES = 256 * 1024;
13
17
  const FRAMEWORK_METADATA_UPPER_BOUND_BYTES = 64 * 1024;
14
18
  const ACCEPTED_JOURNAL_UPPER_BOUND_BYTES = 16 * 1024 * 1024;
15
19
  const SNAPSHOT_APPLICATION_STATE_RESERVATION_BYTES = 64 * 1024 * 1024;
16
- const RECREATE_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.recreate';
17
- const SNAPSHOT_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.snapshot';
20
+ export const RECREATE_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.recreate';
21
+ export const SNAPSHOT_RELOCATION_CONTENT_TYPE = 'application/vnd.zlink.actor-relocation.snapshot';
18
22
 
19
23
  export interface CanonicalActorJoinRecoveryRequest {
20
24
  readonly actorId: string;
@@ -87,7 +91,8 @@ export function canonicalActorJoinHandoffId(input: {
87
91
  readonly correlation: bigint;
88
92
  }): string {
89
93
  const actor = textBytes(input.actorId, 'actorId');
90
- if (actor.byteLength > 0xffff) throw new RangeError('Actor id exceeds u16 bytes.');
94
+ if (actor.byteLength > ACTOR_ID_DIGEST_MAX_BYTES)
95
+ throw new RangeError('Actor id exceeds u16 bytes.');
91
96
  const digest = createHash('sha256')
92
97
  .update(
93
98
  Buffer.concat([
@@ -139,7 +144,7 @@ export function encodeCanonicalActorJoinRecoverySavedWork(
139
144
  RelocationChecksumCrc32c: 0,
140
145
  RelocationAggregateId: canonicalUuid(input.relocationId),
141
146
  RelocationAggregateGeneration: 1n,
142
- RelocationInventoryDigest: Buffer.alloc(32).toString('base64'),
147
+ RelocationInventoryDigest: Buffer.alloc(SHA256_DIGEST_BYTES).toString('base64'),
143
148
  RequestContentType: requireText(input.requestContentType, 'Actor Join request content type'),
144
149
  Request: '',
145
150
  HandoffFrames: [],
@@ -423,7 +428,7 @@ function requireText(value: string | undefined, name: string): string {
423
428
  }
424
429
 
425
430
  function nonZeroU64(value: bigint, name: string): bigint {
426
- if (value < 1n || value > 0xffff_ffff_ffff_ffffn) throw new RangeError(`${name} is invalid.`);
431
+ if (value < 1n || value > UINT64_MAX) throw new RangeError(`${name} is invalid.`);
427
432
  return value;
428
433
  }
429
434
 
@@ -435,7 +440,7 @@ function u16(value: number): Buffer {
435
440
  }
436
441
 
437
442
  function u64(value: bigint): Buffer {
438
- if (value < 0n || value > 0xffff_ffff_ffff_ffffn) throw new RangeError('u64');
443
+ if (value < 0n || value > UINT64_MAX) throw new RangeError('u64');
439
444
  const result = Buffer.alloc(8);
440
445
  result.writeBigUInt64BE(value);
441
446
  return result;
@@ -461,7 +466,7 @@ function integer(value: unknown, name: string): bigint {
461
466
  if (typeof value !== 'string' || !/^\d+$/u.test(value))
462
467
  throw new TypeError(`${name} is invalid.`);
463
468
  const parsed = BigInt(value);
464
- if (parsed > 0xffff_ffff_ffff_ffffn) throw new TypeError(`${name} exceeds u64.`);
469
+ if (parsed > UINT64_MAX) throw new TypeError(`${name} exceeds u64.`);
465
470
  return parsed;
466
471
  }
467
472
 
@@ -1,5 +1,3 @@
1
- import { runZLinkExecutionArea } from '../execution';
2
-
3
1
  export interface CloseableResource {
4
2
  close(): void | Promise<void>;
5
3
  }
@@ -23,7 +21,7 @@ export class EventLoopResourceStack {
23
21
  }
24
22
  }
25
23
 
26
- async function closeResources(resources: readonly CloseableResource[]): Promise<void> {
24
+ export async function closeResources(resources: readonly CloseableResource[]): Promise<void> {
27
25
  const failures: unknown[] = [];
28
26
  for (const resource of resources) {
29
27
  try {
@@ -32,126 +30,11 @@ async function closeResources(resources: readonly CloseableResource[]): Promise<
32
30
  failures.push(error);
33
31
  }
34
32
  }
35
- if (failures.length > 0) {
36
- throw new AggregateError(failures, 'Event-loop resource cleanup failed.');
37
- }
33
+ finishResourceCleanup(failures);
38
34
  }
39
35
 
40
- export type EventLoopTask = () => void | Promise<void>;
41
-
42
- /** Keeps infrastructure progress independent from awaiting application handlers. */
43
- export class EventLoopWorkQueues {
44
- private readonly infrastructure: Array<EventLoopTask | undefined> = [];
45
- private infrastructureHead = 0;
46
- private infrastructureCount = 0;
47
- private readonly application: Array<EventLoopTask | undefined> = [];
48
- private applicationHead = 0;
49
- private applicationCount = 0;
50
- private infrastructureScheduled = false;
51
- private applicationScheduled = false;
52
- private accepting = true;
53
-
54
- submitInfrastructure(task: EventLoopTask): boolean {
55
- if (!this.accepting) return false;
56
- this.infrastructure.push(task);
57
- this.infrastructureCount += 1;
58
- this.scheduleInfrastructure();
59
- return true;
60
- }
61
-
62
- submitApplication(task: EventLoopTask): boolean {
63
- if (!this.accepting) return false;
64
- this.application.push(task);
65
- this.applicationCount += 1;
66
- this.scheduleApplication();
67
- return true;
68
- }
69
-
70
- stopAdmission(): void {
71
- this.accepting = false;
72
- }
73
-
74
- private scheduleInfrastructure(): void {
75
- if (this.infrastructureScheduled) return;
76
- this.infrastructureScheduled = true;
77
- queueMicrotask(() => this.drainInfrastructure());
78
- }
79
-
80
- private drainInfrastructure(): void {
81
- this.infrastructureScheduled = false;
82
- const task = this.takeInfrastructure();
83
- if (task === undefined) return;
84
- try {
85
- const result = runZLinkExecutionArea('infrastructure', task);
86
- if (result instanceof Promise) void result.catch(() => undefined);
87
- } finally {
88
- if (this.infrastructureCount > 0) this.scheduleInfrastructure();
89
- }
90
- }
91
-
92
- private scheduleApplication(): void {
93
- if (this.applicationScheduled) return;
94
- this.applicationScheduled = true;
95
- queueMicrotask(() => void this.drainApplication());
96
- }
97
-
98
- private async drainApplication(): Promise<void> {
99
- try {
100
- const task = this.takeApplication();
101
- if (task !== undefined) {
102
- await runZLinkExecutionArea('application', task);
103
- }
104
- } catch {
105
- // Handler failure is reported by the dispatch owner; it does not stop this queue.
106
- } finally {
107
- this.applicationScheduled = false;
108
- if (this.applicationCount > 0) this.scheduleApplication();
109
- }
110
- }
111
-
112
- private takeInfrastructure(): EventLoopTask | undefined {
113
- const task = this.infrastructure[this.infrastructureHead];
114
- if (task === undefined) return undefined;
115
- this.infrastructure[this.infrastructureHead] = undefined;
116
- this.infrastructureHead += 1;
117
- this.infrastructureCount -= 1;
118
- this.compactInfrastructure();
119
- return task;
120
- }
121
-
122
- private takeApplication(): EventLoopTask | undefined {
123
- const task = this.application[this.applicationHead];
124
- if (task === undefined) return undefined;
125
- this.application[this.applicationHead] = undefined;
126
- this.applicationHead += 1;
127
- this.applicationCount -= 1;
128
- this.compactApplication();
129
- return task;
130
- }
131
-
132
- private compactInfrastructure(): void {
133
- if (this.infrastructureCount === 0) {
134
- this.infrastructure.length = 0;
135
- this.infrastructureHead = 0;
136
- } else if (
137
- this.infrastructureHead >= 1024 &&
138
- this.infrastructureHead * 2 >= this.infrastructure.length
139
- ) {
140
- this.infrastructure.splice(0, this.infrastructureHead);
141
- this.infrastructureHead = 0;
142
- }
143
- }
144
-
145
- private compactApplication(): void {
146
- if (this.applicationCount === 0) {
147
- this.application.length = 0;
148
- this.applicationHead = 0;
149
- } else if (
150
- this.applicationHead >= 1024 &&
151
- this.applicationHead * 2 >= this.application.length
152
- ) {
153
- this.application.splice(0, this.applicationHead);
154
- this.applicationHead = 0;
155
- }
36
+ export function finishResourceCleanup(failures: readonly unknown[]): void {
37
+ if (failures.length > 0) {
38
+ throw new AggregateError(failures, 'Event-loop resource cleanup failed.');
156
39
  }
157
40
  }
@@ -0,0 +1,21 @@
1
+ import type { ZLinkListenerKind } from '../../contracts/RouteMesh/RuntimeTopology';
2
+
3
+ /**
4
+ * Bound listener records of one runtime generation (spec 04 §3.1). A listener writes its
5
+ * record when it finishes binding. The listener status query reads only this object.
6
+ */
7
+ export class ZLinkListenerRecords {
8
+ private readonly endpoints = new Map<string, string>();
9
+
10
+ record(kind: ZLinkListenerKind, name: string, endpoint: string): void {
11
+ this.endpoints.set(`${kind}:${name}`, endpoint);
12
+ }
13
+
14
+ clear(): void {
15
+ this.endpoints.clear();
16
+ }
17
+
18
+ endpoint(kind: ZLinkListenerKind, name: string): string | undefined {
19
+ return this.endpoints.get(`${kind}:${name}`);
20
+ }
21
+ }
@@ -1,4 +1,8 @@
1
+ import { UINT64_BYTES, UINT64_MAX } from '@zlink-systems/stream-wire';
1
2
  import { randomBytes } from 'node:crypto';
3
+ export const OPERATION_IDENTITY_BYTES = 16;
4
+
5
+ export const ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE = 2n;
2
6
 
3
7
  export interface ZLinkOperationIdentity128 {
4
8
  readonly high: bigint;
@@ -27,13 +31,15 @@ export function createRandomOperationIdentity(
27
31
  source: (size: number) => Buffer = randomBytes
28
32
  ): ZLinkOperationIdentity128 {
29
33
  for (;;) {
30
- const bytes = source(16);
31
- if (bytes.length !== 16) {
32
- throw new RangeError('Operation identity entropy source must return exactly 16 bytes.');
34
+ const bytes = source(OPERATION_IDENTITY_BYTES);
35
+ if (bytes.length !== OPERATION_IDENTITY_BYTES) {
36
+ throw new RangeError(
37
+ `Operation identity entropy source must return exactly ${OPERATION_IDENTITY_BYTES} bytes.`
38
+ );
33
39
  }
34
40
  const operationId = {
35
41
  high: bytes.readBigUInt64BE(0),
36
- low: bytes.readBigUInt64BE(8)
42
+ low: bytes.readBigUInt64BE(UINT64_BYTES)
37
43
  };
38
44
  if (operationId.high !== 0n || operationId.low !== 0n) {
39
45
  return operationId;
@@ -42,7 +48,7 @@ export function createRandomOperationIdentity(
42
48
  }
43
49
 
44
50
  function requireUnsigned64(value: bigint, name: string): void {
45
- if (typeof value !== 'bigint' || value < 0n || value > 0xffff_ffff_ffff_ffffn) {
51
+ if (typeof value !== 'bigint' || value < 0n || value > UINT64_MAX) {
46
52
  throw new RangeError(`${name} must be an unsigned 64-bit integer.`);
47
53
  }
48
54
  }
@@ -1,6 +1,5 @@
1
1
  export interface OperationClock {
2
- setTimeout(callback: () => void, delayMs: number): unknown;
3
- clearTimeout(handle: unknown): void;
2
+ now(): number;
4
3
  }
5
4
 
6
5
  export class OperationTimeoutError extends Error {
@@ -26,32 +25,26 @@ export interface PendingOperation<T> {
26
25
  }
27
26
 
28
27
  interface Entry<T> {
29
- readonly generation: bigint;
28
+ readonly deadlineMs?: number;
30
29
  readonly resolve: (value: T | PromiseLike<T>) => void;
31
30
  readonly reject: (reason: unknown) => void;
32
- timer?: unknown;
33
31
  }
34
32
 
35
33
  const systemClock: OperationClock = {
36
- setTimeout(callback, delayMs) {
37
- // A request promise is live work. Raw RouteMesh polling deliberately
38
- // uses unref'ed timers, so this deadline is the handle that keeps a
39
- // submit() caller alive until a reply, cancellation, or deadline settles.
40
- return setTimeout(callback, delayMs);
41
- },
42
- clearTimeout(handle) {
43
- clearTimeout(handle as NodeJS.Timeout);
44
- }
34
+ now: () => performance.now()
45
35
  };
46
36
 
47
37
  /** Owns request completion so reply, timeout, cancellation, and shutdown race safely. */
48
38
  export class OperationRegistry<T> {
49
39
  private readonly entries = new Map<bigint, Entry<T>>();
50
40
  private nextId = 1n;
51
- private generation = 1n;
41
+ private deadlineCursor?: MapIterator<[bigint, Entry<T>]>;
52
42
  private closed = false;
53
43
 
54
- constructor(private readonly clock: OperationClock = systemClock) {}
44
+ constructor(
45
+ private readonly clock: OperationClock = systemClock,
46
+ private readonly onPendingChanged?: () => void
47
+ ) {}
55
48
 
56
49
  register(
57
50
  timeoutMs: number,
@@ -62,23 +55,19 @@ export class OperationRegistry<T> {
62
55
  throw new RangeError('timeoutMs must be a non-negative finite number.');
63
56
  }
64
57
  const id = this.nextId++;
65
- const generation = this.generation;
66
58
  let resolve!: Entry<T>['resolve'];
67
59
  let reject!: Entry<T>['reject'];
68
60
  const promise = new Promise<T>((onResolve, onReject) => {
69
61
  resolve = onResolve;
70
62
  reject = onReject;
71
63
  });
72
- const entry: Entry<T> = { generation, resolve, reject };
64
+ const entry: Entry<T> = {
65
+ deadlineMs: timeoutOwner === 'registry' ? this.clock.now() + timeoutMs : undefined,
66
+ resolve,
67
+ reject
68
+ };
73
69
  this.entries.set(id, entry);
74
- // Durable senders classify exhaustion from admission history. Keep their
75
- // identity and cancellation here without racing that decision with a timer.
76
- if (timeoutOwner === 'registry') {
77
- entry.timer = this.clock.setTimeout(
78
- () => this.rejectIfCurrent(id, generation, new OperationTimeoutError(id)),
79
- timeoutMs
80
- );
81
- }
70
+ if (this.entries.size === 1) this.onPendingChanged?.();
82
71
  return { id, promise };
83
72
  }
84
73
 
@@ -90,10 +79,6 @@ export class OperationRegistry<T> {
90
79
  }
91
80
 
92
81
  fail(id: bigint, reason: unknown): boolean {
93
- return this.failCore(id, reason);
94
- }
95
-
96
- private failCore(id: bigint, reason: unknown): boolean {
97
82
  const entry = this.take(id);
98
83
  if (entry === undefined) return false;
99
84
  entry.reject(reason);
@@ -101,7 +86,7 @@ export class OperationRegistry<T> {
101
86
  }
102
87
 
103
88
  cancel(id: bigint, message?: string): boolean {
104
- return this.failCore(id, new OperationCancelledError(id, message));
89
+ return this.fail(id, new OperationCancelledError(id, message));
105
90
  }
106
91
 
107
92
  isPending(id: bigint): boolean {
@@ -111,38 +96,36 @@ export class OperationRegistry<T> {
111
96
  close(reason = 'Operation registry closed.'): void {
112
97
  if (this.closed) return;
113
98
  this.closed = true;
114
- this.generation++;
115
- const pending = [...this.entries.entries()];
116
- this.entries.clear();
117
- for (const [, entry] of pending) this.clearTimer(entry);
118
- for (const [id, entry] of pending) {
119
- entry.reject(new OperationCancelledError(id, reason));
120
- }
99
+ for (const id of this.entries.keys()) this.cancel(id, reason);
100
+ this.deadlineCursor = undefined;
121
101
  }
122
102
 
123
103
  get size(): number {
124
104
  return this.entries.size;
125
105
  }
126
106
 
127
- private rejectIfCurrent(id: bigint, generation: bigint, reason: unknown): void {
128
- const entry = this.entries.get(id);
129
- if (entry === undefined || entry.generation !== generation) return;
130
- this.entries.delete(id);
131
- this.clearTimer(entry);
132
- entry.reject(reason);
107
+ expire(nowMs: number, turnDeadlineMs: number): number {
108
+ let expired = 0;
109
+ while (this.clock.now() < turnDeadlineMs) {
110
+ this.deadlineCursor ??= this.entries.entries();
111
+ const current = this.deadlineCursor.next();
112
+ if (current.done === true) {
113
+ this.deadlineCursor = undefined;
114
+ break;
115
+ }
116
+ const [id, entry] = current.value;
117
+ if (entry.deadlineMs !== undefined && entry.deadlineMs <= nowMs) {
118
+ if (this.fail(id, new OperationTimeoutError(id))) expired++;
119
+ }
120
+ }
121
+ return expired;
133
122
  }
134
123
 
135
124
  private take(id: bigint): Entry<T> | undefined {
136
125
  const entry = this.entries.get(id);
137
126
  if (entry === undefined) return undefined;
138
127
  this.entries.delete(id);
139
- this.clearTimer(entry);
128
+ if (this.entries.size === 0) this.onPendingChanged?.();
140
129
  return entry;
141
130
  }
142
-
143
- private clearTimer(entry: Entry<T>): void {
144
- if (entry.timer === undefined) return;
145
- this.clock.clearTimeout(entry.timer);
146
- entry.timer = undefined;
147
- }
148
131
  }