@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,6 @@
1
+ import type { RequestRuntime } from '../foundation/request-runtime';
2
+ import type { OperationObserver, PendingOperation } from '../foundation/operation-registry';
3
+ import { identityRequestReply } from '../messaging/request-result';
1
4
  import type { Message } from '../../contracts/Common/Message';
2
5
  import type { RoutingId } from '../../contracts';
3
6
  import type { ZLinkFrameworkRegistration } from '../configuration';
@@ -42,6 +45,7 @@ export interface ZLinkLocalSpotRouteDispatcher {
42
45
  context: {
43
46
  readonly channelName: string;
44
47
  readonly signal?: AbortSignal;
48
+ readonly requestOperation?: PendingOperation<unknown>;
45
49
  readonly onAdmitted?: () => void;
46
50
  readonly metadata?: ReadonlyMap<string, string>;
47
51
  }
@@ -49,6 +53,7 @@ export interface ZLinkLocalSpotRouteDispatcher {
49
53
  }
50
54
 
51
55
  export interface ZLinkSpotRouteDispatchStrategyOptions {
56
+ readonly requests: RequestRuntime;
52
57
  readonly registration: ZLinkFrameworkRegistration;
53
58
  readonly sockets: ZLinkChannelSocketRegistry;
54
59
  readonly codecs: ZLinkChannelEnvelopeCodecRegistry;
@@ -66,17 +71,29 @@ export class ZLinkSpotRouteDispatchStrategy {
66
71
  private readonly bridgeTransport: ZLinkSpotRouteBridgeTransport;
67
72
 
68
73
  constructor(private readonly options: ZLinkSpotRouteDispatchStrategyOptions) {
69
- this.sourceSpotRouter = new ZLinkSourceSpotRouter(options.registration.requestTimeoutMs);
74
+ this.sourceSpotRouter = new ZLinkSourceSpotRouter(
75
+ options.registration.requestTimeoutMs,
76
+ options.requests
77
+ );
70
78
  this.targets = new ZLinkSpotRouteTargetResolver(options.registration);
71
- this.spotNodeTransport = new ZLinkSpotNodeRouteTransport(options.registration, this.targets);
72
- this.routerSocketTransport = new ZLinkRouterSocketSpotRouteTransport(options.sockets);
79
+ this.spotNodeTransport = new ZLinkSpotNodeRouteTransport(
80
+ options.registration,
81
+ this.targets,
82
+ options.requests
83
+ );
84
+ this.routerSocketTransport = new ZLinkRouterSocketSpotRouteTransport(
85
+ options.sockets,
86
+ options.requests
87
+ );
73
88
  this.localTransport = new ZLinkLocalSpotRouteTransport(
74
89
  options.localSpotRouteDispatcher,
75
- options.registration.requestTimeoutMs
90
+ options.registration.requestTimeoutMs,
91
+ options.requests
76
92
  );
77
93
  this.bridgeTransport = new ZLinkSpotRouteBridgeTransport(
78
94
  options.spotRouteBridges,
79
- options.registration.requestTimeoutMs
95
+ options.registration.requestTimeoutMs,
96
+ options.requests
80
97
  );
81
98
  }
82
99
 
@@ -165,29 +182,60 @@ export class ZLinkSpotRouteDispatchStrategy {
165
182
  timeoutMs: number | undefined,
166
183
  signal?: AbortSignal,
167
184
  metadata?: ReadonlyMap<string, string>,
168
- onAdmitted?: () => void
185
+ onAdmitted?: () => void,
186
+ requestOperation?: PendingOperation<unknown>,
187
+ destination?: OperationObserver<unknown, unknown>
169
188
  ): Promise<TReply> {
170
- return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
171
- this.routeRequestToSpotScoped<TReply>(
172
- spotRouteTarget,
173
- packetName,
174
- request,
175
- timeoutMs,
176
- signal,
177
- metadata,
178
- onAdmitted
179
- )
180
- );
189
+ return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () => {
190
+ if (requestOperation !== undefined) {
191
+ return this.options.requests.run<TReply>(
192
+ requestOperation,
193
+ (receiver) => {
194
+ this.routeRequestToSpotScoped<TReply>(
195
+ spotRouteTarget,
196
+ packetName,
197
+ request,
198
+ timeoutMs,
199
+ signal,
200
+ metadata,
201
+ onAdmitted,
202
+ requestOperation,
203
+ receiver
204
+ );
205
+ },
206
+ (value) => value as TReply,
207
+ identityRequestReply,
208
+ destination
209
+ );
210
+ }
211
+ try {
212
+ return this.routeRequestToSpotScoped<TReply>(
213
+ spotRouteTarget,
214
+ packetName,
215
+ request,
216
+ timeoutMs,
217
+ signal,
218
+ metadata,
219
+ onAdmitted,
220
+ requestOperation,
221
+ destination
222
+ );
223
+ } catch (error) {
224
+ return Promise.reject(error);
225
+ }
226
+ });
181
227
  }
182
228
 
183
- private async routeRequestToSpotScoped<TReply>(
229
+ private routeRequestToSpotScoped<TReply>(
184
230
  spotRouteTarget: ZLinkSpotRouteTarget,
185
231
  packetName: string | undefined,
186
232
  request: unknown,
187
233
  timeoutMs: number | undefined,
188
234
  signal?: AbortSignal,
189
235
  metadata?: ReadonlyMap<string, string>,
190
- onAdmitted?: () => void
236
+ onAdmitted?: () => void,
237
+ requestOperation?: PendingOperation<unknown>,
238
+ receiver?: OperationObserver<unknown, unknown>
191
239
  ): Promise<TReply> {
192
240
  throwIfAborted(signal);
193
241
  const localSpotRouteNode = this.targets.localRouteNode(spotRouteTarget);
@@ -199,7 +247,9 @@ export class ZLinkSpotRouteDispatchStrategy {
199
247
  request,
200
248
  timeoutMs,
201
249
  signal,
202
- onAdmitted
250
+ onAdmitted,
251
+ requestOperation,
252
+ receiver
203
253
  );
204
254
  }
205
255
  const codecs = codecsForFrameworkPacket(packetName, this.options.codecs);
@@ -222,7 +272,9 @@ export class ZLinkSpotRouteDispatchStrategy {
222
272
  codecs,
223
273
  timeoutMs,
224
274
  signal,
225
- onAdmitted
275
+ onAdmitted,
276
+ requestOperation,
277
+ receiver
226
278
  );
227
279
  if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
228
280
  }
@@ -233,7 +285,9 @@ export class ZLinkSpotRouteDispatchStrategy {
233
285
  codecs,
234
286
  timeoutMs,
235
287
  signal,
236
- onAdmitted
288
+ onAdmitted,
289
+ requestOperation,
290
+ receiver
237
291
  );
238
292
  }
