observability-toolkit 2.0.0 → 2.1.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 +163 -398
- package/dist/__tests__/find-constant-dedup.test.d.ts +11 -0
- package/dist/__tests__/find-constant-dedup.test.d.ts.map +1 -0
- package/dist/__tests__/find-constant-dedup.test.js +132 -0
- package/dist/__tests__/find-constant-dedup.test.js.map +1 -0
- package/dist/backends/backend-schemas.d.ts +309 -0
- package/dist/backends/backend-schemas.d.ts.map +1 -0
- package/dist/backends/backend-schemas.js +215 -0
- package/dist/backends/backend-schemas.js.map +1 -0
- package/dist/backends/cloud.d.ts +46 -0
- package/dist/backends/cloud.d.ts.map +1 -0
- package/dist/backends/cloud.js +520 -0
- package/dist/backends/cloud.js.map +1 -0
- package/dist/backends/cloud.test.d.ts +2 -0
- package/dist/backends/cloud.test.d.ts.map +1 -0
- package/dist/backends/cloud.test.js +436 -0
- package/dist/backends/cloud.test.js.map +1 -0
- package/dist/backends/index.d.ts +659 -386
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +318 -41
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/index.test.js +578 -57
- package/dist/backends/index.test.js.map +1 -1
- package/dist/backends/local-jsonl-boolean-search.test.js +8 -7
- package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
- package/dist/backends/local-jsonl-cache.test.js +33 -31
- package/dist/backends/local-jsonl-cache.test.js.map +1 -1
- package/dist/backends/local-jsonl-circuit-breaker.test.js +9 -7
- package/dist/backends/local-jsonl-circuit-breaker.test.js.map +1 -1
- package/dist/backends/local-jsonl-export.test.js +73 -58
- package/dist/backends/local-jsonl-export.test.js.map +1 -1
- package/dist/backends/local-jsonl-index.test.js +52 -50
- package/dist/backends/local-jsonl-index.test.js.map +1 -1
- package/dist/backends/local-jsonl-logs.test.js +47 -31
- package/dist/backends/local-jsonl-logs.test.js.map +1 -1
- package/dist/backends/local-jsonl-metrics.test.js +85 -82
- package/dist/backends/local-jsonl-metrics.test.js.map +1 -1
- package/dist/backends/local-jsonl-otlp-unwrap.test.d.ts +2 -0
- package/dist/backends/local-jsonl-otlp-unwrap.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-otlp-unwrap.test.js +602 -0
- package/dist/backends/local-jsonl-otlp-unwrap.test.js.map +1 -0
- package/dist/backends/local-jsonl-traces.test.js +161 -147
- package/dist/backends/local-jsonl-traces.test.js.map +1 -1
- package/dist/backends/local-jsonl.d.ts +37 -8
- package/dist/backends/local-jsonl.d.ts.map +1 -1
- package/dist/backends/local-jsonl.js +1088 -241
- package/dist/backends/local-jsonl.js.map +1 -1
- package/dist/backends/shared.d.ts +9 -0
- package/dist/backends/shared.d.ts.map +1 -0
- package/dist/backends/shared.js +9 -0
- package/dist/backends/shared.js.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.d.ts +40 -0
- package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.js +27 -0
- package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.d.ts +106 -0
- package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.js +43 -0
- package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.d.ts +111 -0
- package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.js +42 -0
- package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.d.ts +106 -0
- package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.js +43 -0
- package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/common/v1/common_pb.d.ts +243 -0
- package/dist/generated/opentelemetry/proto/common/v1/common_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/common/v1/common_pb.js +49 -0
- package/dist/generated/opentelemetry/proto/common/v1/common_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.d.ts +90 -0
- package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.js +66 -0
- package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.d.ts +1134 -0
- package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.js +223 -0
- package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.d.ts +678 -0
- package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.js +107 -0
- package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.d.ts +46 -0
- package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.js +25 -0
- package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.d.ts +569 -0
- package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.js +195 -0
- package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.js.map +1 -0
- package/dist/lib/agent-judge/agent-as-judge.d.ts +157 -0
- package/dist/lib/agent-judge/agent-as-judge.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-as-judge.js +137 -0
- package/dist/lib/agent-judge/agent-as-judge.js.map +1 -0
- package/dist/lib/agent-judge/agent-as-judge.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-as-judge.test.js +839 -0
- package/dist/lib/agent-judge/agent-as-judge.test.js.map +1 -0
- package/dist/lib/agent-judge/agent-eval-metrics.d.ts +293 -0
- package/dist/lib/agent-judge/agent-eval-metrics.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-eval-metrics.js +715 -0
- package/dist/lib/agent-judge/agent-eval-metrics.js.map +1 -0
- package/dist/lib/agent-judge/agent-eval-metrics.test.d.ts +5 -0
- package/dist/lib/agent-judge/agent-eval-metrics.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-eval-metrics.test.js +676 -0
- package/dist/lib/agent-judge/agent-eval-metrics.test.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-classes.d.ts +95 -0
- package/dist/lib/agent-judge/agent-judge-classes.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-classes.js +222 -0
- package/dist/lib/agent-judge/agent-judge-classes.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-classes.test.d.ts +6 -0
- package/dist/lib/agent-judge/agent-judge-classes.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-classes.test.js +271 -0
- package/dist/lib/agent-judge/agent-judge-classes.test.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-consensus.d.ts +58 -0
- package/dist/lib/agent-judge/agent-judge-consensus.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-consensus.js +149 -0
- package/dist/lib/agent-judge/agent-judge-consensus.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-consensus.test.d.ts +2 -0
- package/dist/lib/agent-judge/agent-judge-consensus.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-consensus.test.js +170 -0
- package/dist/lib/agent-judge/agent-judge-consensus.test.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-verification.d.ts +89 -0
- package/dist/lib/agent-judge/agent-judge-verification.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-verification.js +235 -0
- package/dist/lib/agent-judge/agent-judge-verification.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-verification.test.d.ts +5 -0
- package/dist/lib/agent-judge/agent-judge-verification.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-verification.test.js +399 -0
- package/dist/lib/agent-judge/agent-judge-verification.test.js.map +1 -0
- package/dist/lib/audit/agent-auditor-scoring.d.ts +167 -0
- package/dist/lib/audit/agent-auditor-scoring.d.ts.map +1 -0
- package/dist/lib/audit/agent-auditor-scoring.js +338 -0
- package/dist/lib/audit/agent-auditor-scoring.js.map +1 -0
- package/dist/lib/audit/agent-auditor-scoring.test.d.ts +2 -0
- package/dist/lib/audit/agent-auditor-scoring.test.d.ts.map +1 -0
- package/dist/lib/audit/agent-auditor-scoring.test.js +576 -0
- package/dist/lib/audit/agent-auditor-scoring.test.js.map +1 -0
- package/dist/lib/audit/audit-record.d.ts +139 -0
- package/dist/lib/audit/audit-record.d.ts.map +1 -0
- package/dist/lib/audit/audit-record.js +288 -0
- package/dist/lib/audit/audit-record.js.map +1 -0
- package/dist/lib/audit/audit-record.test.d.ts +5 -0
- package/dist/lib/audit/audit-record.test.d.ts.map +1 -0
- package/dist/lib/audit/audit-record.test.js +258 -0
- package/dist/lib/audit/audit-record.test.js.map +1 -0
- package/dist/lib/audit/audit-scoring-constants.d.ts +57 -0
- package/dist/lib/audit/audit-scoring-constants.d.ts.map +1 -0
- package/dist/lib/audit/audit-scoring-constants.js +59 -0
- package/dist/lib/audit/audit-scoring-constants.js.map +1 -0
- package/dist/lib/audit/compliance-report.d.ts +125 -0
- package/dist/lib/audit/compliance-report.d.ts.map +1 -0
- package/dist/lib/audit/compliance-report.js +205 -0
- package/dist/lib/audit/compliance-report.js.map +1 -0
- package/dist/lib/audit/compliance-report.test.d.ts +5 -0
- package/dist/lib/audit/compliance-report.test.d.ts.map +1 -0
- package/dist/lib/audit/compliance-report.test.js +290 -0
- package/dist/lib/audit/compliance-report.test.js.map +1 -0
- package/dist/lib/audit/retention-guard.d.ts +41 -0
- package/dist/lib/audit/retention-guard.d.ts.map +1 -0
- package/dist/lib/audit/retention-guard.js +103 -0
- package/dist/lib/audit/retention-guard.js.map +1 -0
- package/dist/lib/audit/retention-guard.test.d.ts +5 -0
- package/dist/lib/audit/retention-guard.test.d.ts.map +1 -0
- package/dist/lib/audit/retention-guard.test.js +109 -0
- package/dist/lib/audit/retention-guard.test.js.map +1 -0
- package/dist/lib/audit/skill-auditor-scoring.d.ts +69 -0
- package/dist/lib/audit/skill-auditor-scoring.d.ts.map +1 -0
- package/dist/lib/audit/skill-auditor-scoring.js +149 -0
- package/dist/lib/audit/skill-auditor-scoring.js.map +1 -0
- package/dist/lib/audit/skill-auditor-scoring.test.d.ts +2 -0
- package/dist/lib/audit/skill-auditor-scoring.test.d.ts.map +1 -0
- package/dist/lib/audit/skill-auditor-scoring.test.js +369 -0
- package/dist/lib/audit/skill-auditor-scoring.test.js.map +1 -0
- package/dist/lib/audit/verification-events.d.ts +119 -0
- package/dist/lib/audit/verification-events.d.ts.map +1 -0
- package/dist/lib/audit/verification-events.js +175 -0
- package/dist/lib/audit/verification-events.js.map +1 -0
- package/dist/lib/audit/verification-events.test.d.ts.map +1 -0
- package/dist/lib/audit/verification-events.test.js +197 -0
- package/dist/lib/audit/verification-events.test.js.map +1 -0
- package/dist/lib/core/constants-models.d.ts +90 -0
- package/dist/lib/core/constants-models.d.ts.map +1 -0
- package/dist/lib/core/constants-models.js +208 -0
- package/dist/lib/core/constants-models.js.map +1 -0
- package/dist/lib/core/constants-otel.d.ts +68 -0
- package/dist/lib/core/constants-otel.d.ts.map +1 -0
- package/dist/lib/core/constants-otel.js +128 -0
- package/dist/lib/core/constants-otel.js.map +1 -0
- package/dist/lib/core/constants-symlink.test.d.ts.map +1 -0
- package/dist/lib/core/constants-symlink.test.js +358 -0
- package/dist/lib/core/constants-symlink.test.js.map +1 -0
- package/dist/lib/core/constants-telemetry.d.ts +21 -0
- package/dist/lib/core/constants-telemetry.d.ts.map +1 -0
- package/dist/lib/core/constants-telemetry.js +162 -0
- package/dist/lib/core/constants-telemetry.js.map +1 -0
- package/dist/lib/core/constants.d.ts +152 -0
- package/dist/lib/core/constants.d.ts.map +1 -0
- package/dist/lib/core/constants.js +223 -0
- package/dist/lib/core/constants.js.map +1 -0
- package/dist/lib/core/constants.test.d.ts.map +1 -0
- package/dist/lib/core/constants.test.js +833 -0
- package/dist/lib/core/constants.test.js.map +1 -0
- package/dist/lib/core/doc-sync.test.d.ts +9 -0
- package/dist/lib/core/doc-sync.test.d.ts.map +1 -0
- package/dist/lib/core/doc-sync.test.js +159 -0
- package/dist/lib/core/doc-sync.test.js.map +1 -0
- package/dist/lib/core/edge-cases.test.d.ts.map +1 -0
- package/dist/lib/core/edge-cases.test.js +637 -0
- package/dist/lib/core/edge-cases.test.js.map +1 -0
- package/dist/lib/core/file-utils.d.ts +360 -0
- package/dist/lib/core/file-utils.d.ts.map +1 -0
- package/dist/lib/core/file-utils.js +890 -0
- package/dist/lib/core/file-utils.js.map +1 -0
- package/dist/lib/core/file-utils.test-constants.d.ts +38 -0
- package/dist/lib/core/file-utils.test-constants.d.ts.map +1 -0
- package/dist/lib/core/file-utils.test-constants.js +40 -0
- package/dist/lib/core/file-utils.test-constants.js.map +1 -0
- package/dist/lib/core/file-utils.test.d.ts.map +1 -0
- package/dist/lib/core/file-utils.test.js +1329 -0
- package/dist/lib/core/file-utils.test.js.map +1 -0
- package/dist/lib/core/input-validator.d.ts +125 -0
- package/dist/lib/core/input-validator.d.ts.map +1 -0
- package/dist/lib/core/input-validator.fuzz.test.d.ts.map +1 -0
- package/dist/lib/core/input-validator.fuzz.test.js +302 -0
- package/dist/lib/core/input-validator.fuzz.test.js.map +1 -0
- package/dist/lib/core/input-validator.js +348 -0
- package/dist/lib/core/input-validator.js.map +1 -0
- package/dist/lib/core/input-validator.test.d.ts.map +1 -0
- package/dist/lib/core/input-validator.test.js +465 -0
- package/dist/lib/core/input-validator.test.js.map +1 -0
- package/dist/lib/core/logger.d.ts +32 -0
- package/dist/lib/core/logger.d.ts.map +1 -0
- package/dist/lib/core/logger.js +104 -0
- package/dist/lib/core/logger.js.map +1 -0
- package/dist/lib/core/logger.test.d.ts.map +1 -0
- package/dist/lib/core/logger.test.js.map +1 -0
- package/dist/lib/core/schema-types.d.ts +37 -0
- package/dist/lib/core/schema-types.d.ts.map +1 -0
- package/dist/lib/core/schema-types.js +29 -0
- package/dist/lib/core/schema-types.js.map +1 -0
- package/dist/lib/core/server-utils.d.ts +98 -0
- package/dist/lib/core/server-utils.d.ts.map +1 -0
- package/dist/lib/core/server-utils.js +193 -0
- package/dist/lib/core/server-utils.js.map +1 -0
- package/dist/lib/core/shared-schemas.d.ts +301 -0
- package/dist/lib/core/shared-schemas.d.ts.map +1 -0
- package/dist/lib/core/shared-schemas.js +222 -0
- package/dist/lib/core/shared-schemas.js.map +1 -0
- package/dist/lib/core/shared-schemas.test.d.ts.map +1 -0
- package/dist/lib/core/shared-schemas.test.js +136 -0
- package/dist/lib/core/shared-schemas.test.js.map +1 -0
- package/dist/lib/core/units.d.ts +67 -0
- package/dist/lib/core/units.d.ts.map +1 -0
- package/dist/lib/core/units.js +88 -0
- package/dist/lib/core/units.js.map +1 -0
- package/dist/lib/cost/cost-estimation.d.ts +264 -0
- package/dist/lib/cost/cost-estimation.d.ts.map +1 -0
- package/dist/lib/cost/cost-estimation.js +541 -0
- package/dist/lib/cost/cost-estimation.js.map +1 -0
- package/dist/lib/cost/cost-estimation.test.d.ts +5 -0
- package/dist/lib/cost/cost-estimation.test.d.ts.map +1 -0
- package/dist/lib/cost/cost-estimation.test.js +701 -0
- package/dist/lib/cost/cost-estimation.test.js.map +1 -0
- package/dist/lib/cost/pricing-cache.d.ts +59 -0
- package/dist/lib/cost/pricing-cache.d.ts.map +1 -0
- package/dist/lib/cost/pricing-cache.js +120 -0
- package/dist/lib/cost/pricing-cache.js.map +1 -0
- package/dist/lib/cost/pricing-cache.test.d.ts +5 -0
- package/dist/lib/cost/pricing-cache.test.d.ts.map +1 -0
- package/dist/lib/cost/pricing-cache.test.js +176 -0
- package/dist/lib/cost/pricing-cache.test.js.map +1 -0
- package/dist/lib/dashboard-file-utils.d.ts +35 -0
- package/dist/lib/dashboard-file-utils.d.ts.map +1 -0
- package/dist/lib/dashboard-file-utils.js +94 -0
- package/dist/lib/dashboard-file-utils.js.map +1 -0
- package/dist/lib/errors/error-sanitizer.d.ts +62 -0
- package/dist/lib/errors/error-sanitizer.d.ts.map +1 -0
- package/dist/lib/errors/error-sanitizer.js +235 -0
- package/dist/lib/errors/error-sanitizer.js.map +1 -0
- package/dist/lib/errors/error-sanitizer.test.d.ts.map +1 -0
- package/dist/lib/errors/error-sanitizer.test.js +534 -0
- package/dist/lib/errors/error-sanitizer.test.js.map +1 -0
- package/dist/lib/errors/error-types.d.ts +59 -0
- package/dist/lib/errors/error-types.d.ts.map +1 -0
- package/dist/lib/errors/error-types.js +187 -0
- package/dist/lib/errors/error-types.js.map +1 -0
- package/dist/lib/errors/error-types.test.d.ts.map +1 -0
- package/dist/lib/errors/error-types.test.js +246 -0
- package/dist/lib/errors/error-types.test.js.map +1 -0
- package/dist/lib/errors/query-sanitizer.d.ts.map +1 -0
- package/dist/lib/errors/query-sanitizer.js +269 -0
- package/dist/lib/errors/query-sanitizer.js.map +1 -0
- package/dist/lib/errors/query-sanitizer.test.d.ts.map +1 -0
- package/dist/lib/errors/query-sanitizer.test.js +403 -0
- package/dist/lib/errors/query-sanitizer.test.js.map +1 -0
- package/dist/lib/exports/confident-export.d.ts +105 -0
- package/dist/lib/exports/confident-export.d.ts.map +1 -0
- package/dist/lib/exports/confident-export.js +385 -0
- package/dist/lib/exports/confident-export.js.map +1 -0
- package/dist/lib/exports/confident-export.test.d.ts.map +1 -0
- package/dist/lib/exports/confident-export.test.js +848 -0
- package/dist/lib/exports/confident-export.test.js.map +1 -0
- package/dist/lib/exports/datadog-export.d.ts +200 -0
- package/dist/lib/exports/datadog-export.d.ts.map +1 -0
- package/dist/lib/exports/datadog-export.js +488 -0
- package/dist/lib/exports/datadog-export.js.map +1 -0
- package/dist/lib/exports/datadog-export.test.d.ts +2 -0
- package/dist/lib/exports/datadog-export.test.d.ts.map +1 -0
- package/dist/lib/exports/datadog-export.test.js +890 -0
- package/dist/lib/exports/datadog-export.test.js.map +1 -0
- package/dist/lib/exports/export-config-schemas.d.ts +67 -0
- package/dist/lib/exports/export-config-schemas.d.ts.map +1 -0
- package/dist/lib/exports/export-config-schemas.js +120 -0
- package/dist/lib/exports/export-config-schemas.js.map +1 -0
- package/dist/lib/exports/export-config-schemas.test.d.ts +8 -0
- package/dist/lib/exports/export-config-schemas.test.d.ts.map +1 -0
- package/dist/lib/exports/export-config-schemas.test.js +503 -0
- package/dist/lib/exports/export-config-schemas.test.js.map +1 -0
- package/dist/lib/exports/export-utils.d.ts +127 -0
- package/dist/lib/exports/export-utils.d.ts.map +1 -0
- package/dist/lib/exports/export-utils.js +303 -0
- package/dist/lib/exports/export-utils.js.map +1 -0
- package/dist/lib/exports/export-utils.test.d.ts.map +1 -0
- package/dist/lib/exports/export-utils.test.js +344 -0
- package/dist/lib/exports/export-utils.test.js.map +1 -0
- package/dist/lib/exports/langfuse-export.d.ts +129 -0
- package/dist/lib/exports/langfuse-export.d.ts.map +1 -0
- package/dist/lib/exports/langfuse-export.js +370 -0
- package/dist/lib/exports/langfuse-export.js.map +1 -0
- package/dist/lib/exports/langfuse-export.test.d.ts.map +1 -0
- package/dist/lib/exports/langfuse-export.test.js +1020 -0
- package/dist/lib/exports/langfuse-export.test.js.map +1 -0
- package/dist/lib/exports/otlp-export.d.ts +179 -0
- package/dist/lib/exports/otlp-export.d.ts.map +1 -0
- package/dist/lib/exports/otlp-export.js +397 -0
- package/dist/lib/exports/otlp-export.js.map +1 -0
- package/dist/lib/exports/otlp-format-converter.d.ts +70 -0
- package/dist/lib/exports/otlp-format-converter.d.ts.map +1 -0
- package/dist/lib/exports/otlp-format-converter.js +401 -0
- package/dist/lib/exports/otlp-format-converter.js.map +1 -0
- package/dist/lib/exports/otlp-proto-encode.d.ts +53 -0
- package/dist/lib/exports/otlp-proto-encode.d.ts.map +1 -0
- package/dist/lib/exports/otlp-proto-encode.js +165 -0
- package/dist/lib/exports/otlp-proto-encode.js.map +1 -0
- package/dist/lib/exports/otlp-proto-encode.test.d.ts +7 -0
- package/dist/lib/exports/otlp-proto-encode.test.d.ts.map +1 -0
- package/dist/lib/exports/otlp-proto-encode.test.js +997 -0
- package/dist/lib/exports/otlp-proto-encode.test.js.map +1 -0
- package/dist/lib/exports/phoenix-export.d.ts +119 -0
- package/dist/lib/exports/phoenix-export.d.ts.map +1 -0
- package/dist/lib/exports/phoenix-export.js +448 -0
- package/dist/lib/exports/phoenix-export.js.map +1 -0
- package/dist/lib/exports/phoenix-export.test.d.ts.map +1 -0
- package/dist/lib/exports/phoenix-export.test.js +816 -0
- package/dist/lib/exports/phoenix-export.test.js.map +1 -0
- package/dist/lib/index.d.ts +16 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +31 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/judge/evaluation-hooks-schemas.d.ts +186 -0
- package/dist/lib/judge/evaluation-hooks-schemas.d.ts.map +1 -0
- package/dist/lib/judge/evaluation-hooks-schemas.js +125 -0
- package/dist/lib/judge/evaluation-hooks-schemas.js.map +1 -0
- package/dist/lib/judge/evaluation-hooks.d.ts +88 -0
- package/dist/lib/judge/evaluation-hooks.d.ts.map +1 -0
- package/dist/lib/judge/evaluation-hooks.js +658 -0
- package/dist/lib/judge/evaluation-hooks.js.map +1 -0
- package/dist/lib/judge/evaluation-hooks.test.d.ts.map +1 -0
- package/dist/lib/judge/evaluation-hooks.test.js +934 -0
- package/dist/lib/judge/evaluation-hooks.test.js.map +1 -0
- package/dist/lib/judge/llm-as-judge.d.ts +138 -0
- package/dist/lib/judge/llm-as-judge.d.ts.map +1 -0
- package/dist/lib/judge/llm-as-judge.js +103 -0
- package/dist/lib/judge/llm-as-judge.js.map +1 -0
- package/dist/lib/judge/llm-as-judge.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-as-judge.test.js +2179 -0
- package/dist/lib/judge/llm-as-judge.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-bias.d.ts +44 -0
- package/dist/lib/judge/llm-judge-bias.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-bias.js +130 -0
- package/dist/lib/judge/llm-judge-bias.js.map +1 -0
- package/dist/lib/judge/llm-judge-bias.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-bias.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-bias.test.js +380 -0
- package/dist/lib/judge/llm-judge-bias.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-code.d.ts +99 -0
- package/dist/lib/judge/llm-judge-code.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-code.js +261 -0
- package/dist/lib/judge/llm-judge-code.js.map +1 -0
- package/dist/lib/judge/llm-judge-code.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-code.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-code.test.js +981 -0
- package/dist/lib/judge/llm-judge-code.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-config.d.ts +241 -0
- package/dist/lib/judge/llm-judge-config.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-config.js +390 -0
- package/dist/lib/judge/llm-judge-config.js.map +1 -0
- package/dist/lib/judge/llm-judge-config.test.d.ts +5 -0
- package/dist/lib/judge/llm-judge-config.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-config.test.js +392 -0
- package/dist/lib/judge/llm-judge-config.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-constants.d.ts +111 -0
- package/dist/lib/judge/llm-judge-constants.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-constants.js +150 -0
- package/dist/lib/judge/llm-judge-constants.js.map +1 -0
- package/dist/lib/judge/llm-judge-dag.d.ts +57 -0
- package/dist/lib/judge/llm-judge-dag.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-dag.js +217 -0
- package/dist/lib/judge/llm-judge-dag.js.map +1 -0
- package/dist/lib/judge/llm-judge-dag.test.d.ts +8 -0
- package/dist/lib/judge/llm-judge-dag.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-dag.test.js +973 -0
- package/dist/lib/judge/llm-judge-dag.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-domain.d.ts +42 -0
- package/dist/lib/judge/llm-judge-domain.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-domain.js +167 -0
- package/dist/lib/judge/llm-judge-domain.js.map +1 -0
- package/dist/lib/judge/llm-judge-domain.test.d.ts +6 -0
- package/dist/lib/judge/llm-judge-domain.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-domain.test.js +337 -0
- package/dist/lib/judge/llm-judge-domain.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-geval.d.ts +42 -0
- package/dist/lib/judge/llm-judge-geval.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-geval.js +213 -0
- package/dist/lib/judge/llm-judge-geval.js.map +1 -0
- package/dist/lib/judge/llm-judge-geval.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-geval.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-geval.test.js +556 -0
- package/dist/lib/judge/llm-judge-geval.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-otel.test.d.ts +9 -0
- package/dist/lib/judge/llm-judge-otel.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-otel.test.js +91 -0
- package/dist/lib/judge/llm-judge-otel.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-qag.d.ts +38 -0
- package/dist/lib/judge/llm-judge-qag.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-qag.js +205 -0
- package/dist/lib/judge/llm-judge-qag.js.map +1 -0
- package/dist/lib/judge/llm-judge-qag.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-qag.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-qag.test.js +386 -0
- package/dist/lib/judge/llm-judge-qag.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-resilience.d.ts +74 -0
- package/dist/lib/judge/llm-judge-resilience.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-resilience.js +146 -0
- package/dist/lib/judge/llm-judge-resilience.js.map +1 -0
- package/dist/lib/judge/llm-judge-resilience.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-resilience.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-resilience.test.js +353 -0
- package/dist/lib/judge/llm-judge-resilience.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-security.d.ts +106 -0
- package/dist/lib/judge/llm-judge-security.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-security.js +314 -0
- package/dist/lib/judge/llm-judge-security.js.map +1 -0
- package/dist/lib/judge/llm-judge-security.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-security.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-security.test.js +1011 -0
- package/dist/lib/judge/llm-judge-security.test.js.map +1 -0
- package/dist/lib/observability/context-accumulator.d.ts +32 -0
- package/dist/lib/observability/context-accumulator.d.ts.map +1 -0
- package/dist/lib/observability/context-accumulator.js +87 -0
- package/dist/lib/observability/context-accumulator.js.map +1 -0
- package/dist/lib/observability/evaluation-events.d.ts +35 -0
- package/dist/lib/observability/evaluation-events.d.ts.map +1 -0
- package/dist/lib/observability/evaluation-events.js +90 -0
- package/dist/lib/observability/evaluation-events.js.map +1 -0
- package/dist/lib/observability/file-span-exporter.d.ts +17 -0
- package/dist/lib/observability/file-span-exporter.d.ts.map +1 -0
- package/dist/lib/observability/file-span-exporter.js +49 -0
- package/dist/lib/observability/file-span-exporter.js.map +1 -0
- package/dist/lib/observability/histogram-bucket-constants.d.ts +25 -0
- package/dist/lib/observability/histogram-bucket-constants.d.ts.map +1 -0
- package/dist/lib/observability/histogram-bucket-constants.js +60 -0
- package/dist/lib/observability/histogram-bucket-constants.js.map +1 -0
- package/dist/lib/observability/histogram.d.ts +112 -0
- package/dist/lib/observability/histogram.d.ts.map +1 -0
- package/dist/lib/observability/histogram.js +170 -0
- package/dist/lib/observability/histogram.js.map +1 -0
- package/dist/lib/observability/histogram.test.d.ts.map +1 -0
- package/dist/lib/observability/histogram.test.js +385 -0
- package/dist/lib/observability/histogram.test.js.map +1 -0
- package/dist/lib/observability/indexer.d.ts +114 -0
- package/dist/lib/observability/indexer.d.ts.map +1 -0
- package/dist/lib/observability/indexer.js +402 -0
- package/dist/lib/observability/indexer.js.map +1 -0
- package/dist/lib/observability/indexer.test.d.ts.map +1 -0
- package/dist/lib/observability/indexer.test.js +713 -0
- package/dist/lib/observability/indexer.test.js.map +1 -0
- package/dist/lib/observability/instrumentation-eval.test.d.ts +5 -0
- package/dist/lib/observability/instrumentation-eval.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation-eval.test.js +63 -0
- package/dist/lib/observability/instrumentation-eval.test.js.map +1 -0
- package/dist/lib/observability/instrumentation-init-errors.test.d.ts +13 -0
- package/dist/lib/observability/instrumentation-init-errors.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation-init-errors.test.js +194 -0
- package/dist/lib/observability/instrumentation-init-errors.test.js.map +1 -0
- package/dist/lib/observability/instrumentation-retry-timeout.test.d.ts +15 -0
- package/dist/lib/observability/instrumentation-retry-timeout.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation-retry-timeout.test.js +188 -0
- package/dist/lib/observability/instrumentation-retry-timeout.test.js.map +1 -0
- package/dist/lib/observability/instrumentation-set-otel.test.d.ts +5 -0
- package/dist/lib/observability/instrumentation-set-otel.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation-set-otel.test.js +59 -0
- package/dist/lib/observability/instrumentation-set-otel.test.js.map +1 -0
- package/dist/lib/observability/instrumentation.d.ts +158 -0
- package/dist/lib/observability/instrumentation.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation.integration.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation.integration.test.js +590 -0
- package/dist/lib/observability/instrumentation.integration.test.js.map +1 -0
- package/dist/lib/observability/instrumentation.js +512 -0
- package/dist/lib/observability/instrumentation.js.map +1 -0
- package/dist/lib/observability/instrumentation.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation.test.js +822 -0
- package/dist/lib/observability/instrumentation.test.js.map +1 -0
- package/dist/lib/observability/mcp-semconv-constants.d.ts +98 -0
- package/dist/lib/observability/mcp-semconv-constants.d.ts.map +1 -0
- package/dist/lib/observability/mcp-semconv-constants.js +102 -0
- package/dist/lib/observability/mcp-semconv-constants.js.map +1 -0
- package/dist/lib/observability/mcp-semconv.d.ts +37 -0
- package/dist/lib/observability/mcp-semconv.d.ts.map +1 -0
- package/dist/lib/observability/mcp-semconv.js +87 -0
- package/dist/lib/observability/mcp-semconv.js.map +1 -0
- package/dist/lib/observability/mcp-semconv.test.d.ts +2 -0
- package/dist/lib/observability/mcp-semconv.test.d.ts.map +1 -0
- package/dist/lib/observability/mcp-semconv.test.js +168 -0
- package/dist/lib/observability/mcp-semconv.test.js.map +1 -0
- package/dist/lib/observability/metrics.d.ts +100 -0
- package/dist/lib/observability/metrics.d.ts.map +1 -0
- package/dist/lib/observability/metrics.js +429 -0
- package/dist/lib/observability/metrics.js.map +1 -0
- package/dist/lib/observability/metrics.test.d.ts.map +1 -0
- package/dist/lib/observability/metrics.test.js +191 -0
- package/dist/lib/observability/metrics.test.js.map +1 -0
- package/dist/lib/observability/observability-test-constants.d.ts +34 -0
- package/dist/lib/observability/observability-test-constants.d.ts.map +1 -0
- package/dist/lib/observability/observability-test-constants.js +55 -0
- package/dist/lib/observability/observability-test-constants.js.map +1 -0
- package/dist/lib/observability/opentelemetry-resources.test.d.ts +2 -0
- package/dist/lib/observability/opentelemetry-resources.test.d.ts.map +1 -0
- package/dist/lib/observability/opentelemetry-resources.test.js +19 -0
- package/dist/lib/observability/opentelemetry-resources.test.js.map +1 -0
- package/dist/lib/observability/parse-stats.d.ts.map +1 -0
- package/dist/lib/observability/parse-stats.js +207 -0
- package/dist/lib/observability/parse-stats.js.map +1 -0
- package/dist/lib/observability/parse-stats.test.d.ts.map +1 -0
- package/dist/lib/observability/parse-stats.test.js +287 -0
- package/dist/lib/observability/parse-stats.test.js.map +1 -0
- package/dist/lib/observability/render-trace-tree.d.ts +31 -0
- package/dist/lib/observability/render-trace-tree.d.ts.map +1 -0
- package/dist/lib/observability/render-trace-tree.js +95 -0
- package/dist/lib/observability/render-trace-tree.js.map +1 -0
- package/dist/lib/observability/render-trace-tree.test.d.ts +5 -0
- package/dist/lib/observability/render-trace-tree.test.d.ts.map +1 -0
- package/dist/lib/observability/render-trace-tree.test.js +97 -0
- package/dist/lib/observability/render-trace-tree.test.js.map +1 -0
- package/dist/lib/observability/span-attributes.d.ts +27 -0
- package/dist/lib/observability/span-attributes.d.ts.map +1 -0
- package/dist/lib/observability/span-attributes.js +85 -0
- package/dist/lib/observability/span-attributes.js.map +1 -0
- package/dist/lib/observability/trace-anomaly-detector.d.ts +23 -0
- package/dist/lib/observability/trace-anomaly-detector.d.ts.map +1 -0
- package/dist/lib/observability/trace-anomaly-detector.js +211 -0
- package/dist/lib/observability/trace-anomaly-detector.js.map +1 -0
- package/dist/lib/observability/trace-anomaly-detector.test.d.ts +5 -0
- package/dist/lib/observability/trace-anomaly-detector.test.d.ts.map +1 -0
- package/dist/lib/observability/trace-anomaly-detector.test.js +224 -0
- package/dist/lib/observability/trace-anomaly-detector.test.js.map +1 -0
- package/dist/lib/observability/trace-anomaly-schemas.d.ts +189 -0
- package/dist/lib/observability/trace-anomaly-schemas.d.ts.map +1 -0
- package/dist/lib/observability/trace-anomaly-schemas.js +167 -0
- package/dist/lib/observability/trace-anomaly-schemas.js.map +1 -0
- package/dist/lib/privacy/content-redaction.d.ts +141 -0
- package/dist/lib/privacy/content-redaction.d.ts.map +1 -0
- package/dist/lib/privacy/content-redaction.js +210 -0
- package/dist/lib/privacy/content-redaction.js.map +1 -0
- package/dist/lib/privacy/content-redaction.test.d.ts +2 -0
- package/dist/lib/privacy/content-redaction.test.d.ts.map +1 -0
- package/dist/lib/privacy/content-redaction.test.js +302 -0
- package/dist/lib/privacy/content-redaction.test.js.map +1 -0
- package/dist/lib/quality/bucket-utils.d.ts +17 -0
- package/dist/lib/quality/bucket-utils.d.ts.map +1 -0
- package/dist/lib/quality/bucket-utils.js +31 -0
- package/dist/lib/quality/bucket-utils.js.map +1 -0
- package/dist/lib/quality/bucket-utils.test.d.ts +2 -0
- package/dist/lib/quality/bucket-utils.test.d.ts.map +1 -0
- package/dist/lib/quality/bucket-utils.test.js +42 -0
- package/dist/lib/quality/bucket-utils.test.js.map +1 -0
- package/dist/lib/quality/qfe-backtest-detail.test.d.ts +5 -0
- package/dist/lib/quality/qfe-backtest-detail.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-backtest-detail.test.js +179 -0
- package/dist/lib/quality/qfe-backtest-detail.test.js.map +1 -0
- package/dist/lib/quality/qfe-calibration-paths.test.d.ts +5 -0
- package/dist/lib/quality/qfe-calibration-paths.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-calibration-paths.test.js +203 -0
- package/dist/lib/quality/qfe-calibration-paths.test.js.map +1 -0
- package/dist/lib/quality/qfe-correlation-helpers.test.d.ts +6 -0
- package/dist/lib/quality/qfe-correlation-helpers.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-correlation-helpers.test.js +143 -0
- package/dist/lib/quality/qfe-correlation-helpers.test.js.map +1 -0
- package/dist/lib/quality/qfe-cqi-paths.test.d.ts +6 -0
- package/dist/lib/quality/qfe-cqi-paths.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-cqi-paths.test.js +231 -0
- package/dist/lib/quality/qfe-cqi-paths.test.js.map +1 -0
- package/dist/lib/quality/qfe-critic-internals.test.d.ts +6 -0
- package/dist/lib/quality/qfe-critic-internals.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-critic-internals.test.js +191 -0
- package/dist/lib/quality/qfe-critic-internals.test.js.map +1 -0
- package/dist/lib/quality/qfe-derived-paths.test.d.ts +2 -0
- package/dist/lib/quality/qfe-derived-paths.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-derived-paths.test.js +372 -0
- package/dist/lib/quality/qfe-derived-paths.test.js.map +1 -0
- package/dist/lib/quality/qfe-dynamics-paths.test.d.ts +8 -0
- package/dist/lib/quality/qfe-dynamics-paths.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-dynamics-paths.test.js +223 -0
- package/dist/lib/quality/qfe-dynamics-paths.test.js.map +1 -0
- package/dist/lib/quality/qfe-granger-internals.test.d.ts +6 -0
- package/dist/lib/quality/qfe-granger-internals.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-granger-internals.test.js +158 -0
- package/dist/lib/quality/qfe-granger-internals.test.js.map +1 -0
- package/dist/lib/quality/qfe-label-normalize.test.d.ts +7 -0
- package/dist/lib/quality/qfe-label-normalize.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-label-normalize.test.js +332 -0
- package/dist/lib/quality/qfe-label-normalize.test.js.map +1 -0
- package/dist/lib/quality/qfe-ordinal-edge.test.d.ts +6 -0
- package/dist/lib/quality/qfe-ordinal-edge.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-ordinal-edge.test.js +98 -0
- package/dist/lib/quality/qfe-ordinal-edge.test.js.map +1 -0
- package/dist/lib/quality/qfe-roles-detail.test.d.ts +5 -0
- package/dist/lib/quality/qfe-roles-detail.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-roles-detail.test.js +115 -0
- package/dist/lib/quality/qfe-roles-detail.test.js.map +1 -0
- package/dist/lib/quality/qfe-rolling-detail.test.d.ts +7 -0
- package/dist/lib/quality/qfe-rolling-detail.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-rolling-detail.test.js +249 -0
- package/dist/lib/quality/qfe-rolling-detail.test.js.map +1 -0
- package/dist/lib/quality/qfe-stats-internals.test.d.ts +7 -0
- package/dist/lib/quality/qfe-stats-internals.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-stats-internals.test.js +143 -0
- package/dist/lib/quality/qfe-stats-internals.test.js.map +1 -0
- package/dist/lib/quality/qfe-streaming.test.d.ts +5 -0
- package/dist/lib/quality/qfe-streaming.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-streaming.test.js +239 -0
- package/dist/lib/quality/qfe-streaming.test.js.map +1 -0
- package/dist/lib/quality/qfe-sweep-detail.test.d.ts +6 -0
- package/dist/lib/quality/qfe-sweep-detail.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-sweep-detail.test.js +291 -0
- package/dist/lib/quality/qfe-sweep-detail.test.js.map +1 -0
- package/dist/lib/quality/quality-alerts.d.ts +23 -0
- package/dist/lib/quality/quality-alerts.d.ts.map +1 -0
- package/dist/lib/quality/quality-alerts.js +89 -0
- package/dist/lib/quality/quality-alerts.js.map +1 -0
- package/dist/lib/quality/quality-alerts.test.d.ts +2 -0
- package/dist/lib/quality/quality-alerts.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-alerts.test.js +86 -0
- package/dist/lib/quality/quality-alerts.test.js.map +1 -0
- package/dist/lib/quality/quality-constants.d.ts +294 -0
- package/dist/lib/quality/quality-constants.d.ts.map +1 -0
- package/dist/lib/quality/quality-constants.js +335 -0
- package/dist/lib/quality/quality-constants.js.map +1 -0
- package/dist/lib/quality/quality-feature-engineering.d.ts +1071 -0
- package/dist/lib/quality/quality-feature-engineering.d.ts.map +1 -0
- package/dist/lib/quality/quality-feature-engineering.js +2076 -0
- package/dist/lib/quality/quality-feature-engineering.js.map +1 -0
- package/dist/lib/quality/quality-feature-engineering.test.d.ts +5 -0
- package/dist/lib/quality/quality-feature-engineering.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-feature-engineering.test.js +2908 -0
- package/dist/lib/quality/quality-feature-engineering.test.js.map +1 -0
- package/dist/lib/quality/quality-metrics.d.ts +943 -0
- package/dist/lib/quality/quality-metrics.d.ts.map +1 -0
- package/dist/lib/quality/quality-metrics.js +1151 -0
- package/dist/lib/quality/quality-metrics.js.map +1 -0
- package/dist/lib/quality/quality-metrics.test.d.ts +5 -0
- package/dist/lib/quality/quality-metrics.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-metrics.test.js +2766 -0
- package/dist/lib/quality/quality-metrics.test.js.map +1 -0
- package/dist/lib/quality/quality-multi-agent.d.ts +106 -0
- package/dist/lib/quality/quality-multi-agent.d.ts.map +1 -0
- package/dist/lib/quality/quality-multi-agent.js +124 -0
- package/dist/lib/quality/quality-multi-agent.js.map +1 -0
- package/dist/lib/quality/quality-multi-agent.test.d.ts +6 -0
- package/dist/lib/quality/quality-multi-agent.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-multi-agent.test.js +163 -0
- package/dist/lib/quality/quality-multi-agent.test.js.map +1 -0
- package/dist/lib/quality/quality-sla.d.ts +35 -0
- package/dist/lib/quality/quality-sla.d.ts.map +1 -0
- package/dist/lib/quality/quality-sla.js +62 -0
- package/dist/lib/quality/quality-sla.js.map +1 -0
- package/dist/lib/quality/quality-sla.test.d.ts +5 -0
- package/dist/lib/quality/quality-sla.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-sla.test.js +144 -0
- package/dist/lib/quality/quality-sla.test.js.map +1 -0
- package/dist/lib/quality/quality-test-constants.d.ts +23 -0
- package/dist/lib/quality/quality-test-constants.d.ts.map +1 -0
- package/dist/lib/quality/quality-test-constants.js +25 -0
- package/dist/lib/quality/quality-test-constants.js.map +1 -0
- package/dist/lib/quality/quality-trends.d.ts +101 -0
- package/dist/lib/quality/quality-trends.d.ts.map +1 -0
- package/dist/lib/quality/quality-trends.js +299 -0
- package/dist/lib/quality/quality-trends.js.map +1 -0
- package/dist/lib/quality/quality-trends.test.d.ts +6 -0
- package/dist/lib/quality/quality-trends.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-trends.test.js +377 -0
- package/dist/lib/quality/quality-trends.test.js.map +1 -0
- package/dist/lib/quality/quality-views.d.ts +966 -0
- package/dist/lib/quality/quality-views.d.ts.map +1 -0
- package/dist/lib/quality/quality-views.js +367 -0
- package/dist/lib/quality/quality-views.js.map +1 -0
- package/dist/lib/quality/quality-views.test.d.ts +6 -0
- package/dist/lib/quality/quality-views.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-views.test.js +262 -0
- package/dist/lib/quality/quality-views.test.js.map +1 -0
- package/dist/lib/quality/quality-visualization.d.ts +112 -0
- package/dist/lib/quality/quality-visualization.d.ts.map +1 -0
- package/dist/lib/quality/quality-visualization.js +136 -0
- package/dist/lib/quality/quality-visualization.js.map +1 -0
- package/dist/lib/quality/quality-visualization.test.d.ts +5 -0
- package/dist/lib/quality/quality-visualization.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-visualization.test.js +189 -0
- package/dist/lib/quality/quality-visualization.test.js.map +1 -0
- package/dist/lib/resilience/cache.d.ts +56 -0
- package/dist/lib/resilience/cache.d.ts.map +1 -0
- package/dist/lib/resilience/cache.js +96 -0
- package/dist/lib/resilience/cache.js.map +1 -0
- package/dist/lib/resilience/cache.test.d.ts.map +1 -0
- package/dist/lib/resilience/cache.test.js +106 -0
- package/dist/lib/resilience/cache.test.js.map +1 -0
- package/dist/lib/resilience/circuit-breaker.d.ts +147 -0
- package/dist/lib/resilience/circuit-breaker.d.ts.map +1 -0
- package/dist/lib/resilience/circuit-breaker.js +251 -0
- package/dist/lib/resilience/circuit-breaker.js.map +1 -0
- package/dist/lib/resilience/circuit-breaker.test.d.ts.map +1 -0
- package/dist/lib/resilience/circuit-breaker.test.js +266 -0
- package/dist/lib/resilience/circuit-breaker.test.js.map +1 -0
- package/dist/lib/resilience/toon-encoder.d.ts +31 -0
- package/dist/lib/resilience/toon-encoder.d.ts.map +1 -0
- package/dist/lib/resilience/toon-encoder.js +66 -0
- package/dist/lib/resilience/toon-encoder.js.map +1 -0
- package/dist/lib/resilience/toon-encoder.test.d.ts.map +1 -0
- package/dist/lib/resilience/toon-encoder.test.js +86 -0
- package/dist/lib/resilience/toon-encoder.test.js.map +1 -0
- package/dist/lib/testing/mock-llm-builder.d.ts +139 -0
- package/dist/lib/testing/mock-llm-builder.d.ts.map +1 -0
- package/dist/lib/testing/mock-llm-builder.js +254 -0
- package/dist/lib/testing/mock-llm-builder.js.map +1 -0
- package/dist/lib/testing/mock-llm-builder.test.d.ts +5 -0
- package/dist/lib/testing/mock-llm-builder.test.d.ts.map +1 -0
- package/dist/lib/testing/mock-llm-builder.test.js +304 -0
- package/dist/lib/testing/mock-llm-builder.test.js.map +1 -0
- package/dist/lib/validation/api-schemas.d.ts +705 -0
- package/dist/lib/validation/api-schemas.d.ts.map +1 -0
- package/dist/lib/validation/api-schemas.js +351 -0
- package/dist/lib/validation/api-schemas.js.map +1 -0
- package/dist/lib/validation/api-schemas.test.d.ts +5 -0
- package/dist/lib/validation/api-schemas.test.d.ts.map +1 -0
- package/dist/lib/validation/api-schemas.test.js +427 -0
- package/dist/lib/validation/api-schemas.test.js.map +1 -0
- package/dist/lib/validation/dashboard-schemas.d.ts +203 -0
- package/dist/lib/validation/dashboard-schemas.d.ts.map +1 -0
- package/dist/lib/validation/dashboard-schemas.js +186 -0
- package/dist/lib/validation/dashboard-schemas.js.map +1 -0
- package/dist/lib/validation/dashboard-schemas.test.d.ts +5 -0
- package/dist/lib/validation/dashboard-schemas.test.d.ts.map +1 -0
- package/dist/lib/validation/dashboard-schemas.test.js +353 -0
- package/dist/lib/validation/dashboard-schemas.test.js.map +1 -0
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +158 -144
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +102 -95
- package/dist/server.test.js.map +1 -1
- package/dist/test-helpers/assertions.d.ts +6 -0
- package/dist/test-helpers/assertions.d.ts.map +1 -0
- package/dist/test-helpers/assertions.js +11 -0
- package/dist/test-helpers/assertions.js.map +1 -0
- package/dist/test-helpers/env-utils.d.ts +0 -64
- package/dist/test-helpers/env-utils.d.ts.map +1 -1
- package/dist/test-helpers/env-utils.js +0 -100
- package/dist/test-helpers/env-utils.js.map +1 -1
- package/dist/test-helpers/fuzz-generators.d.ts.map +1 -1
- package/dist/test-helpers/fuzz-generators.js +62 -22
- package/dist/test-helpers/fuzz-generators.js.map +1 -1
- package/dist/test-helpers/index.d.ts +3 -2
- package/dist/test-helpers/index.d.ts.map +1 -1
- package/dist/test-helpers/index.js +4 -2
- package/dist/test-helpers/index.js.map +1 -1
- package/dist/test-helpers/memfs-utils.test.js +81 -76
- package/dist/test-helpers/memfs-utils.test.js.map +1 -1
- package/dist/test-helpers/mock-backends.d.ts +19 -17
- package/dist/test-helpers/mock-backends.d.ts.map +1 -1
- package/dist/test-helpers/mock-backends.js +16 -4
- package/dist/test-helpers/mock-backends.js.map +1 -1
- package/dist/test-helpers/mock-backends.test.js +43 -112
- package/dist/test-helpers/mock-backends.test.js.map +1 -1
- package/dist/test-helpers/race-condition-helpers.d.ts.map +1 -1
- package/dist/test-helpers/race-condition-helpers.js +3 -2
- package/dist/test-helpers/race-condition-helpers.js.map +1 -1
- package/dist/test-helpers/schema-validators.d.ts +2 -2
- package/dist/test-helpers/schema-validators.d.ts.map +1 -1
- package/dist/test-helpers/schema-validators.js +35 -31
- package/dist/test-helpers/schema-validators.js.map +1 -1
- package/dist/test-helpers/test-constants.d.ts +74 -0
- package/dist/test-helpers/test-constants.d.ts.map +1 -0
- package/dist/test-helpers/test-constants.js +78 -0
- package/dist/test-helpers/test-constants.js.map +1 -0
- package/dist/test-helpers/test-data-builders.d.ts +25 -7
- package/dist/test-helpers/test-data-builders.d.ts.map +1 -1
- package/dist/test-helpers/test-data-builders.js +32 -9
- package/dist/test-helpers/test-data-builders.js.map +1 -1
- package/dist/test-helpers/test-data-builders.test.js +116 -107
- package/dist/test-helpers/test-data-builders.test.js.map +1 -1
- package/dist/test-helpers/tool-validators.d.ts +1 -1
- package/dist/test-helpers/tool-validators.d.ts.map +1 -1
- package/dist/test-helpers/tool-validators.js +10 -10
- package/dist/test-helpers/tool-validators.js.map +1 -1
- package/dist/tools/audit-trail.d.ts +170 -0
- package/dist/tools/audit-trail.d.ts.map +1 -0
- package/dist/tools/audit-trail.js +109 -0
- package/dist/tools/audit-trail.js.map +1 -0
- package/dist/tools/audit-trail.test.d.ts +5 -0
- package/dist/tools/audit-trail.test.d.ts.map +1 -0
- package/dist/tools/audit-trail.test.js +122 -0
- package/dist/tools/audit-trail.test.js.map +1 -0
- package/dist/tools/context-stats.d.ts +6 -20
- package/dist/tools/context-stats.d.ts.map +1 -1
- package/dist/tools/context-stats.js +106 -88
- package/dist/tools/context-stats.js.map +1 -1
- package/dist/tools/context-stats.test.js +109 -60
- package/dist/tools/context-stats.test.js.map +1 -1
- package/dist/tools/detect-trace-anomalies.d.ts +123 -0
- package/dist/tools/detect-trace-anomalies.d.ts.map +1 -0
- package/dist/tools/detect-trace-anomalies.js +66 -0
- package/dist/tools/detect-trace-anomalies.js.map +1 -0
- package/dist/tools/estimate-cost.d.ts +77 -0
- package/dist/tools/estimate-cost.d.ts.map +1 -0
- package/dist/tools/estimate-cost.js +104 -0
- package/dist/tools/estimate-cost.js.map +1 -0
- package/dist/tools/estimate-cost.test.d.ts +5 -0
- package/dist/tools/estimate-cost.test.d.ts.map +1 -0
- package/dist/tools/estimate-cost.test.js +343 -0
- package/dist/tools/estimate-cost.test.js.map +1 -0
- package/dist/tools/export-base.d.ts +77 -0
- package/dist/tools/export-base.d.ts.map +1 -0
- package/dist/tools/export-base.js +150 -0
- package/dist/tools/export-base.js.map +1 -0
- package/dist/tools/export-base.test.d.ts +18 -0
- package/dist/tools/export-base.test.d.ts.map +1 -0
- package/dist/tools/export-base.test.js +220 -0
- package/dist/tools/export-base.test.js.map +1 -0
- package/dist/tools/export-confident.d.ts +94 -90
- package/dist/tools/export-confident.d.ts.map +1 -1
- package/dist/tools/export-confident.js +17 -115
- package/dist/tools/export-confident.js.map +1 -1
- package/dist/tools/export-confident.test.js +79 -75
- package/dist/tools/export-confident.test.js.map +1 -1
- package/dist/tools/export-datadog.d.ts +77 -116
- package/dist/tools/export-datadog.d.ts.map +1 -1
- package/dist/tools/export-datadog.js +38 -40
- package/dist/tools/export-datadog.js.map +1 -1
- package/dist/tools/export-datadog.test.js +122 -165
- package/dist/tools/export-datadog.test.js.map +1 -1
- package/dist/tools/export-jaeger.d.ts +100 -0
- package/dist/tools/export-jaeger.d.ts.map +1 -0
- package/dist/tools/export-jaeger.js +154 -0
- package/dist/tools/export-jaeger.js.map +1 -0
- package/dist/tools/export-jaeger.test.d.ts +2 -0
- package/dist/tools/export-jaeger.test.d.ts.map +1 -0
- package/dist/tools/export-jaeger.test.js +113 -0
- package/dist/tools/export-jaeger.test.js.map +1 -0
- package/dist/tools/export-langfuse.d.ts +78 -80
- package/dist/tools/export-langfuse.d.ts.map +1 -1
- package/dist/tools/export-langfuse.js +15 -113
- package/dist/tools/export-langfuse.js.map +1 -1
- package/dist/tools/export-langfuse.test.js +70 -81
- package/dist/tools/export-langfuse.test.js.map +1 -1
- package/dist/tools/export-phoenix.d.ts +115 -90
- package/dist/tools/export-phoenix.d.ts.map +1 -1
- package/dist/tools/export-phoenix.js +29 -117
- package/dist/tools/export-phoenix.js.map +1 -1
- package/dist/tools/export-phoenix.test.js +95 -94
- package/dist/tools/export-phoenix.test.js.map +1 -1
- package/dist/tools/get-trace-url.d.ts +2 -10
- package/dist/tools/get-trace-url.d.ts.map +1 -1
- package/dist/tools/get-trace-url.js +5 -8
- package/dist/tools/get-trace-url.js.map +1 -1
- package/dist/tools/get-trace-url.test.js +81 -399
- package/dist/tools/get-trace-url.test.js.map +1 -1
- package/dist/tools/hallucination-detection.d.ts +203 -0
- package/dist/tools/hallucination-detection.d.ts.map +1 -0
- package/dist/tools/hallucination-detection.js +189 -0
- package/dist/tools/hallucination-detection.js.map +1 -0
- package/dist/tools/hallucination-detection.test.d.ts +5 -0
- package/dist/tools/hallucination-detection.test.d.ts.map +1 -0
- package/dist/tools/hallucination-detection.test.js +529 -0
- package/dist/tools/hallucination-detection.test.js.map +1 -0
- package/dist/tools/health-check.d.ts +9 -16
- package/dist/tools/health-check.d.ts.map +1 -1
- package/dist/tools/health-check.js +88 -101
- package/dist/tools/health-check.js.map +1 -1
- package/dist/tools/health-check.test.js +72 -165
- package/dist/tools/health-check.test.js.map +1 -1
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +13 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ingest-constants.d.ts +8 -0
- package/dist/tools/ingest-constants.d.ts.map +1 -0
- package/dist/tools/ingest-constants.js +8 -0
- package/dist/tools/ingest-constants.js.map +1 -0
- package/dist/tools/ingest-spans.d.ts +45 -0
- package/dist/tools/ingest-spans.d.ts.map +1 -0
- package/dist/tools/ingest-spans.js +129 -0
- package/dist/tools/ingest-spans.js.map +1 -0
- package/dist/tools/ingest-spans.test.d.ts +5 -0
- package/dist/tools/ingest-spans.test.d.ts.map +1 -0
- package/dist/tools/ingest-spans.test.js +250 -0
- package/dist/tools/ingest-spans.test.js.map +1 -0
- package/dist/tools/ingest-traces.d.ts +76 -0
- package/dist/tools/ingest-traces.d.ts.map +1 -0
- package/dist/tools/ingest-traces.js +164 -0
- package/dist/tools/ingest-traces.js.map +1 -0
- package/dist/tools/ingest-traces.test.d.ts +5 -0
- package/dist/tools/ingest-traces.test.d.ts.map +1 -0
- package/dist/tools/ingest-traces.test.js +483 -0
- package/dist/tools/ingest-traces.test.js.map +1 -0
- package/dist/tools/inject-evaluations.d.ts +136 -1197
- package/dist/tools/inject-evaluations.d.ts.map +1 -1
- package/dist/tools/inject-evaluations.js +65 -53
- package/dist/tools/inject-evaluations.js.map +1 -1
- package/dist/tools/inject-evaluations.test.js +83 -71
- package/dist/tools/inject-evaluations.test.js.map +1 -1
- package/dist/tools/manage-datasets.d.ts +850 -0
- package/dist/tools/manage-datasets.d.ts.map +1 -0
- package/dist/tools/manage-datasets.js +139 -0
- package/dist/tools/manage-datasets.js.map +1 -0
- package/dist/tools/manage-datasets.test.d.ts +5 -0
- package/dist/tools/manage-datasets.test.d.ts.map +1 -0
- package/dist/tools/manage-datasets.test.js +430 -0
- package/dist/tools/manage-datasets.test.js.map +1 -0
- package/dist/tools/multi-agent-coordination.d.ts +178 -0
- package/dist/tools/multi-agent-coordination.d.ts.map +1 -0
- package/dist/tools/multi-agent-coordination.js +270 -0
- package/dist/tools/multi-agent-coordination.js.map +1 -0
- package/dist/tools/multi-agent-coordination.test.d.ts +5 -0
- package/dist/tools/multi-agent-coordination.test.d.ts.map +1 -0
- package/dist/tools/multi-agent-coordination.test.js +530 -0
- package/dist/tools/multi-agent-coordination.test.js.map +1 -0
- package/dist/tools/query-evaluations.d.ts +147 -105
- package/dist/tools/query-evaluations.d.ts.map +1 -1
- package/dist/tools/query-evaluations.js +205 -178
- package/dist/tools/query-evaluations.js.map +1 -1
- package/dist/tools/query-evaluations.test.js +386 -391
- package/dist/tools/query-evaluations.test.js.map +1 -1
- package/dist/tools/query-llm-events.d.ts +100 -75
- package/dist/tools/query-llm-events.d.ts.map +1 -1
- package/dist/tools/query-llm-events.js +106 -80
- package/dist/tools/query-llm-events.js.map +1 -1
- package/dist/tools/query-llm-events.test.js +183 -346
- package/dist/tools/query-llm-events.test.js.map +1 -1
- package/dist/tools/query-logs.d.ts +45 -58
- package/dist/tools/query-logs.d.ts.map +1 -1
- package/dist/tools/query-logs.js +54 -101
- package/dist/tools/query-logs.js.map +1 -1
- package/dist/tools/query-logs.test.js +118 -314
- package/dist/tools/query-logs.test.js.map +1 -1
- package/dist/tools/query-metric-histograms.d.ts +112 -0
- package/dist/tools/query-metric-histograms.d.ts.map +1 -0
- package/dist/tools/query-metric-histograms.js +69 -0
- package/dist/tools/query-metric-histograms.js.map +1 -0
- package/dist/tools/query-metric-histograms.test.d.ts +5 -0
- package/dist/tools/query-metric-histograms.test.d.ts.map +1 -0
- package/dist/tools/query-metric-histograms.test.js +209 -0
- package/dist/tools/query-metric-histograms.test.js.map +1 -0
- package/dist/tools/query-metrics.d.ts +159 -60
- package/dist/tools/query-metrics.d.ts.map +1 -1
- package/dist/tools/query-metrics.js +133 -111
- package/dist/tools/query-metrics.js.map +1 -1
- package/dist/tools/query-metrics.test.js +314 -389
- package/dist/tools/query-metrics.test.js.map +1 -1
- package/dist/tools/query-regressions.d.ts +76 -0
- package/dist/tools/query-regressions.d.ts.map +1 -0
- package/dist/tools/query-regressions.js +122 -0
- package/dist/tools/query-regressions.js.map +1 -0
- package/dist/tools/query-regressions.test.d.ts +8 -0
- package/dist/tools/query-regressions.test.d.ts.map +1 -0
- package/dist/tools/query-regressions.test.js +129 -0
- package/dist/tools/query-regressions.test.js.map +1 -0
- package/dist/tools/query-traces.d.ts +103 -71
- package/dist/tools/query-traces.d.ts.map +1 -1
- package/dist/tools/query-traces.js +75 -106
- package/dist/tools/query-traces.js.map +1 -1
- package/dist/tools/query-traces.test.js +140 -846
- package/dist/tools/query-traces.test.js.map +1 -1
- package/dist/tools/query-verifications.d.ts +55 -43
- package/dist/tools/query-verifications.d.ts.map +1 -1
- package/dist/tools/query-verifications.js +47 -46
- package/dist/tools/query-verifications.js.map +1 -1
- package/dist/tools/query-verifications.test.js +42 -35
- package/dist/tools/query-verifications.test.js.map +1 -1
- package/dist/tools/routing-telemetry.d.ts +168 -0
- package/dist/tools/routing-telemetry.d.ts.map +1 -0
- package/dist/tools/routing-telemetry.js +267 -0
- package/dist/tools/routing-telemetry.js.map +1 -0
- package/dist/tools/routing-telemetry.test.d.ts +5 -0
- package/dist/tools/routing-telemetry.test.d.ts.map +1 -0
- package/dist/tools/routing-telemetry.test.js +747 -0
- package/dist/tools/routing-telemetry.test.js.map +1 -0
- package/dist/tools/setup-claudeignore.d.ts +4 -32
- package/dist/tools/setup-claudeignore.d.ts.map +1 -1
- package/dist/tools/setup-claudeignore.js +18 -22
- package/dist/tools/setup-claudeignore.js.map +1 -1
- package/dist/tools/setup-claudeignore.test.js +50 -49
- package/dist/tools/setup-claudeignore.test.js.map +1 -1
- package/dist/tools/token-budget.d.ts +170 -0
- package/dist/tools/token-budget.d.ts.map +1 -0
- package/dist/tools/token-budget.js +219 -0
- package/dist/tools/token-budget.js.map +1 -0
- package/dist/tools/token-budget.test.d.ts +5 -0
- package/dist/tools/token-budget.test.d.ts.map +1 -0
- package/dist/tools/token-budget.test.js +293 -0
- package/dist/tools/token-budget.test.js.map +1 -0
- package/package.json +72 -10
- package/dist/backends/local-jsonl.test.d.ts +0 -2
- package/dist/backends/local-jsonl.test.d.ts.map +0 -1
- package/dist/backends/local-jsonl.test.js +0 -4651
- package/dist/backends/local-jsonl.test.js.map +0 -1
- package/dist/backends/signoz-api-circuit-breaker.test.d.ts +0 -6
- package/dist/backends/signoz-api-circuit-breaker.test.d.ts.map +0 -1
- package/dist/backends/signoz-api-circuit-breaker.test.js +0 -548
- package/dist/backends/signoz-api-circuit-breaker.test.js.map +0 -1
- package/dist/backends/signoz-api-rate-limiter.test.d.ts +0 -6
- package/dist/backends/signoz-api-rate-limiter.test.d.ts.map +0 -1
- package/dist/backends/signoz-api-rate-limiter.test.js +0 -390
- package/dist/backends/signoz-api-rate-limiter.test.js.map +0 -1
- package/dist/backends/signoz-api-ssrf.test.d.ts +0 -6
- package/dist/backends/signoz-api-ssrf.test.d.ts.map +0 -1
- package/dist/backends/signoz-api-ssrf.test.js +0 -216
- package/dist/backends/signoz-api-ssrf.test.js.map +0 -1
- package/dist/backends/signoz-api-test-helpers.d.ts +0 -80
- package/dist/backends/signoz-api-test-helpers.d.ts.map +0 -1
- package/dist/backends/signoz-api-test-helpers.js +0 -79
- package/dist/backends/signoz-api-test-helpers.js.map +0 -1
- package/dist/backends/signoz-api.d.ts +0 -109
- package/dist/backends/signoz-api.d.ts.map +0 -1
- package/dist/backends/signoz-api.integration.test.d.ts +0 -8
- package/dist/backends/signoz-api.integration.test.d.ts.map +0 -1
- package/dist/backends/signoz-api.integration.test.js +0 -137
- package/dist/backends/signoz-api.integration.test.js.map +0 -1
- package/dist/backends/signoz-api.js +0 -1132
- package/dist/backends/signoz-api.js.map +0 -1
- package/dist/backends/signoz-api.test.d.ts +0 -11
- package/dist/backends/signoz-api.test.d.ts.map +0 -1
- package/dist/backends/signoz-api.test.js +0 -832
- package/dist/backends/signoz-api.test.js.map +0 -1
- package/dist/lib/agent-as-judge.d.ts +0 -388
- package/dist/lib/agent-as-judge.d.ts.map +0 -1
- package/dist/lib/agent-as-judge.js +0 -740
- package/dist/lib/agent-as-judge.js.map +0 -1
- package/dist/lib/agent-as-judge.test.d.ts.map +0 -1
- package/dist/lib/agent-as-judge.test.js +0 -816
- package/dist/lib/agent-as-judge.test.js.map +0 -1
- package/dist/lib/cache.d.ts +0 -90
- package/dist/lib/cache.d.ts.map +0 -1
- package/dist/lib/cache.js +0 -133
- package/dist/lib/cache.js.map +0 -1
- package/dist/lib/cache.test.d.ts.map +0 -1
- package/dist/lib/cache.test.js +0 -105
- package/dist/lib/cache.test.js.map +0 -1
- package/dist/lib/circuit-breaker.d.ts +0 -101
- package/dist/lib/circuit-breaker.d.ts.map +0 -1
- package/dist/lib/circuit-breaker.js +0 -158
- package/dist/lib/circuit-breaker.js.map +0 -1
- package/dist/lib/circuit-breaker.test.d.ts.map +0 -1
- package/dist/lib/circuit-breaker.test.js +0 -263
- package/dist/lib/circuit-breaker.test.js.map +0 -1
- package/dist/lib/confident-export.d.ts +0 -101
- package/dist/lib/confident-export.d.ts.map +0 -1
- package/dist/lib/confident-export.js +0 -393
- package/dist/lib/confident-export.js.map +0 -1
- package/dist/lib/confident-export.test.d.ts.map +0 -1
- package/dist/lib/confident-export.test.js +0 -835
- package/dist/lib/confident-export.test.js.map +0 -1
- package/dist/lib/constants-symlink.test.d.ts.map +0 -1
- package/dist/lib/constants-symlink.test.js +0 -357
- package/dist/lib/constants-symlink.test.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -183
- package/dist/lib/constants.d.ts.map +0 -1
- package/dist/lib/constants.js +0 -453
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/constants.test.d.ts.map +0 -1
- package/dist/lib/constants.test.js +0 -717
- package/dist/lib/constants.test.js.map +0 -1
- package/dist/lib/datadog-export.d.ts +0 -156
- package/dist/lib/datadog-export.d.ts.map +0 -1
- package/dist/lib/datadog-export.js +0 -464
- package/dist/lib/datadog-export.js.map +0 -1
- package/dist/lib/datadog-export.test.d.ts +0 -14
- package/dist/lib/datadog-export.test.d.ts.map +0 -1
- package/dist/lib/datadog-export.test.js +0 -890
- package/dist/lib/datadog-export.test.js.map +0 -1
- package/dist/lib/edge-cases.test.d.ts.map +0 -1
- package/dist/lib/edge-cases.test.js +0 -634
- package/dist/lib/edge-cases.test.js.map +0 -1
- package/dist/lib/error-sanitizer.d.ts +0 -57
- package/dist/lib/error-sanitizer.d.ts.map +0 -1
- package/dist/lib/error-sanitizer.js +0 -233
- package/dist/lib/error-sanitizer.js.map +0 -1
- package/dist/lib/error-sanitizer.test.d.ts.map +0 -1
- package/dist/lib/error-sanitizer.test.js +0 -528
- package/dist/lib/error-sanitizer.test.js.map +0 -1
- package/dist/lib/error-types.d.ts +0 -54
- package/dist/lib/error-types.d.ts.map +0 -1
- package/dist/lib/error-types.js +0 -154
- package/dist/lib/error-types.js.map +0 -1
- package/dist/lib/error-types.test.d.ts.map +0 -1
- package/dist/lib/error-types.test.js +0 -196
- package/dist/lib/error-types.test.js.map +0 -1
- package/dist/lib/evaluation-hooks.d.ts +0 -49
- package/dist/lib/evaluation-hooks.d.ts.map +0 -1
- package/dist/lib/evaluation-hooks.js +0 -488
- package/dist/lib/evaluation-hooks.js.map +0 -1
- package/dist/lib/evaluation-hooks.test.d.ts.map +0 -1
- package/dist/lib/evaluation-hooks.test.js +0 -624
- package/dist/lib/evaluation-hooks.test.js.map +0 -1
- package/dist/lib/export-utils.d.ts +0 -99
- package/dist/lib/export-utils.d.ts.map +0 -1
- package/dist/lib/export-utils.js +0 -238
- package/dist/lib/export-utils.js.map +0 -1
- package/dist/lib/export-utils.test.d.ts.map +0 -1
- package/dist/lib/export-utils.test.js +0 -193
- package/dist/lib/export-utils.test.js.map +0 -1
- package/dist/lib/file-utils.d.ts +0 -320
- package/dist/lib/file-utils.d.ts.map +0 -1
- package/dist/lib/file-utils.js +0 -816
- package/dist/lib/file-utils.js.map +0 -1
- package/dist/lib/file-utils.test.d.ts.map +0 -1
- package/dist/lib/file-utils.test.js +0 -1333
- package/dist/lib/file-utils.test.js.map +0 -1
- package/dist/lib/histogram.d.ts +0 -119
- package/dist/lib/histogram.d.ts.map +0 -1
- package/dist/lib/histogram.js +0 -202
- package/dist/lib/histogram.js.map +0 -1
- package/dist/lib/histogram.test.d.ts.map +0 -1
- package/dist/lib/histogram.test.js +0 -381
- package/dist/lib/histogram.test.js.map +0 -1
- package/dist/lib/indexer.d.ts +0 -96
- package/dist/lib/indexer.d.ts.map +0 -1
- package/dist/lib/indexer.js +0 -353
- package/dist/lib/indexer.js.map +0 -1
- package/dist/lib/indexer.test.d.ts.map +0 -1
- package/dist/lib/indexer.test.js +0 -696
- package/dist/lib/indexer.test.js.map +0 -1
- package/dist/lib/input-validator.d.ts +0 -115
- package/dist/lib/input-validator.d.ts.map +0 -1
- package/dist/lib/input-validator.fuzz.test.d.ts.map +0 -1
- package/dist/lib/input-validator.fuzz.test.js +0 -290
- package/dist/lib/input-validator.fuzz.test.js.map +0 -1
- package/dist/lib/input-validator.js +0 -304
- package/dist/lib/input-validator.js.map +0 -1
- package/dist/lib/input-validator.test.d.ts.map +0 -1
- package/dist/lib/input-validator.test.js +0 -415
- package/dist/lib/input-validator.test.js.map +0 -1
- package/dist/lib/instrumentation.d.ts +0 -153
- package/dist/lib/instrumentation.d.ts.map +0 -1
- package/dist/lib/instrumentation.integration.test.d.ts.map +0 -1
- package/dist/lib/instrumentation.integration.test.js +0 -589
- package/dist/lib/instrumentation.integration.test.js.map +0 -1
- package/dist/lib/instrumentation.js +0 -520
- package/dist/lib/instrumentation.js.map +0 -1
- package/dist/lib/instrumentation.test.d.ts.map +0 -1
- package/dist/lib/instrumentation.test.js +0 -821
- package/dist/lib/instrumentation.test.js.map +0 -1
- package/dist/lib/langfuse-export.d.ts +0 -125
- package/dist/lib/langfuse-export.d.ts.map +0 -1
- package/dist/lib/langfuse-export.js +0 -367
- package/dist/lib/langfuse-export.js.map +0 -1
- package/dist/lib/langfuse-export.test.d.ts.map +0 -1
- package/dist/lib/langfuse-export.test.js +0 -1007
- package/dist/lib/langfuse-export.test.js.map +0 -1
- package/dist/lib/llm-as-judge.d.ts +0 -657
- package/dist/lib/llm-as-judge.d.ts.map +0 -1
- package/dist/lib/llm-as-judge.js +0 -1397
- package/dist/lib/llm-as-judge.js.map +0 -1
- package/dist/lib/llm-as-judge.test.d.ts.map +0 -1
- package/dist/lib/llm-as-judge.test.js +0 -2409
- package/dist/lib/llm-as-judge.test.js.map +0 -1
- package/dist/lib/logger.d.ts +0 -46
- package/dist/lib/logger.d.ts.map +0 -1
- package/dist/lib/logger.js +0 -81
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/logger.test.d.ts.map +0 -1
- package/dist/lib/logger.test.js.map +0 -1
- package/dist/lib/metrics.d.ts +0 -62
- package/dist/lib/metrics.d.ts.map +0 -1
- package/dist/lib/metrics.js +0 -166
- package/dist/lib/metrics.js.map +0 -1
- package/dist/lib/metrics.test.d.ts.map +0 -1
- package/dist/lib/metrics.test.js +0 -189
- package/dist/lib/metrics.test.js.map +0 -1
- package/dist/lib/otlp-export.d.ts +0 -178
- package/dist/lib/otlp-export.d.ts.map +0 -1
- package/dist/lib/otlp-export.js +0 -382
- package/dist/lib/otlp-export.js.map +0 -1
- package/dist/lib/parse-stats.d.ts.map +0 -1
- package/dist/lib/parse-stats.js +0 -206
- package/dist/lib/parse-stats.js.map +0 -1
- package/dist/lib/parse-stats.test.d.ts.map +0 -1
- package/dist/lib/parse-stats.test.js +0 -283
- package/dist/lib/parse-stats.test.js.map +0 -1
- package/dist/lib/phoenix-export.d.ts +0 -109
- package/dist/lib/phoenix-export.d.ts.map +0 -1
- package/dist/lib/phoenix-export.js +0 -429
- package/dist/lib/phoenix-export.js.map +0 -1
- package/dist/lib/phoenix-export.test.d.ts.map +0 -1
- package/dist/lib/phoenix-export.test.js +0 -725
- package/dist/lib/phoenix-export.test.js.map +0 -1
- package/dist/lib/query-sanitizer.d.ts.map +0 -1
- package/dist/lib/query-sanitizer.js +0 -261
- package/dist/lib/query-sanitizer.js.map +0 -1
- package/dist/lib/query-sanitizer.test.d.ts.map +0 -1
- package/dist/lib/query-sanitizer.test.js +0 -400
- package/dist/lib/query-sanitizer.test.js.map +0 -1
- package/dist/lib/server-utils.d.ts +0 -93
- package/dist/lib/server-utils.d.ts.map +0 -1
- package/dist/lib/server-utils.js +0 -181
- package/dist/lib/server-utils.js.map +0 -1
- package/dist/lib/shared-schemas.d.ts +0 -87
- package/dist/lib/shared-schemas.d.ts.map +0 -1
- package/dist/lib/shared-schemas.js +0 -87
- package/dist/lib/shared-schemas.js.map +0 -1
- package/dist/lib/shared-schemas.test.d.ts.map +0 -1
- package/dist/lib/shared-schemas.test.js +0 -106
- package/dist/lib/shared-schemas.test.js.map +0 -1
- package/dist/lib/toon-encoder.d.ts +0 -26
- package/dist/lib/toon-encoder.d.ts.map +0 -1
- package/dist/lib/toon-encoder.js +0 -61
- package/dist/lib/toon-encoder.js.map +0 -1
- package/dist/lib/toon-encoder.test.d.ts.map +0 -1
- package/dist/lib/toon-encoder.test.js +0 -85
- package/dist/lib/toon-encoder.test.js.map +0 -1
- package/dist/lib/verification-events.d.ts +0 -100
- package/dist/lib/verification-events.d.ts.map +0 -1
- package/dist/lib/verification-events.js +0 -162
- package/dist/lib/verification-events.js.map +0 -1
- package/dist/lib/verification-events.test.d.ts.map +0 -1
- package/dist/lib/verification-events.test.js +0 -193
- package/dist/lib/verification-events.test.js.map +0 -1
- package/dist/tools/signoz.integration.test.d.ts +0 -8
- package/dist/tools/signoz.integration.test.d.ts.map +0 -1
- package/dist/tools/signoz.integration.test.js +0 -141
- package/dist/tools/signoz.integration.test.js.map +0 -1
- package/dist/types/evaluation-hooks.d.ts +0 -176
- package/dist/types/evaluation-hooks.d.ts.map +0 -1
- package/dist/types/evaluation-hooks.js +0 -49
- package/dist/types/evaluation-hooks.js.map +0 -1
- /package/dist/lib/{agent-as-judge.test.d.ts → agent-judge/agent-as-judge.test.d.ts} +0 -0
- /package/dist/lib/{verification-events.test.d.ts → audit/verification-events.test.d.ts} +0 -0
- /package/dist/lib/{constants-symlink.test.d.ts → core/constants-symlink.test.d.ts} +0 -0
- /package/dist/lib/{constants.test.d.ts → core/constants.test.d.ts} +0 -0
- /package/dist/lib/{edge-cases.test.d.ts → core/edge-cases.test.d.ts} +0 -0
- /package/dist/lib/{file-utils.test.d.ts → core/file-utils.test.d.ts} +0 -0
- /package/dist/lib/{input-validator.fuzz.test.d.ts → core/input-validator.fuzz.test.d.ts} +0 -0
- /package/dist/lib/{input-validator.test.d.ts → core/input-validator.test.d.ts} +0 -0
- /package/dist/lib/{logger.test.d.ts → core/logger.test.d.ts} +0 -0
- /package/dist/lib/{logger.test.js → core/logger.test.js} +0 -0
- /package/dist/lib/{shared-schemas.test.d.ts → core/shared-schemas.test.d.ts} +0 -0
- /package/dist/lib/{error-sanitizer.test.d.ts → errors/error-sanitizer.test.d.ts} +0 -0
- /package/dist/lib/{error-types.test.d.ts → errors/error-types.test.d.ts} +0 -0
- /package/dist/lib/{query-sanitizer.d.ts → errors/query-sanitizer.d.ts} +0 -0
- /package/dist/lib/{query-sanitizer.test.d.ts → errors/query-sanitizer.test.d.ts} +0 -0
- /package/dist/lib/{confident-export.test.d.ts → exports/confident-export.test.d.ts} +0 -0
- /package/dist/lib/{export-utils.test.d.ts → exports/export-utils.test.d.ts} +0 -0
- /package/dist/lib/{langfuse-export.test.d.ts → exports/langfuse-export.test.d.ts} +0 -0
- /package/dist/lib/{phoenix-export.test.d.ts → exports/phoenix-export.test.d.ts} +0 -0
- /package/dist/lib/{evaluation-hooks.test.d.ts → judge/evaluation-hooks.test.d.ts} +0 -0
- /package/dist/lib/{llm-as-judge.test.d.ts → judge/llm-as-judge.test.d.ts} +0 -0
- /package/dist/lib/{histogram.test.d.ts → observability/histogram.test.d.ts} +0 -0
- /package/dist/lib/{indexer.test.d.ts → observability/indexer.test.d.ts} +0 -0
- /package/dist/lib/{instrumentation.integration.test.d.ts → observability/instrumentation.integration.test.d.ts} +0 -0
- /package/dist/lib/{instrumentation.test.d.ts → observability/instrumentation.test.d.ts} +0 -0
- /package/dist/lib/{metrics.test.d.ts → observability/metrics.test.d.ts} +0 -0
- /package/dist/lib/{parse-stats.d.ts → observability/parse-stats.d.ts} +0 -0
- /package/dist/lib/{parse-stats.test.d.ts → observability/parse-stats.test.d.ts} +0 -0
- /package/dist/lib/{cache.test.d.ts → resilience/cache.test.d.ts} +0 -0
- /package/dist/lib/{circuit-breaker.test.d.ts → resilience/circuit-breaker.test.d.ts} +0 -0
- /package/dist/lib/{toon-encoder.test.d.ts → resilience/toon-encoder.test.d.ts} +0 -0
|
@@ -0,0 +1,890 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities for observability-toolkit
|
|
3
|
+
*/
|
|
4
|
+
import { DDSketch } from '@datadog/sketches-js';
|
|
5
|
+
import { BYTES, MONTHS_PER_YEAR, MAX_DAY_OF_MONTH, MIN_VALID_YEAR, MAX_VALID_YEAR, ONE_MILLION, PERCENTILE, TIME_MS } from './units.js';
|
|
6
|
+
import { MAX_RESULTS_IN_MEMORY, STREAMING_THRESHOLD, RETENTION_DAYS_DEFAULT, } from './constants.js';
|
|
7
|
+
import { existsSync, readFileSync, readdirSync, statSync, createReadStream, realpathSync, unlinkSync, writeFileSync, appendFileSync, mkdirSync } from 'fs';
|
|
8
|
+
import { join, basename, resolve, normalize, dirname } from 'path';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
import { createInterface } from 'readline';
|
|
11
|
+
import { createGunzip, gzipSync, gunzipSync } from 'zlib';
|
|
12
|
+
import { createLogger } from './logger.js';
|
|
13
|
+
const securityLog = createLogger('security');
|
|
14
|
+
const memoryLog = createLogger('memory');
|
|
15
|
+
const BATCH_SIZE = Math.sqrt(MAX_RESULTS_IN_MEMORY);
|
|
16
|
+
const MAX_RESULTS_SIZE_MB = STREAMING_THRESHOLD / BATCH_SIZE;
|
|
17
|
+
const MAX_RESULTS_BYTE_SIZE = MAX_RESULTS_SIZE_MB * BYTES.MB;
|
|
18
|
+
const MAX_GZIP_FILE_SIZE_BYTES = MAX_RESULTS_SIZE_MB * ONE_MILLION;
|
|
19
|
+
const BINARY_SEARCH_DIVISOR = 2;
|
|
20
|
+
const BINARY_SEARCH_DELTA = 1;
|
|
21
|
+
/**
|
|
22
|
+
* Expand tilde (~) to home directory
|
|
23
|
+
* Handles ~/path and ~user/path (falls back to ~ for named users)
|
|
24
|
+
*/
|
|
25
|
+
export function expandTilde(filepath) {
|
|
26
|
+
if (!filepath.startsWith('~'))
|
|
27
|
+
return filepath;
|
|
28
|
+
if (filepath === '~' || filepath.startsWith('~/')) {
|
|
29
|
+
return join(homedir(), filepath.slice(1));
|
|
30
|
+
}
|
|
31
|
+
// ~user/path - not supported, return as-is
|
|
32
|
+
return filepath;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Load and parse JSON file with fallback
|
|
36
|
+
*/
|
|
37
|
+
export function loadJson(filePath, fallback) {
|
|
38
|
+
try {
|
|
39
|
+
if (existsSync(filePath)) {
|
|
40
|
+
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Ignore parse/read errors
|
|
45
|
+
}
|
|
46
|
+
return fallback ?? null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Load JSON file, returning fallback on error (never null)
|
|
50
|
+
*/
|
|
51
|
+
export function loadJsonSafe(filePath, fallback) {
|
|
52
|
+
return loadJson(filePath, fallback) ?? fallback;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Load and validate JSON file against a Zod schema.
|
|
56
|
+
* Throws if validation fails or file does not exist.
|
|
57
|
+
*
|
|
58
|
+
* @param filePath - Path to JSON file
|
|
59
|
+
* @param schema - Zod schema to validate against
|
|
60
|
+
* @throws {Error} If validation fails
|
|
61
|
+
*/
|
|
62
|
+
export function loadJsonWithValidation(filePath, schema) {
|
|
63
|
+
try {
|
|
64
|
+
if (!existsSync(filePath)) {
|
|
65
|
+
throw new Error(`File not found: ${filePath}`);
|
|
66
|
+
}
|
|
67
|
+
const parsed = JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
68
|
+
const result = schema.safeParse(parsed);
|
|
69
|
+
if (!result.success) {
|
|
70
|
+
throw new Error(`Validation failed: ${result.error.message}`);
|
|
71
|
+
}
|
|
72
|
+
return result.data;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
76
|
+
throw new Error(`Failed to load and validate JSON from ${filePath}: ${message}`, { cause: error });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Load and validate JSON file, returning fallback on error.
|
|
81
|
+
* Unlike loadJsonWithValidation, this does not throw.
|
|
82
|
+
*
|
|
83
|
+
* @param filePath - Path to JSON file
|
|
84
|
+
* @param schema - Zod schema to validate against
|
|
85
|
+
* @param fallback - Default value if file not found or validation fails
|
|
86
|
+
*/
|
|
87
|
+
export function loadJsonWithValidationSafe(filePath, schema, fallback) {
|
|
88
|
+
try {
|
|
89
|
+
return loadJsonWithValidation(filePath, schema);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return fallback;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get date string in YYYY-MM-DD format
|
|
97
|
+
*/
|
|
98
|
+
export function getDateString(date = new Date()) {
|
|
99
|
+
return date.toISOString().split('T')[0];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Validate that a path is within allowed base directories
|
|
103
|
+
* Prevents path traversal attacks by resolving symlinks and checking containment
|
|
104
|
+
*
|
|
105
|
+
* Security measures:
|
|
106
|
+
* - Uses realpathSync() to resolve symlinks (prevents symlink attacks)
|
|
107
|
+
* - Requires non-empty allowedBasePaths
|
|
108
|
+
* - Uses platform-specific path separator
|
|
109
|
+
* - Logs security failures for audit trail
|
|
110
|
+
*/
|
|
111
|
+
export function isPathWithinAllowed(targetPath, allowedBasePaths) {
|
|
112
|
+
// Require explicit allowed paths - fail closed
|
|
113
|
+
if (!allowedBasePaths || allowedBasePaths.length === 0) {
|
|
114
|
+
securityLog.error('isPathWithinAllowed called without allowedBasePaths');
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
// Resolve the target path, following symlinks if the path exists
|
|
119
|
+
let resolvedTarget;
|
|
120
|
+
if (existsSync(targetPath)) {
|
|
121
|
+
// Path exists - resolve symlinks to get the real path
|
|
122
|
+
resolvedTarget = realpathSync(targetPath);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Path doesn't exist - resolve parent directory and append filename
|
|
126
|
+
// This handles cases where we're checking a path before creating it
|
|
127
|
+
const parentDir = dirname(targetPath);
|
|
128
|
+
const filename = basename(targetPath);
|
|
129
|
+
if (existsSync(parentDir)) {
|
|
130
|
+
resolvedTarget = join(realpathSync(parentDir), filename);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Neither path nor parent exists - normalize without symlink resolution
|
|
134
|
+
// This is still safe as the path can't be accessed anyway
|
|
135
|
+
resolvedTarget = normalize(resolve(targetPath));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Use platform-specific separator for cross-platform compatibility
|
|
139
|
+
const sep = process.platform === 'win32' ? '\\' : '/';
|
|
140
|
+
for (const basePath of allowedBasePaths) {
|
|
141
|
+
// Resolve base path symlinks too (base paths should exist)
|
|
142
|
+
let resolvedBase;
|
|
143
|
+
try {
|
|
144
|
+
resolvedBase = existsSync(basePath) ? realpathSync(basePath) : normalize(resolve(basePath));
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Skip invalid base paths
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
// Check if target equals base or is within base directory
|
|
151
|
+
if (resolvedTarget === resolvedBase || resolvedTarget.startsWith(resolvedBase + sep)) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Log rejection for security audit (but not the full path to avoid log injection)
|
|
156
|
+
securityLog.warn('Path validation rejected: path not within allowed directories');
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
// Log security failures for audit trail
|
|
161
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
162
|
+
securityLog.error(`Path validation error: ${message}`);
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* List files in directory matching a pattern
|
|
168
|
+
* @param dir - Directory to list files from
|
|
169
|
+
* @param pattern - RegExp to filter filenames
|
|
170
|
+
* @param allowedBasePaths - Optional list of allowed base directories (for security validation)
|
|
171
|
+
*/
|
|
172
|
+
export function listFiles(dir, pattern, allowedBasePaths) {
|
|
173
|
+
if (!existsSync(dir))
|
|
174
|
+
return [];
|
|
175
|
+
// Security: validate directory is within allowed paths if specified
|
|
176
|
+
if (allowedBasePaths && allowedBasePaths.length > 0) {
|
|
177
|
+
if (!isPathWithinAllowed(dir, allowedBasePaths)) {
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
return readdirSync(dir)
|
|
183
|
+
.filter(f => pattern.test(f))
|
|
184
|
+
.map(f => join(dir, f))
|
|
185
|
+
.sort((a, b) => {
|
|
186
|
+
// Sort by modification time, newest first
|
|
187
|
+
try {
|
|
188
|
+
return statSync(b).mtime.getTime() - statSync(a).mtime.getTime();
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return 0;
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return [];
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Parse date from filename like traces-2026-01-28.jsonl
|
|
201
|
+
* Validates date components to prevent path traversal via malicious date strings.
|
|
202
|
+
* Returns null for invalid dates (month > 12, day > 31, unreasonable years).
|
|
203
|
+
*/
|
|
204
|
+
export function parseDateFromFilename(filename) {
|
|
205
|
+
const match = basename(filename).match(/(\d{4})-(\d{2})-(\d{2})/);
|
|
206
|
+
if (!match)
|
|
207
|
+
return null;
|
|
208
|
+
const [, year, month, day] = match;
|
|
209
|
+
const y = parseInt(year, 10);
|
|
210
|
+
const m = parseInt(month, 10);
|
|
211
|
+
const d = parseInt(day, 10);
|
|
212
|
+
// Validate date components
|
|
213
|
+
if (m < 1 || m > MONTHS_PER_YEAR)
|
|
214
|
+
return null;
|
|
215
|
+
if (d < 1 || d > MAX_DAY_OF_MONTH)
|
|
216
|
+
return null;
|
|
217
|
+
if (y < MIN_VALID_YEAR || y > MAX_VALID_YEAR)
|
|
218
|
+
return null; // Reasonable range for telemetry files
|
|
219
|
+
return `${year}-${month}-${day}`;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Read JSONL file and parse each line.
|
|
223
|
+
* Delegates to readJsonlSyncWithStats to avoid duplicating the parse loop (CS-D1).
|
|
224
|
+
*/
|
|
225
|
+
export function readJsonlSync(filePath, limit) {
|
|
226
|
+
return readJsonlSyncWithStats(filePath, limit).data;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Read JSONL file with Zod schema validation.
|
|
230
|
+
* Each line is validated against the schema; invalid lines are skipped silently.
|
|
231
|
+
*
|
|
232
|
+
* @param filePath - Path to JSONL file
|
|
233
|
+
* @param schema - Zod schema for validation
|
|
234
|
+
* @param limit - Maximum number of valid records to return
|
|
235
|
+
* @returns Array of validated records
|
|
236
|
+
*/
|
|
237
|
+
export function readJsonlWithValidation(filePath, schema, limit) {
|
|
238
|
+
const emptyResult = [];
|
|
239
|
+
if (!existsSync(filePath))
|
|
240
|
+
return emptyResult;
|
|
241
|
+
try {
|
|
242
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
243
|
+
const lines = content.trim().split('\n');
|
|
244
|
+
const results = [];
|
|
245
|
+
for (const line of lines) {
|
|
246
|
+
if (limit && results.length >= limit)
|
|
247
|
+
break;
|
|
248
|
+
if (!line.trim())
|
|
249
|
+
continue;
|
|
250
|
+
try {
|
|
251
|
+
const parsed = JSON.parse(line);
|
|
252
|
+
const validationResult = schema.safeParse(parsed);
|
|
253
|
+
if (validationResult.success) {
|
|
254
|
+
results.push(validationResult.data);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// Skip malformed lines
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return results;
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
return emptyResult;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Read JSONL file with verbose statistics about parse failures
|
|
269
|
+
* Use this for debugging to see how many lines were skipped
|
|
270
|
+
*/
|
|
271
|
+
export function readJsonlSyncWithStats(filePath, limit) {
|
|
272
|
+
const emptyResult = {
|
|
273
|
+
data: [],
|
|
274
|
+
stats: { totalLines: 0, parsedLines: 0, skippedLines: 0, emptyLines: 0 },
|
|
275
|
+
};
|
|
276
|
+
if (!existsSync(filePath))
|
|
277
|
+
return emptyResult;
|
|
278
|
+
try {
|
|
279
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
280
|
+
const lines = content.trim().split('\n');
|
|
281
|
+
const results = [];
|
|
282
|
+
let skippedLines = 0;
|
|
283
|
+
let emptyLines = 0;
|
|
284
|
+
for (const line of lines) {
|
|
285
|
+
if (limit && results.length >= limit)
|
|
286
|
+
break;
|
|
287
|
+
if (!line.trim()) {
|
|
288
|
+
emptyLines++;
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
results.push(JSON.parse(line));
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
skippedLines++;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
data: results,
|
|
300
|
+
stats: {
|
|
301
|
+
totalLines: lines.length,
|
|
302
|
+
parsedLines: results.length,
|
|
303
|
+
skippedLines,
|
|
304
|
+
emptyLines,
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return emptyResult;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Check if file is gzip compressed based on extension
|
|
314
|
+
*/
|
|
315
|
+
export function isGzipFile(filePath) {
|
|
316
|
+
return filePath.endsWith('.gz');
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Create a readable stream for JSONL files, handling gzip decompression transparently
|
|
320
|
+
*/
|
|
321
|
+
export function createJsonlStream(filePath) {
|
|
322
|
+
const fileStream = createReadStream(filePath);
|
|
323
|
+
if (isGzipFile(filePath)) {
|
|
324
|
+
return fileStream.pipe(createGunzip());
|
|
325
|
+
}
|
|
326
|
+
return fileStream;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Stream JSONL file line by line (for large files)
|
|
330
|
+
* Handles both plain .jsonl and gzip compressed .jsonl.gz files
|
|
331
|
+
*
|
|
332
|
+
* @param filePath - Path to JSONL file (plain or gzip compressed)
|
|
333
|
+
* @param options - Optional configuration including stats tracker
|
|
334
|
+
*/
|
|
335
|
+
export async function* streamJsonl(filePath, options) {
|
|
336
|
+
if (!existsSync(filePath))
|
|
337
|
+
return;
|
|
338
|
+
const stream = createJsonlStream(filePath);
|
|
339
|
+
const rl = createInterface({
|
|
340
|
+
input: stream,
|
|
341
|
+
crlfDelay: Infinity,
|
|
342
|
+
});
|
|
343
|
+
const tracker = options?.statsTracker;
|
|
344
|
+
for await (const line of rl) {
|
|
345
|
+
if (!line.trim()) {
|
|
346
|
+
tracker?.recordEmpty(filePath);
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
try {
|
|
350
|
+
yield JSON.parse(line);
|
|
351
|
+
tracker?.recordSuccess(filePath);
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
// Skip malformed lines
|
|
355
|
+
tracker?.recordFailure(filePath);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Stream JSONL file with Zod schema validation (for large files).
|
|
361
|
+
* Each line is validated against the schema; invalid lines are skipped.
|
|
362
|
+
* Handles both plain .jsonl and gzip compressed .jsonl.gz files.
|
|
363
|
+
*
|
|
364
|
+
* @param filePath - Path to JSONL file (plain or gzip compressed)
|
|
365
|
+
* @param schema - Zod schema for validation
|
|
366
|
+
* @param options - Optional configuration including stats tracker
|
|
367
|
+
*/
|
|
368
|
+
export async function* streamJsonlWithValidation(filePath, schema, options) {
|
|
369
|
+
if (!existsSync(filePath))
|
|
370
|
+
return;
|
|
371
|
+
const stream = createJsonlStream(filePath);
|
|
372
|
+
const rl = createInterface({
|
|
373
|
+
input: stream,
|
|
374
|
+
crlfDelay: Infinity,
|
|
375
|
+
});
|
|
376
|
+
const tracker = options?.statsTracker;
|
|
377
|
+
for await (const line of rl) {
|
|
378
|
+
if (!line.trim()) {
|
|
379
|
+
tracker?.recordEmpty(filePath);
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
try {
|
|
383
|
+
const parsed = JSON.parse(line);
|
|
384
|
+
const validationResult = schema.safeParse(parsed);
|
|
385
|
+
if (validationResult.success) {
|
|
386
|
+
yield validationResult.data;
|
|
387
|
+
tracker?.recordSuccess(filePath);
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
tracker?.recordFailure(filePath);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
tracker?.recordFailure(filePath);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Filter items by date range
|
|
400
|
+
*/
|
|
401
|
+
export function filterByDateRange(items, startDate, endDate) {
|
|
402
|
+
return items.filter(item => {
|
|
403
|
+
if (!item.timestamp)
|
|
404
|
+
return true;
|
|
405
|
+
const ts = item.timestamp;
|
|
406
|
+
if (startDate && ts < startDate)
|
|
407
|
+
return false;
|
|
408
|
+
if (endDate && ts > endDate)
|
|
409
|
+
return false;
|
|
410
|
+
return true;
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Paginate results array with offset and limit
|
|
415
|
+
*/
|
|
416
|
+
export function paginateResults(results, offset, limit) {
|
|
417
|
+
return results.slice(offset, offset + limit);
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Check if we've collected enough results for early termination
|
|
421
|
+
*/
|
|
422
|
+
export function hasReachedLimit(resultsLength, offset, limit) {
|
|
423
|
+
return resultsLength >= offset + limit;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Clean up old telemetry files based on retention policy
|
|
427
|
+
* @param dir - Directory containing telemetry files
|
|
428
|
+
* @param retentionDays - Number of days to retain files (default: 7)
|
|
429
|
+
* @param allowedBasePaths - Optional list of allowed base directories (for security validation)
|
|
430
|
+
* @returns Object with count of deleted files and any errors encountered
|
|
431
|
+
*/
|
|
432
|
+
export function cleanupOldFiles(dir, retentionDays = RETENTION_DAYS_DEFAULT, allowedBasePaths) {
|
|
433
|
+
const result = { deleted: 0, errors: [] };
|
|
434
|
+
if (!existsSync(dir)) {
|
|
435
|
+
return result;
|
|
436
|
+
}
|
|
437
|
+
// Security: validate directory is within allowed paths if specified
|
|
438
|
+
if (allowedBasePaths && allowedBasePaths.length > 0) {
|
|
439
|
+
if (!isPathWithinAllowed(dir, allowedBasePaths)) {
|
|
440
|
+
result.errors.push(`Directory ${dir} is not within allowed paths`);
|
|
441
|
+
return result;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// Calculate cutoff date
|
|
445
|
+
const now = new Date();
|
|
446
|
+
const cutoffDate = new Date(now.getTime() - retentionDays * TIME_MS.DAY);
|
|
447
|
+
const cutoffDateStr = getDateString(cutoffDate);
|
|
448
|
+
try {
|
|
449
|
+
// List all .jsonl and .jsonl.gz files
|
|
450
|
+
const files = readdirSync(dir).filter(f => f.endsWith('.jsonl') || f.endsWith('.jsonl.gz'));
|
|
451
|
+
for (const file of files) {
|
|
452
|
+
const filePath = join(dir, file);
|
|
453
|
+
const fileDate = parseDateFromFilename(file);
|
|
454
|
+
// Skip files without parseable dates (don't delete unknown files)
|
|
455
|
+
if (!fileDate) {
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
// Delete files older than retention period
|
|
459
|
+
if (fileDate < cutoffDateStr) {
|
|
460
|
+
try {
|
|
461
|
+
unlinkSync(filePath);
|
|
462
|
+
result.deleted++;
|
|
463
|
+
}
|
|
464
|
+
catch (err) {
|
|
465
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
466
|
+
result.errors.push(`Failed to delete ${filePath}: ${message}`);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
catch (err) {
|
|
472
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
473
|
+
result.errors.push(`Failed to read directory ${dir}: ${message}`);
|
|
474
|
+
}
|
|
475
|
+
return result;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Batched JSONL writer that reduces I/O by buffering writes.
|
|
479
|
+
* Supports optional gzip compression.
|
|
480
|
+
*
|
|
481
|
+
* @example
|
|
482
|
+
* ```ts
|
|
483
|
+
* const writer = new BatchWriter('output.jsonl', { batchSize: 50 });
|
|
484
|
+
* for (const record of records) {
|
|
485
|
+
* writer.write(record);
|
|
486
|
+
* }
|
|
487
|
+
* writer.close(); // Flush remaining buffered records
|
|
488
|
+
* ```
|
|
489
|
+
*/
|
|
490
|
+
export class BatchWriter {
|
|
491
|
+
buffer = [];
|
|
492
|
+
filePath;
|
|
493
|
+
batchSize;
|
|
494
|
+
useGzip;
|
|
495
|
+
mkdirp;
|
|
496
|
+
initialized = false;
|
|
497
|
+
stats = { recordsWritten: 0, bytesWritten: 0, flushCount: 0 };
|
|
498
|
+
constructor(filePath, options = {}) {
|
|
499
|
+
this.filePath = filePath;
|
|
500
|
+
this.batchSize = options.batchSize ?? BATCH_SIZE;
|
|
501
|
+
this.useGzip = options.gzip ?? false;
|
|
502
|
+
this.mkdirp = options.mkdirp ?? true;
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Add a record to the buffer. Flushes automatically when batch size is reached.
|
|
506
|
+
*/
|
|
507
|
+
write(record) {
|
|
508
|
+
this.buffer.push(JSON.stringify(record));
|
|
509
|
+
if (this.buffer.length >= this.batchSize) {
|
|
510
|
+
this.flush();
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Write multiple records at once
|
|
515
|
+
*/
|
|
516
|
+
writeAll(records) {
|
|
517
|
+
for (const record of records) {
|
|
518
|
+
this.write(record);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Flush buffered records to disk
|
|
523
|
+
*/
|
|
524
|
+
flush() {
|
|
525
|
+
if (this.buffer.length === 0)
|
|
526
|
+
return;
|
|
527
|
+
const content = this.buffer.join('\n') + '\n';
|
|
528
|
+
this.buffer = [];
|
|
529
|
+
// Ensure directory exists on first write
|
|
530
|
+
if (!this.initialized) {
|
|
531
|
+
if (this.mkdirp) {
|
|
532
|
+
const dir = dirname(this.filePath);
|
|
533
|
+
if (!existsSync(dir)) {
|
|
534
|
+
mkdirSync(dir, { recursive: true });
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
// Write (create/overwrite) on first flush
|
|
538
|
+
if (this.useGzip) {
|
|
539
|
+
writeFileSync(this.filePath, gzipSync(content));
|
|
540
|
+
}
|
|
541
|
+
else {
|
|
542
|
+
writeFileSync(this.filePath, content, 'utf-8');
|
|
543
|
+
}
|
|
544
|
+
this.initialized = true;
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
// Append on subsequent flushes
|
|
548
|
+
if (this.useGzip) {
|
|
549
|
+
// For gzip, we need to read, decompress, append, recompress — O(n) per flush
|
|
550
|
+
const existing = existsSync(this.filePath)
|
|
551
|
+
? gunzipSync(readFileSync(this.filePath)).toString('utf-8')
|
|
552
|
+
: '';
|
|
553
|
+
const combined = existing + content;
|
|
554
|
+
if (combined.length > MAX_GZIP_FILE_SIZE_BYTES) {
|
|
555
|
+
throw new Error(`Gzip file would exceed 50MB limit (${Math.round(combined.length / ONE_MILLION)}MB). ` +
|
|
556
|
+
'Use file rotation or disable gzip compression.');
|
|
557
|
+
}
|
|
558
|
+
writeFileSync(this.filePath, gzipSync(combined));
|
|
559
|
+
}
|
|
560
|
+
else {
|
|
561
|
+
appendFileSync(this.filePath, content, 'utf-8');
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
this.stats.bytesWritten += Buffer.byteLength(content, 'utf-8');
|
|
565
|
+
this.stats.recordsWritten += content.split('\n').length - 1;
|
|
566
|
+
this.stats.flushCount++;
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Flush remaining records and finalize the file.
|
|
570
|
+
* Always call this when done writing.
|
|
571
|
+
*/
|
|
572
|
+
close() {
|
|
573
|
+
this.flush();
|
|
574
|
+
return { ...this.stats };
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Get current statistics
|
|
578
|
+
*/
|
|
579
|
+
getStats() {
|
|
580
|
+
return {
|
|
581
|
+
...this.stats,
|
|
582
|
+
recordsWritten: this.stats.recordsWritten + this.buffer.length,
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Get number of records currently buffered (not yet written)
|
|
587
|
+
*/
|
|
588
|
+
get bufferedCount() {
|
|
589
|
+
return this.buffer.length;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Streaming aggregator that computes aggregations incrementally without holding all values.
|
|
594
|
+
* Uses DDSketch for memory-bounded percentile estimation.
|
|
595
|
+
*
|
|
596
|
+
* @example
|
|
597
|
+
* ```ts
|
|
598
|
+
* const aggregator = new StreamingAggregator();
|
|
599
|
+
* for (const value of largeDataset) {
|
|
600
|
+
* aggregator.add(value);
|
|
601
|
+
* }
|
|
602
|
+
* const avg = aggregator.getResult('avg');
|
|
603
|
+
* const p95 = aggregator.getResult('p95');
|
|
604
|
+
* ```
|
|
605
|
+
*/
|
|
606
|
+
export class StreamingAggregator {
|
|
607
|
+
count = 0;
|
|
608
|
+
sum = 0;
|
|
609
|
+
min = Infinity;
|
|
610
|
+
max = -Infinity;
|
|
611
|
+
sketch = new DDSketch();
|
|
612
|
+
/** DDSketch.getValueAtQuantile() takes 0-1; PERCENTILE enum values are 0-100 */
|
|
613
|
+
static PERCENTILE_SCALE = 100;
|
|
614
|
+
/**
|
|
615
|
+
* Add a value to the aggregator
|
|
616
|
+
*/
|
|
617
|
+
add(value) {
|
|
618
|
+
if (!Number.isFinite(value))
|
|
619
|
+
return;
|
|
620
|
+
this.count++;
|
|
621
|
+
this.sum += value;
|
|
622
|
+
this.min = Math.min(this.min, value);
|
|
623
|
+
this.max = Math.max(this.max, value);
|
|
624
|
+
this.sketch.accept(value);
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Add multiple values at once
|
|
628
|
+
*/
|
|
629
|
+
addAll(values) {
|
|
630
|
+
for (const value of values) {
|
|
631
|
+
this.add(value);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
/**
|
|
635
|
+
* Get the result for a specific aggregation type
|
|
636
|
+
*/
|
|
637
|
+
getResult(type) {
|
|
638
|
+
if (this.count === 0 && type !== 'count') {
|
|
639
|
+
return undefined;
|
|
640
|
+
}
|
|
641
|
+
switch (type) {
|
|
642
|
+
case 'count':
|
|
643
|
+
return this.count;
|
|
644
|
+
case 'sum':
|
|
645
|
+
return this.sum;
|
|
646
|
+
case 'avg':
|
|
647
|
+
return this.sum / this.count;
|
|
648
|
+
case 'min':
|
|
649
|
+
return this.min === Infinity ? undefined : this.min;
|
|
650
|
+
case 'max':
|
|
651
|
+
return this.max === -Infinity ? undefined : this.max;
|
|
652
|
+
case 'p50':
|
|
653
|
+
return this.getPercentile(PERCENTILE.P50);
|
|
654
|
+
case 'p95':
|
|
655
|
+
return this.getPercentile(PERCENTILE.P95);
|
|
656
|
+
case 'p99':
|
|
657
|
+
return this.getPercentile(PERCENTILE.P99);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* Get all computed statistics
|
|
662
|
+
*/
|
|
663
|
+
getStats() {
|
|
664
|
+
return {
|
|
665
|
+
count: this.count,
|
|
666
|
+
sum: this.sum,
|
|
667
|
+
avg: this.count > 0 ? this.sum / this.count : undefined,
|
|
668
|
+
min: this.min === Infinity ? undefined : this.min,
|
|
669
|
+
max: this.max === -Infinity ? undefined : this.max,
|
|
670
|
+
p50: this.getPercentile(PERCENTILE.P50),
|
|
671
|
+
p95: this.getPercentile(PERCENTILE.P95),
|
|
672
|
+
p99: this.getPercentile(PERCENTILE.P99),
|
|
673
|
+
};
|
|
674
|
+
}
|
|
675
|
+
/**
|
|
676
|
+
* Reset the aggregator to initial state
|
|
677
|
+
*/
|
|
678
|
+
reset() {
|
|
679
|
+
this.count = 0;
|
|
680
|
+
this.sum = 0;
|
|
681
|
+
this.min = Infinity;
|
|
682
|
+
this.max = -Infinity;
|
|
683
|
+
this.sketch = new DDSketch();
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* Get the current count of values added
|
|
687
|
+
*/
|
|
688
|
+
getCount() {
|
|
689
|
+
return this.count;
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Estimate percentile via DDSketch
|
|
693
|
+
*/
|
|
694
|
+
getPercentile(percentile) {
|
|
695
|
+
if (this.count === 0)
|
|
696
|
+
return undefined;
|
|
697
|
+
return this.sketch.getValueAtQuantile(percentile / StreamingAggregator.PERCENTILE_SCALE);
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
// Conservative fallback size (1MB) for objects that cannot be serialized
|
|
701
|
+
// This prevents memory limit bypass when JSON.stringify() fails (e.g., circular references)
|
|
702
|
+
export const CONSERVATIVE_FALLBACK_SIZE = 1e6;
|
|
703
|
+
/**
|
|
704
|
+
* Maximum recursion depth for circular reference detection.
|
|
705
|
+
* Objects nested deeper than this are assumed safe to avoid performance issues.
|
|
706
|
+
*/
|
|
707
|
+
const MAX_CIRCULAR_CHECK_DEPTH = 100;
|
|
708
|
+
/**
|
|
709
|
+
* Check if a value contains circular references using a WeakSet
|
|
710
|
+
* @param obj - The object to check
|
|
711
|
+
* @param seen - WeakSet to track seen objects
|
|
712
|
+
* @param depth - Current recursion depth (internal use)
|
|
713
|
+
* @returns true if circular reference detected
|
|
714
|
+
*/
|
|
715
|
+
export function hasCircularReference(obj, seen = new WeakSet(), depth = 0) {
|
|
716
|
+
// Early bailout for primitives
|
|
717
|
+
if (obj === null || typeof obj !== 'object') {
|
|
718
|
+
return false;
|
|
719
|
+
}
|
|
720
|
+
// Depth limit to prevent performance issues with deeply nested objects
|
|
721
|
+
if (depth > MAX_CIRCULAR_CHECK_DEPTH) {
|
|
722
|
+
return false;
|
|
723
|
+
}
|
|
724
|
+
if (seen.has(obj)) {
|
|
725
|
+
return true;
|
|
726
|
+
}
|
|
727
|
+
seen.add(obj);
|
|
728
|
+
if (Array.isArray(obj)) {
|
|
729
|
+
for (const item of obj) {
|
|
730
|
+
if (hasCircularReference(item, seen, depth + 1)) {
|
|
731
|
+
return true;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
else {
|
|
736
|
+
for (const key of Object.keys(obj)) {
|
|
737
|
+
if (hasCircularReference(obj[key], seen, depth + 1)) {
|
|
738
|
+
return true;
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
return false;
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* Estimate approximate byte size of an object (rough approximation)
|
|
746
|
+
* Uses a sample-based approach for large arrays to avoid performance issues
|
|
747
|
+
*
|
|
748
|
+
* Security: Returns a conservative estimate (1MB) when serialization fails
|
|
749
|
+
* to prevent memory limit bypass via circular references or other edge cases.
|
|
750
|
+
*/
|
|
751
|
+
export function estimateByteSize(results, sampleSize = BATCH_SIZE) {
|
|
752
|
+
if (results.length === 0)
|
|
753
|
+
return 0;
|
|
754
|
+
// For small arrays, measure directly
|
|
755
|
+
if (results.length <= sampleSize) {
|
|
756
|
+
try {
|
|
757
|
+
// Check for circular references first to avoid JSON.stringify throwing
|
|
758
|
+
if (hasCircularReference(results)) {
|
|
759
|
+
memoryLog.warn('Circular reference detected in results, using conservative size estimate');
|
|
760
|
+
return CONSERVATIVE_FALLBACK_SIZE;
|
|
761
|
+
}
|
|
762
|
+
return JSON.stringify(results).length;
|
|
763
|
+
}
|
|
764
|
+
catch {
|
|
765
|
+
// If serialization fails for any reason, return conservative estimate
|
|
766
|
+
// This prevents memory limit bypass on error
|
|
767
|
+
memoryLog.warn('Failed to serialize results, using conservative size estimate');
|
|
768
|
+
return CONSERVATIVE_FALLBACK_SIZE;
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
// For large arrays, sample and extrapolate
|
|
772
|
+
const step = Math.floor(results.length / sampleSize);
|
|
773
|
+
let sampleBytes = 0;
|
|
774
|
+
let sampledCount = 0;
|
|
775
|
+
let failedCount = 0;
|
|
776
|
+
for (let i = 0; i < results.length && sampledCount < sampleSize; i += step) {
|
|
777
|
+
try {
|
|
778
|
+
// Only check objects for circular references — primitives can't have them,
|
|
779
|
+
// and skipping the check avoids allocating a new WeakSet per sample item.
|
|
780
|
+
const item = results[i];
|
|
781
|
+
if (item !== null && typeof item === 'object' && hasCircularReference(item)) {
|
|
782
|
+
failedCount++;
|
|
783
|
+
sampledCount++;
|
|
784
|
+
continue;
|
|
785
|
+
}
|
|
786
|
+
sampleBytes += JSON.stringify(item).length;
|
|
787
|
+
sampledCount++;
|
|
788
|
+
}
|
|
789
|
+
catch {
|
|
790
|
+
failedCount++;
|
|
791
|
+
sampledCount++;
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
// If too many samples failed (>50%), return conservative estimate
|
|
795
|
+
if (failedCount > sampledCount / BINARY_SEARCH_DIVISOR) {
|
|
796
|
+
memoryLog.warn('Too many serialization failures in sample, using conservative size estimate');
|
|
797
|
+
return CONSERVATIVE_FALLBACK_SIZE;
|
|
798
|
+
}
|
|
799
|
+
// If all samples failed, return conservative estimate
|
|
800
|
+
if (sampledCount === failedCount) {
|
|
801
|
+
memoryLog.warn('All samples failed to serialize, using conservative size estimate');
|
|
802
|
+
return CONSERVATIVE_FALLBACK_SIZE;
|
|
803
|
+
}
|
|
804
|
+
const successfulSamples = sampledCount - failedCount;
|
|
805
|
+
const avgBytesPerItem = sampleBytes / successfulSamples;
|
|
806
|
+
return Math.ceil(avgBytesPerItem * results.length);
|
|
807
|
+
}
|
|
808
|
+
/**
|
|
809
|
+
* Enforce memory limit on results array.
|
|
810
|
+
* Truncates results if they exceed count limit OR estimated byte size limit.
|
|
811
|
+
* Uses sampling for large arrays to avoid performance overhead.
|
|
812
|
+
*
|
|
813
|
+
* @param results - Array of results to limit
|
|
814
|
+
* @param limit - Maximum number of results (defaults to MAX_RESULTS_IN_MEMORY)
|
|
815
|
+
* @returns Object with results, truncated flag, and original count
|
|
816
|
+
*
|
|
817
|
+
* @example
|
|
818
|
+
* ```ts
|
|
819
|
+
* const { results, truncated } = enforceMemoryLimit(largeArray);
|
|
820
|
+
* if (truncated) {
|
|
821
|
+
* console.warn('Results were truncated');
|
|
822
|
+
* }
|
|
823
|
+
* ```
|
|
824
|
+
*/
|
|
825
|
+
export function enforceMemoryLimit(results, limit = MAX_RESULTS_IN_MEMORY) {
|
|
826
|
+
const originalCount = results.length;
|
|
827
|
+
// Check count limit first
|
|
828
|
+
if (results.length > limit) {
|
|
829
|
+
memoryLog.warn(`Results truncated from ${results.length} to ${limit} items (MAX_RESULTS_IN_MEMORY exceeded)`, { from: results.length, to: limit, reason: 'count' });
|
|
830
|
+
return {
|
|
831
|
+
results: results.slice(0, limit),
|
|
832
|
+
truncated: true,
|
|
833
|
+
originalCount,
|
|
834
|
+
truncationReason: 'count',
|
|
835
|
+
};
|
|
836
|
+
}
|
|
837
|
+
// Estimate byte size to prevent memory exhaustion with large objects
|
|
838
|
+
const estimatedBytes = estimateByteSize(results);
|
|
839
|
+
if (estimatedBytes > MAX_RESULTS_BYTE_SIZE) {
|
|
840
|
+
// Binary search to find safe size
|
|
841
|
+
let safeCount = Math.floor(results.length / BINARY_SEARCH_DIVISOR);
|
|
842
|
+
let low = 0;
|
|
843
|
+
let high = results.length;
|
|
844
|
+
while (low < high - BINARY_SEARCH_DELTA) {
|
|
845
|
+
const mid = Math.floor((low + high) / BINARY_SEARCH_DIVISOR);
|
|
846
|
+
const midSize = estimateByteSize(results.slice(0, mid));
|
|
847
|
+
if (midSize <= MAX_RESULTS_BYTE_SIZE) {
|
|
848
|
+
low = mid;
|
|
849
|
+
safeCount = mid;
|
|
850
|
+
}
|
|
851
|
+
else {
|
|
852
|
+
high = mid;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
// Ensure at least some results are returned
|
|
856
|
+
safeCount = Math.max(1, Math.min(safeCount, results.length));
|
|
857
|
+
memoryLog.warn(`Results truncated from ${results.length} to ${safeCount} items (estimated ${Math.round(estimatedBytes / BYTES.MB)}MB exceeded ${MAX_RESULTS_BYTE_SIZE / BYTES.MB}MB limit)`, { from: results.length, to: safeCount, estimatedMB: Math.round(estimatedBytes / BYTES.MB), reason: 'bytes' });
|
|
858
|
+
return {
|
|
859
|
+
results: results.slice(0, safeCount),
|
|
860
|
+
truncated: true,
|
|
861
|
+
originalCount,
|
|
862
|
+
truncationReason: 'size',
|
|
863
|
+
};
|
|
864
|
+
}
|
|
865
|
+
return {
|
|
866
|
+
results,
|
|
867
|
+
truncated: false,
|
|
868
|
+
originalCount,
|
|
869
|
+
};
|
|
870
|
+
}
|
|
871
|
+
/**
|
|
872
|
+
* Check if streaming aggregation should be used based on result count
|
|
873
|
+
*
|
|
874
|
+
* @param count - Number of results
|
|
875
|
+
* @param threshold - Threshold to trigger streaming (defaults to STREAMING_THRESHOLD)
|
|
876
|
+
* @returns true if streaming aggregation should be used
|
|
877
|
+
*/
|
|
878
|
+
export function shouldUseStreamingAggregation(count, threshold = STREAMING_THRESHOLD) {
|
|
879
|
+
return count > threshold;
|
|
880
|
+
}
|
|
881
|
+
/**
|
|
882
|
+
* Get current memory limit constants (useful for testing)
|
|
883
|
+
*/
|
|
884
|
+
export function getMemoryLimits() {
|
|
885
|
+
return {
|
|
886
|
+
maxResults: MAX_RESULTS_IN_MEMORY,
|
|
887
|
+
streamingThreshold: STREAMING_THRESHOLD,
|
|
888
|
+
};
|
|
889
|
+
}
|
|
890
|
+
//# sourceMappingURL=file-utils.js.map
|