@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
@@ -0,0 +1,295 @@
1
+ import type { Attributes } from '@opentelemetry/api';
2
+ import type { ZLinkMessageFlowLogMode } from '../../contracts';
3
+ import {
4
+ ZLinkDispatchErrorSurface,
5
+ ZLinkDispatchMessageKind,
6
+ ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
7
+ type ZLinkRuntimeMessageFlowEvent,
8
+ type ZLinkRuntimeMessageFlowResult
9
+ } from '../../contracts/Dispatch/ZLinkDispatchOptions';
10
+ import { ERROR_MESSAGE_MAX_LENGTH } from './dispatch-error-details';
11
+ import { FLOW_ORIGIN_VALUES } from './flow-context';
12
+ export const TELEMETRY_INSTRUMENTATION_NAME = '@zlink-systems/framework';
13
+ export const MESSAGE_FLOW_EVENT_ID = 'zlink.message_flow';
14
+ export const DISPATCH_ERROR_EVENT_ID = 'zlink.dispatch_error';
15
+
16
+ export interface ZLinkTelemetryRecord {
17
+ readonly severity?: 'warning';
18
+ readonly eventId: typeof MESSAGE_FLOW_EVENT_ID | typeof DISPATCH_ERROR_EVENT_ID;
19
+ readonly timestamp: Date;
20
+ readonly phase?: string;
21
+ readonly outcome: ZLinkRuntimeMessageFlowResult;
22
+ readonly surface:
23
+ | 'node'
24
+ | 'channel'
25
+ | 'spot'
26
+ | 'instance_spot'
27
+ | 'actor'
28
+ | 'stream'
29
+ | 'actor_relocation'
30
+ | 'classic_fanout';
31
+ readonly messageKind: 'request' | 'send' | 'response' | 'error' | 'control';
32
+ readonly reason?: string;
33
+ readonly action?: string;
34
+ readonly packetName?: string;
35
+ readonly channelName?: string;
36
+ readonly channelRouteKind?: 'route_mesh' | 'client_server';
37
+ readonly meshName?: string;
38
+ readonly topic?: string;
39
+ readonly correlationId?: string;
40
+ readonly sourceRid?: string;
41
+ readonly targetRid?: string;
42
+ readonly serverRid?: string;
43
+ readonly flowId?: string;
44
+ readonly flowOrigin?: string;
45
+ readonly spotId?: string;
46
+ readonly instanceSpotType?: string;
47
+ readonly activationState?: string;
48
+ readonly actorId?: string;
49
+ readonly streamSessionId?: string;
50
+ readonly commandId?: number;
51
+ readonly messageSizeBytes?: number;
52
+ readonly durationSeconds?: number;
53
+ readonly errorType?: string;
54
+ readonly errorMessage?: string;
55
+ readonly errorCauseType?: string;
56
+ readonly errorCauseMessage?: string;
57
+ }
58
+
59
+ export type MessageFlowInput = Omit<
60
+ ZLinkRuntimeMessageFlowEvent,
61
+ 'effectiveMode' | 'flowId' | 'flowOrigin'
62
+ > & {
63
+ readonly severity?: 'warning';
64
+ readonly effectiveMode?: ZLinkMessageFlowLogMode;
65
+ readonly flowId?: string;
66
+ readonly flowOrigin?: import('../../contracts').ZLinkFlowOrigin;
67
+ };
68
+
69
+ export function toTelemetryRecord(
70
+ flow: MessageFlowInput,
71
+ messageSizeBytes: number | undefined,
72
+ durationSeconds: number | undefined
73
+ ): ZLinkTelemetryRecord {
74
+ return {
75
+ severity: flow.severity,
76
+ eventId:
77
+ flow.outcome === ZLinkMessageFlowOutcome.Error
78
+ ? DISPATCH_ERROR_EVENT_ID
79
+ : MESSAGE_FLOW_EVENT_ID,
80
+ timestamp: new Date(),
81
+ phase: messageFlowPhase(flow.outcome),
82
+ outcome: flow.result ?? messageFlowOutcome(flow.outcome),
83
+ surface: messageFlowSurface(flow.surface),
84
+ messageKind: messageFlowKind(flow.messageKind),
85
+ reason: flow.errorReason,
86
+ action: flow.errorAction,
87
+ packetName: flow.packetName,
88
+ channelName: flow.channelName,
89
+ channelRouteKind: flow.channelRouteKind ?? channelRouteKind(flow.surface),
90
+ meshName: flow.meshName,
91
+ topic: flow.topic,
92
+ correlationId: flow.correlationId,
93
+ sourceRid: flow.sourceRid,
94
+ targetRid: flow.targetRid,
95
+ serverRid: flow.serverRid,
96
+ flowId: flow.flowId,
97
+ flowOrigin: flow.flowOrigin === undefined ? undefined : FLOW_ORIGIN_VALUES[flow.flowOrigin],
98
+ spotId: flow.spotId,
99
+ instanceSpotType: flow.instanceSpotType,
100
+ activationState: flow.activationState,
101
+ actorId: flow.actorId,
102
+ streamSessionId: flow.streamSessionId,
103
+ commandId: flow.commandId,
104
+ messageSizeBytes,
105
+ durationSeconds,
106
+ errorType: flow.errorType,
107
+ errorMessage: flow.errorMessage,
108
+ errorCauseType: flow.errorCauseType,
109
+ errorCauseMessage: boundedText(flow.errorCauseMessage)
110
+ };
111
+ }
112
+
113
+ export function traceAttributes(record: ZLinkTelemetryRecord): Attributes {
114
+ const attributes: Attributes = {};
115
+ for (const [name, value] of Object.entries(record)) {
116
+ if (value === undefined || name === 'timestamp' || name === 'severity') continue;
117
+ attributes[toSnakeCase(name)] = value instanceof Date ? value.toISOString() : value;
118
+ }
119
+ return attributes;
120
+ }
121
+
122
+ export function structuredLogAttributes(record: ZLinkTelemetryRecord): Attributes {
123
+ // 기록의 attribute 이름은 Message flow tracing 3.2가 고정한다. 로그 본문의
124
+ // `zlink flow:` 축약 key(`kind`, `mesh` …)와 다른 집합이다 —
125
+ // structuredLogBodyAttributes를 참고.
126
+ return compactAttributes({
127
+ event_id: record.eventId,
128
+ timestamp: record.timestamp.toISOString(),
129
+ phase: record.phase,
130
+ surface: record.surface,
131
+ message_kind: record.messageKind,
132
+ mesh_name: record.meshName,
133
+ channel_name: record.channelName,
134
+ channel_route_kind: record.channelRouteKind,
135
+ source_rid: record.sourceRid,
136
+ target_rid: record.targetRid,
137
+ server_rid: record.serverRid,
138
+ packet_name: record.packetName,
139
+ topic: record.topic,
140
+ spot_id: record.spotId,
141
+ instance_spot_type: record.instanceSpotType,
142
+ activation_state: record.activationState,
143
+ actor_id: record.actorId,
144
+ stream_session_id: record.streamSessionId,
145
+ correlation_id: record.correlationId,
146
+ flow_id: record.flowId,
147
+ flow_origin: record.flowOrigin,
148
+ outcome: record.outcome,
149
+ reason: record.reason,
150
+ action: record.action,
151
+ command_id: record.commandId,
152
+ error_type: record.errorType,
153
+ error_message: record.errorMessage,
154
+ error_cause_type: record.errorCauseType,
155
+ error_cause_message: record.errorCauseMessage,
156
+ message_size_bytes: record.messageSizeBytes,
157
+ duration_seconds: record.durationSeconds
158
+ });
159
+ }
160
+
161
+ function structuredLogBodyAttributes(record: ZLinkTelemetryRecord): Attributes {
162
+ // `zlink flow:` 본문 전용 축약 key — Message flow tracing "Structured log 대체 표기".
163
+ return compactAttributes({
164
+ event: record.eventId,
165
+ phase: record.phase,
166
+ surface: record.surface,
167
+ kind: record.messageKind,
168
+ mesh: record.meshName,
169
+ channel: record.channelName,
170
+ channel_route: record.channelRouteKind,
171
+ source_rid: record.sourceRid,
172
+ target_rid: record.targetRid,
173
+ server_rid: record.serverRid,
174
+ packet: record.packetName,
175
+ topic: record.topic,
176
+ spot: record.spotId,
177
+ instance_type: record.instanceSpotType,
178
+ activation_state: record.activationState,
179
+ actor: record.actorId,
180
+ session: record.streamSessionId,
181
+ corr: record.correlationId,
182
+ flow: record.flowId,
183
+ origin: record.flowOrigin,
184
+ outcome: record.outcome,
185
+ reason: record.reason,
186
+ action: record.action,
187
+ error_type: record.errorType,
188
+ error_message: record.errorMessage,
189
+ size: record.messageSizeBytes
190
+ });
191
+ }
192
+
193
+ export function structuredLogBody(record: ZLinkTelemetryRecord): string {
194
+ return `zlink flow: ${Object.entries(structuredLogBodyAttributes(record))
195
+ .map(([key, value]) => `${key}=${String(value)}`)
196
+ .join(' ')}`;
197
+ }
198
+
199
+ function compactAttributes(values: Record<string, string | number | undefined>): Attributes {
200
+ const attributes: Attributes = {};
201
+ for (const [key, value] of Object.entries(values)) {
202
+ if (value !== undefined) attributes[key] = value;
203
+ }
204
+ return attributes;
205
+ }
206
+
207
+ function messageFlowPhase(outcome: ZLinkMessageFlowOutcome): string | undefined {
208
+ switch (outcome) {
209
+ case ZLinkMessageFlowOutcome.Received:
210
+ return 'received';
211
+ case ZLinkMessageFlowOutcome.Admitted:
212
+ return 'admitted';
213
+ case ZLinkMessageFlowOutcome.Dispatched:
214
+ return 'dispatched';
215
+ case ZLinkMessageFlowOutcome.Completed:
216
+ return 'completed';
217
+ case ZLinkMessageFlowOutcome.Replied:
218
+ return 'replied';
219
+ case ZLinkMessageFlowOutcome.Dropped:
220
+ return 'dropped';
221
+ case ZLinkMessageFlowOutcome.Sent:
222
+ return 'sent';
223
+ case ZLinkMessageFlowOutcome.ReplyReceived:
224
+ return 'reply_received';
225
+ case ZLinkMessageFlowOutcome.Backpressured:
226
+ return 'backpressured';
227
+ case ZLinkMessageFlowOutcome.Error:
228
+ return undefined;
229
+ }
230
+ }
231
+
232
+ function messageFlowOutcome(outcome: ZLinkMessageFlowOutcome): ZLinkTelemetryRecord['outcome'] {
233
+ if (outcome === ZLinkMessageFlowOutcome.Error) return 'failed';
234
+ if (outcome === ZLinkMessageFlowOutcome.Backpressured) return 'backpressured';
235
+ if (outcome === ZLinkMessageFlowOutcome.Dropped) return 'dropped';
236
+ return 'succeeded';
237
+ }
238
+
239
+ function messageFlowSurface(surface: ZLinkDispatchErrorSurface): ZLinkTelemetryRecord['surface'] {
240
+ switch (surface) {
241
+ case ZLinkDispatchErrorSurface.Node:
242
+ return 'node';
243
+ case ZLinkDispatchErrorSurface.Channel:
244
+ case ZLinkDispatchErrorSurface.RouteMeshChannel:
245
+ return 'channel';
246
+ case ZLinkDispatchErrorSurface.SpotRoute:
247
+ case ZLinkDispatchErrorSurface.SpotSubscription:
248
+ return 'spot';
249
+ case ZLinkDispatchErrorSurface.InstanceSpot:
250
+ return 'instance_spot';
251
+ case ZLinkDispatchErrorSurface.SpotActor:
252
+ return 'actor';
253
+ case ZLinkDispatchErrorSurface.StreamSession:
254
+ return 'stream';
255
+ case ZLinkDispatchErrorSurface.ActorRelocation:
256
+ return 'actor_relocation';
257
+ case ZLinkDispatchErrorSurface.ClassicFanout:
258
+ return 'classic_fanout';
259
+ }
260
+ }
261
+
262
+ function messageFlowKind(kind: ZLinkDispatchMessageKind): ZLinkTelemetryRecord['messageKind'] {
263
+ switch (kind) {
264
+ case ZLinkDispatchMessageKind.Request:
265
+ case ZLinkDispatchMessageKind.ActorRequest:
266
+ return 'request';
267
+ case ZLinkDispatchMessageKind.Send:
268
+ case ZLinkDispatchMessageKind.ActorSend:
269
+ return 'send';
270
+ case ZLinkDispatchMessageKind.Response:
271
+ return 'response';
272
+ case ZLinkDispatchMessageKind.Error:
273
+ return 'error';
274
+ case ZLinkDispatchMessageKind.Control:
275
+ return 'control';
276
+ case ZLinkDispatchMessageKind.Publish:
277
+ throw new Error('Classic fanout publish must not create a normal message-flow record.');
278
+ }
279
+ }
280
+
281
+ function channelRouteKind(
282
+ surface: ZLinkDispatchErrorSurface
283
+ ): ZLinkTelemetryRecord['channelRouteKind'] {
284
+ if (surface === ZLinkDispatchErrorSurface.RouteMeshChannel) return 'route_mesh';
285
+ if (surface === ZLinkDispatchErrorSurface.Channel) return 'client_server';
286
+ return undefined;
287
+ }
288
+
289
+ function boundedText(value: string | undefined): string | undefined {
290
+ return value === undefined ? undefined : value.slice(0, ERROR_MESSAGE_MAX_LENGTH);
291
+ }
292
+
293
+ function toSnakeCase(value: string): string {
294
+ return value.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
295
+ }
@@ -0,0 +1,146 @@
1
+ import { parentPort, workerData } from 'node:worker_threads';
2
+ import {
3
+ metrics,
4
+ trace,
5
+ ProxyTracerProvider,
6
+ SpanStatusCode,
7
+ type Tracer,
8
+ type Counter
9
+ } from '@opentelemetry/api';
10
+ import { logs, SeverityNumber, type Logger } from '@opentelemetry/api-logs';
11
+ import { initialLoggerProvider } from './message-flow-bootstrap';
12
+ import {
13
+ TelemetryState,
14
+ TelemetryCounter,
15
+ TELEMETRY_STATE_BYTES,
16
+ TELEMETRY_WORKER_AVAILABLE,
17
+ type ZLinkTelemetryDelivery
18
+ } from './message-flow-delivery';
19
+ import { COUNTER_UNITS, METRIC_NAMES } from './runtime-metrics';
20
+ import { ZLinkMeters } from '../../contracts/Eventing/Metrics';
21
+ import {
22
+ DISPATCH_ERROR_EVENT_ID,
23
+ TELEMETRY_INSTRUMENTATION_NAME,
24
+ structuredLogBody,
25
+ structuredLogAttributes,
26
+ traceAttributes,
27
+ type ZLinkTelemetryRecord
28
+ } from './message-flow-record';
29
+
30
+ const state = new Int32Array(workerData as SharedArrayBuffer, 0, TelemetryState.Length);
31
+ const counters = new BigUint64Array(
32
+ workerData as SharedArrayBuffer,
33
+ TELEMETRY_STATE_BYTES,
34
+ TelemetryCounter.Length
35
+ );
36
+ let logger: Logger | undefined;
37
+ let tracer: Tracer | undefined;
38
+ let overflow: Counter | undefined;
39
+ const overflowAttributes = { source: 'message_flow' };
40
+ let reportedOverflow = 0n;
41
+
42
+ function failed(
43
+ role: TelemetryCounter.LoggerFailures | TelemetryCounter.TraceFailures,
44
+ error: unknown
45
+ ): void {
46
+ if (
47
+ Atomics.add(counters, role, 1n) !== 0n ||
48
+ Atomics.load(counters, TelemetryCounter.FallbackFailures) !== 0n
49
+ )
50
+ return;
51
+ try {
52
+ const description = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
53
+ process.stderr.write(
54
+ `ZLink telemetry ${role === TelemetryCounter.LoggerFailures ? 'logger' : 'trace'} provider failed: ${description}\n`,
55
+ (error) => {
56
+ if (error !== undefined && error !== null)
57
+ Atomics.store(counters, TelemetryCounter.FallbackFailures, 1n);
58
+ }
59
+ );
60
+ } catch {
61
+ Atomics.store(counters, TelemetryCounter.FallbackFailures, 1n);
62
+ }
63
+ }
64
+
65
+ function deliver(record: ZLinkTelemetryRecord): void {
66
+ if (logger !== undefined) {
67
+ try {
68
+ const severity =
69
+ record.severity === 'warning'
70
+ ? 'WARN'
71
+ : record.eventId === DISPATCH_ERROR_EVENT_ID
72
+ ? 'ERROR'
73
+ : 'INFO';
74
+ logger.emit({
75
+ eventName: record.eventId,
76
+ timestamp: record.timestamp,
77
+ severityNumber: SeverityNumber[severity],
78
+ severityText: severity,
79
+ body: structuredLogBody(record),
80
+ attributes: structuredLogAttributes(record)
81
+ });
82
+ } catch (error) {
83
+ failed(TelemetryCounter.LoggerFailures, error);
84
+ }
85
+ }
86
+ if (tracer === undefined) return;
87
+ try {
88
+ const span = tracer.startSpan(record.eventId, { attributes: traceAttributes(record) });
89
+ if (record.eventId === DISPATCH_ERROR_EVENT_ID) {
90
+ span.setStatus({ code: SpanStatusCode.ERROR, message: record.reason });
91
+ }
92
+ span.end();
93
+ } catch (error) {
94
+ failed(TelemetryCounter.TraceFailures, error);
95
+ }
96
+ }
97
+
98
+ process.stderr.once('error', () => Atomics.store(counters, TelemetryCounter.FallbackFailures, 1n));
99
+ const hasLoggerProvider = logs.getLoggerProvider() !== initialLoggerProvider;
100
+ if (hasLoggerProvider) {
101
+ try {
102
+ logger = logs.getLogger(TELEMETRY_INSTRUMENTATION_NAME);
103
+ } catch (error) {
104
+ failed(TelemetryCounter.LoggerFailures, error);
105
+ }
106
+ }
107
+ let hasTraceProvider = false;
108
+ try {
109
+ const provider = trace.getTracerProvider();
110
+ tracer =
111
+ provider instanceof ProxyTracerProvider
112
+ ? provider.getDelegateTracer(TELEMETRY_INSTRUMENTATION_NAME)
113
+ : provider.getTracer(TELEMETRY_INSTRUMENTATION_NAME);
114
+ hasTraceProvider = tracer !== undefined;
115
+ } catch (error) {
116
+ // The no-provider proxy returns undefined. A delegate throwing getTracer is
117
+ // still a registered provider, and its failure stays in this worker.
118
+ hasTraceProvider = true;
119
+ failed(TelemetryCounter.TraceFailures, error);
120
+ }
121
+
122
+ // enabled() is an event filter, not a provider-registration test. In particular,
123
+ // an ERROR-only processor may reject an unspecified-severity enabled() query.
124
+ Atomics.store(state, TelemetryState.Enabled, hasLoggerProvider || hasTraceProvider ? 1 : 0);
125
+ parentPort!.postMessage(TELEMETRY_WORKER_AVAILABLE);
126
+ parentPort!.on('message', (batch: ZLinkTelemetryDelivery<ZLinkTelemetryRecord>[]) => {
127
+ for (const item of batch) {
128
+ Atomics.sub(state, TelemetryState.Pending, 1);
129
+ if (Atomics.load(new Int32Array(item.lease), 0) === 0) deliver(item.record);
130
+ }
131
+ const dropped = Atomics.load(counters, TelemetryCounter.Overflow);
132
+ if (dropped !== reportedOverflow) {
133
+ try {
134
+ overflow ??= metrics
135
+ .getMeter(ZLinkMeters.Framework)
136
+ .createCounter(METRIC_NAMES.ObservabilityEventsOverflow, {
137
+ unit: COUNTER_UNITS[METRIC_NAMES.ObservabilityEventsOverflow]
138
+ });
139
+ overflow.add(Number(dropped - reportedOverflow), overflowAttributes);
140
+ } catch (error) {
141
+ failed(TelemetryCounter.TraceFailures, error);
142
+ }
143
+ reportedOverflow = dropped;
144
+ }
145
+ parentPort!.postMessage(TELEMETRY_WORKER_AVAILABLE);
146
+ });