@zlink-systems/framework 0.30.3 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActor.d.ts +2 -0
  3. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
  4. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
  5. package/dist/contracts/Actors/index.d.ts +1 -0
  6. package/dist/contracts/Actors/index.js +1 -0
  7. package/dist/contracts/Common/CoreTypes.d.ts +1 -0
  8. package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
  9. package/dist/contracts/Common/HandlerMessageType.js +41 -0
  10. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
  11. package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
  12. package/dist/contracts/Common/ZLinkMessage.js +11 -7
  13. package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
  14. package/dist/contracts/Common/encoded-payload-storage.js +4 -16
  15. package/dist/contracts/Common/index.d.ts +1 -1
  16. package/dist/contracts/Common/payload-slab.d.ts +4 -0
  17. package/dist/contracts/Common/payload-slab.js +30 -0
  18. package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
  19. package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
  20. package/dist/contracts/Handlers/Contexts.d.ts +1 -0
  21. package/dist/contracts/Locations/Authority.d.ts +2 -0
  22. package/dist/internal.d.ts +9 -0
  23. package/dist/internal.js +23 -1
  24. package/dist/nest-integration.d.ts +1 -0
  25. package/dist/nest-integration.js +3 -1
  26. package/dist/runtime/actors/actor-client.d.ts +6 -2
  27. package/dist/runtime/actors/actor-client.js +120 -82
  28. package/dist/runtime/actors/actor-context.js +16 -5
  29. package/dist/runtime/actors/actor-execution-context.js +2 -2
  30. package/dist/runtime/actors/actor-handoff.d.ts +12 -1
  31. package/dist/runtime/actors/actor-handoff.js +79 -34
  32. package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
  33. package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
  34. package/dist/runtime/actors/actor-local-native-join.js +19 -17
  35. package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
  36. package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
  37. package/dist/runtime/actors/actor-remote-joiner.js +4 -4
  38. package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
  39. package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
  40. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
  41. package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
  42. package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
  43. package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
  44. package/dist/runtime/admission.d.ts +6 -4
  45. package/dist/runtime/admission.js +21 -10
  46. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
  47. package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
  48. package/dist/runtime/backend/contracts/index.d.ts +26 -10
  49. package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
  50. package/dist/runtime/backend/mesh-completion-table.js +84 -20
  51. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
  52. package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
  53. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
  54. package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
  55. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
  56. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
  57. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  58. package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
  59. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
  60. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
  61. package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
  62. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
  63. package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
  64. package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
  65. package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
  66. package/dist/runtime/channels/channel-clients.js +3 -3
  67. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
  68. package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
  69. package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
  70. package/dist/runtime/channels/channel-dispatch-services.js +7 -6
  71. package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
  72. package/dist/runtime/channels/channel-dispatchers.js +57 -36
  73. package/dist/runtime/channels/channel-envelope.d.ts +2 -2
  74. package/dist/runtime/channels/channel-envelope.js +609 -83
  75. package/dist/runtime/channels/channel-multipart.d.ts +1 -0
  76. package/dist/runtime/channels/channel-multipart.js +10 -6
  77. package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
  78. package/dist/runtime/channels/channel-outbound-operations.js +107 -105
  79. package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
  80. package/dist/runtime/channels/channel-receive-loops.js +126 -90
  81. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
  82. package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
  83. package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
  84. package/dist/runtime/channels/channel-runtime-manager.js +32 -14
  85. package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
  86. package/dist/runtime/channels/channel-socket-registry.js +9 -1
  87. package/dist/runtime/channels/channel-transports.d.ts +23 -16
  88. package/dist/runtime/channels/channel-transports.js +139 -119
  89. package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
  90. package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
  91. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  92. package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
  93. package/dist/runtime/channels/local-spot-route-transport.js +15 -18
  94. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
  95. package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
  96. package/dist/runtime/channels/source-spot-router.d.ts +6 -3
  97. package/dist/runtime/channels/source-spot-router.js +34 -23
  98. package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
  99. package/dist/runtime/channels/spot-node-route-transport.js +23 -17
  100. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
  101. package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
  102. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
  103. package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
  104. package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
  105. package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
  106. package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
  107. package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
  108. package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
  109. package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
  110. package/dist/runtime/diagnostics/message-flow-record.js +228 -0
  111. package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
  112. package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
  113. package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
  114. package/dist/runtime/diagnostics/message-flow.js +42 -290
  115. package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
  116. package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
  117. package/dist/runtime/execution/index.d.ts +1 -0
  118. package/dist/runtime/execution/index.js +6 -3
  119. package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
  120. package/dist/runtime/execution/serial-execution-queue.js +75 -71
  121. package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
  122. package/dist/runtime/foundation/durable-service-request.js +158 -73
  123. package/dist/runtime/foundation/operation-registry.d.ts +33 -3
  124. package/dist/runtime/foundation/operation-registry.js +272 -33
  125. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
  126. package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
  127. package/dist/runtime/foundation/request-runtime.d.ts +17 -0
  128. package/dist/runtime/foundation/request-runtime.js +163 -0
  129. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  130. package/dist/runtime/foundation/service-discovery-registry.js +6 -0
  131. package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
  132. package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
  133. package/dist/runtime/foundation/service-mailbox.js +4 -1
  134. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
  135. package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
  136. package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
  137. package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
  138. package/dist/runtime/foundation/service-stateful-registry.js +38 -17
  139. package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
  140. package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
  141. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
  142. package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
  143. package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
  144. package/dist/runtime/foundation/service-topology-registry.js +13 -3
  145. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  146. package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
  147. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
  148. package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
  149. package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
  150. package/dist/runtime/host/actor-packet-relay.js +58 -57
  151. package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
  152. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  153. package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
  154. package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
  155. package/dist/runtime/host/application-job-queue.d.ts +7 -5
  156. package/dist/runtime/host/application-job-queue.js +33 -21
  157. package/dist/runtime/host/bound-session-relay.js +0 -1
  158. package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
  159. package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
  160. package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
  161. package/dist/runtime/host/entry-actor-runtime.js +2 -2
  162. package/dist/runtime/host/index.d.ts +106 -37
  163. package/dist/runtime/host/index.js +303 -151
  164. package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
  165. package/dist/runtime/host/location-runtime-owner.js +1 -1
  166. package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
  167. package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
  168. package/dist/runtime/host/spot-address-transport.d.ts +3 -0
  169. package/dist/runtime/host/spot-address-transport.js +73 -76
  170. package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
  171. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
  172. package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
  173. package/dist/runtime/internal-observation.d.ts +1 -0
  174. package/dist/runtime/internal-observation.js +5 -0
  175. package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
  176. package/dist/runtime/locations/actor-location-claims.js +15 -6
  177. package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
  178. package/dist/runtime/locations/auto-connect-loop.js +25 -19
  179. package/dist/runtime/locations/auto-connect-planner.js +2 -5
  180. package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
  181. package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
  182. package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
  183. package/dist/runtime/locations/in-memory-authority-store.js +15 -5
  184. package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
  185. package/dist/runtime/locations/in-memory-location-store.js +1 -38
  186. package/dist/runtime/locations/lifecycle.d.ts +1 -1
  187. package/dist/runtime/locations/lifecycle.js +2 -2
  188. package/dist/runtime/locations/location-store-repository.d.ts +0 -1
  189. package/dist/runtime/locations/location-store-repository.js +163 -246
  190. package/dist/runtime/locations/resolvers.d.ts +8 -1
  191. package/dist/runtime/locations/resolvers.js +16 -2
  192. package/dist/runtime/locations/runtime.d.ts +3 -3
  193. package/dist/runtime/locations/runtime.js +12 -16
  194. package/dist/runtime/messaging/creation-payload-codec.js +8 -7
  195. package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
  196. package/dist/runtime/messaging/framework-json-v1.js +6 -2
  197. package/dist/runtime/messaging/payload-codec.js +21 -35
  198. package/dist/runtime/messaging/request-deadline.d.ts +4 -2
  199. package/dist/runtime/messaging/request-deadline.js +40 -25
  200. package/dist/runtime/messaging/request-result.d.ts +14 -1
  201. package/dist/runtime/messaging/request-result.js +74 -13
  202. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
  203. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
  204. package/dist/runtime/spots/index.d.ts +28 -7
  205. package/dist/runtime/spots/index.js +31 -6
  206. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
  207. package/dist/runtime/spots/spot-activation-registry.js +13 -8
  208. package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
  209. package/dist/runtime/spots/spot-activation-state.js +1 -0
  210. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
  211. package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
  212. package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
  213. package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
  214. package/dist/runtime/spots/spot-actor-membership.js +3 -3
  215. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
  216. package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
  217. package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
  218. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
  219. package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
  220. package/dist/runtime/spots/spot-entry-activation.js +7 -12
  221. package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
  222. package/dist/runtime/spots/spot-handler-registry.js +31 -15
  223. package/dist/runtime/spots/spot-manager-public.js +3 -2
  224. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
  225. package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
  226. package/dist/runtime/spots/spot-outbound.d.ts +8 -2
  227. package/dist/runtime/spots/spot-outbound.js +5 -5
  228. package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
  229. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
  230. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
  231. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
  232. package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
  233. package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
  234. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
  235. package/dist/runtime/spots/spot-timer.d.ts +1 -1
  236. package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
  237. package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
  238. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
  239. package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
  240. package/dist/runtime/streams/bound-session-service.js +6 -7
  241. package/dist/runtime/streams/index.d.ts +3 -3
  242. package/dist/runtime/streams/index.js +22 -2
  243. package/dist/runtime/streams/managed-stream.js +2 -1
  244. package/dist/runtime/streams/session-calls.d.ts +1 -1
  245. package/dist/runtime/streams/session-calls.js +3 -9
  246. package/dist/runtime/streams/session-context.d.ts +2 -2
  247. package/dist/runtime/streams/session-context.js +2 -2
  248. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
  249. package/dist/runtime/streams/stream-session-runtime.js +64 -33
  250. package/package.json +3 -3
  251. package/src/contracts/Actors/ZLinkActor.ts +6 -0
  252. package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
  253. package/src/contracts/Actors/index.ts +1 -0
  254. package/src/contracts/Common/CoreTypes.ts +1 -0
  255. package/src/contracts/Common/HandlerMessageType.ts +50 -0
  256. package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
  257. package/src/contracts/Common/ZLinkMessage.ts +11 -7
  258. package/src/contracts/Common/encoded-payload-storage.ts +4 -16
  259. package/src/contracts/Common/index.ts +1 -1
  260. package/src/contracts/Common/payload-slab.ts +29 -0
  261. package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
  262. package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
  263. package/src/contracts/Handlers/Contexts.ts +1 -0
  264. package/src/contracts/Locations/Authority.ts +7 -1
  265. package/src/internal.ts +17 -0
  266. package/src/nest-integration.ts +1 -0
  267. package/src/runtime/actors/actor-client.ts +257 -163
  268. package/src/runtime/actors/actor-context.ts +26 -14
  269. package/src/runtime/actors/actor-execution-context.ts +2 -2
  270. package/src/runtime/actors/actor-handoff.ts +86 -51
  271. package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
  272. package/src/runtime/actors/actor-local-native-join.ts +38 -17
  273. package/src/runtime/actors/actor-mailbox.ts +1 -1
  274. package/src/runtime/actors/actor-remote-joiner.ts +8 -4
  275. package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
  276. package/src/runtime/actors/actor-routed-json-request.ts +3 -0
  277. package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
  278. package/src/runtime/actors/actor-runtime-state.ts +1 -1
  279. package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
  280. package/src/runtime/admission.ts +42 -15
  281. package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
  282. package/src/runtime/backend/contracts/index.ts +77 -10
  283. package/src/runtime/backend/mesh-completion-table.ts +106 -15
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
  285. package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
  286. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
  287. package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
  288. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
  289. package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
  290. package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
  291. package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
  292. package/src/runtime/backend/raw-binding-port.ts +13 -5
  293. package/src/runtime/channels/channel-clients.ts +26 -11
  294. package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
  295. package/src/runtime/channels/channel-dispatch-services.ts +7 -12
  296. package/src/runtime/channels/channel-dispatchers.ts +93 -39
  297. package/src/runtime/channels/channel-envelope.ts +680 -144
  298. package/src/runtime/channels/channel-multipart.ts +17 -13
  299. package/src/runtime/channels/channel-outbound-operations.ts +204 -178
  300. package/src/runtime/channels/channel-receive-loops.ts +160 -107
  301. package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
  302. package/src/runtime/channels/channel-runtime-manager.ts +74 -27
  303. package/src/runtime/channels/channel-socket-registry.ts +20 -5
  304. package/src/runtime/channels/channel-transports.ts +414 -287
  305. package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
  306. package/src/runtime/channels/local-spot-route-transport.ts +27 -29
  307. package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
  308. package/src/runtime/channels/source-spot-router.ts +75 -38
  309. package/src/runtime/channels/spot-node-route-transport.ts +67 -37
  310. package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
  311. package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
  312. package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
  313. package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
  314. package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
  315. package/src/runtime/diagnostics/message-flow-record.ts +295 -0
  316. package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
  317. package/src/runtime/diagnostics/message-flow.ts +49 -362
  318. package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
  319. package/src/runtime/execution/index.ts +6 -0
  320. package/src/runtime/execution/serial-execution-queue.ts +94 -96
  321. package/src/runtime/foundation/durable-service-request.ts +212 -89
  322. package/src/runtime/foundation/operation-registry.ts +287 -38
  323. package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
  324. package/src/runtime/foundation/request-runtime.ts +227 -0
  325. package/src/runtime/foundation/service-discovery-registry.ts +7 -0
  326. package/src/runtime/foundation/service-liveness-registry.ts +1 -1
  327. package/src/runtime/foundation/service-mailbox.ts +7 -2
  328. package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
  329. package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
  330. package/src/runtime/foundation/service-stateful-registry.ts +52 -19
  331. package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
  332. package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
  333. package/src/runtime/foundation/service-topology-registry.ts +21 -3
  334. package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
  335. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
  336. package/src/runtime/host/actor-packet-relay.ts +160 -156
  337. package/src/runtime/host/actor-placement-coordinator.ts +1 -1
  338. package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
  339. package/src/runtime/host/actor-transfer-runtime.ts +3 -3
  340. package/src/runtime/host/application-job-queue.ts +56 -27
  341. package/src/runtime/host/bound-session-relay.ts +0 -1
  342. package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
  343. package/src/runtime/host/entry-actor-runtime.ts +14 -6
  344. package/src/runtime/host/index.ts +388 -113
  345. package/src/runtime/host/location-runtime-owner.ts +3 -3
  346. package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
  347. package/src/runtime/host/spot-address-transport.ts +110 -95
  348. package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
  349. package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
  350. package/src/runtime/internal-observation.ts +2 -0
  351. package/src/runtime/locations/actor-location-claims.ts +42 -16
  352. package/src/runtime/locations/auto-connect-loop.ts +24 -16
  353. package/src/runtime/locations/auto-connect-planner.ts +2 -5
  354. package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
  355. package/src/runtime/locations/in-memory-authority-store.ts +27 -7
  356. package/src/runtime/locations/in-memory-location-store.ts +1 -74
  357. package/src/runtime/locations/lifecycle.ts +4 -2
  358. package/src/runtime/locations/location-store-repository.ts +228 -308
  359. package/src/runtime/locations/resolvers.ts +20 -8
  360. package/src/runtime/locations/runtime.ts +16 -28
  361. package/src/runtime/messaging/creation-payload-codec.ts +12 -10
  362. package/src/runtime/messaging/framework-json-v1.ts +10 -1
  363. package/src/runtime/messaging/payload-codec.ts +50 -75
  364. package/src/runtime/messaging/request-deadline.ts +47 -39
  365. package/src/runtime/messaging/request-result.ts +88 -17
  366. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  367. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  368. package/src/runtime/spots/index.ts +57 -10
  369. package/src/runtime/spots/spot-activation-registry.ts +12 -8
  370. package/src/runtime/spots/spot-activation-state.ts +2 -0
  371. package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
  372. package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
  373. package/src/runtime/spots/spot-actor-membership.ts +8 -5
  374. package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
  375. package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
  376. package/src/runtime/spots/spot-entry-activation.ts +25 -35
  377. package/src/runtime/spots/spot-handler-registry.ts +72 -15
  378. package/src/runtime/spots/spot-manager-public.ts +4 -2
  379. package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
  380. package/src/runtime/spots/spot-outbound.ts +26 -10
  381. package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
  382. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
  383. package/src/runtime/spots/spot-runtime-ports.ts +5 -2
  384. package/src/runtime/spots/spot-serial-executor.ts +1 -1
  385. package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
  386. package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
  387. package/src/runtime/spots/spot-timer.ts +1 -1
  388. package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
  389. package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
  390. package/src/runtime/streams/bound-session-service.ts +10 -7
  391. package/src/runtime/streams/index.ts +30 -4
  392. package/src/runtime/streams/managed-stream.ts +2 -1
  393. package/src/runtime/streams/session-calls.ts +9 -14
  394. package/src/runtime/streams/session-context.ts +6 -11
  395. package/src/runtime/streams/stream-session-runtime.ts +79 -40
  396. package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
  397. package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
  398. package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
