@superblocksteam/telemetry 2.0.171 → 2.0.173-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/dist/browser/console-logging.js +2 -7
  2. package/dist/browser/console-logging.js.map +1 -1
  3. package/dist/browser/early-console-buffer.js +12 -14
  4. package/dist/browser/early-console-buffer.js.map +1 -1
  5. package/dist/browser/index.js +12 -41
  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 +42 -52
  10. package/dist/browser/init.js.map +1 -1
  11. package/dist/browser/instrumentations.js +11 -15
  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 +11 -18
  16. package/dist/browser/logs.js.map +1 -1
  17. package/dist/browser/metrics.js +9 -12
  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 +8 -12
  22. package/dist/browser/resilient-exporter.js.map +1 -1
  23. package/dist/browser/sanitizer.js +2 -6
  24. package/dist/browser/sanitizer.js.map +1 -1
  25. package/dist/browser/traced-socket.js +14 -18
  26. package/dist/browser/traced-socket.js.map +1 -1
  27. package/dist/common/contracts/tier2-traces.js +33 -44
  28. package/dist/common/contracts/tier2-traces.js.map +1 -1
  29. package/dist/common/deployment-type.js +5 -8
  30. package/dist/common/deployment-type.js.map +1 -1
  31. package/dist/common/guardrails.js +26 -38
  32. package/dist/common/guardrails.js.map +1 -1
  33. package/dist/common/index.js +8 -24
  34. package/dist/common/index.js.map +1 -1
  35. package/dist/common/log-sanitizer.js +37 -55
  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 +5 -9
  40. package/dist/common/policy-evaluator.js.map +1 -1
  41. package/dist/common/resource.js +18 -25
  42. package/dist/common/resource.js.map +1 -1
  43. package/dist/common/tier-hints.js +12 -22
  44. package/dist/common/tier-hints.js.map +1 -1
  45. package/dist/common/trace-sanitizer.js +6 -10
  46. package/dist/common/trace-sanitizer.js.map +1 -1
  47. package/dist/common/traced-socket-types.js +1 -2
  48. package/dist/common/traced-socket-types.js.map +1 -1
  49. package/dist/index.js +6 -38
  50. package/dist/index.js.map +1 -1
  51. package/dist/lint/forbidden-attributes.js +19 -24
  52. package/dist/lint/forbidden-attributes.js.map +1 -1
  53. package/dist/lint/index.js +1 -8
  54. package/dist/lint/index.js.map +1 -1
  55. package/dist/llmobs/index.js +2 -9
  56. package/dist/llmobs/index.js.map +1 -1
  57. package/dist/llmobs/tier1-exporter.js +6 -12
  58. package/dist/llmobs/tier1-exporter.js.map +1 -1
  59. package/dist/llmobs/tier2-summarizer.js +1 -5
  60. package/dist/llmobs/tier2-summarizer.js.map +1 -1
  61. package/dist/node/dynamic-attribute-processor.js +2 -7
  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 +8 -12
  66. package/dist/node/exporters/resilient-exporter.js.map +1 -1
  67. package/dist/node/index.js +7 -26
  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 +66 -72
  72. package/dist/node/init.js.map +1 -1
  73. package/dist/node/local-obs-mode.js +1 -4
  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 +47 -55
  78. package/dist/node/log-processor.js.map +1 -1
  79. package/dist/node/metrics-client.js +1 -5
  80. package/dist/node/metrics-client.js.map +1 -1
  81. package/dist/node/safe-logger.js +8 -12
  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 +6 -10
  86. package/dist/node/sanitizing-processor.js.map +1 -1
  87. package/dist/node/service-tracers.js +7 -10
  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 +48 -52
  92. package/dist/node/traced-socket.js.map +1 -1
  93. package/dist/npm-registry/emitter.js +34 -47
  94. package/dist/npm-registry/emitter.js.map +1 -1
  95. package/dist/npm-registry/index.js +3 -19
  96. package/dist/npm-registry/index.js.map +1 -1
  97. package/dist/npm-registry/sanitize.js +16 -27
  98. package/dist/npm-registry/sanitize.js.map +1 -1
  99. package/dist/npm-registry/spans.js +7 -12
  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 +6 -12
  104. package/dist/testing/in-memory-exporter.js.map +1 -1
  105. package/dist/testing/index.js +3 -15
  106. package/dist/testing/index.js.map +1 -1
  107. package/dist/testing/metrics-capture.js +12 -15
  108. package/dist/testing/metrics-capture.js.map +1 -1
  109. package/dist/testing/test-init.js +24 -31
  110. package/dist/testing/test-init.js.map +1 -1
  111. package/dist/types/index.js +1 -17
  112. package/dist/types/index.js.map +1 -1
  113. package/dist/types/policy.js +21 -24
  114. package/dist/types/policy.js.map +1 -1
  115. package/package.json +11 -17
  116. package/dist-esm/browser/console-logging.d.ts +0 -18
  117. package/dist-esm/browser/console-logging.d.ts.map +0 -1
  118. package/dist-esm/browser/console-logging.js +0 -27
  119. package/dist-esm/browser/console-logging.js.map +0 -1
  120. package/dist-esm/browser/early-console-buffer.d.ts +0 -49
  121. package/dist-esm/browser/early-console-buffer.d.ts.map +0 -1
  122. package/dist-esm/browser/early-console-buffer.js +0 -181
  123. package/dist-esm/browser/early-console-buffer.js.map +0 -1
  124. package/dist-esm/browser/index.d.ts +0 -18
  125. package/dist-esm/browser/index.d.ts.map +0 -1
  126. package/dist-esm/browser/index.js +0 -23
  127. package/dist-esm/browser/index.js.map +0 -1
  128. package/dist-esm/browser/init.d.ts +0 -100
  129. package/dist-esm/browser/init.d.ts.map +0 -1
  130. package/dist-esm/browser/init.js +0 -317
  131. package/dist-esm/browser/init.js.map +0 -1
  132. package/dist-esm/browser/instrumentations.d.ts +0 -67
  133. package/dist-esm/browser/instrumentations.d.ts.map +0 -1
  134. package/dist-esm/browser/instrumentations.js +0 -79
  135. package/dist-esm/browser/instrumentations.js.map +0 -1
  136. package/dist-esm/browser/logs.d.ts +0 -57
  137. package/dist-esm/browser/logs.d.ts.map +0 -1
  138. package/dist-esm/browser/logs.js +0 -80
  139. package/dist-esm/browser/logs.js.map +0 -1
  140. package/dist-esm/browser/metrics.d.ts +0 -29
  141. package/dist-esm/browser/metrics.d.ts.map +0 -1
  142. package/dist-esm/browser/metrics.js +0 -46
  143. package/dist-esm/browser/metrics.js.map +0 -1
  144. package/dist-esm/browser/resilient-exporter.d.ts +0 -43
  145. package/dist-esm/browser/resilient-exporter.d.ts.map +0 -1
  146. package/dist-esm/browser/resilient-exporter.js +0 -84
  147. package/dist-esm/browser/resilient-exporter.js.map +0 -1
  148. package/dist-esm/browser/sanitizer.d.ts +0 -35
  149. package/dist-esm/browser/sanitizer.d.ts.map +0 -1
  150. package/dist-esm/browser/sanitizer.js +0 -207
  151. package/dist-esm/browser/sanitizer.js.map +0 -1
  152. package/dist-esm/browser/traced-socket.d.ts +0 -102
  153. package/dist-esm/browser/traced-socket.d.ts.map +0 -1
  154. package/dist-esm/browser/traced-socket.js +0 -199
  155. package/dist-esm/browser/traced-socket.js.map +0 -1
  156. package/dist-esm/common/contracts/tier2-traces.d.ts +0 -116
  157. package/dist-esm/common/contracts/tier2-traces.d.ts.map +0 -1
  158. package/dist-esm/common/contracts/tier2-traces.js +0 -725
  159. package/dist-esm/common/contracts/tier2-traces.js.map +0 -1
  160. package/dist-esm/common/deployment-type.d.ts +0 -18
  161. package/dist-esm/common/deployment-type.d.ts.map +0 -1
  162. package/dist-esm/common/deployment-type.js +0 -27
  163. package/dist-esm/common/deployment-type.js.map +0 -1
  164. package/dist-esm/common/guardrails.d.ts +0 -132
  165. package/dist-esm/common/guardrails.d.ts.map +0 -1
  166. package/dist-esm/common/guardrails.js +0 -230
  167. package/dist-esm/common/guardrails.js.map +0 -1
  168. package/dist-esm/common/index.d.ts +0 -17
  169. package/dist-esm/common/index.d.ts.map +0 -1
  170. package/dist-esm/common/index.js +0 -17
  171. package/dist-esm/common/index.js.map +0 -1
  172. package/dist-esm/common/log-sanitizer.d.ts +0 -163
  173. package/dist-esm/common/log-sanitizer.d.ts.map +0 -1
  174. package/dist-esm/common/log-sanitizer.js +0 -745
  175. package/dist-esm/common/log-sanitizer.js.map +0 -1
  176. package/dist-esm/common/policy-evaluator.d.ts +0 -103
  177. package/dist-esm/common/policy-evaluator.d.ts.map +0 -1
  178. package/dist-esm/common/policy-evaluator.js +0 -196
  179. package/dist-esm/common/policy-evaluator.js.map +0 -1
  180. package/dist-esm/common/resource.d.ts +0 -79
  181. package/dist-esm/common/resource.d.ts.map +0 -1
  182. package/dist-esm/common/resource.js +0 -121
  183. package/dist-esm/common/resource.js.map +0 -1
  184. package/dist-esm/common/tier-hints.d.ts +0 -182
  185. package/dist-esm/common/tier-hints.d.ts.map +0 -1
  186. package/dist-esm/common/tier-hints.js +0 -199
  187. package/dist-esm/common/tier-hints.js.map +0 -1
  188. package/dist-esm/common/trace-sanitizer.d.ts +0 -82
  189. package/dist-esm/common/trace-sanitizer.d.ts.map +0 -1
  190. package/dist-esm/common/trace-sanitizer.js +0 -230
  191. package/dist-esm/common/trace-sanitizer.js.map +0 -1
  192. package/dist-esm/common/traced-socket-types.d.ts +0 -43
  193. package/dist-esm/common/traced-socket-types.d.ts.map +0 -1
  194. package/dist-esm/common/traced-socket-types.js +0 -16
  195. package/dist-esm/common/traced-socket-types.js.map +0 -1
  196. package/dist-esm/index.d.ts +0 -45
  197. package/dist-esm/index.d.ts.map +0 -1
  198. package/dist-esm/index.js +0 -56
  199. package/dist-esm/index.js.map +0 -1
  200. package/dist-esm/lint/forbidden-attributes.d.ts +0 -149
  201. package/dist-esm/lint/forbidden-attributes.d.ts.map +0 -1
  202. package/dist-esm/lint/forbidden-attributes.js +0 -210
  203. package/dist-esm/lint/forbidden-attributes.js.map +0 -1
  204. package/dist-esm/lint/index.d.ts +0 -9
  205. package/dist-esm/lint/index.d.ts.map +0 -1
  206. package/dist-esm/lint/index.js +0 -9
  207. package/dist-esm/lint/index.js.map +0 -1
  208. package/dist-esm/llmobs/index.d.ts +0 -22
  209. package/dist-esm/llmobs/index.d.ts.map +0 -1
  210. package/dist-esm/llmobs/index.js +0 -22
  211. package/dist-esm/llmobs/index.js.map +0 -1
  212. package/dist-esm/llmobs/tier1-exporter.d.ts +0 -146
  213. package/dist-esm/llmobs/tier1-exporter.d.ts.map +0 -1
  214. package/dist-esm/llmobs/tier1-exporter.js +0 -193
  215. package/dist-esm/llmobs/tier1-exporter.js.map +0 -1
  216. package/dist-esm/llmobs/tier2-summarizer.d.ts +0 -268
  217. package/dist-esm/llmobs/tier2-summarizer.d.ts.map +0 -1
  218. package/dist-esm/llmobs/tier2-summarizer.js +0 -652
  219. package/dist-esm/llmobs/tier2-summarizer.js.map +0 -1
  220. package/dist-esm/node/dynamic-attribute-processor.d.ts +0 -43
  221. package/dist-esm/node/dynamic-attribute-processor.d.ts.map +0 -1
  222. package/dist-esm/node/dynamic-attribute-processor.js +0 -74
  223. package/dist-esm/node/dynamic-attribute-processor.js.map +0 -1
  224. package/dist-esm/node/exporters/resilient-exporter.d.ts +0 -91
  225. package/dist-esm/node/exporters/resilient-exporter.d.ts.map +0 -1
  226. package/dist-esm/node/exporters/resilient-exporter.js +0 -132
  227. package/dist-esm/node/exporters/resilient-exporter.js.map +0 -1
  228. package/dist-esm/node/index.d.ts +0 -13
  229. package/dist-esm/node/index.d.ts.map +0 -1
  230. package/dist-esm/node/index.js +0 -13
  231. package/dist-esm/node/index.js.map +0 -1
  232. package/dist-esm/node/init.d.ts +0 -97
  233. package/dist-esm/node/init.d.ts.map +0 -1
  234. package/dist-esm/node/init.js +0 -359
  235. package/dist-esm/node/init.js.map +0 -1
  236. package/dist-esm/node/local-obs-mode.d.ts +0 -17
  237. package/dist-esm/node/local-obs-mode.d.ts.map +0 -1
  238. package/dist-esm/node/local-obs-mode.js +0 -19
  239. package/dist-esm/node/local-obs-mode.js.map +0 -1
  240. package/dist-esm/node/log-processor.d.ts +0 -132
  241. package/dist-esm/node/log-processor.d.ts.map +0 -1
  242. package/dist-esm/node/log-processor.js +0 -389
  243. package/dist-esm/node/log-processor.js.map +0 -1
  244. package/dist-esm/node/metrics-client.d.ts +0 -88
  245. package/dist-esm/node/metrics-client.d.ts.map +0 -1
  246. package/dist-esm/node/metrics-client.js +0 -205
  247. package/dist-esm/node/metrics-client.js.map +0 -1
  248. package/dist-esm/node/safe-logger.d.ts +0 -55
  249. package/dist-esm/node/safe-logger.d.ts.map +0 -1
  250. package/dist-esm/node/safe-logger.js +0 -154
  251. package/dist-esm/node/safe-logger.js.map +0 -1
  252. package/dist-esm/node/sanitizing-processor.d.ts +0 -67
  253. package/dist-esm/node/sanitizing-processor.d.ts.map +0 -1
  254. package/dist-esm/node/sanitizing-processor.js +0 -163
  255. package/dist-esm/node/sanitizing-processor.js.map +0 -1
  256. package/dist-esm/node/service-tracers.d.ts +0 -52
  257. package/dist-esm/node/service-tracers.d.ts.map +0 -1
  258. package/dist-esm/node/service-tracers.js +0 -78
  259. package/dist-esm/node/service-tracers.js.map +0 -1
  260. package/dist-esm/node/traced-socket.d.ts +0 -120
  261. package/dist-esm/node/traced-socket.d.ts.map +0 -1
  262. package/dist-esm/node/traced-socket.js +0 -334
  263. package/dist-esm/node/traced-socket.js.map +0 -1
  264. package/dist-esm/npm-registry/emitter.d.ts +0 -330
  265. package/dist-esm/npm-registry/emitter.d.ts.map +0 -1
  266. package/dist-esm/npm-registry/emitter.js +0 -546
  267. package/dist-esm/npm-registry/emitter.js.map +0 -1
  268. package/dist-esm/npm-registry/index.d.ts +0 -12
  269. package/dist-esm/npm-registry/index.d.ts.map +0 -1
  270. package/dist-esm/npm-registry/index.js +0 -12
  271. package/dist-esm/npm-registry/index.js.map +0 -1
  272. package/dist-esm/npm-registry/sanitize.d.ts +0 -174
  273. package/dist-esm/npm-registry/sanitize.d.ts.map +0 -1
  274. package/dist-esm/npm-registry/sanitize.js +0 -331
  275. package/dist-esm/npm-registry/sanitize.js.map +0 -1
  276. package/dist-esm/npm-registry/spans.d.ts +0 -61
  277. package/dist-esm/npm-registry/spans.d.ts.map +0 -1
  278. package/dist-esm/npm-registry/spans.js +0 -86
  279. package/dist-esm/npm-registry/spans.js.map +0 -1
  280. package/dist-esm/package.json +0 -1
  281. package/dist-esm/testing/in-memory-exporter.d.ts +0 -179
  282. package/dist-esm/testing/in-memory-exporter.d.ts.map +0 -1
  283. package/dist-esm/testing/in-memory-exporter.js +0 -250
  284. package/dist-esm/testing/in-memory-exporter.js.map +0 -1
  285. package/dist-esm/testing/index.d.ts +0 -9
  286. package/dist-esm/testing/index.d.ts.map +0 -1
  287. package/dist-esm/testing/index.js +0 -9
  288. package/dist-esm/testing/index.js.map +0 -1
  289. package/dist-esm/testing/metrics-capture.d.ts +0 -29
  290. package/dist-esm/testing/metrics-capture.d.ts.map +0 -1
  291. package/dist-esm/testing/metrics-capture.js +0 -71
  292. package/dist-esm/testing/metrics-capture.js.map +0 -1
  293. package/dist-esm/testing/test-init.d.ts +0 -80
  294. package/dist-esm/testing/test-init.d.ts.map +0 -1
  295. package/dist-esm/testing/test-init.js +0 -137
  296. package/dist-esm/testing/test-init.js.map +0 -1
  297. package/dist-esm/types/index.d.ts +0 -84
  298. package/dist-esm/types/index.d.ts.map +0 -1
  299. package/dist-esm/types/index.js +0 -7
  300. package/dist-esm/types/index.js.map +0 -1
  301. package/dist-esm/types/policy.d.ts +0 -92
  302. package/dist-esm/types/policy.d.ts.map +0 -1
  303. package/dist-esm/types/policy.js +0 -122
  304. package/dist-esm/types/policy.js.map +0 -1
