@zlink-systems/framework 0.30.3 → 0.32.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 (398) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActor.d.ts +2 -0
  3. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
  4. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
  5. package/dist/contracts/Actors/index.d.ts +1 -0
  6. package/dist/contracts/Actors/index.js +1 -0
  7. package/dist/contracts/Common/CoreTypes.d.ts +1 -0
  8. package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
  9. package/dist/contracts/Common/HandlerMessageType.js +41 -0
  10. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
  11. package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
  12. package/dist/contracts/Common/ZLinkMessage.js +11 -7
  13. package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
  14. package/dist/contracts/Common/encoded-payload-storage.js +4 -16
  15. package/dist/contracts/Common/index.d.ts +1 -1
  16. package/dist/contracts/Common/payload-slab.d.ts +4 -0
  17. package/dist/contracts/Common/payload-slab.js +30 -0
  18. package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
  19. package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
  20. package/dist/contracts/Handlers/Contexts.d.ts +1 -0
  21. package/dist/contracts/Locations/Authority.d.ts +2 -0
  22. package/dist/internal.d.ts +9 -0
  23. package/dist/internal.js +23 -1
  24. package/dist/nest-integration.d.ts +1 -0
  25. package/dist/nest-integration.js +3 -1
  26. package/dist/runtime/actors/actor-client.d.ts +6 -2
  27. package/dist/runtime/actors/actor-client.js +120 -82
  28. package/dist/runtime/actors/actor-context.js +16 -5
  29. package/dist/runtime/actors/actor-execution-context.js +2 -2
  30. package/dist/runtime/actors/actor-handoff.d.ts +12 -1
  31. package/dist/runtime/actors/actor-handoff.js +79 -34
  32. package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
  33. package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
  34. package/dist/runtime/actors/actor-local-native-join.js +19 -17
  35. package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
  36. package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
  37. package/dist/runtime/actors/actor-remote-joiner.js +4 -4
  38. package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
  39. package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
  40. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
  41. package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
  42. package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
  43. package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
  44. package/dist/runtime/admission.d.ts +6 -4
  45. package/dist/runtime/admission.js +21 -10
  46. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
  47. package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
  48. package/dist/runtime/backend/contracts/index.d.ts +26 -10
  49. package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
  50. package/dist/runtime/backend/mesh-completion-table.js +84 -20
  51. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
  52. package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
  53. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
  54. package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
  55. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
  56. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
  57. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  58. package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
  59. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
  60. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
  61. package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
  62. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
  63. package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
  64. package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
  65. package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
  66. package/dist/runtime/channels/channel-clients.js +3 -3
  67. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
  68. package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
  69. package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
  70. package/dist/runtime/channels/channel-dispatch-services.js +7 -6
  71. package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
  72. package/dist/runtime/channels/channel-dispatchers.js +57 -36
  73. package/dist/runtime/channels/channel-envelope.d.ts +2 -2
  74. package/dist/runtime/channels/channel-envelope.js +609 -83
  75. package/dist/runtime/channels/channel-multipart.d.ts +1 -0
  76. package/dist/runtime/channels/channel-multipart.js +10 -6
  77. package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
  78. package/dist/runtime/channels/channel-outbound-operations.js +107 -105
  79. package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
  80. package/dist/runtime/channels/channel-receive-loops.js +126 -90
  81. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
  82. package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
  83. package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
  84. package/dist/runtime/channels/channel-runtime-manager.js +32 -14
  85. package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
  86. package/dist/runtime/channels/channel-socket-registry.js +9 -1
  87. package/dist/runtime/channels/channel-transports.d.ts +23 -16
  88. package/dist/runtime/channels/channel-transports.js +139 -119
  89. package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
  90. package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
  91. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  92. package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
  93. package/dist/runtime/channels/local-spot-route-transport.js +15 -18
  94. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
  95. package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
  96. package/dist/runtime/channels/source-spot-router.d.ts +6 -3
  97. package/dist/runtime/channels/source-spot-router.js +34 -23
  98. package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
  99. package/dist/runtime/channels/spot-node-route-transport.js +23 -17
  100. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
  101. package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
  102. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
  103. package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
  104. package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
  105. package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
  106. package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
  107. package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
  108. package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
  109. package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
  110. package/dist/runtime/diagnostics/message-flow-record.js +228 -0
  111. package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
  112. package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
  113. package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
  114. package/dist/runtime/diagnostics/message-flow.js +42 -290
  115. package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
  116. package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
  117. package/dist/runtime/execution/index.d.ts +1 -0
  118. package/dist/runtime/execution/index.js +6 -3
  119. package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
  120. package/dist/runtime/execution/serial-execution-queue.js +75 -71
  121. package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
  122. package/dist/runtime/foundation/durable-service-request.js +158 -73
  123. package/dist/runtime/foundation/operation-registry.d.ts +33 -3
  124. package/dist/runtime/foundation/operation-registry.js +272 -33
  125. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
  126. package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
  127. package/dist/runtime/foundation/request-runtime.d.ts +17 -0
  128. package/dist/runtime/foundation/request-runtime.js +163 -0
  129. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  130. package/dist/runtime/foundation/service-discovery-registry.js +6 -0
  131. package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
  132. package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
  133. package/dist/runtime/foundation/service-mailbox.js +4 -1
  134. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
  135. package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
  136. package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
  137. package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
  138. package/dist/runtime/foundation/service-stateful-registry.js +38 -17
  139. package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
  140. package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
  141. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
  142. package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
  143. package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
  144. package/dist/runtime/foundation/service-topology-registry.js +13 -3
  145. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  146. package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
  147. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
  148. package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
  149. package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
  150. package/dist/runtime/host/actor-packet-relay.js +58 -57
  151. package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
  152. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  153. package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
  154. package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
  155. package/dist/runtime/host/application-job-queue.d.ts +7 -5
  156. package/dist/runtime/host/application-job-queue.js +33 -21
  157. package/dist/runtime/host/bound-session-relay.js +0 -1
  158. package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
  159. package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
  160. package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
  161. package/dist/runtime/host/entry-actor-runtime.js +2 -2
  162. package/dist/runtime/host/index.d.ts +106 -37
  163. package/dist/runtime/host/index.js +303 -151
  164. package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
  165. package/dist/runtime/host/location-runtime-owner.js +1 -1
  166. package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
  167. package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
  168. package/dist/runtime/host/spot-address-transport.d.ts +3 -0
  169. package/dist/runtime/host/spot-address-transport.js +73 -76
  170. package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
  171. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
  172. package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
  173. package/dist/runtime/internal-observation.d.ts +1 -0
  174. package/dist/runtime/internal-observation.js +5 -0
  175. package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
  176. package/dist/runtime/locations/actor-location-claims.js +15 -6
  177. package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
  178. package/dist/runtime/locations/auto-connect-loop.js +25 -19
  179. package/dist/runtime/locations/auto-connect-planner.js +2 -5
  180. package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
  181. package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
  182. package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
  183. package/dist/runtime/locations/in-memory-authority-store.js +15 -5
  184. package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
  185. package/dist/runtime/locations/in-memory-location-store.js +1 -38
  186. package/dist/runtime/locations/lifecycle.d.ts +1 -1
  187. package/dist/runtime/locations/lifecycle.js +2 -2
  188. package/dist/runtime/locations/location-store-repository.d.ts +0 -1
  189. package/dist/runtime/locations/location-store-repository.js +163 -246
  190. package/dist/runtime/locations/resolvers.d.ts +8 -1
  191. package/dist/runtime/locations/resolvers.js +16 -2
  192. package/dist/runtime/locations/runtime.d.ts +3 -3
  193. package/dist/runtime/locations/runtime.js +12 -16
  194. package/dist/runtime/messaging/creation-payload-codec.js +8 -7
  195. package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
  196. package/dist/runtime/messaging/framework-json-v1.js +6 -2
  197. package/dist/runtime/messaging/payload-codec.js +21 -35
  198. package/dist/runtime/messaging/request-deadline.d.ts +4 -2
  199. package/dist/runtime/messaging/request-deadline.js +40 -25
  200. package/dist/runtime/messaging/request-result.d.ts +14 -1
  201. package/dist/runtime/messaging/request-result.js +74 -13
  202. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
  203. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
  204. package/dist/runtime/spots/index.d.ts +28 -7
  205. package/dist/runtime/spots/index.js +31 -6
  206. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
  207. package/dist/runtime/spots/spot-activation-registry.js +13 -8
  208. package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
  209. package/dist/runtime/spots/spot-activation-state.js +1 -0
  210. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
  211. package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
  212. package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
  213. package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
  214. package/dist/runtime/spots/spot-actor-membership.js +3 -3
  215. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
  216. package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
  217. package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
  218. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
  219. package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
  220. package/dist/runtime/spots/spot-entry-activation.js +7 -12
  221. package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
  222. package/dist/runtime/spots/spot-handler-registry.js +31 -15
  223. package/dist/runtime/spots/spot-manager-public.js +3 -2
  224. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
  225. package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
  226. package/dist/runtime/spots/spot-outbound.d.ts +8 -2
  227. package/dist/runtime/spots/spot-outbound.js +5 -5
  228. package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
  229. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
  230. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
  231. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
  232. package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
  233. package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
  234. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
  235. package/dist/runtime/spots/spot-timer.d.ts +1 -1
  236. package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
  237. package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
  238. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
  239. package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
  240. package/dist/runtime/streams/bound-session-service.js +6 -7
  241. package/dist/runtime/streams/index.d.ts +3 -3
  242. package/dist/runtime/streams/index.js +22 -2
  243. package/dist/runtime/streams/managed-stream.js +2 -1
  244. package/dist/runtime/streams/session-calls.d.ts +1 -1
  245. package/dist/runtime/streams/session-calls.js +3 -9
  246. package/dist/runtime/streams/session-context.d.ts +2 -2
  247. package/dist/runtime/streams/session-context.js +2 -2
  248. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
  249. package/dist/runtime/streams/stream-session-runtime.js +64 -33
  250. package/package.json +3 -3
  251. package/src/contracts/Actors/ZLinkActor.ts +6 -0
  252. package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
  253. package/src/contracts/Actors/index.ts +1 -0
  254. package/src/contracts/Common/CoreTypes.ts +1 -0
  255. package/src/contracts/Common/HandlerMessageType.ts +50 -0
  256. package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
  257. package/src/contracts/Common/ZLinkMessage.ts +11 -7
  258. package/src/contracts/Common/encoded-payload-storage.ts +4 -16
  259. package/src/contracts/Common/index.ts +1 -1
  260. package/src/contracts/Common/payload-slab.ts +29 -0
  261. package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
  262. package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
  263. package/src/contracts/Handlers/Contexts.ts +1 -0
  264. package/src/contracts/Locations/Authority.ts +7 -1
  265. package/src/internal.ts +17 -0
  266. package/src/nest-integration.ts +1 -0
  267. package/src/runtime/actors/actor-client.ts +257 -163
  268. package/src/runtime/actors/actor-context.ts +26 -14
  269. package/src/runtime/actors/actor-execution-context.ts +2 -2
  270. package/src/runtime/actors/actor-handoff.ts +86 -51
  271. package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
  272. package/src/runtime/actors/actor-local-native-join.ts +38 -17
  273. package/src/runtime/actors/actor-mailbox.ts +1 -1
  274. package/src/runtime/actors/actor-remote-joiner.ts +8 -4
  275. package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
  276. package/src/runtime/actors/actor-routed-json-request.ts +3 -0
  277. package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
  278. package/src/runtime/actors/actor-runtime-state.ts +1 -1
  279. package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
  280. package/src/runtime/admission.ts +42 -15
  281. package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
  282. package/src/runtime/backend/contracts/index.ts +77 -10
  283. package/src/runtime/backend/mesh-completion-table.ts +106 -15
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
  285. package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
  286. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
  287. package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
  288. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
  289. package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
  290. package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
  291. package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
  292. package/src/runtime/backend/raw-binding-port.ts +13 -5
  293. package/src/runtime/channels/channel-clients.ts +26 -11
  294. package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
  295. package/src/runtime/channels/channel-dispatch-services.ts +7 -12
  296. package/src/runtime/channels/channel-dispatchers.ts +93 -39
  297. package/src/runtime/channels/channel-envelope.ts +680 -144
  298. package/src/runtime/channels/channel-multipart.ts +17 -13
  299. package/src/runtime/channels/channel-outbound-operations.ts +204 -178
  300. package/src/runtime/channels/channel-receive-loops.ts +160 -107
  301. package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
  302. package/src/runtime/channels/channel-runtime-manager.ts +74 -27
  303. package/src/runtime/channels/channel-socket-registry.ts +20 -5
  304. package/src/runtime/channels/channel-transports.ts +414 -287
  305. package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
  306. package/src/runtime/channels/local-spot-route-transport.ts +27 -29
  307. package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
  308. package/src/runtime/channels/source-spot-router.ts +75 -38
  309. package/src/runtime/channels/spot-node-route-transport.ts +67 -37
  310. package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
  311. package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
  312. package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
  313. package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
  314. package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
  315. package/src/runtime/diagnostics/message-flow-record.ts +295 -0
  316. package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
  317. package/src/runtime/diagnostics/message-flow.ts +49 -362
  318. package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
  319. package/src/runtime/execution/index.ts +6 -0
  320. package/src/runtime/execution/serial-execution-queue.ts +94 -96
  321. package/src/runtime/foundation/durable-service-request.ts +212 -89
  322. package/src/runtime/foundation/operation-registry.ts +287 -38
  323. package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
  324. package/src/runtime/foundation/request-runtime.ts +227 -0
  325. package/src/runtime/foundation/service-discovery-registry.ts +7 -0
  326. package/src/runtime/foundation/service-liveness-registry.ts +1 -1
  327. package/src/runtime/foundation/service-mailbox.ts +7 -2
  328. package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
  329. package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
  330. package/src/runtime/foundation/service-stateful-registry.ts +52 -19
  331. package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
  332. package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
  333. package/src/runtime/foundation/service-topology-registry.ts +21 -3
  334. package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
  335. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
  336. package/src/runtime/host/actor-packet-relay.ts +160 -156
  337. package/src/runtime/host/actor-placement-coordinator.ts +1 -1
  338. package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
  339. package/src/runtime/host/actor-transfer-runtime.ts +3 -3
  340. package/src/runtime/host/application-job-queue.ts +56 -27
  341. package/src/runtime/host/bound-session-relay.ts +0 -1
  342. package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
  343. package/src/runtime/host/entry-actor-runtime.ts +14 -6
  344. package/src/runtime/host/index.ts +388 -113
  345. package/src/runtime/host/location-runtime-owner.ts +3 -3
  346. package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
  347. package/src/runtime/host/spot-address-transport.ts +110 -95
  348. package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
  349. package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
  350. package/src/runtime/internal-observation.ts +2 -0
  351. package/src/runtime/locations/actor-location-claims.ts +42 -16
  352. package/src/runtime/locations/auto-connect-loop.ts +24 -16
  353. package/src/runtime/locations/auto-connect-planner.ts +2 -5
  354. package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
  355. package/src/runtime/locations/in-memory-authority-store.ts +27 -7
  356. package/src/runtime/locations/in-memory-location-store.ts +1 -74
  357. package/src/runtime/locations/lifecycle.ts +4 -2
  358. package/src/runtime/locations/location-store-repository.ts +228 -308
  359. package/src/runtime/locations/resolvers.ts +20 -8
  360. package/src/runtime/locations/runtime.ts +16 -28
  361. package/src/runtime/messaging/creation-payload-codec.ts +12 -10
  362. package/src/runtime/messaging/framework-json-v1.ts +10 -1
  363. package/src/runtime/messaging/payload-codec.ts +50 -75
  364. package/src/runtime/messaging/request-deadline.ts +47 -39
  365. package/src/runtime/messaging/request-result.ts +88 -17
  366. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  367. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  368. package/src/runtime/spots/index.ts +57 -10
  369. package/src/runtime/spots/spot-activation-registry.ts +12 -8
  370. package/src/runtime/spots/spot-activation-state.ts +2 -0
  371. package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
  372. package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
  373. package/src/runtime/spots/spot-actor-membership.ts +8 -5
  374. package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
  375. package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
  376. package/src/runtime/spots/spot-entry-activation.ts +25 -35
  377. package/src/runtime/spots/spot-handler-registry.ts +72 -15
  378. package/src/runtime/spots/spot-manager-public.ts +4 -2
  379. package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
  380. package/src/runtime/spots/spot-outbound.ts +26 -10
  381. package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
  382. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
  383. package/src/runtime/spots/spot-runtime-ports.ts +5 -2
  384. package/src/runtime/spots/spot-serial-executor.ts +1 -1
  385. package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
  386. package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
  387. package/src/runtime/spots/spot-timer.ts +1 -1
  388. package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
  389. package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
  390. package/src/runtime/streams/bound-session-service.ts +10 -7
  391. package/src/runtime/streams/index.ts +30 -4
  392. package/src/runtime/streams/managed-stream.ts +2 -1
  393. package/src/runtime/streams/session-calls.ts +9 -14
  394. package/src/runtime/streams/session-context.ts +6 -11
  395. package/src/runtime/streams/stream-session-runtime.ts +79 -40
  396. package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
  397. package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
  398. package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
