@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
@@ -29,6 +29,7 @@ export declare class ApplicationJobRecordLease implements ApplicationJobPermitPo
29
29
  private processingTerminal;
30
30
  detachedForHandlerTurn: boolean;
31
31
  constructor(shared: SharedIngressRecordState, permit: ApplicationJobPermitPort | undefined);
32
+ reacquire(signal: AbortSignal): Promise<ApplicationJobPermitPort>;
32
33
  get origin(): ApplicationJobOrigin;
33
34
  markApplicationQueued(): void;
34
35
  detachForHandlerTurn(): void;
@@ -84,6 +84,9 @@ class ApplicationJobRecordLease {
84
84
  this.shared = shared;
85
85
  this.permit = permit;
86
86
  }
87
+ reacquire(signal) {
88
+ return this.shared.acquirePermit(signal);
89
+ }
87
90
  get origin() {
88
91
  return this.shared.origin;
89
92
  }
@@ -1,3 +1,5 @@
1
+ import type { PendingOperation } from '../../foundation/operation-registry';
2
+ import type { RequestRuntime } from '../../foundation/request-runtime';
1
3
  import type { RequestResult, SubmitResult, ZLinkBackendMessageLike, ZLinkBackendMonitorEventType, ZLinkBackendReceived, ZLinkBackendTopicMessage } from '../runtime-values';
2
4
  import type { CoreHwmBudgetSnapshot, ReceiveFlowState } from '@zlink-systems/zlink';
3
5
  import { type ZLinkBackendRecvFlags, type ZLinkBackendSendFlags } from '../runtime-values';
@@ -34,6 +36,7 @@ export type ZLinkBackendObjectPlacement = {
34
36
  };
35
37
  export type ZLinkBackendRequestSourceAcceptance = (nodeRid: string, nodeGeneration: bigint, nodeRidStorageHex: string, signal?: AbortSignal) => import('../../locations/request-source-resolver').ZLinkRequestSourceFence | undefined | Promise<import('../../locations/request-source-resolver').ZLinkRequestSourceFence | undefined>;
36
38
  export interface ZLinkBackendMeshNode {
39
+ setRequestRuntime?(requests: RequestRuntime): void;
37
40
  acceptRelocatedActorTerminal?(operation: {
38
41
  readonly high: bigint;
39
42
  readonly low: bigint;
@@ -76,9 +79,9 @@ export interface ZLinkBackendMeshNode {
76
79
  selectObjectPlacement(stableType: string): ZLinkBackendObjectPlacement;
77
80
  instanceSpotPlacementTypes?(): readonly string[];
78
81
  sendToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>): Promise<SubmitResult>;
79
- requestToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): MeshOperationId;
82
+ requestToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void, requestOperation?: PendingOperation<unknown>): MeshOperationId;
80
83
  sendToInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean): Promise<SubmitResult>;
81
- requestInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], timeoutMs?: number, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean, onAdmitted?: () => void): MeshOperationId;
84
+ requestInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], timeoutMs?: number, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean, onAdmitted?: () => void, requestOperation?: PendingOperation<unknown>, completion?: ZLinkMeshCompletionHandler): MeshOperationId;
82
85
  registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
83
86
  requestUserSpotCreate(targetNodeRid: string, request: Omit<ServiceUserSpotCreateRecord, 'kind' | 'correlation' | 'operation'>, timeoutMs: number): Promise<ServiceUserSpotOperationResult>;
84
87
  requestUserSpotClose(targetNodeRid: string, request: Omit<ServiceUserSpotCloseRecord, 'kind' | 'correlation' | 'operation'>, timeoutMs: number): Promise<ServiceUserSpotOperationResult>;
