@superblocksteam/telemetry 2.0.173-next.4 → 2.0.174

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 (304) hide show
  1. package/dist/browser/console-logging.js +7 -2
  2. package/dist/browser/console-logging.js.map +1 -1
  3. package/dist/browser/early-console-buffer.js +14 -12
  4. package/dist/browser/early-console-buffer.js.map +1 -1
  5. package/dist/browser/index.js +41 -12
  6. package/dist/browser/index.js.map +1 -1
  7. package/dist/browser/init.d.ts +1 -1
  8. package/dist/browser/init.d.ts.map +1 -1
  9. package/dist/browser/init.js +52 -42
  10. package/dist/browser/init.js.map +1 -1
  11. package/dist/browser/instrumentations.js +15 -11
  12. package/dist/browser/instrumentations.js.map +1 -1
  13. package/dist/browser/logs.d.ts +1 -1
  14. package/dist/browser/logs.d.ts.map +1 -1
  15. package/dist/browser/logs.js +18 -11
  16. package/dist/browser/logs.js.map +1 -1
  17. package/dist/browser/metrics.js +12 -9
  18. package/dist/browser/metrics.js.map +1 -1
  19. package/dist/browser/resilient-exporter.d.ts +1 -1
  20. package/dist/browser/resilient-exporter.d.ts.map +1 -1
  21. package/dist/browser/resilient-exporter.js +12 -8
  22. package/dist/browser/resilient-exporter.js.map +1 -1
  23. package/dist/browser/sanitizer.js +6 -2
  24. package/dist/browser/sanitizer.js.map +1 -1
  25. package/dist/browser/traced-socket.js +18 -14
  26. package/dist/browser/traced-socket.js.map +1 -1
  27. package/dist/common/contracts/tier2-traces.js +44 -33
  28. package/dist/common/contracts/tier2-traces.js.map +1 -1
  29. package/dist/common/deployment-type.js +8 -5
  30. package/dist/common/deployment-type.js.map +1 -1
  31. package/dist/common/guardrails.js +38 -26
  32. package/dist/common/guardrails.js.map +1 -1
  33. package/dist/common/index.js +24 -8
  34. package/dist/common/index.js.map +1 -1
  35. package/dist/common/log-sanitizer.js +55 -37
  36. package/dist/common/log-sanitizer.js.map +1 -1
  37. package/dist/common/policy-evaluator.d.ts +1 -1
  38. package/dist/common/policy-evaluator.d.ts.map +1 -1
  39. package/dist/common/policy-evaluator.js +9 -5
  40. package/dist/common/policy-evaluator.js.map +1 -1
  41. package/dist/common/resource.js +25 -18
  42. package/dist/common/resource.js.map +1 -1
  43. package/dist/common/tier-hints.js +22 -12
  44. package/dist/common/tier-hints.js.map +1 -1
  45. package/dist/common/trace-sanitizer.js +10 -6
  46. package/dist/common/trace-sanitizer.js.map +1 -1
  47. package/dist/common/traced-socket-types.js +2 -1
  48. package/dist/common/traced-socket-types.js.map +1 -1
  49. package/dist/index.js +38 -6
  50. package/dist/index.js.map +1 -1
  51. package/dist/lint/forbidden-attributes.js +24 -19
  52. package/dist/lint/forbidden-attributes.js.map +1 -1
  53. package/dist/lint/index.js +8 -1
  54. package/dist/lint/index.js.map +1 -1
  55. package/dist/llmobs/index.js +9 -2
  56. package/dist/llmobs/index.js.map +1 -1
  57. package/dist/llmobs/tier1-exporter.js +12 -6
  58. package/dist/llmobs/tier1-exporter.js.map +1 -1
  59. package/dist/llmobs/tier2-summarizer.js +5 -1
  60. package/dist/llmobs/tier2-summarizer.js.map +1 -1
  61. package/dist/node/dynamic-attribute-processor.js +7 -2
  62. package/dist/node/dynamic-attribute-processor.js.map +1 -1
  63. package/dist/node/exporters/resilient-exporter.d.ts +1 -1
  64. package/dist/node/exporters/resilient-exporter.d.ts.map +1 -1
  65. package/dist/node/exporters/resilient-exporter.js +12 -8
  66. package/dist/node/exporters/resilient-exporter.js.map +1 -1
  67. package/dist/node/index.js +26 -7
  68. package/dist/node/index.js.map +1 -1
  69. package/dist/node/init.d.ts +3 -3
  70. package/dist/node/init.d.ts.map +1 -1
  71. package/dist/node/init.js +72 -66
  72. package/dist/node/init.js.map +1 -1
  73. package/dist/node/local-obs-mode.js +4 -1
  74. package/dist/node/local-obs-mode.js.map +1 -1
  75. package/dist/node/log-processor.d.ts +1 -1
  76. package/dist/node/log-processor.d.ts.map +1 -1
  77. package/dist/node/log-processor.js +55 -47
  78. package/dist/node/log-processor.js.map +1 -1
  79. package/dist/node/metrics-client.js +5 -1
  80. package/dist/node/metrics-client.js.map +1 -1
  81. package/dist/node/safe-logger.js +12 -8
  82. package/dist/node/safe-logger.js.map +1 -1
  83. package/dist/node/sanitizing-processor.d.ts +2 -2
  84. package/dist/node/sanitizing-processor.d.ts.map +1 -1
  85. package/dist/node/sanitizing-processor.js +10 -6
  86. package/dist/node/sanitizing-processor.js.map +1 -1
  87. package/dist/node/service-tracers.js +10 -7
  88. package/dist/node/service-tracers.js.map +1 -1
  89. package/dist/node/traced-socket.d.ts +3 -3
  90. package/dist/node/traced-socket.d.ts.map +1 -1
  91. package/dist/node/traced-socket.js +52 -48
  92. package/dist/node/traced-socket.js.map +1 -1
  93. package/dist/npm-registry/emitter.js +47 -34
  94. package/dist/npm-registry/emitter.js.map +1 -1
  95. package/dist/npm-registry/index.js +19 -3
  96. package/dist/npm-registry/index.js.map +1 -1
  97. package/dist/npm-registry/sanitize.js +27 -16
  98. package/dist/npm-registry/sanitize.js.map +1 -1
  99. package/dist/npm-registry/spans.js +12 -7
  100. package/dist/npm-registry/spans.js.map +1 -1
  101. package/dist/testing/in-memory-exporter.d.ts +1 -1
  102. package/dist/testing/in-memory-exporter.d.ts.map +1 -1
  103. package/dist/testing/in-memory-exporter.js +12 -6
  104. package/dist/testing/in-memory-exporter.js.map +1 -1
  105. package/dist/testing/index.js +15 -3
  106. package/dist/testing/index.js.map +1 -1
  107. package/dist/testing/metrics-capture.js +15 -12
  108. package/dist/testing/metrics-capture.js.map +1 -1
  109. package/dist/testing/test-init.js +31 -24
  110. package/dist/testing/test-init.js.map +1 -1
  111. package/dist/types/index.js +17 -1
  112. package/dist/types/index.js.map +1 -1
  113. package/dist/types/policy.js +24 -21
  114. package/dist/types/policy.js.map +1 -1
  115. package/dist-esm/browser/console-logging.d.ts +18 -0
  116. package/dist-esm/browser/console-logging.d.ts.map +1 -0
  117. package/dist-esm/browser/console-logging.js +27 -0
  118. package/dist-esm/browser/console-logging.js.map +1 -0
  119. package/dist-esm/browser/early-console-buffer.d.ts +49 -0
  120. package/dist-esm/browser/early-console-buffer.d.ts.map +1 -0
  121. package/dist-esm/browser/early-console-buffer.js +181 -0
  122. package/dist-esm/browser/early-console-buffer.js.map +1 -0
  123. package/dist-esm/browser/index.d.ts +18 -0
  124. package/dist-esm/browser/index.d.ts.map +1 -0
  125. package/dist-esm/browser/index.js +23 -0
  126. package/dist-esm/browser/index.js.map +1 -0
  127. package/dist-esm/browser/init.d.ts +100 -0
  128. package/dist-esm/browser/init.d.ts.map +1 -0
  129. package/dist-esm/browser/init.js +317 -0
  130. package/dist-esm/browser/init.js.map +1 -0
  131. package/dist-esm/browser/instrumentations.d.ts +67 -0
  132. package/dist-esm/browser/instrumentations.d.ts.map +1 -0
  133. package/dist-esm/browser/instrumentations.js +79 -0
  134. package/dist-esm/browser/instrumentations.js.map +1 -0
  135. package/dist-esm/browser/logs.d.ts +57 -0
  136. package/dist-esm/browser/logs.d.ts.map +1 -0
  137. package/dist-esm/browser/logs.js +80 -0
  138. package/dist-esm/browser/logs.js.map +1 -0
  139. package/dist-esm/browser/metrics.d.ts +29 -0
  140. package/dist-esm/browser/metrics.d.ts.map +1 -0
  141. package/dist-esm/browser/metrics.js +46 -0
  142. package/dist-esm/browser/metrics.js.map +1 -0
  143. package/dist-esm/browser/resilient-exporter.d.ts +43 -0
  144. package/dist-esm/browser/resilient-exporter.d.ts.map +1 -0
  145. package/dist-esm/browser/resilient-exporter.js +84 -0
  146. package/dist-esm/browser/resilient-exporter.js.map +1 -0
  147. package/dist-esm/browser/sanitizer.d.ts +35 -0
  148. package/dist-esm/browser/sanitizer.d.ts.map +1 -0
  149. package/dist-esm/browser/sanitizer.js +207 -0
  150. package/dist-esm/browser/sanitizer.js.map +1 -0
  151. package/dist-esm/browser/traced-socket.d.ts +102 -0
  152. package/dist-esm/browser/traced-socket.d.ts.map +1 -0
  153. package/dist-esm/browser/traced-socket.js +199 -0
  154. package/dist-esm/browser/traced-socket.js.map +1 -0
  155. package/dist-esm/common/contracts/tier2-traces.d.ts +116 -0
  156. package/dist-esm/common/contracts/tier2-traces.d.ts.map +1 -0
  157. package/dist-esm/common/contracts/tier2-traces.js +725 -0
  158. package/dist-esm/common/contracts/tier2-traces.js.map +1 -0
  159. package/dist-esm/common/deployment-type.d.ts +18 -0
  160. package/dist-esm/common/deployment-type.d.ts.map +1 -0
  161. package/dist-esm/common/deployment-type.js +27 -0
  162. package/dist-esm/common/deployment-type.js.map +1 -0
  163. package/dist-esm/common/guardrails.d.ts +132 -0
  164. package/dist-esm/common/guardrails.d.ts.map +1 -0
  165. package/dist-esm/common/guardrails.js +230 -0
  166. package/dist-esm/common/guardrails.js.map +1 -0
  167. package/dist-esm/common/index.d.ts +17 -0
  168. package/dist-esm/common/index.d.ts.map +1 -0
  169. package/dist-esm/common/index.js +17 -0
  170. package/dist-esm/common/index.js.map +1 -0
  171. package/dist-esm/common/log-sanitizer.d.ts +163 -0
  172. package/dist-esm/common/log-sanitizer.d.ts.map +1 -0
  173. package/dist-esm/common/log-sanitizer.js +745 -0
  174. package/dist-esm/common/log-sanitizer.js.map +1 -0
  175. package/dist-esm/common/policy-evaluator.d.ts +103 -0
  176. package/dist-esm/common/policy-evaluator.d.ts.map +1 -0
  177. package/dist-esm/common/policy-evaluator.js +196 -0
  178. package/dist-esm/common/policy-evaluator.js.map +1 -0
  179. package/dist-esm/common/resource.d.ts +79 -0
  180. package/dist-esm/common/resource.d.ts.map +1 -0
  181. package/dist-esm/common/resource.js +121 -0
  182. package/dist-esm/common/resource.js.map +1 -0
  183. package/dist-esm/common/tier-hints.d.ts +182 -0
  184. package/dist-esm/common/tier-hints.d.ts.map +1 -0
  185. package/dist-esm/common/tier-hints.js +199 -0
  186. package/dist-esm/common/tier-hints.js.map +1 -0
  187. package/dist-esm/common/trace-sanitizer.d.ts +82 -0
  188. package/dist-esm/common/trace-sanitizer.d.ts.map +1 -0
  189. package/dist-esm/common/trace-sanitizer.js +230 -0
  190. package/dist-esm/common/trace-sanitizer.js.map +1 -0
  191. package/dist-esm/common/traced-socket-types.d.ts +43 -0
  192. package/dist-esm/common/traced-socket-types.d.ts.map +1 -0
  193. package/dist-esm/common/traced-socket-types.js +16 -0
  194. package/dist-esm/common/traced-socket-types.js.map +1 -0
  195. package/dist-esm/index.d.ts +45 -0
  196. package/dist-esm/index.d.ts.map +1 -0
  197. package/dist-esm/index.js +56 -0
  198. package/dist-esm/index.js.map +1 -0
  199. package/dist-esm/lint/forbidden-attributes.d.ts +149 -0
  200. package/dist-esm/lint/forbidden-attributes.d.ts.map +1 -0
  201. package/dist-esm/lint/forbidden-attributes.js +210 -0
  202. package/dist-esm/lint/forbidden-attributes.js.map +1 -0
  203. package/dist-esm/lint/index.d.ts +9 -0
  204. package/dist-esm/lint/index.d.ts.map +1 -0
  205. package/dist-esm/lint/index.js +9 -0
  206. package/dist-esm/lint/index.js.map +1 -0
  207. package/dist-esm/llmobs/index.d.ts +22 -0
  208. package/dist-esm/llmobs/index.d.ts.map +1 -0
  209. package/dist-esm/llmobs/index.js +22 -0
  210. package/dist-esm/llmobs/index.js.map +1 -0
  211. package/dist-esm/llmobs/tier1-exporter.d.ts +146 -0
  212. package/dist-esm/llmobs/tier1-exporter.d.ts.map +1 -0
  213. package/dist-esm/llmobs/tier1-exporter.js +193 -0
  214. package/dist-esm/llmobs/tier1-exporter.js.map +1 -0
  215. package/dist-esm/llmobs/tier2-summarizer.d.ts +268 -0
  216. package/dist-esm/llmobs/tier2-summarizer.d.ts.map +1 -0
  217. package/dist-esm/llmobs/tier2-summarizer.js +652 -0
  218. package/dist-esm/llmobs/tier2-summarizer.js.map +1 -0
  219. package/dist-esm/node/dynamic-attribute-processor.d.ts +43 -0
  220. package/dist-esm/node/dynamic-attribute-processor.d.ts.map +1 -0
  221. package/dist-esm/node/dynamic-attribute-processor.js +74 -0
  222. package/dist-esm/node/dynamic-attribute-processor.js.map +1 -0
  223. package/dist-esm/node/exporters/resilient-exporter.d.ts +91 -0
  224. package/dist-esm/node/exporters/resilient-exporter.d.ts.map +1 -0
  225. package/dist-esm/node/exporters/resilient-exporter.js +132 -0
  226. package/dist-esm/node/exporters/resilient-exporter.js.map +1 -0
  227. package/dist-esm/node/index.d.ts +13 -0
  228. package/dist-esm/node/index.d.ts.map +1 -0
  229. package/dist-esm/node/index.js +13 -0
  230. package/dist-esm/node/index.js.map +1 -0
  231. package/dist-esm/node/init.d.ts +97 -0
  232. package/dist-esm/node/init.d.ts.map +1 -0
  233. package/dist-esm/node/init.js +359 -0
  234. package/dist-esm/node/init.js.map +1 -0
  235. package/dist-esm/node/local-obs-mode.d.ts +17 -0
  236. package/dist-esm/node/local-obs-mode.d.ts.map +1 -0
  237. package/dist-esm/node/local-obs-mode.js +19 -0
  238. package/dist-esm/node/local-obs-mode.js.map +1 -0
  239. package/dist-esm/node/log-processor.d.ts +132 -0
  240. package/dist-esm/node/log-processor.d.ts.map +1 -0
  241. package/dist-esm/node/log-processor.js +389 -0
  242. package/dist-esm/node/log-processor.js.map +1 -0
  243. package/dist-esm/node/metrics-client.d.ts +88 -0
  244. package/dist-esm/node/metrics-client.d.ts.map +1 -0
  245. package/dist-esm/node/metrics-client.js +205 -0
  246. package/dist-esm/node/metrics-client.js.map +1 -0
  247. package/dist-esm/node/safe-logger.d.ts +55 -0
  248. package/dist-esm/node/safe-logger.d.ts.map +1 -0
  249. package/dist-esm/node/safe-logger.js +154 -0
  250. package/dist-esm/node/safe-logger.js.map +1 -0
  251. package/dist-esm/node/sanitizing-processor.d.ts +67 -0
  252. package/dist-esm/node/sanitizing-processor.d.ts.map +1 -0
  253. package/dist-esm/node/sanitizing-processor.js +163 -0
  254. package/dist-esm/node/sanitizing-processor.js.map +1 -0
  255. package/dist-esm/node/service-tracers.d.ts +52 -0
  256. package/dist-esm/node/service-tracers.d.ts.map +1 -0
  257. package/dist-esm/node/service-tracers.js +78 -0
  258. package/dist-esm/node/service-tracers.js.map +1 -0
  259. package/dist-esm/node/traced-socket.d.ts +120 -0
  260. package/dist-esm/node/traced-socket.d.ts.map +1 -0
  261. package/dist-esm/node/traced-socket.js +334 -0
  262. package/dist-esm/node/traced-socket.js.map +1 -0
  263. package/dist-esm/npm-registry/emitter.d.ts +330 -0
  264. package/dist-esm/npm-registry/emitter.d.ts.map +1 -0
  265. package/dist-esm/npm-registry/emitter.js +546 -0
  266. package/dist-esm/npm-registry/emitter.js.map +1 -0
  267. package/dist-esm/npm-registry/index.d.ts +12 -0
  268. package/dist-esm/npm-registry/index.d.ts.map +1 -0
  269. package/dist-esm/npm-registry/index.js +12 -0
  270. package/dist-esm/npm-registry/index.js.map +1 -0
  271. package/dist-esm/npm-registry/sanitize.d.ts +174 -0
  272. package/dist-esm/npm-registry/sanitize.d.ts.map +1 -0
  273. package/dist-esm/npm-registry/sanitize.js +331 -0
  274. package/dist-esm/npm-registry/sanitize.js.map +1 -0
  275. package/dist-esm/npm-registry/spans.d.ts +61 -0
  276. package/dist-esm/npm-registry/spans.d.ts.map +1 -0
  277. package/dist-esm/npm-registry/spans.js +86 -0
  278. package/dist-esm/npm-registry/spans.js.map +1 -0
  279. package/dist-esm/package.json +1 -0
  280. package/dist-esm/testing/in-memory-exporter.d.ts +179 -0
  281. package/dist-esm/testing/in-memory-exporter.d.ts.map +1 -0
  282. package/dist-esm/testing/in-memory-exporter.js +250 -0
  283. package/dist-esm/testing/in-memory-exporter.js.map +1 -0
  284. package/dist-esm/testing/index.d.ts +9 -0
  285. package/dist-esm/testing/index.d.ts.map +1 -0
  286. package/dist-esm/testing/index.js +9 -0
  287. package/dist-esm/testing/index.js.map +1 -0
  288. package/dist-esm/testing/metrics-capture.d.ts +29 -0
  289. package/dist-esm/testing/metrics-capture.d.ts.map +1 -0
  290. package/dist-esm/testing/metrics-capture.js +71 -0
  291. package/dist-esm/testing/metrics-capture.js.map +1 -0
  292. package/dist-esm/testing/test-init.d.ts +80 -0
  293. package/dist-esm/testing/test-init.d.ts.map +1 -0
  294. package/dist-esm/testing/test-init.js +137 -0
  295. package/dist-esm/testing/test-init.js.map +1 -0
  296. package/dist-esm/types/index.d.ts +84 -0
  297. package/dist-esm/types/index.d.ts.map +1 -0
  298. package/dist-esm/types/index.js +7 -0
  299. package/dist-esm/types/index.js.map +1 -0
  300. package/dist-esm/types/policy.d.ts +92 -0
  301. package/dist-esm/types/policy.d.ts.map +1 -0
  302. package/dist-esm/types/policy.js +122 -0
  303. package/dist-esm/types/policy.js.map +1 -0
  304. package/package.json +17 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizing-processor.js","sourceRoot":"","sources":["../../src/node/sanitizing-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Service-scoped tracer factory.
