@zlink-systems/framework 0.26.0 → 0.28.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 (561) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActorClient.d.ts +1 -1
  3. package/dist/contracts/Channels/Calls.d.ts +1 -1
  4. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  5. package/dist/contracts/Common/CoreTypes.js +7 -0
  6. package/dist/contracts/Common/index.d.ts +1 -1
  7. package/dist/contracts/Common/index.js +0 -1
  8. package/dist/contracts/Configuration/Builders.d.ts +0 -1
  9. package/dist/contracts/Configuration/Configs.d.ts +0 -1
  10. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  11. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  12. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  13. package/dist/contracts/Configuration/Registration.js +58 -36
  14. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  15. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  16. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  17. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  18. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
  19. package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
  20. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  21. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  22. package/dist/contracts/Handlers/JsonContract.js +10 -4
  23. package/dist/contracts/Locations/Authority.d.ts +1 -1
  24. package/dist/contracts/Locations/Authority.js +3 -2
  25. package/dist/contracts/Locations/Options.js +1 -1
  26. package/dist/contracts/Locations/Stores.d.ts +12 -0
  27. package/dist/contracts/Locations/Stores.js +9 -0
  28. package/dist/contracts/Spots/Contracts.d.ts +2 -2
  29. package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
  30. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
  31. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
  32. package/dist/internal.d.ts +4 -0
  33. package/dist/internal.js +15 -1
  34. package/dist/nest-integration.d.ts +4 -2
  35. package/dist/nest-integration.js +14 -4
  36. package/dist/runtime/abort.d.ts +1 -0
  37. package/dist/runtime/abort.js +8 -5
  38. package/dist/runtime/activation-admission.d.ts +1 -2
  39. package/dist/runtime/activation-admission.js +2 -6
  40. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  41. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  42. package/dist/runtime/actors/actor-client.d.ts +2 -2
  43. package/dist/runtime/actors/actor-client.js +49 -153
  44. package/dist/runtime/actors/actor-context.d.ts +3 -5
  45. package/dist/runtime/actors/actor-context.js +13 -11
  46. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  47. package/dist/runtime/actors/actor-handoff.js +8 -8
  48. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  49. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  50. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  51. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  52. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  53. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  54. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  55. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  56. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  57. package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
  58. package/dist/runtime/actors/actor-request-deadline.js +6 -0
  59. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  60. package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
  61. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  62. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  63. package/dist/runtime/actors/bound-session-wire.js +2 -7
  64. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  65. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  66. package/dist/runtime/actors/index.d.ts +9 -7
  67. package/dist/runtime/actors/index.js +87 -69
  68. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  69. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  70. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  71. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  72. package/dist/runtime/admission.d.ts +2 -0
  73. package/dist/runtime/admission.js +7 -1
  74. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  75. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  76. package/dist/runtime/backend/contracts/index.d.ts +7 -27
  77. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  78. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  79. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  80. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
  81. package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
  82. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  83. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
  84. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  85. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  86. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  87. package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
  88. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  89. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  90. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  91. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  92. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  93. package/dist/runtime/backend/runtime-values.js +2 -0
  94. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  95. package/dist/runtime/channels/channel-clients.js +73 -59
  96. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  97. package/dist/runtime/channels/channel-envelope.d.ts +1 -1
  98. package/dist/runtime/channels/channel-envelope.js +51 -39
  99. package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
  100. package/dist/runtime/channels/channel-outbound-operations.js +25 -42
  101. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  102. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  103. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  104. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  105. package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
  106. package/dist/runtime/channels/channel-runtime-manager.js +13 -10
  107. package/dist/runtime/channels/channel-socket-options.js +3 -12
  108. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  109. package/dist/runtime/channels/channel-socket-registry.js +240 -177
  110. package/dist/runtime/channels/channel-transports.d.ts +21 -31
  111. package/dist/runtime/channels/channel-transports.js +80 -62
  112. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  113. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  114. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  115. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  116. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  117. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  118. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  119. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  120. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  121. package/dist/runtime/channels/local-spot-route-transport.js +1 -3
  122. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
  123. package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
  124. package/dist/runtime/channels/source-spot-router.d.ts +1 -1
  125. package/dist/runtime/channels/source-spot-router.js +2 -4
  126. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  127. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  128. package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
  129. package/dist/runtime/channels/spot-node-route-transport.js +5 -5
  130. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
  131. package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
  132. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
  133. package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
  134. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  135. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  136. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  137. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  138. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  139. package/dist/runtime/diagnostics/flow-context.js +16 -2
  140. package/dist/runtime/diagnostics/index.d.ts +4 -2
  141. package/dist/runtime/diagnostics/index.js +14 -4
  142. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  143. package/dist/runtime/diagnostics/message-flow.js +10 -19
  144. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  145. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  146. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  147. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  148. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  149. package/dist/runtime/disposal.d.ts +5 -0
  150. package/dist/runtime/disposal.js +22 -0
  151. package/dist/runtime/execution/index.d.ts +12 -9
  152. package/dist/runtime/execution/index.js +58 -14
  153. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  154. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  155. package/dist/runtime/execution/state-lane.d.ts +8 -1
  156. package/dist/runtime/execution/state-lane.js +118 -3
  157. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  158. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  159. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  160. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  161. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  162. package/dist/runtime/foundation/operation-identity.js +9 -5
  163. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  164. package/dist/runtime/foundation/operation-registry.js +34 -44
  165. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  166. package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
  167. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  168. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  169. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  170. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  171. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  172. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  173. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  174. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  175. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  176. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  177. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  178. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  179. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  180. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  181. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  182. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  183. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  184. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  185. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  186. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  187. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  188. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  189. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  190. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  191. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  192. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  193. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  194. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  195. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  196. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  197. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  198. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  199. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  200. package/dist/runtime/framework-errors-internal.js +343 -122
  201. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  202. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  203. package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
  204. package/dist/runtime/host/actor-packet-relay.js +54 -99
  205. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  206. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  207. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  208. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  209. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  210. package/dist/runtime/host/application-job-queue.js +16 -33
  211. package/dist/runtime/host/bound-session-relay.js +1 -1
  212. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  213. package/dist/runtime/host/index.d.ts +14 -13
  214. package/dist/runtime/host/index.js +190 -171
  215. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  216. package/dist/runtime/host/instance-activation-authority.js +17 -45
  217. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  218. package/dist/runtime/host/location-runtime-owner.js +2 -2
  219. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  220. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  221. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  222. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  223. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  224. package/dist/runtime/host/remote-bound-session-relay.js +15 -28
  225. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  226. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  227. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  228. package/dist/runtime/host/runtime-shutdown.js +18 -21
  229. package/dist/runtime/host/service-relocation-control.js +6 -1
  230. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  231. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  232. package/dist/runtime/host/spot-address-transport.d.ts +3 -12
  233. package/dist/runtime/host/spot-address-transport.js +78 -220
  234. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  235. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  236. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  237. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  238. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  239. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  240. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  241. package/dist/runtime/locations/authority-key-codec.js +4 -3
  242. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  243. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  244. package/dist/runtime/locations/creation-operation-id.js +6 -4
  245. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  246. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  247. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  248. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  249. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  250. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  251. package/dist/runtime/locations/key-codec.js +3 -2
  252. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  253. package/dist/runtime/locations/lease-tracker.js +7 -11
  254. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  255. package/dist/runtime/locations/lifecycle.js +2 -31
  256. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  257. package/dist/runtime/locations/location-store-failure.js +7 -0
  258. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  259. package/dist/runtime/locations/location-store-pages.js +13 -0
  260. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  261. package/dist/runtime/locations/location-store-repository.js +309 -336
  262. package/dist/runtime/locations/relocation-blob.js +18 -5
  263. package/dist/runtime/locations/resolvers.d.ts +5 -5
  264. package/dist/runtime/locations/resolvers.js +37 -28
  265. package/dist/runtime/locations/runtime.d.ts +5 -4
  266. package/dist/runtime/locations/runtime.js +123 -92
  267. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  268. package/dist/runtime/locations/spot-location-claims.js +42 -1
  269. package/dist/runtime/messaging/payload-codec.js +26 -20
  270. package/dist/runtime/messaging/request-deadline.d.ts +3 -0
  271. package/dist/runtime/messaging/request-deadline.js +39 -0
  272. package/dist/runtime/messaging/submission-result.d.ts +4 -0
  273. package/dist/runtime/messaging/submission-result.js +56 -1
  274. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  275. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  276. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  277. package/dist/runtime/spots/index.d.ts +14 -20
  278. package/dist/runtime/spots/index.js +302 -176
  279. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  280. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  281. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  282. package/dist/runtime/spots/spot-activation-state.js +2 -2
  283. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  284. package/dist/runtime/spots/spot-activation.js +49 -32
  285. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  286. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  287. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  288. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  289. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  290. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  291. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  292. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  293. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  294. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  295. package/dist/runtime/spots/spot-context.d.ts +2 -2
  296. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  297. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  298. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  299. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  300. package/dist/runtime/spots/spot-manager-public.js +5 -4
  301. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  302. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  303. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  304. package/dist/runtime/spots/spot-outbound.d.ts +7 -8
  305. package/dist/runtime/spots/spot-outbound.js +21 -23
  306. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  307. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  308. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  309. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  310. package/dist/runtime/spots/spot-route-replies.js +3 -1
  311. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  312. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  313. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  314. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  315. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  316. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  317. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  318. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  319. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  320. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  321. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  322. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  323. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  324. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  325. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
  326. package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
  327. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  328. package/dist/runtime/streams/bound-session-service.js +12 -2
  329. package/dist/runtime/streams/index.d.ts +16 -17
  330. package/dist/runtime/streams/index.js +22 -23
  331. package/dist/runtime/streams/managed-stream.d.ts +5 -2
  332. package/dist/runtime/streams/managed-stream.js +20 -13
  333. package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
  334. package/dist/runtime/streams/protocol.d.ts +6 -33
  335. package/dist/runtime/streams/protocol.js +38 -110
  336. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  337. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  338. package/dist/runtime/streams/session-calls.d.ts +6 -8
  339. package/dist/runtime/streams/session-calls.js +6 -22
  340. package/dist/runtime/streams/session-context.d.ts +10 -10
  341. package/dist/runtime/streams/session-context.js +25 -10
  342. package/dist/runtime/streams/session-requests.js +2 -1
  343. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  344. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  345. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  346. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  347. package/dist/runtime/workers/index.d.ts +2 -2
  348. package/dist/runtime/workers/index.js +5 -4
  349. package/package.json +3 -3
  350. package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
  351. package/src/contracts/Channels/Calls.ts +1 -1
  352. package/src/contracts/Common/CoreTypes.ts +7 -0
  353. package/src/contracts/Common/index.ts +1 -1
  354. package/src/contracts/Configuration/Builders.ts +0 -1
  355. package/src/contracts/Configuration/Configs.ts +0 -1
  356. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  357. package/src/contracts/Configuration/Registration.ts +92 -48
  358. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  359. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
  360. package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
  361. package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
  362. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  363. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  364. package/src/contracts/Handlers/JsonContract.ts +14 -4
  365. package/src/contracts/Locations/Authority.ts +7 -3
  366. package/src/contracts/Locations/Options.ts +1 -1
  367. package/src/contracts/Locations/Stores.ts +14 -0
  368. package/src/contracts/Spots/Contracts.ts +2 -2
  369. package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
  370. package/src/contracts/Streams/IZLinkSession.ts +2 -3
  371. package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
  372. package/src/internal.ts +14 -0
  373. package/src/nest-integration.ts +28 -10
  374. package/src/runtime/abort.ts +6 -5
  375. package/src/runtime/activation-admission.ts +2 -8
  376. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  377. package/src/runtime/actors/actor-client.ts +85 -218
  378. package/src/runtime/actors/actor-context.ts +39 -33
  379. package/src/runtime/actors/actor-handoff.ts +24 -22
  380. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  381. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  382. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  383. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  384. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  385. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  386. package/src/runtime/actors/actor-request-deadline.ts +4 -0
  387. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  388. package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
  389. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  390. package/src/runtime/actors/bound-session-wire.ts +2 -8
  391. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  392. package/src/runtime/actors/index.ts +100 -79
  393. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  394. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  395. package/src/runtime/admission.ts +8 -1
  396. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  397. package/src/runtime/backend/contracts/index.ts +14 -37
  398. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  399. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  400. package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
  401. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
  402. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  403. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  404. package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
  405. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  406. package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
  407. package/src/runtime/backend/raw-binding-port.ts +1 -1
  408. package/src/runtime/backend/runtime-values.ts +4 -1
  409. package/src/runtime/channels/channel-clients.ts +139 -102
  410. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  411. package/src/runtime/channels/channel-envelope.ts +74 -57
  412. package/src/runtime/channels/channel-outbound-operations.ts +40 -55
  413. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  414. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  415. package/src/runtime/channels/channel-runtime-manager.ts +12 -30
  416. package/src/runtime/channels/channel-socket-options.ts +8 -15
  417. package/src/runtime/channels/channel-socket-registry.ts +291 -196
  418. package/src/runtime/channels/channel-transports.ts +168 -145
  419. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  420. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  421. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  422. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  423. package/src/runtime/channels/local-spot-route-transport.ts +1 -5
  424. package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
  425. package/src/runtime/channels/source-spot-router.ts +2 -9
  426. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  427. package/src/runtime/channels/spot-node-route-transport.ts +7 -9
  428. package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
  429. package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
  430. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  431. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  432. package/src/runtime/diagnostics/flow-context.ts +16 -2
  433. package/src/runtime/diagnostics/index.ts +27 -17
  434. package/src/runtime/diagnostics/message-flow.ts +15 -25
  435. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  436. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  437. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  438. package/src/runtime/disposal.ts +19 -0
  439. package/src/runtime/execution/index.ts +60 -20
  440. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  441. package/src/runtime/execution/state-lane.ts +142 -4
  442. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  443. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  444. package/src/runtime/foundation/operation-identity.ts +11 -5
  445. package/src/runtime/foundation/operation-registry.ts +33 -50
  446. package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
  447. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  448. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  449. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  450. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  451. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  452. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  453. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  454. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  455. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  456. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  457. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  458. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  459. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  460. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  461. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  462. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  463. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  464. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  465. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  466. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  467. package/src/runtime/framework-errors-internal.ts +380 -134
  468. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  469. package/src/runtime/host/actor-packet-relay.ts +63 -160
  470. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  471. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  472. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  473. package/src/runtime/host/application-job-queue.ts +28 -34
  474. package/src/runtime/host/bound-session-relay.ts +1 -2
  475. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  476. package/src/runtime/host/index.ts +327 -320
  477. package/src/runtime/host/instance-activation-authority.ts +89 -109
  478. package/src/runtime/host/location-runtime-owner.ts +4 -2
  479. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  480. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  481. package/src/runtime/host/remote-bound-session-relay.ts +16 -57
  482. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  483. package/src/runtime/host/runtime-shutdown.ts +17 -21
  484. package/src/runtime/host/service-relocation-control.ts +14 -1
  485. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  486. package/src/runtime/host/spot-address-transport.ts +175 -356
  487. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  488. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  489. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  490. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  491. package/src/runtime/locations/authority-key-codec.ts +7 -3
  492. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  493. package/src/runtime/locations/creation-operation-id.ts +6 -3
  494. package/src/runtime/locations/domain-store-contract.ts +12 -3
  495. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  496. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  497. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  498. package/src/runtime/locations/key-codec.ts +3 -2
  499. package/src/runtime/locations/lease-tracker.ts +8 -14
  500. package/src/runtime/locations/lifecycle.ts +13 -43
  501. package/src/runtime/locations/location-store-failure.ts +4 -0
  502. package/src/runtime/locations/location-store-pages.ts +18 -0
  503. package/src/runtime/locations/location-store-repository.ts +457 -482
  504. package/src/runtime/locations/relocation-blob.ts +17 -6
  505. package/src/runtime/locations/resolvers.ts +75 -49
  506. package/src/runtime/locations/runtime.ts +220 -110
  507. package/src/runtime/locations/spot-location-claims.ts +58 -1
  508. package/src/runtime/messaging/payload-codec.ts +35 -24
  509. package/src/runtime/messaging/request-deadline.ts +58 -0
  510. package/src/runtime/messaging/submission-result.ts +72 -2
  511. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  512. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  513. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  514. package/src/runtime/spots/index.ts +433 -229
  515. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  516. package/src/runtime/spots/spot-activation-state.ts +2 -2
  517. package/src/runtime/spots/spot-activation.ts +67 -37
  518. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  519. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  520. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  521. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  522. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  523. package/src/runtime/spots/spot-context.ts +3 -3
  524. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  525. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  526. package/src/runtime/spots/spot-manager-public.ts +21 -17
  527. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  528. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  529. package/src/runtime/spots/spot-outbound.ts +59 -47
  530. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  531. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  532. package/src/runtime/spots/spot-route-replies.ts +6 -4
  533. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  534. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  535. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  536. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  537. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  538. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  539. package/src/runtime/spots/spot-timer.ts +3 -2
  540. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  541. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  542. package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
  543. package/src/runtime/streams/bound-session-service.ts +22 -2
  544. package/src/runtime/streams/index.ts +78 -68
  545. package/src/runtime/streams/managed-stream.ts +32 -23
  546. package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
  547. package/src/runtime/streams/protocol.ts +34 -88
  548. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  549. package/src/runtime/streams/session-calls.ts +11 -36
  550. package/src/runtime/streams/session-context.ts +60 -25
  551. package/src/runtime/streams/session-requests.ts +2 -1
  552. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  553. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  554. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  555. package/src/runtime/workers/index.ts +13 -12
  556. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  557. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  558. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  559. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  560. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  561. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -141,14 +141,16 @@ export interface ZLinkBackendMeshNode {
141
141
  route: ServiceInstanceRouteFence,
142
142
  parts: MessageLike | readonly MessageLike[],
143
143
  sourceSpotId?: string,
144
- metadata?: ReadonlyMap<string, string>
144
+ metadata?: ReadonlyMap<string, string>,
145
+ instanceIntent?: boolean
145
146
  ): Promise<SubmitResult>;
