@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
@@ -24,7 +24,7 @@ export interface ZLinkRawMonitorRecord {
24
24
  readonly flags?: number;
25
25
  }
26
26
  export interface ZLinkRawSocketPort {
27
- setReadableHandler(handler: () => void): void;
27
+ setReadableHandler(handler: (receiveReady: boolean, routeReady: boolean) => void): void;
28
28
  bind(endpoint: string): void;
29
29
  unbind(endpoint: string): void;
30
30
  connect(endpoint: string): void;
@@ -41,7 +41,10 @@ export declare class ZLinkBackendResultError extends Error {
41
41
  readonly operation: 'request' | 'submit';
42
42
  readonly result: number;
43
43
  readonly nativeErrno?: number | undefined;
44
- constructor(operation: 'request' | 'submit', result: number, nativeErrno?: number | undefined, options?: ErrorOptions);
44
+ constructor(operation: 'request' | 'submit', result: number, nativeErrno?: number | undefined, options?: ErrorOptions & {
45
+ readonly phase?: 'submit' | 'completion';
46
+ });
47
+ readonly phase: 'submit' | 'completion';
45
48
  }
46
49
  export declare function isZLinkBackendResultError(error: unknown): error is ZLinkBackendResultError;
47
50
  export declare function isBackendNotConnectedError(error: unknown): boolean;
@@ -48,7 +48,9 @@ class ZLinkBackendResultError extends Error {
48
48
  this.result = result;
49
49
  this.nativeErrno = nativeErrno;
50
50
  this.name = 'ZLinkBackendResultError';
51
+ this.phase = options?.phase ?? 'completion';
51
52
  }
53
+ phase;
52
54
  }
53
55
  exports.ZLinkBackendResultError = ZLinkBackendResultError;
