@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,80 @@
1
+ /**
2
+ * Test Telemetry Initialization
3
+ *
4
+ * Initialize telemetry for testing with in-memory exporters.
5
+ * No external connections are made.
6
+ */
7
+ import { trace } from "@opentelemetry/api";
8
+ import { TelemetryPolicyEvaluator } from "../common/policy-evaluator.js";
9
+ import type { BaseTelemetryConfig } from "../types/index.js";
10
+ import { InMemorySpanExporter, InMemoryMetricExporter, InMemoryLogExporter } from "./in-memory-exporter.js";
11
+ /**
12
+ * Test telemetry instance with in-memory exporters.
13
+ */
14
+ export interface TestTelemetryInstance {
15
+ /** In-memory span exporter */
16
+ spanExporter: InMemorySpanExporter;
17
+ /** In-memory metric exporter */
18
+ metricExporter: InMemoryMetricExporter;
19
+ /** In-memory log exporter */
20
+ logExporter: InMemoryLogExporter;
21
+ /** Policy evaluator */
22
+ policyEvaluator: TelemetryPolicyEvaluator;
23
+ /** Reset all exporters (call in beforeEach) */
24
+ reset: () => void;
25
+ /** Shutdown (call in afterAll) */
26
+ shutdown: () => Promise<void>;
27
+ }
28
+ /**
29
+ * Initialize telemetry for testing.
30
+ *
31
+ * Uses in-memory exporters, no external connections.
32
+ * Call once per test file, use reset() in beforeEach.
33
+ *
34
+ * @param config - Optional test configuration
35
+ * @returns Test telemetry instance
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * import { initTestTelemetry } from '@superblocksteam/telemetry/testing';
40
+ *
41
+ * describe('MyService', () => {
42
+ * const { spanExporter, reset } = initTestTelemetry();
43
+ *
44
+ * beforeEach(() => reset());
45
+ *
46
+ * it('creates expected spans', async () => {
47
+ * // ... test code ...
48
+ * expect(spanExporter.getSpans()).toHaveLength(1);
49
+ * });
50
+ * });
51
+ * ```
52
+ */
53
+ export declare function initTestTelemetry(config?: Partial<BaseTelemetryConfig>): TestTelemetryInstance;
54
+ /**
55
+ * Get the test telemetry instance.
56
+ *
57
+ * @throws Error if not initialized
58
+ */
59
+ export declare function getTestTelemetryInstance(): TestTelemetryInstance;
60
+ /**
61
+ * Reset the test telemetry (for cleanup between test files).
62
+ */
63
+ export declare function resetTestTelemetry(): Promise<void>;
64
+ /**
65
+ * Get a tracer for tests.
66
+ *
67
+ * @param name - Tracer name
68
+ * @returns Tracer instance
69
+ */
70
+ export declare function getTestTracer(name?: string): ReturnType<typeof trace.getTracer>;
71
+ /**
72
+ * Run a function within a test span.
73
+ * Useful for testing span creation.
74
+ *
75
+ * @param name - Span name
76
+ * @param fn - Function to run
77
+ * @returns Function result
78
+ */
79
+ export declare function withTestSpan<T>(name: string, fn: () => Promise<T> | T): Promise<T>;
80
+ //# sourceMappingURL=test-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-init.d.ts","sourceRoot":"","sources":["../../src/testing/test-init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,YAAY,EAAE,oBAAoB,CAAC;IACnC,gCAAgC;IAChC,cAAc,EAAE,sBAAsB,CAAC;IACvC,6BAA6B;IAC7B,WAAW,EAAE,mBAAmB,CAAC;IACjC,uBAAuB;IACvB,eAAe,EAAE,wBAAwB,CAAC;IAC1C,+CAA+C;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAeD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,qBAAqB,CA2CvB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,qBAAqB,CAOhE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIxD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,SAAS,GACZ,UAAU,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,CAEpC;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CASZ"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Test Telemetry Initialization
3
+ *
4
+ * Initialize telemetry for testing with in-memory exporters.
5
+ * No external connections are made.
6
+ */
7
+ import { trace } from "@opentelemetry/api";
8
+ import { AsyncLocalStorageContextManager } from "@opentelemetry/context-async-hooks";
9
+ import { W3CTraceContextPropagator } from "@opentelemetry/core";
10
+ import { SimpleSpanProcessor } from "@opentelemetry/sdk-trace-base";
11
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
12
+ import { TelemetryPolicyEvaluator } from "../common/policy-evaluator.js";
13
+ import { buildResource } from "../common/resource.js";
14
+ import { CLOUD_DEFAULT_POLICY } from "../types/policy.js";
15
+ import { InMemorySpanExporter, InMemoryMetricExporter, InMemoryLogExporter, } from "./in-memory-exporter.js";
16
+ // Singleton for tests
17
+ let testInstance;
18
+ let tracerProvider;
19
+ /**
20
+ * Default test configuration.
21
+ */
22
+ const DEFAULT_TEST_CONFIG = {
23
+ serviceName: "test-service",
24
+ serviceVersion: "0.0.0-test",
25
+ environment: "test",
26
+ };
27
+ /**
28
+ * Initialize telemetry for testing.
29
+ *
30
+ * Uses in-memory exporters, no external connections.
31
+ * Call once per test file, use reset() in beforeEach.
32
+ *
33
+ * @param config - Optional test configuration
34
+ * @returns Test telemetry instance
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * import { initTestTelemetry } from '@superblocksteam/telemetry/testing';
39
+ *
40
+ * describe('MyService', () => {
41
+ * const { spanExporter, reset } = initTestTelemetry();
42
+ *
43
+ * beforeEach(() => reset());
44
+ *
45
+ * it('creates expected spans', async () => {
46
+ * // ... test code ...
47
+ * expect(spanExporter.getSpans()).toHaveLength(1);
48
+ * });
49
+ * });
50
+ * ```
51
+ */
52
+ export function initTestTelemetry(config) {
53
+ if (testInstance) {
54
+ return testInstance;
55
+ }
56
+ const mergedConfig = { ...DEFAULT_TEST_CONFIG, ...config };
57
+ const resource = buildResource(mergedConfig);
58
+ const spanExporter = new InMemorySpanExporter();
59
+ const metricExporter = new InMemoryMetricExporter();
60
+ const logExporter = new InMemoryLogExporter();
61
+ const policyEvaluator = new TelemetryPolicyEvaluator(CLOUD_DEFAULT_POLICY);
62
+ // Create provider with span processors in constructor (OTEL v2.x API)
63
+ tracerProvider = new NodeTracerProvider({
64
+ resource,
65
+ spanProcessors: [new SimpleSpanProcessor(spanExporter)],
66
+ });
67
+ // Register the provider
68
+ tracerProvider.register({
69
+ propagator: new W3CTraceContextPropagator(),
70
+ contextManager: new AsyncLocalStorageContextManager(),
71
+ });
72
+ testInstance = {
73
+ spanExporter,
74
+ metricExporter,
75
+ logExporter,
76
+ policyEvaluator,
77
+ reset: () => {
78
+ spanExporter.reset();
79
+ metricExporter.reset();
80
+ logExporter.reset();
81
+ },
82
+ shutdown: async () => {
83
+ await tracerProvider?.shutdown();
84
+ testInstance = undefined;
85
+ tracerProvider = undefined;
86
+ },
87
+ };
88
+ return testInstance;
89
+ }
90
+ /**
91
+ * Get the test telemetry instance.
92
+ *
93
+ * @throws Error if not initialized
94
+ */
95
+ export function getTestTelemetryInstance() {
96
+ if (!testInstance) {
97
+ throw new Error("[TestTelemetry] Not initialized. Call initTestTelemetry() first.");
98
+ }
99
+ return testInstance;
100
+ }
101
+ /**
102
+ * Reset the test telemetry (for cleanup between test files).
103
+ */
104
+ export async function resetTestTelemetry() {
105
+ if (testInstance) {
106
+ await testInstance.shutdown();
107
+ }
108
+ }
109
+ /**
110
+ * Get a tracer for tests.
111
+ *
112
+ * @param name - Tracer name
113
+ * @returns Tracer instance
114
+ */
115
+ export function getTestTracer(name = "test") {
116
+ return trace.getTracer(name);
117
+ }
118
+ /**
119
+ * Run a function within a test span.
120
+ * Useful for testing span creation.
121
+ *
122
+ * @param name - Span name
123
+ * @param fn - Function to run
124
+ * @returns Function result
125
+ */
126
+ export async function withTestSpan(name, fn) {
127
+ const tracer = getTestTracer();
128
+ return tracer.startActiveSpan(name, async (span) => {
129
+ try {
130
+ return await fn();
131
+ }
132
+ finally {
133
+ span.end();
134
+ }
135
+ });
136
+ }
137
+ //# sourceMappingURL=test-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-init.js","sourceRoot":"","sources":["../../src/testing/test-init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Telemetry Types
3
+ *
4
+ * Re-exports policy types and config interfaces.
5
+ */
6
+ export * from "./policy.js";
7
+ /**
8
+ * Base configuration for telemetry initialization.
9
+ */
10
+ export interface BaseTelemetryConfig {
11
+ /** Service name (e.g., 'superblocks-server') */
12
+ serviceName: string;
13
+ /** Service version (e.g., '1.0.0') */
14
+ serviceVersion: string;
15
+ /** Deployment environment (e.g., 'production', 'staging', 'development') */
16
+ environment: string;
17
+ /** Additional resource attributes */
18
+ resourceAttributes?: Record<string, string>;
19
+ }
20
+ /**
21
+ * Configuration for keyed HMAC hashing of Tier 2 span attributes (e.g. organization-id).
22
+ * When not provided, hashed attributes are redacted instead of hashed.
23
+ */
24
+ export interface TraceSanitizerHashConfig {
25
+ secretKey: Buffer;
26
+ salt: string;
27
+ algorithm: "sha256" | "sha384" | "sha512";
28
+ outputLengthBytes: number;
29
+ }
30
+ /**
31
+ * Node.js specific telemetry configuration.
32
+ */
33
+ export interface NodeTelemetryConfig extends BaseTelemetryConfig {
34
+ /** OTLP collector URL (e.g., http://localhost:4318) */
35
+ otlpUrl?: string;
36
+ /** Headers sent to each OTLP exporter, such as proxy authentication. */
37
+ otlpHeaders?: Record<string, string> | (() => Promise<Record<string, string>>);
38
+ /** OpenTelemetry instrumentations to enable */
39
+ instrumentations?: unknown[];
40
+ /** Whether to enable metrics collection */
41
+ metricsEnabled?: boolean;
42
+ /** Whether to enable log collection */
43
+ logsEnabled?: boolean;
44
+ /**
45
+ * Optional hash config for Tier 2 trace sanitization (organization-id, session.id, etc.).
46
+ * When omitted, hashed attributes are redacted. For cloud-prem, supply from secrets.
47
+ */
48
+ traceSanitizerHashConfig?: TraceSanitizerHashConfig | null;
49
+ /**
50
+ * Optional structured logger (e.g. safe logger) for telemetry internal messages
51
+ * (e.g. init, span export failures). When set, logs are structured and ingested into Datadog.
52
+ */
53
+ logger?: {
54
+ error?(obj: object, msg?: string): void;
55
+ error?(msg: string): void;
56
+ info?(obj: object, msg?: string): void;
57
+ info?(msg: string): void;
58
+ warn(obj: object, msg?: string): void;
59
+ warn(msg: string): void;
60
+ };
61
+ /**
62
+ * Optional provider for attributes that are only known after telemetry is
63
+ * initialized (e.g. the application/user/org identity a dev-server learns at
64
+ * connect time, when the SDK must already be running to instrument startup).
65
+ * Called on every span start and every log-record emit and merged onto the
66
+ * signal, so late-known identity lands on spans and logs without
67
+ * re-initializing the SDK. Metrics deliberately do not pick it up (identity
68
+ * would multiply time-series cardinality). Omit for a static resource only;
69
+ * the server and other services do not set it.
70
+ */
71
+ dynamicAttributes?: () => Record<string, string>;
72
+ }
73
+ /**
74
+ * Browser specific telemetry configuration.
75
+ */
76
+ export interface BrowserTelemetryConfig extends BaseTelemetryConfig {
77
+ /** OTLP base URL (e.g. "http://localhost:4318"). Signal-specific paths (/v1/traces, /v1/metrics, /v1/logs) are appended automatically. */
78
+ otlpUrl: string;
79
+ /** URL patterns to inject traceparent header into (for cross-origin propagation) */
80
+ propagateTraceUrls?: RegExp[];
81
+ /** URL patterns to skip instrumenting entirely */
82
+ ignoreUrls?: RegExp[];
83
+ }
84
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IAEvB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IAEpB,qCAAqC;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wEAAwE;IACxE,WAAW,CAAC,EACR,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAE5C,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC;IAE7B,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAE3D;;;OAGG;IACH,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxC,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IAEF;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,0IAA0I;IAC1I,OAAO,EAAE,MAAM,CAAC;IAEhB,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Telemetry Types
3
+ *
4
+ * Re-exports policy types and config interfaces.
5
+ */
6
+ export * from "./policy.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Telemetry Policy Types
3
+ *
4
+ * NOTE: In the hybrid tier architecture, the OTEL Collector handles
5
+ * sanitization, hashing, and routing. The SDK just emits full-fidelity data.
6
+ * See obs/otel-collector/config-tiered.yaml for Collector configuration.
7
+ */
8
+ import { DeploymentTypeEnum } from "@superblocksteam/shared";
9
+ export { DeploymentTypeEnum as DeploymentType };
10
+ /**
11
+ * Telemetry tier definitions.
12
+ *
13
+ * Tier 1 (Local): Full fidelity data for debugging. Stored in customer LGTM.
14
+ * Tier 2 (Operational): Sanitized metrics/traces for ops. Exported to Superblocks.
15
+ * Tier 3 (Analytics): AI experience telemetry. Exported with content controls.
16
+ *
17
+ * In the hybrid architecture:
18
+ * - SDK emits all data to the Collector
19
+ * - Collector transforms and routes to appropriate tier pipelines
20
+ * - Tier tagging, hashing, and filtering happen at Collector level
21
+ */
22
+ export declare enum TelemetryTier {
23
+ /** Full fidelity debugging data - prompts, code, tool IO, stack traces */
24
+ TIER_1_LOCAL = "tier_1_local",
25
+ /** Sanitized operational metrics and traces for dashboards/billing */
26
+ TIER_2_OPERATIONAL = "tier_2_operational",
27
+ /** AI experience telemetry - prompts, responses, quality signals (no tool outputs) */
28
+ TIER_3_AI_EXPERIENCE = "tier_3_ai_experience"
29
+ }
30
+ export declare enum EnforcementMode {
31
+ /** Log violations but allow */
32
+ AUDIT = "audit",
33
+ /** Block violations */
34
+ ENFORCE = "enforce"
35
+ }
36
+ /**
37
+ * Tier 3 content export policy for runtime control during incidents.
38
+ */
39
+ export interface Tier3ContentPolicy {
40
+ /** Export AI prompts/responses. Kill switch for incidents. */
41
+ contentExportEnabled: boolean;
42
+ /** Redact detected secrets (JWTs, API keys, PEM blocks) from content */
43
+ secretRedactionEnabled: boolean;
44
+ /** Block export if tool output patterns detected in response */
45
+ toolOutputFilteringEnabled: boolean;
46
+ /** Max prompt length in bytes */
47
+ maxPromptBytes: number;
48
+ /** Max response length in bytes */
49
+ maxResponseBytes: number;
50
+ }
51
+ export interface TierConfig {
52
+ /** Is this tier enabled for local retention? */
53
+ enabled: boolean;
54
+ /** Is this tier enabled for export? */
55
+ exportEnabled: boolean;
56
+ /** Sampling rate for this tier (0.0 - 1.0) */
57
+ sampleRate: number;
58
+ }
59
+ export interface TelemetryPolicy {
60
+ /** Deployment context */
61
+ deploymentType: DeploymentTypeEnum;
62
+ /** Per-tier configuration */
63
+ tiers: {
64
+ [TelemetryTier.TIER_1_LOCAL]: TierConfig;
65
+ [TelemetryTier.TIER_2_OPERATIONAL]: TierConfig;
66
+ [TelemetryTier.TIER_3_AI_EXPERIENCE]: TierConfig;
67
+ };
68
+ /** Tier 3 content export controls (prompts, responses). */
69
+ tier3Content: Tier3ContentPolicy;
70
+ /** Enforcement behavior */
71
+ enforcementMode: EnforcementMode;
72
+ /** Optional org-specific overrides */
73
+ orgOverrides?: Record<string, Partial<TelemetryPolicy>>;
74
+ }
75
+ /** Default Tier 3 content policy (enabled with all guardrails) */
76
+ export declare const TIER3_CONTENT_POLICY_DEFAULT: Tier3ContentPolicy;
77
+ /** Tier 3 content policy: disabled (kill switch) */
78
+ export declare const TIER3_CONTENT_POLICY_DISABLED: Tier3ContentPolicy;
79
+ /**
80
+ * Cloud deployment: all tiers enabled and exported.
81
+ */
82
+ export declare const CLOUD_DEFAULT_POLICY: TelemetryPolicy;
83
+ /**
84
+ * Cloud-Prem deployment: Tier 1 local only, Tier 2/3 exported.
85
+ * Hashing/sanitization handled by OTEL Collector.
86
+ */
87
+ export declare const CLOUD_PREM_DEFAULT_POLICY: TelemetryPolicy;
88
+ /**
89
+ * Get the default policy for a deployment type.
90
+ */
91
+ export declare function getDefaultPolicy(deploymentType: DeploymentTypeEnum): TelemetryPolicy;
92
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/types/policy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,oBAAY,aAAa;IACvB,0EAA0E;IAC1E,YAAY,iBAAiB;IAE7B,sEAAsE;IACtE,kBAAkB,uBAAuB;IAEzC,sFAAsF;IACtF,oBAAoB,yBAAyB;CAC9C;AAED,oBAAY,eAAe;IACzB,+BAA+B;IAC/B,KAAK,UAAU;IACf,uBAAuB;IACvB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,oBAAoB,EAAE,OAAO,CAAC;IAC9B,wEAAwE;IACxE,sBAAsB,EAAE,OAAO,CAAC;IAChC,gEAAgE;IAChE,0BAA0B,EAAE,OAAO,CAAC;IACpC,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,cAAc,EAAE,kBAAkB,CAAC;IAEnC,6BAA6B;IAC7B,KAAK,EAAE;QACL,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;QACzC,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC;QAC/C,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,UAAU,CAAC;KAClD,CAAC;IAEF,2DAA2D;IAC3D,YAAY,EAAE,kBAAkB,CAAC;IAEjC,2BAA2B;IAC3B,eAAe,EAAE,eAAe,CAAC;IAEjC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;CACzD;AAMD,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,EAAE,kBAM1C,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,6BAA6B,EAAE,kBAM3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAqBlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,eAqBvC,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,kBAAkB,GACjC,eAAe,CASjB"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Telemetry Policy Types
3
+ *
4
+ * NOTE: In the hybrid tier architecture, the OTEL Collector handles
5
+ * sanitization, hashing, and routing. The SDK just emits full-fidelity data.
6
+ * See obs/otel-collector/config-tiered.yaml for Collector configuration.
7
+ */
8
+ import { DeploymentTypeEnum } from "@superblocksteam/shared";
9
+ // Re-export DeploymentTypeEnum as DeploymentType for backwards compatibility
10
+ export { DeploymentTypeEnum as DeploymentType };
11
+ /**
12
+ * Telemetry tier definitions.
13
+ *
14
+ * Tier 1 (Local): Full fidelity data for debugging. Stored in customer LGTM.
15
+ * Tier 2 (Operational): Sanitized metrics/traces for ops. Exported to Superblocks.
16
+ * Tier 3 (Analytics): AI experience telemetry. Exported with content controls.
17
+ *
18
+ * In the hybrid architecture:
19
+ * - SDK emits all data to the Collector
20
+ * - Collector transforms and routes to appropriate tier pipelines
21
+ * - Tier tagging, hashing, and filtering happen at Collector level
22
+ */
23
+ export var TelemetryTier;
24
+ (function (TelemetryTier) {
25
+ /** Full fidelity debugging data - prompts, code, tool IO, stack traces */
26
+ TelemetryTier["TIER_1_LOCAL"] = "tier_1_local";
27
+ /** Sanitized operational metrics and traces for dashboards/billing */
28
+ TelemetryTier["TIER_2_OPERATIONAL"] = "tier_2_operational";
29
+ /** AI experience telemetry - prompts, responses, quality signals (no tool outputs) */
30
+ TelemetryTier["TIER_3_AI_EXPERIENCE"] = "tier_3_ai_experience";
31
+ })(TelemetryTier || (TelemetryTier = {}));
32
+ export var EnforcementMode;
33
+ (function (EnforcementMode) {
34
+ /** Log violations but allow */
35
+ EnforcementMode["AUDIT"] = "audit";
36
+ /** Block violations */
37
+ EnforcementMode["ENFORCE"] = "enforce";
38
+ })(EnforcementMode || (EnforcementMode = {}));
39
+ // ============================================================================
40
+ // Default Policies
41
+ // ============================================================================
42
+ /** Default Tier 3 content policy (enabled with all guardrails) */
43
+ export const TIER3_CONTENT_POLICY_DEFAULT = {
44
+ contentExportEnabled: true,
45
+ secretRedactionEnabled: true,
46
+ toolOutputFilteringEnabled: true,
47
+ maxPromptBytes: 32768,
48
+ maxResponseBytes: 65536,
49
+ };
50
+ /** Tier 3 content policy: disabled (kill switch) */
51
+ export const TIER3_CONTENT_POLICY_DISABLED = {
52
+ contentExportEnabled: false,
53
+ secretRedactionEnabled: true,
54
+ toolOutputFilteringEnabled: true,
55
+ maxPromptBytes: 32768,
56
+ maxResponseBytes: 65536,
57
+ };
58
+ /**
59
+ * Cloud deployment: all tiers enabled and exported.
60
+ */
61
+ export const CLOUD_DEFAULT_POLICY = {
62
+ deploymentType: DeploymentTypeEnum.CLOUD,
63
+ tiers: {
64
+ [TelemetryTier.TIER_1_LOCAL]: {
65
+ enabled: true,
66
+ exportEnabled: true,
67
+ sampleRate: 1.0,
68
+ },
69
+ [TelemetryTier.TIER_2_OPERATIONAL]: {
70
+ enabled: true,
71
+ exportEnabled: true,
72
+ sampleRate: 1.0,
73
+ },
74
+ [TelemetryTier.TIER_3_AI_EXPERIENCE]: {
75
+ enabled: true,
76
+ exportEnabled: true,
77
+ sampleRate: 1.0,
78
+ },
79
+ },
80
+ tier3Content: TIER3_CONTENT_POLICY_DEFAULT,
81
+ enforcementMode: EnforcementMode.ENFORCE,
82
+ };
83
+ /**
84
+ * Cloud-Prem deployment: Tier 1 local only, Tier 2/3 exported.
85
+ * Hashing/sanitization handled by OTEL Collector.
86
+ */
87
+ export const CLOUD_PREM_DEFAULT_POLICY = {
88
+ deploymentType: DeploymentTypeEnum.CLOUD_PREM,
89
+ tiers: {
90
+ [TelemetryTier.TIER_1_LOCAL]: {
91
+ enabled: true,
92
+ exportEnabled: false,
93
+ sampleRate: 1.0,
94
+ },
95
+ [TelemetryTier.TIER_2_OPERATIONAL]: {
96
+ enabled: true,
97
+ exportEnabled: true,
98
+ sampleRate: 1.0,
99
+ },
100
+ [TelemetryTier.TIER_3_AI_EXPERIENCE]: {
101
+ enabled: true,
102
+ exportEnabled: true,
103
+ sampleRate: 1.0,
104
+ },
105
+ },
106
+ tier3Content: TIER3_CONTENT_POLICY_DEFAULT,
107
+ enforcementMode: EnforcementMode.ENFORCE,
108
+ };
109
+ /**
110
+ * Get the default policy for a deployment type.
111
+ */
112
+ export function getDefaultPolicy(deploymentType) {
113
+ switch (deploymentType) {
114
+ case DeploymentTypeEnum.CLOUD:
115
+ return CLOUD_DEFAULT_POLICY;
116
+ case DeploymentTypeEnum.CLOUD_PREM:
117
+ return CLOUD_PREM_DEFAULT_POLICY;
118
+ default:
119
+ return CLOUD_DEFAULT_POLICY;
120
+ }
121
+ }
122
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/types/policy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,6EAA6E;AAC7E,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,0EAA0E;IAC1E,8CAA6B,CAAA;IAE7B,sEAAsE;IACtE,0DAAyC,CAAA;IAEzC,sFAAsF;IACtF,8DAA6C,CAAA;AAC/C,CAAC,EATW,aAAa,KAAb,aAAa,QASxB;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,+BAA+B;IAC/B,kCAAe,CAAA;IACf,uBAAuB;IACvB,sCAAmB,CAAA;AACrB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAgDD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,kEAAkE;AAClE,MAAM,CAAC,MAAM,4BAA4B,GAAuB;IAC9D,oBAAoB,EAAE,IAAI;IAC1B,sBAAsB,EAAE,IAAI;IAC5B,0BAA0B,EAAE,IAAI;IAChC,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,6BAA6B,GAAuB;IAC/D,oBAAoB,EAAE,KAAK;IAC3B,sBAAsB,EAAE,IAAI;IAC5B,0BAA0B,EAAE,IAAI;IAChC,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD,cAAc,EAAE,kBAAkB,CAAC,KAAK;IACxC,KAAK,EAAE;QACL,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;YAC5B,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,GAAG;SAChB;QACD,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE;YAClC,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,GAAG;SAChB;QACD,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE;YACpC,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,GAAG;SAChB;KACF;IACD,YAAY,EAAE,4BAA4B;IAC1C,eAAe,EAAE,eAAe,CAAC,OAAO;CACzC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAoB;IACxD,cAAc,EAAE,kBAAkB,CAAC,UAAU;IAC7C,KAAK,EAAE;QACL,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;YAC5B,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,GAAG;SAChB;QACD,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE;YAClC,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,GAAG;SAChB;QACD,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE;YACpC,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,GAAG;SAChB;KACF;IACD,YAAY,EAAE,4BAA4B;IAC1C,eAAe,EAAE,eAAe,CAAC,OAAO;CACzC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,cAAkC;IAElC,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,kBAAkB,CAAC,KAAK;YAC3B,OAAO,oBAAoB,CAAC;QAC9B,KAAK,kBAAkB,CAAC,UAAU;YAChC,OAAO,yBAAyB,CAAC;QACnC;YACE,OAAO,oBAAoB,CAAC;IAChC,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superblocksteam/telemetry",
3
- "version": "2.0.173-next.4",
3
+ "version": "2.0.174",
4
4
  "description": "Superblocks Telemetry - Canonical OTEL bootstrap with tier-aware policy enforcement",