@@ -1,3 +1,5 @@
1
+ import type { ZLinkActorSessionAuthorityFence } from '../streams/actor-session-binding-registry';
2
+ import { mapZLinkRequestReply } from '../messaging/request-result';
1
3
  import {
2
4
  ZLinkFrameworkInternalErrorKind,
3
5
  createInternalFrameworkException,
@@ -41,7 +43,7 @@ import { streamMetadataMap } from '../actors/bound-session-wire';
41
43
  import { decodeRoutingId, normalizeRoutingId, routingIdsEqual } from '../routing-id';
42
44
  import { encodeSessionDisconnected } from '../actors/session-disconnected-wire';
43
45
  import { ZLinkSubmitStatus } from '../messaging/submission-result';
44
- import type { DefaultZLinkSpotManager, ZLinkSpotNodeRuntimeManager } from '../spots';
46
+ import type { ZLinkSpotNodeRuntimeManager } from '../spots';
45
47
  import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
46
48
  import type { ZLinkBoundSessionResponseTarget } from '../streams';
47
49
  import type {
@@ -70,7 +72,6 @@ export interface ZLinkActorPacketRelayOptions {
70
72
  readonly streamBindingRuntime: () => ZLinkBoundSessionResponsePort & ZLinkStreamActorLookupPort;
71
73
  readonly meshRouters: MeshRouterResolver;
72
74
  readonly actorManager: () => DefaultZLinkActorManager | undefined;
73
- readonly spotManager: () => DefaultZLinkSpotManager | undefined;
74
75
  readonly spotNodeRuntime: () => ZLinkSpotNodeRuntimeManager | undefined;
75
76
  readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
76
77
  readonly errorSink: () => { reportRuntimeTaskException(taskName: string, error: unknown): void };
@@ -112,7 +113,8 @@ export class ZLinkActorPacketRelay {
112
113
  async notifyBoundActorDisconnected(
113
114
  actor: ZLinkSessionActor,
114
115
  signal?: AbortSignal,
115
- binding?: ServiceStreamSessionBinding
116
+ binding?: ServiceStreamSessionBinding,
117
+ authorityFence?: ZLinkActorSessionAuthorityFence
116
118
  ): Promise<void> {
117
119
  // The Session binding owns this route, including after relocation and detach (§5, §7).
118
120
  const actorRefTarget = this.targets.targetForActorRef(actor.ref);
@@ -122,11 +124,18 @@ export class ZLinkActorPacketRelay {
122
124
  actorRefTarget,
123
125
  signal,
124
126
  actor.ref,
125
- binding
127
+ binding,
128
+ authorityFence
126
129
  );
127
130
  return;
128
131
  }
129
- await this.notifyLocalActorDisconnectedById(actor.actorId, signal, binding, actor.ref);
132
+ await this.notifyLocalActorDisconnectedById(
133
+ actor.actorId,
134
+ signal,
135
+ binding,
136
+ actor.ref,
137
+ authorityFence
138
+ );
130
139
  }
131
140
 
132
141
  clearRemoteActorPacketTarget(actorId: string): void {
@@ -145,33 +154,32 @@ export class ZLinkActorPacketRelay {
145
154
  actorId: string,
146
155
  signal?: AbortSignal,
147
156
  binding?: ServiceStreamSessionBinding,
148
- bindingActorRef?: ActorRef
157
+ bindingActorRef?: ActorRef,
158
+ authorityFence?: ZLinkActorSessionAuthorityFence
149
159
  ): Promise<void> {
150
160
  throwIfAborted(signal);
151
- const state = this.options.actorManager()?.getState(actorId);
152
161
  const frame = this.disconnectedFrame(actorId, binding);
153
162
  const header = RuntimeMessage.fromOwned(Buffer.from(frame.header));
154
163
  const body = RuntimeMessage.fromOwned(frame.payload);
155
164
  try {
156
- if (state?.spotId === undefined)
157
- await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
158
- 'local',
159
- actorId,
160
- [header, body],
161
- false,
162
- undefined,
163
- bindingActorRef
164
- );
165
- else
166
- await this.requireSpotManager().dispatchRoutedActorPacket(
167
- 'local',
168
- state.spotId,
169
- actorId,
170
- [header, body],
171
- false,
172
- undefined,
173
- bindingActorRef
174
- );
165
+ const context = sessionActorFollowContext(
166
+ bindingActorRef,
167
+ authorityFence,
168
+ [header, body],
169
+ false
170
+ );
171
+ const ref =
172
+ context === undefined || bindingActorRef === undefined
173
+ ? bindingActorRef
174
+ : attachActorMessageFollowContext(bindingActorRef, context);
175
+ await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
176
+ 'local',
177
+ actorId,
178
+ [header, body],
179
+ false,
180
+ undefined,
181
+ ref
182
+ );
175
183
  } finally {
176
184
  header.close();
177
185
  body.close();
@@ -275,30 +283,18 @@ export class ZLinkActorPacketRelay {
275
283
  ) {
276
284
  this.requireCurrentRemoteBinding(relay, _routeContext);
277
285
  }
278
- const state = this.options.actorManager()?.getState(relay.actorId);
279
286
  if (
280
287
  frameHeader.kind === ZLinkStreamMessageKind.Send ||
281
288
  frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET
282
289
  ) {
283
- const dispatch =
284
- state?.spotId === undefined
285
- ? this.requireSpotNodeRuntime().dispatchEntryActorPacket(
286
- 'remote',
287
- relay.actorId,
288
- [header, body],
289
- false,
290
- remoteBoundSessionTarget,
291
- fallbackActorRef
292
- )
293
- : this.requireSpotManager().dispatchRoutedActorPacket(
294
- 'remote',
295
- state.spotId,
296
- relay.actorId,
297
- [header, body],
298
- false,
299
- remoteBoundSessionTarget,
300
- fallbackActorRef
301
- );
290
+ const dispatch = this.requireSpotNodeRuntime().dispatchEntryActorPacket(
291
+ 'remote',
292
+ relay.actorId,
293
+ [header, body],
294
+ false,
295
+ remoteBoundSessionTarget,
296
+ fallbackActorRef
297
+ );
302
298
  if (frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
303
299
  await dispatch;
304
300
  return {
@@ -344,25 +340,14 @@ export class ZLinkActorPacketRelay {
344
340
  frameHeader.requestSeq !== undefined &&
345
341
  relay.returnResponse !== true
346
342
  ) {
347
- const dispatch =
348
- state?.spotId === undefined
349
- ? this.requireSpotNodeRuntime().dispatchEntryActorPacket(
350
- 'remote',
351
- relay.actorId,
352
- [header, body],
353
- false,
354
- remoteBoundSessionTarget,
355
- fallbackActorRef
356
- )
357
- : this.requireSpotManager().dispatchRoutedActorPacket(
358
- 'remote',
359
- state.spotId,
360
- relay.actorId,
361
- [header, body],
362
- false,
363
- remoteBoundSessionTarget,
364
- fallbackActorRef
365
- );
343
+ const dispatch = this.requireSpotNodeRuntime().dispatchEntryActorPacket(
344
+ 'remote',
345
+ relay.actorId,
346
+ [header, body],
347
+ false,
348
+ remoteBoundSessionTarget,
349
+ fallbackActorRef
350
+ );
366
351
  closeFrameMessages = false;
367
352
  const deferredPacketName = frameHeader.name;
368
353
  const deferredRequestSeq = frameHeader.requestSeq;
@@ -413,25 +398,14 @@ export class ZLinkActorPacketRelay {
413
398
  )
414
399
  };
415
400
  }
416
- const response =
417
- state?.spotId === undefined
418
- ? await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
419
- 'remote',
420
- relay.actorId,
421
- [header, body],
422
- relay.returnResponse === true,
423
- remoteBoundSessionTarget,
424
- fallbackActorRef
425
- )
426
- : await this.requireSpotManager().dispatchRoutedActorPacket(
427
- 'remote',
428
- state.spotId,
429
- relay.actorId,
430
- [header, body],
431
- relay.returnResponse === true,
432
- remoteBoundSessionTarget,
433
- fallbackActorRef
434
- );
401
+ const response = await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
402
+ 'remote',
403
+ relay.actorId,
404
+ [header, body],
405
+ relay.returnResponse === true,
406
+ remoteBoundSessionTarget,
407
+ fallbackActorRef
408
+ );
435
409
  return {
436
410
  ok: true,
437
411
  response,
@@ -611,28 +585,15 @@ export class ZLinkActorPacketRelay {
611
585
  );
612
586
  let request: Record<string, unknown>;
613
587
  try {
614
- const authority = aggregateRoute?.authorityFence;
615
- const messageFollowContext =
616
- authority?.ownerId === undefined || authority.ownerNodeGeneration === undefined
617
- ? undefined
618
- : createInitialActorMessageFollowContext(
619
- {
620
- meshName: storedActorRef.meshName,
621
- actorRef: storedActorRef,
622
- actorType: authority.actorType ?? '',
623
- ownerNodeGeneration: authority.ownerNodeGeneration,
624
- ownerId: authority.ownerId,
625
- ownerLeaseGeneration: authority.ownerLeaseGeneration,
626
- authorityOwnerGeneration: authority.authorityOwnerGeneration,
627
- authorityStoreVersion: authority.authorityStoreVersion ?? ''
628
- },
629
- [header, payload],
630
- returnResponse,
631
- undefined,
632
- isValidMessageFollowId(frameHeader.correlationId)
633
- ? frameHeader.correlationId
634
- : createMessageFollowId()
635
- );
588
+ const messageFollowContext = sessionActorFollowContext(
589
+ storedActorRef,
590
+ aggregateRoute?.authorityFence,
591
+ [header, payload],
592
+ returnResponse,
593
+ isValidMessageFollowId(frameHeader.correlationId)
594
+ ? frameHeader.correlationId
595
+ : createMessageFollowId()
596
+ );
636
597
  request = encodeRemoteActorPacketRelayPayload({
637
598
  actorId: actor.actorId,
638
599
  routerChannelId: remoteTarget.routerChannelId,
@@ -751,7 +712,8 @@ export class ZLinkActorPacketRelay {
751
712
  remoteTarget: ZLinkRemoteBoundSessionTarget | ZLinkRemoteActorPacketTarget,
752
713
  signal?: AbortSignal,
753
714
  bindingActorRef?: ActorRef,
754
- binding?: ServiceStreamSessionBinding
715
+ binding?: ServiceStreamSessionBinding,
716
+ authorityFence?: ZLinkActorSessionAuthorityFence
755
717
  ): Promise<void> {
756
718
  const spotKind: ZLinkSpotKind | undefined =
757
719
  'spotKind' in remoteTarget ? (remoteTarget.spotKind as ZLinkSpotKind | undefined) : undefined;
@@ -760,36 +722,55 @@ export class ZLinkActorPacketRelay {
760
722
  binding,
761
723
  'sessionNodeRid' in remoteTarget ? remoteTarget : undefined
762
724
  );
763
- const payload = encodeRemoteActorPacketRelayPayload({
764
- actorId,
765
- routerChannelId: remoteTarget.routerChannelId,
766
- bindingActorRef,
767
- ...frame
768
- });
725
+ const parts = [
726
+ RuntimeMessage.fromOwned(Buffer.from(frame.header)),
727
+ RuntimeMessage.fromOwned(frame.payload)
728
+ ];
729
+ let payload: Record<string, unknown>;
730
+ try {
731
+ payload = encodeRemoteActorPacketRelayPayload({
732
+ actorId,
733
+ routerChannelId: remoteTarget.routerChannelId,
734
+ bindingActorRef,
735
+ messageFollowContext: sessionActorFollowContext(
736
+ bindingActorRef,
737
+ authorityFence,
738
+ parts,
739
+ false
740
+ ),
741
+ ...frame
742
+ });
743
+ } finally {
744
+ for (const part of parts) part.close();
745
+ }
769
746
  if ((spotKind ?? ZLinkSpotKind.Entry) === ZLinkSpotKind.Entry) {
770
- await this.options.routeTransport.request(
771
- remoteTarget.routerChannelId,
772
- String(remoteTarget.targetNodeRid),
773
- ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
774
- payload,
775
- this.options.requestTimeoutMs,
776
- signal
747
+ await mapZLinkRequestReply(
748
+ this.options.routeTransport.request(
749
+ remoteTarget.routerChannelId,
750
+ String(remoteTarget.targetNodeRid),
751
+ ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
752
+ payload,
753
+ this.options.requestTimeoutMs,
754
+ signal
755
+ )
777
756
  );
778
757
  return;
779
758
  }
780
- await this.options.routeTransport.requestToSpot(
781
- {
782
- routerChannelId: remoteTarget.routerChannelId,
783
- targetNodeRid: remoteTarget.targetNodeRid,
784
- spotId: remoteTarget.spotId,
785
- spotKind: spotKind ?? ZLinkSpotKind.Entry
786
- },
787
- payload,
788
- {
789
- packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
790
- timeoutMs: this.options.requestTimeoutMs,
791
- signal
792
- }
759
+ await mapZLinkRequestReply(
760
+ this.options.routeTransport.requestToSpot(
761
+ {
762
+ routerChannelId: remoteTarget.routerChannelId,
763
+ targetNodeRid: remoteTarget.targetNodeRid,
764
+ spotId: remoteTarget.spotId,
765
+ spotKind: spotKind ?? ZLinkSpotKind.Entry
766
+ },
767
+ payload,
768
+ {
769
+ packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
770
+ timeoutMs: this.options.requestTimeoutMs,
771
+ signal
772
+ }
773
+ )
793
774
  );
794
775
  }
795
776
 
@@ -856,13 +837,15 @@ export class ZLinkActorPacketRelay {
856
837
  ): Promise<TReply> {
857
838
  if (target.spotKind === ZLinkSpotKind.Entry) {
858
839
  try {
859
- return await this.options.routeTransport.request<TReply>(
860
- target.routerChannelId,
861
- String(target.targetNodeRid),
862
- ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
863
- request,
864
- this.options.requestTimeoutMs,
865
- signal
840
+ return await mapZLinkRequestReply(
841
+ this.options.routeTransport.request<TReply>(
842
+ target.routerChannelId,
843
+ String(target.targetNodeRid),
844
+ ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
845
+ request,
846
+ this.options.requestTimeoutMs,
847
+ signal
848
+ )
866
849
  );
867
850
  } catch (error) {
868
851
  if (!(error instanceof ZLinkConfigurationException)) {
@@ -886,13 +869,10 @@ export class ZLinkActorPacketRelay {
886
869
  payload: Message
887
870
  ): Promise<boolean> {
888
871
  const state = this.options.actorManager()?.getState(actor.actorId);
889
- const spotId = state?.spotId as RoutingId | undefined;
890
- const hasActiveSpot =
891
- spotId !== undefined && this.options.spotManager()?.hasActiveSpot(spotId) === true;
892
- if (!hasActiveSpot) {
872
+ if (state === undefined) {
893
873
  return false;
894
874
  }
895
- const actorRef = state?.nativeActorRef as ActorRef | undefined;
875
+ const actorRef = state.nativeActorRef as ActorRef | undefined;
896
876
  const localNode = this.options.spotNodeRuntime()?.primaryMeshNode;
897
877
  const localNodeRid = localNode === undefined ? undefined : String(localNode.status().routingId);
898
878
  if (
@@ -916,12 +896,13 @@ export class ZLinkActorPacketRelay {
916
896
  try {
917
897
  this.options.detachedTaskRunner.runDetached('local actor packet relay', async () => {
918
898
  try {
919
- const response = await this.requireSpotManager().dispatchRoutedActorPacket(
899
+ const response = await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
920
900
  'local',
921
- spotId,
922
901
  actor.actorId,
923
902
  [header, body],
924
- returnResponse
903
+ returnResponse,
904
+ undefined,
905
+ actor.ref
925
906
  );
926
907
  if (!returnResponse) {
927
908
  return;
@@ -1004,14 +985,6 @@ export class ZLinkActorPacketRelay {
1004
985
  }
1005
986
  return runtime;
1006
987
  }
1007
-
1008
- private requireSpotManager(): DefaultZLinkSpotManager {
1009
- const manager = this.options.spotManager();
1010
- if (manager === undefined) {
1011
- throw new Error('SPOT manager runtime is not started.');
1012
- }
1013
- return manager;
1014
- }
1015
988
  }
1016
989
 
1017
990
  function isValidMessageFollowId(value: string | undefined): value is string {
@@ -1026,3 +999,34 @@ function withDefaultSpotKind(
1026
999
  ? { ...target, spotKind: ZLinkSpotKind.Entry }
1027
1000
  : (target as ZLinkRemoteActorPacketTarget & { readonly spotKind: ZLinkSpotKind });
1028
1001
  }
1002
+
1003
+ function sessionActorFollowContext(
1004
+ actorRef: ActorRef | undefined,
1005
+ authority: ZLinkActorSessionAuthorityFence | undefined,
1006
+ parts: readonly Message[],
1007
+ request: boolean,
1008
+ operationId?: string
1009
+ ) {
1010
+ if (
1011
+ actorRef === undefined ||
1012
+ authority?.ownerId === undefined ||
1013
+ authority.ownerNodeGeneration === undefined
1014
+ )
1015
+ return undefined;
1016
+ return createInitialActorMessageFollowContext(
1017
+ {
1018
+ meshName: actorRef.meshName,
1019
+ actorRef,
1020
+ actorType: authority.actorType ?? '',
1021
+ ownerNodeGeneration: authority.ownerNodeGeneration,
1022
+ ownerId: authority.ownerId,
1023
+ ownerLeaseGeneration: authority.ownerLeaseGeneration,
1024
+ authorityOwnerGeneration: authority.authorityOwnerGeneration,
1025
+ authorityStoreVersion: authority.authorityStoreVersion ?? ''
1026
+ },
1027
+ parts,
1028
+ request,
1029
+ undefined,
1030
+ operationId
1031
+ );
1032
+ }
@@ -82,7 +82,7 @@ export interface ZLinkActorPlacementCoordinatorOptions {
82
82
  }
83
83
 
84
84
  export class ZLinkActorPlacementCoordinator {
85
- constructor(private readonly options: ZLinkActorPlacementCoordinatorOptions) {}
85
+ constructor(readonly options: ZLinkActorPlacementCoordinatorOptions) {}
86
86
 
87
87
  async create(
88
88
  actorId: string,
@@ -1,3 +1,4 @@
1
+ import type { RequestRuntime } from '../foundation/request-runtime';
1
2
  import type { ActorRef, RoutingId, ZLinkActor, ZLinkMessage } from '../../contracts';
2
3
  import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
3
4
  import type { Type } from '../../contracts/Common/CoreTypes';
@@ -34,6 +35,7 @@ import type { ZLinkRemoteActorPacketTarget } from '../actors';
34
35
  import type { ZLinkActorJoinRelocation } from '../actors/actor-join-relocation';
35
36
 
36
37
  export interface ZLinkActorRuntimeOptionsFactoryOptions {
38
+ readonly requests?: RequestRuntime;
37
39
  readonly terminateActorActivation: (
38
40
  actor: ZLinkActor,
39
41
  terminal: () => Promise<void>
@@ -261,6 +263,7 @@ export class ZLinkActorRuntimeOptionsFactory {
261
263
  createActorClientOptions(): ConstructorParameters<typeof DefaultZLinkActorClient>[0] {
262
264
  const locationResolver = this.options.createActorLocationResolver();
263
265
  return {
266
+ requests: this.options.requests,
264
267
  nodeProvider: this.options.meshNode,
265
268
  completionTableProvider: this.options.meshCompletions,
266
269
  locationResolver: () => locationResolver,
@@ -283,7 +286,8 @@ export class ZLinkActorRuntimeOptionsFactory {
283
286
  returnResponse,
284
287
  actor,
285
288
  deadlineUnixMs,
286
- onAdmitted
289
+ onAdmitted,
290
+ requestOperation
287
291
  ) =>
288
292
  this.actorBelongsToMesh(meshName, actorId) &&
289
293
  !this.options.actorHandoff.isProvisional(actorId)
@@ -297,7 +301,8 @@ export class ZLinkActorRuntimeOptionsFactory {
297
301
  deadlineUnixMs,
298
302
  undefined,
299
303
  undefined,
300
- onAdmitted
304
+ onAdmitted,
305
+ requestOperation
301
306
  )
302
307
  : undefined,
303
308
  sendErrorReporter: this.options.reportPostCommitError
@@ -703,7 +703,7 @@ export class ZLinkActorTransferRuntime {
703
703
  );
704
704
  }
705
705
 
706
- private async sealBoundSessionRoute(
706
+ async sealBoundSessionRoute(
707
707
  actor: ZLinkActor,
708
708
  state: ZLinkActorRuntimeState,
709
709
  signal?: AbortSignal,
@@ -814,7 +814,7 @@ export class ZLinkActorTransferRuntime {
814
814
  };
815
815
  }
816
816
 
817
- private async abortBoundSessionRouteSeal(
817
+ async abortBoundSessionRouteSeal(
818
818
  actor: ZLinkActor,
819
819
  state: ZLinkActorRuntimeState,
820
820
  target: ZLinkRemoteBoundSessionTarget
@@ -1336,7 +1336,7 @@ export class ZLinkActorTransferRuntime {
1336
1336
  return actorManager;
1337
1337
  }
1338
1338
 
1339
- private async publishBoundSessionOwnership(
1339
+ async publishBoundSessionOwnership(
1340
1340
  actorId: string,
1341
1341
  actorRef: ZLinkBackendActorRef,
1342
1342
  ownershipGeneration: bigint,
@@ -1,5 +1,5 @@
1
- import { SeverityNumber } from '@opentelemetry/api-logs';
2
- import { telemetryLogger } from '../diagnostics/message-flow';
1
+ import { logs, SeverityNumber } from '@opentelemetry/api-logs';
2
+ import { TELEMETRY_INSTRUMENTATION_NAME } from '../diagnostics/message-flow-record';
3
3
  import { MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
4
4
  import { ZLinkApplicationJobQueueProfile } from '../../contracts/Dispatch';
5
5
  import {
@@ -23,6 +23,8 @@ import {
23
23
  type ApplicationJobReceiveFlowTarget
24
24
  } from '../application-jobs/receive-flow-controller';
25
25
 
26
+ const telemetryLogger = logs.getLogger(TELEMETRY_INSTRUMENTATION_NAME);
27
+
26
28
  export type ApplicationJobQueueProfileValue = 'compact' | 'low_latency' | 'balanced' | 'throughput';
27
29
 
28
30
  export interface ApplicationJobQueueOptions {
@@ -182,6 +184,10 @@ export class ApplicationJobQueuePermit implements ApplicationJobPermitPort {
182
184
  this.owner.releasePermit(this);
183
185
  }
184
186
 
187
+ releaseUnqueued(): void {
188
+ if (this.state === 'reserved') this.owner.releasePermit(this);
189
+ }
190
+
185
191
  takeReleaseState(): 'reserved' | 'queued' | undefined {
186
192
  if (this.state === 'released' || this.state === 'idle') return undefined;
187
193
  const state = this.state;
@@ -209,10 +215,21 @@ class ApplicationJobReceiveRotation implements ApplicationJobReceiveRotationPort
209
215
 
210
216
  reserve(): void {
211
217
  this.releaseUnused();
212
- const count = this.owner.receiveRotationCapacity(this.capacity);
213
- if (count === 0) return;
214
- this.granted = count;
215
- this.owner.reserveReceiveRotation(count);
218
+ this.granted = this.owner.tryReserveCount(this.capacity) ?? 0;
219
+ }
220
+
221
+ async acquire(signal: AbortSignal): Promise<void> {
222
+ this.releaseUnused();
223
+ this.granted = await new Promise<number>((resolve, reject) => {
224
+ const count = this.owner.acquireCountOrResume(
225
+ resolve,
226
+ reject,
227
+ signal,
228
+ this.origin,
229
+ this.capacity
230
+ );
231
+ if (count !== undefined) resolve(count);
232
+ });
216
233
  }
217
234
 
218
235
  take(): ApplicationJobQueuePermit | undefined {
@@ -237,7 +254,8 @@ class ApplicationJobReceiveRotation implements ApplicationJobReceiveRotationPort
237
254
 
238
255
  interface CapacityWaiter {
239
256
  readonly origin: ApplicationJobOrigin;
240
- readonly resolve: (permit: ApplicationJobQueuePermit) => void;
257
+ readonly requested: number;
258
+ readonly resolve: (count: number) => void;
241
259
  readonly reject: (reason: unknown) => void;
242
260
  readonly signal?: AbortSignal;
243
261
  readonly abort: () => void;
@@ -299,19 +317,15 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
299
317
  createReceiveRotation(
300
318
  capacity: number,
301
319
  origin: ApplicationJobOrigin
302
- ): ApplicationJobReceiveRotationPort {
320
+ ): ApplicationJobReceiveRotation {
303
321
  if (!Number.isSafeInteger(capacity) || capacity < 1)
304
322
  throw new RangeError('Receive capacity must be positive.');
305
323
  return new ApplicationJobReceiveRotation(this, capacity, origin);
306
324
  }
307
325
 
308
- receiveRotationCapacity(capacity: number): number {
309
- if (this.waiters.length !== 0) return 0;
310
- return Math.min(capacity, this.limitCount - this.permitsInUse());
311
- }
312
-
313
- reserveReceiveRotation(count: number): void {
314
- this.reserveSupply(count);
326
+ tryReserveCount(requested: number): number | undefined {
327
+ if (this.waiters.length !== 0 || this.permitsInUse() === this.limitCount) return undefined;
328
+ return this.reserveCount(requested);
315
329
  }
316
330
 
317
331
  registerReceiveFlowTarget(
@@ -372,17 +386,34 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
372
386
  signal: AbortSignal | undefined,
373
387
  origin: ApplicationJobOrigin
374
388
  ): ApplicationJobQueuePermit | undefined {
389
+ const count = this.acquireCountOrResume(
390
+ () => resume(new ApplicationJobQueuePermit(this, origin)),
391
+ reject,
392
+ signal,
393
+ origin,
394
+ 1
395
+ );
396
+ return count === undefined ? undefined : new ApplicationJobQueuePermit(this, origin);
397
+ }
398
+
399
+ acquireCountOrResume(
400
+ resume: (count: number) => void,
401
+ reject: (reason: unknown) => void,
402
+ signal: AbortSignal | undefined,
403
+ origin: ApplicationJobOrigin,
404
+ requested: number
405
+ ): number | undefined {
375
406
  if (signal?.aborted === true) {
376
407
  reject(abortReason(signal));
377
408
  return undefined;
378
409
  }
379
- if (this.waiters.length === 0 && this.permitsInUse() < this.limitCount) {
380
- return this.reserve(origin);
381
- }
410
+ const count = this.tryReserveCount(requested);
411
+ if (count !== undefined) return count;
382
412
 
383
- new Promise<ApplicationJobQueuePermit>((resolve, reject) => {
413
+ new Promise<number>((resolve, reject) => {
384
414
  const waiter: CapacityWaiter = {
385
415
  origin,
416
+ requested,
386
417
  resolve,
387
418
  reject,
388
419
  signal,
@@ -511,12 +542,10 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
511
542
  if (evaluatePressure) this.evaluatePressure();
512
543
  }
513
544
 
514
- private reserve(
515
- origin: ApplicationJobOrigin,
516
- evaluatePressure = true
517
- ): ApplicationJobQueuePermit {
518
- this.reserveSupply(1, evaluatePressure);
519
- return new ApplicationJobQueuePermit(this, origin);
545
+ private reserveCount(requested: number, evaluatePressure = true): number {
546
+ const count = Math.min(requested, this.limitCount - this.permitsInUse());
547
+ this.reserveSupply(count, evaluatePressure);
548
+ return count;
520
549
  }
521
550
 
522
551
  private drainWaiters(): void {
@@ -526,7 +555,7 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
526
555
  waiter.active = false;
527
556
  waiter.signal?.removeEventListener('abort', waiter.abort);
528
557
  this.recordCompletedWait(waiter);
529
- waiter.resolve(this.reserve(waiter.origin, false));
558
+ waiter.resolve(this.reserveCount(waiter.requested, false));
530
559
  }
531
560
  }
532
561
 
@@ -579,7 +608,7 @@ export class ApplicationJobQueue implements ApplicationJobQueuePort {
579
608
  }
580
609
  }
581
610
 
582
- private evaluatePressure(): void {
611
+ evaluatePressure(): void {
583
612
  const next =
584
613
  this.pressureStateValue === 'running'
585
614
  ? this.permitsInUse() >= this.pauseCount