@newrelic/preflight 0.0.1-pre.1 → 1.0.1
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 +183 -0
- package/README.md +498 -0
- package/dist/alerts/alert-log.d.ts +24 -0
- package/dist/alerts/alert-log.d.ts.map +1 -0
- package/dist/alerts/alert-log.js +159 -0
- package/dist/alerts/alert-log.js.map +1 -0
- package/dist/alerts/alert-snapshot-collector.d.ts +168 -0
- package/dist/alerts/alert-snapshot-collector.d.ts.map +1 -0
- package/dist/alerts/alert-snapshot-collector.js +243 -0
- package/dist/alerts/alert-snapshot-collector.js.map +1 -0
- package/dist/alerts/local-alert-engine.d.ts +86 -0
- package/dist/alerts/local-alert-engine.d.ts.map +1 -0
- package/dist/alerts/local-alert-engine.js +466 -0
- package/dist/alerts/local-alert-engine.js.map +1 -0
- package/dist/alerts/local-alert-rule.d.ts +439 -0
- package/dist/alerts/local-alert-rule.d.ts.map +1 -0
- package/dist/alerts/local-alert-rule.js +139 -0
- package/dist/alerts/local-alert-rule.js.map +1 -0
- package/dist/alerts/os-notifier.d.ts +39 -0
- package/dist/alerts/os-notifier.d.ts.map +1 -0
- package/dist/alerts/os-notifier.js +170 -0
- package/dist/alerts/os-notifier.js.map +1 -0
- package/dist/alerts/types.d.ts +35 -0
- package/dist/alerts/types.d.ts.map +1 -0
- package/dist/alerts/types.js +8 -0
- package/dist/alerts/types.js.map +1 -0
- package/dist/config.d.ts +169 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +868 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/dashboard-server.d.ts +38 -0
- package/dist/dashboard/dashboard-server.d.ts.map +1 -0
- package/dist/dashboard/dashboard-server.js +207 -0
- package/dist/dashboard/dashboard-server.js.map +1 -0
- package/dist/dashboard/index.d.ts +3 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +2 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/live-event-bus.d.ts +99 -0
- package/dist/dashboard/live-event-bus.d.ts.map +1 -0
- package/dist/dashboard/live-event-bus.js +56 -0
- package/dist/dashboard/live-event-bus.js.map +1 -0
- package/dist/dashboard/routes/api-handler.d.ts +122 -0
- package/dist/dashboard/routes/api-handler.d.ts.map +1 -0
- package/dist/dashboard/routes/api-handler.js +1414 -0
- package/dist/dashboard/routes/api-handler.js.map +1 -0
- package/dist/dashboard/routes/replay-analyzer.d.ts +15 -0
- package/dist/dashboard/routes/replay-analyzer.d.ts.map +1 -0
- package/dist/dashboard/routes/replay-analyzer.js +227 -0
- package/dist/dashboard/routes/replay-analyzer.js.map +1 -0
- package/dist/dashboard/routes/sse-handler.d.ts +4 -0
- package/dist/dashboard/routes/sse-handler.d.ts.map +1 -0
- package/dist/dashboard/routes/sse-handler.js +122 -0
- package/dist/dashboard/routes/sse-handler.js.map +1 -0
- package/dist/dashboard/routes/static-handler.d.ts +3 -0
- package/dist/dashboard/routes/static-handler.d.ts.map +1 -0
- package/dist/dashboard/routes/static-handler.js +123 -0
- package/dist/dashboard/routes/static-handler.js.map +1 -0
- package/dist/data/alerts/conditions/01-daily-cost-spike.json +16 -0
- package/dist/data/alerts/conditions/02-low-efficiency-score.json +16 -0
- package/dist/data/alerts/conditions/03-stuck-loop-rate.json +16 -0
- package/dist/data/alerts/conditions/04-anti-pattern-rate.json +16 -0
- package/dist/data/alerts/conditions/05-session-cost-budget.json +16 -0
- package/dist/data/alerts/conditions-personal/01-personal-daily-cost.json +16 -0
- package/dist/data/alerts/conditions-personal/02-personal-session-cost.json +16 -0
- package/dist/data/alerts/conditions-personal/03-personal-low-efficiency.json +16 -0
- package/dist/data/alerts/conditions-personal/04-personal-anti-pattern-rate.json +16 -0
- package/dist/data/alerts/conditions-personal/05-personal-stuck-loop.json +16 -0
- package/dist/data/alerts/policy.json +4 -0
- package/dist/data/dashboards/ai-coding-assistant-manager-view.json +103 -0
- package/dist/data/dashboards/ai-coding-assistant-overview.json +239 -0
- package/dist/data/dashboards/ai-coding-assistant-personal.json +442 -0
- package/dist/data/dashboards/ai-coding-assistant-platform-comparison.json +320 -0
- package/dist/data/dashboards/ai-coding-assistant-security.json +275 -0
- package/dist/data/dashboards/ai-coding-assistant-session-detail.json +296 -0
- package/dist/data/dashboards/ai-coding-assistant-team-view.json +345 -0
- package/dist/deploy/data-paths.d.ts +22 -0
- package/dist/deploy/data-paths.d.ts.map +1 -0
- package/dist/deploy/data-paths.js +69 -0
- package/dist/deploy/data-paths.js.map +1 -0
- package/dist/deploy/deploy-alerts.d.ts +58 -0
- package/dist/deploy/deploy-alerts.d.ts.map +1 -0
- package/dist/deploy/deploy-alerts.js +371 -0
- package/dist/deploy/deploy-alerts.js.map +1 -0
- package/dist/deploy/deploy-dashboards.d.ts +92 -0
- package/dist/deploy/deploy-dashboards.d.ts.map +1 -0
- package/dist/deploy/deploy-dashboards.js +282 -0
- package/dist/deploy/deploy-dashboards.js.map +1 -0
- package/dist/digest/digest-formatter.d.ts +3 -0
- package/dist/digest/digest-formatter.d.ts.map +1 -0
- package/dist/digest/digest-formatter.js +37 -0
- package/dist/digest/digest-formatter.js.map +1 -0
- package/dist/digest/digest-sender.d.ts +2 -0
- package/dist/digest/digest-sender.d.ts.map +1 -0
- package/dist/digest/digest-sender.js +29 -0
- package/dist/digest/digest-sender.js.map +1 -0
- package/dist/hooks/bash-classifier.d.ts +26 -0
- package/dist/hooks/bash-classifier.d.ts.map +1 -0
- package/dist/hooks/bash-classifier.js +409 -0
- package/dist/hooks/bash-classifier.js.map +1 -0
- package/dist/hooks/collector-script.d.ts +47 -0
- package/dist/hooks/collector-script.d.ts.map +1 -0
- package/dist/hooks/collector-script.js +662 -0
- package/dist/hooks/collector-script.js.map +1 -0
- package/dist/hooks/event-processor.d.ts +65 -0
- package/dist/hooks/event-processor.d.ts.map +1 -0
- package/dist/hooks/event-processor.js +342 -0
- package/dist/hooks/event-processor.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/session-resolver.d.ts +66 -0
- package/dist/hooks/session-resolver.d.ts.map +1 -0
- package/dist/hooks/session-resolver.js +196 -0
- package/dist/hooks/session-resolver.js.map +1 -0
- package/dist/hooks/tool-parsers.d.ts +19 -0
- package/dist/hooks/tool-parsers.d.ts.map +1 -0
- package/dist/hooks/tool-parsers.js +260 -0
- package/dist/hooks/tool-parsers.js.map +1 -0
- package/dist/index.d.ts +107 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1505 -0
- package/dist/index.js.map +1 -0
- package/dist/install/cli.d.ts +11 -0
- package/dist/install/cli.d.ts.map +1 -0
- package/dist/install/cli.js +365 -0
- package/dist/install/cli.js.map +1 -0
- package/dist/install/index.d.ts +4 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +3 -0
- package/dist/install/index.js.map +1 -0
- package/dist/install/install-helper.d.ts +35 -0
- package/dist/install/install-helper.d.ts.map +1 -0
- package/dist/install/install-helper.js +227 -0
- package/dist/install/install-helper.js.map +1 -0
- package/dist/install/key-validator.d.ts +19 -0
- package/dist/install/key-validator.d.ts.map +1 -0
- package/dist/install/key-validator.js +122 -0
- package/dist/install/key-validator.js.map +1 -0
- package/dist/install/migrate.d.ts +12 -0
- package/dist/install/migrate.d.ts.map +1 -0
- package/dist/install/migrate.js +115 -0
- package/dist/install/migrate.js.map +1 -0
- package/dist/install/schedule.d.ts +11 -0
- package/dist/install/schedule.d.ts.map +1 -0
- package/dist/install/schedule.js +114 -0
- package/dist/install/schedule.js.map +1 -0
- package/dist/install/setup-wizard.d.ts +40 -0
- package/dist/install/setup-wizard.d.ts.map +1 -0
- package/dist/install/setup-wizard.js +489 -0
- package/dist/install/setup-wizard.js.map +1 -0
- package/dist/lib/date.d.ts +54 -0
- package/dist/lib/date.d.ts.map +1 -0
- package/dist/lib/date.js +85 -0
- package/dist/lib/date.js.map +1 -0
- package/dist/metrics/anti-patterns.d.ts +62 -0
- package/dist/metrics/anti-patterns.d.ts.map +1 -0
- package/dist/metrics/anti-patterns.js +301 -0
- package/dist/metrics/anti-patterns.js.map +1 -0
- package/dist/metrics/api-failure-tracker.d.ts +82 -0
- package/dist/metrics/api-failure-tracker.d.ts.map +1 -0
- package/dist/metrics/api-failure-tracker.js +202 -0
- package/dist/metrics/api-failure-tracker.js.map +1 -0
- package/dist/metrics/budget-tracker.d.ts +60 -0
- package/dist/metrics/budget-tracker.d.ts.map +1 -0
- package/dist/metrics/budget-tracker.js +130 -0
- package/dist/metrics/budget-tracker.js.map +1 -0
- package/dist/metrics/claudemd-tracker.d.ts +108 -0
- package/dist/metrics/claudemd-tracker.d.ts.map +1 -0
- package/dist/metrics/claudemd-tracker.js +337 -0
- package/dist/metrics/claudemd-tracker.js.map +1 -0
- package/dist/metrics/collaboration-profile.d.ts +65 -0
- package/dist/metrics/collaboration-profile.d.ts.map +1 -0
- package/dist/metrics/collaboration-profile.js +231 -0
- package/dist/metrics/collaboration-profile.js.map +1 -0
- package/dist/metrics/context-composition-tracker.d.ts +74 -0
- package/dist/metrics/context-composition-tracker.d.ts.map +1 -0
- package/dist/metrics/context-composition-tracker.js +202 -0
- package/dist/metrics/context-composition-tracker.js.map +1 -0
- package/dist/metrics/context-tracker.d.ts +78 -0
- package/dist/metrics/context-tracker.d.ts.map +1 -0
- package/dist/metrics/context-tracker.js +222 -0
- package/dist/metrics/context-tracker.js.map +1 -0
- package/dist/metrics/context-window-tracker.d.ts +18 -0
- package/dist/metrics/context-window-tracker.d.ts.map +1 -0
- package/dist/metrics/context-window-tracker.js +35 -0
- package/dist/metrics/context-window-tracker.js.map +1 -0
- package/dist/metrics/cost-forecast.d.ts +36 -0
- package/dist/metrics/cost-forecast.d.ts.map +1 -0
- package/dist/metrics/cost-forecast.js +91 -0
- package/dist/metrics/cost-forecast.js.map +1 -0
- package/dist/metrics/cost-per-outcome.d.ts +102 -0
- package/dist/metrics/cost-per-outcome.d.ts.map +1 -0
- package/dist/metrics/cost-per-outcome.js +266 -0
- package/dist/metrics/cost-per-outcome.js.map +1 -0
- package/dist/metrics/cost-tracker.d.ts +78 -0
- package/dist/metrics/cost-tracker.d.ts.map +1 -0
- package/dist/metrics/cost-tracker.js +169 -0
- package/dist/metrics/cost-tracker.js.map +1 -0
- package/dist/metrics/decision-tracker.d.ts +49 -0
- package/dist/metrics/decision-tracker.d.ts.map +1 -0
- package/dist/metrics/decision-tracker.js +161 -0
- package/dist/metrics/decision-tracker.js.map +1 -0
- package/dist/metrics/efficiency-score.d.ts +80 -0
- package/dist/metrics/efficiency-score.d.ts.map +1 -0
- package/dist/metrics/efficiency-score.js +219 -0
- package/dist/metrics/efficiency-score.js.map +1 -0
- package/dist/metrics/git-efficiency-tracker.d.ts +165 -0
- package/dist/metrics/git-efficiency-tracker.d.ts.map +1 -0
- package/dist/metrics/git-efficiency-tracker.js +1056 -0
- package/dist/metrics/git-efficiency-tracker.js.map +1 -0
- package/dist/metrics/index.d.ts +26 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +14 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/instruction-drift-tracker.d.ts +69 -0
- package/dist/metrics/instruction-drift-tracker.d.ts.map +1 -0
- package/dist/metrics/instruction-drift-tracker.js +213 -0
- package/dist/metrics/instruction-drift-tracker.js.map +1 -0
- package/dist/metrics/latency-decomposition.d.ts +50 -0
- package/dist/metrics/latency-decomposition.d.ts.map +1 -0
- package/dist/metrics/latency-decomposition.js +112 -0
- package/dist/metrics/latency-decomposition.js.map +1 -0
- package/dist/metrics/latency-tracker.d.ts +33 -0
- package/dist/metrics/latency-tracker.d.ts.map +1 -0
- package/dist/metrics/latency-tracker.js +93 -0
- package/dist/metrics/latency-tracker.js.map +1 -0
- package/dist/metrics/live-session-registry.d.ts +29 -0
- package/dist/metrics/live-session-registry.d.ts.map +1 -0
- package/dist/metrics/live-session-registry.js +103 -0
- package/dist/metrics/live-session-registry.js.map +1 -0
- package/dist/metrics/model-usage-tracker.d.ts +21 -0
- package/dist/metrics/model-usage-tracker.d.ts.map +1 -0
- package/dist/metrics/model-usage-tracker.js +53 -0
- package/dist/metrics/model-usage-tracker.js.map +1 -0
- package/dist/metrics/percentile.d.ts +5 -0
- package/dist/metrics/percentile.d.ts.map +1 -0
- package/dist/metrics/percentile.js +10 -0
- package/dist/metrics/percentile.js.map +1 -0
- package/dist/metrics/personal-coach.d.ts +47 -0
- package/dist/metrics/personal-coach.d.ts.map +1 -0
- package/dist/metrics/personal-coach.js +241 -0
- package/dist/metrics/personal-coach.js.map +1 -0
- package/dist/metrics/prompt-feedback.d.ts +75 -0
- package/dist/metrics/prompt-feedback.d.ts.map +1 -0
- package/dist/metrics/prompt-feedback.js +286 -0
- package/dist/metrics/prompt-feedback.js.map +1 -0
- package/dist/metrics/proxy-metrics.d.ts +54 -0
- package/dist/metrics/proxy-metrics.d.ts.map +1 -0
- package/dist/metrics/proxy-metrics.js +228 -0
- package/dist/metrics/proxy-metrics.js.map +1 -0
- package/dist/metrics/quality-proxy-tracker.d.ts +51 -0
- package/dist/metrics/quality-proxy-tracker.d.ts.map +1 -0
- package/dist/metrics/quality-proxy-tracker.js +162 -0
- package/dist/metrics/quality-proxy-tracker.js.map +1 -0
- package/dist/metrics/recommendation-engine.d.ts +72 -0
- package/dist/metrics/recommendation-engine.d.ts.map +1 -0
- package/dist/metrics/recommendation-engine.js +207 -0
- package/dist/metrics/recommendation-engine.js.map +1 -0
- package/dist/metrics/retry-detector.d.ts +43 -0
- package/dist/metrics/retry-detector.d.ts.map +1 -0
- package/dist/metrics/retry-detector.js +179 -0
- package/dist/metrics/retry-detector.js.map +1 -0
- package/dist/metrics/session-tracker.d.ts +75 -0
- package/dist/metrics/session-tracker.d.ts.map +1 -0
- package/dist/metrics/session-tracker.js +249 -0
- package/dist/metrics/session-tracker.js.map +1 -0
- package/dist/metrics/task-completion-tracker.d.ts +15 -0
- package/dist/metrics/task-completion-tracker.d.ts.map +1 -0
- package/dist/metrics/task-completion-tracker.js +27 -0
- package/dist/metrics/task-completion-tracker.js.map +1 -0
- package/dist/metrics/task-detector.d.ts +84 -0
- package/dist/metrics/task-detector.d.ts.map +1 -0
- package/dist/metrics/task-detector.js +302 -0
- package/dist/metrics/task-detector.js.map +1 -0
- package/dist/metrics/tool-selection-scorer.d.ts +39 -0
- package/dist/metrics/tool-selection-scorer.d.ts.map +1 -0
- package/dist/metrics/tool-selection-scorer.js +193 -0
- package/dist/metrics/tool-selection-scorer.js.map +1 -0
- package/dist/metrics/trend-analyzer.d.ts +92 -0
- package/dist/metrics/trend-analyzer.d.ts.map +1 -0
- package/dist/metrics/trend-analyzer.js +293 -0
- package/dist/metrics/trend-analyzer.js.map +1 -0
- package/dist/metrics/turn-cost-attributor.d.ts +41 -0
- package/dist/metrics/turn-cost-attributor.d.ts.map +1 -0
- package/dist/metrics/turn-cost-attributor.js +118 -0
- package/dist/metrics/turn-cost-attributor.js.map +1 -0
- package/dist/metrics/turn-tracker.d.ts +49 -0
- package/dist/metrics/turn-tracker.d.ts.map +1 -0
- package/dist/metrics/turn-tracker.js +192 -0
- package/dist/metrics/turn-tracker.js.map +1 -0
- package/dist/platforms/amazon-q-adapter.d.ts +10 -0
- package/dist/platforms/amazon-q-adapter.d.ts.map +1 -0
- package/dist/platforms/amazon-q-adapter.js +75 -0
- package/dist/platforms/amazon-q-adapter.js.map +1 -0
- package/dist/platforms/claude-code-adapter.d.ts +10 -0
- package/dist/platforms/claude-code-adapter.d.ts.map +1 -0
- package/dist/platforms/claude-code-adapter.js +48 -0
- package/dist/platforms/claude-code-adapter.js.map +1 -0
- package/dist/platforms/continue-adapter.d.ts +10 -0
- package/dist/platforms/continue-adapter.d.ts.map +1 -0
- package/dist/platforms/continue-adapter.js +73 -0
- package/dist/platforms/continue-adapter.js.map +1 -0
- package/dist/platforms/copilot-adapter.d.ts +37 -0
- package/dist/platforms/copilot-adapter.d.ts.map +1 -0
- package/dist/platforms/copilot-adapter.js +66 -0
- package/dist/platforms/copilot-adapter.js.map +1 -0
- package/dist/platforms/cursor-adapter.d.ts +10 -0
- package/dist/platforms/cursor-adapter.d.ts.map +1 -0
- package/dist/platforms/cursor-adapter.js +60 -0
- package/dist/platforms/cursor-adapter.js.map +1 -0
- package/dist/platforms/generic-mcp-adapter.d.ts +113 -0
- package/dist/platforms/generic-mcp-adapter.d.ts.map +1 -0
- package/dist/platforms/generic-mcp-adapter.js +139 -0
- package/dist/platforms/generic-mcp-adapter.js.map +1 -0
- package/dist/platforms/index.d.ts +15 -0
- package/dist/platforms/index.d.ts.map +1 -0
- package/dist/platforms/index.js +12 -0
- package/dist/platforms/index.js.map +1 -0
- package/dist/platforms/platform-registry.d.ts +11 -0
- package/dist/platforms/platform-registry.d.ts.map +1 -0
- package/dist/platforms/platform-registry.js +54 -0
- package/dist/platforms/platform-registry.js.map +1 -0
- package/dist/platforms/types.d.ts +36 -0
- package/dist/platforms/types.d.ts.map +1 -0
- package/dist/platforms/types.js +2 -0
- package/dist/platforms/types.js.map +1 -0
- package/dist/platforms/windsurf-adapter.d.ts +10 -0
- package/dist/platforms/windsurf-adapter.d.ts.map +1 -0
- package/dist/platforms/windsurf-adapter.js +63 -0
- package/dist/platforms/windsurf-adapter.js.map +1 -0
- package/dist/platforms/zed-adapter.d.ts +10 -0
- package/dist/platforms/zed-adapter.d.ts.map +1 -0
- package/dist/platforms/zed-adapter.js +72 -0
- package/dist/platforms/zed-adapter.js.map +1 -0
- package/dist/proxy/index.d.ts +7 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +5 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/otlp-receiver.d.ts +28 -0
- package/dist/proxy/otlp-receiver.d.ts.map +1 -0
- package/dist/proxy/otlp-receiver.js +319 -0
- package/dist/proxy/otlp-receiver.js.map +1 -0
- package/dist/proxy/proxy-manager.d.ts +47 -0
- package/dist/proxy/proxy-manager.d.ts.map +1 -0
- package/dist/proxy/proxy-manager.js +338 -0
- package/dist/proxy/proxy-manager.js.map +1 -0
- package/dist/proxy/types.d.ts +72 -0
- package/dist/proxy/types.d.ts.map +1 -0
- package/dist/proxy/types.js +33 -0
- package/dist/proxy/types.js.map +1 -0
- package/dist/proxy/upstream-http.d.ts +26 -0
- package/dist/proxy/upstream-http.d.ts.map +1 -0
- package/dist/proxy/upstream-http.js +209 -0
- package/dist/proxy/upstream-http.js.map +1 -0
- package/dist/proxy/upstream-stdio.d.ts +25 -0
- package/dist/proxy/upstream-stdio.d.ts.map +1 -0
- package/dist/proxy/upstream-stdio.js +256 -0
- package/dist/proxy/upstream-stdio.js.map +1 -0
- package/dist/security/audit-trail.d.ts +74 -0
- package/dist/security/audit-trail.d.ts.map +1 -0
- package/dist/security/audit-trail.js +338 -0
- package/dist/security/audit-trail.js.map +1 -0
- package/dist/security/index.d.ts +5 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +4 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/ssrf.d.ts +2 -0
- package/dist/security/ssrf.d.ts.map +1 -0
- package/dist/security/ssrf.js +126 -0
- package/dist/security/ssrf.js.map +1 -0
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +117 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/__test-utils__/log-output.d.ts +49 -0
- package/dist/shared/__test-utils__/log-output.d.ts.map +1 -0
- package/dist/shared/__test-utils__/log-output.js +38 -0
- package/dist/shared/__test-utils__/log-output.js.map +1 -0
- package/dist/shared/config.d.ts +56 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +290 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/errors.d.ts +139 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +406 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/events/factory.d.ts +143 -0
- package/dist/shared/events/factory.d.ts.map +1 -0
- package/dist/shared/events/factory.js +351 -0
- package/dist/shared/events/factory.js.map +1 -0
- package/dist/shared/events/index.d.ts +6 -0
- package/dist/shared/events/index.d.ts.map +1 -0
- package/dist/shared/events/index.js +3 -0
- package/dist/shared/events/index.js.map +1 -0
- package/dist/shared/events/serialize.d.ts +87 -0
- package/dist/shared/events/serialize.d.ts.map +1 -0
- package/dist/shared/events/serialize.js +510 -0
- package/dist/shared/events/serialize.js.map +1 -0
- package/dist/shared/events/types.d.ts +139 -0
- package/dist/shared/events/types.d.ts.map +1 -0
- package/dist/shared/events/types.js +2 -0
- package/dist/shared/events/types.js.map +1 -0
- package/dist/shared/harvest/event-buffer.d.ts +59 -0
- package/dist/shared/harvest/event-buffer.d.ts.map +1 -0
- package/dist/shared/harvest/event-buffer.js +100 -0
- package/dist/shared/harvest/event-buffer.js.map +1 -0
- package/dist/shared/harvest/harvest-scheduler.d.ts +200 -0
- package/dist/shared/harvest/harvest-scheduler.d.ts.map +1 -0
- package/dist/shared/harvest/harvest-scheduler.js +647 -0
- package/dist/shared/harvest/harvest-scheduler.js.map +1 -0
- package/dist/shared/harvest/index.d.ts +7 -0
- package/dist/shared/harvest/index.d.ts.map +1 -0
- package/dist/shared/harvest/index.js +4 -0
- package/dist/shared/harvest/index.js.map +1 -0
- package/dist/shared/harvest/metric-aggregator.d.ts +115 -0
- package/dist/shared/harvest/metric-aggregator.d.ts.map +1 -0
- package/dist/shared/harvest/metric-aggregator.js +247 -0
- package/dist/shared/harvest/metric-aggregator.js.map +1 -0
- package/dist/shared/index.d.ts +22 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +13 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/logger.d.ts +57 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +166 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/pricing-data.d.ts +4 -0
- package/dist/shared/pricing-data.d.ts.map +1 -0
- package/dist/shared/pricing-data.js +473 -0
- package/dist/shared/pricing-data.js.map +1 -0
- package/dist/shared/pricing.d.ts +148 -0
- package/dist/shared/pricing.d.ts.map +1 -0
- package/dist/shared/pricing.js +528 -0
- package/dist/shared/pricing.js.map +1 -0
- package/dist/shared/redact.d.ts +33 -0
- package/dist/shared/redact.d.ts.map +1 -0
- package/dist/shared/redact.js +110 -0
- package/dist/shared/redact.js.map +1 -0
- package/dist/shared/timing.d.ts +96 -0
- package/dist/shared/timing.d.ts.map +1 -0
- package/dist/shared/timing.js +173 -0
- package/dist/shared/timing.js.map +1 -0
- package/dist/shared/tokens.d.ts +145 -0
- package/dist/shared/tokens.d.ts.map +1 -0
- package/dist/shared/tokens.js +492 -0
- package/dist/shared/tokens.js.map +1 -0
- package/dist/shared/transport/events-api.d.ts +14 -0
- package/dist/shared/transport/events-api.d.ts.map +1 -0
- package/dist/shared/transport/events-api.js +29 -0
- package/dist/shared/transport/events-api.js.map +1 -0
- package/dist/shared/transport/http-client.d.ts +49 -0
- package/dist/shared/transport/http-client.d.ts.map +1 -0
- package/dist/shared/transport/http-client.js +381 -0
- package/dist/shared/transport/http-client.js.map +1 -0
- package/dist/shared/transport/index.d.ts +10 -0
- package/dist/shared/transport/index.d.ts.map +1 -0
- package/dist/shared/transport/index.js +6 -0
- package/dist/shared/transport/index.js.map +1 -0
- package/dist/shared/transport/logs-api.d.ts +29 -0
- package/dist/shared/transport/logs-api.d.ts.map +1 -0
- package/dist/shared/transport/logs-api.js +40 -0
- package/dist/shared/transport/logs-api.js.map +1 -0
- package/dist/shared/transport/metric-api.d.ts +9 -0
- package/dist/shared/transport/metric-api.d.ts.map +1 -0
- package/dist/shared/transport/metric-api.js +39 -0
- package/dist/shared/transport/metric-api.js.map +1 -0
- package/dist/shared/transport/otlp-event-bridge.d.ts +22 -0
- package/dist/shared/transport/otlp-event-bridge.d.ts.map +1 -0
- package/dist/shared/transport/otlp-event-bridge.js +50 -0
- package/dist/shared/transport/otlp-event-bridge.js.map +1 -0
- package/dist/shared/transport/otlp-shared.d.ts +14 -0
- package/dist/shared/transport/otlp-shared.d.ts.map +1 -0
- package/dist/shared/transport/otlp-shared.js +49 -0
- package/dist/shared/transport/otlp-shared.js.map +1 -0
- package/dist/shared/transport/otlp-transport.d.ts +58 -0
- package/dist/shared/transport/otlp-transport.d.ts.map +1 -0
- package/dist/shared/transport/otlp-transport.js +236 -0
- package/dist/shared/transport/otlp-transport.js.map +1 -0
- package/dist/shared/transport/types.d.ts +129 -0
- package/dist/shared/transport/types.d.ts.map +1 -0
- package/dist/shared/transport/types.js +2 -0
- package/dist/shared/transport/types.js.map +1 -0
- package/dist/shared/version.d.ts +2 -0
- package/dist/shared/version.d.ts.map +1 -0
- package/dist/shared/version.js +2 -0
- package/dist/shared/version.js.map +1 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local-store.d.ts +153 -0
- package/dist/storage/local-store.d.ts.map +1 -0
- package/dist/storage/local-store.js +719 -0
- package/dist/storage/local-store.js.map +1 -0
- package/dist/storage/retention.d.ts +2 -0
- package/dist/storage/retention.d.ts.map +1 -0
- package/dist/storage/retention.js +53 -0
- package/dist/storage/retention.js.map +1 -0
- package/dist/storage/session-store.d.ts +97 -0
- package/dist/storage/session-store.d.ts.map +1 -0
- package/dist/storage/session-store.js +391 -0
- package/dist/storage/session-store.js.map +1 -0
- package/dist/storage/types.d.ts +64 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/storage/weekly-summary.d.ts +61 -0
- package/dist/storage/weekly-summary.d.ts.map +1 -0
- package/dist/storage/weekly-summary.js +243 -0
- package/dist/storage/weekly-summary.js.map +1 -0
- package/dist/tools/analytics-tools.d.ts +101 -0
- package/dist/tools/analytics-tools.d.ts.map +1 -0
- package/dist/tools/analytics-tools.js +71 -0
- package/dist/tools/analytics-tools.js.map +1 -0
- package/dist/tools/cost-tools.d.ts +121 -0
- package/dist/tools/cost-tools.d.ts.map +1 -0
- package/dist/tools/cost-tools.js +174 -0
- package/dist/tools/cost-tools.js.map +1 -0
- package/dist/tools/cross-session-tools.d.ts +376 -0
- package/dist/tools/cross-session-tools.d.ts.map +1 -0
- package/dist/tools/cross-session-tools.js +820 -0
- package/dist/tools/cross-session-tools.js.map +1 -0
- package/dist/tools/extended-analytics-tools.d.ts +164 -0
- package/dist/tools/extended-analytics-tools.d.ts.map +1 -0
- package/dist/tools/extended-analytics-tools.js +121 -0
- package/dist/tools/extended-analytics-tools.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/session-stats.d.ts +162 -0
- package/dist/tools/session-stats.d.ts.map +1 -0
- package/dist/tools/session-stats.js +1054 -0
- package/dist/tools/session-stats.js.map +1 -0
- package/dist/tools/workflow-tools.d.ts +126 -0
- package/dist/tools/workflow-tools.d.ts.map +1 -0
- package/dist/tools/workflow-tools.js +274 -0
- package/dist/tools/workflow-tools.js.map +1 -0
- package/dist/tracing/mcp-tracer.d.ts +4 -0
- package/dist/tracing/mcp-tracer.d.ts.map +1 -0
- package/dist/tracing/mcp-tracer.js +14 -0
- package/dist/tracing/mcp-tracer.js.map +1 -0
- package/dist/tracing/session-span.d.ts +14 -0
- package/dist/tracing/session-span.d.ts.map +1 -0
- package/dist/tracing/session-span.js +53 -0
- package/dist/tracing/session-span.js.map +1 -0
- package/dist/tracing/task-span-tracker.d.ts +11 -0
- package/dist/tracing/task-span-tracker.d.ts.map +1 -0
- package/dist/tracing/task-span-tracker.js +59 -0
- package/dist/tracing/task-span-tracker.js.map +1 -0
- package/dist/tracing/tool-call-span.d.ts +4 -0
- package/dist/tracing/tool-call-span.d.ts.map +1 -0
- package/dist/tracing/tool-call-span.js +60 -0
- package/dist/tracing/tool-call-span.js.map +1 -0
- package/dist/transport/index.d.ts +3 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +2 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/log-ingest.d.ts +42 -0
- package/dist/transport/log-ingest.d.ts.map +1 -0
- package/dist/transport/log-ingest.js +151 -0
- package/dist/transport/log-ingest.js.map +1 -0
- package/dist/transport/nr-ingest.d.ts +171 -0
- package/dist/transport/nr-ingest.d.ts.map +1 -0
- package/dist/transport/nr-ingest.js +659 -0
- package/dist/transport/nr-ingest.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/web/assets/index-BrL281N-.css +2 -0
- package/dist/web/assets/index-CcaYZzXm.js +42 -0
- package/dist/web/favicon.svg +15 -0
- package/dist/web/index.html +15 -0
- package/examples/local-alert-rules.json +106 -0
- package/package.json +129 -1
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
import { createLogger } from './logger.js';
|
|
2
|
+
const tokenLogger = createLogger('tokens');
|
|
3
|
+
/**
|
|
4
|
+
* Coerce a value to a non-negative integer. Returns 0 if the value is not a
|
|
5
|
+
* finite non-negative number. Useful for tolerating provider responses with
|
|
6
|
+
* missing, null, undefined, NaN, Infinity, negative, or float token counts.
|
|
7
|
+
*
|
|
8
|
+
* Floors fractional values (e.g. `safeInt(10.7) === 10`). When truncation
|
|
9
|
+
* actually drops a fractional part, emits a debug-level log so operators can
|
|
10
|
+
* diagnose buggy provider stubs that return non-integer token counts
|
|
11
|
+
*. The log is debug, not warn — token counts are
|
|
12
|
+
* provider-controlled and a single fractional value is not a library bug.
|
|
13
|
+
*/
|
|
14
|
+
export function safeInt(value) {
|
|
15
|
+
if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {
|
|
16
|
+
const floored = Math.floor(value);
|
|
17
|
+
if (floored !== value) {
|
|
18
|
+
tokenLogger.debug('safeInt truncated fractional value', { value, floored });
|
|
19
|
+
}
|
|
20
|
+
return floored;
|
|
21
|
+
}
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Frozen zero-valued `TokenUsage` template. Use `{ ...EMPTY_USAGE }` (a
|
|
26
|
+
* spread copy) when constructing a fresh mutable accumulator — the spread
|
|
27
|
+
* is intentional: `TokenAccumulator` mutates `latestUsage` in place across
|
|
28
|
+
* stream chunks. The frozen master is shared across
|
|
29
|
+
* call sites so a misuse like `(EMPTY_USAGE as TokenUsage).inputTokens = 5`
|
|
30
|
+
* throws in strict mode rather than silently corrupting future returns.
|
|
31
|
+
*/
|
|
32
|
+
const EMPTY_USAGE = Object.freeze({
|
|
33
|
+
inputTokens: 0,
|
|
34
|
+
outputTokens: 0,
|
|
35
|
+
thinkingTokens: 0,
|
|
36
|
+
cacheReadTokens: 0,
|
|
37
|
+
cacheCreationTokens: 0,
|
|
38
|
+
totalTokens: 0,
|
|
39
|
+
});
|
|
40
|
+
export function extractAnthropicTokens(response) {
|
|
41
|
+
if (!response.usage)
|
|
42
|
+
return { ...EMPTY_USAGE };
|
|
43
|
+
const usage = response.usage;
|
|
44
|
+
const inputTokens = safeInt(usage.input_tokens);
|
|
45
|
+
const outputTokens = safeInt(usage.output_tokens);
|
|
46
|
+
const cacheReadTokens = safeInt(usage.cache_read_input_tokens);
|
|
47
|
+
const cacheCreationTokens = safeInt(usage.cache_creation_input_tokens);
|
|
48
|
+
// Anthropic currently folds thinking into output_tokens. If a future SDK
|
|
49
|
+
// exposes a dedicated thinking_tokens field, pick it up automatically.
|
|
50
|
+
// safeInt(undefined) === 0 preserves current behavior when absent.
|
|
51
|
+
const thinkingTokens = safeInt(usage.thinking_tokens);
|
|
52
|
+
return {
|
|
53
|
+
inputTokens,
|
|
54
|
+
outputTokens,
|
|
55
|
+
thinkingTokens,
|
|
56
|
+
cacheReadTokens,
|
|
57
|
+
cacheCreationTokens,
|
|
58
|
+
totalTokens: inputTokens + outputTokens + thinkingTokens + cacheReadTokens + cacheCreationTokens,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function extractGeminiTokens(response) {
|
|
62
|
+
if (!response.usageMetadata)
|
|
63
|
+
return { ...EMPTY_USAGE };
|
|
64
|
+
const meta = response.usageMetadata;
|
|
65
|
+
const inputTokens = safeInt(meta.promptTokenCount);
|
|
66
|
+
const outputTokens = safeInt(meta.candidatesTokenCount);
|
|
67
|
+
const thinkingTokens = safeInt(meta.thoughtsTokenCount);
|
|
68
|
+
const cacheReadTokens = safeInt(meta.cachedContentTokenCount);
|
|
69
|
+
let totalTokens;
|
|
70
|
+
if (meta.totalTokenCount !== undefined) {
|
|
71
|
+
const apiTotal = safeInt(meta.totalTokenCount);
|
|
72
|
+
// Gemini's totalTokenCount is authoritative per
|
|
73
|
+
// the API spec and may legitimately diverge from the component sum
|
|
74
|
+
// (e.g. billable-vs-counted distinctions, deduplication). Use the API
|
|
75
|
+
// value, but emit a debug log on divergence so operators can spot drift
|
|
76
|
+
// if the API ever stops reporting totals consistently.
|
|
77
|
+
const componentSum = inputTokens + outputTokens + thinkingTokens + cacheReadTokens;
|
|
78
|
+
if (apiTotal !== componentSum) {
|
|
79
|
+
tokenLogger.debug('Gemini totalTokenCount differs from component sum', {
|
|
80
|
+
apiTotal,
|
|
81
|
+
componentSum,
|
|
82
|
+
inputTokens,
|
|
83
|
+
outputTokens,
|
|
84
|
+
thinkingTokens,
|
|
85
|
+
cacheReadTokens,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
totalTokens = apiTotal;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
totalTokens = inputTokens + outputTokens + thinkingTokens + cacheReadTokens;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
inputTokens,
|
|
95
|
+
outputTokens,
|
|
96
|
+
thinkingTokens,
|
|
97
|
+
cacheReadTokens,
|
|
98
|
+
cacheCreationTokens: 0, // Gemini does not expose cache creation tokens
|
|
99
|
+
totalTokens,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Extract `TokenUsage` from an OpenAI Chat Completions response (or the final
|
|
104
|
+
* stream chunk when `stream_options: { include_usage: true }` is set — the
|
|
105
|
+
* shape is identical).
|
|
106
|
+
*
|
|
107
|
+
* Mapping:
|
|
108
|
+
* - `prompt_tokens` → `inputTokens`
|
|
109
|
+
* - `completion_tokens` → `outputTokens`
|
|
110
|
+
* - `prompt_tokens_details.cached_tokens` → `cacheReadTokens`
|
|
111
|
+
* - `completion_tokens_details.reasoning_tokens` → `thinkingTokens`
|
|
112
|
+
*
|
|
113
|
+
* `total_tokens` (if present) is authoritative and used as `totalTokens`,
|
|
114
|
+
* matching the Gemini extractor's behavior. OpenAI does not expose
|
|
115
|
+
* cache-creation tokens — they're set to 0.
|
|
116
|
+
*/
|
|
117
|
+
export function extractOpenAITokens(response) {
|
|
118
|
+
if (!response.usage)
|
|
119
|
+
return { ...EMPTY_USAGE };
|
|
120
|
+
const usage = response.usage;
|
|
121
|
+
const inputTokens = safeInt(usage.prompt_tokens);
|
|
122
|
+
const outputTokens = safeInt(usage.completion_tokens);
|
|
123
|
+
const cacheReadTokens = safeInt(usage.prompt_tokens_details?.cached_tokens);
|
|
124
|
+
const thinkingTokens = safeInt(usage.completion_tokens_details?.reasoning_tokens);
|
|
125
|
+
let totalTokens;
|
|
126
|
+
if (usage.total_tokens !== undefined) {
|
|
127
|
+
totalTokens = safeInt(usage.total_tokens);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// §11.3: for OpenAI, cacheReadTokens (prompt_tokens_details.cached_tokens)
|
|
131
|
+
// is a SUBSET of inputTokens (prompt_tokens), not an additive field.
|
|
132
|
+
// thinkingTokens (reasoning_tokens) is a SUBSET of outputTokens (completion_tokens).
|
|
133
|
+
// Including either again would double-count when total_tokens is absent.
|
|
134
|
+
totalTokens = inputTokens + outputTokens;
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
inputTokens,
|
|
138
|
+
outputTokens,
|
|
139
|
+
thinkingTokens,
|
|
140
|
+
cacheReadTokens,
|
|
141
|
+
cacheCreationTokens: 0,
|
|
142
|
+
totalTokens,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export function extractCohereTokens(response) {
|
|
146
|
+
const usage = response.usage ?? response.meta;
|
|
147
|
+
if (!usage)
|
|
148
|
+
return { ...EMPTY_USAGE };
|
|
149
|
+
// Prefer the `tokens` block (actual counts). Fall back to `billed_units`
|
|
150
|
+
// when `tokens` is missing — Cohere has historically populated both, but
|
|
151
|
+
// older / less-common endpoints may surface only one.
|
|
152
|
+
const counts = usage.tokens ?? usage.billed_units ?? {};
|
|
153
|
+
const inputTokens = safeInt(counts.input_tokens);
|
|
154
|
+
const outputTokens = safeInt(counts.output_tokens);
|
|
155
|
+
return {
|
|
156
|
+
inputTokens,
|
|
157
|
+
outputTokens,
|
|
158
|
+
thinkingTokens: 0, // Cohere does not expose reasoning tokens
|
|
159
|
+
cacheReadTokens: 0,
|
|
160
|
+
cacheCreationTokens: 0,
|
|
161
|
+
totalTokens: inputTokens + outputTokens,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
export function extractMistralTokens(response) {
|
|
165
|
+
if (!response.usage)
|
|
166
|
+
return { ...EMPTY_USAGE };
|
|
167
|
+
const usage = response.usage;
|
|
168
|
+
const inputTokens = safeInt(usage.prompt_tokens);
|
|
169
|
+
const outputTokens = safeInt(usage.completion_tokens);
|
|
170
|
+
let totalTokens;
|
|
171
|
+
if (usage.total_tokens !== undefined) {
|
|
172
|
+
totalTokens = safeInt(usage.total_tokens);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
totalTokens = inputTokens + outputTokens;
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
inputTokens,
|
|
179
|
+
outputTokens,
|
|
180
|
+
thinkingTokens: 0, // Mistral Chat Completions does not expose reasoning tokens
|
|
181
|
+
cacheReadTokens: 0, // Mistral does not expose prompt-cache fields today
|
|
182
|
+
cacheCreationTokens: 0,
|
|
183
|
+
totalTokens,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
export function extractBedrockTokens(response) {
|
|
187
|
+
if (!response.usage)
|
|
188
|
+
return { ...EMPTY_USAGE };
|
|
189
|
+
const usage = response.usage;
|
|
190
|
+
const inputTokens = safeInt(usage.inputTokens);
|
|
191
|
+
const outputTokens = safeInt(usage.outputTokens);
|
|
192
|
+
const cacheReadTokens = safeInt(usage.cacheReadInputTokens);
|
|
193
|
+
const cacheCreationTokens = safeInt(usage.cacheWriteInputTokens);
|
|
194
|
+
let totalTokens;
|
|
195
|
+
if (usage.totalTokens !== undefined) {
|
|
196
|
+
totalTokens = safeInt(usage.totalTokens);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
totalTokens = inputTokens + outputTokens + cacheReadTokens + cacheCreationTokens;
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
inputTokens,
|
|
203
|
+
outputTokens,
|
|
204
|
+
thinkingTokens: 0, // Bedrock Converse does not surface reasoning tokens distinctly
|
|
205
|
+
cacheReadTokens,
|
|
206
|
+
cacheCreationTokens,
|
|
207
|
+
totalTokens,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// ---------------------------------------------------------------------------
|
|
211
|
+
// Unified stream extraction
|
|
212
|
+
// ---------------------------------------------------------------------------
|
|
213
|
+
/**
|
|
214
|
+
* Track providers we've already warned about for unsupported streaming token
|
|
215
|
+
* extraction One-shot per process — a noisy provider
|
|
216
|
+
* shouldn't flood stderr, but the first call is loud enough to be discovered.
|
|
217
|
+
*/
|
|
218
|
+
const unsupportedProvidersWarned = new Set();
|
|
219
|
+
function warnUnsupportedProviderOnce(provider, source) {
|
|
220
|
+
if (unsupportedProvidersWarned.has(provider))
|
|
221
|
+
return;
|
|
222
|
+
unsupportedProvidersWarned.add(provider);
|
|
223
|
+
tokenLogger.warn(`${source}: token extraction not implemented for provider "${provider}" — returning zero usage. ` +
|
|
224
|
+
`Cost reports for this provider will be $0 until an extractor is added. ` +
|
|
225
|
+
`Pass usage data manually via createAiResponse if you have it.`, { provider });
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Test-only — reset the warn-once set so per-test assertions can re-trigger.
|
|
229
|
+
*/
|
|
230
|
+
export function __resetUnsupportedProvidersWarned() {
|
|
231
|
+
unsupportedProvidersWarned.clear();
|
|
232
|
+
}
|
|
233
|
+
export function extractStreamTokens(
|
|
234
|
+
// Accepts both non-streaming response shapes and streaming final-chunk
|
|
235
|
+
// shapes (which may nest usage differently). Duck-typed internally.
|
|
236
|
+
finalChunk, provider) {
|
|
237
|
+
// Guard against null/non-object for all providers — each extractor begins with
|
|
238
|
+
// `if (!response.usage) return EMPTY_USAGE` but that dereferences response
|
|
239
|
+
// first, throwing TypeError if it is null (§TK2).
|
|
240
|
+
if (finalChunk == null || typeof finalChunk !== 'object') {
|
|
241
|
+
return { ...EMPTY_USAGE };
|
|
242
|
+
}
|
|
243
|
+
if (provider === 'anthropic') {
|
|
244
|
+
return extractAnthropicTokens(finalChunk);
|
|
245
|
+
}
|
|
246
|
+
if (provider === 'google') {
|
|
247
|
+
return extractGeminiTokens(finalChunk);
|
|
248
|
+
}
|
|
249
|
+
if (provider === 'openai') {
|
|
250
|
+
return extractOpenAITokens(finalChunk);
|
|
251
|
+
}
|
|
252
|
+
if (provider === 'bedrock') {
|
|
253
|
+
// Bedrock stream final chunks nest usage under metadata.usage; non-streaming
|
|
254
|
+
// responses have it at the top level. Unwrap before delegating (§T1).
|
|
255
|
+
// null/non-object already guarded above (§TK2).
|
|
256
|
+
const bedrockChunk = finalChunk;
|
|
257
|
+
if ('metadata' in bedrockChunk) {
|
|
258
|
+
// This is a streaming-shaped chunk (has a metadata key). Keep shape
|
|
259
|
+
// detection separate from usage-presence so a future metadata event type
|
|
260
|
+
// that carries no usage does not fall through to the non-streaming extractor
|
|
261
|
+
// where the top-level usage field is also absent (§TK1).
|
|
262
|
+
const streamUsage = bedrockChunk.metadata?.usage;
|
|
263
|
+
if (streamUsage) {
|
|
264
|
+
return extractBedrockTokens({ usage: streamUsage });
|
|
265
|
+
}
|
|
266
|
+
tokenLogger.debug('Bedrock streaming chunk has metadata but no usage — returning empty', {
|
|
267
|
+
keys: Object.keys(bedrockChunk),
|
|
268
|
+
});
|
|
269
|
+
return { ...EMPTY_USAGE };
|
|
270
|
+
}
|
|
271
|
+
return extractBedrockTokens(bedrockChunk);
|
|
272
|
+
}
|
|
273
|
+
if (provider === 'mistral') {
|
|
274
|
+
return extractMistralTokens(finalChunk);
|
|
275
|
+
}
|
|
276
|
+
if (provider === 'cohere') {
|
|
277
|
+
// Cohere stream final chunks (message-end) nest usage under delta.usage;
|
|
278
|
+
// non-streaming responses have it at the top level (§T1).
|
|
279
|
+
// null/non-object already guarded above (§TK2).
|
|
280
|
+
const cohereChunk = finalChunk;
|
|
281
|
+
const streamUsage = cohereChunk.delta?.usage;
|
|
282
|
+
if ('delta' in cohereChunk && streamUsage) {
|
|
283
|
+
return extractCohereTokens({ usage: streamUsage });
|
|
284
|
+
}
|
|
285
|
+
return extractCohereTokens(cohereChunk);
|
|
286
|
+
}
|
|
287
|
+
// Defensive guard for hypothetical future providers added to AiProvider
|
|
288
|
+
// without a matching extractor branch above.
|
|
289
|
+
warnUnsupportedProviderOnce(provider, 'extractStreamTokens');
|
|
290
|
+
return { ...EMPTY_USAGE };
|
|
291
|
+
}
|
|
292
|
+
export class TokenAccumulator {
|
|
293
|
+
provider;
|
|
294
|
+
latestUsage = { ...EMPTY_USAGE };
|
|
295
|
+
finalized = false;
|
|
296
|
+
constructor(provider) {
|
|
297
|
+
this.provider = provider;
|
|
298
|
+
}
|
|
299
|
+
addChunk(chunk) {
|
|
300
|
+
if (this.finalized)
|
|
301
|
+
return;
|
|
302
|
+
if (this.provider === 'anthropic') {
|
|
303
|
+
this.addAnthropicChunk(chunk);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (this.provider === 'google') {
|
|
307
|
+
this.addGeminiChunk(chunk);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
if (this.provider === 'openai') {
|
|
311
|
+
this.addOpenAIChunk(chunk);
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
if (this.provider === 'bedrock') {
|
|
315
|
+
this.addBedrockChunk(chunk);
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
if (this.provider === 'mistral') {
|
|
319
|
+
this.addMistralChunk(chunk);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
if (this.provider === 'cohere') {
|
|
323
|
+
this.addCohereChunk(chunk);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
// Defensive guard for hypothetical future providers added to AiProvider
|
|
327
|
+
// without a matching extractor branch above.
|
|
328
|
+
warnUnsupportedProviderOnce(this.provider, 'TokenAccumulator');
|
|
329
|
+
}
|
|
330
|
+
finalize() {
|
|
331
|
+
this.finalized = true;
|
|
332
|
+
return { ...this.latestUsage };
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Reset the accumulator so it can be reused for a new stream
|
|
336
|
+
*. Zeroes the latest usage snapshot and clears the
|
|
337
|
+
* `finalized` flag. The provider binding is preserved — to track a
|
|
338
|
+
* different provider, construct a new `TokenAccumulator`.
|
|
339
|
+
*
|
|
340
|
+
* Useful when a streaming operation retries mid-stream (provider-side
|
|
341
|
+
* disconnect, client-side reconnect): instead of allocating a fresh
|
|
342
|
+
* instance for each attempt, the caller can `reset()` the existing one.
|
|
343
|
+
* Without this method `addChunk()` is a no-op after `finalize()` and
|
|
344
|
+
* subsequent `finalize()` calls return the stale snapshot.
|
|
345
|
+
*/
|
|
346
|
+
reset() {
|
|
347
|
+
this.latestUsage = { ...EMPTY_USAGE };
|
|
348
|
+
this.finalized = false;
|
|
349
|
+
}
|
|
350
|
+
addAnthropicChunk(event) {
|
|
351
|
+
// message_start carries the initial usage with input token counts (§TK3).
|
|
352
|
+
if (event.type === 'message_start' && event.message?.usage) {
|
|
353
|
+
const usage = event.message.usage;
|
|
354
|
+
this.latestUsage.inputTokens = safeInt(usage.input_tokens);
|
|
355
|
+
this.latestUsage.cacheReadTokens = safeInt(usage.cache_read_input_tokens);
|
|
356
|
+
this.latestUsage.cacheCreationTokens = safeInt(usage.cache_creation_input_tokens);
|
|
357
|
+
this.latestUsage.totalTokens =
|
|
358
|
+
this.latestUsage.inputTokens +
|
|
359
|
+
this.latestUsage.outputTokens +
|
|
360
|
+
this.latestUsage.thinkingTokens +
|
|
361
|
+
this.latestUsage.cacheReadTokens +
|
|
362
|
+
this.latestUsage.cacheCreationTokens;
|
|
363
|
+
}
|
|
364
|
+
// message_delta carries the FINAL counts. Per the Anthropic streaming
|
|
365
|
+
// spec it includes input_tokens, output_tokens, cache_read_input_tokens,
|
|
366
|
+
// and cache_creation_input_tokens — all of which may differ from
|
|
367
|
+
// message_start. Only overwrite a field when the delta carries it,
|
|
368
|
+
// so single-event-mocks (older tests, simpler stubs) continue to work.
|
|
369
|
+
if (event.type === 'message_delta' && event.usage) {
|
|
370
|
+
const u = event.usage;
|
|
371
|
+
if (u.output_tokens !== undefined) {
|
|
372
|
+
this.latestUsage.outputTokens = safeInt(u.output_tokens);
|
|
373
|
+
}
|
|
374
|
+
if (u.input_tokens !== undefined) {
|
|
375
|
+
this.latestUsage.inputTokens = safeInt(u.input_tokens);
|
|
376
|
+
}
|
|
377
|
+
if (u.cache_read_input_tokens !== undefined) {
|
|
378
|
+
this.latestUsage.cacheReadTokens = safeInt(u.cache_read_input_tokens);
|
|
379
|
+
}
|
|
380
|
+
if (u.cache_creation_input_tokens !== undefined) {
|
|
381
|
+
this.latestUsage.cacheCreationTokens = safeInt(u.cache_creation_input_tokens);
|
|
382
|
+
}
|
|
383
|
+
// Pick up thinking_tokens when Anthropic starts emitting it on streaming
|
|
384
|
+
// events. Matches the non-streaming path in extractAnthropicTokens (§TK1).
|
|
385
|
+
if (u.thinking_tokens !== undefined) {
|
|
386
|
+
this.latestUsage.thinkingTokens = safeInt(u.thinking_tokens);
|
|
387
|
+
}
|
|
388
|
+
// Recalculate totalTokens only when a usage update was received (§TK3).
|
|
389
|
+
// Moving this inside the branch avoids re-computing on every non-usage
|
|
390
|
+
// event (content_block_delta etc.) and is consistent with the Gemini/
|
|
391
|
+
// OpenAI/Bedrock/Cohere accumulators which all update inside their guards.
|
|
392
|
+
this.latestUsage.totalTokens =
|
|
393
|
+
this.latestUsage.inputTokens +
|
|
394
|
+
this.latestUsage.outputTokens +
|
|
395
|
+
this.latestUsage.thinkingTokens +
|
|
396
|
+
this.latestUsage.cacheReadTokens +
|
|
397
|
+
this.latestUsage.cacheCreationTokens;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
addGeminiChunk(chunk) {
|
|
401
|
+
// Each Gemini chunk may carry usageMetadata; the last one is authoritative
|
|
402
|
+
if (chunk.usageMetadata) {
|
|
403
|
+
const meta = chunk.usageMetadata;
|
|
404
|
+
this.latestUsage.inputTokens = safeInt(meta.promptTokenCount);
|
|
405
|
+
this.latestUsage.outputTokens = safeInt(meta.candidatesTokenCount);
|
|
406
|
+
this.latestUsage.thinkingTokens = safeInt(meta.thoughtsTokenCount);
|
|
407
|
+
this.latestUsage.cacheReadTokens = safeInt(meta.cachedContentTokenCount);
|
|
408
|
+
this.latestUsage.totalTokens =
|
|
409
|
+
meta.totalTokenCount !== undefined
|
|
410
|
+
? safeInt(meta.totalTokenCount)
|
|
411
|
+
: this.latestUsage.inputTokens +
|
|
412
|
+
this.latestUsage.outputTokens +
|
|
413
|
+
this.latestUsage.thinkingTokens +
|
|
414
|
+
this.latestUsage.cacheReadTokens +
|
|
415
|
+
this.latestUsage.cacheCreationTokens;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
addOpenAIChunk(chunk) {
|
|
419
|
+
// Only the final chunk (when stream_options.include_usage is set) carries
|
|
420
|
+
// `usage`. Earlier chunks are no-ops here. The values are absolute, not
|
|
421
|
+
// deltas, so overwrite rather than accumulate.
|
|
422
|
+
if (chunk.usage) {
|
|
423
|
+
const u = chunk.usage;
|
|
424
|
+
this.latestUsage.inputTokens = safeInt(u.prompt_tokens);
|
|
425
|
+
this.latestUsage.outputTokens = safeInt(u.completion_tokens);
|
|
426
|
+
this.latestUsage.cacheReadTokens = safeInt(u.prompt_tokens_details?.cached_tokens);
|
|
427
|
+
this.latestUsage.thinkingTokens = safeInt(u.completion_tokens_details?.reasoning_tokens);
|
|
428
|
+
this.latestUsage.totalTokens =
|
|
429
|
+
u.total_tokens !== undefined
|
|
430
|
+
? safeInt(u.total_tokens)
|
|
431
|
+
: // §11.3: same subset semantics as extractOpenAITokens — neither
|
|
432
|
+
// cacheReadTokens nor thinkingTokens is additive for OpenAI.
|
|
433
|
+
this.latestUsage.inputTokens + this.latestUsage.outputTokens;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
addCohereChunk(chunk) {
|
|
437
|
+
// Only the `message-end` event carries usage; earlier event types are
|
|
438
|
+
// no-ops here. The values are absolute, not deltas, so overwrite rather
|
|
439
|
+
// than accumulate.
|
|
440
|
+
const usage = chunk.delta?.usage;
|
|
441
|
+
if (usage) {
|
|
442
|
+
const counts = usage.tokens ?? usage.billed_units ?? {};
|
|
443
|
+
this.latestUsage.inputTokens = safeInt(counts.input_tokens);
|
|
444
|
+
this.latestUsage.outputTokens = safeInt(counts.output_tokens);
|
|
445
|
+
this.latestUsage.totalTokens =
|
|
446
|
+
this.latestUsage.inputTokens +
|
|
447
|
+
this.latestUsage.outputTokens +
|
|
448
|
+
this.latestUsage.thinkingTokens +
|
|
449
|
+
this.latestUsage.cacheReadTokens +
|
|
450
|
+
this.latestUsage.cacheCreationTokens;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
addMistralChunk(chunk) {
|
|
454
|
+
// Final chunk carries usage. The values are absolute, not deltas, so
|
|
455
|
+
// overwrite rather than accumulate.
|
|
456
|
+
if (chunk.usage) {
|
|
457
|
+
const u = chunk.usage;
|
|
458
|
+
this.latestUsage.inputTokens = safeInt(u.prompt_tokens);
|
|
459
|
+
this.latestUsage.outputTokens = safeInt(u.completion_tokens);
|
|
460
|
+
this.latestUsage.totalTokens =
|
|
461
|
+
u.total_tokens !== undefined
|
|
462
|
+
? safeInt(u.total_tokens)
|
|
463
|
+
: this.latestUsage.inputTokens +
|
|
464
|
+
this.latestUsage.outputTokens +
|
|
465
|
+
this.latestUsage.thinkingTokens +
|
|
466
|
+
this.latestUsage.cacheReadTokens +
|
|
467
|
+
this.latestUsage.cacheCreationTokens;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
addBedrockChunk(chunk) {
|
|
471
|
+
// Bedrock ConverseStream emits the `metadata` event near the end of
|
|
472
|
+
// the stream; earlier events (messageStart, contentBlockDelta,
|
|
473
|
+
// messageStop) carry no usage. The values are absolute, not deltas,
|
|
474
|
+
// so overwrite rather than accumulate.
|
|
475
|
+
const usage = chunk.metadata?.usage;
|
|
476
|
+
if (usage) {
|
|
477
|
+
this.latestUsage.inputTokens = safeInt(usage.inputTokens);
|
|
478
|
+
this.latestUsage.outputTokens = safeInt(usage.outputTokens);
|
|
479
|
+
this.latestUsage.cacheReadTokens = safeInt(usage.cacheReadInputTokens);
|
|
480
|
+
this.latestUsage.cacheCreationTokens = safeInt(usage.cacheWriteInputTokens);
|
|
481
|
+
this.latestUsage.totalTokens =
|
|
482
|
+
usage.totalTokens !== undefined
|
|
483
|
+
? safeInt(usage.totalTokens)
|
|
484
|
+
: this.latestUsage.inputTokens +
|
|
485
|
+
this.latestUsage.outputTokens +
|
|
486
|
+
this.latestUsage.thinkingTokens +
|
|
487
|
+
this.latestUsage.cacheReadTokens +
|
|
488
|
+
this.latestUsage.cacheCreationTokens;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/shared/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { NrEventData } from '../events/types.js';
|
|
2
|
+
import type { TransportOptions, TransportResult } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Send a batch of events to NR's Events API. Compresses with gzip, retries
|
|
5
|
+
* with exponential backoff (capped, jittered, Retry-After-aware), and
|
|
6
|
+
* surfaces 4xx response bodies in the result so callers can distinguish
|
|
7
|
+
* license-key from payload-shape failures (7 / §5.8).
|
|
8
|
+
*
|
|
9
|
+
* Returns a {@link TransportResult} the harvest scheduler uses to decide
|
|
10
|
+
* whether to requeue the batch. Per-request timeout is honored via
|
|
11
|
+
* `AbortSignal.timeout`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function sendEvents(events: NrEventData[], licenseKey: string, options: TransportOptions): Promise<TransportResult>;
|
|
14
|
+
//# sourceMappingURL=events-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-api.d.ts","sourceRoot":"","sources":["../../../src/shared/transport/events-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGpE;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EAAE,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAkB1B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { sendWithRetry, resolveRegion, getEventsApiUrl } from './http-client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Send a batch of events to NR's Events API. Compresses with gzip, retries
|
|
4
|
+
* with exponential backoff (capped, jittered, Retry-After-aware), and
|
|
5
|
+
* surfaces 4xx response bodies in the result so callers can distinguish
|
|
6
|
+
* license-key from payload-shape failures (7 / §5.8).
|
|
7
|
+
*
|
|
8
|
+
* Returns a {@link TransportResult} the harvest scheduler uses to decide
|
|
9
|
+
* whether to requeue the batch. Per-request timeout is honored via
|
|
10
|
+
* `AbortSignal.timeout`.
|
|
11
|
+
*/
|
|
12
|
+
export async function sendEvents(events, licenseKey, options) {
|
|
13
|
+
if (events.length === 0) {
|
|
14
|
+
return { success: true, statusCode: null, retryCount: 0 };
|
|
15
|
+
}
|
|
16
|
+
const region = resolveRegion(licenseKey, options.collectorHost ?? null);
|
|
17
|
+
const url = getEventsApiUrl(options.accountId, region, options.collectorHost ?? null);
|
|
18
|
+
return sendWithRetry({
|
|
19
|
+
url,
|
|
20
|
+
body: events,
|
|
21
|
+
licenseKey,
|
|
22
|
+
maxRetries: options.maxRetries ?? 3,
|
|
23
|
+
baseDelayMs: options.baseDelayMs ?? 1000,
|
|
24
|
+
maxDelayMs: options.maxDelayMs ?? 30_000,
|
|
25
|
+
requestTimeoutMs: options.requestTimeoutMs ?? 30_000,
|
|
26
|
+
clientName: options.clientName,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=events-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-api.js","sourceRoot":"","sources":["../../../src/shared/transport/events-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjF;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAqB,EACrB,UAAkB,EAClB,OAAyB;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;IAEtF,OAAO,aAAa,CAAC;QACnB,GAAG;QACH,IAAI,EAAE,MAAM;QACZ,UAAU;QACV,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,MAAM;QACpD,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { HttpSendOptions, TransportResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Supported New Relic regions for data ingest.
|
|
4
|
+
*
|
|
5
|
+
* - `us` — default/global region (insights-collector.newrelic.com)
|
|
6
|
+
* - `eu` — EU data center (insights-collector.eu01.nr-data.net)
|
|
7
|
+
* - `gov` — FedRAMP / US gov cloud (gov-* hostnames)
|
|
8
|
+
*
|
|
9
|
+
* License-key prefix mapping: `us01` → us, `eu01` → eu, `gov01` → gov.
|
|
10
|
+
* Legacy keys (no recognizable region prefix) default to `us`.
|
|
11
|
+
*/
|
|
12
|
+
export type Region = 'us' | 'eu' | 'gov';
|
|
13
|
+
export declare function resolveRegion(licenseKey: string, collectorHost: string | null): Region;
|
|
14
|
+
export declare function getEventsApiUrl(accountId: string, region: Region, collectorHost?: string | null): string;
|
|
15
|
+
export declare function getMetricApiUrl(region: Region, collectorHost?: string | null): string;
|
|
16
|
+
export declare function getLogsApiUrl(region: Region, collectorHost?: string | null): string;
|
|
17
|
+
/**
|
|
18
|
+
* gzip-compress a JSON-serializable payload.
|
|
19
|
+
*
|
|
20
|
+
* Node 18+'s `zlib.gzip` accepts a string directly and performs UTF-8
|
|
21
|
+
* encoding internally, so we hand it `JSON.stringify(data)` and skip the
|
|
22
|
+
* extra `Buffer.from(json)` allocation that the previous implementation
|
|
23
|
+
* incurred (one less buffer per harvest).
|
|
24
|
+
*
|
|
25
|
+
* The returned Buffer is immutable after the call (`zlib.gzip` is a
|
|
26
|
+
* one-shot, not a stateful stream), so it is safe for `sendWithRetry` to
|
|
27
|
+
* reuse the same `compressed` Buffer across retry attempts (§5.16). If a
|
|
28
|
+
* future refactor moves to a stateful gzip stream, that reuse becomes
|
|
29
|
+
* unsafe — pin the call site outside the retry loop accordingly.
|
|
30
|
+
*/
|
|
31
|
+
export declare function compressPayload(data: unknown): Promise<Buffer>;
|
|
32
|
+
/**
|
|
33
|
+
* AWS-recommended decorrelated-jitter exponential backoff.
|
|
34
|
+
*
|
|
35
|
+
* sleep = min(maxDelayMs, random_between(baseDelayMs, prevSleepMs * 3))
|
|
36
|
+
*
|
|
37
|
+
* Compared to "equal jitter" (`backoff * (0.5 + Math.random() * 0.5)`),
|
|
38
|
+
* decorrelated jitter:
|
|
39
|
+
* - smears retries more uniformly across time, reducing the thundering-herd
|
|
40
|
+
* effect when many clients are retrying the same 429,
|
|
41
|
+
* - lets a slow-start grow naturally toward `maxDelayMs` rather than locking
|
|
42
|
+
* the schedule to powers of two of `baseDelayMs`.
|
|
43
|
+
*
|
|
44
|
+
* `prevSleepMs` should start at `baseDelayMs` for the first retry, then carry
|
|
45
|
+
* the chosen wait forward so each subsequent retry samples from a wider band.
|
|
46
|
+
*/
|
|
47
|
+
export declare function decorrelatedJitter(baseDelayMs: number, maxDelayMs: number, prevSleepMs: number): number;
|
|
48
|
+
export declare function sendWithRetry(options: HttpSendOptions): Promise<TransportResult>;
|
|
49
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/shared/transport/http-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA0BnE;;;;;;;;;GASG;AACH,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAgBzC,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAsCtF;AA4DD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAiBR;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKrF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKnF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpE;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAQR;AA4BD,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAwKtF"}
|