@@ -1,317 +0,0 @@
1
- /**
2
- * Browser Telemetry Bootstrap
3
- *
4
- * This is the ONLY approved way to initialize telemetry in browser contexts.
5
- * Direct WebTracerProvider usage outside this package is prohibited.
6
- *
7
- * Composes all browser signals: traces, metrics, logs, sanitizers, and
8
- * auto-instrumentations into a single init call.
9
- */
10
- import { context, metrics, trace, } from "@opentelemetry/api";
11
- import { W3CTraceContextPropagator, W3CBaggagePropagator, CompositePropagator, } from "@opentelemetry/core";
12
- import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
13
- import { registerInstrumentations } from "@opentelemetry/instrumentation";
14
- import { BatchSpanProcessor, } from "@opentelemetry/sdk-trace-base";
15
- import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
16
- import { TelemetryPolicyEvaluator } from "../common/policy-evaluator.js";
17
- import { buildResource } from "../common/resource.js";
18
- import { TelemetryTier } from "../types/policy.js";
19
- import EarlyConsoleBuffer from "./early-console-buffer.js";
20
- import { createBrowserInstrumentations, registerBrowserContextManager, } from "./instrumentations.js";
21
- import { initBrowserLogs, resetBrowserLogs } from "./logs.js";
22
- import { initBrowserMetrics } from "./metrics.js";
23
- import { BrowserResilientExporter } from "./resilient-exporter.js";
24
- import { createSanitizingSpanProcessor } from "./sanitizer.js";
25
- // Singleton instance
26
- let instance;
27
- /**
28
- * Validate browser telemetry configuration.
29
- *
30
- * @param config - Configuration to validate
31
- * @throws Error if configuration is invalid
32
- */
33
- function validateBrowserTelemetryConfig(config) {
34
- if (!config.serviceName?.trim()) {
35
- throw new Error("[Telemetry] serviceName is required and cannot be empty");
36
- }
37
- if (!config.serviceVersion?.trim()) {
38
- throw new Error("[Telemetry] serviceVersion is required and cannot be empty");
39
- }
40
- if (!config.environment?.trim()) {
41
- throw new Error("[Telemetry] environment is required and cannot be empty");
42
- }
43
- if (!config.otlpUrl?.trim()) {
44
- throw new Error("[Telemetry] otlpUrl is required for browser telemetry");
45
- }
46
- try {
47
- new URL(config.otlpUrl);
48
- }
49
- catch (error) {
50
- throw new Error(`[Telemetry] Invalid otlpUrl: ${config.otlpUrl} (${error.message})`);
51
- }
52
- }
53
- /**
54
- * Strips trailing slash from a URL string.
55
- */
56
- function normalizeBaseUrl(url) {
57
- return url.replace(/\/+$/, "");
58
- }
59
- /**
60
- * SpanProcessor that injects mutable global attributes into every span on start.
61
- * Since OTel Resource is immutable, dynamic context (org ID, user ID, app ID)
62
- * must be applied at the span level.
63
- */
64
- class GlobalAttributeSpanProcessor {
65
- attrs = {};
66
- setAttributes(attrs) {
67
- this.attrs = { ...attrs };
68
- }
69
- onStart(span, _parentContext) {
70
- for (const [key, value] of Object.entries(this.attrs)) {
71
- span.setAttribute(key, value);
72
- }
73
- }
74
- onEnd(_span) { }
75
- async shutdown() { }
76
- async forceFlush() { }
77
- }
78
- /**
79
- * Composite SpanProcessor that delegates to a mutable list of inner processors.
80
- * Supports runtime additions such as the UI's LocalStorageExporter.
81
- */
82
- class DynamicCompositeSpanProcessor {
83
- processors = [];
84
- add(processor) {
85
- this.processors.push(processor);
86
- }
87
- onStart(span, parentContext) {
88
- for (const p of this.processors) {
89
- try {
90
- p.onStart(span, parentContext);
91
- }
92
- catch (err) {
93
- console.error("[Telemetry] SpanProcessor.onStart failed", err);
94
- }
95
- }
96
- }
97
- onEnd(span) {
98
- for (const p of this.processors) {
99
- try {
100
- p.onEnd(span);
101
- }
102
- catch (err) {
103
- console.error("[Telemetry] SpanProcessor.onEnd failed", err);
104
- }
105
- }
106
- }
107
- async shutdown() {
108
- await Promise.all(this.processors.map((p) => p.shutdown()));
109
- }
110
- async forceFlush() {
111
- await Promise.all(this.processors.map((p) => p.forceFlush()));
112
- }
113
- }
114
- /**
115
- * Initialize browser telemetry with policy enforcement.
116
- *
117
- * Browser telemetry is always sanitized (Tier 2) since it runs in untrusted context.
118
- * Full fidelity Tier 1 data should never be emitted from the browser.
119
- *
120
- * Composes:
121
- * - Traces: WebTracerProvider with sanitizing + batch processors
122
- * - Metrics: MeterProvider via initBrowserMetrics
123
- * - Logs: LoggerProvider via initBrowserLogs (with EarlyConsoleBuffer)
124
- * - Sanitizers: PII redaction for spans and logs
125
- * - Instrumentations: XHR + Fetch auto-instrumentation
126
- * - Context: StackContextManager for async context propagation
127
- *
128
- * @param config - Browser configuration (otlpUrl is treated as base URL)
129
- * @param policy - Telemetry policy (REQUIRED)
130
- * @returns Browser telemetry instance
131
- *
132
- * @example
133
- * ```typescript
134
- * import { initBrowserTelemetry } from '@superblocksteam/telemetry/browser';
135
- * import { getDefaultPolicy, DeploymentType } from '@superblocksteam/shared';
136
- *
137
- * const policy = getDefaultPolicy(DeploymentType.CLOUD);
138
- * const telemetry = initBrowserTelemetry({
139
- * serviceName: 'superblocks-ui',
140
- * serviceVersion: '1.0.0',
141
- * environment: 'production',
142
- * otlpUrl: 'https://app.superblocks.com/api',
143
- * }, policy);
144
- *
145
- * const tracer = telemetry.getTracer();
146
- * const meter = telemetry.getMeter();
147
- * const logger = telemetry.getLogger();
148
- * ```
149
- */
150
- export function initBrowserTelemetry(config, policy) {
151
- // Policy is required
152
- if (!policy) {
153
- throw new Error("[Telemetry] Policy is required. Cannot initialize telemetry without a policy.");
154
- }
155
- // Validate config
156
- validateBrowserTelemetryConfig(config);
157
- // Return existing instance if already initialized
158
- if (instance) {
159
- console.warn("[Telemetry] Browser provider already initialized");
160
- return instance;
161
- }
162
- const baseUrl = normalizeBaseUrl(config.otlpUrl);
163
- // 1. Register StackContextManager for async context propagation
164
- registerBrowserContextManager();
165
- const policyEvaluator = new TelemetryPolicyEvaluator(policy);
166
- const resource = buildResource(config);
167
- // 2. Build span processors: global attrs -> sanitizer -> batch exporter
168
- // Wrapped in a DynamicCompositeSpanProcessor so addSpanProcessor() works
169
- // at runtime (OTel SDK v2.x removed addSpanProcessor from the provider).
170
- const globalAttrProcessor = new GlobalAttributeSpanProcessor();
171
- const compositeProcessor = new DynamicCompositeSpanProcessor();
172
- compositeProcessor.add(globalAttrProcessor);
173
- // Add sanitizing processor (always on in browser)
174
- compositeProcessor.add(createSanitizingSpanProcessor());
175
- // Add batch exporter if policy allows export
176
- if (policyEvaluator.isExportEnabled(TelemetryTier.TIER_2_OPERATIONAL)) {
177
- compositeProcessor.add(new BatchSpanProcessor(new BrowserResilientExporter({
178
- delegate: new OTLPTraceExporter({
179
- url: `${baseUrl}/v1/traces`,
180
- }),
181
- })));
182
- }
183
- // Create provider with the composite processor (OTEL v2.x API)
184
- const provider = new WebTracerProvider({
185
- resource,
186
- spanProcessors: [compositeProcessor],
187
- });
188
- // Register with composite propagator for W3C TraceContext and Baggage
189
- provider.register({
190
- propagator: new CompositePropagator({
191
- propagators: [
192
- new W3CBaggagePropagator(),
193
- new W3CTraceContextPropagator(),
194
- ],
195
- }),
196
- });
197
- // 3. Create auto-instrumentations (XHR + fetch)
198
- const instrumentations = createBrowserInstrumentations({
199
- propagateTraceUrls: config.propagateTraceUrls,
200
- ignoreUrls: config.ignoreUrls,
201
- });
202
- registerInstrumentations({
203
- instrumentations,
204
- tracerProvider: provider,
205
- });
206
- // 4. Initialize metrics
207
- let metricsInstance;
208
- if (policyEvaluator.isExportEnabled(TelemetryTier.TIER_2_OPERATIONAL)) {
209
- metricsInstance = initBrowserMetrics({
210
- otlpUrl: `${baseUrl}/v1/metrics`,
211
- serviceName: config.serviceName,
212
- resource,
213
- });
214
- }
215
- // 5. Initialize logs (with EarlyConsoleBuffer flush)
216
- let logsInstance;
217
- if (policyEvaluator.isExportEnabled(TelemetryTier.TIER_2_OPERATIONAL)) {
218
- logsInstance = initBrowserLogs({
219
- otlpUrl: `${baseUrl}/v1/logs`,
220
- serviceName: config.serviceName,
221
- resource,
222
- });
223
- }
224
- else {
225
- // Log export disabled (e.g. on-premise) — disable the EarlyConsoleBuffer
226
- // so it stops buffering indefinitely and restores original console methods.
227
- EarlyConsoleBuffer.getInstance().disable();
228
- }
229
- instance = {
230
- provider,
231
- policyEvaluator,
232
- getTracer: (name) => trace.getTracer(name ?? config.serviceName, config.serviceVersion),
233
- getMeter: (name) => {
234
- if (metricsInstance) {
235
- return metricsInstance.getMeter(name);
236
- }
237
- // Return a no-op meter from the global API when metrics are disabled
238
- return metrics.getMeter(name ?? config.serviceName);
239
- },
240
- getLogger: (name) => {
241
- if (logsInstance) {
242
- return logsInstance.getLogger(name);
243
- }
244
- // Return a no-op logger when logs are disabled
245
- return {
246
- emit: () => { },
247
- enabled: () => false,
248
- };
249
- },
250
- setGlobalSpanAttributes: (attrs) => {
251
- globalAttrProcessor.setAttributes(attrs);
252
- },
253
- addSpanProcessor: (processor) => {
254
- compositeProcessor.add(processor);
255
- },
256
- forceFlush: async () => {
257
- await Promise.all([logsInstance?.forceFlush(), provider.forceFlush()]);
258
- },
259
- shutdown: async () => {
260
- await provider.shutdown();
261
- if (metricsInstance) {
262
- await metricsInstance.shutdown();
263
- }
264
- if (logsInstance) {
265
- await logsInstance.shutdown();
266
- }
267
- context.disable();
268
- instance = undefined;
269
- },
270
- };
271
- return instance;
272
- }
273
- /**
274
- * Get the current browser telemetry instance.
275
- *
276
- * @throws Error if not initialized
277
- */
278
- export function getBrowserTelemetryInstance() {
279
- if (!instance) {
280
- throw new Error("[Telemetry] Not initialized. Call initBrowserTelemetry() first.");
281
- }
282
- return instance;
283
- }
284
- /**
285
- * Check if browser telemetry is initialized.
286
- */
287
- export function isBrowserTelemetryInitialized() {
288
- return instance !== undefined;
289
- }
290
- /**
291
- * Reset browser telemetry (for testing only).
292
- * @internal
293
- */
294
- export function resetBrowserTelemetry() {
295
- instance = undefined;
296
- resetBrowserLogs();
297
- }
298
- /**
299
- * Derive environment from hostname.
300
- * Utility for browser context where env vars aren't available.
301
- *
302
- * @param hostname - The hostname to analyze
303
- * @returns Environment string
304
- */
305
- export function getEnvironmentFromHostname(hostname) {
306
- if (hostname.includes("localhost") || hostname.includes("127.0.0.1")) {
307
- return "local";
308
- }
309
- if (hostname.includes("staging") || hostname.includes("stg")) {
310
- return "staging";
311
- }
312
- if (hostname.includes("dev") || hostname.includes("development")) {
313
- return "development";
314
- }
315
- return "production";
316
- }
317
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/browser/init.ts"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- /**
2
- * Browser Auto-Instrumentations Factory
3
- *
4
- * Creates and configures auto-instrumentations for browser telemetry.
5
- * Handles XHR and Fetch requests with configurable URL filtering and
6
- * trace context propagation.
7
- */
8
- import type { Instrumentation } from "@opentelemetry/instrumentation";
9
- /**
10
- * Configuration for browser auto-instrumentations.
11
- */
12
- export interface BrowserInstrumentationConfig {
13
- /**
14
- * URL patterns to inject traceparent header into.
15
- * Only requests matching these patterns will have W3C trace context propagated.
16
- * Defaults to empty (no cross-origin propagation).
17
- */
18
- propagateTraceUrls?: RegExp[];
19
- /**
20
- * URL patterns to skip instrumenting entirely.
21
- * Defaults to common static asset extensions.
22
- */
23
- ignoreUrls?: RegExp[];
24
- /**
25
- * Set to true to skip FetchInstrumentation entirely.
26
- * Acts as an escape valve if the Fetch instrumentation regresses in production
27
- * without requiring a full revert.
28
- * Defaults to false.
29
- */
30
- disableFetch?: boolean;
31
- }
32
- /**
33
- * Create auto-instrumentations for browser telemetry.
34
- *
35
- * Returns an array containing XMLHttpRequestInstrumentation and
36
- * FetchInstrumentation. Both instrumentations use the provided ignoreUrls to
37
- * filter out asset downloads, and propagate trace context only to URLs
38
- * matching propagateTraceUrls.
39
- *
40
- * @param config - Optional instrumentation configuration
41
- * @returns Array of configured Instrumentation instances
42
- *
43
- * @example
44
- * ```typescript
45
- * const instrumentations = createBrowserInstrumentations({
46
- * propagateTraceUrls: [/https:\/\/api\.superblocks\.com/],
47
- * ignoreUrls: [/\/static\//],
48
- * });
49
- * registerInstrumentations({ instrumentations });
50
- * ```
51
- */
52
- export declare function createBrowserInstrumentations(config?: BrowserInstrumentationConfig): Instrumentation[];
53
- /**
54
- * Register the StackContextManager for async context propagation in the browser.
55
- *
56
- * This must be called before using `context.with()` in browser environments.
57
- * Without this, Redux middleware and other async code cannot thread trace
58
- * context through async operations.
59
- *
60
- * @example
61
- * ```typescript
62
- * registerBrowserContextManager();
63
- * // context.with() now works correctly in browser async flows
64
- * ```
65
- */
66
- export declare function registerBrowserContextManager(): void;
67
- //# sourceMappingURL=instrumentations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instrumentations.d.ts","sourceRoot":"","sources":["../../src/browser/instrumentations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAatE;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,CAAC,EAAE,4BAA4B,GACpC,eAAe,EAAE,CA6BnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CAIpD"}
@@ -1,79 +0,0 @@
1
- /**
2
- * Browser Auto-Instrumentations Factory
3
- *
4
- * Creates and configures auto-instrumentations for browser telemetry.
5
- * Handles XHR and Fetch requests with configurable URL filtering and
6
- * trace context propagation.
7
- */
8
- import { context, diag } from "@opentelemetry/api";
9
- import { FetchInstrumentation } from "@opentelemetry/instrumentation-fetch";
10
- import { XMLHttpRequestInstrumentation } from "@opentelemetry/instrumentation-xml-http-request";
11
- import { StackContextManager } from "@opentelemetry/sdk-trace-web";
12
- /**
13
- * Default regex for ignoring static asset URLs.
14
- * Uses ([?#]|$) to also match cache-busted URLs (e.g. app.js?v=abc123).
15
- * These requests are not worth tracing and would create noise.
16
- */
17
- const DEFAULT_IGNORE_URLS = /\.(js|css|map|png|jpg|jpeg|svg|gif|webp|avif|woff|woff2|ttf|eot|ico)([?#]|$)/i;
18
- /**
19
- * Create auto-instrumentations for browser telemetry.
20
- *
21
- * Returns an array containing XMLHttpRequestInstrumentation and
22
- * FetchInstrumentation. Both instrumentations use the provided ignoreUrls to
23
- * filter out asset downloads, and propagate trace context only to URLs
24
- * matching propagateTraceUrls.
25
- *
26
- * @param config - Optional instrumentation configuration
27
- * @returns Array of configured Instrumentation instances
28
- *
29
- * @example
30
- * ```typescript
31
- * const instrumentations = createBrowserInstrumentations({
32
- * propagateTraceUrls: [/https:\/\/api\.superblocks\.com/],
33
- * ignoreUrls: [/\/static\//],
34
- * });
35
- * registerInstrumentations({ instrumentations });
36
- * ```
37
- */
38
- export function createBrowserInstrumentations(config) {
39
- const ignoreUrls = config?.ignoreUrls ?? [DEFAULT_IGNORE_URLS];
40
- const propagateTraceHeaderCorsUrls = config?.propagateTraceUrls ?? [];
41
- const instrumentations = [
42
- new XMLHttpRequestInstrumentation({
43
- ignoreUrls,
44
- propagateTraceHeaderCorsUrls,
45
- }),
46
- ];
47
- if (!config?.disableFetch) {
48
- try {
49
- instrumentations.push(new FetchInstrumentation({
50
- ignoreUrls,
51
- propagateTraceHeaderCorsUrls,
52
- }));
53
- }
54
- catch (err) {
55
- // FetchInstrumentation failed; XHR instrumentation continues unaffected.
56
- diag.warn("[telemetry] FetchInstrumentation failed to initialize", String(err));
57
- }
58
- }
59
- return instrumentations;
60
- }
61
- /**
62
- * Register the StackContextManager for async context propagation in the browser.
63
- *
64
- * This must be called before using `context.with()` in browser environments.
65
- * Without this, Redux middleware and other async code cannot thread trace
66
- * context through async operations.
67
- *
68
- * @example
69
- * ```typescript
70
- * registerBrowserContextManager();
71
- * // context.with() now works correctly in browser async flows
72
- * ```
73
- */
74
- export function registerBrowserContextManager() {
75
- const contextManager = new StackContextManager();
76
- contextManager.enable();
77
- context.setGlobalContextManager(contextManager);
78
- }
79
- //# sourceMappingURL=instrumentations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instrumentations.js","sourceRoot":"","sources":["../../src/browser/instrumentations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;GAIG;AACH,MAAM,mBAAmB,GACvB,+EAA+E,CAAC;AA0BlF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,6BAA6B,CAC3C,MAAqC;IAErC,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,4BAA4B,GAAG,MAAM,EAAE,kBAAkB,IAAI,EAAE,CAAC;IAEtE,MAAM,gBAAgB,GAAsB;QAC1C,IAAI,6BAA6B,CAAC;YAChC,UAAU;YACV,4BAA4B;SAC7B,CAAC;KACH,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,gBAAgB,CAAC,IAAI,CACnB,IAAI,oBAAoB,CAAC;gBACvB,UAAU;gBACV,4BAA4B;aAC7B,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yEAAyE;YACzE,IAAI,CAAC,IAAI,CACP,uDAAuD,EACvD,MAAM,CAAC,GAAG,CAAC,CACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,6BAA6B;IAC3C,MAAM,cAAc,GAAG,IAAI,mBAAmB,EAAE,CAAC;IACjD,cAAc,CAAC,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;AAClD,CAAC"}
@@ -1,57 +0,0 @@
1
- /**
2
- * Browser Log Provider
3
- *
4
- * Initializes the OTel LoggerProvider for browser contexts. Pairs with the
5
- * EarlyConsoleBuffer to ensure pre-init console messages are captured and
6
- * forwarded to the OTLP endpoint.
7
- *
8
- * This is the ONLY approved way to init log telemetry in browser contexts.
9
- */
10
- import { type Logger } from "@opentelemetry/api-logs";
11
- import type { Resource } from "@opentelemetry/resources";
12
- export interface BrowserLogsConfig {
13
- /** Full URL for the OTLP logs endpoint, e.g. "https://app.example.com/api/v1/logs" */
14
- otlpUrl: string;
15
- /** Logical service name recorded in every log record */
16
- serviceName: string;
17
- /** Resource with service.name / deployment.environment.name for Datadog env tags. */
18
- resource?: Resource;
19
- }
20
- export interface BrowserLogsInstance {
21
- /** Get a named Logger (uses serviceName when name is omitted) */
22
- getLogger: (name?: string) => Logger;
23
- /** Export pending logs without shutting down the provider */
24
- forceFlush: () => Promise<void>;
25
- /** Gracefully shut down the underlying LoggerProvider */
26
- shutdown: () => Promise<void>;
27
- }
28
- /**
29
- * Initialize the browser log provider.
30
- *
31
- * - Creates an OTLPLogExporter pointed at `config.otlpUrl`
32
- * - Wraps it in a BatchLogRecordProcessor
33
- * - Enables the EarlyConsoleBuffer so buffered pre-init console messages are
34
- * flushed to OpenTelemetry immediately
35
- *
36
- * Calling this more than once returns the existing instance with a warning.
37
- *
38
- * @example
39
- * ```typescript
40
- * import { initBrowserLogs } from '@superblocksteam/telemetry/browser';
41
- *
42
- * const logs = initBrowserLogs({
43
- * otlpUrl: 'https://app.superblocks.com/api/v1/logs',
44
- * serviceName: 'superblocks-ui',
45
- * });
46
- *
47
- * const logger = logs.getLogger();
48
- * logger.emit({ severityNumber: SeverityNumber.INFO, body: 'hello' });
49
- * ```
50
- */
51
- export declare function initBrowserLogs(config: BrowserLogsConfig): BrowserLogsInstance;
52
- /**
53
- * Reset the browser log provider singleton (for testing only).
54
- * @internal
55
- */
56
- export declare function resetBrowserLogs(): void;
57
- //# sourceMappingURL=logs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/browser/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AASzD,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,6DAA6D;IAC7D,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAcD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,iBAAiB,GACxB,mBAAmB,CAgCrB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -1,80 +0,0 @@
1
- /**
2
- * Browser Log Provider
3
- *
4
- * Initializes the OTel LoggerProvider for browser contexts. Pairs with the
5
- * EarlyConsoleBuffer to ensure pre-init console messages are captured and
6
- * forwarded to the OTLP endpoint.
7
- *
8
- * This is the ONLY approved way to init log telemetry in browser contexts.
9
- */
10
- import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
11
- import { BatchLogRecordProcessor, LoggerProvider, } from "@opentelemetry/sdk-logs";
12
- import EarlyConsoleBuffer from "./early-console-buffer.js";
13
- import { createSanitizingLogProcessor } from "./sanitizer.js";
14
- // Singleton
15
- let instance;
16
- function validateConfig(config) {
17
- if (!config.serviceName?.trim()) {
18
- throw new Error("[Telemetry] serviceName is required and cannot be empty");
19
- }
20
- if (!config.otlpUrl?.trim()) {
21
- throw new Error("[Telemetry] otlpUrl is required for browser logs");
22
- }
23
- }
24
- /**
25
- * Initialize the browser log provider.
26
- *
27
- * - Creates an OTLPLogExporter pointed at `config.otlpUrl`
28
- * - Wraps it in a BatchLogRecordProcessor
29
- * - Enables the EarlyConsoleBuffer so buffered pre-init console messages are
30
- * flushed to OpenTelemetry immediately
31
- *
32
- * Calling this more than once returns the existing instance with a warning.
33
- *
34
- * @example
35
- * ```typescript
36
- * import { initBrowserLogs } from '@superblocksteam/telemetry/browser';
37
- *
38
- * const logs = initBrowserLogs({
39
- * otlpUrl: 'https://app.superblocks.com/api/v1/logs',
40
- * serviceName: 'superblocks-ui',
41
- * });
42
- *
43
- * const logger = logs.getLogger();
44
- * logger.emit({ severityNumber: SeverityNumber.INFO, body: 'hello' });
45
- * ```
46
- */
47
- export function initBrowserLogs(config) {
48
- validateConfig(config);
49
- if (instance) {
50
- console.warn("[Telemetry] Browser log provider already initialized");
51
- return instance;
52
- }
53
- const exporter = new OTLPLogExporter({ url: config.otlpUrl });
54
- const sanitizer = createSanitizingLogProcessor();
55
- const batchProcessor = new BatchLogRecordProcessor({ exporter });
56
- const provider = new LoggerProvider({
57
- resource: config.resource,
58
- processors: [sanitizer, batchProcessor],
59
- });
60
- // Wire the EarlyConsoleBuffer so buffered pre-init logs are flushed now.
61
- const otelLogger = provider.getLogger(config.serviceName, "1.0.0");
62
- EarlyConsoleBuffer.getInstance().enableOpenTelemetry(otelLogger);
63
- instance = {
64
- getLogger: (name) => provider.getLogger(name ?? config.serviceName, "1.0.0"),
65
- forceFlush: () => provider.forceFlush(),
66
- shutdown: async () => {
67
- await provider.shutdown();
68
- instance = undefined;
69
- },
70
- };
71
- return instance;
72
- }
73
- /**
74
- * Reset the browser log provider singleton (for testing only).
75
- * @internal
76
- */
77
- export function resetBrowserLogs() {
78
- instance = undefined;
79
- }
80
- //# sourceMappingURL=logs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/browser/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE,OAAO,EACL,uBAAuB,EACvB,cAAc,GACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAoB9D,YAAY;AACZ,IAAI,QAAyC,CAAC;AAE9C,SAAS,cAAc,CAAC,MAAyB;IAC/C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAyB;IAEzB,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACrE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,4BAA4B,EAAE,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,uBAAuB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;KACxC,CAAC,CAAC;IAEH,yEAAyE;IACzE,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACnE,kBAAkB,CAAC,WAAW,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEjE,QAAQ,GAAG;QACT,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE,CAC3B,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;QACzD,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;QACvC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC1B,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,QAAQ,GAAG,SAAS,CAAC;AACvB,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Browser Metrics Bootstrap
3
- *
4
- * Initializes a MeterProvider for browser contexts using OTLP HTTP export.
5
- */
6
- import { type Meter } from "@opentelemetry/api";
7
- import type { Resource } from "@opentelemetry/resources";
8
- export interface BrowserMetricsInstance {
9
- getMeter: (name?: string) => Meter;
10
- shutdown: () => Promise<void>;
11
- }
12
- export interface BrowserMetricsConfig {
13
- /** Full URL for metrics endpoint (e.g. "http://localhost:4318/v1/metrics") */
14
- otlpUrl: string;
15
- serviceName: string;
16
- /** Resource with service.name / deployment.environment.name for Datadog env tags. */
17
- resource?: Resource;
18
- }
19
- /**
20
- * Initialize browser metrics with a MeterProvider that exports via OTLP HTTP.
21
- *
22
- * Uses DELTA aggregation temporality so each export stands on its own and
23
- * Datadog does not see counter-reset artifacts from short-lived sessions.
24
- *
25
- * @param config - Browser metrics configuration
26
- * @returns Browser metrics instance with getMeter and shutdown
27
- */
28
- export declare function initBrowserMetrics(config: BrowserMetricsConfig): BrowserMetricsInstance;
29
- //# sourceMappingURL=metrics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/browser/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAOzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IACnC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAYD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAsBxB"}