54
56
  function isZLinkBackendResultError(error) {
@@ -2,15 +2,24 @@ import type { ZLinkChannelClient, ZLinkChannelRequestCall, ZLinkFanoutClient, ZL
2
2
  import type { SpotHandle } from '../spots/spot-handle';
3
3
  import { type ZLinkFrameworkRegistration } from '../configuration';
4
4
  import type { ZLinkChannelClientTransportSource, ZLinkRouteClientTransport, ZLinkSpotPublisherClientTransport } from './channel-transports';
5
+ type RouteMeshChannelMatch = {
6
+ readonly meshName: string;
7
+ readonly mesh: NonNullable<ReturnType<ZLinkFrameworkRegistration['spotNodes']['get']>>;
8
+ };
9
+ type ChannelRouteResolution = {
10
+ readonly kind: 'client-server';
11
+ readonly channel: NonNullable<ReturnType<ZLinkFrameworkRegistration['channels']['get']>>;
12
+ } | {
13
+ readonly kind: 'route-mesh';
14
+ readonly matches: readonly RouteMeshChannelMatch[];
15
+ };
16
+ export declare function resolveChannelRoute(registration: ZLinkFrameworkRegistration, channelName: string): ChannelRouteResolution | undefined;
17
+ export declare function requireUniqueRouteMeshChannel(matches: readonly RouteMeshChannelMatch[], duplicateMessage: string): RouteMeshChannelMatch;
5
18
  export declare class DefaultZLinkChannelClient implements ZLinkChannelClient {
6
- private readonly registration;
7
- private readonly transport?;
8
- constructor(registration: ZLinkFrameworkRegistration, transport?: ZLinkChannelClientTransportSource | undefined);
19
+ private readonly routeClient;
20
+ constructor(registration: ZLinkFrameworkRegistration, channelTransport?: ZLinkChannelClientTransportSource, routeTransport?: ZLinkRouteClientTransport, spotRouterChannelIdForMesh?: (meshName: string) => string);
9
21
  sendToChannel(channelName: string, message: unknown): ZLinkSendCall;
10
22
  requestToChannel(channelName: string, request: unknown): ZLinkChannelRequestCall;
11
- private defaultRequestTimeout;
12
- private requireChannel;
13
- private requireTransport;
14
23
  }
15
24
  export declare class DefaultZLinkFanoutClient implements ZLinkFanoutClient {
16
25
  private readonly registration;
@@ -25,7 +34,8 @@ export declare class DefaultZLinkRouteClient implements ZLinkRouteClient {
25
34
  private readonly registration;
26
35
  private readonly transport?;
27
36
  private readonly spotRouterChannelIdForMesh;
28
- constructor(registration: ZLinkFrameworkRegistration, transport?: ZLinkRouteClientTransport | undefined, spotRouterChannelIdForMesh?: (meshName: string) => string);
37
+ private readonly channelTransport?;
38
+ constructor(registration: ZLinkFrameworkRegistration, transport?: ZLinkRouteClientTransport | undefined, spotRouterChannelIdForMesh?: (meshName: string) => string, channelTransport?: ZLinkChannelClientTransportSource | undefined);
29
39
  sendToNode(meshName: string, targetNodeRid: string, message: unknown): ZLinkSendCall;
30
40
  requestToNode(meshName: string, targetNodeRid: string, request: unknown): ZLinkRequestCall;
31
41
  sendToChannel(channelName: string, message: unknown): ZLinkSendCall;
@@ -34,9 +44,10 @@ export declare class DefaultZLinkRouteClient implements ZLinkRouteClient {
34
44
  requestToSpot(spot: SpotHandle, request: unknown): ZLinkRequestCall;
35
45
  private defaultRequestTimeout;
36
46
  private requireMesh;
37
- private resolveMeshChannel;
47
+ private requireChannelRoute;
38
48
  private defaultRequestTimeoutForChannel;
39
49
  private requireTransport;
50
+ private requireChannelTransport;
40
51
  private requireSpotTransport;
41
52
  }
42
53
  export declare class DefaultZLinkSpotPublisherClient implements ZLinkSpotPublisherClient {
@@ -47,3 +58,4 @@ export declare class DefaultZLinkSpotPublisherClient implements ZLinkSpotPublish
47
58
  private requireMeshChannel;
48
59
  private requireTransport;
49
60
  }
61
+ export {};
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultZLinkSpotPublisherClient = exports.DefaultZLinkRouteClient = exports.DefaultZLinkFanoutClient = exports.DefaultZLinkChannelClient = void 0;
4
+ exports.resolveChannelRoute = resolveChannelRoute;
5
+ exports.requireUniqueRouteMeshChannel = requireUniqueRouteMeshChannel;
6
+ const Registration_1 = require("../../contracts/Configuration/Registration");
4
7
  const configuration_1 = require("../configuration");
5
8
  const framework_errors_internal_1 = require("../framework-errors-internal");
6
9
  const submission_result_1 = require("../messaging/submission-result");
@@ -9,39 +12,32 @@ const execution_1 = require("../execution");
9
12
  const fanout_service_wire_1 = require("./fanout-service-wire");
10
13
  const spot_outbound_1 = require("../spots/spot-outbound");
11
14
  const packet_name_1 = require("../messaging/packet-name");
15
+ function resolveChannelRoute(registration, channelName) {
16
+ const clientServerChannel = registration.channels.get(channelName);
17
+ if (clientServerChannel !== undefined) {
18
+ return { kind: 'client-server', channel: clientServerChannel };
19
+ }
20
+ const matches = [...registration.spotNodes.entries()]
21
+ .filter(([, mesh]) => Object.prototype.hasOwnProperty.call(mesh.meshChannels ?? {}, channelName))
22
+ .map(([meshName, mesh]) => ({ meshName, mesh }));
23
+ return matches.length === 0 ? undefined : { kind: 'route-mesh', matches };
24
+ }
25
+ function requireUniqueRouteMeshChannel(matches, duplicateMessage) {
26
+ if (matches.length !== 1) {
27
+ throw new configuration_1.ZLinkConfigurationException(duplicateMessage);
28
+ }
29
+ return matches[0];
30
+ }
12
31
  class DefaultZLinkChannelClient {
13
- registration;
14
- transport;
15
- constructor(registration, transport) {
16
- this.registration = registration;
17
- this.transport = transport;
32
+ routeClient;
33
+ constructor(registration, channelTransport, routeTransport, spotRouterChannelIdForMesh = (meshName) => meshName) {
34
+ this.routeClient = new DefaultZLinkRouteClient(registration, routeTransport, spotRouterChannelIdForMesh, channelTransport);
18
35
  }
19
36
  sendToChannel(channelName, message) {
20
- return new DefaultZLinkSendCall(() => this.requireChannel(channelName), async (packetName, metadata, signal) => normalizeSubmitResult(await this.requireTransport().send(channelName, packetName, message, signal, metadata)));
37
+ return this.routeClient.sendToChannel(channelName, message);
21
38
  }
22
39
  requestToChannel(channelName, request) {
23
- return new DefaultZLinkRequestCall(() => this.requireChannel(channelName), (packetName, timeoutMs, metadata, signal) => this.requireTransport().request(channelName, packetName, request, timeoutMs, signal, metadata), this.defaultRequestTimeout(channelName));
24
- }
25
- defaultRequestTimeout(channelName) {
26
- return (this.registration.channels.get(channelName)?.requestTimeoutMs ??
27
- this.registration.requestTimeoutMs ??
28
- 30_000);
29
- }
30
- requireChannel(channelName) {
31
- const channel = this.registration.channels.get(channelName);
32
- if (channel === undefined) {
33
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `Channel client '${channelName}' is not registered.`);
34
- }
35
- if (channel.client === undefined) {
36
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidConfiguration, `Channel client role '${channelName}' is not configured.`);
37
- }
38
- }
39
- requireTransport() {
40
- const transport = typeof this.transport === 'function' ? this.transport() : this.transport;
41
- if (transport === undefined) {
42
- throw new configuration_1.ZLinkConfigurationException('Channel runtime is not started.');
43
- }
44
- return transport;
40
+ return this.routeClient.requestToChannel(channelName, request);
45
41
  }
46
42
  }
47
43
  exports.DefaultZLinkChannelClient = DefaultZLinkChannelClient;
@@ -82,39 +78,42 @@ class DefaultZLinkRouteClient {
82
78
  registration;
83
79
  transport;
84
80
  spotRouterChannelIdForMesh;
85
- constructor(registration, transport, spotRouterChannelIdForMesh = (meshName) => meshName) {
81
+ channelTransport;
82
+ constructor(registration, transport, spotRouterChannelIdForMesh = (meshName) => meshName, channelTransport) {
86
83
  this.registration = registration;
87
84
  this.transport = transport;
88
85
  this.spotRouterChannelIdForMesh = spotRouterChannelIdForMesh;
86
+ this.channelTransport = channelTransport;
89
87
  }
90
88
  sendToNode(meshName, targetNodeRid, message) {
91
- return new DefaultZLinkSendCall(() => this.requireMesh(meshName), async (packetName, metadata, signal) => normalizeSubmitResult(await this.requireTransport().submit(meshName, targetNodeRid, packetName, message, signal, metadata)));
89
+ return new DefaultZLinkSendCall(() => this.requireMesh(meshName), async (packetName, metadata) => normalizeSubmitResult(await this.requireTransport().submit(meshName, targetNodeRid, packetName, message, metadata)));
92
90
  }
93
91
  requestToNode(meshName, targetNodeRid, request) {
94
92
  return new DefaultZLinkRequestCall(() => this.requireMesh(meshName), (packetName, timeoutMs, metadata, signal) => this.requireTransport().request(meshName, targetNodeRid, packetName, request, timeoutMs, signal, metadata), this.defaultRequestTimeout(meshName));
95
93
  }
96
94
  sendToChannel(channelName, message) {
97
- return new DefaultZLinkSendCall(() => {
98
- this.resolveMeshChannel(channelName);
99
- }, async (packetName, metadata, signal) => {
100
- const meshName = this.resolveMeshChannel(channelName);
101
- return normalizeSubmitResult(await this.requireTransport().submitToChannel(meshName, channelName, packetName, message, signal, metadata));
95
+ return new DefaultZLinkSendCall(() => this.requireChannelRoute(channelName), async (packetName, metadata) => {
96
+ const route = this.requireChannelRoute(channelName);
97
+ if (route.kind === 'route-mesh') {
98
+ return normalizeSubmitResult(await this.requireTransport().submitToChannel(route.meshName, channelName, packetName, message, metadata));
99
+ }
100
+ return normalizeSubmitResult(await this.requireChannelTransport().send(channelName, packetName, message, metadata));
102
101
  });
103
102
  }
104
103
  requestToChannel(channelName, request) {
105
- return new DefaultZLinkRequestCall(() => {
106
- this.resolveMeshChannel(channelName);
107
- }, (packetName, timeoutMs, metadata, signal) => {
108
- const meshName = this.resolveMeshChannel(channelName);
109
- return this.requireTransport().requestToChannel(meshName, channelName, packetName, request, timeoutMs, signal, metadata);
104
+ return new DefaultZLinkRequestCall(() => this.requireChannelRoute(channelName), (packetName, timeoutMs, metadata, signal) => {
105
+ const route = this.requireChannelRoute(channelName);
106
+ if (route.kind === 'route-mesh') {
107
+ return this.requireTransport().requestToChannel(route.meshName, channelName, packetName, request, timeoutMs, signal, metadata);
108
+ }
109
+ return this.requireChannelTransport().request(channelName, packetName, request, timeoutMs, signal, metadata);
110
110
  }, this.defaultRequestTimeoutForChannel(channelName));
111
111
  }
112
112
  sendToSpot(spot, message) {
113
113
  return new DefaultZLinkSendCall(() => {
114
114
  this.requireSpotTransport();
115
- }, async (_packetName, metadata, signal) => {
115
+ }, async (_packetName, metadata) => {
116
116
  await (0, spot_outbound_1.sendToSpotHandle)(this.requireSpotTransport(), spot, message, {
117
- signal,
118
117
  metadata,
119
118
  spotRouterChannelIdForMesh: this.spotRouterChannelIdForMesh
120
119
  });
@@ -129,13 +128,13 @@ class DefaultZLinkRouteClient {
129
128
  signal,
130
129
  metadata,
131
130
  spotRouterChannelIdForMesh: this.spotRouterChannelIdForMesh
132
- }), this.registration.requestTimeoutMs ?? 30_000);
131
+ }), this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS);
133
132
  }
134
133
  defaultRequestTimeout(meshName) {
135
134
  return (this.registration.spotNodes.get(meshName)?.requestTimeoutMs ??
136
135
  this.registration.routeChannelOptions.get(meshName)?.requestTimeoutMs ??
137
136
  this.registration.requestTimeoutMs ??
138
- 30_000);
137
+ Registration_1.DEFAULT_REQUEST_TIMEOUT_MS);
139
138
  }
140
139
  requireMesh(meshName) {
141
140
  if (!this.registration.spotNodes.has(meshName) &&
@@ -143,21 +142,30 @@ class DefaultZLinkRouteClient {
143
142
  throw new configuration_1.ZLinkConfigurationException(`RouteMesh '${meshName}' is not registered.`);
144
143
  }
145
144
  }
146
- resolveMeshChannel(channelName) {
147
- const matches = [...this.registration.spotNodes.entries()]
148
- .filter(([, mesh]) => Object.prototype.hasOwnProperty.call(mesh.meshChannels ?? {}, channelName))
149
- .map(([meshName]) => meshName);
150
- if (matches.length === 0) {
151
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `RouteMesh channel '${channelName}' is not registered.`);
145
+ requireChannelRoute(channelName) {
146
+ const resolution = resolveChannelRoute(this.registration, channelName);
147
+ if (resolution === undefined) {
148
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `ChannelName '${channelName}' is not registered.`);
152
149
  }
153
- if (matches.length !== 1) {
154
- throw new configuration_1.ZLinkConfigurationException(`RouteMesh channel '${channelName}' must be unique across the Framework host.`);
150
+ if (resolution.kind === 'client-server') {
151
+ if (resolution.channel.client === undefined) {
152
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidConfiguration, `Channel client role '${channelName}' is not configured.`);
153
+ }
154
+ return resolution;
155
155
  }
156
- return matches[0];
156
+ return {
157
+ kind: 'route-mesh',
158
+ ...requireUniqueRouteMeshChannel(resolution.matches, `RouteMesh channel '${channelName}' must be unique across the Framework host.`)
159
+ };
157
160
  }
158
161
  defaultRequestTimeoutForChannel(channelName) {
159
- const match = [...this.registration.spotNodes.entries()].find(([, mesh]) => Object.prototype.hasOwnProperty.call(mesh.meshChannels ?? {}, channelName));
160
- return match?.[1].requestTimeoutMs ?? this.registration.requestTimeoutMs ?? 30_000;
162
+ const route = resolveChannelRoute(this.registration, channelName);
163
+ const timeoutMs = route?.kind === 'client-server'
164
+ ? route.channel.requestTimeoutMs
165
+ : route?.kind === 'route-mesh'
166
+ ? route.matches[0]?.mesh.requestTimeoutMs
167
+ : undefined;
168
+ return timeoutMs ?? this.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS;
161
169
  }
162
170
  requireTransport() {
163
171
  if (this.transport === undefined) {
@@ -165,6 +173,13 @@ class DefaultZLinkRouteClient {
165
173
  }
166
174
  return this.transport;
167
175
  }
176
+ requireChannelTransport() {
177
+ const transport = typeof this.channelTransport === 'function' ? this.channelTransport() : this.channelTransport;
178
+ if (transport === undefined) {
179
+ throw new configuration_1.ZLinkConfigurationException('Channel runtime is not started.');
180
+ }
181
+ return transport;
182
+ }
168
183
  requireSpotTransport() {
169
184
  const transport = this.requireTransport();
170
185
  if (transport.sendToSpot === undefined || transport.requestToSpot === undefined) {
@@ -220,12 +235,11 @@ class DefaultZLinkSendCall {
220
235
  }
221
236
  return this;
222
237
  }
223
- async submit(signal) {
238
+ async submit() {
224
239
  ensureNotExecuted(this.executed);
225
240
  this.validate();
226
241
  this.executed = true;
227
- (0, abort_1.throwIfAborted)(signal);
228
- const result = await this.submitter(undefined, new Map(this.selectedMetadata), signal);
242
+ const result = await this.submitter(undefined, new Map(this.selectedMetadata));
229
243
  (0, submission_result_1.requireOneWayCompletion)(result, 'One-way send');
230
244
  }
231
245
  }
@@ -321,6 +335,6 @@ class DefaultZLinkFanoutPublishCall {
321
335
  this.executed = true;
322
336
  (0, abort_1.throwIfAborted)(signal);
323
337
  const result = await this.submitter(signal);
324
- (0, submission_result_1.requireOneWayCompletion)(result, 'Classic fanout publish');
338
+ (0, submission_result_1.requireClassicFanoutCompletion)(result, 'Classic fanout publish');
325
339
  }
326
340
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryDecodeChannelHeader = tryDecodeChannelHeader;
4
4
  exports.inspectMalformedChannelHeader = inspectMalformedChannelHeader;
5
5
  exports.malformedProtocolErrorRequestHeader = malformedProtocolErrorRequestHeader;
6
+ const stream_wire_1 = require("@zlink-systems/stream-wire");
6
7
  const channel_envelope_1 = require("./channel-envelope");
7
8
  function tryDecodeChannelHeader(parts, flowEnabled = true) {
8
9
  if (parts.length < 2 || parts[0].data().length === 0) {
@@ -55,7 +56,7 @@ function malformedProtocolErrorRequestHeader(channelName, info) {
55
56
  kind: 1 /* ZLinkChannelMessageKind.Request */,
56
57
  channelName,
57
58
  messageName: info.messageName ?? '',
58
- contentType: 'application/json',
59
+ contentType: stream_wire_1.ZlinkStreamContentType.Json,
59
60
  correlationId: info.correlationId ?? null,
60
61
  deadline: null,
61
62
  topic: null,
@@ -43,7 +43,7 @@ export declare function encodeChannelEnvelopeParts(kind: ZLinkChannelMessageKind
43
43
  * entry point for operations that must not extend their original deadline
44
44
  * while the message is being serialized.
45
45
  */
46
- export declare function encodeChannelEnvelopePartsAtDeadline(kind: ZLinkChannelMessageKind, channelName: string, packetName: string | undefined, payload: unknown, deadlineUnixMs: number, topic?: string, codecs?: ZLinkChannelEnvelopeCodecRegistry, correlationId?: string, createFlow?: boolean, metadata?: ReadonlyMap<string, string>): readonly MessageLike[];
46
+ export declare function encodeChannelEnvelopePartsAtDeadline(kind: ZLinkChannelMessageKind, channelName: string, packetName: string | undefined, payload: unknown, deadlineUnixMs: number | undefined, topic?: string, codecs?: ZLinkChannelEnvelopeCodecRegistry, correlationId?: string, createFlow?: boolean, metadata?: ReadonlyMap<string, string>): readonly MessageLike[];
47
47
  export declare function encodeChannelPublishEnvelopeParts(channelName: string, topic: string, packetName: string | undefined, payload: unknown, codecs?: ZLinkChannelEnvelopeCodecRegistry, createFlow?: boolean, metadata?: ReadonlyMap<string, string>): readonly MessageLike[];
48
48
  export declare function encodeChannelReplyParts(request: ZLinkChannelEnvelopeHeader, payload: unknown, codecs?: ZLinkChannelEnvelopeCodecRegistry): readonly MessageLike[];
49
49
  /**
@@ -14,6 +14,7 @@ exports.decodeChannelPayload = decodeChannelPayload;
14
14
  exports.closeMessages = closeMessages;
15
15
  exports.decodeChannelHeader = decodeChannelHeader;
16
16
  const node_crypto_1 = require("node:crypto");
17
+ const node_buffer_1 = require("node:buffer");
17
18
  const contracts_1 = require("../../contracts");
18
19
  const encoded_payload_storage_1 = require("../../contracts/Common/encoded-payload-storage");
19
20
  const ZLinkMessage_1 = require("../../contracts/Common/ZLinkMessage");
@@ -24,6 +25,7 @@ const payload_codec_1 = require("../messaging/payload-codec");
24
25
  const CodecContentType_1 = require("../../contracts/Configuration/CodecContentType");
25
26
  const framework_json_v1_1 = require("../messaging/framework-json-v1");
26
27
  const flow_context_1 = require("../diagnostics/flow-context");
28
+ const service_wire_constants_generated_1 = require("../foundation/service-wire-constants.generated");
27
29
  const channel_framework_packets_1 = require("./channel-framework-packets");
28
30
  const Attributes_1 = require("../../contracts/Handlers/Attributes");
29
31
  exports.ZLINK_CHANNEL_FORMAT_MARKER = 0xf2;
@@ -36,14 +38,7 @@ function newChannelCorrelationId() {
36
38
  return (0, node_crypto_1.randomUUID)().replaceAll('-', '');
37
39
  }
38
40
  function encodeChannelEnvelopeParts(kind, channelName, packetName, payload, timeoutMs, topic, codecs, correlationId, createFlow = true, metadata = EMPTY_OUTBOUND_METADATA) {
39
- const messageName = (0, packet_name_1.resolveFrameworkPacketName)(payload, packetName, 'Channel');
40
- const encoded = encodePayload(payload, (0, channel_framework_packets_1.codecsForFrameworkPacket)(messageName, codecs), messageName, 'payload');
41
- const flow = createFlow ? (0, flow_context_1.currentOrCreateFlow)('Application') : undefined;
42
- const envelopeCorrelationId = correlationIdForOutboundKind(kind, correlationId);
43
- return [
44
- encodeChannelHeader(kind, channelName, messageName, encoded.contentType, envelopeCorrelationId, timeoutMs === undefined ? null : new Date(Date.now() + timeoutMs).toISOString(), topic ?? null, null, null, undefined, applicationMetadataRecord(metadata), flow?.flowId, flow?.flowOrigin),
45
- encoded.message
46
- ];
41
+ return encodeChannelEnvelopePartsAtDeadline(kind, channelName, packetName, payload, timeoutMs === undefined ? undefined : Date.now() + timeoutMs, topic, codecs, correlationId, createFlow, metadata);
47
42
  }
48
43
  /**
49
44
  * Encodes an outbound channel envelope with a deadline that was established
@@ -52,7 +47,8 @@ function encodeChannelEnvelopeParts(kind, channelName, packetName, payload, time
52
47
  * while the message is being serialized.
53
48
  */
54
49
  function encodeChannelEnvelopePartsAtDeadline(kind, channelName, packetName, payload, deadlineUnixMs, topic, codecs, correlationId, createFlow = true, metadata = EMPTY_OUTBOUND_METADATA) {
55
- if (!Number.isSafeInteger(deadlineUnixMs) || deadlineUnixMs <= 0) {
50
+ if (deadlineUnixMs !== undefined &&
51
+ (!Number.isSafeInteger(deadlineUnixMs) || deadlineUnixMs <= 0)) {
56
52
  throw new RangeError('deadlineUnixMs must be a positive safe integer.');
57
53
  }
58
54
  const messageName = (0, packet_name_1.resolveFrameworkPacketName)(payload, packetName, 'Channel');
@@ -60,7 +56,7 @@ function encodeChannelEnvelopePartsAtDeadline(kind, channelName, packetName, pay
60
56
  const flow = createFlow ? (0, flow_context_1.currentOrCreateFlow)('Application') : undefined;
61
57
  const envelopeCorrelationId = correlationIdForOutboundKind(kind, correlationId);
62
58
  return [
63
- encodeChannelHeader(kind, channelName, messageName, encoded.contentType, envelopeCorrelationId, new Date(deadlineUnixMs).toISOString(), topic ?? null, null, null, undefined, applicationMetadataRecord(metadata), flow?.flowId, flow?.flowOrigin),
59
+ encodeChannelHeader(kind, channelName, messageName, encoded.contentType, envelopeCorrelationId, deadlineUnixMs === undefined ? null : new Date(deadlineUnixMs).toISOString(), topic ?? null, null, null, undefined, applicationMetadataRecord(metadata), flow?.flowId, flow?.flowOrigin),
64
60
  encoded.message
65
61
  ];
66
62
  }
@@ -314,7 +310,20 @@ function writeChannelHeader(writer, kind, channelName, messageName, contentType,
314
310
  writer.append(',"source":');
315
311
  writer.nullableString(source);
316
312
  }
317
- writer.append(',"metadata":{');
313
+ writer.append(',"metadata":');
314
+ writeApplicationMetadata(writer, metadata);
315
+ if (flowId !== undefined) {
316
+ writer.append(',"flowId":');
317
+ writer.string(flowId);
318
+ }
319
+ if (flowOrigin !== undefined) {
320
+ writer.append(',"flowOrigin":');
321
+ writer.append(String(encodeFlowOrigin(flowOrigin)));
322
+ }
323
+ writer.append('}');
324
+ }
325
+ function writeApplicationMetadata(writer, metadata) {
326
+ writer.append('{');
318
327
  let first = true;
319
328
  for (const name in metadata) {
320
329
  if (!Object.prototype.hasOwnProperty.call(metadata, name))
@@ -327,15 +336,6 @@ function writeChannelHeader(writer, kind, channelName, messageName, contentType,
327
336
  writer.string(metadata[name]);
328
337
  }
329
338
  writer.append('}');
330
- if (flowId !== undefined) {
331
- writer.append(',"flowId":');
332
- writer.string(flowId);
333
- }
334
- if (flowOrigin !== undefined) {
335
- writer.append(',"flowOrigin":');
336
- writer.append(String(encodeFlowOrigin(flowOrigin)));
337
- }
338
- writer.append('}');
339
339
  }
340
340
  class ChannelHeaderWriter {
341
341
  output;
@@ -438,13 +438,16 @@ function parseWireJson(payload, schema) {
438
438
  }, schema);
439
439
  }
440
440
  function parseChannelHeaderBytes(payload) {
441
- return tryParseCanonicalChannelHeader(payload) ?? parseWireJson(payload.toString());
441
+ if (!(0, node_buffer_1.isUtf8)(payload)) {
442
+ throw new contracts_1.ZLinkFrameworkException(contracts_1.ZLinkFrameworkErrorKind.ProtocolError, 'Channel envelope header must contain valid UTF-8.');
443
+ }
444
+ return tryParseCanonicalChannelHeader(payload) ?? (0, framework_json_v1_1.parseFrameworkJsonV1)(payload.toString());
442
445
  }
443
446
  /**
444
447
  * Accept the byte layout emitted by writeChannelHeader without materializing
445
448
  * the enclosing JSON text. Any variation falls through to the established
446
449
  * framework-json-v1 parser, which remains the sole authority for JSON
447
- * failures, unknown properties, and prototype-key rejection.
450
+ * failures and unknown properties. Header metadata accepts every valid string key.
448
451
  */
449
452
  function tryParseCanonicalChannelHeader(payload) {
450
453
  const reader = new CanonicalChannelHeaderReader(payload);
@@ -700,34 +703,43 @@ function channelKindName(kind) {
700
703
  }
701
704
  const EMPTY_APPLICATION_METADATA = Object.freeze({});
702
705
  function applicationMetadataRecord(metadata) {
703
- // The common case carries no metadata; skip the record + JSON.stringify
704
- // byte-limit walk entirely.
705
706
  if (metadata.size === 0)
706
707
  return EMPTY_APPLICATION_METADATA;
707
- const record = {};
708
- for (const [key, value] of metadata) {
709
- if (key.length === 0 || key.includes('\0') || value.includes('\0')) {
710
- throw new configuration_1.ZLinkConfigurationException('Channel application metadata keys must be non-empty and keys and values must not contain NUL.');
711
- }
708
+ const record = Object.create(null);
709
+ for (const [key, value] of metadata)
712
710
  record[key] = value;
711
+ return validateApplicationMetadata(record);
712
+ }
713
+ const INVALID_METADATA_UNICODE = /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u;
714
+ function validateApplicationMetadata(metadata) {
715
+ const keys = Object.keys(metadata);
716
+ if (keys.length === 0)
717
+ return EMPTY_APPLICATION_METADATA;
718
+ for (const key of keys) {
719
+ const value = requireString(metadata[key], `metadata.${key}`);
720
+ if (key.length === 0 ||
721
+ key.includes('\0') ||
722
+ value.includes('\0') ||
723
+ INVALID_METADATA_UNICODE.test(key) ||
724
+ INVALID_METADATA_UNICODE.test(value)) {
725
+ throw new configuration_1.ZLinkConfigurationException('Channel application metadata keys must be non-empty and keys and values must be valid Unicode without NUL.');
726
+ }
713
727
  }
714
- if (Buffer.byteLength(JSON.stringify(record), 'utf8') > 1024) {
715
- throw new configuration_1.ZLinkConfigurationException('Channel application metadata exceeds the 1024-byte limit.');
728
+ const record = metadata;
729
+ const writer = new ChannelHeaderWriter();
730
+ writeApplicationMetadata(writer, record);
731
+ if (writer.byteLength > service_wire_constants_generated_1.SERVICE_WIRE_METADATA_BYTES) {
732
+ throw new configuration_1.ZLinkConfigurationException(`Channel application metadata exceeds the ${service_wire_constants_generated_1.SERVICE_WIRE_METADATA_BYTES}-byte limit.`);
716
733
  }
717
734
  return Object.freeze(record);
718
735
  }
719
736
  function requireApplicationMetadata(value) {
720
- if (value === undefined) {
721
- return Object.freeze({});
722
- }
737
+ if (value === undefined)
738
+ return EMPTY_APPLICATION_METADATA;
723
739
  if (!isRecord(value)) {
724
740
  throw new configuration_1.ZLinkConfigurationException('Channel application metadata must be a JSON object.');
725
741
  }
726
- const metadata = new Map();
727
- for (const [key, selectedValue] of Object.entries(value)) {
728
- metadata.set(key, requireString(selectedValue, `metadata.${key}`));
729
- }
730
- return applicationMetadataRecord(metadata);
742
+ return validateApplicationMetadata(value);
731
743
  }
732
744
  function optionalFlowId(value) {
733
745
  return value === undefined || value === null ? undefined : requireFlowId(value);
@@ -1,4 +1,5 @@
1
1
  import { type ZLinkSubmitResult } from '../messaging/submission-result';
2
+ import { type ZLinkRuntimeMessageFlowResult } from '../../contracts/Dispatch/ZLinkDispatchOptions';
2
3
  import { type ZLinkChannelEnvelopeCodecRegistry } from './channel-envelope';
3
4
  import { ZLinkChannelDispatchServices } from './channel-dispatch-services';
4
5
  import { ZLinkChannelSocketRegistry } from './channel-socket-registry';
@@ -9,7 +10,7 @@ export declare class ZLinkChannelOutboundOperations {
9
10
  private readonly pendingRequests;
10
11
  constructor(sockets: ZLinkChannelSocketRegistry, codecs: ZLinkChannelEnvelopeCodecRegistry, dispatchServices: ZLinkChannelDispatchServices);
11
12
  pendingRequestCount(channelName: string): number;
12
- send(channelName: string, packetName: string | undefined, message: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
13
+ send(channelName: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
13
14
  private sendScoped;
14
15
  private traceSend;
15
16
  request<TReply>(channelName: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<TReply>;
@@ -18,7 +19,7 @@ export declare class ZLinkChannelOutboundOperations {
18
19
  private tryPublishScoped;
19
20
  publish(channelName: string, topic: string, packetName: string | undefined, event: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
20
21
  private publishScoped;
21
- routeSubmit(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, message: unknown, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
22
+ routeSubmit(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, message: unknown, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
22
23
  private routeSubmitScoped;
23
24
  private traceRouteSend;
24
25
  routeRequest<TReply>(routerChannelId: string, targetNodeRid: string, packetName: string | undefined, request: unknown, timeoutMs: number | undefined, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<TReply>;
@@ -31,3 +32,5 @@ export declare class ZLinkChannelOutboundOperations {
31
32
  * ref'ed handle until reply, cancellation, timeout, or failure settles it.
32
33
  */
33
34
  export declare function keepChannelRequestAlive<T>(request: Promise<T>): Promise<T>;
35
+ export declare function requestTerminalResult(error: unknown, signal: AbortSignal | undefined): ZLinkRuntimeMessageFlowResult;
36
+ export declare function isRemoteChannelErrorReply(error: unknown): boolean;