5
5
  "license": "Superblocks Community Software License",
6
6
  "repository": {
@@ -10,31 +10,37 @@
10
10
  "files": [
11
11
  "LICENSE.txt",
12
12
  "dist",
13
+ "dist-esm",
13
14
  "README.md"
14
15
  ],
15
- "type": "module",
16
16
  "main": "dist/index.js",
17
+ "module": "dist-esm/index.js",
17
18
  "types": "dist/index.d.ts",
18
19
  "exports": {
19
20
  ".": {
20
21
  "types": "./dist/index.d.ts",
21
- "default": "./dist/index.js"
22
+ "import": "./dist-esm/index.js",
23
+ "require": "./dist/index.js"
22
24
  },
23
25
  "./node": {
24
26
  "types": "./dist/node/index.d.ts",
25
- "default": "./dist/node/index.js"
27
+ "import": "./dist-esm/node/index.js",
28
+ "require": "./dist/node/index.js"
26
29
  },
27
30
  "./browser": {
28
31
  "types": "./dist/browser/index.d.ts",
29
- "default": "./dist/browser/index.js"
32
+ "import": "./dist-esm/browser/index.js",
33
+ "require": "./dist/browser/index.js"
30
34
  },
31
35
  "./testing": {
32
36
  "types": "./dist/testing/index.d.ts",
33
- "default": "./dist/testing/index.js"
37
+ "import": "./dist-esm/testing/index.js",
38
+ "require": "./dist/testing/index.js"
34
39
  },
35
40
  "./lint": {
36
41
  "types": "./dist/lint/index.d.ts",
37
- "default": "./dist/lint/index.js"
42
+ "import": "./dist-esm/lint/index.js",
43
+ "require": "./dist/lint/index.js"
38
44
  }
39
45
  },
40
46
  "publishConfig": {
@@ -62,7 +68,7 @@
62
68
  },
63
69
  "devDependencies": {
64
70
  "@eslint/js": "^9.39.1",
65
- "@superblocksteam/shared": "0.9619.4",
71
+ "@superblocksteam/shared": "0.9618.4",
66
72
  "@types/node": "^24",
67
73
  "chokidar-cli": "^3.0.0",
68
74
  "eslint": "^9.39.1",
@@ -75,15 +81,15 @@
75
81
  "vitest": "^4.1.11"
76
82
  },
77
83
  "peerDependencies": {
78
- "@superblocksteam/shared": "0.9619.4"
84
+ "@superblocksteam/shared": "0.9618.4"
79
85
  },
80
86
  "engines": {
81
87
  "node": ">=24"
82
88
  },
83
89
  "scripts": {
84
- "build": "tsc --build",
90
+ "build": "tsc --build && tsc --build tsconfig.browser.json && printf '{\"type\":\"module\"}\n' > dist-esm/package.json",
85
91
  "check": "npm run typecheck && npm run lint",
86
- "clean": "premove ./dist *tsbuildinfo",
92
+ "clean": "premove ./dist ./dist-esm *tsbuildinfo",
87
93
  "dev": "chokidar \"**/*.ts\" -c \"npm run build\"",
88
94
  "lint": "eslint --max-warnings 0 --concurrency=2",
89
95
  "lint:fix": "eslint --fix --concurrency=2",