3
+ *
4
+ * `service.name` lives on the OTel Resource, and a process has exactly one
5
+ * primary Resource (set at SDK init). Datadog maps that resource `service.name`
6
+ * to LLM-Obs `ml_app`, so emitting a subset of spans under a different `ml_app`
7
+ * requires a provider with a different Resource — not a span attribute (which is
8
+ * forbidden) nor a second SDK (also forbidden outside this package).
9
+ *
10
+ * This factory lazily creates one additional `BasicTracerProvider` per
11
+ * non-default service name, each carrying a Resource derived from the base via
12
+ * {@link withServiceName} and sharing the SAME span processor (and therefore the
13
+ * same sanitization + export pipeline) as the primary SDK. See APPS-5082.
14
+ *
15
+ * Side effect: `service.name` also drives the Datadog APM `service`, so spans
16
+ * emitted under a secondary name surface as a separate APM service entity (not
17
+ * just a separate LLM-Obs `ml_app`).
18
+ */
19
+ import { type Tracer } from "@opentelemetry/api";
20
+ import type { Resource } from "@opentelemetry/resources";
21
+ import { type SpanProcessor } from "@opentelemetry/sdk-trace-base";
22
+ /**
23
+ * A factory for tracers bound to a specific `service.name`.
24
+ */
25
+ export interface ServiceTracers {
26
+ /**
27
+ * Get a tracer that emits spans under `serviceName`. When `serviceName` equals
28
+ * the default service, the primary (globally registered) provider is used.
29
+ *
30
+ * @param name - Instrumentation scope name
31
+ * @param serviceName - Service identity for emitted spans' resource
32
+ */
33
+ getTracer(name: string, serviceName: string): Tracer;
34
+ /** Flush spans buffered by any secondary providers. */
35
+ shutdown(): Promise<void>;
36
+ }
37
+ /**
38
+ * Create a service-scoped tracer factory.
39
+ *
40
+ * @param config - Factory configuration
41
+ * @param config.baseResource - The primary SDK resource to derive from
42
+ * @param config.defaultServiceName - The primary service name (uses the global provider)
43
+ * @param config.serviceVersion - Instrumentation version passed to getTracer
44
+ * @param config.spanProcessor - Span processor shared with secondary providers (omit to disable export)
45
+ */
46
+ export declare function createServiceTracers(config: {
47
+ baseResource: Resource;
48
+ defaultServiceName: string;
49
+ serviceVersion: string;
50
+ spanProcessor?: SpanProcessor;
51
+ }): ServiceTracers;
52
+ //# sourceMappingURL=service-tracers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-tracers.d.ts","sourceRoot":"","sources":["../../src/node/service-tracers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,+BAA+B,CAAC;AAIvC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IACrD,uDAAuD;IACvD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,YAAY,EAAE,QAAQ,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,cAAc,CAsDjB"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Service-scoped tracer factory.
3
+ *
4
+ * `service.name` lives on the OTel Resource, and a process has exactly one
5
+ * primary Resource (set at SDK init). Datadog maps that resource `service.name`
6
+ * to LLM-Obs `ml_app`, so emitting a subset of spans under a different `ml_app`
7
+ * requires a provider with a different Resource — not a span attribute (which is
8
+ * forbidden) nor a second SDK (also forbidden outside this package).
9
+ *
10
+ * This factory lazily creates one additional `BasicTracerProvider` per
11
+ * non-default service name, each carrying a Resource derived from the base via
12
+ * {@link withServiceName} and sharing the SAME span processor (and therefore the
13
+ * same sanitization + export pipeline) as the primary SDK. See APPS-5082.
14
+ *
15
+ * Side effect: `service.name` also drives the Datadog APM `service`, so spans
16
+ * emitted under a secondary name surface as a separate APM service entity (not
17
+ * just a separate LLM-Obs `ml_app`).
18
+ */
19
+ import { trace } from "@opentelemetry/api";
20
+ import { BasicTracerProvider, } from "@opentelemetry/sdk-trace-base";
21
+ import { withServiceName } from "../common/resource.js";
22
+ /**
23
+ * Create a service-scoped tracer factory.
24
+ *
25
+ * @param config - Factory configuration
26
+ * @param config.baseResource - The primary SDK resource to derive from
27
+ * @param config.defaultServiceName - The primary service name (uses the global provider)
28
+ * @param config.serviceVersion - Instrumentation version passed to getTracer
29
+ * @param config.spanProcessor - Span processor shared with secondary providers (omit to disable export)
30
+ */
31
+ export function createServiceTracers(config) {
32
+ const { baseResource, defaultServiceName, serviceVersion, spanProcessor } = config;
33
+ // One secondary provider per non-default service name.
34
+ const providers = new Map();
35
+ let shutdownCalled = false;
36
+ return {
37
+ getTracer(name, serviceName) {
38
+ // Default service (or a blank name, which would yield an empty ml_app)
39
+ // uses the globally registered provider — the primary SDK's when traces
40
+ // are enabled, otherwise the API's no-op provider. After shutdown we also
41
+ // route here so a late call (e.g. an in-flight request during graceful
42
+ // shutdown) never resurrects a secondary provider on the closing pipeline.
43
+ if (shutdownCalled ||
44
+ !serviceName.trim() ||
45
+ serviceName === defaultServiceName) {
46
+ return trace.getTracer(name, serviceVersion);
47
+ }
48
+ let provider = providers.get(serviceName);
49
+ if (!provider) {
50
+ provider = new BasicTracerProvider({
51
+ resource: withServiceName(baseResource, serviceName),
52
+ // Share the primary span processor so sanitization + export are
53
+ // identical. The primary SDK owns its lifecycle (shutdown), so we
54
+ // never shut the shared processor down from here — see shutdown().
55
+ spanProcessors: spanProcessor ? [spanProcessor] : [],
56
+ });
57
+ providers.set(serviceName, provider);
58
+ }
59
+ return provider.getTracer(name, serviceVersion);
60
+ },
61
+ async shutdown() {
62
+ shutdownCalled = true;
63
+ // Every secondary provider shares the one primary span processor, so flush
64
+ // it once rather than N times through each provider. Flush only — the
65
+ // primary SDK owns the processor's shutdown; closing it here would
66
+ // double-close it. Swallow+log so a flush failure can't reject (which
67
+ // would block the caller's primary sdk.shutdown()) nor vanish silently.
68
+ try {
69
+ await spanProcessor?.forceFlush();
70
+ }
71
+ catch (error) {
72
+ console.warn("[Telemetry] Secondary-service tracer flush failed during shutdown:", error);
73
+ }
74
+ providers.clear();
75
+ },
76
+ };
77
+ }
78
+ //# sourceMappingURL=service-tracers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-tracers.js","sourceRoot":"","sources":["../../src/node/service-tracers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAe,MAAM,oBAAoB,CAAC;AAExD,OAAO,EACL,mBAAmB,GAEpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAkBxD;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAKpC;IACC,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,GACvE,MAAM,CAAC;IACT,uDAAuD;IACvD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IACzD,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,OAAO;QACL,SAAS,CAAC,IAAY,EAAE,WAAmB;YACzC,uEAAuE;YACvE,wEAAwE;YACxE,0EAA0E;YAC1E,uEAAuE;YACvE,2EAA2E;YAC3E,IACE,cAAc;gBACd,CAAC,WAAW,CAAC,IAAI,EAAE;gBACnB,WAAW,KAAK,kBAAkB,EAClC,CAAC;gBACD,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,mBAAmB,CAAC;oBACjC,QAAQ,EAAE,eAAe,CAAC,YAAY,EAAE,WAAW,CAAC;oBACpD,gEAAgE;oBAChE,kEAAkE;oBAClE,mEAAmE;oBACnE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;iBACrD,CAAC,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,cAAc,GAAG,IAAI,CAAC;YACtB,2EAA2E;YAC3E,sEAAsE;YACtE,mEAAmE;YACnE,sEAAsE;YACtE,wEAAwE;YACxE,IAAI,CAAC;gBACH,MAAM,aAAa,EAAE,UAAU,EAAE,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,oEAAoE,EACpE,KAAK,CACN,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * TracedSocket for WebSocket connections with OpenTelemetry tracing.
3
+ *
4
+ * This is a generic implementation that can be used across services.
5
+ * Server-specific behavior (like error handling) is injected via callbacks.
6
+ */
7
+ import { IncomingHttpHeaders } from "http";
8
+ import { Tracer } from "@opentelemetry/api";
9
+ import { ISocket, ISocketClient, MethodHandler, RequestContextBase, SocketMessage, SocketError, MethodHandlers, GenericMiddleware, SocketTimeouts } from "@superblocksteam/shared";
10
+ import { TelemetryTier } from "../types/policy.js";
11
+ /**
12
+ * PinoLogger interface compatible with pino.
13
+ */
14
+ interface PinoLogger {
15
+ error: (obj: object, msg?: string) => void;
16
+ info: (obj: object, msg?: string) => void;
17
+ warn: (obj: object, msg?: string) => void;
18
+ }
19
+ /**
20
+ * WebSocket interface (subset of isomorphic-ws).
21
+ */
22
+ interface WebSocketLike {
23
+ readonly readyState: number;
24
+ close(code?: number, reason?: string): void;
25
+ send(data: string | ArrayBuffer): void;
26
+ addEventListener(type: string, listener: (event: unknown) => void): void;
27
+ removeEventListener(type: string, listener: (event: unknown) => void): void;
28
+ }
29
+ /**
30
+ * Policy evaluator type (avoids circular dependency on full init).
31
+ * Use TelemetryPolicyEvaluator from @superblocksteam/telemetry for policy-aware attribute filtering.
32
+ */
33
+ export type TracedSocketPolicyEvaluator = {
34
+ evaluate: (tier: TelemetryTier) => {
35
+ export: boolean;
36
+ };
37
+ };
38
+ /**
39
+ * Configuration options for TracedSocket.
40
+ *
41
+ * Supports both server (HTTP upgrade with requestHeaders) and client/dev (tracer-only) use cases
42
+ * for a single consolidated implementation per W3C context propagation epic.
43
+ */
44
+ export interface TracedSocketConfig {
45
+ /** Request headers from the WebSocket upgrade request (for W3C trace context extraction). Defaults to {}. */
46
+ requestHeaders?: IncomingHttpHeaders;
47
+ /** Tracer instance. Defaults to trace.getTracer("superblocks-ws", "0.0.0"). */
48
+ tracer?: Tracer;
49
+ /** Policy evaluator for tier-aware attribute filtering (e.g. from getTelemetryInstance()). */
50
+ policyEvaluator?: TracedSocketPolicyEvaluator;
51
+ /** Optional error handler to get HTTP status from errors */
52
+ getResponseMetaByError?: (error: Error, logger: PinoLogger) => {
53
+ status: number;
54
+ message: string;
55
+ };
56
+ }
57
+ /**
58
+ * Socket options passed to ISocket.
59
+ */
60
+ export interface TracedSocketOptions {
61
+ onClose: (event: {
62
+ code: number;
63
+ reason: string;
64
+ }) => void;
65
+ timeouts?: SocketTimeouts;
66
+ logger?: {
67
+ error: (message?: string) => void;
68
+ info: (message?: string) => void;
69
+ warn: (message?: string) => void;
70
+ };
71
+ }
72
+ /**
73
+ * TracedSocket extends ISocket to add OpenTelemetry tracing capabilities.
74
+ *
75
+ * We override decorateToSend so that outbound request messages carry W3C
76
+ * traceparent/tracestate, enabling trace continuity for both inbound and
77
+ * outbound use (server and vite-plugin-file-sync).
78
+ */
79
+ export declare class TracedSocket<ImplementedMethods, CallableMethods, RequestContext extends RequestContextBase> extends ISocket<ImplementedMethods, CallableMethods, RequestContext> {
80
+ private activeSpanByRequestId;
81
+ private middlewareSpanByReqId;
82
+ private lastActiveSpan;
83
+ private readonly requestHeaders;
84
+ private readonly tracer;
85
+ private readonly policyEvaluator?;
86
+ private readonly setHttpStatusFromError;
87
+ constructor(ws: WebSocketLike, requestHandlers: MethodHandlers<ImplementedMethods, CallableMethods, RequestContext>, globalMiddlewares: GenericMiddleware<CallableMethods, RequestContext>[], config: TracedSocketConfig, options: TracedSocketOptions);
88
+ /**
89
+ * Injects W3C trace context (traceparent/tracestate) into outbound request messages
90
+ * so that receiver-side spans can be linked. Used for both response paths and
91
+ * outbound calls (e.g. vite-plugin callEditorClients/callLibraryClients, server-initiated socket.call.*).
92
+ */
93
+ protected decorateToSend(message: SocketMessage): SocketMessage;
94
+ protected callHandler<Params, Result, CallableMethodsInner, RequestContextInner extends RequestContextBase>(handler: MethodHandler<Params, Result, CallableMethodsInner, RequestContextInner>, params: Params, ctx: RequestContextInner, client: ISocketClient<CallableMethodsInner>, next: () => Promise<Result>): Promise<Result>;
95
+ /**
96
+ * Extract parent trace context from HTTP upgrade request headers (W3C Trace Context).
97
+ * Enables trace continuity from HTTP → WebSocket per epic-c2-context-propagation.
98
+ */
99
+ private extractParentContext;
100
+ /**
101
+ * Whether to attach Tier 1 attributes (e.g. user email) to spans.
102
+ * Attach PII when Tier 1 is exported (e.g. CLOUD: all tiers go to Superblocks-owned infra).
103
+ * Omit PII when Tier 1 is local-only (e.g. CLOUD_PREM: Tier 2 export must not contain PII).
104
+ * When there is no policy evaluator, do not attach Tier 1 (safe default for PII).
105
+ */
106
+ private shouldAttachTier1Attributes;
107
+ /**
108
+ * Placeholder for Tier 1 attributes when omitted. Call only when shouldAttachTier1Attributes() is false.
109
+ * Distinguishes: policy evaluator present but Tier 1 not allowed vs no policy evaluator provided.
110
+ */
111
+ private getTier1OmittedPlaceholder;
112
+ protected handleMessage(message: SocketMessage): Promise<void>;
113
+ request<Params, Result>(method: string, params: Params, authorization?: string): Promise<Result>;
114
+ protected respond<Result>(requestId: number, result: Result): void;
115
+ protected respondError(requestId: number, error: SocketError, exception?: Error): void;
116
+ private addEvent;
117
+ close(reason?: string): void;
118
+ }
119
+ export {};
120
+ //# sourceMappingURL=traced-socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traced-socket.d.ts","sourceRoot":"","sources":["../../src/node/traced-socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,334 @@
1
+ /**
2
+ * TracedSocket for WebSocket connections with OpenTelemetry tracing.
3
+ *
4
+ * This is a generic implementation that can be used across services.
5
+ * Server-specific behavior (like error handling) is injected via callbacks.
6
+ */
7
+ import { ROOT_CONTEXT, SpanKind, SpanStatusCode, context as otelCtx, propagation, trace, } from "@opentelemetry/api";
8
+ import { SEMATTRS_MESSAGING_DESTINATION_KIND, SEMATTRS_MESSAGING_SYSTEM, } from "@opentelemetry/semantic-conventions";
9
+ import { ISocket, OBS_TAG_HTTP_ROUTE, OBS_TAG_APPLICATION_ID, OBS_TAG_BRANCH, OBS_TAG_API_ID, OBS_TAG_COMMIT_ID, OBS_TAG_HTTP_STATUS_CODE, OBS_SOCKET_STATUS_CODE, OBS_TAG_USER_EMAIL, OBS_TAG_ORG_ID, OBS_TAG_USER_TYPE, sanitizeError, } from "@superblocksteam/shared";
10
+ import { TelemetryTier } from "../types/policy.js";
11
+ /**
12
+ * Placeholder values for Tier 1 attributes (user email, user type) when omitted.
13
+ * The value indicates why they were redacted (policy said no vs no policy evaluator provided).
14
+ */
15
+ const TIER1_OMITTED_BY_POLICY = "[redacted_by_policy]"; // Policy said no
16
+ const TIER1_OMITTED_NO_POLICY = "[redacted_no_policy]"; // No policy evaluator provided, safe default for PII
17
+ // Helper to cast ISocket's logger to pino-compatible logger
18
+ const asPinoLogger = (logger) => logger;
19
+ // Helper to check if a value is a Promise
20
+ const isPromise = (value) => {
21
+ return (value !== null &&
22
+ typeof value === "object" &&
23
+ "then" in value &&
24
+ typeof value.then === "function");
25
+ };
26
+ // End span with proper error handling
27
+ const endSpan = (traced, span, logger, setHttpStatusFromError) => {
28
+ try {
29
+ const result = traced();
30
+ if (isPromise(result)) {
31
+ return Promise.resolve(result)
32
+ .catch((err) => {
33
+ setHttpStatusFromError(span, typeof err === "string" ? new Error(err) : err, logger);
34
+ throw err;
35
+ })
36
+ .finally(() => span.end());
37
+ }
38
+ else {
39
+ span.end();
40
+ return result;
41
+ }
42
+ }
43
+ catch (error) {
44
+ setHttpStatusFromError(span, error, logger);
45
+ span.end();
46
+ throw error;
47
+ }
48
+ };
49
+ /**
50
+ * TracedSocket extends ISocket to add OpenTelemetry tracing capabilities.
51
+ *
52
+ * We override decorateToSend so that outbound request messages carry W3C
53
+ * traceparent/tracestate, enabling trace continuity for both inbound and
54
+ * outbound use (server and vite-plugin-file-sync).
55
+ */
56
+ export class TracedSocket extends ISocket {
57
+ activeSpanByRequestId = new Map();
58
+ middlewareSpanByReqId = new Map();
59
+ lastActiveSpan;
60
+ requestHeaders;
61
+ tracer;
62
+ policyEvaluator;
63
+ setHttpStatusFromError;
64
+ constructor(ws, requestHandlers, globalMiddlewares, config, options) {
65
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
+ super(ws, requestHandlers, globalMiddlewares, options);
67
+ this.requestHeaders = config.requestHeaders ?? {};
68
+ this.tracer = config.tracer ?? trace.getTracer("superblocks-ws", "0.0.0");
69
+ this.policyEvaluator = config.policyEvaluator;
70
+ // Create error handler function
71
+ this.setHttpStatusFromError = (span, error, logger) => {
72
+ let status = 500;
73
+ if (config.getResponseMetaByError) {
74
+ const respMeta = config.getResponseMetaByError(error, logger);
75
+ status = respMeta.status;
76
+ }
77
+ span.setAttribute(OBS_TAG_HTTP_STATUS_CODE, status);
78
+ span.recordException(sanitizeError(error));
79
+ span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
80
+ };
81
+ // Log WebSocket connection establishment (ws.host is "unknown" when no upgrade headers, e.g. vite-plugin-file-sync)
82
+ asPinoLogger(this.logger).info({
83
+ "ws.event": "connection_established",
84
+ "ws.host": this.requestHeaders["host"] ?? "unknown",
85
+ }, "WebSocket connection established");
86
+ }
87
+ /**
88
+ * Injects W3C trace context (traceparent/tracestate) into outbound request messages
89
+ * so that receiver-side spans can be linked. Used for both response paths and
90
+ * outbound calls (e.g. vite-plugin callEditorClients/callLibraryClients, server-initiated socket.call.*).
91
+ */
92
+ decorateToSend(message) {
93
+ if (!message.request) {
94
+ return message;
95
+ }
96
+ if (message.request.traceparent || message.request.tracestate) {
97
+ return message;
98
+ }
99
+ propagation.inject(otelCtx.active(), message.request);
100
+ return message;
101
+ }
102
+ async callHandler(handler, params, ctx, client, next) {
103
+ let currentContext = otelCtx.active();
104
+ const middleWareSpan = this.middlewareSpanByReqId.get(ctx.requestId);
105
+ const activeSpan = this.activeSpanByRequestId.get(ctx.requestId);
106
+ // End middleware span since callHandler is called recursively
107
+ if (middleWareSpan) {
108
+ middleWareSpan.end();
109
+ if (activeSpan) {
110
+ currentContext = trace.setSpan(otelCtx.active(), activeSpan);
111
+ }
112
+ }
113
+ // After first (authHandler) these values will be set
114
+ const src = ctx;
115
+ const user = src.user;
116
+ const organization = src.organization;
117
+ if (this.lastActiveSpan && (user || organization)) {
118
+ if (this.shouldAttachTier1Attributes()) {
119
+ this.lastActiveSpan.setAttribute(OBS_TAG_USER_EMAIL, user?.email ?? "");
120
+ this.lastActiveSpan.setAttribute(OBS_TAG_USER_TYPE, user?.getUserType?.() ?? "");
121
+ }
122
+ else {
123
+ const placeholder = this.getTier1OmittedPlaceholder();
124
+ this.lastActiveSpan.setAttribute(OBS_TAG_USER_EMAIL, placeholder);
125
+ this.lastActiveSpan.setAttribute(OBS_TAG_USER_TYPE, placeholder);
126
+ }
127
+ this.lastActiveSpan.setAttribute(OBS_TAG_ORG_ID, organization?.id ?? "");
128
+ }
129
+ let result;
130
+ const paramsObj = params;
131
+ await otelCtx.with(currentContext, async () => {
132
+ await this.tracer.startActiveSpan(`WS HANDLER ${handler.name === "" ? ctx.method : handler.name}`, {
133
+ attributes: (() => {
134
+ const attrs = {
135
+ [SEMATTRS_MESSAGING_SYSTEM]: "ws",
136
+ [SEMATTRS_MESSAGING_DESTINATION_KIND]: "websocket",
137
+ [OBS_TAG_ORG_ID]: src.organization?.id ?? "",
138
+ [OBS_TAG_APPLICATION_ID]: String(paramsObj?.["applicationId"] ?? src.jwtClaims?.app_id ?? ""),
139
+ [OBS_TAG_API_ID]: String(paramsObj?.["apiId"] ?? ""),
140
+ [OBS_TAG_BRANCH]: String(paramsObj?.["branch"] ?? paramsObj?.["branchName"] ?? ""),
141
+ [OBS_TAG_COMMIT_ID]: String(paramsObj?.["commitId"] ?? ""),
142
+ };
143
+ if (this.shouldAttachTier1Attributes()) {
144
+ attrs[OBS_TAG_USER_EMAIL] = user?.email ?? "";
145
+ attrs[OBS_TAG_USER_TYPE] = user?.getUserType?.() ?? "";
146
+ }
147
+ else {
148
+ const placeholder = this.getTier1OmittedPlaceholder();
149
+ attrs[OBS_TAG_USER_EMAIL] = placeholder;
150
+ attrs[OBS_TAG_USER_TYPE] = placeholder;
151
+ }
152
+ return attrs;
153
+ })(),
154
+ kind: SpanKind.SERVER,
155
+ }, async (span) => {
156
+ this.middlewareSpanByReqId.set(ctx.requestId, span);
157
+ result = (await endSpan(() => super.callHandler(handler, params, ctx, client, next), span, asPinoLogger(this.logger), this.setHttpStatusFromError));
158
+ this.middlewareSpanByReqId.delete(ctx.requestId);
159
+ });
160
+ });
161
+ return result;
162
+ }
163
+ /**
164
+ * Extract parent trace context from HTTP upgrade request headers (W3C Trace Context).
165
+ * Enables trace continuity from HTTP → WebSocket per epic-c2-context-propagation.
166
+ */
167
+ extractParentContext() {
168
+ return propagation.extract(ROOT_CONTEXT, this.requestHeaders);
169
+ }
170
+ /**
171
+ * Whether to attach Tier 1 attributes (e.g. user email) to spans.
172
+ * Attach PII when Tier 1 is exported (e.g. CLOUD: all tiers go to Superblocks-owned infra).
173
+ * Omit PII when Tier 1 is local-only (e.g. CLOUD_PREM: Tier 2 export must not contain PII).
174
+ * When there is no policy evaluator, do not attach Tier 1 (safe default for PII).
175
+ */
176
+ shouldAttachTier1Attributes() {
177
+ if (!this.policyEvaluator) {
178
+ // It's opt-in to attach Tier 1 attributes, so default to false when no policy evaluator is provided.
179
+ return false;
180
+ }
181
+ const decision = this.policyEvaluator.evaluate(TelemetryTier.TIER_1_LOCAL);
182
+ return decision.export;
183
+ }
184
+ /**
185
+ * Placeholder for Tier 1 attributes when omitted. Call only when shouldAttachTier1Attributes() is false.
186
+ * Distinguishes: policy evaluator present but Tier 1 not allowed vs no policy evaluator provided.
187
+ */
188
+ getTier1OmittedPlaceholder() {
189
+ return this.policyEvaluator
190
+ ? TIER1_OMITTED_BY_POLICY
191
+ : TIER1_OMITTED_NO_POLICY;
192
+ }
193
+ async handleMessage(message) {
194
+ if (message.request) {
195
+ const spanName = message.request.method;
196
+ const requestId = message.request.id;
197
+ const payload = message.request.payload;
198
+ const logData = {
199
+ "ws.event": "request_received",
200
+ "ws.method": spanName,
201
+ "ws.request_id": requestId,
202
+ "ws.host": this.requestHeaders["host"] ?? "unknown",
203
+ };
204
+ if (payload?.["applicationId"]) {
205
+ logData[OBS_TAG_APPLICATION_ID] = String(payload["applicationId"]);
206
+ }
207
+ if (payload?.["apiId"]) {
208
+ logData[OBS_TAG_API_ID] = String(payload["apiId"]);
209
+ }
210
+ if (payload?.["branch"] || payload?.["branchName"]) {
211
+ logData[OBS_TAG_BRANCH] = String(payload["branch"] ?? payload["branchName"]);
212
+ }
213
+ if (payload?.["commitId"]) {
214
+ logData[OBS_TAG_COMMIT_ID] = String(payload["commitId"]);
215
+ }
216
+ asPinoLogger(this.logger).info(logData, `WebSocket request: ${spanName}`);
217
+ // W3C context: first from HTTP upgrade, then from message (so message traceparent can link)
218
+ const upgradeContext = this.extractParentContext();
219
+ const messageContext = propagation.extract(upgradeContext, message.request);
220
+ await otelCtx.with(messageContext, async () => await this.tracer.startActiveSpan(`WS SERVER ${spanName}`, {
221
+ attributes: (() => {
222
+ const attrs = {
223
+ [SEMATTRS_MESSAGING_SYSTEM]: "ws",
224
+ [SEMATTRS_MESSAGING_DESTINATION_KIND]: "websocket",
225
+ [OBS_TAG_HTTP_ROUTE]: spanName,
226
+ };
227
+ if (payload?.["applicationId"]) {
228
+ attrs[OBS_TAG_APPLICATION_ID] = String(payload["applicationId"]);
229
+ }
230
+ if (payload?.["apiId"]) {
231
+ attrs[OBS_TAG_API_ID] = String(payload["apiId"]);
232
+ }
233
+ if (payload?.["branch"] || payload?.["branchName"]) {
234
+ attrs[OBS_TAG_BRANCH] = String(payload["branch"] ?? payload["branchName"]);
235
+ }
236
+ if (payload?.["commitId"]) {
237
+ attrs[OBS_TAG_COMMIT_ID] = String(payload["commitId"]);
238
+ }
239
+ return attrs;
240
+ })(),
241
+ kind: SpanKind.SERVER,
242
+ }, async (span) => {
243
+ this.lastActiveSpan = span;
244
+ this.activeSpanByRequestId.set(requestId, span);
245
+ const result = await endSpan(() => super.handleMessage(message), span, asPinoLogger(this.logger), this.setHttpStatusFromError);
246
+ this.activeSpanByRequestId.delete(requestId);
247
+ return result;
248
+ }));
249
+ }
250
+ else if (message.response) {
251
+ this.addEvent("ws.received-response", {
252
+ ["ws.response.id"]: message.response.id,
253
+ });
254
+ return await super.handleMessage(message);
255
+ }
256
+ }
257
+ request(method, params, authorization) {
258
+ return this.tracer.startActiveSpan(`WS CLIENT ${method}`, (span) => {
259
+ this.addEvent("ws.send-request", {
260
+ ["ws.request.method"]: method,
261
+ ["ws.request.id"]: this.nxtRequestId,
262
+ });
263
+ const result = super.request(method, params, authorization);
264
+ span.end();
265
+ return result;
266
+ });
267
+ }
268
+ respond(requestId, result) {
269
+ this.addEvent("ws.send-response", { ["ws.response.id"]: requestId });
270
+ // Using http status codes so that our existing monitors can work with minimum change
271
+ const resultObj = result;
272
+ if (this.lastActiveSpan &&
273
+ resultObj["responseMeta"]?.status !== undefined) {
274
+ this.lastActiveSpan.setAttribute(OBS_TAG_HTTP_STATUS_CODE, resultObj["responseMeta"].status);
275
+ }
276
+ // Log successful WebSocket response
277
+ asPinoLogger(this.logger).info({
278
+ "ws.event": "response_sent",
279
+ "ws.request_id": requestId,
280
+ "ws.status": resultObj["responseMeta"]?.status || 200,
281
+ "ws.response_size": (() => {
282
+ try {
283
+ return JSON.stringify(result).length;
284
+ }
285
+ catch {
286
+ return -1;
287
+ }
288
+ })(),
289
+ "ws.host": this.requestHeaders["host"] || "unknown",
290
+ }, `WebSocket response sent for request ${requestId}`);
291
+ return super.respond(requestId, result);
292
+ }
293
+ respondError(requestId, error, exception) {
294
+ this.addEvent("ws.send-error", { ["ws.response.id"]: requestId });
295
+ if (this.lastActiveSpan) {
296
+ this.setHttpStatusFromError(this.lastActiveSpan, exception ?? new Error(error.message), asPinoLogger(this.logger));
297
+ this.lastActiveSpan.setAttribute(OBS_SOCKET_STATUS_CODE, error.code);
298
+ }
299
+ asPinoLogger(this.logger).error({
300
+ "ws.event": "error_response",
301
+ "ws.request_id": requestId,
302
+ "ws.error_code": error.code,
303
+ "ws.error_message": error.message,
304
+ "ws.exception_type": exception?.constructor.name,
305
+ "ws.exception_message": exception?.message,
306
+ "ws.host": this.requestHeaders["host"] || "unknown",
307
+ error: exception || error,
308
+ }, `WebSocket error for request ${requestId}: ${error.message}`);
309
+ return super.respondError(requestId, error, exception);
310
+ }
311
+ addEvent(eventName, attributes) {
312
+ if (this.lastActiveSpan) {
313
+ this.lastActiveSpan.addEvent(eventName, attributes, new Date());
314
+ }
315
+ }
316
+ close(reason) {
317
+ asPinoLogger(this.logger).info({
318
+ "ws.event": "connection_closed",
319
+ "ws.close_reason": reason || "normal",
320
+ "ws.host": this.requestHeaders["host"] || "unknown",
321
+ }, `WebSocket connection closed: ${reason || "normal"}`);
322
+ for (const span of this.middlewareSpanByReqId.values()) {
323
+ span.end();
324
+ }
325
+ this.middlewareSpanByReqId = new Map();
326
+ for (const span of this.activeSpanByRequestId.values()) {
327
+ span.end();
328
+ }
329
+ this.activeSpanByRequestId = new Map();
330
+ this.lastActiveSpan = undefined;
331
+ super.close(reason);
332
+ }
333
+ }
334
+ //# sourceMappingURL=traced-socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traced-socket.js","sourceRoot":"","sources":["../../src/node/traced-socket.ts"],"names":[],"mappings":"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"}