@superblocksteam/telemetry 2.0.0-SNAPSHOT.329be19cb7ca892b
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.
- package/LICENSE.txt +87 -0
- package/README.md +298 -0
- package/dist/browser/console-logging.d.ts +18 -0
- package/dist/browser/console-logging.d.ts.map +1 -0
- package/dist/browser/console-logging.js +32 -0
- package/dist/browser/console-logging.js.map +1 -0
- package/dist/browser/early-console-buffer.d.ts +49 -0
- package/dist/browser/early-console-buffer.d.ts.map +1 -0
- package/dist/browser/early-console-buffer.js +182 -0
- package/dist/browser/early-console-buffer.js.map +1 -0
- package/dist/browser/index.d.ts +17 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +50 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/init.d.ts +101 -0
- package/dist/browser/init.d.ts.map +1 -0
- package/dist/browser/init.js +329 -0
- package/dist/browser/init.js.map +1 -0
- package/dist/browser/instrumentations.d.ts +67 -0
- package/dist/browser/instrumentations.d.ts.map +1 -0
- package/dist/browser/instrumentations.js +83 -0
- package/dist/browser/instrumentations.js.map +1 -0
- package/dist/browser/logs.d.ts +55 -0
- package/dist/browser/logs.d.ts.map +1 -0
- package/dist/browser/logs.js +86 -0
- package/dist/browser/logs.js.map +1 -0
- package/dist/browser/metrics.d.ts +29 -0
- package/dist/browser/metrics.d.ts.map +1 -0
- package/dist/browser/metrics.js +49 -0
- package/dist/browser/metrics.js.map +1 -0
- package/dist/browser/resilient-exporter.d.ts +43 -0
- package/dist/browser/resilient-exporter.d.ts.map +1 -0
- package/dist/browser/resilient-exporter.js +88 -0
- package/dist/browser/resilient-exporter.js.map +1 -0
- package/dist/browser/sanitizer.d.ts +35 -0
- package/dist/browser/sanitizer.d.ts.map +1 -0
- package/dist/browser/sanitizer.js +211 -0
- package/dist/browser/sanitizer.js.map +1 -0
- package/dist/browser/traced-socket.d.ts +102 -0
- package/dist/browser/traced-socket.d.ts.map +1 -0
- package/dist/browser/traced-socket.js +203 -0
- package/dist/browser/traced-socket.js.map +1 -0
- package/dist/common/contracts/tier2-traces.d.ts +116 -0
- package/dist/common/contracts/tier2-traces.d.ts.map +1 -0
- package/dist/common/contracts/tier2-traces.js +736 -0
- package/dist/common/contracts/tier2-traces.js.map +1 -0
- package/dist/common/deployment-type.d.ts +18 -0
- package/dist/common/deployment-type.d.ts.map +1 -0
- package/dist/common/deployment-type.js +30 -0
- package/dist/common/deployment-type.js.map +1 -0
- package/dist/common/guardrails.d.ts +116 -0
- package/dist/common/guardrails.d.ts.map +1 -0
- package/dist/common/guardrails.js +189 -0
- package/dist/common/guardrails.js.map +1 -0
- package/dist/common/index.d.ts +18 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +34 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/log-sanitizer.d.ts +170 -0
- package/dist/common/log-sanitizer.d.ts.map +1 -0
- package/dist/common/log-sanitizer.js +690 -0
- package/dist/common/log-sanitizer.js.map +1 -0
- package/dist/common/normalize-metric-path.d.ts +2 -0
- package/dist/common/normalize-metric-path.d.ts.map +1 -0
- package/dist/common/normalize-metric-path.js +22 -0
- package/dist/common/normalize-metric-path.js.map +1 -0
- package/dist/common/policy-evaluator.d.ts +103 -0
- package/dist/common/policy-evaluator.d.ts.map +1 -0
- package/dist/common/policy-evaluator.js +200 -0
- package/dist/common/policy-evaluator.js.map +1 -0
- package/dist/common/resource.d.ts +79 -0
- package/dist/common/resource.d.ts.map +1 -0
- package/dist/common/resource.js +128 -0
- package/dist/common/resource.js.map +1 -0
- package/dist/common/tier-hints.d.ts +182 -0
- package/dist/common/tier-hints.d.ts.map +1 -0
- package/dist/common/tier-hints.js +209 -0
- package/dist/common/tier-hints.js.map +1 -0
- package/dist/common/trace-sanitizer.d.ts +82 -0
- package/dist/common/trace-sanitizer.d.ts.map +1 -0
- package/dist/common/trace-sanitizer.js +234 -0
- package/dist/common/trace-sanitizer.js.map +1 -0
- package/dist/common/traced-socket-types.d.ts +43 -0
- package/dist/common/traced-socket-types.d.ts.map +1 -0
- package/dist/common/traced-socket-types.js +17 -0
- package/dist/common/traced-socket-types.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +88 -0
- package/dist/index.js.map +1 -0
- package/dist/lint/forbidden-attributes.d.ts +149 -0
- package/dist/lint/forbidden-attributes.d.ts.map +1 -0
- package/dist/lint/forbidden-attributes.js +215 -0
- package/dist/lint/forbidden-attributes.js.map +1 -0
- package/dist/lint/index.d.ts +9 -0
- package/dist/lint/index.d.ts.map +1 -0
- package/dist/lint/index.js +16 -0
- package/dist/lint/index.js.map +1 -0
- package/dist/llmobs/index.d.ts +22 -0
- package/dist/llmobs/index.d.ts.map +1 -0
- package/dist/llmobs/index.js +29 -0
- package/dist/llmobs/index.js.map +1 -0
- package/dist/llmobs/tier1-exporter.d.ts +146 -0
- package/dist/llmobs/tier1-exporter.d.ts.map +1 -0
- package/dist/llmobs/tier1-exporter.js +199 -0
- package/dist/llmobs/tier1-exporter.js.map +1 -0
- package/dist/llmobs/tier2-summarizer.d.ts +268 -0
- package/dist/llmobs/tier2-summarizer.d.ts.map +1 -0
- package/dist/llmobs/tier2-summarizer.js +656 -0
- package/dist/llmobs/tier2-summarizer.js.map +1 -0
- package/dist/node/dynamic-attribute-processor.d.ts +43 -0
- package/dist/node/dynamic-attribute-processor.d.ts.map +1 -0
- package/dist/node/dynamic-attribute-processor.js +79 -0
- package/dist/node/dynamic-attribute-processor.js.map +1 -0
- package/dist/node/exporters/resilient-exporter.d.ts +91 -0
- package/dist/node/exporters/resilient-exporter.d.ts.map +1 -0
- package/dist/node/exporters/resilient-exporter.js +136 -0
- package/dist/node/exporters/resilient-exporter.js.map +1 -0
- package/dist/node/index.d.ts +13 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +32 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/init.d.ts +97 -0
- package/dist/node/init.d.ts.map +1 -0
- package/dist/node/init.js +365 -0
- package/dist/node/init.js.map +1 -0
- package/dist/node/local-obs-mode.d.ts +17 -0
- package/dist/node/local-obs-mode.d.ts.map +1 -0
- package/dist/node/local-obs-mode.js +22 -0
- package/dist/node/local-obs-mode.js.map +1 -0
- package/dist/node/log-processor.d.ts +132 -0
- package/dist/node/log-processor.d.ts.map +1 -0
- package/dist/node/log-processor.js +397 -0
- package/dist/node/log-processor.js.map +1 -0
- package/dist/node/metrics-client.d.ts +88 -0
- package/dist/node/metrics-client.d.ts.map +1 -0
- package/dist/node/metrics-client.js +209 -0
- package/dist/node/metrics-client.js.map +1 -0
- package/dist/node/safe-logger.d.ts +55 -0
- package/dist/node/safe-logger.d.ts.map +1 -0
- package/dist/node/safe-logger.js +158 -0
- package/dist/node/safe-logger.js.map +1 -0
- package/dist/node/sanitizing-processor.d.ts +67 -0
- package/dist/node/sanitizing-processor.d.ts.map +1 -0
- package/dist/node/sanitizing-processor.js +167 -0
- package/dist/node/sanitizing-processor.js.map +1 -0
- package/dist/node/service-tracers.d.ts +52 -0
- package/dist/node/service-tracers.d.ts.map +1 -0
- package/dist/node/service-tracers.js +81 -0
- package/dist/node/service-tracers.js.map +1 -0
- package/dist/node/traced-socket.d.ts +120 -0
- package/dist/node/traced-socket.d.ts.map +1 -0
- package/dist/node/traced-socket.js +338 -0
- package/dist/node/traced-socket.js.map +1 -0
- package/dist/npm-registry/emitter.d.ts +310 -0
- package/dist/npm-registry/emitter.d.ts.map +1 -0
- package/dist/npm-registry/emitter.js +537 -0
- package/dist/npm-registry/emitter.js.map +1 -0
- package/dist/npm-registry/index.d.ts +12 -0
- package/dist/npm-registry/index.d.ts.map +1 -0
- package/dist/npm-registry/index.js +28 -0
- package/dist/npm-registry/index.js.map +1 -0
- package/dist/npm-registry/sanitize.d.ts +174 -0
- package/dist/npm-registry/sanitize.d.ts.map +1 -0
- package/dist/npm-registry/sanitize.js +342 -0
- package/dist/npm-registry/sanitize.js.map +1 -0
- package/dist/npm-registry/spans.d.ts +61 -0
- package/dist/npm-registry/spans.d.ts.map +1 -0
- package/dist/npm-registry/spans.js +91 -0
- package/dist/npm-registry/spans.js.map +1 -0
- package/dist/testing/in-memory-exporter.d.ts +179 -0
- package/dist/testing/in-memory-exporter.d.ts.map +1 -0
- package/dist/testing/in-memory-exporter.js +256 -0
- package/dist/testing/in-memory-exporter.js.map +1 -0
- package/dist/testing/index.d.ts +9 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +21 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/metrics-capture.d.ts +29 -0
- package/dist/testing/metrics-capture.d.ts.map +1 -0
- package/dist/testing/metrics-capture.js +74 -0
- package/dist/testing/metrics-capture.js.map +1 -0
- package/dist/testing/test-init.d.ts +80 -0
- package/dist/testing/test-init.d.ts.map +1 -0
- package/dist/testing/test-init.js +144 -0
- package/dist/testing/test-init.js.map +1 -0
- package/dist/types/index.d.ts +84 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/policy.d.ts +92 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/policy.js +125 -0
- package/dist/types/policy.js.map +1 -0
- package/dist-esm/browser/console-logging.d.ts +18 -0
- package/dist-esm/browser/console-logging.d.ts.map +1 -0
- package/dist-esm/browser/console-logging.js +27 -0
- package/dist-esm/browser/console-logging.js.map +1 -0
- package/dist-esm/browser/early-console-buffer.d.ts +49 -0
- package/dist-esm/browser/early-console-buffer.d.ts.map +1 -0
- package/dist-esm/browser/early-console-buffer.js +180 -0
- package/dist-esm/browser/early-console-buffer.js.map +1 -0
- package/dist-esm/browser/index.d.ts +17 -0
- package/dist-esm/browser/index.d.ts.map +1 -0
- package/dist-esm/browser/index.js +22 -0
- package/dist-esm/browser/index.js.map +1 -0
- package/dist-esm/browser/init.d.ts +101 -0
- package/dist-esm/browser/init.d.ts.map +1 -0
- package/dist-esm/browser/init.js +319 -0
- package/dist-esm/browser/init.js.map +1 -0
- package/dist-esm/browser/instrumentations.d.ts +67 -0
- package/dist-esm/browser/instrumentations.d.ts.map +1 -0
- package/dist-esm/browser/instrumentations.js +79 -0
- package/dist-esm/browser/instrumentations.js.map +1 -0
- package/dist-esm/browser/logs.d.ts +55 -0
- package/dist-esm/browser/logs.d.ts.map +1 -0
- package/dist-esm/browser/logs.js +79 -0
- package/dist-esm/browser/logs.js.map +1 -0
- package/dist-esm/browser/metrics.d.ts +29 -0
- package/dist-esm/browser/metrics.d.ts.map +1 -0
- package/dist-esm/browser/metrics.js +46 -0
- package/dist-esm/browser/metrics.js.map +1 -0
- package/dist-esm/browser/resilient-exporter.d.ts +43 -0
- package/dist-esm/browser/resilient-exporter.d.ts.map +1 -0
- package/dist-esm/browser/resilient-exporter.js +84 -0
- package/dist-esm/browser/resilient-exporter.js.map +1 -0
- package/dist-esm/browser/sanitizer.d.ts +35 -0
- package/dist-esm/browser/sanitizer.d.ts.map +1 -0
- package/dist-esm/browser/sanitizer.js +207 -0
- package/dist-esm/browser/sanitizer.js.map +1 -0
- package/dist-esm/browser/traced-socket.d.ts +102 -0
- package/dist-esm/browser/traced-socket.d.ts.map +1 -0
- package/dist-esm/browser/traced-socket.js +199 -0
- package/dist-esm/browser/traced-socket.js.map +1 -0
- package/dist-esm/common/contracts/tier2-traces.d.ts +116 -0
- package/dist-esm/common/contracts/tier2-traces.d.ts.map +1 -0
- package/dist-esm/common/contracts/tier2-traces.js +725 -0
- package/dist-esm/common/contracts/tier2-traces.js.map +1 -0
- package/dist-esm/common/deployment-type.d.ts +18 -0
- package/dist-esm/common/deployment-type.d.ts.map +1 -0
- package/dist-esm/common/deployment-type.js +27 -0
- package/dist-esm/common/deployment-type.js.map +1 -0
- package/dist-esm/common/guardrails.d.ts +116 -0
- package/dist-esm/common/guardrails.d.ts.map +1 -0
- package/dist-esm/common/guardrails.js +179 -0
- package/dist-esm/common/guardrails.js.map +1 -0
- package/dist-esm/common/index.d.ts +18 -0
- package/dist-esm/common/index.d.ts.map +1 -0
- package/dist-esm/common/index.js +18 -0
- package/dist-esm/common/index.js.map +1 -0
- package/dist-esm/common/log-sanitizer.d.ts +170 -0
- package/dist-esm/common/log-sanitizer.d.ts.map +1 -0
- package/dist-esm/common/log-sanitizer.js +672 -0
- package/dist-esm/common/log-sanitizer.js.map +1 -0
- package/dist-esm/common/normalize-metric-path.d.ts +2 -0
- package/dist-esm/common/normalize-metric-path.d.ts.map +1 -0
- package/dist-esm/common/normalize-metric-path.js +19 -0
- package/dist-esm/common/normalize-metric-path.js.map +1 -0
- package/dist-esm/common/policy-evaluator.d.ts +103 -0
- package/dist-esm/common/policy-evaluator.d.ts.map +1 -0
- package/dist-esm/common/policy-evaluator.js +196 -0
- package/dist-esm/common/policy-evaluator.js.map +1 -0
- package/dist-esm/common/resource.d.ts +79 -0
- package/dist-esm/common/resource.d.ts.map +1 -0
- package/dist-esm/common/resource.js +121 -0
- package/dist-esm/common/resource.js.map +1 -0
- package/dist-esm/common/tier-hints.d.ts +182 -0
- package/dist-esm/common/tier-hints.d.ts.map +1 -0
- package/dist-esm/common/tier-hints.js +199 -0
- package/dist-esm/common/tier-hints.js.map +1 -0
- package/dist-esm/common/trace-sanitizer.d.ts +82 -0
- package/dist-esm/common/trace-sanitizer.d.ts.map +1 -0
- package/dist-esm/common/trace-sanitizer.js +230 -0
- package/dist-esm/common/trace-sanitizer.js.map +1 -0
- package/dist-esm/common/traced-socket-types.d.ts +43 -0
- package/dist-esm/common/traced-socket-types.d.ts.map +1 -0
- package/dist-esm/common/traced-socket-types.js +16 -0
- package/dist-esm/common/traced-socket-types.js.map +1 -0
- package/dist-esm/index.d.ts +45 -0
- package/dist-esm/index.d.ts.map +1 -0
- package/dist-esm/index.js +56 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/lint/forbidden-attributes.d.ts +149 -0
- package/dist-esm/lint/forbidden-attributes.d.ts.map +1 -0
- package/dist-esm/lint/forbidden-attributes.js +210 -0
- package/dist-esm/lint/forbidden-attributes.js.map +1 -0
- package/dist-esm/lint/index.d.ts +9 -0
- package/dist-esm/lint/index.d.ts.map +1 -0
- package/dist-esm/lint/index.js +9 -0
- package/dist-esm/lint/index.js.map +1 -0
- package/dist-esm/llmobs/index.d.ts +22 -0
- package/dist-esm/llmobs/index.d.ts.map +1 -0
- package/dist-esm/llmobs/index.js +22 -0
- package/dist-esm/llmobs/index.js.map +1 -0
- package/dist-esm/llmobs/tier1-exporter.d.ts +146 -0
- package/dist-esm/llmobs/tier1-exporter.d.ts.map +1 -0
- package/dist-esm/llmobs/tier1-exporter.js +193 -0
- package/dist-esm/llmobs/tier1-exporter.js.map +1 -0
- package/dist-esm/llmobs/tier2-summarizer.d.ts +268 -0
- package/dist-esm/llmobs/tier2-summarizer.d.ts.map +1 -0
- package/dist-esm/llmobs/tier2-summarizer.js +652 -0
- package/dist-esm/llmobs/tier2-summarizer.js.map +1 -0
- package/dist-esm/node/dynamic-attribute-processor.d.ts +43 -0
- package/dist-esm/node/dynamic-attribute-processor.d.ts.map +1 -0
- package/dist-esm/node/dynamic-attribute-processor.js +74 -0
- package/dist-esm/node/dynamic-attribute-processor.js.map +1 -0
- package/dist-esm/node/exporters/resilient-exporter.d.ts +91 -0
- package/dist-esm/node/exporters/resilient-exporter.d.ts.map +1 -0
- package/dist-esm/node/exporters/resilient-exporter.js +132 -0
- package/dist-esm/node/exporters/resilient-exporter.js.map +1 -0
- package/dist-esm/node/index.d.ts +13 -0
- package/dist-esm/node/index.d.ts.map +1 -0
- package/dist-esm/node/index.js +13 -0
- package/dist-esm/node/index.js.map +1 -0
- package/dist-esm/node/init.d.ts +97 -0
- package/dist-esm/node/init.d.ts.map +1 -0
- package/dist-esm/node/init.js +359 -0
- package/dist-esm/node/init.js.map +1 -0
- package/dist-esm/node/local-obs-mode.d.ts +17 -0
- package/dist-esm/node/local-obs-mode.d.ts.map +1 -0
- package/dist-esm/node/local-obs-mode.js +19 -0
- package/dist-esm/node/local-obs-mode.js.map +1 -0
- package/dist-esm/node/log-processor.d.ts +132 -0
- package/dist-esm/node/log-processor.d.ts.map +1 -0
- package/dist-esm/node/log-processor.js +389 -0
- package/dist-esm/node/log-processor.js.map +1 -0
- package/dist-esm/node/metrics-client.d.ts +88 -0
- package/dist-esm/node/metrics-client.d.ts.map +1 -0
- package/dist-esm/node/metrics-client.js +205 -0
- package/dist-esm/node/metrics-client.js.map +1 -0
- package/dist-esm/node/safe-logger.d.ts +55 -0
- package/dist-esm/node/safe-logger.d.ts.map +1 -0
- package/dist-esm/node/safe-logger.js +154 -0
- package/dist-esm/node/safe-logger.js.map +1 -0
- package/dist-esm/node/sanitizing-processor.d.ts +67 -0
- package/dist-esm/node/sanitizing-processor.d.ts.map +1 -0
- package/dist-esm/node/sanitizing-processor.js +163 -0
- package/dist-esm/node/sanitizing-processor.js.map +1 -0
- package/dist-esm/node/service-tracers.d.ts +52 -0
- package/dist-esm/node/service-tracers.d.ts.map +1 -0
- package/dist-esm/node/service-tracers.js +78 -0
- package/dist-esm/node/service-tracers.js.map +1 -0
- package/dist-esm/node/traced-socket.d.ts +120 -0
- package/dist-esm/node/traced-socket.d.ts.map +1 -0
- package/dist-esm/node/traced-socket.js +334 -0
- package/dist-esm/node/traced-socket.js.map +1 -0
- package/dist-esm/npm-registry/emitter.d.ts +310 -0
- package/dist-esm/npm-registry/emitter.d.ts.map +1 -0
- package/dist-esm/npm-registry/emitter.js +525 -0
- package/dist-esm/npm-registry/emitter.js.map +1 -0
- package/dist-esm/npm-registry/index.d.ts +12 -0
- package/dist-esm/npm-registry/index.d.ts.map +1 -0
- package/dist-esm/npm-registry/index.js +12 -0
- package/dist-esm/npm-registry/index.js.map +1 -0
- package/dist-esm/npm-registry/sanitize.d.ts +174 -0
- package/dist-esm/npm-registry/sanitize.d.ts.map +1 -0
- package/dist-esm/npm-registry/sanitize.js +331 -0
- package/dist-esm/npm-registry/sanitize.js.map +1 -0
- package/dist-esm/npm-registry/spans.d.ts +61 -0
- package/dist-esm/npm-registry/spans.d.ts.map +1 -0
- package/dist-esm/npm-registry/spans.js +86 -0
- package/dist-esm/npm-registry/spans.js.map +1 -0
- package/dist-esm/package.json +1 -0
- package/dist-esm/testing/in-memory-exporter.d.ts +179 -0
- package/dist-esm/testing/in-memory-exporter.d.ts.map +1 -0
- package/dist-esm/testing/in-memory-exporter.js +250 -0
- package/dist-esm/testing/in-memory-exporter.js.map +1 -0
- package/dist-esm/testing/index.d.ts +9 -0
- package/dist-esm/testing/index.d.ts.map +1 -0
- package/dist-esm/testing/index.js +9 -0
- package/dist-esm/testing/index.js.map +1 -0
- package/dist-esm/testing/metrics-capture.d.ts +29 -0
- package/dist-esm/testing/metrics-capture.d.ts.map +1 -0
- package/dist-esm/testing/metrics-capture.js +71 -0
- package/dist-esm/testing/metrics-capture.js.map +1 -0
- package/dist-esm/testing/test-init.d.ts +80 -0
- package/dist-esm/testing/test-init.d.ts.map +1 -0
- package/dist-esm/testing/test-init.js +137 -0
- package/dist-esm/testing/test-init.js.map +1 -0
- package/dist-esm/types/index.d.ts +84 -0
- package/dist-esm/types/index.d.ts.map +1 -0
- package/dist-esm/types/index.js +7 -0
- package/dist-esm/types/index.js.map +1 -0
- package/dist-esm/types/policy.d.ts +92 -0
- package/dist-esm/types/policy.d.ts.map +1 -0
- package/dist-esm/types/policy.js +122 -0
- package/dist-esm/types/policy.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,29 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser Metrics Bootstrap
|
|
4
|
+
*
|
|
5
|
+
* Initializes a MeterProvider for browser contexts using OTLP HTTP export.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.initBrowserMetrics = initBrowserMetrics;
|
|
9
|
+
const api_1 = require("@opentelemetry/api");
|
|
10
|
+
const exporter_metrics_otlp_http_1 = require("@opentelemetry/exporter-metrics-otlp-http");
|
|
11
|
+
const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
|
|
12
|
+
/**
|
|
13
|
+
* Browser metrics export interval.
|
|
14
|
+
*
|
|
15
|
+
* The OTel default is 60 s, but browser sessions are typically short-lived.
|
|
16
|
+
* A page closed before the first export fires silently loses all recorded
|
|
17
|
+
* metrics (there is no flush-on-unload in PeriodicExportingMetricReader).
|
|
18
|
+
* 10 s keeps the window small enough that most sessions export at least once.
|
|
19
|
+
*/
|
|
20
|
+
const BROWSER_EXPORT_INTERVAL_MS = 10_000;
|
|
21
|
+
/**
|
|
22
|
+
* Initialize browser metrics with a MeterProvider that exports via OTLP HTTP.
|
|
23
|
+
*
|
|
24
|
+
* Uses DELTA aggregation temporality so each export stands on its own and
|
|
25
|
+
* Datadog does not see counter-reset artifacts from short-lived sessions.
|
|
26
|
+
*
|
|
27
|
+
* @param config - Browser metrics configuration
|
|
28
|
+
* @returns Browser metrics instance with getMeter and shutdown
|
|
29
|
+
*/
|
|
30
|
+
function initBrowserMetrics(config) {
|
|
31
|
+
const exporter = new exporter_metrics_otlp_http_1.OTLPMetricExporter({
|
|
32
|
+
url: config.otlpUrl,
|
|
33
|
+
temporalityPreference: sdk_metrics_1.AggregationTemporality.DELTA,
|
|
34
|
+
});
|
|
35
|
+
const reader = new sdk_metrics_1.PeriodicExportingMetricReader({
|
|
36
|
+
exporter,
|
|
37
|
+
exportIntervalMillis: BROWSER_EXPORT_INTERVAL_MS,
|
|
38
|
+
});
|
|
39
|
+
const provider = new sdk_metrics_1.MeterProvider({
|
|
40
|
+
resource: config.resource,
|
|
41
|
+
readers: [reader],
|
|
42
|
+
});
|
|
43
|
+
api_1.metrics.setGlobalMeterProvider(provider);
|
|
44
|
+
return {
|
|
45
|
+
getMeter: (name) => provider.getMeter(name ?? config.serviceName),
|
|
46
|
+
shutdown: () => provider.shutdown(),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/browser/metrics.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA2CH,gDAwBC;AAjED,4CAAyD;AACzD,0FAA+E;AAE/E,4DAIoC;AAepC;;;;;;;GAOG;AACH,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAE1C;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAChC,MAA4B;IAE5B,MAAM,QAAQ,GAAG,IAAI,+CAAkB,CAAC;QACtC,GAAG,EAAE,MAAM,CAAC,OAAO;QACnB,qBAAqB,EAAE,oCAAsB,CAAC,KAAK;KACpD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,2CAA6B,CAAC;QAC/C,QAAQ;QACR,oBAAoB,EAAE,0BAA0B;KACjD,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,2BAAa,CAAC;QACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB,CAAC,CAAC;IAEH,aAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAEzC,OAAO;QACL,QAAQ,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;QAC1E,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Resilient Exporter
|
|
3
|
+
*
|
|
4
|
+
* Simplified resilient exporter for browser environments.
|
|
5
|
+
* Ensures export failures don't affect the main thread.
|
|
6
|
+
*/
|
|
7
|
+
import { ExportResult } from "@opentelemetry/core";
|
|
8
|
+
import type { SpanExporter, ReadableSpan } from "@opentelemetry/sdk-trace-base";
|
|
9
|
+
/**
|
|
10
|
+
* Configuration for the browser resilient exporter.
|
|
11
|
+
*/
|
|
12
|
+
export interface BrowserResilientExporterConfig {
|
|
13
|
+
/** Underlying exporter to wrap */
|
|
14
|
+
delegate: SpanExporter;
|
|
15
|
+
/** Max items to buffer before dropping (default: 512, lower than Node for memory) */
|
|
16
|
+
maxQueueSize?: number;
|
|
17
|
+
/** Export timeout in ms (default: 10000, shorter for browser) */
|
|
18
|
+
exportTimeoutMs?: number;
|
|
19
|
+
/** Callback when items are dropped */
|
|
20
|
+
onDrop?: (count: number, reason: "queue_full" | "export_failed" | "timeout") => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Browser-compatible resilient exporter.
|
|
24
|
+
*
|
|
25
|
+
* CRITICAL: Export failures must never block or affect the main thread.
|
|
26
|
+
* This wrapper catches all errors and timeouts.
|
|
27
|
+
*/
|
|
28
|
+
export declare class BrowserResilientExporter implements SpanExporter {
|
|
29
|
+
private readonly delegate;
|
|
30
|
+
private readonly maxQueueSize;
|
|
31
|
+
private readonly exportTimeoutMs;
|
|
32
|
+
private readonly onDrop;
|
|
33
|
+
private queuedCount;
|
|
34
|
+
private shuttingDown;
|
|
35
|
+
constructor(config: BrowserResilientExporterConfig);
|
|
36
|
+
/**
|
|
37
|
+
* Export spans with resilient error handling.
|
|
38
|
+
*/
|
|
39
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
|
|
40
|
+
shutdown(): Promise<void>;
|
|
41
|
+
forceFlush(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=resilient-exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilient-exporter.d.ts","sourceRoot":"","sources":["../../src/browser/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;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,SAAS,KAC/C,IAAI,CAAC;CACX;AAED;;;;;GAKG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAC3D,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;IAEV,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,8BAA8B;IAOlD;;OAEG;IACH,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI;IAiDD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser Resilient Exporter
|
|
4
|
+
*
|
|
5
|
+
* Simplified resilient exporter for browser environments.
|
|
6
|
+
* Ensures export failures don't affect the main thread.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.BrowserResilientExporter = void 0;
|
|
10
|
+
const core_1 = require("@opentelemetry/core");
|
|
11
|
+
/**
|
|
12
|
+
* Browser-compatible resilient exporter.
|
|
13
|
+
*
|
|
14
|
+
* CRITICAL: Export failures must never block or affect the main thread.
|
|
15
|
+
* This wrapper catches all errors and timeouts.
|
|
16
|
+
*/
|
|
17
|
+
class BrowserResilientExporter {
|
|
18
|
+
delegate;
|
|
19
|
+
maxQueueSize;
|
|
20
|
+
exportTimeoutMs;
|
|
21
|
+
onDrop;
|
|
22
|
+
queuedCount = 0;
|
|
23
|
+
shuttingDown = false;
|
|
24
|
+
constructor(config) {
|
|
25
|
+
this.delegate = config.delegate;
|
|
26
|
+
this.maxQueueSize = config.maxQueueSize ?? 512;
|
|
27
|
+
this.exportTimeoutMs = config.exportTimeoutMs ?? 10000;
|
|
28
|
+
this.onDrop = config.onDrop ?? (() => { });
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Export spans with resilient error handling.
|
|
32
|
+
*/
|
|
33
|
+
export(spans, resultCallback) {
|
|
34
|
+
// Reject during shutdown
|
|
35
|
+
if (this.shuttingDown) {
|
|
36
|
+
resultCallback({ code: core_1.ExportResultCode.SUCCESS });
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Check backpressure
|
|
40
|
+
if (this.queuedCount + spans.length > this.maxQueueSize) {
|
|
41
|
+
this.onDrop(spans.length, "queue_full");
|
|
42
|
+
resultCallback({ code: core_1.ExportResultCode.SUCCESS });
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.queuedCount += spans.length;
|
|
46
|
+
let completed = false;
|
|
47
|
+
// Timeout handler
|
|
48
|
+
const timeoutId = setTimeout(() => {
|
|
49
|
+
if (completed)
|
|
50
|
+
return;
|
|
51
|
+
completed = true;
|
|
52
|
+
this.queuedCount -= spans.length;
|
|
53
|
+
this.onDrop(spans.length, "timeout");
|
|
54
|
+
resultCallback({ code: core_1.ExportResultCode.SUCCESS });
|
|
55
|
+
}, this.exportTimeoutMs);
|
|
56
|
+
try {
|
|
57
|
+
this.delegate.export(spans, (result) => {
|
|
58
|
+
if (completed)
|
|
59
|
+
return;
|
|
60
|
+
completed = true;
|
|
61
|
+
clearTimeout(timeoutId);
|
|
62
|
+
this.queuedCount -= spans.length;
|
|
63
|
+
if (result.code !== core_1.ExportResultCode.SUCCESS) {
|
|
64
|
+
this.onDrop(spans.length, "export_failed");
|
|
65
|
+
}
|
|
66
|
+
resultCallback({ code: core_1.ExportResultCode.SUCCESS });
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
if (completed)
|
|
71
|
+
return;
|
|
72
|
+
completed = true;
|
|
73
|
+
clearTimeout(timeoutId);
|
|
74
|
+
this.queuedCount -= spans.length;
|
|
75
|
+
this.onDrop(spans.length, "export_failed");
|
|
76
|
+
resultCallback({ code: core_1.ExportResultCode.SUCCESS });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async shutdown() {
|
|
80
|
+
this.shuttingDown = true;
|
|
81
|
+
return this.delegate.shutdown();
|
|
82
|
+
}
|
|
83
|
+
async forceFlush() {
|
|
84
|
+
return this.delegate.forceFlush?.() ?? Promise.resolve();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.BrowserResilientExporter = BrowserResilientExporter;
|
|
88
|
+
//# sourceMappingURL=resilient-exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilient-exporter.js","sourceRoot":"","sources":["../../src/browser/resilient-exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser PII Sanitizing Processors
|
|
3
|
+
*
|
|
4
|
+
* Span and log processors that redact PII before export from the browser.
|
|
5
|
+
* Browser telemetry always runs in untrusted context, so aggressive sanitization
|
|
6
|
+
* is applied unconditionally.
|
|
7
|
+
*
|
|
8
|
+
* - SanitizingSpanProcessor: redacts sensitive span attributes and strips
|
|
9
|
+
* sensitive query params from URL attributes.
|
|
10
|
+
* - SanitizingLogProcessor: redacts sensitive log record attributes and
|
|
11
|
+
* replaces email-like patterns in log body text.
|
|
12
|
+
*/
|
|
13
|
+
import type { LogRecordProcessor } from "@opentelemetry/sdk-logs";
|
|
14
|
+
import type { SpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
15
|
+
export interface SanitizingConfig {
|
|
16
|
+
/** Additional attribute key patterns to redact */
|
|
17
|
+
additionalKeyPatterns?: RegExp[];
|
|
18
|
+
/** Additional URL param names to strip */
|
|
19
|
+
additionalSensitiveParams?: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a SpanProcessor that redacts PII from span attributes before export.
|
|
23
|
+
*
|
|
24
|
+
* @param config - Optional configuration for additional key patterns / URL params
|
|
25
|
+
* @returns A SpanProcessor suitable for use in a browser WebTracerProvider
|
|
26
|
+
*/
|
|
27
|
+
export declare function createSanitizingSpanProcessor(config?: SanitizingConfig): SpanProcessor;
|
|
28
|
+
/**
|
|
29
|
+
* Create a LogRecordProcessor that redacts PII from log records before export.
|
|
30
|
+
*
|
|
31
|
+
* @param config - Optional configuration for additional key patterns
|
|
32
|
+
* @returns A LogRecordProcessor suitable for use in a browser log provider
|
|
33
|
+
*/
|
|
34
|
+
export declare function createSanitizingLogProcessor(config?: SanitizingConfig): LogRecordProcessor;
|
|
35
|
+
//# sourceMappingURL=sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/browser/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAGV,aAAa,EACd,MAAM,+BAA+B,CAAC;AAwDvC,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,0CAA0C;IAC1C,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC;AAsKD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,CAAC,EAAE,gBAAgB,GACxB,aAAa,CAEf;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,CAAC,EAAE,gBAAgB,GACxB,kBAAkB,CAEpB"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser PII Sanitizing Processors
|
|
4
|
+
*
|
|
5
|
+
* Span and log processors that redact PII before export from the browser.
|
|
6
|
+
* Browser telemetry always runs in untrusted context, so aggressive sanitization
|
|
7
|
+
* is applied unconditionally.
|
|
8
|
+
*
|
|
9
|
+
* - SanitizingSpanProcessor: redacts sensitive span attributes and strips
|
|
10
|
+
* sensitive query params from URL attributes.
|
|
11
|
+
* - SanitizingLogProcessor: redacts sensitive log record attributes and
|
|
12
|
+
* replaces email-like patterns in log body text.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.createSanitizingSpanProcessor = createSanitizingSpanProcessor;
|
|
16
|
+
exports.createSanitizingLogProcessor = createSanitizingLogProcessor;
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Constants
|
|
19
|
+
// ============================================================================
|
|
20
|
+
const REDACTED = "[REDACTED]";
|
|
21
|
+
const REDACTED_EMAIL = "[REDACTED_EMAIL]";
|
|
22
|
+
/**
|
|
23
|
+
* Attribute key substrings that indicate sensitive values.
|
|
24
|
+
* Case-insensitive matching is applied.
|
|
25
|
+
*/
|
|
26
|
+
const SENSITIVE_KEY_SUBSTRINGS = [
|
|
27
|
+
"email",
|
|
28
|
+
"token",
|
|
29
|
+
"secret",
|
|
30
|
+
"password",
|
|
31
|
+
"authorization",
|
|
32
|
+
"cookie",
|
|
33
|
+
"credential",
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Attribute key patterns (regex) for additional well-known sensitive keys
|
|
37
|
+
* not covered by simple substring matching (e.g. api_key, x-api-key).
|
|
38
|
+
*/
|
|
39
|
+
const SENSITIVE_KEY_PATTERNS = [
|
|
40
|
+
/api[_\-.]?key/i,
|
|
41
|
+
/x[_\-.]?api[_\-.]?key/i,
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* URL query parameter names that should be stripped.
|
|
45
|
+
* Exact (case-insensitive) match against param name.
|
|
46
|
+
*/
|
|
47
|
+
const SENSITIVE_URL_PARAMS = [
|
|
48
|
+
"token",
|
|
49
|
+
"key",
|
|
50
|
+
"secret",
|
|
51
|
+
"password",
|
|
52
|
+
"code",
|
|
53
|
+
"state",
|
|
54
|
+
"auth",
|
|
55
|
+
];
|
|
56
|
+
/** URL attribute keys that receive query-param sanitization. */
|
|
57
|
+
const URL_ATTRIBUTE_KEYS = new Set(["http.url", "url.full"]);
|
|
58
|
+
/** Regex matching email-like patterns in log body text. */
|
|
59
|
+
const EMAIL_PATTERN = /[\w.+-]+@[\w.-]+(\.\w+)?/g;
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Helpers
|
|
62
|
+
// ============================================================================
|
|
63
|
+
/**
|
|
64
|
+
* Returns true if the attribute key is sensitive and its value should be
|
|
65
|
+
* replaced with [REDACTED].
|
|
66
|
+
*/
|
|
67
|
+
function isSensitiveKey(key, additionalPatterns) {
|
|
68
|
+
const lower = key.toLowerCase();
|
|
69
|
+
for (const substr of SENSITIVE_KEY_SUBSTRINGS) {
|
|
70
|
+
if (lower.includes(substr)) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const pattern of SENSITIVE_KEY_PATTERNS) {
|
|
75
|
+
pattern.lastIndex = 0;
|
|
76
|
+
if (pattern.test(key)) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const pattern of additionalPatterns) {
|
|
81
|
+
pattern.lastIndex = 0;
|
|
82
|
+
if (pattern.test(key)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Strips sensitive query parameters from a URL string.
|
|
90
|
+
* Sensitive param values are replaced with [REDACTED] (key is preserved).
|
|
91
|
+
*/
|
|
92
|
+
function sanitizeUrl(url, additionalParams) {
|
|
93
|
+
const qIdx = url.indexOf("?");
|
|
94
|
+
if (qIdx === -1) {
|
|
95
|
+
return url;
|
|
96
|
+
}
|
|
97
|
+
const base = url.slice(0, qIdx);
|
|
98
|
+
const query = url.slice(qIdx + 1);
|
|
99
|
+
const sensitiveSet = new Set([
|
|
100
|
+
...SENSITIVE_URL_PARAMS.map((p) => p.toLowerCase()),
|
|
101
|
+
...additionalParams.map((p) => p.toLowerCase()),
|
|
102
|
+
]);
|
|
103
|
+
const sanitizedParts = query.split("&").map((part) => {
|
|
104
|
+
const eqIdx = part.indexOf("=");
|
|
105
|
+
if (eqIdx === -1) {
|
|
106
|
+
return part;
|
|
107
|
+
}
|
|
108
|
+
const rawParamName = part.slice(0, eqIdx);
|
|
109
|
+
let paramName;
|
|
110
|
+
try {
|
|
111
|
+
paramName = decodeURIComponent(rawParamName).toLowerCase();
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
paramName = rawParamName.toLowerCase();
|
|
115
|
+
}
|
|
116
|
+
if (sensitiveSet.has(paramName)) {
|
|
117
|
+
return `${part.slice(0, eqIdx)}=${REDACTED}`;
|
|
118
|
+
}
|
|
119
|
+
return part;
|
|
120
|
+
});
|
|
121
|
+
return `${base}?${sanitizedParts.join("&")}`;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Sanitizes span/log attributes in-place. Sensitive keys get value [REDACTED];
|
|
125
|
+
* URL attributes get query-param sanitization.
|
|
126
|
+
*/
|
|
127
|
+
function sanitizeAttributes(attributes, additionalKeyPatterns, additionalSensitiveParams) {
|
|
128
|
+
for (const key of Object.keys(attributes)) {
|
|
129
|
+
if (URL_ATTRIBUTE_KEYS.has(key)) {
|
|
130
|
+
const val = attributes[key];
|
|
131
|
+
if (typeof val === "string") {
|
|
132
|
+
attributes[key] = sanitizeUrl(val, additionalSensitiveParams);
|
|
133
|
+
}
|
|
134
|
+
// URL attributes are handled; skip further key-based check
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (isSensitiveKey(key, additionalKeyPatterns)) {
|
|
138
|
+
attributes[key] = REDACTED;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// SanitizingSpanProcessor
|
|
144
|
+
// ============================================================================
|
|
145
|
+
class SanitizingSpanProcessor {
|
|
146
|
+
additionalKeyPatterns;
|
|
147
|
+
additionalSensitiveParams;
|
|
148
|
+
constructor(config = {}) {
|
|
149
|
+
this.additionalKeyPatterns = config.additionalKeyPatterns ?? [];
|
|
150
|
+
this.additionalSensitiveParams = config.additionalSensitiveParams ?? [];
|
|
151
|
+
}
|
|
152
|
+
onStart(_span, _parentContext) {
|
|
153
|
+
// Nothing to do at start; sanitization occurs at end when attributes are final.
|
|
154
|
+
}
|
|
155
|
+
onEnd(span) {
|
|
156
|
+
// ReadableSpan.attributes is typed as Attributes (readonly in API), but
|
|
157
|
+
// in practice the SDK implementation uses a mutable object. We cast to
|
|
158
|
+
// allow in-place mutation, which avoids allocating a new span wrapper.
|
|
159
|
+
const attrs = span.attributes;
|
|
160
|
+
sanitizeAttributes(attrs, this.additionalKeyPatterns, this.additionalSensitiveParams);
|
|
161
|
+
}
|
|
162
|
+
async shutdown() { }
|
|
163
|
+
async forceFlush() { }
|
|
164
|
+
}
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// SanitizingLogProcessor
|
|
167
|
+
// ============================================================================
|
|
168
|
+
class BrowserSanitizingLogProcessor {
|
|
169
|
+
additionalKeyPatterns;
|
|
170
|
+
constructor(config = {}) {
|
|
171
|
+
this.additionalKeyPatterns = config.additionalKeyPatterns ?? [];
|
|
172
|
+
}
|
|
173
|
+
onEmit(record, _context) {
|
|
174
|
+
// Sanitize attributes in-place
|
|
175
|
+
const attrs = record.attributes;
|
|
176
|
+
for (const key of Object.keys(attrs)) {
|
|
177
|
+
if (isSensitiveKey(key, this.additionalKeyPatterns)) {
|
|
178
|
+
attrs[key] = REDACTED;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Redact email-like patterns in string body
|
|
182
|
+
if (typeof record.body === "string") {
|
|
183
|
+
EMAIL_PATTERN.lastIndex = 0;
|
|
184
|
+
record.body = record.body.replace(EMAIL_PATTERN, REDACTED_EMAIL);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async shutdown() { }
|
|
188
|
+
async forceFlush() { }
|
|
189
|
+
}
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// Factory functions
|
|
192
|
+
// ============================================================================
|
|
193
|
+
/**
|
|
194
|
+
* Create a SpanProcessor that redacts PII from span attributes before export.
|
|
195
|
+
*
|
|
196
|
+
* @param config - Optional configuration for additional key patterns / URL params
|
|
197
|
+
* @returns A SpanProcessor suitable for use in a browser WebTracerProvider
|
|
198
|
+
*/
|
|
199
|
+
function createSanitizingSpanProcessor(config) {
|
|
200
|
+
return new SanitizingSpanProcessor(config);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Create a LogRecordProcessor that redacts PII from log records before export.
|
|
204
|
+
*
|
|
205
|
+
* @param config - Optional configuration for additional key patterns
|
|
206
|
+
* @returns A LogRecordProcessor suitable for use in a browser log provider
|
|
207
|
+
*/
|
|
208
|
+
function createSanitizingLogProcessor(config) {
|
|
209
|
+
return new BrowserSanitizingLogProcessor(config);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/browser/sanitizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-side TracedSocket for WebSocket tracing.
|
|
3
|
+
*
|
|
4
|
+
* Wraps a WebSocket client (or any WebSocket-like object) and adds
|
|
5
|
+
* OpenTelemetry tracing. Designed to speak the same envelope protocol as the
|
|
6
|
+
* server-side TracedSocket so that distributed traces link correctly across
|
|
7
|
+
* the browser–server boundary.
|
|
8
|
+
*
|
|
9
|
+
* Envelope format (matches @superblocksteam/shared SocketRequest):
|
|
10
|
+
* outbound: { request: { method, id, traceparent?, tracestate?, ... } }
|
|
11
|
+
* inbound: { request: { method, id, traceparent?, tracestate?, ... } }
|
|
12
|
+
* { response: { id, ... } }
|
|
13
|
+
*
|
|
14
|
+
* Propagation uses the W3C Trace Context propagator registered globally by
|
|
15
|
+
* initBrowserTelemetry() (see browser/init.ts). The carrier is the
|
|
16
|
+
* `request` object itself — the same convention as the server side.
|
|
17
|
+
*/
|
|
18
|
+
import { type Tracer } from "@opentelemetry/api";
|
|
19
|
+
import type { SocketMessageEnvelope } from "../common/traced-socket-types.js";
|
|
20
|
+
/** Minimal browser WebSocket surface needed by BrowserTracedSocket. */
|
|
21
|
+
export interface WebSocketLike {
|
|
22
|
+
readonly readyState: number;
|
|
23
|
+
close(code?: number, reason?: string): void;
|
|
24
|
+
send(data: string | ArrayBuffer): void;
|
|
25
|
+
addEventListener(type: string, listener: (event: unknown) => void): void;
|
|
26
|
+
removeEventListener(type: string, listener: (event: unknown) => void): void;
|
|
27
|
+
}
|
|
28
|
+
/** Configuration for BrowserTracedSocket. */
|
|
29
|
+
export interface BrowserTracedSocketConfig {
|
|
30
|
+
/**
|
|
31
|
+
* Tracer instance. When omitted the global tracer named
|
|
32
|
+
* "superblocks-ws" is used (requires initBrowserTelemetry() first).
|
|
33
|
+
*/
|
|
34
|
+
tracer?: Tracer;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* BrowserTracedSocket wraps a WebSocket and provides:
|
|
38
|
+
*
|
|
39
|
+
* 1. `decorateOutbound(msg)` — call this before sending any message.
|
|
40
|
+
* Injects traceparent/tracestate into msg.request so the server can
|
|
41
|
+
* extract the browser's active context.
|
|
42
|
+
*
|
|
43
|
+
* 2. `traceOutboundCall(method)` — wraps a client-initiated RPC call in a
|
|
44
|
+
* CLIENT span. Returns the span's end function.
|
|
45
|
+
*
|
|
46
|
+
* 3. `handleInbound(msg)` — call this when a message arrives from the server.
|
|
47
|
+
* Extracts the server's trace context and creates a SERVER span so that
|
|
48
|
+
* server-initiated pushes appear in the browser's trace.
|
|
49
|
+
*
|
|
50
|
+
* 4. `recordReconnect({ attempt })` — call this from the reconnect loop to
|
|
51
|
+
* create a ws.reconnect span.
|
|
52
|
+
*
|
|
53
|
+
* Lifecycle spans (ws.connect, ws.disconnect) are attached automatically via
|
|
54
|
+
* WebSocket open/close event listeners.
|
|
55
|
+
*/
|
|
56
|
+
export declare class BrowserTracedSocket {
|
|
57
|
+
private readonly ws;
|
|
58
|
+
private readonly tracer;
|
|
59
|
+
private connectStartTime;
|
|
60
|
+
constructor(ws: WebSocketLike, config: BrowserTracedSocketConfig);
|
|
61
|
+
private readonly onOpen;
|
|
62
|
+
private readonly onClose;
|
|
63
|
+
/**
|
|
64
|
+
* Records a ws.reconnect span. Call this from the reconnect loop just
|
|
65
|
+
* before opening a new WebSocket, passing the attempt counter so it shows
|
|
66
|
+
* up as a span attribute.
|
|
67
|
+
*/
|
|
68
|
+
recordReconnect({ attempt }: {
|
|
69
|
+
attempt: number;
|
|
70
|
+
}): void;
|
|
71
|
+
/**
|
|
72
|
+
* Injects W3C trace context into the message's request envelope.
|
|
73
|
+
* Call this on every outbound message before handing it to the transport.
|
|
74
|
+
*
|
|
75
|
+
* Mirrors the server-side TracedSocket.decorateToSend() behaviour so that
|
|
76
|
+
* the server can extract the browser's active context via propagation.extract.
|
|
77
|
+
*/
|
|
78
|
+
decorateOutbound(message: SocketMessageEnvelope): SocketMessageEnvelope;
|
|
79
|
+
/**
|
|
80
|
+
* Creates a CLIENT span for a browser-initiated RPC call.
|
|
81
|
+
* Returns the span so the caller can end it after the response resolves.
|
|
82
|
+
*
|
|
83
|
+
* Usage:
|
|
84
|
+
* ```typescript
|
|
85
|
+
* const span = socket.traceOutboundCall("editor.runApi");
|
|
86
|
+
* const result = await socket.request("editor.runApi", params);
|
|
87
|
+
* span.end();
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
traceOutboundCall(method: string): import("@opentelemetry/api").Span;
|
|
91
|
+
/**
|
|
92
|
+
* Handles an inbound message from the server.
|
|
93
|
+
* - Extracts the server's trace context from the request envelope.
|
|
94
|
+
* - Creates a SERVER span as a child of the server's trace so that
|
|
95
|
+
* server-initiated pushes appear in the browser's distributed trace.
|
|
96
|
+
* - Response-only messages (no request field) are ignored.
|
|
97
|
+
*/
|
|
98
|
+
handleInbound(message: SocketMessageEnvelope): void;
|
|
99
|
+
/** Remove lifecycle listeners. Call when tearing down the socket. */
|
|
100
|
+
dispose(): void;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=traced-socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traced-socket.d.ts","sourceRoot":"","sources":["../../src/browser/traced-socket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAML,KAAK,MAAM,EACZ,MAAM,oBAAoB,CAAC;AAM5B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE9E,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IACvC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IACzE,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CAC7E;AAED,6CAA6C;AAC7C,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAJrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAqB;gBAG1B,EAAE,EAAE,aAAa,EAClC,MAAM,EAAE,yBAAyB;IAoBnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAwBrB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAuBtB;IAEF;;;;OAIG;IACI,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAoB9D;;;;;;OAMG;IACI,gBAAgB,CACrB,OAAO,EAAE,qBAAqB,GAC7B,qBAAqB;IAexB;;;;;;;;;;OAUG;IACI,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAkBvC;;;;;;OAMG;IACI,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAgC1D,qEAAqE;IAC9D,OAAO,IAAI,IAAI;CAIvB"}
|