@@ -1,3 +1,4 @@
1
+ import type { ZLinkHandlerMessageType } from '../../contracts/Common/HandlerMessageType';
1
2
  import type { ZLinkMeshDispatchAdmission } from '../admission';
2
3
  import type {
3
4
  RoutingId,
@@ -42,12 +43,14 @@ import { codecsForFrameworkPacket } from './channel-framework-packets';
42
43
  import {
43
44
  ZLinkChannelDispatchPipeline,
44
45
  type ZLinkChannelDispatchFields,
46
+ type ZLinkOneWayDispatch,
45
47
  type ZLinkRequestDispatch
46
48
  } from './channel-dispatch-pipeline';
47
49
 
48
50
  export interface ZLinkChannelRequestDispatcherOptions {
49
51
  readonly meshName?: string;
50
52
  readonly channelName: string;
53
+ readonly receivedAtClock?: () => Date;
51
54
  /**
52
55
  * Mesh channels use the routed message context so a handler can associate
53
56
  * a report with the node that sent it.
@@ -55,8 +58,14 @@ export interface ZLinkChannelRequestDispatcherOptions {
55
58
  readonly routeMesh?: boolean;
56
59
  readonly codecs?: ZLinkChannelEnvelopeCodecRegistry;
57
60
  readonly dispatchErrors: ZLinkDispatchErrorReporter;
58
- readonly handlers: ReadonlyMap<string, ZLinkChannelRequestHandler>;
59
- readonly sendHandlers?: ReadonlyMap<string, ZLinkChannelSendHandler>;
61
+ readonly handlers: ReadonlyMap<
62
+ string,
63
+ Pick<ZLinkRequestDispatch<ZLinkMessageContext>, 'handler' | 'messageType'>
64
+ >;
65
+ readonly sendHandlers?: ReadonlyMap<
66
+ string,
67
+ Pick<ZLinkOneWayDispatch<ZLinkMessageContext>, 'handler' | 'messageType'>
68
+ >;
60
69
  readonly filters?: readonly ZLinkHandlerFilter[];
61
70
  readonly unhandled?: ZLinkUnhandledDispatchOptions;
62
71
  }
@@ -72,6 +81,7 @@ export interface ZLinkChannelSendHandler {
72
81
  }
73
82
 
74
83
  export interface ZLinkRouteHandlerRegistration {
84
+ readonly messageType?: ZLinkHandlerMessageType;
75
85
  readonly kind: 'send' | 'request';
76
86
  readonly packetName: string;
77
87
  readonly handler: ZLinkRouteRuntimeSendHandler | ZLinkRouteRuntimeRequestHandler;
@@ -115,7 +125,8 @@ export class ZLinkChannelRequestDispatcher {
115
125
  reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
116
126
  },
117
127
  signal?: AbortSignal,
118
- decodedHeader?: ZLinkChannelEnvelopeHeader
128
+ decodedHeader?: ZLinkChannelEnvelopeHeader,
129
+ receivedAt: Date = this.options.receivedAtClock?.() ?? new Date()
119
130
  ): Promise<boolean | void> {
120
131
  if (received.spotId !== null && received.spotId !== undefined) {
121
132
  if (received.send === undefined) {
@@ -176,13 +187,15 @@ export class ZLinkChannelRequestDispatcher {
176
187
  contentType: envelope.header.contentType,
177
188
  packetName,
178
189
  metadata: zlinkMessageMetadata(envelope.header.metadata),
179
- correlationId
190
+ correlationId,
191
+ receivedAt
180
192
  };
181
193
  await this.pipeline.dispatchOneWay({
182
194
  fields,
183
195
  envelope,
184
196
  codecs: this.options.codecs,
185
- handler,
197
+ handler: handler?.handler,
198
+ messageType: handler?.messageType,
186
199
  context,
187
200
  signal
188
201
  });
@@ -211,13 +224,15 @@ export class ZLinkChannelRequestDispatcher {
211
224
  contentType: envelope.header.contentType,
212
225
  packetName,
213
226
  metadata: zlinkMessageMetadata(envelope.header.metadata),
214
- correlationId
227
+ correlationId,
228
+ receivedAt
215
229
  };
216
230
  await this.pipeline.dispatchRequest({
217
231
  fields: requestFields,
218
232
  envelope,
219
233
  codecs: this.options.codecs,
220
- handler,
234
+ handler: handler?.handler,
235
+ messageType: handler?.messageType,
221
236
  context,
222
237
  signal,
223
238
  missingHandlerMessage: `No channel request handler is registered for '${this.options.channelName}:${packetName}'.`,
@@ -276,6 +291,7 @@ export class ZLinkChannelRequestDispatcher {
276
291
  }
277
292
  const correlationId = envelope.header.correlationId ?? undefined;
278
293
  if (envelope.header.kind === ZLinkChannelMessageKind.Command) {
294
+ const handler = this.options.sendHandlers?.get(packetName);
279
295
  return this.pipeline.dispatchOneWay(
280
296
  {
281
297
  fields: {
@@ -287,8 +303,9 @@ export class ZLinkChannelRequestDispatcher {
287
303
  },
288
304
  envelope,
289
305
  codecs: this.options.codecs,
290
- handler: this.options.sendHandlers?.get(packetName),
291
- context: this.createMeshContext(envelope, record.sourceNodeRid),
306
+ handler: handler?.handler,
307
+ messageType: handler?.messageType,
308
+ context: this.createMeshContext(envelope, record.sourceNodeRid, record.receivedAt),
292
309
  signal
293
310
  },
294
311
  admit
@@ -310,7 +327,7 @@ export class ZLinkChannelRequestDispatcher {
310
327
  envelope,
311
328
  this.options.codecs,
312
329
  this.options.handlers.get(packetName),
313
- this.createMeshContext(envelope, record.sourceNodeRid),
330
+ this.createMeshContext(envelope, record.sourceNodeRid, record.receivedAt),
314
331
  signal,
315
332
  record,
316
333
  'channel',
@@ -333,7 +350,8 @@ export class ZLinkChannelRequestDispatcher {
333
350
 
334
351
  private createMeshContext(
335
352
  envelope: ReturnType<typeof decodeChannelEnvelope>,
336
- sourceNodeRid: unknown
353
+ sourceNodeRid: unknown,
354
+ receivedAt?: Date
337
355
  ): ZLinkMessageContext {
338
356
  const base = {
339
357
  meshName: this.options.meshName,
@@ -341,7 +359,8 @@ export class ZLinkChannelRequestDispatcher {
341
359
  contentType: envelope.header.contentType,
342
360
  packetName: envelope.packetName!,
343
361
  metadata: zlinkMessageMetadata(envelope.header.metadata),
344
- correlationId: envelope.header.correlationId ?? undefined
362
+ correlationId: envelope.header.correlationId ?? undefined,
363
+ receivedAt: receivedAt ?? this.options.receivedAtClock?.() ?? new Date()
345
364
  };
346
365
  if (this.options.routeMesh !== true) {
347
366
  return base;
@@ -366,7 +385,8 @@ class ZLinkMeshRequestDispatch<
366
385
  readonly fields: ZLinkChannelDispatchFields,
367
386
  readonly envelope: ReturnType<typeof decodeChannelEnvelope>,
368
387
  readonly codecs: ZLinkChannelEnvelopeCodecRegistry | undefined,
369
- readonly handler: ZLinkRequestDispatch<TContext>['handler'],
388
+ private readonly registration:
389
+ Pick<ZLinkRequestDispatch<TContext>, 'handler' | 'messageType'> | undefined,
370
390
  readonly context: TContext,
371
391
  readonly signal: AbortSignal | undefined,
372
392
  private readonly record: ReceiveRecord,
@@ -374,6 +394,14 @@ class ZLinkMeshRequestDispatch<
374
394
  private readonly channelName: string
375
395
  ) {}
376
396
 
397
+ get handler(): ZLinkRequestDispatch<TContext>['handler'] {
398
+ return this.registration?.handler;
399
+ }
400
+
401
+ get messageType(): ZLinkHandlerMessageType | undefined {
402
+ return this.registration?.messageType;
403
+ }
404
+
377
405
  get missingHandlerMessage(): string {
378
406
  return `No ${this.handlerSurface} request handler is registered for '${this.channelName}:${this.fields.packetName}'.`;
379
407
  }
@@ -402,9 +430,13 @@ function requireMeshReplyAccepted(result: number): void {
402
430
  export interface ZLinkChannelPublishDispatcherOptions {
403
431
  readonly meshName?: string;
404
432
  readonly channelName: string;
433
+ readonly receivedAtClock?: () => Date;
405
434
  readonly codecs?: ZLinkChannelEnvelopeCodecRegistry;
406
435
  readonly dispatchErrors: ZLinkDispatchErrorReporter;
407
- readonly handlers: ReadonlyMap<string, ZLinkRuntimePublishHandler>;
436
+ readonly handlers: ReadonlyMap<
437
+ string,
438
+ Pick<ZLinkOneWayDispatch<ZLinkPublishMessageContext>, 'handler' | 'messageType'>
439
+ >;
408
440
  readonly filters?: readonly ZLinkHandlerFilter[];
409
441
  readonly unhandled?: ZLinkUnhandledDispatchOptions;
410
442
  readonly metrics?: ZLinkRuntimeMetrics;
@@ -430,7 +462,8 @@ export class ZLinkChannelPublishDispatcher {
430
462
  async dispatch(
431
463
  topicMessage: { readonly topic: string; readonly parts: readonly Message[] },
432
464
  signal?: AbortSignal,
433
- decodedHeader?: ZLinkChannelEnvelopeHeader
465
+ decodedHeader?: ZLinkChannelEnvelopeHeader,
466
+ receivedAt: Date = this.options.receivedAtClock?.() ?? new Date()
434
467
  ): Promise<void> {
435
468
  if (topicMessage.parts.length === 0 || topicMessage.parts[0].data().length === 0) {
436
469
  return;
@@ -482,13 +515,15 @@ export class ZLinkChannelPublishDispatcher {
482
515
  topic: publishTopic,
483
516
  source: publishSource,
484
517
  metadata: zlinkMessageMetadata(envelope.header.metadata),
485
- correlationId: publishCorr
518
+ correlationId: publishCorr,
519
+ receivedAt
486
520
  };
487
521
  await this.pipeline.dispatchOneWay({
488
522
  fields,
489
523
  envelope,
490
524
  codecs: this.options.codecs,
491
- handler,
525
+ handler: handler?.handler,
526
+ messageType: handler?.messageType,
492
527
  context,
493
528
  signal
494
529
  });
@@ -497,6 +532,7 @@ export class ZLinkChannelPublishDispatcher {
497
532
 
498
533
  export interface ZLinkRoutePacketDispatcherOptions {
499
534
  readonly routerChannelId: string;
535
+ readonly receivedAtClock?: () => Date;
500
536
  readonly codecs?: ZLinkChannelEnvelopeCodecRegistry;
501
537
  readonly dispatchErrors: ZLinkDispatchErrorReporter;
502
538
  readonly handlers: readonly ZLinkRouteHandlerRegistration[];
@@ -510,28 +546,34 @@ export function collectRouteChannelHandlers(
510
546
  ): ZLinkRouteHandlerRegistration[] {
511
547
  return [
512
548
  ...(routeChannel.handlers ?? []),
513
- ...(routeChannel.sendHandlers ?? []).map((handler): ZLinkRouteHandlerRegistration => ({
549
+ ...(routeChannel.sendHandlers ?? []).map((registration): ZLinkRouteHandlerRegistration => ({
514
550
  kind: 'send',
515
- packetName: handler.packetName,
516
- handler: handler.handler
551
+ ...registration
517
552
  })),
518
- ...(routeChannel.requestHandlers ?? []).map((handler): ZLinkRouteHandlerRegistration => ({
553
+ ...(routeChannel.requestHandlers ?? []).map((registration): ZLinkRouteHandlerRegistration => ({
519
554
  kind: 'request',
520
- packetName: handler.packetName,
521
- handler: handler.handler
555
+ ...registration
522
556
  }))
523
557
  ];
524
558
  }
525
559
 
526
560
  export class ZLinkRoutePacketDispatcher {
527
- private readonly sendHandlers = new Map<string, ZLinkRouteRuntimeSendHandler>();
528
- private readonly requestHandlers = new Map<string, ZLinkRouteRuntimeRequestHandler>();
561
+ private readonly sendHandlers = new Map<
562
+ string,
563
+ Pick<ZLinkOneWayDispatch<ZLinkRouteMessageContext>, 'handler' | 'messageType'>
564
+ >();
565
+ private readonly requestHandlers = new Map<
566
+ string,
567
+ Pick<ZLinkRequestDispatch<ZLinkRouteMessageContext>, 'handler' | 'messageType'>
568
+ >();
529
569
  private readonly codecs?: ZLinkChannelEnvelopeCodecRegistry;
570
+ private readonly receivedAtClock: () => Date;
530
571
  private readonly pipeline: ZLinkChannelDispatchPipeline;
531
572
 
532
573
  constructor(options: ZLinkRoutePacketDispatcherOptions) {
533
574
  this.routerChannelId = options.routerChannelId;
534
575
  this.codecs = options.codecs;
576
+ this.receivedAtClock = options.receivedAtClock ?? (() => new Date());
535
577
  this.dispatchErrors = options.dispatchErrors;
536
578
  this.pipeline = new ZLinkChannelDispatchPipeline({
537
579
  dispatchErrors: options.dispatchErrors,
@@ -548,7 +590,7 @@ export class ZLinkRoutePacketDispatcher {
548
590
  `Duplicate routed handler '${options.routerChannelId}:${handler.kind}:${handler.packetName}'.`
549
591
  );
550
592
  }
551
- target.set(handler.packetName, handler.handler as never);
593
+ target.set(handler.packetName, handler as never);
552
594
  }
553
595
  }
554
596
 
@@ -605,7 +647,8 @@ export class ZLinkRoutePacketDispatcher {
605
647
  },
606
648
  signal?: AbortSignal,
607
649
  decodedHeader?: ZLinkChannelEnvelopeHeader,
608
- infrastructureChecked = false
650
+ infrastructureChecked = false,
651
+ receivedAt: Date = this.receivedAtClock()
609
652
  ): Promise<boolean | void> {
610
653
  const channelHeader =
611
654
  decodedHeader ?? tryDecodeChannelHeader(received.parts, this.flowEnabled());
@@ -667,8 +710,9 @@ export class ZLinkRoutePacketDispatcher {
667
710
  fields,
668
711
  envelope,
669
712
  codecs: codecsForFrameworkPacket(packetName, this.codecs),
670
- handler,
671
- context: this.createRouteContext(envelope, received.routingId),
713
+ handler: handler?.handler,
714
+ messageType: handler?.messageType,
715
+ context: this.createRouteContext(envelope, received.routingId, receivedAt),
672
716
  signal
673
717
  });
674
718
  return;
@@ -705,8 +749,9 @@ export class ZLinkRoutePacketDispatcher {
705
749
  fields: requestFields,
706
750
  envelope,
707
751
  codecs,
708
- handler,
709
- context: this.createRouteContext(envelope, received.routingId),
752
+ handler: handler?.handler,
753
+ messageType: handler?.messageType,
754
+ context: this.createRouteContext(envelope, received.routingId, receivedAt),
710
755
  signal,
711
756
  missingHandlerMessage: `No routed request handler is registered for '${this.routerChannelId}:${packetName}'.`,
712
757
  writeReply: (reply) =>
@@ -769,7 +814,8 @@ export class ZLinkRoutePacketDispatcher {
769
814
  sourceNodeRid,
770
815
  record.sourceNodeRid,
771
816
  signal,
772
- admit
817
+ admit,
818
+ record.receivedAt ?? this.receivedAtClock()
773
819
  );
774
820
  }
775
821
  if (envelope.header.kind !== ZLinkChannelMessageKind.Request) {
@@ -789,7 +835,7 @@ export class ZLinkRoutePacketDispatcher {
789
835
  envelope,
790
836
  codecsForFrameworkPacket(packetName, this.codecs),
791
837
  this.requestHandlers.get(packetName),
792
- this.createRouteContext(envelope, record.sourceNodeRid),
838
+ this.createRouteContext(envelope, record.sourceNodeRid, record.receivedAt),
793
839
  signal,
794
840
  record,
795
841
  'routed',
@@ -804,6 +850,7 @@ export class ZLinkRoutePacketDispatcher {
804
850
  sourceNodeRid: RoutingId,
805
851
  signal?: AbortSignal
806
852
  ): Promise<void> {
853
+ const receivedAt = this.receivedAtClock();
807
854
  if (parts.length === 0 || parts[0].data().length === 0) return;
808
855
  let envelope: ReturnType<typeof decodeChannelEnvelope>;
809
856
  try {
@@ -832,7 +879,9 @@ export class ZLinkRoutePacketDispatcher {
832
879
  packetName,
833
880
  String(sourceNodeRid),
834
881
  sourceNodeRid,
835
- signal
882
+ signal,
883
+ undefined,
884
+ receivedAt
836
885
  );
837
886
  }
838
887
 
@@ -842,8 +891,10 @@ export class ZLinkRoutePacketDispatcher {
842
891
  sourceRid: string,
843
892
  sourceNodeRid: unknown,
844
893
  signal?: AbortSignal,
845
- admit?: ZLinkMeshDispatchAdmission
894
+ admit?: ZLinkMeshDispatchAdmission,
895
+ receivedAt: Date = this.receivedAtClock()
846
896
  ): void | Promise<void> {
897
+ const handler = this.sendHandlers.get(packetName);
847
898
  return this.pipeline.dispatchOneWay(
848
899
  {
849
900
  fields: {
@@ -856,8 +907,9 @@ export class ZLinkRoutePacketDispatcher {
856
907
  },
857
908
  envelope,
858
909
  codecs: codecsForFrameworkPacket(packetName, this.codecs),
859
- handler: this.sendHandlers.get(packetName),
860
- context: this.createRouteContext(envelope, sourceNodeRid),
910
+ handler: handler?.handler,
911
+ messageType: handler?.messageType,
912
+ context: this.createRouteContext(envelope, sourceNodeRid, receivedAt),
861
913
  signal
862
914
  },
863
915
  admit
@@ -873,7 +925,8 @@ export class ZLinkRoutePacketDispatcher {
873
925
 
874
926
  private createRouteContext(
875
927
  envelope: ReturnType<typeof decodeChannelEnvelope>,
876
- sourceRid: unknown
928
+ sourceRid: unknown,
929
+ receivedAt: Date = this.receivedAtClock()
877
930
  ): ZLinkRouteMessageContext {
878
931
  const sourceNodeRid = String(sourceRid ?? '');
879
932
  return {
@@ -882,7 +935,8 @@ export class ZLinkRoutePacketDispatcher {
882
935
  contentType: envelope.header.contentType,
883
936
  sourceNodeRid,
884
937
  metadata: zlinkMessageMetadata(envelope.header.metadata),
885
- correlationId: envelope.header.correlationId ?? undefined
938
+ correlationId: envelope.header.correlationId ?? undefined,
939
+ receivedAt
886
940
  };
887
941
  }
888
942
  }