@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
@@ -19,8 +19,9 @@ import {
19
19
  } from './channel-receive-task-tracker';
20
20
  import { ApplicationJobQueue, type ApplicationJobQueuePermit } from '../host/application-job-queue';
21
21
  import {
22
- bindApplicationJobPermit,
23
- runWithApplicationJobPermit
22
+ enterApplicationJobPermitScope,
23
+ leaveApplicationJobPermitScope,
24
+ releaseApplicationJobPermitTurn
24
25
  } from '../application-jobs/application-job-queue-scope';
25
26
  import {
26
27
  ZLinkSerialExecutionQueue,
@@ -29,12 +30,45 @@ import {
29
30
 
30
31
  export function createChannelApplicationDispatchQueue(): ZLinkSerialExecutionQueue {
31
32
  return new ZLinkSerialExecutionQueue(async (record: ZLinkSerialWorkRecord<unknown>) => {
33
+ const permit = record.context as ApplicationJobQueuePermit;
34
+ const previousPermit = enterApplicationJobPermitScope(permit);
32
35
  try {
33
- record.resolve(await record.operation());
36
+ void Promise.resolve(record.operation()).then(
37
+ (value) => {
38
+ try {
39
+ record.resolve(value);
40
+ } finally {
41
+ try {
42
+ record.release();
43
+ } finally {
44
+ releaseApplicationJobPermitTurn(permit);
45
+ }
46
+ }
47
+ },
48
+ (error) => {
49
+ try {
50
+ record.reject(error);
51
+ } finally {
52
+ try {
53
+ record.release();
54
+ } finally {
55
+ releaseApplicationJobPermitTurn(permit);
56
+ }
57
+ }
58
+ }
59
+ );
34
60
  } catch (error) {
35
- record.reject(error);
61
+ try {
62
+ record.reject(error);
63
+ } finally {
64
+ try {
65
+ record.release();
66
+ } finally {
67
+ releaseApplicationJobPermitTurn(permit);
68
+ }
69
+ }
36
70
  } finally {
37
- record.release();
71
+ leaveApplicationJobPermitScope(previousPermit);
38
72
  }
39
73
  });
40
74
  }
@@ -71,7 +105,8 @@ interface ZLinkChannelRequestDispatchLoop {
71
105
  reply(routingId: unknown, replyToken: unknown): ZLinkMultipartReplyOperation;
72
106
  },
73
107
  signal?: AbortSignal,
74
- decodedHeader?: ZLinkChannelEnvelopeHeader
108
+ decodedHeader?: ZLinkChannelEnvelopeHeader,
109
+ receivedAt?: Date
75
110
  ): Promise<boolean | void>;
76
111
  }
77
112
 
@@ -79,7 +114,8 @@ interface ZLinkChannelPublishDispatchLoop {
79
114
  dispatch(
80
115
  topicMessage: { readonly topic: string; readonly parts: readonly Message[] },
81
116
  signal?: AbortSignal,
82
- decodedHeader?: ZLinkChannelEnvelopeHeader
117
+ decodedHeader?: ZLinkChannelEnvelopeHeader,
118
+ receivedAt?: Date
83
119
  ): Promise<void>;
84
120
  }
85
121
 
@@ -110,7 +146,8 @@ interface ZLinkRoutePacketDispatchLoop {
110
146
  },
111
147
  signal?: AbortSignal,
112
148
  decodedHeader?: ZLinkChannelEnvelopeHeader,
113
- infrastructureChecked?: boolean
149
+ infrastructureChecked?: boolean,
150
+ receivedAt?: Date
114
151
  ): Promise<boolean | void>;
115
152
  }
116
153
 