239
293
  if (this.targets.hasBoundRouteRouter(spotRouteTarget.routerChannelId)) {
@@ -244,7 +298,9 @@ export class ZLinkSpotRouteDispatchStrategy {
244
298
  ZLINK_SEND_DONT_WAIT,
245
299
  timeoutMs,
246
300
  signal,
247
- onAdmitted
301
+ onAdmitted,
302
+ requestOperation,
303
+ receiver
248
304
  );
249
305
  }
250
306
  const spotNodeRequest = this.spotNodeTransport.request<TReply>(
@@ -253,7 +309,9 @@ export class ZLinkSpotRouteDispatchStrategy {
253
309
  codecs,
254
310
  timeoutMs,
255
311
  signal,
256
- onAdmitted
312
+ onAdmitted,
313
+ requestOperation,
314
+ receiver
257
315
  );
258
316
  if (spotNodeRequest !== undefined) {
259
317
  return spotNodeRequest;
@@ -265,7 +323,9 @@ export class ZLinkSpotRouteDispatchStrategy {
265
323
  0,
266
324
  timeoutMs,
267
325
  signal,
268
- onAdmitted
326
+ onAdmitted,
327
+ requestOperation,
328
+ receiver
269
329
  );
270
330
  }
271
331
 
@@ -276,7 +336,9 @@ export class ZLinkSpotRouteDispatchStrategy {
276
336
  request: unknown,
277
337
  timeoutMs: number | undefined,
278
338
  signal?: AbortSignal,
279
- onAdmitted?: () => void
339
+ onAdmitted?: () => void,
340
+ requestOperation?: PendingOperation<unknown>,
341
+ destination?: OperationObserver<unknown, unknown>
280
342
  ): Promise<TReply> {
281
343
  return this.sourceSpotRouter.request<TReply>(
282
344
  sourceSpot,
@@ -285,7 +347,9 @@ export class ZLinkSpotRouteDispatchStrategy {
285
347
  request,
286
348
  timeoutMs,
287
349
  signal,
288
- onAdmitted
350
+ onAdmitted,
351
+ requestOperation,
352
+ destination
289
353
  );
290
354
  }
291
355
 
@@ -305,7 +369,8 @@ export class ZLinkSpotRouteDispatchStrategy {
305
369
  request: Message,
306
370
  timeoutMs: number | undefined,
307
371
  signal?: AbortSignal,
308
- onAdmitted?: () => void
372
+ onAdmitted?: () => void,
373
+ requestOperation?: PendingOperation<unknown>
309
374
  ): Promise<readonly Message[]> {
310
375
  return this.sourceSpotRouter.requestRaw(
311
376
  sourceSpot,
@@ -313,7 +378,8 @@ export class ZLinkSpotRouteDispatchStrategy {
313
378
  request,
314
379
  timeoutMs,
315
380
  signal,
316
- onAdmitted
381
+ onAdmitted,
382
+ requestOperation
317
383
  );
318
384
  }
319
385
 
@@ -322,7 +388,8 @@ export class ZLinkSpotRouteDispatchStrategy {
322
388
  request: Message,
323
389
  timeoutMs: number | undefined,
324
390
  signal?: AbortSignal,
325
- onAdmitted?: () => void
391
+ onAdmitted?: () => void,
392
+ requestOperation?: PendingOperation<unknown>
326
393
  ): Promise<readonly Message[]> {
327
394
  throwIfAborted(signal);
328
395
  if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)) {
@@ -331,7 +398,8 @@ export class ZLinkSpotRouteDispatchStrategy {
331
398
  request,
332
399
  timeoutMs,
333
400
  signal,
334
- onAdmitted
401
+ onAdmitted,
402
+ requestOperation
335
403
  );
336
404
  if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
337
405
  }
@@ -341,7 +409,8 @@ export class ZLinkSpotRouteDispatchStrategy {
341
409
  request,
342
410
  timeoutMs,
343
411
  signal,
344
- onAdmitted
412
+ onAdmitted,
413
+ requestOperation
345
414
  );
346
415
  }
347
416
  const spotNodeRequest = this.spotNodeTransport.requestRaw(
@@ -349,7 +418,8 @@ export class ZLinkSpotRouteDispatchStrategy {
349
418
  request,
350
419
  timeoutMs,
351
420
  signal,
352
- onAdmitted
421
+ onAdmitted,
422
+ requestOperation
353
423
  );
354
424
  if (spotNodeRequest !== undefined) {
355
425
  return spotNodeRequest;
@@ -360,7 +430,8 @@ export class ZLinkSpotRouteDispatchStrategy {
360
430
  request,
361
431
  timeoutMs,
362
432
  signal,
363
- onAdmitted
433
+ onAdmitted,
434
+ requestOperation
364
435
  );
365
436
  }
366
437
  }
@@ -14,6 +14,16 @@ export function dispatchReasonFromError(error: unknown): ZLinkDispatchErrorReaso
14
14
  if (origin === ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed)
15
15
  return ZLinkDispatchErrorReason.PayloadDecodeFailed;
16
16
  if (
17
+ origin === ZLinkFrameworkInternalErrorKind.HandlerNotFound ||
18
+ origin === ZLinkFrameworkInternalErrorKind.RouteHandlerNotFound ||
19
+ origin === ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
20
+ )
21
+ return ZLinkDispatchErrorReason.HandlerMissing;
22
+ if (
23
+ origin === ZLinkFrameworkInternalErrorKind.ActorRouteNotFound ||
24
+ origin === ZLinkFrameworkInternalErrorKind.SpotRouteNotFound ||
25
+ origin === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound ||
26
+ origin === ZLinkFrameworkInternalErrorKind.MeshNotFound ||
17
27
  origin === ZLinkFrameworkInternalErrorKind.SpotGenerationStale ||
18
28
  origin === ZLinkFrameworkInternalErrorKind.ActorGenerationStale ||
19
29
  origin === ZLinkFrameworkInternalErrorKind.SpotMoving ||
@@ -22,8 +32,6 @@ export function dispatchReasonFromError(error: unknown): ZLinkDispatchErrorReaso
22
32
  )
23
33
  return ZLinkDispatchErrorReason.StaleTarget;
24
34
  switch (error.kind) {
25
- case ZLinkFrameworkErrorKind.NotFound:
26
- return ZLinkDispatchErrorReason.HandlerMissing;
27
35
  case ZLinkFrameworkErrorKind.ProtocolError:
28
36
  return ZLinkDispatchErrorReason.InvalidFrame;
29
37
  case ZLinkFrameworkErrorKind.ShuttingDown:
@@ -0,0 +1,6 @@
1
+ import { logs } from '@opentelemetry/api-logs';
2
+
3
+ // Loaded before the application's standard preloads in this worker only. The
4
+ // public API returns this proxy until a logger provider is registered, then the
5
+ // registered provider itself. No provider is changed or called to probe it.
6
+ export const initialLoggerProvider = logs.getLoggerProvider();
@@ -0,0 +1,171 @@
1
+ import { Worker } from 'node:worker_threads';
2
+
3
+ // The process owner counts records until the worker takes them, including batches
4
+ // already posted to its port. Only the worker decrements in-transit records.
5
+ export const MESSAGE_FLOW_PENDING_LIMIT = 8192;
6
+ export const TELEMETRY_WORKER_AVAILABLE = 'zlink.telemetry.available';
7
+ export enum TelemetryState {
8
+ Pending,
9
+ Enabled,
10
+ Length
11
+ }
12
+ export enum TelemetryCounter {
13
+ Overflow,
14
+ LoggerFailures,
15
+ TraceFailures,
16
+ FallbackFailures,
17
+ WorkerFailures,
18
+ Length
19
+ }
20
+ export const TELEMETRY_STATE_BYTES =
21
+ Math.ceil(
22
+ (TelemetryState.Length * Int32Array.BYTES_PER_ELEMENT) / BigUint64Array.BYTES_PER_ELEMENT
23
+ ) * BigUint64Array.BYTES_PER_ELEMENT;
24
+
25
+ export interface ZLinkTelemetryLease {
26
+ readonly retired: Int32Array;
27
+ }
28
+
29
+ export interface ZLinkTelemetryDelivery<T = unknown> {
30
+ readonly lease: SharedArrayBuffer;
31
+ readonly record: T;
32
+ }
33
+
34
+ export function openTelemetryLease(): ZLinkTelemetryLease {
35
+ return { retired: new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)) };
36
+ }
37
+
38
+ export function renewTelemetryLease(lease: ZLinkTelemetryLease | undefined): ZLinkTelemetryLease {
39
+ return lease === undefined || Atomics.load(lease.retired, 0) !== 0 ? openTelemetryLease() : lease;
40
+ }
41
+
42
+ let processOwner: ZLinkMessageFlowDelivery | undefined;
43
+
44
+ export function messageFlowDelivery(): ZLinkMessageFlowDelivery {
45
+ return (processOwner ??= new ZLinkMessageFlowDelivery());
46
+ }
47
+
48
+ export function telemetryProviderFailureCount(): number {
49
+ return processOwner === undefined
50
+ ? 0
51
+ : Number(
52
+ Atomics.load(processOwner.counters, TelemetryCounter.LoggerFailures) +
53
+ Atomics.load(processOwner.counters, TelemetryCounter.TraceFailures)
54
+ );
55
+ }
56
+
57
+ export function retireTelemetryLease(lease: ZLinkTelemetryLease): void {
58
+ Atomics.store(lease.retired, 0, 1);
59
+ processOwner?.retire(lease);
60
+ }
61
+
62
+ export class ZLinkMessageFlowDelivery {
63
+ private readonly sharedState = new SharedArrayBuffer(
64
+ TELEMETRY_STATE_BYTES + TelemetryCounter.Length * BigUint64Array.BYTES_PER_ELEMENT
65
+ );
66
+ readonly state = new Int32Array(this.sharedState, 0, TelemetryState.Length);
67
+ readonly counters = new BigUint64Array(
68
+ this.sharedState,
69
+ TELEMETRY_STATE_BYTES,
70
+ TelemetryCounter.Length
71
+ );
72
+ readonly ready: Promise<void>;
73
+ private readonly worker?: Worker;
74
+ private failure?: Error;
75
+ private pending: ZLinkTelemetryDelivery[] = [];
76
+ private executing = false;
77
+ private workerReady = false;
78
+ private scheduled?: NodeJS.Immediate;
79
+
80
+ constructor() {
81
+ let published!: () => void;
82
+ // A failed bootstrap leaves this incomplete. Runtime processing never waits
83
+ // for it, and no rejected promise can escape into the host process.
84
+ this.ready = new Promise((resolve) => {
85
+ published = resolve;
86
+ });
87
+ // NODE_OPTIONS preloads precede execArgv preloads. Keep both application
88
+ // lists intact and capture the public default provider before either list.
89
+ try {
90
+ const bootstrap = require.resolve('./message-flow-bootstrap').replace(/\\/g, '/');
91
+ this.worker = new Worker(require.resolve('./message-flow-worker'), {
92
+ workerData: this.state.buffer,
93
+ env: {
94
+ ...process.env,
95
+ NODE_OPTIONS: `--require "${bootstrap}" ${process.env.NODE_OPTIONS ?? ''}`
96
+ }
97
+ });
98
+ this.worker.once('error', (error) => this.workerFailed(error));
99
+ this.worker.once('exit', (code) => {
100
+ if (this.failure === undefined)
101
+ this.workerFailed(new Error(`Telemetry worker exited with code ${code}.`));
102
+ });
103
+ this.worker.on('message', (message: unknown) => {
104
+ if (message !== TELEMETRY_WORKER_AVAILABLE || this.failure !== undefined) return;
105
+ this.workerReady = true;
106
+ this.executing = false;
107
+ this.flush();
108
+ published();
109
+ });
110
+ this.worker.unref();
111
+ } catch (error) {
112
+ this.workerFailed(error instanceof Error ? error : new Error(String(error)));
113
+ }
114
+ }
115
+
116
+ private workerFailed(error: Error): void {
117
+ if (this.failure !== undefined) return;
118
+ this.failure = error;
119
+ Atomics.add(this.counters, TelemetryCounter.WorkerFailures, 1n);
120
+ Atomics.store(this.state, TelemetryState.Enabled, 0);
121
+ this.workerReady = false;
122
+ this.executing = false;
123
+ this.pending = [];
124
+ Atomics.store(this.state, TelemetryState.Pending, 0);
125
+ }
126
+
127
+ enabled(): boolean {
128
+ return Atomics.load(this.state, TelemetryState.Enabled) !== 0;
129
+ }
130
+
131
+ accepts(lease: ZLinkTelemetryLease): boolean {
132
+ return this.enabled() && Atomics.load(lease.retired, 0) === 0;
133
+ }
134
+
135
+ submit(lease: ZLinkTelemetryLease, record: unknown): void {
136
+ if (!this.accepts(lease)) return;
137
+ if (Atomics.load(this.state, TelemetryState.Pending) === MESSAGE_FLOW_PENDING_LIMIT) {
138
+ Atomics.add(this.counters, TelemetryCounter.Overflow, 1n);
139
+ return;
140
+ }
141
+ Atomics.add(this.state, TelemetryState.Pending, 1);
142
+ this.pending.push({ lease: lease.retired.buffer as SharedArrayBuffer, record });
143
+ if (this.workerReady && !this.executing && this.scheduled === undefined) {
144
+ this.scheduled = setImmediate(() => {
145
+ this.scheduled = undefined;
146
+ this.flush();
147
+ });
148
+ this.scheduled.unref();
149
+ }
150
+ }
151
+
152
+ retire(lease: ZLinkTelemetryLease): void {
153
+ const retained = this.pending.filter((item) => item.lease !== lease.retired.buffer);
154
+ Atomics.sub(this.state, TelemetryState.Pending, this.pending.length - retained.length);
155
+ this.pending = retained;
156
+ }
157
+
158
+ private flush(): void {
159
+ if (
160
+ this.worker === undefined ||
161
+ !this.workerReady ||
162
+ this.executing ||
163
+ this.pending.length === 0
164
+ )
165
+ return;
166
+ const batch = this.pending;
167
+ this.pending = [];
168
+ this.executing = true;
169
+ this.worker.postMessage(batch);
170
+ }
171
+ }