shield360 1.1.0 → 1.2.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.
- package/README.md +330 -3
- package/dist/__tests__/build-info.test.js +8 -1
- package/dist/__tests__/build-info.test.js.map +1 -1
- package/dist/__tests__/code-location.test.js +1 -1
- package/dist/__tests__/masking.test.d.ts +1 -0
- package/dist/__tests__/masking.test.js +66 -0
- package/dist/__tests__/masking.test.js.map +1 -0
- package/dist/__tests__/register.e2e.test.d.ts +1 -0
- package/dist/__tests__/register.e2e.test.js +264 -0
- package/dist/__tests__/register.e2e.test.js.map +1 -0
- package/dist/__tests__/register.test.js +60 -0
- package/dist/__tests__/register.test.js.map +1 -1
- package/dist/agents/__tests__/agents.test.d.ts +1 -0
- package/dist/agents/__tests__/agents.test.js +529 -0
- package/dist/agents/__tests__/agents.test.js.map +1 -0
- package/dist/agents/index.d.ts +15 -0
- package/dist/agents/index.js +25 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/passport.d.ts +92 -0
- package/dist/agents/passport.js +301 -0
- package/dist/agents/passport.js.map +1 -0
- package/dist/agents/policy.d.ts +24 -0
- package/dist/agents/policy.js +93 -0
- package/dist/agents/policy.js.map +1 -0
- package/dist/agents/replay.d.ts +20 -0
- package/dist/agents/replay.js +47 -0
- package/dist/agents/replay.js.map +1 -0
- package/dist/agents/report.d.ts +30 -0
- package/dist/agents/report.js +93 -0
- package/dist/agents/report.js.map +1 -0
- package/dist/agents/types.d.ts +148 -0
- package/dist/agents/types.js +37 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/verifier.d.ts +33 -0
- package/dist/agents/verifier.js +276 -0
- package/dist/agents/verifier.js.map +1 -0
- package/dist/ai-security/__tests__/bench.test.d.ts +1 -0
- package/dist/ai-security/__tests__/bench.test.js +50 -0
- package/dist/ai-security/__tests__/bench.test.js.map +1 -0
- package/dist/ai-security/__tests__/checks.test.d.ts +1 -0
- package/dist/ai-security/__tests__/checks.test.js +248 -0
- package/dist/ai-security/__tests__/checks.test.js.map +1 -0
- package/dist/ai-security/__tests__/config.test.d.ts +1 -0
- package/dist/ai-security/__tests__/config.test.js +164 -0
- package/dist/ai-security/__tests__/config.test.js.map +1 -0
- package/dist/ai-security/__tests__/detection.test.d.ts +1 -0
- package/dist/ai-security/__tests__/detection.test.js +114 -0
- package/dist/ai-security/__tests__/detection.test.js.map +1 -0
- package/dist/ai-security/__tests__/fixtures.d.ts +8 -0
- package/dist/ai-security/__tests__/fixtures.js +30 -0
- package/dist/ai-security/__tests__/fixtures.js.map +1 -0
- package/dist/ai-security/__tests__/hooks.test.d.ts +1 -0
- package/dist/ai-security/__tests__/hooks.test.js +174 -0
- package/dist/ai-security/__tests__/hooks.test.js.map +1 -0
- package/dist/ai-security/__tests__/stream.test.d.ts +1 -0
- package/dist/ai-security/__tests__/stream.test.js +85 -0
- package/dist/ai-security/__tests__/stream.test.js.map +1 -0
- package/dist/ai-security/config.d.ts +94 -0
- package/dist/ai-security/config.js +241 -0
- package/dist/ai-security/config.js.map +1 -0
- package/dist/ai-security/context.d.ts +45 -0
- package/dist/ai-security/context.js +108 -0
- package/dist/ai-security/context.js.map +1 -0
- package/dist/ai-security/custom-kinds.d.ts +23 -0
- package/dist/ai-security/custom-kinds.js +97 -0
- package/dist/ai-security/custom-kinds.js.map +1 -0
- package/dist/ai-security/events.d.ts +77 -0
- package/dist/ai-security/events.js +153 -0
- package/dist/ai-security/events.js.map +1 -0
- package/dist/ai-security/hooks.d.ts +48 -0
- package/dist/ai-security/hooks.js +461 -0
- package/dist/ai-security/hooks.js.map +1 -0
- package/dist/ai-security/index.d.ts +209 -0
- package/dist/ai-security/index.js +587 -0
- package/dist/ai-security/index.js.map +1 -0
- package/dist/ai-security/injection-rules.json +1024 -0
- package/dist/ai-security/injection.d.ts +46 -0
- package/dist/ai-security/injection.js +635 -0
- package/dist/ai-security/injection.js.map +1 -0
- package/dist/ai-security/jailbreak.d.ts +38 -0
- package/dist/ai-security/jailbreak.js +73 -0
- package/dist/ai-security/jailbreak.js.map +1 -0
- package/dist/ai-security/limits.d.ts +84 -0
- package/dist/ai-security/limits.js +195 -0
- package/dist/ai-security/limits.js.map +1 -0
- package/dist/ai-security/mcp.d.ts +82 -0
- package/dist/ai-security/mcp.js +150 -0
- package/dist/ai-security/mcp.js.map +1 -0
- package/dist/ai-security/output.d.ts +107 -0
- package/dist/ai-security/output.js +390 -0
- package/dist/ai-security/output.js.map +1 -0
- package/dist/ai-security/policy.d.ts +125 -0
- package/dist/ai-security/policy.js +196 -0
- package/dist/ai-security/policy.js.map +1 -0
- package/dist/ai-security/rag.d.ts +70 -0
- package/dist/ai-security/rag.js +174 -0
- package/dist/ai-security/rag.js.map +1 -0
- package/dist/ai-security/tool-rules.json +203 -0
- package/dist/ai-security/tools.d.ts +46 -0
- package/dist/ai-security/tools.js +62 -0
- package/dist/ai-security/tools.js.map +1 -0
- package/dist/budgets/__tests__/budgets.test.d.ts +1 -0
- package/dist/budgets/__tests__/budgets.test.js +134 -0
- package/dist/budgets/__tests__/budgets.test.js.map +1 -0
- package/dist/budgets/auto.d.ts +25 -0
- package/dist/budgets/auto.js +63 -0
- package/dist/budgets/auto.js.map +1 -0
- package/dist/budgets/index.d.ts +110 -0
- package/dist/budgets/index.js +239 -0
- package/dist/budgets/index.js.map +1 -0
- package/dist/customer/__tests__/customer.test.d.ts +1 -0
- package/dist/customer/__tests__/customer.test.js +155 -0
- package/dist/customer/__tests__/customer.test.js.map +1 -0
- package/dist/customer/index.d.ts +48 -0
- package/dist/customer/index.js +132 -0
- package/dist/customer/index.js.map +1 -0
- package/dist/feedback/__tests__/feedback.test.d.ts +1 -0
- package/dist/feedback/__tests__/feedback.test.js +80 -0
- package/dist/feedback/__tests__/feedback.test.js.map +1 -0
- package/dist/feedback/index.d.ts +48 -0
- package/dist/feedback/index.js +97 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/flags/__tests__/flags.test.d.ts +1 -0
- package/dist/flags/__tests__/flags.test.js +301 -0
- package/dist/flags/__tests__/flags.test.js.map +1 -0
- package/dist/flags/client.d.ts +131 -0
- package/dist/flags/client.js +301 -0
- package/dist/flags/client.js.map +1 -0
- package/dist/flags/engine.d.ts +200 -0
- package/dist/flags/engine.js +677 -0
- package/dist/flags/engine.js.map +1 -0
- package/dist/flags/index.d.ts +4 -0
- package/dist/flags/index.js +16 -0
- package/dist/flags/index.js.map +1 -0
- package/dist/guard/__tests__/findings.test.js +1 -1
- package/dist/guard/__tests__/report.test.js +67 -0
- package/dist/guard/__tests__/report.test.js.map +1 -1
- package/dist/guard/heartbeat.d.ts +34 -0
- package/dist/guard/heartbeat.js +83 -0
- package/dist/guard/heartbeat.js.map +1 -0
- package/dist/guard/integration.d.ts +9 -0
- package/dist/guard/integration.js +4 -2
- package/dist/guard/integration.js.map +1 -1
- package/dist/guard/report.d.ts +24 -1
- package/dist/guard/report.js +67 -18
- package/dist/guard/report.js.map +1 -1
- package/dist/index.d.ts +88 -0
- package/dist/index.js +193 -2
- package/dist/index.js.map +1 -1
- package/dist/instrumentation/__tests__/langchain-wrapper.test.js +1 -1
- package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -1
- package/dist/instrumentation/anthropic/wrapper.js +4 -0
- package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
- package/dist/instrumentation/openai/wrapper.js +6 -0
- package/dist/instrumentation/openai/wrapper.js.map +1 -1
- package/dist/masking.d.ts +42 -0
- package/dist/masking.js +197 -0
- package/dist/masking.js.map +1 -0
- package/dist/otel/__tests__/app-logs-safety.test.d.ts +1 -0
- package/dist/otel/__tests__/app-logs-safety.test.js +129 -0
- package/dist/otel/__tests__/app-logs-safety.test.js.map +1 -0
- package/dist/otel/__tests__/app-logs.test.d.ts +1 -0
- package/dist/otel/__tests__/app-logs.test.js +269 -0
- package/dist/otel/__tests__/app-logs.test.js.map +1 -0
- package/dist/otel/__tests__/log-auto.test.d.ts +1 -0
- package/dist/otel/__tests__/log-auto.test.js +125 -0
- package/dist/otel/__tests__/log-auto.test.js.map +1 -0
- package/dist/otel/__tests__/log-bridges.test.d.ts +1 -0
- package/dist/otel/__tests__/log-bridges.test.js +170 -0
- package/dist/otel/__tests__/log-bridges.test.js.map +1 -0
- package/dist/otel/__tests__/system-metrics.test.d.ts +1 -0
- package/dist/otel/__tests__/system-metrics.test.js +79 -0
- package/dist/otel/__tests__/system-metrics.test.js.map +1 -0
- package/dist/otel/app-logs.d.ts +80 -0
- package/dist/otel/app-logs.js +195 -0
- package/dist/otel/app-logs.js.map +1 -0
- package/dist/otel/build-info.d.ts +2 -1
- package/dist/otel/build-info.js +3 -2
- package/dist/otel/build-info.js.map +1 -1
- package/dist/otel/events.d.ts +1 -0
- package/dist/otel/events.js +21 -12
- package/dist/otel/events.js.map +1 -1
- package/dist/otel/log-auto.d.ts +44 -0
- package/dist/otel/log-auto.js +200 -0
- package/dist/otel/log-auto.js.map +1 -0
- package/dist/otel/log-bridges.d.ts +54 -0
- package/dist/otel/log-bridges.js +307 -0
- package/dist/otel/log-bridges.js.map +1 -0
- package/dist/otel/system-metrics.d.ts +39 -0
- package/dist/otel/system-metrics.js +166 -0
- package/dist/otel/system-metrics.js.map +1 -0
- package/dist/otel/tracing.js +5 -1
- package/dist/otel/tracing.js.map +1 -1
- package/dist/protect/__tests__/protect.test.js +4 -0
- package/dist/protect/__tests__/protect.test.js.map +1 -1
- package/dist/protect/index.js +9 -4
- package/dist/protect/index.js.map +1 -1
- package/dist/rasp/__tests__/auto-http.test.d.ts +1 -0
- package/dist/rasp/__tests__/auto-http.test.js +136 -0
- package/dist/rasp/__tests__/auto-http.test.js.map +1 -0
- package/dist/rasp/__tests__/baseline.test.d.ts +1 -0
- package/dist/rasp/__tests__/baseline.test.js +86 -0
- package/dist/rasp/__tests__/baseline.test.js.map +1 -0
- package/dist/rasp/__tests__/benign-corpus.test.d.ts +1 -0
- package/dist/rasp/__tests__/benign-corpus.test.js +68 -0
- package/dist/rasp/__tests__/benign-corpus.test.js.map +1 -0
- package/dist/rasp/__tests__/capture-context.test.d.ts +1 -0
- package/dist/rasp/__tests__/capture-context.test.js +135 -0
- package/dist/rasp/__tests__/capture-context.test.js.map +1 -0
- package/dist/rasp/__tests__/code-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/code-hook.test.js +218 -0
- package/dist/rasp/__tests__/code-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/config-client.test.d.ts +1 -0
- package/dist/rasp/__tests__/config-client.test.js +283 -0
- package/dist/rasp/__tests__/config-client.test.js.map +1 -0
- package/dist/rasp/__tests__/corpus.d.ts +13 -0
- package/dist/rasp/__tests__/corpus.js +111 -0
- package/dist/rasp/__tests__/corpus.js.map +1 -0
- package/dist/rasp/__tests__/custom-rules.test.d.ts +1 -0
- package/dist/rasp/__tests__/custom-rules.test.js +276 -0
- package/dist/rasp/__tests__/custom-rules.test.js.map +1 -0
- package/dist/rasp/__tests__/db-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/db-hook.test.js +438 -0
- package/dist/rasp/__tests__/db-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/deception.test.d.ts +1 -0
- package/dist/rasp/__tests__/deception.test.js +567 -0
- package/dist/rasp/__tests__/deception.test.js.map +1 -0
- package/dist/rasp/__tests__/detect.test.d.ts +1 -0
- package/dist/rasp/__tests__/detect.test.js +276 -0
- package/dist/rasp/__tests__/detect.test.js.map +1 -0
- package/dist/rasp/__tests__/esm-exports.test.d.ts +1 -0
- package/dist/rasp/__tests__/esm-exports.test.js +20 -0
- package/dist/rasp/__tests__/esm-exports.test.js.map +1 -0
- package/dist/rasp/__tests__/fs-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/fs-hook.test.js +241 -0
- package/dist/rasp/__tests__/fs-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/hook-contracts.test.d.ts +1 -0
- package/dist/rasp/__tests__/hook-contracts.test.js +201 -0
- package/dist/rasp/__tests__/hook-contracts.test.js.map +1 -0
- package/dist/rasp/__tests__/hook-kit.d.ts +42 -0
- package/dist/rasp/__tests__/hook-kit.js +139 -0
- package/dist/rasp/__tests__/hook-kit.js.map +1 -0
- package/dist/rasp/__tests__/http-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/http-hook.test.js +250 -0
- package/dist/rasp/__tests__/http-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/iast.test.d.ts +1 -0
- package/dist/rasp/__tests__/iast.test.js +361 -0
- package/dist/rasp/__tests__/iast.test.js.map +1 -0
- package/dist/rasp/__tests__/include-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/include-hook.test.js +122 -0
- package/dist/rasp/__tests__/include-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/middleware.test.d.ts +1 -0
- package/dist/rasp/__tests__/middleware.test.js +302 -0
- package/dist/rasp/__tests__/middleware.test.js.map +1 -0
- package/dist/rasp/__tests__/process-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/process-hook.test.js +238 -0
- package/dist/rasp/__tests__/process-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/reporter.test.d.ts +1 -0
- package/dist/rasp/__tests__/reporter.test.js +114 -0
- package/dist/rasp/__tests__/reporter.test.js.map +1 -0
- package/dist/rasp/__tests__/route.test.d.ts +1 -0
- package/dist/rasp/__tests__/route.test.js +46 -0
- package/dist/rasp/__tests__/route.test.js.map +1 -0
- package/dist/rasp/__tests__/rule-expr.test.d.ts +1 -0
- package/dist/rasp/__tests__/rule-expr.test.js +151 -0
- package/dist/rasp/__tests__/rule-expr.test.js.map +1 -0
- package/dist/rasp/__tests__/rule-phases.test.d.ts +1 -0
- package/dist/rasp/__tests__/rule-phases.test.js +271 -0
- package/dist/rasp/__tests__/rule-phases.test.js.map +1 -0
- package/dist/rasp/__tests__/sinks-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/sinks-hook.test.js +177 -0
- package/dist/rasp/__tests__/sinks-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/targets.test.d.ts +1 -0
- package/dist/rasp/__tests__/targets.test.js +82 -0
- package/dist/rasp/__tests__/targets.test.js.map +1 -0
- package/dist/rasp/__tests__/template-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/template-hook.test.js +254 -0
- package/dist/rasp/__tests__/template-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/upload.test.d.ts +1 -0
- package/dist/rasp/__tests__/upload.test.js +81 -0
- package/dist/rasp/__tests__/upload.test.js.map +1 -0
- package/dist/rasp/__tests__/vpatch-engine.test.d.ts +1 -0
- package/dist/rasp/__tests__/vpatch-engine.test.js +177 -0
- package/dist/rasp/__tests__/vpatch-engine.test.js.map +1 -0
- package/dist/rasp/auto-http.d.ts +6 -0
- package/dist/rasp/auto-http.js +194 -0
- package/dist/rasp/auto-http.js.map +1 -0
- package/dist/rasp/baseline.d.ts +35 -0
- package/dist/rasp/baseline.js +91 -0
- package/dist/rasp/baseline.js.map +1 -0
- package/dist/rasp/capture.d.ts +76 -0
- package/dist/rasp/capture.js +304 -0
- package/dist/rasp/capture.js.map +1 -0
- package/dist/rasp/config-client.d.ts +122 -0
- package/dist/rasp/config-client.js +337 -0
- package/dist/rasp/config-client.js.map +1 -0
- package/dist/rasp/context.d.ts +65 -0
- package/dist/rasp/context.js +68 -0
- package/dist/rasp/context.js.map +1 -0
- package/dist/rasp/custom-rules.d.ts +68 -0
- package/dist/rasp/custom-rules.js +222 -0
- package/dist/rasp/custom-rules.js.map +1 -0
- package/dist/rasp/data/default-rules.json +199 -0
- package/dist/rasp/data/default-sinks.json +4 -0
- package/dist/rasp/data/dnslog-domains.json +11 -0
- package/dist/rasp/deception.d.ts +70 -0
- package/dist/rasp/deception.js +220 -0
- package/dist/rasp/deception.js.map +1 -0
- package/dist/rasp/detect.d.ts +68 -0
- package/dist/rasp/detect.js +671 -0
- package/dist/rasp/detect.js.map +1 -0
- package/dist/rasp/engine.d.ts +107 -0
- package/dist/rasp/engine.js +330 -0
- package/dist/rasp/engine.js.map +1 -0
- package/dist/rasp/hooks/code.d.ts +20 -0
- package/dist/rasp/hooks/code.js +334 -0
- package/dist/rasp/hooks/code.js.map +1 -0
- package/dist/rasp/hooks/db.d.ts +48 -0
- package/dist/rasp/hooks/db.js +322 -0
- package/dist/rasp/hooks/db.js.map +1 -0
- package/dist/rasp/hooks/esm.d.ts +7 -0
- package/dist/rasp/hooks/esm.js +18 -0
- package/dist/rasp/hooks/esm.js.map +1 -0
- package/dist/rasp/hooks/fs.d.ts +3 -0
- package/dist/rasp/hooks/fs.js +206 -0
- package/dist/rasp/hooks/fs.js.map +1 -0
- package/dist/rasp/hooks/http.d.ts +4 -0
- package/dist/rasp/hooks/http.js +213 -0
- package/dist/rasp/hooks/http.js.map +1 -0
- package/dist/rasp/hooks/include.d.ts +9 -0
- package/dist/rasp/hooks/include.js +79 -0
- package/dist/rasp/hooks/include.js.map +1 -0
- package/dist/rasp/hooks/marks.d.ts +2 -0
- package/dist/rasp/hooks/marks.js +16 -0
- package/dist/rasp/hooks/marks.js.map +1 -0
- package/dist/rasp/hooks/process.d.ts +22 -0
- package/dist/rasp/hooks/process.js +191 -0
- package/dist/rasp/hooks/process.js.map +1 -0
- package/dist/rasp/hooks/sinks.d.ts +54 -0
- package/dist/rasp/hooks/sinks.js +329 -0
- package/dist/rasp/hooks/sinks.js.map +1 -0
- package/dist/rasp/hooks/template.d.ts +21 -0
- package/dist/rasp/hooks/template.js +152 -0
- package/dist/rasp/hooks/template.js.map +1 -0
- package/dist/rasp/iast-rules.d.ts +82 -0
- package/dist/rasp/iast-rules.js +240 -0
- package/dist/rasp/iast-rules.js.map +1 -0
- package/dist/rasp/iast-scope.d.ts +29 -0
- package/dist/rasp/iast-scope.js +54 -0
- package/dist/rasp/iast-scope.js.map +1 -0
- package/dist/rasp/iast.d.ts +81 -0
- package/dist/rasp/iast.js +272 -0
- package/dist/rasp/iast.js.map +1 -0
- package/dist/rasp/index.d.ts +52 -0
- package/dist/rasp/index.js +280 -0
- package/dist/rasp/index.js.map +1 -0
- package/dist/rasp/lexers.d.ts +32 -0
- package/dist/rasp/lexers.js +444 -0
- package/dist/rasp/lexers.js.map +1 -0
- package/dist/rasp/middleware.d.ts +155 -0
- package/dist/rasp/middleware.js +568 -0
- package/dist/rasp/middleware.js.map +1 -0
- package/dist/rasp/model-output.d.ts +14 -0
- package/dist/rasp/model-output.js +107 -0
- package/dist/rasp/model-output.js.map +1 -0
- package/dist/rasp/normalize.d.ts +23 -0
- package/dist/rasp/normalize.js +140 -0
- package/dist/rasp/normalize.js.map +1 -0
- package/dist/rasp/reporter.d.ts +60 -0
- package/dist/rasp/reporter.js +230 -0
- package/dist/rasp/reporter.js.map +1 -0
- package/dist/rasp/rule-expr.d.ts +236 -0
- package/dist/rasp/rule-expr.js +1253 -0
- package/dist/rasp/rule-expr.js.map +1 -0
- package/dist/rasp/template.d.ts +53 -0
- package/dist/rasp/template.js +336 -0
- package/dist/rasp/template.js.map +1 -0
- package/dist/rasp/types.d.ts +110 -0
- package/dist/rasp/types.js +51 -0
- package/dist/rasp/types.js.map +1 -0
- package/dist/rasp/vpatch.d.ts +55 -0
- package/dist/rasp/vpatch.js +120 -0
- package/dist/rasp/vpatch.js.map +1 -0
- package/dist/register.js +52 -11
- package/dist/register.js.map +1 -1
- package/dist/semantic-convention.d.ts +2 -0
- package/dist/semantic-convention.js +5 -0
- package/dist/semantic-convention.js.map +1 -1
- package/dist/types.d.ts +75 -1
- package/dist/zero-code.d.ts +8 -0
- package/dist/zero-code.js +38 -0
- package/dist/zero-code.js.map +1 -0
- package/package.json +18 -2
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const api_logs_1 = require("@opentelemetry/api-logs");
|
|
4
|
+
const sdk_logs_1 = require("@opentelemetry/sdk-logs");
|
|
5
|
+
const app_logs_1 = require("../app-logs");
|
|
6
|
+
const log_bridges_1 = require("../log-bridges");
|
|
7
|
+
/**
|
|
8
|
+
* pino, winston and console reach Shield360 only when application logs are
|
|
9
|
+
* on, with their levels mapped, errors as exception attributes, and never
|
|
10
|
+
* feeding back into themselves.
|
|
11
|
+
*/
|
|
12
|
+
function memory() {
|
|
13
|
+
const exporter = new sdk_logs_1.InMemoryLogRecordExporter();
|
|
14
|
+
const provider = new sdk_logs_1.LoggerProvider({ processors: [new sdk_logs_1.SimpleLogRecordProcessor({ exporter })] });
|
|
15
|
+
return { exporter, provider };
|
|
16
|
+
}
|
|
17
|
+
describe('logger bridges', () => {
|
|
18
|
+
let exporter;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
const m = memory();
|
|
21
|
+
exporter = m.exporter;
|
|
22
|
+
(0, app_logs_1.enableAppLogs)(m.provider, 'debug', { captureCodeLocation: false });
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
(0, log_bridges_1.releaseConsole)();
|
|
26
|
+
(0, log_bridges_1.releaseStdio)();
|
|
27
|
+
(0, app_logs_1.disableAppLogs)();
|
|
28
|
+
});
|
|
29
|
+
describe('stdout and stderr', () => {
|
|
30
|
+
// Fake streams, so the test runner's own output is never part of the test.
|
|
31
|
+
function fakeStream() {
|
|
32
|
+
const written = [];
|
|
33
|
+
const stream = {
|
|
34
|
+
write(chunk, encoding, callback) {
|
|
35
|
+
written.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8'));
|
|
36
|
+
if (typeof encoding === 'function')
|
|
37
|
+
encoding();
|
|
38
|
+
else if (typeof callback === 'function')
|
|
39
|
+
callback();
|
|
40
|
+
return true;
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
return { stream, written };
|
|
44
|
+
}
|
|
45
|
+
it('turns JSON log lines into records with their level, message, fields and error, still writing them', () => {
|
|
46
|
+
const out = fakeStream();
|
|
47
|
+
const err = fakeStream();
|
|
48
|
+
(0, log_bridges_1.captureStdio)({ stdout: out.stream, stderr: err.stream });
|
|
49
|
+
const line = JSON.stringify({ time: '2026-10-30T00:00:00Z', level: 'info', msg: 'request', service: 'api', requestId: 'r-1', status: 200 });
|
|
50
|
+
expect(out.stream.write(line + '\n')).toBe(true);
|
|
51
|
+
err.stream.write(JSON.stringify({ level: 'error', msg: 'tick failed', err: { name: 'TypeError', message: 'boom', stack: 'TypeError: boom\n at x' } }) + '\n');
|
|
52
|
+
const records = exporter.getFinishedLogRecords();
|
|
53
|
+
expect(records.map((r) => [r.body, r.severityNumber])).toEqual([
|
|
54
|
+
['request', api_logs_1.SeverityNumber.INFO],
|
|
55
|
+
['tick failed', api_logs_1.SeverityNumber.ERROR],
|
|
56
|
+
]);
|
|
57
|
+
expect(records[0].attributes).toEqual({ service: 'api', requestId: 'r-1', status: 200 });
|
|
58
|
+
expect(records[1].attributes).toMatchObject({ 'exception.type': 'TypeError', 'exception.message': 'boom' });
|
|
59
|
+
expect(records[0].instrumentationScope.name).toBe('stdout');
|
|
60
|
+
expect(records[1].instrumentationScope.name).toBe('stderr');
|
|
61
|
+
expect(out.written).toEqual([line + '\n']);
|
|
62
|
+
});
|
|
63
|
+
it('joins lines split across writes, takes plain lines as text, and passes callbacks through', () => {
|
|
64
|
+
const out = fakeStream();
|
|
65
|
+
const err = fakeStream();
|
|
66
|
+
(0, log_bridges_1.captureStdio)({ stdout: out.stream, stderr: err.stream });
|
|
67
|
+
out.stream.write('{"level":"warn","message":"slow ');
|
|
68
|
+
out.stream.write('query"}\nplain text line\n');
|
|
69
|
+
err.stream.write(Buffer.from('something broke\n'));
|
|
70
|
+
const done = jest.fn();
|
|
71
|
+
out.stream.write('', done);
|
|
72
|
+
expect(done).toHaveBeenCalledTimes(1);
|
|
73
|
+
expect(exporter.getFinishedLogRecords().map((r) => [r.body, r.severityNumber])).toEqual([
|
|
74
|
+
['slow query', api_logs_1.SeverityNumber.WARN],
|
|
75
|
+
['plain text line', api_logs_1.SeverityNumber.INFO],
|
|
76
|
+
['something broke', api_logs_1.SeverityNumber.ERROR],
|
|
77
|
+
]);
|
|
78
|
+
});
|
|
79
|
+
it('masks credentials, never captures the pipeline\'s own output, and puts the streams back on release', () => {
|
|
80
|
+
const out = fakeStream();
|
|
81
|
+
const err = fakeStream();
|
|
82
|
+
const write = out.stream.write;
|
|
83
|
+
(0, log_bridges_1.captureStdio)({ stdout: out.stream, stderr: err.stream });
|
|
84
|
+
out.stream.write(JSON.stringify({ level: 'info', msg: 'login', password: 'hunter2-secret' }) + '\n');
|
|
85
|
+
err.stream.write('OTLPExporterError: Bad Request\n');
|
|
86
|
+
const records = exporter.getFinishedLogRecords();
|
|
87
|
+
expect(records).toHaveLength(1);
|
|
88
|
+
expect(JSON.stringify(records[0].attributes)).not.toContain('hunter2-secret');
|
|
89
|
+
(0, log_bridges_1.releaseStdio)();
|
|
90
|
+
expect(out.stream.write).toBe(write);
|
|
91
|
+
out.stream.write('after release\n');
|
|
92
|
+
expect(exporter.getFinishedLogRecords()).toHaveLength(1);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
it('turns pino JSON lines into records, with levels, attributes and errors', () => {
|
|
96
|
+
const stream = (0, log_bridges_1.pinoStream)();
|
|
97
|
+
stream.write(JSON.stringify({ level: 30, time: 1, msg: 'order placed', orderId: 'o-1', pid: 1, hostname: 'h' }) + '\n');
|
|
98
|
+
stream.write(JSON.stringify({ level: 50, msg: 'payment failed', err: { type: 'TypeError', message: 'boom', stack: 'TypeError: boom\n at x' } }) + '\n');
|
|
99
|
+
const records = exporter.getFinishedLogRecords();
|
|
100
|
+
expect(records.map((r) => [r.body, r.severityNumber])).toEqual([
|
|
101
|
+
['order placed', api_logs_1.SeverityNumber.INFO],
|
|
102
|
+
['payment failed', api_logs_1.SeverityNumber.ERROR],
|
|
103
|
+
]);
|
|
104
|
+
expect(records[0].attributes).toEqual({ orderId: 'o-1' });
|
|
105
|
+
expect(records[1].attributes).toMatchObject({ 'exception.type': 'TypeError', 'exception.message': 'boom' });
|
|
106
|
+
expect(records[0].instrumentationScope.name).toBe('pino');
|
|
107
|
+
expect((0, log_bridges_1.pinoLevel)(60)).toBe('fatal');
|
|
108
|
+
expect((0, log_bridges_1.pinoLevel)(10)).toBe('debug');
|
|
109
|
+
});
|
|
110
|
+
it('builds a winston transport on the app\'s own Transport class', () => {
|
|
111
|
+
class FakeTransport {
|
|
112
|
+
constructor(options) {
|
|
113
|
+
this.options = options;
|
|
114
|
+
this.emitted = [];
|
|
115
|
+
}
|
|
116
|
+
emit(event) {
|
|
117
|
+
this.emitted.push(event);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const Transport = (0, log_bridges_1.winstonTransport)(FakeTransport);
|
|
122
|
+
const t = new Transport();
|
|
123
|
+
const done = jest.fn();
|
|
124
|
+
t.log({ level: 'warn', message: 'disk slow', [Symbol.for('level')]: 'warn', route: '/checkout' }, done);
|
|
125
|
+
expect(done).toHaveBeenCalled();
|
|
126
|
+
const record = exporter.getFinishedLogRecords()[0];
|
|
127
|
+
expect(record.body).toBe('disk slow');
|
|
128
|
+
expect(record.severityNumber).toBe(api_logs_1.SeverityNumber.WARN);
|
|
129
|
+
expect(record.attributes).toEqual({ route: '/checkout' });
|
|
130
|
+
expect((0, log_bridges_1.winstonLevel)('emerg')).toBe('fatal');
|
|
131
|
+
});
|
|
132
|
+
it('copies console output, still printing it, and stops on release', () => {
|
|
133
|
+
const printed = [];
|
|
134
|
+
const real = console.warn;
|
|
135
|
+
console.warn = (...args) => void printed.push(args);
|
|
136
|
+
try {
|
|
137
|
+
(0, log_bridges_1.captureConsole)();
|
|
138
|
+
console.warn('cache miss', { key: 'k' });
|
|
139
|
+
console.warn(new Error('kaput'));
|
|
140
|
+
(0, log_bridges_1.releaseConsole)();
|
|
141
|
+
console.warn('after release');
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
console.warn = real;
|
|
145
|
+
}
|
|
146
|
+
expect(printed).toHaveLength(3);
|
|
147
|
+
const records = exporter.getFinishedLogRecords();
|
|
148
|
+
expect(records.map((r) => r.body)).toEqual(['cache miss {"key":"k"}', 'kaput']);
|
|
149
|
+
expect(records[1].attributes).toMatchObject({ 'exception.message': 'kaput' });
|
|
150
|
+
});
|
|
151
|
+
it('never captures the telemetry pipeline\'s own messages, and caps records per second', () => {
|
|
152
|
+
const stream = (0, log_bridges_1.pinoStream)({ maxPerSecond: 2 });
|
|
153
|
+
stream.write(JSON.stringify({ level: 50, msg: 'OTLPExporterError: Bad Request' }));
|
|
154
|
+
stream.write(JSON.stringify({ level: 30, msg: '@opentelemetry/api: Registered a global' }));
|
|
155
|
+
for (let i = 0; i < 5; i++)
|
|
156
|
+
stream.write(JSON.stringify({ level: 30, msg: `m${i}` }));
|
|
157
|
+
expect(exporter.getFinishedLogRecords().map((r) => r.body)).toEqual(['m0', 'm1']);
|
|
158
|
+
let t = 0;
|
|
159
|
+
const allow = (0, log_bridges_1.createLimiter)(1, () => t);
|
|
160
|
+
expect([allow(), allow()]).toEqual([true, false]);
|
|
161
|
+
t = 1000;
|
|
162
|
+
expect(allow()).toBe(true);
|
|
163
|
+
});
|
|
164
|
+
it('sends nothing while application logs are off', () => {
|
|
165
|
+
(0, app_logs_1.disableAppLogs)();
|
|
166
|
+
(0, log_bridges_1.pinoStream)().write(JSON.stringify({ level: 30, msg: 'x' }));
|
|
167
|
+
expect(exporter.getFinishedLogRecords()).toHaveLength(0);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=log-bridges.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-bridges.test.js","sourceRoot":"","sources":["../../../src/otel/__tests__/log-bridges.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
|
|
4
|
+
const system_metrics_1 = require("../system-metrics");
|
|
5
|
+
/**
|
|
6
|
+
* Host and process metrics are opt-in, named the way Shield360's
|
|
7
|
+
* Infrastructure view reads them, and never throw into the application.
|
|
8
|
+
*/
|
|
9
|
+
class TestReader extends sdk_metrics_1.MetricReader {
|
|
10
|
+
constructor() {
|
|
11
|
+
super({ aggregationTemporalitySelector: (_t) => sdk_metrics_1.AggregationTemporality.CUMULATIVE });
|
|
12
|
+
}
|
|
13
|
+
async onForceFlush() { }
|
|
14
|
+
async onShutdown() { }
|
|
15
|
+
}
|
|
16
|
+
describe('system metrics', () => {
|
|
17
|
+
const originalEnv = process.env;
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
process.env = { ...originalEnv };
|
|
20
|
+
delete process.env.SHIELD360_COLLECT_SYSTEM_METRICS;
|
|
21
|
+
});
|
|
22
|
+
afterAll(() => {
|
|
23
|
+
process.env = originalEnv;
|
|
24
|
+
});
|
|
25
|
+
it('is off unless asked for', () => {
|
|
26
|
+
expect((0, system_metrics_1.resolveCollectSystemMetrics)()).toBe(false);
|
|
27
|
+
process.env.SHIELD360_COLLECT_SYSTEM_METRICS = 'true';
|
|
28
|
+
expect((0, system_metrics_1.resolveCollectSystemMetrics)()).toBe(true);
|
|
29
|
+
expect((0, system_metrics_1.resolveCollectSystemMetrics)(false)).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
it('computes CPU busy from two samples', () => {
|
|
32
|
+
expect((0, system_metrics_1.cpuBusy)({ idle: 100, total: 200 }, { idle: 150, total: 400 })).toBeCloseTo(0.75);
|
|
33
|
+
expect((0, system_metrics_1.cpuBusy)({ idle: 1, total: 1 }, { idle: 1, total: 1 })).toBeNull();
|
|
34
|
+
});
|
|
35
|
+
it('exports the gauges with host.name, skipping readings that are not available', async () => {
|
|
36
|
+
const reader = new TestReader();
|
|
37
|
+
const provider = new sdk_metrics_1.MeterProvider({ readers: [reader] });
|
|
38
|
+
const sampler = {
|
|
39
|
+
host: () => 0.42,
|
|
40
|
+
process: () => null,
|
|
41
|
+
memory: () => ({ used: 3, total: 4 }),
|
|
42
|
+
rss: () => 123,
|
|
43
|
+
loopDelaySeconds: () => 0.015,
|
|
44
|
+
stop: jest.fn(),
|
|
45
|
+
};
|
|
46
|
+
(0, system_metrics_1.setupSystemMetrics)(provider.getMeter('test'), sampler);
|
|
47
|
+
const { resourceMetrics } = await reader.collect();
|
|
48
|
+
const metrics = resourceMetrics.scopeMetrics.flatMap((s) => s.metrics);
|
|
49
|
+
const value = (name) => metrics.find((m) => m.descriptor.name === name)?.dataPoints[0];
|
|
50
|
+
expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.systemCpu)?.value).toBeCloseTo(0.42);
|
|
51
|
+
expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.systemMemoryUtilization)?.value).toBeCloseTo(0.75);
|
|
52
|
+
expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.systemMemoryUsage)?.attributes).toMatchObject({ state: 'used' });
|
|
53
|
+
expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.processMemory)?.value).toBe(123);
|
|
54
|
+
expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.eventLoopDelay)?.value).toBeCloseTo(0.015);
|
|
55
|
+
expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.processCpu)).toBeUndefined();
|
|
56
|
+
expect(value(system_metrics_1.SYSTEM_METRIC_NAMES.systemCpu)?.attributes['host.name']).toBeTruthy();
|
|
57
|
+
await provider.shutdown();
|
|
58
|
+
});
|
|
59
|
+
it('keeps a failing sampler from throwing', async () => {
|
|
60
|
+
const reader = new TestReader();
|
|
61
|
+
const provider = new sdk_metrics_1.MeterProvider({ readers: [reader] });
|
|
62
|
+
const boom = () => {
|
|
63
|
+
throw new Error('no');
|
|
64
|
+
};
|
|
65
|
+
(0, system_metrics_1.setupSystemMetrics)(provider.getMeter('test'), { host: boom, process: boom, memory: boom, rss: boom, loopDelaySeconds: boom });
|
|
66
|
+
await expect(reader.collect()).resolves.toBeDefined();
|
|
67
|
+
await provider.shutdown();
|
|
68
|
+
});
|
|
69
|
+
it('samples Node itself', () => {
|
|
70
|
+
const sampler = (0, system_metrics_1.nodeSampler)();
|
|
71
|
+
expect(sampler.memory().total).toBeGreaterThan(0);
|
|
72
|
+
expect(sampler.rss()).toBeGreaterThan(0);
|
|
73
|
+
sampler.host();
|
|
74
|
+
const busy = sampler.host();
|
|
75
|
+
expect(busy === null || (busy >= 0 && busy <= 1)).toBe(true);
|
|
76
|
+
sampler.stop();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=system-metrics.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-metrics.test.js","sourceRoot":"","sources":["../../../src/otel/__tests__/system-metrics.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application logs to Shield360, when asked for.
|
|
3
|
+
*
|
|
4
|
+
* Shield360 ingests OTLP logs on the same per-API-key route as traces. The
|
|
5
|
+
* logger here writes OpenTelemetry log records through the SDK's own
|
|
6
|
+
* LoggerProvider (otel/events.ts), so they go to the same destination with the
|
|
7
|
+
* same Authorization header as the spans, and carry the trace and span ids of
|
|
8
|
+
* whatever span is active when they are written.
|
|
9
|
+
*
|
|
10
|
+
* Nothing is sent unless it is turned on: `captureLogs: true` in init(), or
|
|
11
|
+
* SHIELD360_CAPTURE_LOGS=true. Until then every logger is a no-op, so a
|
|
12
|
+
* library can create one at import time without deciding for the application.
|
|
13
|
+
*
|
|
14
|
+
* Every record, from Shield360.logger() or a bridge (log-bridges.ts), passes
|
|
15
|
+
* the same checks as the Python SDK's handler: the level; never the SDK's own
|
|
16
|
+
* scopes (`shield360`, `opentelemetry`); at most `maxPerSecond` records a
|
|
17
|
+
* second per logger (500 by default); masking by the contract every SDK
|
|
18
|
+
* shares (sdk/rasp/README.md, "Masking"): credential pairs, bearer
|
|
19
|
+
* credentials and opaque tokens in the body and attributes, the whole value of
|
|
20
|
+
* an attribute named like a credential, lists and maps item by item, readable
|
|
21
|
+
* identifiers kept (not `code.*` or `exception.type`); the body and stack
|
|
22
|
+
* trace cut to 16,384 characters after masking, other strings to 4,096; and
|
|
23
|
+
* the application call site as `code.function.name`,
|
|
24
|
+
* `code.file.path` and `code.line.number` unless captureCodeLocation is off.
|
|
25
|
+
*/
|
|
26
|
+
import { LogAttributes } from '@opentelemetry/api-logs';
|
|
27
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
28
|
+
export interface Shield360Logger {
|
|
29
|
+
debug(message: string | Error, attributes?: LogAttributes): void;
|
|
30
|
+
info(message: string | Error, attributes?: LogAttributes): void;
|
|
31
|
+
warn(message: string | Error, attributes?: LogAttributes): void;
|
|
32
|
+
error(message: string | Error, attributes?: LogAttributes): void;
|
|
33
|
+
fatal(message: string | Error, attributes?: LogAttributes): void;
|
|
34
|
+
}
|
|
35
|
+
interface ProviderLike {
|
|
36
|
+
getLogger(name: string): {
|
|
37
|
+
emit(record: Record<string, unknown>): void;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export declare const DEFAULT_LOG_LEVEL: LogLevel;
|
|
41
|
+
export declare const DEFAULT_LOGGER_NAME = "app";
|
|
42
|
+
export declare const DEFAULT_MAX_PER_SECOND = 500;
|
|
43
|
+
export declare const MAX_BODY_LENGTH = 16384;
|
|
44
|
+
export declare const MAX_ATTRIBUTE_LENGTH = 4096;
|
|
45
|
+
export type AppLogsOptions = {
|
|
46
|
+
/** Record the application call site (code.*). Default true. */
|
|
47
|
+
captureCodeLocation?: boolean;
|
|
48
|
+
/** Directory code.file.path is made relative to (init()'s codeRoot). */
|
|
49
|
+
codeRoot?: string;
|
|
50
|
+
};
|
|
51
|
+
export type LoggerOptions = {
|
|
52
|
+
/** Records per second at most (default 500); the rest are dropped. */
|
|
53
|
+
maxPerSecond?: number;
|
|
54
|
+
};
|
|
55
|
+
/** A fixed-window limiter: true for at most `maxPerSecond` calls in each second. */
|
|
56
|
+
export declare function createLimiter(maxPerSecond?: number, now?: () => number): () => boolean;
|
|
57
|
+
/** Whether a scope is the SDK's own (`shield360`, `opentelemetry`, or below them). */
|
|
58
|
+
export declare function isOwnScope(name: string): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* An attribute value as it may leave the process (sdk/rasp/README.md, Masking):
|
|
61
|
+
* the whole value under a credential name, strings masked then cut, lists and
|
|
62
|
+
* maps item by item; code.* and exception.type as they are.
|
|
63
|
+
*/
|
|
64
|
+
export declare function maskAttribute(key: string, value: unknown): unknown;
|
|
65
|
+
/** The option, else SHIELD360_CAPTURE_LOGS, else off. */
|
|
66
|
+
export declare function resolveCaptureLogs(option?: boolean): boolean;
|
|
67
|
+
/** The option, else SHIELD360_LOG_LEVEL, else `info`. Unknown names fall back to `info`. */
|
|
68
|
+
export declare function resolveLogLevel(option?: string): LogLevel;
|
|
69
|
+
/** Start sending: records at `level` and above go through `logProvider`. */
|
|
70
|
+
export declare function enableAppLogs(logProvider: ProviderLike, level?: LogLevel, options?: AppLogsOptions): void;
|
|
71
|
+
/** Stop sending; every logger goes back to a no-op. */
|
|
72
|
+
export declare function disableAppLogs(): void;
|
|
73
|
+
export declare function appLogsEnabled(): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* A logger whose records go to Shield360 when application logs are on
|
|
76
|
+
* (`captureLogs: true` or SHIELD360_CAPTURE_LOGS=true), and nowhere otherwise.
|
|
77
|
+
* `name` becomes the record's instrumentation scope; it defaults to `app`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function createLogger(name?: string, options?: LoggerOptions): Shield360Logger;
|
|
80
|
+
export {};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_ATTRIBUTE_LENGTH = exports.MAX_BODY_LENGTH = exports.DEFAULT_MAX_PER_SECOND = exports.DEFAULT_LOGGER_NAME = exports.DEFAULT_LOG_LEVEL = void 0;
|
|
4
|
+
exports.createLimiter = createLimiter;
|
|
5
|
+
exports.isOwnScope = isOwnScope;
|
|
6
|
+
exports.maskAttribute = maskAttribute;
|
|
7
|
+
exports.resolveCaptureLogs = resolveCaptureLogs;
|
|
8
|
+
exports.resolveLogLevel = resolveLogLevel;
|
|
9
|
+
exports.enableAppLogs = enableAppLogs;
|
|
10
|
+
exports.disableAppLogs = disableAppLogs;
|
|
11
|
+
exports.appLogsEnabled = appLogsEnabled;
|
|
12
|
+
exports.createLogger = createLogger;
|
|
13
|
+
/**
|
|
14
|
+
* Application logs to Shield360, when asked for.
|
|
15
|
+
*
|
|
16
|
+
* Shield360 ingests OTLP logs on the same per-API-key route as traces. The
|
|
17
|
+
* logger here writes OpenTelemetry log records through the SDK's own
|
|
18
|
+
* LoggerProvider (otel/events.ts), so they go to the same destination with the
|
|
19
|
+
* same Authorization header as the spans, and carry the trace and span ids of
|
|
20
|
+
* whatever span is active when they are written.
|
|
21
|
+
*
|
|
22
|
+
* Nothing is sent unless it is turned on: `captureLogs: true` in init(), or
|
|
23
|
+
* SHIELD360_CAPTURE_LOGS=true. Until then every logger is a no-op, so a
|
|
24
|
+
* library can create one at import time without deciding for the application.
|
|
25
|
+
*
|
|
26
|
+
* Every record, from Shield360.logger() or a bridge (log-bridges.ts), passes
|
|
27
|
+
* the same checks as the Python SDK's handler: the level; never the SDK's own
|
|
28
|
+
* scopes (`shield360`, `opentelemetry`); at most `maxPerSecond` records a
|
|
29
|
+
* second per logger (500 by default); masking by the contract every SDK
|
|
30
|
+
* shares (sdk/rasp/README.md, "Masking"): credential pairs, bearer
|
|
31
|
+
* credentials and opaque tokens in the body and attributes, the whole value of
|
|
32
|
+
* an attribute named like a credential, lists and maps item by item, readable
|
|
33
|
+
* identifiers kept (not `code.*` or `exception.type`); the body and stack
|
|
34
|
+
* trace cut to 16,384 characters after masking, other strings to 4,096; and
|
|
35
|
+
* the application call site as `code.function.name`,
|
|
36
|
+
* `code.file.path` and `code.line.number` unless captureCodeLocation is off.
|
|
37
|
+
*/
|
|
38
|
+
const api_logs_1 = require("@opentelemetry/api-logs");
|
|
39
|
+
const masking_1 = require("../masking");
|
|
40
|
+
const code_location_1 = require("./code-location");
|
|
41
|
+
const utils_1 = require("./utils");
|
|
42
|
+
// The OpenTelemetry log data model's severity numbers and short names.
|
|
43
|
+
const SEVERITY = {
|
|
44
|
+
debug: api_logs_1.SeverityNumber.DEBUG,
|
|
45
|
+
info: api_logs_1.SeverityNumber.INFO,
|
|
46
|
+
warn: api_logs_1.SeverityNumber.WARN,
|
|
47
|
+
error: api_logs_1.SeverityNumber.ERROR,
|
|
48
|
+
fatal: api_logs_1.SeverityNumber.FATAL,
|
|
49
|
+
};
|
|
50
|
+
const SEVERITY_TEXT = {
|
|
51
|
+
debug: 'DEBUG',
|
|
52
|
+
info: 'INFO',
|
|
53
|
+
warn: 'WARN',
|
|
54
|
+
error: 'ERROR',
|
|
55
|
+
fatal: 'FATAL',
|
|
56
|
+
};
|
|
57
|
+
const LEVEL_ALIASES = { warning: 'warn', critical: 'fatal' };
|
|
58
|
+
exports.DEFAULT_LOG_LEVEL = 'info';
|
|
59
|
+
exports.DEFAULT_LOGGER_NAME = 'app';
|
|
60
|
+
exports.DEFAULT_MAX_PER_SECOND = 500;
|
|
61
|
+
exports.MAX_BODY_LENGTH = 16384;
|
|
62
|
+
exports.MAX_ATTRIBUTE_LENGTH = 4096;
|
|
63
|
+
const OWN_SCOPES = ['shield360', 'opentelemetry', '@opentelemetry'];
|
|
64
|
+
const LONG_ATTRIBUTES = new Set(['exception.stacktrace']);
|
|
65
|
+
const UNMASKED_ATTRIBUTES = new Set(['exception.type']);
|
|
66
|
+
const STACK_LIMIT = 64;
|
|
67
|
+
let provider = null;
|
|
68
|
+
let minSeverity = SEVERITY[exports.DEFAULT_LOG_LEVEL];
|
|
69
|
+
let locator = null;
|
|
70
|
+
/** A fixed-window limiter: true for at most `maxPerSecond` calls in each second. */
|
|
71
|
+
function createLimiter(maxPerSecond = exports.DEFAULT_MAX_PER_SECOND, now = Date.now) {
|
|
72
|
+
let windowStart = 0;
|
|
73
|
+
let count = 0;
|
|
74
|
+
return () => {
|
|
75
|
+
const t = now();
|
|
76
|
+
if (t - windowStart >= 1000) {
|
|
77
|
+
windowStart = t;
|
|
78
|
+
count = 0;
|
|
79
|
+
}
|
|
80
|
+
count += 1;
|
|
81
|
+
return count <= maxPerSecond;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** Whether a scope is the SDK's own (`shield360`, `opentelemetry`, or below them). */
|
|
85
|
+
function isOwnScope(name) {
|
|
86
|
+
const lower = name.toLowerCase();
|
|
87
|
+
return OWN_SCOPES.some((own) => lower === own || lower.startsWith(own + '.') || lower.startsWith(own + '/'));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* An attribute value as it may leave the process (sdk/rasp/README.md, Masking):
|
|
91
|
+
* the whole value under a credential name, strings masked then cut, lists and
|
|
92
|
+
* maps item by item; code.* and exception.type as they are.
|
|
93
|
+
*/
|
|
94
|
+
function maskAttribute(key, value) {
|
|
95
|
+
if (key.startsWith('code.') || UNMASKED_ATTRIBUTES.has(key))
|
|
96
|
+
return value;
|
|
97
|
+
return (0, masking_1.maskValue)(key, value, LONG_ATTRIBUTES.has(key) ? exports.MAX_BODY_LENGTH : exports.MAX_ATTRIBUTE_LENGTH);
|
|
98
|
+
}
|
|
99
|
+
function captureStack() {
|
|
100
|
+
const previous = Error.stackTraceLimit;
|
|
101
|
+
try {
|
|
102
|
+
Error.stackTraceLimit = STACK_LIMIT;
|
|
103
|
+
return new Error().stack;
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
Error.stackTraceLimit = previous;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** The option, else SHIELD360_CAPTURE_LOGS, else off. */
|
|
110
|
+
function resolveCaptureLogs(option) {
|
|
111
|
+
return option ?? (0, utils_1.parseBoolEnv)('SHIELD360_CAPTURE_LOGS') ?? false;
|
|
112
|
+
}
|
|
113
|
+
/** The option, else SHIELD360_LOG_LEVEL, else `info`. Unknown names fall back to `info`. */
|
|
114
|
+
function resolveLogLevel(option) {
|
|
115
|
+
const raw = (option ?? process.env.SHIELD360_LOG_LEVEL ?? exports.DEFAULT_LOG_LEVEL).trim().toLowerCase();
|
|
116
|
+
const name = LEVEL_ALIASES[raw] ?? raw;
|
|
117
|
+
return name in SEVERITY ? name : exports.DEFAULT_LOG_LEVEL;
|
|
118
|
+
}
|
|
119
|
+
/** Start sending: records at `level` and above go through `logProvider`. */
|
|
120
|
+
function enableAppLogs(logProvider, level = exports.DEFAULT_LOG_LEVEL, options = {}) {
|
|
121
|
+
provider = logProvider;
|
|
122
|
+
minSeverity = SEVERITY[level];
|
|
123
|
+
locator = options.captureCodeLocation === false ? null : new code_location_1.CodeLocationSpanProcessor({ codeRoot: options.codeRoot });
|
|
124
|
+
}
|
|
125
|
+
/** Stop sending; every logger goes back to a no-op. */
|
|
126
|
+
function disableAppLogs() {
|
|
127
|
+
provider = null;
|
|
128
|
+
minSeverity = SEVERITY[exports.DEFAULT_LOG_LEVEL];
|
|
129
|
+
locator = null;
|
|
130
|
+
}
|
|
131
|
+
function appLogsEnabled() {
|
|
132
|
+
return provider !== null;
|
|
133
|
+
}
|
|
134
|
+
function emit(scope, level, allow, message, attributes) {
|
|
135
|
+
const current = provider;
|
|
136
|
+
if (!current || SEVERITY[level] < minSeverity || isOwnScope(scope))
|
|
137
|
+
return;
|
|
138
|
+
try {
|
|
139
|
+
if (!allow())
|
|
140
|
+
return;
|
|
141
|
+
const given = { ...(attributes ?? {}) };
|
|
142
|
+
let body;
|
|
143
|
+
if (message instanceof Error) {
|
|
144
|
+
body = message.message;
|
|
145
|
+
given['exception.type'] = message.name;
|
|
146
|
+
given['exception.message'] = message.message;
|
|
147
|
+
if (message.stack)
|
|
148
|
+
given['exception.stacktrace'] = message.stack;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
body = String(message);
|
|
152
|
+
}
|
|
153
|
+
const where = locator;
|
|
154
|
+
if (where && given[code_location_1.ATTR_CODE_FILE_PATH] === undefined) {
|
|
155
|
+
const frame = where.findApplicationFrame(captureStack());
|
|
156
|
+
if (frame) {
|
|
157
|
+
if (frame.functionName)
|
|
158
|
+
given[code_location_1.ATTR_CODE_FUNCTION_NAME] = frame.functionName;
|
|
159
|
+
given[code_location_1.ATTR_CODE_FILE_PATH] = frame.filePath;
|
|
160
|
+
given[code_location_1.ATTR_CODE_LINE_NUMBER] = frame.lineNumber;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const attrs = {};
|
|
164
|
+
for (const [key, value] of Object.entries(given))
|
|
165
|
+
attrs[key] = maskAttribute(key, value);
|
|
166
|
+
// No context is passed: the logs SDK takes the active one, which links the
|
|
167
|
+
// record to the active span's trace and span ids.
|
|
168
|
+
current.getLogger(scope).emit({
|
|
169
|
+
severityNumber: SEVERITY[level],
|
|
170
|
+
severityText: SEVERITY_TEXT[level],
|
|
171
|
+
body: (0, masking_1.maskText)(body, exports.MAX_BODY_LENGTH),
|
|
172
|
+
attributes: attrs,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Logging never throws into the application.
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* A logger whose records go to Shield360 when application logs are on
|
|
181
|
+
* (`captureLogs: true` or SHIELD360_CAPTURE_LOGS=true), and nowhere otherwise.
|
|
182
|
+
* `name` becomes the record's instrumentation scope; it defaults to `app`.
|
|
183
|
+
*/
|
|
184
|
+
function createLogger(name = exports.DEFAULT_LOGGER_NAME, options = {}) {
|
|
185
|
+
const scope = name || exports.DEFAULT_LOGGER_NAME;
|
|
186
|
+
const allow = createLimiter(options.maxPerSecond);
|
|
187
|
+
return {
|
|
188
|
+
debug: (message, attributes) => emit(scope, 'debug', allow, message, attributes),
|
|
189
|
+
info: (message, attributes) => emit(scope, 'info', allow, message, attributes),
|
|
190
|
+
warn: (message, attributes) => emit(scope, 'warn', allow, message, attributes),
|
|
191
|
+
error: (message, attributes) => emit(scope, 'error', allow, message, attributes),
|
|
192
|
+
fatal: (message, attributes) => emit(scope, 'fatal', allow, message, attributes),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=app-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-logs.js","sourceRoot":"","sources":["../../src/otel/app-logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build and VCS resource attributes (service.version, vcs.*), resolved once
|
|
3
3
|
* at init. Per attribute, the first valid value wins from: explicit config
|
|
4
|
-
* (init option, SHIELD360_* env
|
|
4
|
+
* (init option, SHIELD360_* env — SHIELD360_SERVICE_VERSION, then its alias
|
|
5
|
+
* SHIELD360_RELEASE, for service.version), OTel env (OTEL_SERVICE_VERSION,
|
|
5
6
|
* OTEL_RESOURCE_ATTRIBUTES), then CI/platform env. CI values come from a
|
|
6
7
|
* single provider and are never mixed across providers.
|
|
7
8
|
* Values are never logged.
|
package/dist/otel/build-info.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Build and VCS resource attributes (service.version, vcs.*), resolved once
|
|
4
4
|
* at init. Per attribute, the first valid value wins from: explicit config
|
|
5
|
-
* (init option, SHIELD360_* env
|
|
5
|
+
* (init option, SHIELD360_* env — SHIELD360_SERVICE_VERSION, then its alias
|
|
6
|
+
* SHIELD360_RELEASE, for service.version), OTel env (OTEL_SERVICE_VERSION,
|
|
6
7
|
* OTEL_RESOURCE_ATTRIBUTES), then CI/platform env. CI values come from a
|
|
7
8
|
* single provider and are never mixed across providers.
|
|
8
9
|
* Values are never logged.
|
|
@@ -160,7 +161,7 @@ function resolveBuildAttributes(options = {}, env = process.env) {
|
|
|
160
161
|
const ci = ciCandidates(env);
|
|
161
162
|
const otel = parseOtelResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);
|
|
162
163
|
const resolved = {
|
|
163
|
-
[exports.ATTR_SERVICE_VERSION]: firstValid(sanitiseText, options.serviceVersion, env.SHIELD360_SERVICE_VERSION, env.OTEL_SERVICE_VERSION, otel[exports.ATTR_SERVICE_VERSION]),
|
|
164
|
+
[exports.ATTR_SERVICE_VERSION]: firstValid(sanitiseText, options.serviceVersion, env.SHIELD360_SERVICE_VERSION, env.SHIELD360_RELEASE, env.OTEL_SERVICE_VERSION, otel[exports.ATTR_SERVICE_VERSION]),
|
|
164
165
|
[exports.ATTR_VCS_REVISION]: firstValid(sanitiseRevision, env.SHIELD360_GIT_COMMIT, otel[exports.ATTR_VCS_REVISION], ci.revision),
|
|
165
166
|
[exports.ATTR_VCS_REPOSITORY_URL]: firstValid(sanitiseRepositoryUrl, env.SHIELD360_GIT_REPOSITORY_URL, otel[exports.ATTR_VCS_REPOSITORY_URL], ci.repo),
|
|
166
167
|
[exports.ATTR_VCS_REF_NAME]: firstValid(sanitiseText, env.SHIELD360_GIT_BRANCH, otel[exports.ATTR_VCS_REF_NAME], ci.ref),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-info.js","sourceRoot":"","sources":["../../src/otel/build-info.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"build-info.js","sourceRoot":"","sources":["../../src/otel/build-info.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAoBH,4CAGC;AAED,oCAIC;AAGD,sDA6BC;AAuED,kEAYC;AAUD,wDAuCC;AA/LY,QAAA,oBAAoB,GAAG,iBAAiB,CAAC;AACzC,QAAA,iBAAiB,GAAG,uBAAuB,CAAC;AAC5C,QAAA,uBAAuB,GAAG,yBAAyB,CAAC;AACpD,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AAYrD,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,OAAO,GAAG,oEAAoE,CAAC;AAErF,SAAgB,gBAAgB,CAAC,KAAyB;IACxD,MAAM,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,OAAO,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,SAAgB,YAAY,CAAC,KAAyB;IACpD,4CAA4C;IAC5C,MAAM,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxF,OAAO,CAAC,IAAI,SAAS,CAAC;AACxB,CAAC;AAED,wFAAwF;AACxF,SAAgB,qBAAqB,CAAC,KAAyB;IAC7D,MAAM,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,IAAI,QAAgB,CAAC;IACrB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAY,CAAC;IACjB,MAAM,GAAG,GAAG,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,GAAG,EAAE,CAAC;QACR,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1E,IAAI,QAAQ,KAAK,MAAM;YAAE,MAAM,GAAG,MAAM,CAAC;QACzC,oEAAoE;QACpE,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM;YAAE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACjE,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QACxB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,GAAG,MAAM,MAAM,QAAQ,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,KAAK,CAAC,MAAc,EAAE,KAAyB;IACtD,OAAO,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACxE,CAAC;AAED,MAAM,YAAY,GAA2B;IAC3C,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,SAAS,EAAE,eAAe;CAC3B,CAAC;AAEF,kFAAkF;AAClF,MAAM,YAAY,GAAoC;IACpD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,UAAU;QACtB,IAAI,EAAE,CAAC,CAAC,iBAAiB;YACvB,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,IAAI,oBAAoB,IAAI,CAAC,CAAC,iBAAiB,EAAE;YACzE,CAAC,CAAC,SAAS;QACb,GAAG,EAAE,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe;KAC5C,CAAC;IACF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,kBAAkB,EAAE,CAAC;IACzF,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,CAAC,CAAC,qBAAqB,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,CAAC,oBAAoB,CAAC;QACpC,OAAO;YACL,QAAQ,EAAE,CAAC,CAAC,qBAAqB;YACjC,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;YAC5E,GAAG,EAAE,CAAC,CAAC,qBAAqB;SAC7B,CAAC;IACJ,CAAC;IACD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACpE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,sBAAsB;QAClC,IAAI,EACF,CAAC,CAAC,sBAAsB,IAAI,CAAC,CAAC,qBAAqB;YACjD,CAAC,CAAC,sBAAsB,CAAC,CAAC,sBAAsB,IAAI,CAAC,CAAC,qBAAqB,EAAE;YAC7E,CAAC,CAAC,SAAS;QACf,GAAG,EAAE,CAAC,CAAC,kBAAkB;KAC1B,CAAC;IACF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;IAC/D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,iCAAiC;QAC7C,IAAI,EAAE,CAAC,CAAC,yBAAyB;QACjC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,0BAA0B,CAAC;KACxD,CAAC;IACF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC1F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACzF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,gBAAgB;QAC5B,IAAI,EAAE,CAAC,CAAC,yBAAyB;QACjC,GAAG,EAAE,CAAC,CAAC,gBAAgB;KACxB,CAAC;IACF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,mBAAmB;QAC/B,IAAI,EAAE,CAAC,CAAC,oBAAoB;QAC5B,GAAG,EAAE,CAAC,CAAC,sBAAsB;KAC9B,CAAC;IACF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;CAC1F,CAAC;AAEF,SAAS,YAAY,CAAC,GAAQ;IAC5B,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,2BAA2B,CAAC,KAAyB;IACnE,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC;YAAE,SAAS;QACtB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,QAAmB,EAAE,GAAG,MAAiC;IAC3E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,sBAAsB,CACpC,UAAuC,EAAE,EACzC,MAAW,OAAO,CAAC,GAAG;IAEtB,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,2BAA2B,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAuC;QACnD,CAAC,4BAAoB,CAAC,EAAE,UAAU,CAChC,YAAY,EACZ,OAAO,CAAC,cAAc,EACtB,GAAG,CAAC,yBAAyB,EAC7B,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,oBAAoB,EACxB,IAAI,CAAC,4BAAoB,CAAC,CAC3B;QACD,CAAC,yBAAiB,CAAC,EAAE,UAAU,CAC7B,gBAAgB,EAChB,GAAG,CAAC,oBAAoB,EACxB,IAAI,CAAC,yBAAiB,CAAC,EACvB,EAAE,CAAC,QAAQ,CACZ;QACD,CAAC,+BAAuB,CAAC,EAAE,UAAU,CACnC,qBAAqB,EACrB,GAAG,CAAC,4BAA4B,EAChC,IAAI,CAAC,+BAAuB,CAAC,EAC7B,EAAE,CAAC,IAAI,CACR;QACD,CAAC,yBAAiB,CAAC,EAAE,UAAU,CAC7B,YAAY,EACZ,GAAG,CAAC,oBAAoB,EACxB,IAAI,CAAC,yBAAiB,CAAC,EACvB,EAAE,CAAC,GAAG,CACP;KACF,CAAC;IACF,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/otel/events.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export default class Events {
|
|
|
5
5
|
static loggerProvider: LoggerProvider;
|
|
6
6
|
static logger: ReturnType<typeof logs.getLogger>;
|
|
7
7
|
static setup(options: SetupEventsOptions): import("@opentelemetry/api-logs").Logger | null;
|
|
8
|
+
static ensureProvider(options: SetupEventsOptions): LoggerProvider;
|
|
8
9
|
private static buildLoggerProvider;
|
|
9
10
|
private static createOTLPProcessor;
|
|
10
11
|
static resetForTesting(): void;
|