@@ -232,7 +269,8 @@ export class ZLinkChannelReceiveLoop {
232
269
  private readonly applicationJobQueue: ApplicationJobQueue,
233
270
  reportError?: ZLinkReceiveTaskErrorReporter,
234
271
  private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
235
- private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
272
+ private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue(),
273
+ private readonly receivedAtClock: () => Date = () => new Date()
236
274
  ) {
237
275
  this.inFlight = new ZLinkReceiveTaskTracker(reportError);
238
276
  this.receiveOwner = roundRobin?.register() ?? Symbol('channel-receive-owner');
@@ -258,90 +296,94 @@ export class ZLinkChannelReceiveLoop {
258
296
 
259
297
  private async runLoop(signal?: AbortSignal): Promise<void> {
260
298
  const batch = new ZLinkReceiveBatchBudget();
299
+ const rotation = this.applicationJobQueue.createReceiveRotation(
300
+ RECEIVE_BATCH_MESSAGE_LIMIT,
301
+ 'remote'
302
+ );
261
303
  const capacitySignal =
262
304
  signal === undefined
263
305
  ? this.capacityStop.signal
264
306
  : AbortSignal.any([signal, this.capacityStop.signal]);
265
- while (!this.isStopped() && signal?.aborted !== true) {
307
+ while (!this.isStopped() && !signalAborted(capacitySignal)) {
266
308
  if (!this.poller.wait(0)) {
267
309
  this.roundRobin?.setReady(this.receiveOwner, false);
268
- this.roundRobin?.release(this.receiveOwner);
269
- batch.reset();
270
310
  if (!(await this.poller.waitForReadable(capacitySignal))) break;
271
311
  continue;
272
312
  }
273
- const applicationJobPermit = await this.acquirePermit(capacitySignal);
274
- if (applicationJobPermit === undefined) break;
275
- // Readiness can become stale while admission waits. The nonblocking
276
- // recv below owns the empty-result check and returns the permit then.
277
- this.roundRobin?.setReady(this.receiveOwner, true);
278
- if (this.roundRobin?.tryAcquire(this.receiveOwner) === false) {
279
- applicationJobPermit.releaseAfterInternalProcessing();
280
- await waitReceiveLoopTurn();
281
- continue;
282
- }
283
- const releaseRawReceive =
284
- this.roundRobin === undefined
285
- ? this.rawReceiveReservations.tryAcquire()
286
- : this.roundRobin.tryAcquireRawReceiveReservation();
287
- if (releaseRawReceive === undefined) {
288
- applicationJobPermit.releaseAfterInternalProcessing();
289
- this.roundRobin?.release(this.receiveOwner);
290
- await waitReceiveLoopTurn();
291
- continue;
292
- }
293
- const received = this.router.recv(1);
294
- if (received == null) {
295
- this.poller.markDrained();
296
- applicationJobPermit.releaseAfterInternalProcessing();
297
- releaseRawReceive();
298
- this.roundRobin?.setReady(this.receiveOwner, false);
299
- this.roundRobin?.release(this.receiveOwner);
300
- batch.reset();
301
- if (!(await this.poller.waitForReadable(capacitySignal))) break;
302
- continue;
303
- }
304
- const receivedBytes = messageBytes(received.parts);
305
- let classification: ReturnType<ZLinkChannelReceiveLoop['classify']>;
306
313
  try {
307
- classification = this.classify(received);
308
- } catch (error) {
309
- applicationJobPermit.releaseAfterInternalProcessing();
310
- releaseRawReceive();
311
- received.close();
312
- this.inFlight.track(Promise.reject(error));
313
- continue;
314
- }
315
- if (classification.kind === 'consumed') {
316
- applicationJobPermit.releaseAfterInternalProcessing();
317
- releaseRawReceive();
318
- if (classification.closeReceived) received.close();
319
- if (batch.record(receivedBytes)) {
320
- this.roundRobin?.release(this.receiveOwner);
321
- await batch.yieldAndReset();
314
+ await rotation.acquire(capacitySignal);
315
+ this.roundRobin?.setReady(this.receiveOwner, true);
316
+ if (this.roundRobin?.tryAcquire(this.receiveOwner) !== false) {
317
+ batch.reset();
318
+ while (!this.isStopped() && !signalAborted(capacitySignal)) {
319
+ const applicationJobPermit = rotation.take();
320
+ if (applicationJobPermit === undefined) break;
321
+ const releaseRawReceive =
322
+ this.roundRobin === undefined
323
+ ? this.rawReceiveReservations.tryAcquire()
324
+ : this.roundRobin.tryAcquireRawReceiveReservation();
325
+ if (releaseRawReceive === undefined) {
326
+ applicationJobPermit.releaseAfterInternalProcessing();
327
+ break;
328
+ }
329
+ try {
330
+ // Readiness can become stale during admission; recv owns no_data.
331
+ const received = this.router.recv(1);
332
+ if (received == null) {
333
+ this.poller.markDrained();
334
+ this.roundRobin?.setReady(this.receiveOwner, false);
335
+ break;
336
+ }
337
+ const receivedAt = this.receivedAtClock();
338
+ const receivedBytes = messageBytes(received.parts);
339
+ let classification: ReturnType<ZLinkChannelReceiveLoop['classify']>;
340
+ try {
341
+ classification = this.classify(received);
342
+ } catch (error) {
343
+ received.close();
344
+ this.inFlight.track(Promise.reject(error));
345
+ if (batch.record(receivedBytes)) break;
346
+ continue;
347
+ }
348
+ if (classification.kind === 'consumed') {
349
+ applicationJobPermit.releaseAfterInternalProcessing();
350
+ if (classification.closeReceived) received.close();
351
+ } else if (this.isStopped() || signalAborted(capacitySignal)) {
352
+ received.close();
353
+ break;
354
+ } else {
355
+ applicationJobPermit.markApplicationQueued();
356
+ const task = this.applicationDispatchQueue.submitPreAdmitted(
357
+ () =>
358
+ this.dispatchAndClose(
359
+ received,
360
+ signal,
361
+ classification.decodedHeader,
362
+ true,
363
+ undefined,
364
+ receivedAt
365
+ ),
366
+ undefined,
367
+ applicationJobPermit
368
+ );
369
+ this.inFlight.track(task);
370
+ }
371
+ if (batch.record(receivedBytes)) break;
372
+ } finally {
373
+ releaseRawReceive();
374
+ // A queued record owns its lease until its dispatch turn ends.
375
+ // Reserved leases (no_data, control, failure, stop) return here.
376
+ applicationJobPermit.releaseUnqueued();
377
+ }
378
+ }
322
379
  }
323
- continue;
324
- }
325
- if (this.isStopped() || signalAborted(signal)) {
326
- applicationJobPermit.releaseAfterInternalProcessing();
327
- releaseRawReceive();
328
- received.close();
329
- break;
330
- }
331
- applicationJobPermit.markApplicationQueued();
332
- const task = runWithApplicationJobPermit(applicationJobPermit, () =>
333
- this.applicationDispatchQueue.submitPreAdmitted(
334
- bindApplicationJobPermit(() =>
335
- this.dispatchAndClose(received, signal, classification.decodedHeader, true)
336
- )
337
- )
338
- );
339
- releaseRawReceive();
340
- this.inFlight.track(task);
341
- if (batch.record(receivedBytes)) {
380
+ } catch (error) {
381
+ if (!this.isStopped() && !signalAborted(capacitySignal)) throw error;
382
+ } finally {
383
+ rotation.releaseUnused();
342
384
  this.roundRobin?.release(this.receiveOwner);
343
- await batch.yieldAndReset();
344
385
  }
386
+ await waitReceiveLoopTurn();
345
387
  }
346
388
  }
347
389
 
@@ -357,15 +399,6 @@ export class ZLinkChannelReceiveLoop {
357
399
  }
358
400
  }
359
401
 
360
- private async acquirePermit(signal: AbortSignal): Promise<ApplicationJobQueuePermit | undefined> {
361
- try {
362
- return await this.applicationJobQueue.acquire(signal, 'remote');
363
- } catch (error) {
364
- if (this.isStopped() || signal.aborted) return undefined;
365
- throw error;
366
- }
367
- }
368
-
369
402
  private async dispatchAndClose(
370
403
  received: {
371
404
  parts: readonly Message[];
@@ -378,7 +411,8 @@ export class ZLinkChannelReceiveLoop {
378
411
  signal?: AbortSignal,
379
412
  decodedHeader?: ZLinkChannelEnvelopeHeader,
380
413
  infrastructureChecked = false,
381
- releaseRawReceive?: () => void
414
+ releaseRawReceive?: () => void,
415
+ receivedAt: Date = this.receivedAtClock()
382
416
  ): Promise<void> {
383
417
  let closeReceived = true;
384
418
  try {
@@ -390,7 +424,13 @@ export class ZLinkChannelReceiveLoop {
390
424
  }
391
425
  decodedHeader = classification.decodedHeader;
392
426
  }
393
- const consumed = await this.dispatcher.dispatch(received, this.router, signal, decodedHeader);
427
+ const consumed = await this.dispatcher.dispatch(
428
+ received,
429
+ this.router,
430
+ signal,
431
+ decodedHeader,
432
+ receivedAt
433
+ );
394
434
  if (consumed === true) {
395
435
  closeReceived = false;
396
436
  }
@@ -456,7 +496,8 @@ export class ZLinkSubscriberReceiveLoop {
456
496
  ) => boolean | ZLinkSubscriberInfrastructureResult,
457
497
  private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
458
498
  reportError?: ZLinkReceiveTaskErrorReporter,
459
- private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
499
+ private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue(),
500
+ private readonly receivedAtClock: () => Date = () => new Date()
460
501
  ) {
461
502
  this.inFlight = new ZLinkReceiveTaskTracker(reportError);
462
503
  this.poller = adapter.createReadablePoller(subscriber);
@@ -527,6 +568,7 @@ export class ZLinkSubscriberReceiveLoop {
527
568
  if (!(await this.poller.waitForReadable(capacitySignal))) break;
528
569
  continue;
529
570
  }
571
+ const receivedAt = this.receivedAtClock();
530
572
  const receivedBytes = messageBytes(topicMessage.parts as readonly Message[]);
531
573
  let classification: ReturnType<ZLinkSubscriberReceiveLoop['classify']>;
532
574
  try {
@@ -555,12 +597,18 @@ export class ZLinkSubscriberReceiveLoop {
555
597
  break;
556
598
  }
557
599
  applicationJobPermit.markApplicationQueued();
558
- const task = runWithApplicationJobPermit(applicationJobPermit, () =>
559
- this.applicationDispatchQueue.submitPreAdmitted(
560
- bindApplicationJobPermit(() =>
561
- this.dispatchAndClose(topicMessage, signal, classification.decodedHeader, true)
562
- )
563
- )
600
+ const task = this.applicationDispatchQueue.submitPreAdmitted(
601
+ () =>
602
+ this.dispatchAndClose(
603
+ topicMessage,
604
+ signal,
605
+ classification.decodedHeader,
606
+ true,
607
+ undefined,
608
+ receivedAt
609
+ ),
610
+ undefined,
611
+ applicationJobPermit
564
612
  );
565
613
  releaseRawReceive();
566
614
  this.inFlight.track(task);
@@ -597,7 +645,8 @@ export class ZLinkSubscriberReceiveLoop {
597
645
  signal?: AbortSignal,
598
646
  decodedHeader?: ZLinkChannelEnvelopeHeader,
599
647
  infrastructureChecked = false,
600
- releaseRawReceive?: () => void
648
+ releaseRawReceive?: () => void,
649
+ receivedAt: Date = this.receivedAtClock()
601
650
  ): Promise<void> {
602
651
  try {
603
652
  if (!infrastructureChecked) {
@@ -605,7 +654,7 @@ export class ZLinkSubscriberReceiveLoop {
605
654
  if (classification.kind === 'consumed') return;
606
655
  decodedHeader = classification.decodedHeader;
607
656
  }
608
- await this.dispatcher.dispatch(topicMessage, signal, decodedHeader);
657
+ await this.dispatcher.dispatch(topicMessage, signal, decodedHeader, receivedAt);
609
658
  } finally {
610
659
  releaseRawReceive?.();
611
660
  closeMessages(topicMessage.parts as readonly Message[]);
@@ -654,7 +703,8 @@ export class ZLinkRouteReceiveLoop {
654
703
  private readonly applicationJobQueue: ApplicationJobQueue,
655
704
  private readonly roundRobin?: ZLinkReceiveRoundRobinCoordinator,
656
705
  reportError?: ZLinkReceiveTaskErrorReporter,
657
- private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue()
706
+ private readonly applicationDispatchQueue = createChannelApplicationDispatchQueue(),
707
+ private readonly receivedAtClock: () => Date = () => new Date()
658
708
  ) {
659
709
  this.inFlight = new ZLinkReceiveTaskTracker(reportError);
660
710
  this.receiveOwner = roundRobin?.register() ?? Symbol('route-receive-owner');
@@ -716,6 +766,7 @@ export class ZLinkRouteReceiveLoop {
716
766
  if (!(await this.poller.waitForReadable(capacitySignal))) break;
717
767
  continue;
718
768
  }
769
+ const receivedAt = this.receivedAtClock();
719
770
  const receivedBytes = messageBytes(received.parts);
720
771
  let infrastructure: boolean | Promise<void> | undefined;
721
772
  try {
@@ -767,10 +818,10 @@ export class ZLinkRouteReceiveLoop {
767
818
  break;
768
819
  }
769
820
  applicationJobPermit.markApplicationQueued();
770
- const task = runWithApplicationJobPermit(applicationJobPermit, () =>
771
- this.applicationDispatchQueue.submitPreAdmitted(
772
- bindApplicationJobPermit(() => this.dispatchAndClose(received, signal, true))
773
- )
821
+ const task = this.applicationDispatchQueue.submitPreAdmitted(
822
+ () => this.dispatchAndClose(received, signal, true, undefined, receivedAt),
823
+ undefined,
824
+ applicationJobPermit
774
825
  );
775
826
  releaseRawReceive();
776
827
  this.inFlight.track(task);
@@ -812,7 +863,8 @@ export class ZLinkRouteReceiveLoop {
812
863
  },
813
864
  signal?: AbortSignal,
814
865
  infrastructureChecked = false,
815
- releaseRawReceive?: () => void
866
+ releaseRawReceive?: () => void,
867
+ receivedAt: Date = this.receivedAtClock()
816
868
  ): Promise<void> {
817
869
  let closeReceived = true;
818
870
  try {
@@ -821,7 +873,8 @@ export class ZLinkRouteReceiveLoop {
821
873
  this.router,
822
874
  signal,
823
875
  tryDecodeChannelHeader(received.parts, this.dispatcher.flowEnabled?.() ?? true),
824
- infrastructureChecked
876
+ infrastructureChecked,
877
+ receivedAt
825
878
  );
826
879
  if (consumed === true) {
827
880
  closeReceived = false;