146
147
  requestInstanceSpot(
147
148
  route: ServiceInstanceRouteFence,
148
149
  parts: MessageLike | readonly MessageLike[],
149
150
  timeoutMs?: number,
150
151
  sourceSpotId?: string,
151
- metadata?: ReadonlyMap<string, string>
152
+ metadata?: ReadonlyMap<string, string>,
153
+ instanceIntent?: boolean
152
154
  ): MeshOperationId;
153
155
  registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
154
156
  requestUserSpotCreate(
@@ -249,6 +251,12 @@ export interface ZLinkBackendMeshNode {
249
251
  readonly objectGeneration: bigint;
250
252
  }
251
253
  | undefined;
254
+ registerInstanceIntent?(
255
+ instanceType: string,
256
+ route: import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence,
257
+ expectedCurrentRoute?:
258
+ import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence | null
259
+ ): void;
252
260
  waitForInstanceApplicationQuiescence?(spotId: string, signal?: AbortSignal): Promise<void>;
253
261
  restoreUserSpotAuthority?(
254
262
  spotId: string,
@@ -269,7 +277,7 @@ export interface ZLinkBackendMeshNode {
269
277
  stableType: string,
270
278
  generation: bigint,
271
279
  authorityOwnerGeneration: bigint,
272
- spotId: string,
280
+ spotId: string | undefined,
273
281
  spotGeneration: bigint,
274
282
  membershipEpoch: bigint
275
283
  ): ZLinkBackendActorRef;
@@ -435,27 +443,6 @@ export interface ZLinkBackendActorRecvInfo {
435
443
  readonly flags: number;
436
444
  }
437
445
 
438
- export interface ZLinkBackendActorJoinInfo {
439
- readonly sourceActor: ZLinkBackendActorRef;
440
- readonly targetActor: ZLinkBackendActorRef;
441
- readonly sourceNodeRid: RoutingId;
442
- readonly sourceSpotId: RoutingId;
443
- readonly targetNodeRid: RoutingId;
444
- readonly targetSpotId: RoutingId;
445
- readonly joinEpoch: bigint;
446
- readonly flags: number;
447
- }
448
-
449
- export interface ZLinkBackendActorJoinRequest {
450
- readonly info: ZLinkBackendActorJoinInfo;
451
- readonly message: Message;
452
- }
453
-
454
- export interface ZLinkBackendActorJoinReplyOperation {
455
- message(message: Message): ZLinkBackendActorJoinReplyOperation;
456
- submit(): void;
457
- }
458
-
459
446
  export interface ZLinkBackendSpotDispatchInfo {
460
447
  readonly event: ZLinkBackendSpotDispatchEvent;
461
448
  readonly subjectKind?: number;
@@ -465,6 +452,7 @@ export interface ZLinkBackendSpotDispatchInfo {
465
452
 
466
453
  export interface ZLinkBackendSocketMonitorEvent {
467
454
  readonly nativeEvent: MonitorEventType;
455
+ readonly readyEdge: boolean;
468
456
  readonly routingId?: unknown;
469
457
  readonly localAddr: string;
470
458
  readonly remoteAddr: string;
@@ -504,7 +492,6 @@ export interface ZLinkBackendDealerSocket extends ZLinkBackendConnectableSocket
504
492
  sendHighWaterMark: number;
505
493
  receiveHighWaterMark: number;
506
494
  receiveTimeoutMs: number;
507
- sendTimeoutMs: number;
508
495
  maxMessageSize: number;
509
496
  send(message: Message | readonly Message[]): Promise<void>;
510
497
  request(message: Message | readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
@@ -535,7 +522,6 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
535
522
  sendHighWaterMark: number;
536
523
  receiveHighWaterMark: number;
537
524
  receiveTimeoutMs: number;
538
- sendTimeoutMs: number;
539
525
  maxMessageSize: number;
540
526
  setRoutingId(routingId: RoutingId): void;
541
527
  recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
@@ -563,6 +549,7 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
563
549
  }
564
550
 
565
551
  export interface ZLinkBackendPublisherSocket extends ZLinkBackendSocket {
552
+ sendTimeoutMs: number;
566
553
  sendHighWaterMark: number;
567
554
  noDrop: boolean;
568
555
  publish(topic: string, message: Message | readonly Message[]): void;
@@ -588,7 +575,6 @@ export interface ZLinkBackendStreamPacket {
588
575
  }
589
576
 
590
577
  export interface ZLinkBackendStreamSocket extends ZLinkBackendSocket {
591
- readonly sendTimeoutMs: number;
592
578
  readonly sendHighWaterMark: number;
593
579
  /** Framework stream ingress uses this bound for packet payload validation. */
594
580
  maxMessageSize: number;
@@ -599,11 +585,7 @@ export interface ZLinkBackendStreamSocket extends ZLinkBackendSocket {
599
585
  payload: Message | readonly Message[],
600
586
  flags: ZLinkBackendSendFlags
601
587
  ): boolean;
602
- submit(
603
- routingId: RoutingId,
604
- payload: Message | readonly Message[],
605
- timeoutMs?: number
606
- ): Promise<void>;
588
+ submit(routingId: RoutingId, payload: Message | readonly Message[]): Promise<void>;
607
589
  disconnectPeer(routingId: RoutingId): void;
608
590
  bindActor(
609
591
  sessionRid: RoutingId,
@@ -734,11 +716,6 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
734
716
  payload: Message | readonly Message[],
735
717
  timeoutMs?: number
736
718
  ): Promise<readonly Message[]>;
737
- recvActorJoin(flags: ZLinkBackendRecvFlags): ZLinkBackendActorJoinRequest | null;
738
- replyActorJoin(
739
- request: ZLinkBackendActorJoinRequest,
740
- joinResultCode: number
741
- ): ZLinkBackendActorJoinReplyOperation;
742
719
  dispose(): Promise<void>;
743
720
  }
744
721
 
@@ -1,5 +1,4 @@
1
- import { SubmitResult } from './runtime-values';
2
- import { ZLinkSubmitStatus } from '../messaging/submission-result';
1
+ import { classifySubmitResult } from '../messaging/submission-result';
3
2
  import type { ZLinkBackendActorSessionNode, ZLinkBackendMeshNode } from './contracts';
4
3
  import { closeMeshCompletion, type ZLinkMeshCompletionTable } from './mesh-completion-table';
5
4
 
@@ -15,22 +14,7 @@ export function meshActorSessionNodeAdapter(
15
14
  parts as never,
16
15
  flags
17
16
  );
18
- switch (result) {
19
- case SubmitResult.Ok:
20
- return { status: ZLinkSubmitStatus.Submitted };
21
- case SubmitResult.Backpressured:
22
- case SubmitResult.NotAdmitted:
23
- return { status: ZLinkSubmitStatus.Backpressured };
24
- case SubmitResult.NotFound:
25
- case SubmitResult.InvalidState:
26
- return { status: ZLinkSubmitStatus.TargetNotFound };
27
- case SubmitResult.NotConnected:
28
- return { status: ZLinkSubmitStatus.RouteNotConnected };
29
- case SubmitResult.Terminated:
30
- return { status: ZLinkSubmitStatus.Shutdown };
31
- default:
32
- throw new Error(`Actor bound-session send failed with result '${result}'.`);
33
- }
17
+ return classifySubmitResult(result, 'Actor bound-session send');
34
18
  },
35
19
  async closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs, signal) {
36
20
  if (completions === undefined) {
@@ -1,6 +1,11 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import { availableParallelism } from 'node:os';
3
- import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
3
+ import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
4
+ import type {
5
+ ApplicationJobPermitPort,
6
+ ApplicationJobQueuePort
7
+ } from '../application-jobs/contracts';
8
+ import { runZLinkExecutionArea } from '../execution';
4
9
  import {
5
10
  ReadyDomain,
6
11
  type ReadyBatch,
@@ -8,13 +13,20 @@ import {
8
13
  type ReceiveBatch,
9
14
  type ReceiveRecord
10
15
  } from '../foundation/service-runtime-contracts';
16
+ import {
17
+ SERVICE_WIRE_COMMAND_OFFSET,
18
+ SERVICE_WIRE_MAJOR_OFFSET,
19
+ SERVICE_WIRE_PREFIX_SIZE
20
+ } from '../foundation/service-wire-binary-primitives';
21
+ import {
22
+ SERVICE_WIRE_MAGIC,
23
+ SERVICE_WIRE_MAJOR
24
+ } from '../foundation/service-wire-constants.generated';
11
25
  import type { ZLinkBackendMeshNode } from './contracts';
12
- import { runZLinkExecutionArea } from '../execution';
13
- import type {
14
- ApplicationJobPermitPort,
15
- ApplicationJobQueuePort
16
- } from '../application-jobs/contracts';
17
- import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
26
+ import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
27
+ const DEFAULT_MESH_READY_CAPACITY = 32;
28
+
29
+ const DEFAULT_MESH_PART_CAPACITY = 256;
18
30
 
19
31
  const MESH_DISPATCH_YIELD_RECORDS = 16;
20
32
  const MESH_DISPATCH_YIELD_INTERVAL_MS = 2;
@@ -45,21 +57,10 @@ export interface ZLinkMeshDispatchFailureContext {
45
57
  readonly commandId?: number;
46
58
  }
47
59
 
48
- class ZLinkMeshDispatchFailure extends Error {
49
- constructor(
50
- readonly context: ZLinkMeshDispatchFailureContext,
51
- readonly dispatchCause: unknown
52
- ) {
53
- super('Mesh record dispatch failed.', { cause: dispatchCause });
54
- this.name = 'ZLinkMeshDispatchFailure';
55
- }
56
- }
57
-
58
60
  export class ZLinkMeshDispatchPump {
59
61
  private pendingDomains: number = ReadyDomain.None;
60
62
  private infrastructureScheduled = false;
61
63
  private disposed = false;
62
- private infrastructureDrainPromise?: Promise<void>;
63
64
  private readonly activeDrains = new Set<Promise<void>>();
64
65
  private readonly idleApplicationWorkers = new Set<() => void>();
65
66
  private applicationWorkerCount = 0;
@@ -152,7 +153,7 @@ export class ZLinkMeshDispatchPump {
152
153
  const readyBatch = this.node.createReadyBatch(1);
153
154
  const receiveBatch = this.node.createReceiveBatch(
154
155
  MESH_DISPATCH_RECEIVE_CAPACITY,
155
- this.options.partCapacity ?? 256
156
+ this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
156
157
  );
157
158
  try {
158
159
  for (;;) {
@@ -179,12 +180,8 @@ export class ZLinkMeshDispatchPump {
179
180
  return new Promise((resolve) => this.idleApplicationWorkers.add(resolve));
180
181
  }
181
182
 
182
- private reportDispatchError(error: unknown): void {
183
- if (error instanceof ZLinkMeshDispatchFailure) {
184
- this.options.reportError?.(error.dispatchCause, error.context);
185
- return;
186
- }
187
- this.options.reportError?.(error);
183
+ private reportDispatchError(error: unknown, context?: ZLinkMeshDispatchFailureContext): void {
184
+ this.options.reportError?.(error, context);
188
185
  }
189
186
 
190
187
  /**
@@ -205,34 +202,23 @@ export class ZLinkMeshDispatchPump {
205
202
  runZLinkExecutionArea('infrastructure', () => this.drainInfrastructure())
206
203
  )
207
204
  )
208
- .catch((error) => {
209
- if (error instanceof ZLinkMeshDispatchFailure) {
210
- this.options.reportError?.(error.dispatchCause, error.context);
211
- return;
212
- }
213
- this.options.reportError?.(error);
214
- });
205
+ .catch((error) => this.reportDispatchError(error));
215
206
  this.activeDrains.add(drain);
216
- this.infrastructureDrainPromise = drain;
217
207
  void drain.finally(() => {
218
208
  this.activeDrains.delete(drain);
219
- if (this.infrastructureDrainPromise === drain) {
220
- this.infrastructureDrainPromise = undefined;
221
- this.infrastructureScheduled = false;
222
- if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
223
- this.scheduleInfrastructure();
224
- }
209
+ this.infrastructureScheduled = false;
210
+ if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
211
+ this.scheduleInfrastructure();
225
212
  }
226
213
  });
227
214
  }
228
215
 
229
216
  private async drainInfrastructure(): Promise<void> {
230
217
  const readyBatch = this.node.createReadyBatch(
231
- Math.min(this.options.readyCapacity ?? 32, MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET)
232
- );
233
- const receiveBatch = this.node.createReceiveBatch(
234
- MESH_DISPATCH_RECEIVE_CAPACITY,
235
- this.options.partCapacity ?? 256
218
+ Math.min(
219
+ this.options.readyCapacity ?? DEFAULT_MESH_READY_CAPACITY,
220
+ MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
221
+ )
236
222
  );
237
223
  try {
238
224
  while (!this.disposed) {
@@ -246,7 +232,7 @@ export class ZLinkMeshDispatchPump {
246
232
  const lifecycleBudgetExhausted = await this.drainDomain(
247
233
  ReadyDomain.Infrastructure,
248
234
  readyBatch,
249
- receiveBatch,
235
+ undefined,
250
236
  MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
251
237
  );
252
238
  if (lifecycleBudgetExhausted) {
@@ -255,7 +241,6 @@ export class ZLinkMeshDispatchPump {
255
241
  }
256
242
  }
257
243
  } finally {
258
- receiveBatch.close();
259
244
  readyBatch.close();
260
245
  }
261
246
  }
@@ -263,7 +248,7 @@ export class ZLinkMeshDispatchPump {
263
248
  private async drainDomain(
264
249
  domain: number,
265
250
  readyBatch: ReadyBatch,
266
- receiveBatch: ReceiveBatch,
251
+ receiveBatch: ReceiveBatch | undefined,
267
252
  claimBudget?: number
268
253
  ): Promise<boolean> {
269
254
  let claimsDrained = 0;
@@ -285,85 +270,91 @@ export class ZLinkMeshDispatchPump {
285
270
  for (let index = 0; index < drained.records.length; index += 1) {
286
271
  const claim = readyBatch.takeClaim(index);
287
272
  claimsDrained += 1;
288
- const owner = drained.records[index];
273
+ const owner = drained.records[index]!;
289
274
  // Raw ingress already attached one host permit to each record.
290
275
  // A claim that reserves admission here may receive only that permit's record.
291
- try {
292
- const capacity =
293
- owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
294
- for (;;) {
295
- let claimPermit =
296
- owner.terminalCompletion === true ||
297
- owner.ordinaryIngressPreAdmitted === true ||
298
- domain === ReadyDomain.Infrastructure
299
- ? undefined
300
- : await this.acquirePermit();
301
- try {
302
- if (this.capacityStop.signal.aborted) return false;
303
- receiveBatch.reset(capacity);
304
- const received = claim.recvBatch(receiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
305
- if (!received.ok) break;
306
- // This owner keeps its claim while it drains. Other owners and
307
- // infrastructure may progress if one of its handlers suspends.
308
- if (domain === ReadyDomain.Infrastructure) {
309
- this.infrastructureScheduled = false;
310
- this.infrastructureDrainPromise = undefined;
311
- if ((this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
312
- this.scheduleInfrastructure();
313
- }
314
- }
276
+ const drainClaim = async () => {
277
+ let ownerReceiveBatch = receiveBatch;
278
+ try {
279
+ ownerReceiveBatch ??= this.node.createReceiveBatch(
280
+ MESH_DISPATCH_RECEIVE_CAPACITY,
281
+ this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
282
+ );
283
+ const capacity =
284
+ owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
285
+ for (;;) {
286
+ let claimPermit =
287
+ owner.terminalCompletion === true ||
288
+ owner.ordinaryIngressPreAdmitted === true ||
289
+ domain === ReadyDomain.Infrastructure
290
+ ? undefined
291
+ : await this.acquirePermit();
315
292
  try {
316
- for (const record of received.records) {
317
- if (this.disposed) break;
318
- const permit = record.applicationJobPermit ?? claimPermit;
319
- if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
320
- throw new Error(
321
- 'Pre-admitted raw ingress record lost its Application Job Queue permit.'
322
- );
323
- }
324
- this.recordsSinceYield += 1;
325
- const dispatch = async () => {
326
- try {
327
- await this.options.dispatch(drained.records[index], record);
328
- } catch (error) {
329
- throw new ZLinkMeshDispatchFailure(
330
- meshDispatchFailureContext(record),
331
- error
293
+ if (this.capacityStop.signal.aborted) return;
294
+ ownerReceiveBatch.reset(capacity);
295
+ const received = claim.recvBatch(ownerReceiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
296
+ if (!received.ok) break;
297
+ // This owner keeps its claim while it drains, so its records stay in FIFO order.
298
+ try {
299
+ for (const record of received.records) {
300
+ if (this.disposed) break;
301
+ const permit = record.applicationJobPermit ?? claimPermit;
302
+ if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
303
+ throw new Error(
304
+ 'Pre-admitted raw ingress record lost its Application Job Queue permit.'
332
305
  );
333
306
  }
334
- await record.onTerminalCompletion?.();
335
- };
336
- if (permit === undefined) {
337
- await dispatch();
338
- } else {
339
- if (
340
- domain === ReadyDomain.Application &&
341
- record.applicationJobPermit === undefined
342
- )
343
- permit.markApplicationQueued();
344
- // The scope now owns this reservation, including failure
345
- // and detached handler handoff. Only unused permits remain
346
- // owned by the receive attempt's finally block.
347
- if (permit === claimPermit) claimPermit = undefined;
348
- await runWithApplicationJobPermit(permit, dispatch);
307
+ this.recordsSinceYield += 1;
308
+ const dispatch = async () => {
309
+ try {
310
+ await this.options.dispatch(owner, record);
311
+ await record.onTerminalCompletion?.();
312
+ } catch (error) {
313
+ this.reportDispatchError(error, meshDispatchFailureContext(record));
314
+ }
315
+ };
316
+ if (permit === undefined) {
317
+ await dispatch();
318
+ } else {
319
+ if (
320
+ domain === ReadyDomain.Application &&
321
+ record.applicationJobPermit === undefined
322
+ )
323
+ permit.markApplicationQueued();
324
+ // The scope now owns this reservation, including failure
325
+ // and detached handler handoff. Only unused permits remain
326
+ // owned by the receive attempt's finally block.
327
+ if (permit === claimPermit) claimPermit = undefined;
328
+ await runWithApplicationJobPermit(permit, dispatch);
329
+ }
330
+ const yieldTurn = this.yieldIfNeeded();
331
+ if (yieldTurn !== undefined) await yieldTurn;
332
+ }
333
+ } finally {
334
+ // Batch ownership includes records whose dispatch never began,
335
+ // including on failure or shutdown in the middle of the batch.
336
+ for (const record of received.records) {
337
+ for (const part of record.parts) part.close();
338
+ record.releaseRetainedIngress?.();
349
339
  }
350
- const yieldTurn = this.yieldIfNeeded();
351
- if (yieldTurn !== undefined) await yieldTurn;
352
340
  }
353
341
  } finally {
354
- // Batch ownership includes records whose dispatch never began,
355
- // including on failure or shutdown in the middle of the batch.
356
- for (const record of received.records) {
357
- for (const part of record.parts) part.close();
358
- record.releaseRetainedIngress?.();
359
- }
342
+ claimPermit?.releaseAfterInternalProcessing();
360
343
  }
361
- } finally {
362
- claimPermit?.releaseAfterInternalProcessing();
363
344
  }
345
+ } finally {
346
+ claim.release();
347
+ if (receiveBatch === undefined) ownerReceiveBatch?.close();
364
348
  }
365
- } finally {
366
- claim.release();
349
+ };
350
+ // An application worker drains the one owner it claimed. Infrastructure owners
351
+ // drain independently, so a suspended owner does not hold the other claims.
352
+ if (receiveBatch !== undefined) {
353
+ await drainClaim();
354
+ } else {
355
+ const drain = drainClaim().catch((error) => this.reportDispatchError(error));
356
+ this.activeDrains.add(drain);
357
+ void drain.finally(() => this.activeDrains.delete(drain));
367
358
  }
368
359
  }
369
360
  if (claimBudget !== undefined && claimsDrained >= claimBudget) {
@@ -425,8 +416,11 @@ function meshDispatchFailureContext(record: ReceiveRecord): ZLinkMeshDispatchFai
425
416
  function serviceWireCommand(record: ReceiveRecord): number | undefined {
426
417
  if (record.parts.length !== 1) return undefined;
427
418
  const bytes = record.parts[0]!.data();
428
- return bytes.byteLength >= 5 && bytes[0] === 0x5a && bytes[1] === 0x4d && bytes[2] === 1
429
- ? bytes[3]
419
+ return bytes.byteLength >= SERVICE_WIRE_PREFIX_SIZE &&
420
+ bytes[0] === SERVICE_WIRE_MAGIC[0] &&
421
+ bytes[1] === SERVICE_WIRE_MAGIC[1] &&
422
+ bytes[SERVICE_WIRE_MAJOR_OFFSET] === SERVICE_WIRE_MAJOR
423
+ ? bytes[SERVICE_WIRE_COMMAND_OFFSET]
430
424
  : undefined;
431
425
  }
432
426
 
@@ -1,6 +1,12 @@
1
+ import { constants as osConstants } from 'node:os';
2
+ import { waitRequestReply } from '../../messaging/request-deadline';
3
+ import {
4
+ requireClassicFanoutCompletion,
5
+ ZLinkSubmitStatus
6
+ } from '../../messaging/submission-result';
1
7
  import { loadBinding } from '../node-backend-adapter';
2
8
  import { SubmitResult, ZLinkBackendResultError } from '../runtime-values';
3
- import { requireOneWayCompletion, ZLinkSubmitStatus } from '../../messaging/submission-result';
9
+ const nativeErrnoValues = osConstants.errno;
4
10
 
5
11
  export type ZLinkBindingModule = typeof import('@zlink-systems/zlink');
6
12
  export const zlink = loadBinding() as ZLinkBindingModule;
@@ -46,7 +52,7 @@ interface ZLinkBindingRequestSubmitOperation {
46
52
  }
47
53
 
48
54
  export function isBindingNotFound(error: unknown): boolean {
49
- return error instanceof zlink.ConfigError && error.result === zlink.ConfigResult.NotFound;
55
+ return error instanceof zlink.ConnectError && error.result === zlink.ConnectResult.NotFound;
50
56
  }
51
57
 
52
58
  function isNonBlockingRecvEmpty(error: unknown): boolean {
@@ -64,7 +70,10 @@ export function isRouteRecvRetryable(error: unknown): boolean {
64
70
  }
65
71
 
66
72
  function isNativeBadAddress(error: { nativeErrno?: unknown; message?: unknown }): boolean {
67
- return error.nativeErrno === 14 || /Bad address/i.test(String(error.message ?? ''));
73
+ return (
74
+ error.nativeErrno === nativeErrnoValues.EFAULT ||
75
+ /Bad address/i.test(String(error.message ?? ''))
76
+ );
68
77
  }
69
78
 
70
79
  export function submitBindingPublish(
@@ -87,7 +96,7 @@ export function submitBindingPublish(
87
96
  (translated.result === SubmitResult.Backpressured ||
88
97
  translated.result === SubmitResult.NotAdmitted)
89
98
  ) {
90
- requireOneWayCompletion(
99
+ requireClassicFanoutCompletion(
91
100
  { status: ZLinkSubmitStatus.Backpressured },
92
101
  'Classic fanout publish'
93
102
  );
@@ -114,6 +123,7 @@ export async function submitBindingAsyncSend(
114
123
  operation: ZLinkBindingAsyncSendOperation,
115
124
  payload: unknown
116
125
  ): Promise<void> {
126
+ let submission: import('@zlink-systems/zlink').SendSubmission;
117
127
  try {
118
128
  let current: ZLinkBindingAsyncSendSubmitOperation | undefined;
119
129
  const parts = Array.isArray(payload) ? payload : [payload];
@@ -122,9 +132,16 @@ export async function submitBindingAsyncSend(
122
132
  current = current === undefined ? operation.message(nativePart) : current.message(nativePart);
123
133
  }
124
134
  current ??= operation.message(Buffer.alloc(0));
125
- await current.submit().admitted;
135
+ submission = current.submit();
126
136
  } catch (error) {
127
- throw translateBindingResultError(error);
137
+ throw translateBindingResultError(error, 'submit');
138
+ }
139
+ if (submission.result === SubmitResult.Backpressured) {
140
+ try {
141
+ await submission.admitted;
142
+ } catch (error) {
143
+ throw translateBindingResultError(error, 'completion');
144
+ }
128
145
  }
129
146
  }
130
147
 
@@ -151,6 +168,7 @@ export async function submitBindingRequest(
151
168
  payload: unknown,
152
169
  timeoutMs: number | undefined
153
170
  ): Promise<readonly unknown[]> {
171
+ const deadlineMs = timeoutMs === undefined ? undefined : performance.now() + timeoutMs;
154
172
  try {
155
173
  let current: ZLinkBindingRequestSubmitOperation | undefined;
156
174
  if (Array.isArray(payload)) {
@@ -166,12 +184,39 @@ export async function submitBindingRequest(
166
184
  if (timeoutMs !== undefined) {
167
185
  current = current.timeout(timeoutMs);
168
186
  }
169
- return await current.submit().reply;
187
+ return await bindingRequestReply(current.submit(), deadlineMs);
170
188
  } catch (error) {
171
189
  throw translateBindingResultError(error);
172
190
  }
173
191
  }
174
192
 
193
+ export async function bindingRequestReply(
194
+ submission: import('@zlink-systems/zlink').RequestSubmission,
195
+ deadlineMs: number | undefined
196
+ ): Promise<import('@zlink-systems/zlink').Message[]> {
197
+ const reply = submission.reply;
198
+ if (submission.result === SubmitResult.Backpressured) {
199
+ try {
200
+ const [, replies] = await waitRequestReply(
201
+ Promise.all([submission.admitted, reply]),
202
+ 'Request',
203
+ deadlineMs
204
+ );
205
+ return replies;
206
+ } catch (error) {
207
+ void reply.then(closeBindingReply, () => undefined);
208
+ throw error;
209
+ }
210
+ }
211
+ return reply;
212
+ }
213
+
214
+ export function closeBindingReply(
215
+ replies: readonly import('@zlink-systems/zlink').Message[]
216
+ ): void {
217
+ for (const reply of replies) reply.close();
218
+ }
219
+
175
220
  /**
176
221
  * Closes a binding handle once. An already closed or terminated handle counts as
177
222
  * closed. A busy close propagates to the caller.
@@ -189,7 +234,13 @@ function isSuccessfulOrAlreadyShutdownCloseError(error: unknown): boolean {
189
234
  isContextTerminatedError(error) ||
190
235
  (error instanceof Error &&
191
236
  'code' in error &&
192
- [0, 402, 403].includes((error as { code: number }).code))
237
+ (
238
+ [
239
+ zlink.CloseResult.Ok,
240
+ zlink.CloseResult.Shutdown,
241
+ zlink.CloseResult.InvalidHandle
242
+ ] as readonly number[]
243
+ ).includes((error as { code: number }).code))
193
244
  );
194
245
  }
195
246
 
@@ -239,9 +290,15 @@ function toNativeMessageLike(message: unknown): unknown {
239
290
  return message;
240
291
  }
241
292
 
242
- export function translateBindingResultError(error: unknown): unknown {
293
+ export function translateBindingResultError(
294
+ error: unknown,
295
+ phase: 'submit' | 'completion' = 'completion'
296
+ ): unknown {
243
297
  if (error instanceof zlink.SubmitError) {
244
- return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, { cause: error });
298
+ return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
299
+ cause: error,
300
+ phase
301
+ });
245
302
  }
246
303
  if (error instanceof zlink.RequestError) {
247
304
  return new ZLinkBackendResultError('request', error.result, error.nativeErrno, {
@@ -24,10 +24,8 @@ export class ZLinkDealerChannelClientTransport implements ZLinkChannelClientTran
24
24
  channelName: string,
25
25
  packetName: string | undefined,
26
26
  message: Message,
27
- signal?: AbortSignal,
28
27
  metadata: ReadonlyMap<string, string> = EMPTY_METADATA
29
28
  ): Promise<ZLinkSubmitResult> {
30
- throwIfAborted(signal);
31
29
  // Call-scoped flow (spec 27 §4): the envelope flow pair does not outlive
32
30
  // this outbound call.
33
31
  await runWithOutboundFlow(