@@ -130,24 +133,27 @@ export interface ZLinkBackendMeshNode {
130
133
  */
131
134
  requestInfrastructureControlFrames?(targetRid: unknown, frames: readonly Uint8Array[], options?: {
132
135
  readonly timeoutMs?: number;
136
+ readonly requestOperation?: PendingOperation<unknown>;
133
137
  readonly signal?: AbortSignal;
134
138
  readonly onSubmitted?: (signal: AbortSignal) => Promise<void>;
135
139
  }): Promise<readonly Uint8Array[]>;
136
140
  requestToNode(targetRid: unknown, parts: MessageLike | readonly MessageLike[], options?: {
137
141
  flags?: number;
138
142
  timeoutMs?: number;
143
+ readonly requestOperation?: PendingOperation<unknown>;
139
144
  applicationMetadata?: Buffer;
140
145
  onAdmitted?: () => void;
141
- }): MeshOperationId;
146
+ }, completion?: import('../mesh-completion-table').ZLinkMeshCompletionHandler): MeshOperationId;
142
147
  sendToChannel(channelName: string, parts: MessageLike | readonly MessageLike[], options?: {
143
148
  flags?: number;
144
149
  }): Promise<SubmitResult>;
145
150
  requestToChannel(channelName: string, parts: MessageLike | readonly MessageLike[], options?: {
146
151
  flags?: number;
147
152
  timeoutMs?: number;
153
+ readonly requestOperation?: PendingOperation<unknown>;
148
154
  applicationMetadata?: Buffer;
149
155
  onAdmitted?: () => void;
150
- }): MeshOperationId;
156
+ }, completion?: import('../mesh-completion-table').ZLinkMeshCompletionHandler): MeshOperationId;
151
157
  status(): MeshNodeStatus;
152
158
  peers(): MeshPeerEntry[];
153
159
  peerChannels(peerRid: unknown, lifecycleGeneration: bigint): {
@@ -212,16 +218,18 @@ export interface ZLinkBackendMeshNode {
212
218
  requestToActor(actor: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
213
219
  flags?: number;
214
220
  timeoutMs?: number;
221
+ readonly requestOperation?: PendingOperation<unknown>;
215
222
  applicationMetadata?: Buffer;
216
223
  onAdmitted?: () => void;
217
224
  routeFence?: import('../../foundation/service-stateful-wire-codec').ServiceActorRouteFence;
218
- }): MeshOperationId;
225
+ }, completion?: ZLinkMeshCompletionHandler): MeshOperationId;
219
226
  actorSendToActor(source: ZLinkBackendActorRef, target: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
220
227
  flags?: number;
221
228
  }): Promise<SubmitResult>;
222
229
  actorRequestToActor(source: ZLinkBackendActorRef, target: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
223
230
  flags?: number;
224
231
  timeoutMs?: number;
232
+ readonly requestOperation?: PendingOperation<unknown>;
225
233
  applicationMetadata?: Buffer;
226
234
  onAdmitted?: () => void;
227
235
  }): MeshOperationId;
@@ -308,7 +316,8 @@ export interface ZLinkBackendDealerSocket extends ZLinkBackendConnectableSocket
308
316
  receiveTimeoutMs: number;
309
317
  maxMessageSize: number;
310
318
  send(message: Message | readonly Message[]): Promise<void>;
