@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,43 @@
1
+ import type { Context } from "@opentelemetry/api";
2
+ import type { LogRecordProcessor, SdkLogRecord } from "@opentelemetry/sdk-logs";
3
+ import type { ReadableSpan, Span, SpanProcessor } from "@opentelemetry/sdk-trace-base";
4
+ /**
5
+ * Wraps a span processor and stamps caller-provided attributes onto every span
6
+ * at start.
7
+ *
8
+ * This exists for attributes that are only known AFTER the SDK is initialized —
9
+ * e.g. the application/user/org identity a dev-server learns at connect time,
10
+ * when the SDK must already be running to instrument startup. Rather than
11
+ * re-initializing the SDK (which would churn instrumentation), the caller passes
12
+ * a getter that returns the current identity, and each span picks it up on start.
13
+ *
14
+ * Override semantics: `onStart` runs after creation-time attributes are applied,
15
+ * so a dynamic attribute overwrites any same-key attribute passed to `startSpan`.
16
+ * Attributes set on the span after creation still overwrite the dynamic value.
17
+ */
18
+ export declare class DynamicAttributeSpanProcessor implements SpanProcessor {
19
+ private readonly inner;
20
+ private readonly attributes;
21
+ constructor(inner: SpanProcessor, attributes: () => Record<string, string>);
22
+ onStart(span: Span, parentContext: Context): void;
23
+ onEnd(span: ReadableSpan): void;
24
+ forceFlush(): Promise<void>;
25
+ shutdown(): Promise<void>;
26
+ }
27
+ /**
28
+ * Log-record twin of {@link DynamicAttributeSpanProcessor}: stamps the same
29
+ * late-known identity onto every exported log record. Without it, a service
30
+ * whose SDK started before identity was known (the dev-server preload) would
31
+ * export logs missing the application/user/org attributes that spans carry.
32
+ * Same override semantics as the span twin: dynamic attributes win over
33
+ * same-key attributes already on the record at emit time.
34
+ */
35
+ export declare class DynamicAttributeLogRecordProcessor implements LogRecordProcessor {
36
+ private readonly inner;
37
+ private readonly attributes;
38
+ constructor(inner: LogRecordProcessor, attributes: () => Record<string, string>);
39
+ onEmit(logRecord: SdkLogRecord, context?: Context): void;
40
+ forceFlush(): Promise<void>;
41
+ shutdown(): Promise<void>;
42
+ }
43
+ //# sourceMappingURL=dynamic-attribute-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-attribute-processor.d.ts","sourceRoot":"","sources":["../../src/node/dynamic-attribute-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EACV,YAAY,EACZ,IAAI,EACJ,aAAa,EACd,MAAM,+BAA+B,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,qBAAa,6BAA8B,YAAW,aAAa;IAE/D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAG3D,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAUjD,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAI/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAG1B;AAED;;;;;;;GAOG;AACH,qBAAa,kCAAmC,YAAW,kBAAkB;IAEzE,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,KAAK,EAAE,kBAAkB,EACzB,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAG3D,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAUxD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAG1B"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Wraps a span processor and stamps caller-provided attributes onto every span
3
+ * at start.
4
+ *
5
+ * This exists for attributes that are only known AFTER the SDK is initialized —
6
+ * e.g. the application/user/org identity a dev-server learns at connect time,
7
+ * when the SDK must already be running to instrument startup. Rather than
8
+ * re-initializing the SDK (which would churn instrumentation), the caller passes
9
+ * a getter that returns the current identity, and each span picks it up on start.
10
+ *
11
+ * Override semantics: `onStart` runs after creation-time attributes are applied,
12
+ * so a dynamic attribute overwrites any same-key attribute passed to `startSpan`.
13
+ * Attributes set on the span after creation still overwrite the dynamic value.
14
+ */
15
+ export class DynamicAttributeSpanProcessor {
16
+ inner;
17
+ attributes;
18
+ constructor(inner, attributes) {
19
+ this.inner = inner;
20
+ this.attributes = attributes;
21
+ }
22
+ onStart(span, parentContext) {
23
+ // Telemetry must never break span creation; a bad getter is swallowed.
24
+ try {
25
+ span.setAttributes(this.attributes());
26
+ }
27
+ catch {
28
+ // ignore
29
+ }
30
+ this.inner.onStart(span, parentContext);
31
+ }
32
+ onEnd(span) {
33
+ this.inner.onEnd(span);
34
+ }
35
+ forceFlush() {
36
+ return this.inner.forceFlush();
37
+ }
38
+ shutdown() {
39
+ return this.inner.shutdown();
40
+ }
41
+ }
42
+ /**
43
+ * Log-record twin of {@link DynamicAttributeSpanProcessor}: stamps the same
44
+ * late-known identity onto every exported log record. Without it, a service
45
+ * whose SDK started before identity was known (the dev-server preload) would
46
+ * export logs missing the application/user/org attributes that spans carry.
47
+ * Same override semantics as the span twin: dynamic attributes win over
48
+ * same-key attributes already on the record at emit time.
49
+ */
50
+ export class DynamicAttributeLogRecordProcessor {
51
+ inner;
52
+ attributes;
53
+ constructor(inner, attributes) {
54
+ this.inner = inner;
55
+ this.attributes = attributes;
56
+ }
57
+ onEmit(logRecord, context) {
58
+ // Telemetry must never break log emission; a bad getter is swallowed.
59
+ try {
60
+ logRecord.setAttributes(this.attributes());
61
+ }
62
+ catch {
63
+ // ignore
64
+ }
65
+ this.inner.onEmit(logRecord, context);
66
+ }
67
+ forceFlush() {
68
+ return this.inner.forceFlush();
69
+ }
70
+ shutdown() {
71
+ return this.inner.shutdown();
72
+ }
73
+ }
74
+ //# sourceMappingURL=dynamic-attribute-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-attribute-processor.js","sourceRoot":"","sources":["../../src/node/dynamic-attribute-processor.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,6BAA6B;IAErB;IACA;IAFnB,YACmB,KAAoB,EACpB,UAAwC;QADxC,UAAK,GAAL,KAAK,CAAe;QACpB,eAAU,GAAV,UAAU,CAA8B;IACxD,CAAC;IAEJ,OAAO,CAAC,IAAU,EAAE,aAAsB;QACxC,uEAAuE;QACvE,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAkB;QACtB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,kCAAkC;IAE1B;IACA;IAFnB,YACmB,KAAyB,EACzB,UAAwC;QADxC,UAAK,GAAL,KAAK,CAAoB;QACzB,eAAU,GAAV,UAAU,CAA8B;IACxD,CAAC;IAEJ,MAAM,CAAC,SAAuB,EAAE,OAAiB;QAC/C,sEAAsE;QACtE,IAAI,CAAC;YACH,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Resilient Exporter
3
+ *
4
+ * Wrapper that ensures Tier 2/3 export failures never block core request paths.
5
+ * Export failures are observable via metrics, not via blocking or exceptions.
6
+ */
7
+ import { ExportResult } from "@opentelemetry/core";
8
+ import type { SpanExporter, ReadableSpan } from "@opentelemetry/sdk-trace-base";
9
+ /**
10
+ * Minimal logger interface for structured export-failure logs (e.g. Pino/SafeLogger).
11
+ * When provided, export failures are logged so they can be ingested into Datadog.
12
+ */
13
+ export interface TelemetryExportLogger {
14
+ warn(obj: object, msg?: string): void;
15
+ warn(msg: string): void;
16
+ }
17
+ /**
18
+ * Configuration for the resilient exporter.
19
+ */
20
+ export interface ResilientExporterConfig {
21
+ /** Underlying exporter to wrap */
22
+ delegate: SpanExporter;
23
+ /** Max items to buffer before dropping (default: 2048) */
24
+ maxQueueSize?: number;
25
+ /** Export timeout in ms (default: 30000) */
26
+ exportTimeoutMs?: number;
27
+ /** Callback when items are dropped due to backpressure */
28
+ onDrop?: (count: number, reason: "queue_full" | "export_failed" | "timeout") => void;
29
+ /**
30
+ * Optional structured logger for export failures (e.g. safe logger).
31
+ * When set, export errors are logged here so they are ingested into Datadog.
32
+ */
33
+ logger?: TelemetryExportLogger;
34
+ }
35
+ /**
36
+ * Metrics exposed by the resilient exporter.
37
+ */
38
+ export interface ResilientExporterMetrics {
39
+ /** Total spans dropped due to backpressure or failure */
40
+ dropped: number;
41
+ /** Current queue size */
42
+ queued: number;
43
+ /** Total export failures */
44
+ failures: number;
45
+ }
46
+ /**
47
+ * Resilient exporter wrapper that:
48
+ * - Drops spans when queue is full (never blocks)
49
+ * - Catches export failures and emits metrics
50
+ * - Times out stalled exports
51
+ *
52
+ * CRITICAL: Telemetry export must be fire-and-forget from the application's perspective.
53
+ * Export failures should be observable via metrics, not via blocking or exceptions.
54
+ */
55
+ export declare class ResilientExporter implements SpanExporter {
56
+ private readonly delegate;
57
+ private readonly maxQueueSize;
58
+ private readonly exportTimeoutMs;
59
+ private readonly onDrop;
60
+ private readonly logger;
61
+ private queuedCount;
62
+ private droppedCount;
63
+ private exportFailures;
64
+ private shuttingDown;
65
+ constructor(config: ResilientExporterConfig);
66
+ /**
67
+ * Export spans with resilient error handling.
68
+ *
69
+ * IMPORTANT: Always returns SUCCESS to caller - export failures are
70
+ * observable via metrics, not via the result callback.
71
+ */
72
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
73
+ /**
74
+ * Shutdown the underlying exporter.
75
+ * Marks exporter as shutting down to reject new exports.
76
+ */
77
+ shutdown(): Promise<void>;
78
+ /**
79
+ * Force flush the underlying exporter.
80
+ */
81
+ forceFlush(): Promise<void>;
82
+ /**
83
+ * Get current metrics for observability.
84
+ */
85
+ getMetrics(): ResilientExporterMetrics;
86
+ /**
87
+ * Reset metrics (for testing).
88
+ */
89
+ resetMetrics(): void;
90
+ }
91
+ //# sourceMappingURL=resilient-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilient-exporter.d.ts","sourceRoot":"","sources":["../../../src/node/exporters/resilient-exporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,SAAS,KAC/C,IAAI,CAAC;IACV;;;OAGG;IACH,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAGb;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAE3D,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,uBAAuB;IAQ3C;;;;;OAKG;IACH,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI;IAiEP;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACH,UAAU,IAAI,wBAAwB;IAQtC;;OAEG;IACH,YAAY,IAAI,IAAI;CAIrB"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Resilient Exporter
3
+ *
4
+ * Wrapper that ensures Tier 2/3 export failures never block core request paths.
5
+ * Export failures are observable via metrics, not via blocking or exceptions.
6
+ */
7
+ import { ExportResultCode } from "@opentelemetry/core";
8
+ /**
9
+ * Resilient exporter wrapper that:
10
+ * - Drops spans when queue is full (never blocks)
11
+ * - Catches export failures and emits metrics
12
+ * - Times out stalled exports
13
+ *
14
+ * CRITICAL: Telemetry export must be fire-and-forget from the application's perspective.
15
+ * Export failures should be observable via metrics, not via blocking or exceptions.
16
+ */
17
+ export class ResilientExporter {
18
+ delegate;
19
+ maxQueueSize;
20
+ exportTimeoutMs;
21
+ onDrop;
22
+ logger;
23
+ queuedCount = 0;
24
+ droppedCount = 0;
25
+ exportFailures = 0;
26
+ shuttingDown = false;
27
+ constructor(config) {
28
+ this.delegate = config.delegate;
29
+ this.maxQueueSize = config.maxQueueSize ?? 2048;
30
+ this.exportTimeoutMs = config.exportTimeoutMs ?? 30000;
31
+ this.onDrop = config.onDrop ?? (() => { });
32
+ this.logger = config.logger;
33
+ }
34
+ /**
35
+ * Export spans with resilient error handling.
36
+ *
37
+ * IMPORTANT: Always returns SUCCESS to caller - export failures are
38
+ * observable via metrics, not via the result callback.
39
+ */
40
+ export(spans, resultCallback) {
41
+ // Don't accept new exports during shutdown
42
+ if (this.shuttingDown) {
43
+ resultCallback({ code: ExportResultCode.SUCCESS });
44
+ return;
45
+ }
46
+ // Check backpressure - drop if queue is full
47
+ if (this.queuedCount + spans.length > this.maxQueueSize) {
48
+ this.droppedCount += spans.length;
49
+ this.onDrop(spans.length, "queue_full");
50
+ // Still return success - don't block the caller
51
+ resultCallback({ code: ExportResultCode.SUCCESS });
52
+ return;
53
+ }
54
+ this.queuedCount += spans.length;
55
+ let completed = false;
56
+ // Wrap with timeout
57
+ const timeoutId = setTimeout(() => {
58
+ if (completed)
59
+ return;
60
+ completed = true;
61
+ this.queuedCount -= spans.length;
62
+ this.droppedCount += spans.length;
63
+ this.onDrop(spans.length, "timeout");
64
+ resultCallback({ code: ExportResultCode.SUCCESS }); // Don't propagate failure
65
+ }, this.exportTimeoutMs);
66
+ try {
67
+ this.delegate.export(spans, (result) => {
68
+ if (completed)
69
+ return;
70
+ completed = true;
71
+ clearTimeout(timeoutId);
72
+ this.queuedCount -= spans.length;
73
+ if (result.code !== ExportResultCode.SUCCESS) {
74
+ this.exportFailures++;
75
+ this.droppedCount += spans.length;
76
+ this.onDrop(spans.length, "export_failed");
77
+ }
78
+ // Always return success to caller - export failures are observable via metrics
79
+ resultCallback({ code: ExportResultCode.SUCCESS });
80
+ });
81
+ }
82
+ catch (error) {
83
+ if (completed)
84
+ return;
85
+ completed = true;
86
+ clearTimeout(timeoutId);
87
+ this.queuedCount -= spans.length;
88
+ this.exportFailures++;
89
+ this.droppedCount += spans.length;
90
+ this.onDrop(spans.length, "export_failed");
91
+ if (this.logger) {
92
+ this.logger.warn({ err: error, spanCount: spans.length, reason: "export_failed" }, "[Telemetry] Span export threw");
93
+ }
94
+ else {
95
+ console.warn("[Telemetry] Span export threw:", error);
96
+ }
97
+ resultCallback({ code: ExportResultCode.SUCCESS }); // Don't propagate failure
98
+ }
99
+ }
100
+ /**
101
+ * Shutdown the underlying exporter.
102
+ * Marks exporter as shutting down to reject new exports.
103
+ */
104
+ async shutdown() {
105
+ this.shuttingDown = true;
106
+ return this.delegate.shutdown();
107
+ }
108
+ /**
109
+ * Force flush the underlying exporter.
110
+ */
111
+ async forceFlush() {
112
+ return this.delegate.forceFlush?.() ?? Promise.resolve();
113
+ }
114
+ /**
115
+ * Get current metrics for observability.
116
+ */
117
+ getMetrics() {
118
+ return {
119
+ dropped: this.droppedCount,
120
+ queued: this.queuedCount,
121
+ failures: this.exportFailures,
122
+ };
123
+ }
124
+ /**
125
+ * Reset metrics (for testing).
126
+ */
127
+ resetMetrics() {
128
+ this.droppedCount = 0;
129
+ this.exportFailures = 0;
130
+ }
131
+ }
132
+ //# sourceMappingURL=resilient-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilient-exporter.js","sourceRoot":"","sources":["../../../src/node/exporters/resilient-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Node.js Telemetry Bootstrap
3
+ *
4
+ * This is the ONLY approved way to initialize telemetry in Node.js services.
5
+ */
6
+ export { initNodeTelemetry, getTelemetryInstance, isTelemetryInitialized, resetTelemetry, type GetTracerOptions, type NodeTelemetryInstance, } from "./init.js";
7
+ export { isLocalObsMode } from "./local-obs-mode.js";
8
+ export { MetricsClient, type Labels, type CounterHandle, type CounterOptions, type GaugeHandle, type HistogramHandle, type HistogramOptions, } from "./metrics-client.js";
9
+ export { TracedSocket, type TracedSocketConfig, type TracedSocketOptions, } from "./traced-socket.js";
10
+ export { ResilientExporter, type ResilientExporterConfig, type ResilientExporterMetrics, } from "./exporters/resilient-exporter.js";
11
+ export { LogExportMode, PolicyAwareLogProcessor, getLoggingPolicy, getMinimumPinoLevelForDeployment, getMinimumPinoLevelFromLoggingPolicy, parseLogExportMode, type LoggingPolicyConfig, } from "./log-processor.js";
12
+ export { createSafeLogger, redactForbiddenFields, type SafeLoggerLike, } from "./safe-logger.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,aAAa,EACb,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,gCAAgC,EAChC,oCAAoC,EACpC,kBAAkB,EAClB,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Node.js Telemetry Bootstrap
3
+ *
4
+ * This is the ONLY approved way to initialize telemetry in Node.js services.
5
+ */
6
+ export { initNodeTelemetry, getTelemetryInstance, isTelemetryInitialized, resetTelemetry, } from "./init.js";
7
+ export { isLocalObsMode } from "./local-obs-mode.js";
8
+ export { MetricsClient, } from "./metrics-client.js";
9
+ export { TracedSocket, } from "./traced-socket.js";
10
+ export { ResilientExporter, } from "./exporters/resilient-exporter.js";
11
+ export { LogExportMode, PolicyAwareLogProcessor, getLoggingPolicy, getMinimumPinoLevelForDeployment, getMinimumPinoLevelFromLoggingPolicy, parseLogExportMode, } from "./log-processor.js";
12
+ export { createSafeLogger, redactForbiddenFields, } from "./safe-logger.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,GAGf,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,aAAa,GAOd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iBAAiB,GAGlB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,gCAAgC,EAChC,oCAAoC,EACpC,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Node.js Telemetry Bootstrap
3
+ *
4
+ * This is the ONLY approved way to initialize telemetry in Node.js services.
5
+ * Direct NodeSDK usage outside this package is prohibited.
6
+ */
7
+ import { Tracer, Meter } from "@opentelemetry/api";
8
+ import { Logger } from "@opentelemetry/api-logs";
9
+ import { NodeSDK } from "@opentelemetry/sdk-node";
10
+ import { TelemetryPolicyEvaluator } from "../common/policy-evaluator.js";
11
+ import type { NodeTelemetryConfig } from "../types/index.js";
12
+ import { TelemetryPolicy } from "../types/policy.js";
13
+ import { MetricsClient } from "./metrics-client.js";
14
+ /**
15
+ * Options for {@link NodeTelemetryInstance.getTracer}.
16
+ */
17
+ export interface GetTracerOptions {
18
+ /**
19
+ * Emit the tracer's spans under this service identity (its resource
20
+ * `service.name`, which Datadog maps to LLM-Obs `ml_app`). Omit for the
21
+ * primary service.
22
+ */
23
+ serviceName?: string;
24
+ }
25
+ /**
26
+ * Telemetry instance returned by initNodeTelemetry.
27
+ */
28
+ export interface NodeTelemetryInstance {
29
+ /** The underlying NodeSDK instance (undefined in CI/no-op mode) */
30
+ sdk?: NodeSDK;
31
+ /** Policy evaluator for runtime decisions */
32
+ policyEvaluator: TelemetryPolicyEvaluator;
33
+ /**
34
+ * Get a tracer for the service.
35
+ *
36
+ * Pass `options.serviceName` to emit the tracer's spans under a secondary
37
+ * service identity (its resource `service.name`, which Datadog maps to LLM-Obs
38
+ * `ml_app`) while sharing this SDK's sanitization + export pipeline. Omit it
39
+ * for the primary service. The `options` argument is additive and optional —
40
+ * existing single-argument callers are unaffected. See APPS-5082.
41
+ */
42
+ getTracer: (name?: string, options?: GetTracerOptions) => Tracer;
43
+ /** Get a meter for the service */
44
+ getMeter: (name?: string) => Meter;
45
+ /** Get a logger for the service */
46
+ getLogger: (name?: string) => Logger;
47
+ /** Metrics client for recording counters, gauges, and histograms */
48
+ metricsClient: MetricsClient;
49
+ /** Graceful shutdown */
50
+ shutdown: () => Promise<void>;
51
+ }
52
+ declare global {
53
+ var __superblocksNodeTelemetryInstance: NodeTelemetryInstance | undefined;
54
+ }
55
+ /**
56
+ * Initialize Node.js telemetry with policy enforcement.
57
+ *
58
+ * This is the ONLY approved way to initialize telemetry in Node.js services.
59
+ * Direct NodeSDK usage outside this package is prohibited.
60
+ *
61
+ * @param config - Service configuration
62
+ * @param policy - Telemetry policy (REQUIRED)
63
+ * @returns Telemetry instance with SDK and utilities
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * import { initNodeTelemetry } from '@superblocksteam/telemetry/node';
68
+ * import { getDefaultPolicy, DeploymentType } from '@superblocksteam/shared';
69
+ *
70
+ * const policy = getDefaultPolicy(DeploymentType.CLOUD_PREM);
71
+ * const telemetry = initNodeTelemetry({
72
+ * serviceName: 'my-service',
73
+ * serviceVersion: '1.0.0',
74
+ * environment: 'production',
75
+ * otlpUrl: 'http://localhost:4318',
76
+ * }, policy);
77
+ *
78
+ * const tracer = telemetry.getTracer();
79
+ * ```
80
+ */
81
+ export declare function initNodeTelemetry(config: NodeTelemetryConfig, policy: TelemetryPolicy): NodeTelemetryInstance;
82
+ /**
83
+ * Get the current telemetry instance.
84
+ *
85
+ * @throws Error if not initialized
86
+ */
87
+ export declare function getTelemetryInstance(): NodeTelemetryInstance;
88
+ /**
89
+ * Check if telemetry is initialized.
90
+ */
91
+ export declare function isTelemetryInitialized(): boolean;
92
+ /**
93
+ * Reset telemetry (for testing only).
94
+ * @internal
95
+ */
96
+ export declare function resetTelemetry(): void;
97
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/node/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAS,MAAM,EAAW,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAQ,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAcvD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAOlD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAiB,MAAM,oBAAoB,CAAC;AAYpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOpD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6CAA6C;IAC7C,eAAe,EAAE,wBAAwB,CAAC;IAC1C;;;;;;;;OAQG;IACH,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;IACjE,kCAAkC;IAClC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IACnC,mCAAmC;IACnC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,oEAAoE;IACpE,aAAa,EAAE,aAAa,CAAC;IAC7B,wBAAwB;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AASD,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,kCAAkC,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC3E;AA0GD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,eAAe,GACtB,qBAAqB,CAqPvB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,qBAAqB,CAQ5D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}