@zlink-systems/framework 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,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
@@ -73,8 +75,12 @@ class ZLinkSerialExecutionQueue {
73
75
  return this.admit(operation, options, context);
74
76
  }
75
77
  /** Holds lifecycle FIFO through an operation result while its application turns can run. */
76
- submitLifecycleOperation(operation) {
77
- return this.admit(operation, { lane: 'lifecycle' }, undefined, undefined, true);
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);
78
84
  }
79
85
  get hasPendingWork() {
80
86
  return (this.draining ||
@@ -96,6 +102,9 @@ class ZLinkSerialExecutionQueue {
96
102
  closeAdmission() {
97
103
  this.closed = true;
98
104
  }
105
+ get admissionClosed() {
106
+ return this.closed;
107
+ }
99
108
  admit(operation, options, context, preparation, operationEnvelope = false) {
100
109
  if (this.closed)
101
110
  throw new Error('The serial execution queue is closed.');
@@ -238,16 +247,14 @@ class ZLinkSerialExecutionQueue {
238
247
  }
239
248
  if (this.shouldYield()) {
240
249
  this.claimStartedAt = undefined;
241
- await macrotaskBoundary();
250
+ await (0, abort_1.macrotaskBoundary)();
242
251
  }
243
252
  }
244
253
  }
245
254
  finally {
246
255
  this.draining = false;
247
256
  this.claimStartedAt = undefined;
248
- if (!waitingForPreparation &&
249
- (this.application.records.length > 0 ||
250
- (this.activeLifecycle === undefined && this.lifecycle.records.length > 0))) {
257
+ if (!waitingForPreparation && this.selectNext() !== undefined) {
251
258
  this.scheduleDrain();
252
259
  }
253
260
  else {
@@ -258,7 +265,11 @@ class ZLinkSerialExecutionQueue {
258
265
  }
259
266
  }
260
267
  selectNext() {
261
- const applicationReady = this.application.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;
262
273
  const lifecycleReady = this.activeLifecycle === undefined && this.lifecycle.records.length > 0;
263
274
  if (!applicationReady && !lifecycleReady)
264
275
  return undefined;
@@ -266,15 +277,17 @@ class ZLinkSerialExecutionQueue {
266
277
  return { lane: 'lifecycle', record: this.lifecycle.records[0] };
267
278
  }
268
279
  if (!lifecycleReady) {
269
- return { lane: 'application', record: this.application.records[0] };
280
+ return { lane: 'application', record: applicationRecord };
270
281
  }
271
282
  if (!this.lifecycleDebt && this.lifecycleStreak < this.lifecycleBurstLimit) {
272
283
  return { lane: 'lifecycle', record: this.lifecycle.records[0] };
273
284
  }
274
- return { lane: 'application', record: this.application.records[0] };
285
+ return { lane: 'application', record: applicationRecord };
275
286
  }
276
287
  takeSelected(selection) {
277
- const record = selection.lane === 'lifecycle' ? this.takeLifecycle() : this.takeApplication();
288
+ const record = selection.lane === 'lifecycle'
289
+ ? this.takeLifecycle()
290
+ : this.takeApplication(selection.record);
278
291
  if (record !== selection.record) {
279
292
  throw new Error('The selected serial work record changed before owner claim.');
280
293
  }
@@ -289,10 +302,13 @@ class ZLinkSerialExecutionQueue {
289
302
  this.activeLifecycle = record;
290
303
  return record;
291
304
  }
292
- takeApplication() {
305
+ takeApplication(selected) {
293
306
  this.lifecycleStreak = 0;
294
307
  this.lifecycleDebt = false;
295
- 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];
296
312
  }
297
313
  startPreparation(record) {
298
314
  const preparation = record.preparation;
@@ -355,6 +371,32 @@ class ZLinkSerialExecutionQueue {
355
371
  }
356
372
  }
357
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
+ }
358
400
  function createLane() {
359
401
  return {
360
402
  records: []
@@ -370,6 +412,3 @@ function validateNonNegative(value, field) {
370
412
  throw new RangeError(`${field} must be a non-negative safe integer.`);
371
413
  }
372
414
  }
373
- function macrotaskBoundary() {
374
- return new Promise((resolve) => setImmediate(resolve));
375
- }
@@ -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;
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EventLoopWorkQueues = exports.EventLoopResourceStack = void 0;
4
- const execution_1 = require("../execution");
3
+ exports.EventLoopResourceStack = void 0;
4
+ exports.closeResources = closeResources;
5
+ exports.finishResourceCleanup = finishResourceCleanup;
5
6
  /** Closes owned runtime resources once, in reverse acquisition order. */
6
7
  class EventLoopResourceStack {
7
8
  resources = [];
@@ -31,124 +32,10 @@ async function closeResources(resources) {
31
32
  failures.push(error);
32
33
  }
33
34
  }
35
+ finishResourceCleanup(failures);
36
+ }
37
+ function finishResourceCleanup(failures) {
34
38
  if (failures.length > 0) {
35
39
  throw new AggregateError(failures, 'Event-loop resource cleanup failed.');
36
40
  }
37
41
  }
38
- /** Keeps infrastructure progress independent from awaiting application handlers. */
39
- class EventLoopWorkQueues {
40
- infrastructure = [];
41
- infrastructureHead = 0;
42
- infrastructureCount = 0;
43
- application = [];
44
- applicationHead = 0;
45
- applicationCount = 0;
46
- infrastructureScheduled = false;
47
- applicationScheduled = false;
48
- accepting = true;
49
- submitInfrastructure(task) {
50
- if (!this.accepting)
51
- return false;
52
- this.infrastructure.push(task);
53
- this.infrastructureCount += 1;
54
- this.scheduleInfrastructure();
55
- return true;
56
- }
57
- submitApplication(task) {
58
- if (!this.accepting)
59
- return false;
60
- this.application.push(task);
61
- this.applicationCount += 1;
62
- this.scheduleApplication();
63
- return true;
64
- }
65
- stopAdmission() {
66
- this.accepting = false;
67
- }
68
- scheduleInfrastructure() {
69
- if (this.infrastructureScheduled)
70
- return;
71
- this.infrastructureScheduled = true;
72
- queueMicrotask(() => this.drainInfrastructure());
73
- }
74
- drainInfrastructure() {
75
- this.infrastructureScheduled = false;
76
- const task = this.takeInfrastructure();
77
- if (task === undefined)
78
- return;
79
- try {
80
- const result = (0, execution_1.runZLinkExecutionArea)('infrastructure', task);
81
- if (result instanceof Promise)
82
- void result.catch(() => undefined);
83
- }
84
- finally {
85
- if (this.infrastructureCount > 0)
86
- this.scheduleInfrastructure();
87
- }
88
- }
89
- scheduleApplication() {
90
- if (this.applicationScheduled)
91
- return;
92
- this.applicationScheduled = true;
93
- queueMicrotask(() => void this.drainApplication());
94
- }
95
- async drainApplication() {
96
- try {
97
- const task = this.takeApplication();
98
- if (task !== undefined) {
99
- await (0, execution_1.runZLinkExecutionArea)('application', task);
100
- }
101
- }
102
- catch {
103
- // Handler failure is reported by the dispatch owner; it does not stop this queue.
104
- }
105
- finally {
106
- this.applicationScheduled = false;
107
- if (this.applicationCount > 0)
108
- this.scheduleApplication();
109
- }
110
- }
111
- takeInfrastructure() {
112
- const task = this.infrastructure[this.infrastructureHead];
113
- if (task === undefined)
114
- return undefined;
115
- this.infrastructure[this.infrastructureHead] = undefined;
116
- this.infrastructureHead += 1;
117
- this.infrastructureCount -= 1;
118
- this.compactInfrastructure();
119
- return task;
120
- }
121
- takeApplication() {
122
- const task = this.application[this.applicationHead];
123
- if (task === undefined)
124
- return undefined;
125
- this.application[this.applicationHead] = undefined;
126
- this.applicationHead += 1;
127
- this.applicationCount -= 1;
128
- this.compactApplication();
129
- return task;
130
- }
131
- compactInfrastructure() {
132
- if (this.infrastructureCount === 0) {
133
- this.infrastructure.length = 0;
134
- this.infrastructureHead = 0;
135
- }
136
- else if (this.infrastructureHead >= 1024 &&
137
- this.infrastructureHead * 2 >= this.infrastructure.length) {
138
- this.infrastructure.splice(0, this.infrastructureHead);
139
- this.infrastructureHead = 0;
140
- }
141
- }
142
- compactApplication() {
143
- if (this.applicationCount === 0) {
144
- this.application.length = 0;
145
- this.applicationHead = 0;
146
- }
147
- else if (this.applicationHead >= 1024 &&
148
- this.applicationHead * 2 >= this.application.length) {
149
- this.application.splice(0, this.applicationHead);
150
- this.applicationHead = 0;
151
- }
152
- }
153
- }
154
- exports.EventLoopWorkQueues = EventLoopWorkQueues;
@@ -1,3 +1,5 @@
1
+ export declare const OPERATION_IDENTITY_BYTES = 16;
2
+ export declare const ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE = 2n;
1
3
  export interface ZLinkOperationIdentity128 {
2
4
  readonly high: bigint;
3
5
  readonly low: bigint;
@@ -1,8 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE = exports.OPERATION_IDENTITY_BYTES = void 0;
3
4
  exports.operationIdentityKey = operationIdentityKey;
4
5
  exports.createRandomOperationIdentity = createRandomOperationIdentity;
6
+ const stream_wire_1 = require("@zlink-systems/stream-wire");
5
7
  const node_crypto_1 = require("node:crypto");
8
+ exports.OPERATION_IDENTITY_BYTES = 16;
9
+ exports.ZLINK_NATIVE_CORRELATION_OPERATION_NAMESPACE = 2n;
6
10
  function operationIdentityKey(operationId) {
7
11
  requireUnsigned64(operationId.high, 'operationId.high');
8
12
  requireUnsigned64(operationId.low, 'operationId.low');
@@ -13,13 +17,13 @@ function operationIdentityKey(operationId) {
13
17
  }
14
18
  function createRandomOperationIdentity(source = node_crypto_1.randomBytes) {
15
19
  for (;;) {
16
- const bytes = source(16);
17
- if (bytes.length !== 16) {
18
- throw new RangeError('Operation identity entropy source must return exactly 16 bytes.');
20
+ const bytes = source(exports.OPERATION_IDENTITY_BYTES);
21
+ if (bytes.length !== exports.OPERATION_IDENTITY_BYTES) {
22
+ throw new RangeError(`Operation identity entropy source must return exactly ${exports.OPERATION_IDENTITY_BYTES} bytes.`);
19
23
  }
20
24
  const operationId = {
21
25
  high: bytes.readBigUInt64BE(0),
22
- low: bytes.readBigUInt64BE(8)
26
+ low: bytes.readBigUInt64BE(stream_wire_1.UINT64_BYTES)
23
27
  };
24
28
  if (operationId.high !== 0n || operationId.low !== 0n) {
25
29
  return operationId;
@@ -27,7 +31,7 @@ function createRandomOperationIdentity(source = node_crypto_1.randomBytes) {
27
31
  }
28
32
  }
29
33
  function requireUnsigned64(value, name) {
30
- if (typeof value !== 'bigint' || value < 0n || value > 0xffffffffffffffffn) {
34
+ if (typeof value !== 'bigint' || value < 0n || value > stream_wire_1.UINT64_MAX) {
31
35
  throw new RangeError(`${name} must be an unsigned 64-bit integer.`);
32
36
  }
33
37
  }
@@ -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
  export declare class OperationTimeoutError extends Error {
6
5
  readonly operationId: bigint;
@@ -17,20 +16,19 @@ export interface PendingOperation<T> {
17
16
  /** Owns request completion so reply, timeout, cancellation, and shutdown race safely. */
18
17
  export declare class OperationRegistry<T> {
19
18
  private readonly clock;
19
+ private readonly onPendingChanged?;
20
20
  private readonly entries;
21
21
  private nextId;
22
- private generation;
22
+ private deadlineCursor?;
23
23
  private closed;
24
- constructor(clock?: OperationClock);
24
+ constructor(clock?: OperationClock, onPendingChanged?: (() => void) | undefined);
25
25
  register(timeoutMs: number, timeoutOwner?: 'registry' | 'sender'): PendingOperation<T>;
26
26
  complete(id: bigint, value: T): boolean;
27
27
  fail(id: bigint, reason: unknown): boolean;
28
- private failCore;
29
28
  cancel(id: bigint, message?: string): boolean;
30
29
  isPending(id: bigint): boolean;
31
30
  close(reason?: string): void;
32
31
  get size(): number;
33
- private rejectIfCurrent;
32
+ expire(nowMs: number, turnDeadlineMs: number): number;
34
33
  private take;
35
- private clearTimer;
36
34
  }