311
- request(message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
319
+ request(message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
320
+ request(message: Message | readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
312
321
  recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
313
322
  }
314
323
  export interface ZLinkBackendReplyOperation {
@@ -323,6 +332,7 @@ export interface ZLinkBackendRequestOperation {
323
332
  message(message: MessageLike): ZLinkBackendRequestOperation;
324
333
  timeout(timeoutMs: number): ZLinkBackendRequestOperation;
325
334
  submit(onAdmitted?: () => void): Promise<readonly Message[]>;
335
+ submit(onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
326
336
  }
327
337
  export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket {
328
338
  setReceiveFlowState(state: ReceiveFlowState): void;
@@ -336,9 +346,11 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
336
346
  setRoutingId(routingId: RoutingId): void;
337
347
  recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
338
348
  send(routingId: RoutingId, message: Message | readonly Message[]): Promise<void>;
339
- request(routingId: RoutingId, message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
349
+ request(routingId: RoutingId, message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
350
+ request(routingId: RoutingId, message: Message | readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
340
351
  sendToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], flags?: ZLinkBackendSendFlags): Promise<void>;
341
- requestToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
352
+ requestToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
353
+ requestToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
342
354
  disconnectPeer(routingId: RoutingId): void;
343
355
  reply(routingId: RoutingId, replyToken: unknown): ZLinkBackendReplyOperation;
344
356
  reply(routingId: RoutingId, replyToken: unknown, message: Message | readonly Message[]): void;
@@ -438,11 +450,13 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
438
450
  drainReply(): number;
439
451
  drainChannelReply(subjectHandle: bigint): number;
440
452
  setDispatchHandler(handler: (info: ZLinkBackendSpotDispatchInfo) => void): void;
441
- requestToChannel(channelName: string, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
453
+ requestToChannel(channelName: string, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
454
+ requestToChannel(channelName: string, payload: Message | readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
442
455
  sendToChannel(channelName: string, payload: Message | readonly Message[]): Promise<void>;
443
456
  publish(topic: string, payload: Message | readonly Message[], flags: ZLinkBackendSendFlags): boolean;
444
457
  sendToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[]): Promise<void>;
445
- requestToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
458
+ requestToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void, requestOperation?: undefined): Promise<readonly Message[]>;
459
+ requestToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[], timeoutMs: number | undefined, onAdmitted: (() => void) | undefined, requestOperation: PendingOperation<unknown>, receiver: import('../../foundation/operation-registry').OperationObserver<unknown, unknown>): void;
446
460
  dispose(): Promise<void>;
447
461
  }
448
462
  export interface ZLinkChannelBackendAdapter {
@@ -458,6 +472,8 @@ export interface ZLinkMeshBackendAdapter {
458
472
  createMeshNode(context: ZLinkBackendContext, options: {
459
473
  readonly meshName: string;
460
474
  readonly routingId?: RoutingId;
475
+ readonly sendHighWaterMark?: number;
476
+ readonly receiveHighWaterMark?: number;
461
477
  readonly receiveTimeoutMs?: number;
462
478
  readonly trustProfile?: string;
463
479
  readonly applicationJobQueue: import('../../application-jobs/contracts').ApplicationJobQueuePort;
@@ -1,3 +1,4 @@
1
+ import { type OperationHandle, type OperationObserver } from '../foundation/operation-registry';
1
2
  import { ZLinkBufferMessage as Message } from './runtime-message';
2
3
  import type { MeshOperationId, ReceiveKindData, ReceiveRecord } from '../foundation/service-runtime-contracts';
3
4
  export interface ZLinkMeshCompletionDiagnostic {
@@ -8,10 +9,14 @@ export interface ZLinkMeshCompletionDiagnostic {
8
9
  export interface ZLinkMeshCompletion {
9
10
  readonly terminalResult: number;
10
11
  readonly failureErrno: number;
12
+ readonly failureMessage?: string;
11
13
  readonly operationKind: number;
12
14
  readonly kindData: ReceiveKindData | null;
13
15
  readonly parts: Message[];
14
16
  }
17
+ export interface MeshOperationSubmission extends MeshOperationId {
18
+ readonly requestOperation?: OperationHandle<unknown>;
19
+ }
15
20
  export type ZLinkMeshCompletionTerminal = Pick<ReceiveRecord, 'operationId' | 'terminalResult'>;
16
21
  export type ZLinkMeshCompletionHandler = (terminal: ZLinkMeshCompletionTerminal, materialize: () => ReceiveRecord) => void;
17
22
  export declare class ZLinkMeshCompletionTable {
@@ -32,7 +37,8 @@ export declare class ZLinkMeshCompletionTable {
32
37
  * observes native terminals through Promises, so identity binding finishes
33
38
  * before the terminal callback can run, without an infrastructure pump.
34
39
  */
35
- submit(operation: () => MeshOperationId, signal?: AbortSignal): Promise<ZLinkMeshCompletion>;
40
+ submit(operation: (completion?: ZLinkMeshCompletionHandler) => MeshOperationSubmission, signal: AbortSignal | undefined, requestOperation: OperationHandle<unknown>, receiver: OperationObserver<unknown, unknown>): void;
41
+ submit(operation: () => MeshOperationSubmission, signal?: AbortSignal, requestOperation?: OperationHandle<unknown>): Promise<ZLinkMeshCompletion>;
36
42
  private isDisposed;
37
43
  complete(record: ReceiveRecord): void;
38
44
  complete(record: ZLinkMeshCompletionTerminal, materialize: () => ReceiveRecord): void;
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkMeshCompletionTable = void 0;
4
4
  exports.closeMeshCompletion = closeMeshCompletion;
5
+ const request_deadline_1 = require("../messaging/request-deadline");
6
+ const operation_registry_1 = require("../foundation/operation-registry");
5
7
  const runtime_message_1 = require("./runtime-message");
6
8
  const operation_identity_1 = require("../foundation/operation-identity");
7
9
  const COMPLETION_SLOT_BLOCK_SIZE = 64;
@@ -19,6 +21,7 @@ class CompletionSlot {
19
21
  resolve;
20
22
  reject;
21
23
  signal;
24
+ operation;
22
25
  constructor(abort) {
23
26
  this.abort = abort;
24
27
  }
@@ -40,10 +43,13 @@ class ZLinkMeshCompletionTable {
40
43
  const slot = new CompletionSlot(() => {
41
44
  const reject = slot.reject;
42
45
  const signal = slot.signal;
43
- if (reject === undefined)
46
+ if (reject === undefined || (slot.high === undefined && slot.operation === undefined))
47
+ return;
48
+ const reason = signal?.reason ?? new DOMException('The operation was aborted.', 'AbortError');
49
+ if (slot.operation !== undefined && !slot.operation.takeFailure(reason))
44
50
  return;
45
51
  this.releaseSlot(index);
46
- reject(signal?.reason ?? new DOMException('The operation was aborted.', 'AbortError'));
52
+ reject(reason);
47
53
  });
48
54
  slot.next = this.free;
49
55
  this.slots.push(slot);
@@ -107,22 +113,43 @@ class ZLinkMeshCompletionTable {
107
113
  slot.low = undefined;
108
114
  slot.hashNext = -1;
109
115
  slot.signal = undefined;
116
+ slot.operation = undefined;
110
117
  slot.resolve = undefined;
111
118
  slot.reject = undefined;
112
119
  slot.next = this.free;
113
120
  this.free = index;
114
121
  this.activeCount--;
115
122
  }
116
- /**
117
- * Reserves the dispatcher slot before transport submission. The backend
118
- * observes native terminals through Promises, so identity binding finishes
119
- * before the terminal callback can run, without an infrastructure pump.
120
- */
121
- submit(operation, signal) {
123
+ submit(operation, signal, requestOperation, receiver) {
124
+ if (receiver !== undefined && requestOperation?.promise !== undefined) {
125
+ if (requestOperation.isPending()) {
126
+ try {
127
+ operation((_terminal, materialize) => {
128
+ try {
129
+ receiver.operationCompleted(requestOperation.id, retainCompletion(materialize()), undefined);
130
+ }
131
+ catch (error) {
132
+ receiver.operationFailed(requestOperation.id, error, undefined);
133
+ }
134
+ });
135
+ }
136
+ catch (error) {
137
+ receiver.operationFailed(requestOperation.id, error, undefined);
138
+ }
139
+ }
140
+ return;
141
+ }
142
+ if (requestOperation?.promise !== undefined && !requestOperation.isPending()) {
143
+ return requestOperation.promise.then(() => {
144
+ throw new operation_registry_1.OperationCancelledError(requestOperation.id, 'Request is already terminal.');
145
+ });
146
+ }
122
147
  if (this.isDisposed()) {
148
+ requestOperation?.takeFailure(new Error('Mesh completion table is disposed.'));
123
149
  return Promise.reject(new Error('Mesh completion table is disposed.'));
124
150
  }
125
151
  if (signal?.aborted === true) {
152
+ requestOperation?.takeFailure(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));
126
153
  return Promise.reject(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));
127
154
  }
128
155
  return new Promise((resolve, reject) => {
@@ -135,9 +162,23 @@ class ZLinkMeshCompletionTable {
135
162
  slot.resolve = resolve;
136
163
  slot.reject = reject;
137
164
  slot.signal = signal;
165
+ slot.operation = requestOperation;
138
166
  this.activeCount++;
139
167
  try {
140
168
  signal?.addEventListener('abort', slot.abort, COMPLETION_ABORT_OPTIONS);
169
+ const bind = (entry, observeFailure = true) => {
170
+ slot.operation = entry;
171
+ if (!observeFailure)
172
+ return;
173
+ entry.setFailureDispatcher((reason) => {
174
+ if (slot.generation !== generation || slot.resolve !== resolve)
175
+ return;
176
+ this.releaseSlot(index);
177
+ reject((0, request_deadline_1.requestTerminalError)('Request', reason));
178
+ });
179
+ };
180
+ if (requestOperation !== undefined)
181
+ bind(requestOperation);
141
182
  const operationId = operation();
142
183
  // A reentrant abort may release and reuse this slot during submission.
143
184
  if (slot.generation !== generation || slot.resolve !== resolve)
@@ -148,10 +189,18 @@ class ZLinkMeshCompletionTable {
148
189
  slot.high = operationId.high;
149
190
  slot.low = operationId.low;
150
191
  this.indexSlot(index);
192
+ if (requestOperation === undefined && operationId.requestOperation !== undefined)
193
+ bind(operationId.requestOperation, false);
194
+ Reflect.deleteProperty(operationId, 'requestOperation');
195
+ if (signal?.aborted === true)
196
+ slot.abort();
151
197
  }
152
198
  catch (error) {
153
- if (slot.generation === generation && slot.resolve === resolve)
154
- this.releaseSlot(index);
199
+ if (slot.generation !== generation || slot.resolve !== resolve)
200
+ return;
201
+ if (slot.operation !== undefined && !slot.operation.replyFailure(error))
202
+ return;
203
+ this.releaseSlot(index);
155
204
  reject(error);
156
205
  }
157
206
  });
@@ -170,14 +219,25 @@ class ZLinkMeshCompletionTable {
170
219
  return;
171
220
  }
172
221
  const slot = this.slots[index];
173
- const resolve = slot.resolve;
174
- const reject = slot.reject;
175
- this.releaseSlot(index);
176
- try {
177
- resolve(retainCompletion(materialize === undefined ? record : materialize()));
178
- }
179
- catch (error) {
180
- reject(error);
222
+ const generation = slot.generation;
223
+ const deliver = () => {
224
+ if (slot.generation !== generation || slot.resolve === undefined)
225
+ return;
226
+ const resolve = slot.resolve;
227
+ const reject = slot.reject;
228
+ this.releaseSlot(index);
229
+ try {
230
+ resolve(retainCompletion(materialize === undefined ? record : materialize()));
231
+ }
232
+ catch (error) {
233
+ reject(error);
234
+ }
235
+ };
236
+ if (slot.operation === undefined)
237
+ deliver();
238
+ else {
239
+ slot.operation.reply(record);
240
+ deliver();
181
241
  }
182
242
  }
183
243
  dispose(reason = new Error('Mesh completion table is disposed.')) {
@@ -189,6 +249,9 @@ class ZLinkMeshCompletionTable {
189
249
  const reject = this.slots[index].reject;
190
250
  if (reject === undefined)
191
251
  continue;
252
+ const slot = this.slots[index];
253
+ if (slot.operation !== undefined && !slot.operation.takeFailure(reason))
254
+ continue;
192
255
  this.releaseSlot(index);
193
256
  reject(reason);
194
257
  }
@@ -206,6 +269,7 @@ function retainCompletion(record) {
206
269
  return {
207
270
  terminalResult: record.terminalResult,
208
271
  failureErrno: record.failureErrno,
272
+ ...(record.failureMessage === undefined ? {} : { failureMessage: record.failureMessage }),
209
273
  operationKind: record.operationKind,
210
274
  kindData: record.kindData,
211
275
  parts
@@ -227,7 +291,7 @@ function closeMeshCompletion(completion) {
227
291
  closeParts(completion.parts);
228
292
  }
229
293
  function closeParts(parts) {
230
- for (const part of parts) {
231
- part.close();
294
+ for (let index = 0; index < parts.length; index++) {
295
+ parts[index].close();
232
296
  }
233
297
  }
@@ -3,7 +3,6 @@ import { type ReadyRecord, type ReceiveRecord } from '../foundation/service-runt
3
3
  import type { ZLinkBackendMeshNode } from './contracts';
4
4
  export interface ZLinkMeshDispatchPumpOptions {
5
5
  readonly readyCapacity?: number;
6
- readonly messageCapacity?: number;
7
6
  readonly partCapacity?: number;
8
7
  readonly dispatch: (owner: ReadyRecord, record: ReceiveRecord) => void | Promise<void>;
9
8
  readonly applicationJobQueue: ApplicationJobQueuePort;
@@ -37,21 +36,25 @@ export declare class ZLinkMeshDispatchPump {
37
36
  start(): void;
38
37
  dispose(signal?: AbortSignal): Promise<void>;
39
38
  private markReady;
39
+ private scheduleApplicationWorker;
40
40
  private wakeApplicationWorker;
41
41
  private startApplicationWorker;
42
- private runApplicationWorker;
43
42
  private waitForApplicationReady;
44
43
  /**
45
44
  * Starts one record in this worker's turn; a permit's scope covers the
46
- * synchronous dispatch. Returns `false` when the dispatch threw (already
47
- * reported), `true` when it returned synchronously, or the handler's pending
48
- * completion, which the draining turn awaits itself before
45
+ * synchronous dispatch. Returns `false` when preparation rejects the record,
46
+ * shutdown starts, or dispatch throws (already reported), `true` when dispatch
47
+ * returns synchronously, or the pending preparation/handler completion,
48
+ * which the draining turn awaits itself before
49
49
  * {@link finishRecord}.
50
50
  */
51
51
  private dispatchRecord;
52
+ private continuePreparingRecord;
53
+ private invokeRecord;
52
54
  private failRecord;
53
55
  /** Runs the record's terminal completion, then releases its permit turn. */
54
56
  private finishRecord;
57
+ private finishPendingRecord;
55
58
  private reportDispatchError;
56
59
  /**
57
60
  * Infrastructure controls must not wait for an application permit. During
@@ -68,8 +71,18 @@ export declare class ZLinkMeshDispatchPump {
68
71
  * pump, its batch budget starts with it (spec 08 §6).
69
72
  */
70
73
  private beginDrain;
71
- /** Drains one claimed owner in this worker's turn, in claim order. */
74
+ /** Each worker owns claim continuations for its entire lifetime. */
75
+ private runApplicationWorker;
72
76
  private drainClaim;
77
+ private createClaimDrain;
78
+ /** A synchronous claim finishes without an async wrapper or a Promise. */
79
+ private dispatchClaim;
80
+ private receiveClaim;
81
+ private dispatchClaimRecords;
82
+ private observeRecordTerminal;
83
+ private continuePendingClaim;
84
+ private releaseRecord;
85
+ private finishClaim;
73
86
  /**
74
87
  * The batch budget is shared by every drain of this pump, so once it is
75
88
  * spent every drain waits for the same macrotask boundary; one drain that