observability-toolkit 1.8.5 → 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.
Files changed (1168) hide show
  1. package/README.md +167 -281
  2. package/dist/__tests__/find-constant-dedup.test.d.ts +11 -0
  3. package/dist/__tests__/find-constant-dedup.test.d.ts.map +1 -0
  4. package/dist/__tests__/find-constant-dedup.test.js +132 -0
  5. package/dist/__tests__/find-constant-dedup.test.js.map +1 -0
  6. package/dist/backends/backend-schemas.d.ts +309 -0
  7. package/dist/backends/backend-schemas.d.ts.map +1 -0
  8. package/dist/backends/backend-schemas.js +215 -0
  9. package/dist/backends/backend-schemas.js.map +1 -0
  10. package/dist/backends/cloud.d.ts +46 -0
  11. package/dist/backends/cloud.d.ts.map +1 -0
  12. package/dist/backends/cloud.js +520 -0
  13. package/dist/backends/cloud.js.map +1 -0
  14. package/dist/backends/cloud.test.d.ts +2 -0
  15. package/dist/backends/cloud.test.d.ts.map +1 -0
  16. package/dist/backends/cloud.test.js +436 -0
  17. package/dist/backends/cloud.test.js.map +1 -0
  18. package/dist/backends/index.d.ts +672 -236
  19. package/dist/backends/index.d.ts.map +1 -1
  20. package/dist/backends/index.js +334 -0
  21. package/dist/backends/index.js.map +1 -1
  22. package/dist/backends/index.test.js +606 -31
  23. package/dist/backends/index.test.js.map +1 -1
  24. package/dist/backends/local-jsonl-boolean-search.test.js +8 -7
  25. package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
  26. package/dist/backends/local-jsonl-cache.test.js +33 -31
  27. package/dist/backends/local-jsonl-cache.test.js.map +1 -1
  28. package/dist/backends/local-jsonl-circuit-breaker.test.js +9 -7
  29. package/dist/backends/local-jsonl-circuit-breaker.test.js.map +1 -1
  30. package/dist/backends/local-jsonl-export.test.js +73 -58
  31. package/dist/backends/local-jsonl-export.test.js.map +1 -1
  32. package/dist/backends/local-jsonl-index.test.js +52 -50
  33. package/dist/backends/local-jsonl-index.test.js.map +1 -1
  34. package/dist/backends/local-jsonl-logs.test.js +47 -31
  35. package/dist/backends/local-jsonl-logs.test.js.map +1 -1
  36. package/dist/backends/local-jsonl-metrics.test.js +85 -82
  37. package/dist/backends/local-jsonl-metrics.test.js.map +1 -1
  38. package/dist/backends/local-jsonl-otlp-unwrap.test.d.ts +2 -0
  39. package/dist/backends/local-jsonl-otlp-unwrap.test.d.ts.map +1 -0
  40. package/dist/backends/local-jsonl-otlp-unwrap.test.js +602 -0
  41. package/dist/backends/local-jsonl-otlp-unwrap.test.js.map +1 -0
  42. package/dist/backends/local-jsonl-traces.test.js +161 -147
  43. package/dist/backends/local-jsonl-traces.test.js.map +1 -1
  44. package/dist/backends/local-jsonl.d.ts +64 -5
  45. package/dist/backends/local-jsonl.d.ts.map +1 -1
  46. package/dist/backends/local-jsonl.js +1821 -612
  47. package/dist/backends/local-jsonl.js.map +1 -1
  48. package/dist/backends/shared.d.ts +9 -0
  49. package/dist/backends/shared.d.ts.map +1 -0
  50. package/dist/backends/shared.js +9 -0
  51. package/dist/backends/shared.js.map +1 -0
  52. package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.d.ts +40 -0
  53. package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.d.ts.map +1 -0
  54. package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.js +27 -0
  55. package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.js.map +1 -0
  56. package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.d.ts +106 -0
  57. package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.d.ts.map +1 -0
  58. package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.js +43 -0
  59. package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.js.map +1 -0
  60. package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.d.ts +111 -0
  61. package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.d.ts.map +1 -0
  62. package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.js +42 -0
  63. package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.js.map +1 -0
  64. package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.d.ts +106 -0
  65. package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.d.ts.map +1 -0
  66. package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.js +43 -0
  67. package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.js.map +1 -0
  68. package/dist/generated/opentelemetry/proto/common/v1/common_pb.d.ts +243 -0
  69. package/dist/generated/opentelemetry/proto/common/v1/common_pb.d.ts.map +1 -0
  70. package/dist/generated/opentelemetry/proto/common/v1/common_pb.js +49 -0
  71. package/dist/generated/opentelemetry/proto/common/v1/common_pb.js.map +1 -0
  72. package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.d.ts +90 -0
  73. package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.d.ts.map +1 -0
  74. package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.js +66 -0
  75. package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.js.map +1 -0
  76. package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.d.ts +1134 -0
  77. package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.d.ts.map +1 -0
  78. package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.js +223 -0
  79. package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.js.map +1 -0
  80. package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.d.ts +678 -0
  81. package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.d.ts.map +1 -0
  82. package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.js +107 -0
  83. package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.js.map +1 -0
  84. package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.d.ts +46 -0
  85. package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.d.ts.map +1 -0
  86. package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.js +25 -0
  87. package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.js.map +1 -0
  88. package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.d.ts +569 -0
  89. package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.d.ts.map +1 -0
  90. package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.js +195 -0
  91. package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.js.map +1 -0
  92. package/dist/lib/agent-judge/agent-as-judge.d.ts +157 -0
  93. package/dist/lib/agent-judge/agent-as-judge.d.ts.map +1 -0
  94. package/dist/lib/agent-judge/agent-as-judge.js +137 -0
  95. package/dist/lib/agent-judge/agent-as-judge.js.map +1 -0
  96. package/dist/lib/agent-judge/agent-as-judge.test.d.ts +5 -0
  97. package/dist/lib/agent-judge/agent-as-judge.test.d.ts.map +1 -0
  98. package/dist/lib/agent-judge/agent-as-judge.test.js +839 -0
  99. package/dist/lib/agent-judge/agent-as-judge.test.js.map +1 -0
  100. package/dist/lib/agent-judge/agent-eval-metrics.d.ts +293 -0
  101. package/dist/lib/agent-judge/agent-eval-metrics.d.ts.map +1 -0
  102. package/dist/lib/agent-judge/agent-eval-metrics.js +715 -0
  103. package/dist/lib/agent-judge/agent-eval-metrics.js.map +1 -0
  104. package/dist/lib/agent-judge/agent-eval-metrics.test.d.ts +5 -0
  105. package/dist/lib/agent-judge/agent-eval-metrics.test.d.ts.map +1 -0
  106. package/dist/lib/agent-judge/agent-eval-metrics.test.js +676 -0
  107. package/dist/lib/agent-judge/agent-eval-metrics.test.js.map +1 -0
  108. package/dist/lib/agent-judge/agent-judge-classes.d.ts +95 -0
  109. package/dist/lib/agent-judge/agent-judge-classes.d.ts.map +1 -0
  110. package/dist/lib/agent-judge/agent-judge-classes.js +222 -0
  111. package/dist/lib/agent-judge/agent-judge-classes.js.map +1 -0
  112. package/dist/lib/agent-judge/agent-judge-classes.test.d.ts +6 -0
  113. package/dist/lib/agent-judge/agent-judge-classes.test.d.ts.map +1 -0
  114. package/dist/lib/agent-judge/agent-judge-classes.test.js +271 -0
  115. package/dist/lib/agent-judge/agent-judge-classes.test.js.map +1 -0
  116. package/dist/lib/agent-judge/agent-judge-consensus.d.ts +58 -0
  117. package/dist/lib/agent-judge/agent-judge-consensus.d.ts.map +1 -0
  118. package/dist/lib/agent-judge/agent-judge-consensus.js +149 -0
  119. package/dist/lib/agent-judge/agent-judge-consensus.js.map +1 -0
  120. package/dist/lib/agent-judge/agent-judge-consensus.test.d.ts +2 -0
  121. package/dist/lib/agent-judge/agent-judge-consensus.test.d.ts.map +1 -0
  122. package/dist/lib/agent-judge/agent-judge-consensus.test.js +170 -0
  123. package/dist/lib/agent-judge/agent-judge-consensus.test.js.map +1 -0
  124. package/dist/lib/agent-judge/agent-judge-verification.d.ts +89 -0
  125. package/dist/lib/agent-judge/agent-judge-verification.d.ts.map +1 -0
  126. package/dist/lib/agent-judge/agent-judge-verification.js +235 -0
  127. package/dist/lib/agent-judge/agent-judge-verification.js.map +1 -0
  128. package/dist/lib/agent-judge/agent-judge-verification.test.d.ts +5 -0
  129. package/dist/lib/agent-judge/agent-judge-verification.test.d.ts.map +1 -0
  130. package/dist/lib/agent-judge/agent-judge-verification.test.js +399 -0
  131. package/dist/lib/agent-judge/agent-judge-verification.test.js.map +1 -0
  132. package/dist/lib/audit/agent-auditor-scoring.d.ts +167 -0
  133. package/dist/lib/audit/agent-auditor-scoring.d.ts.map +1 -0
  134. package/dist/lib/audit/agent-auditor-scoring.js +338 -0
  135. package/dist/lib/audit/agent-auditor-scoring.js.map +1 -0
  136. package/dist/lib/audit/agent-auditor-scoring.test.d.ts +2 -0
  137. package/dist/lib/audit/agent-auditor-scoring.test.d.ts.map +1 -0
  138. package/dist/lib/audit/agent-auditor-scoring.test.js +576 -0
  139. package/dist/lib/audit/agent-auditor-scoring.test.js.map +1 -0
  140. package/dist/lib/audit/audit-record.d.ts +139 -0
  141. package/dist/lib/audit/audit-record.d.ts.map +1 -0
  142. package/dist/lib/audit/audit-record.js +288 -0
  143. package/dist/lib/audit/audit-record.js.map +1 -0
  144. package/dist/lib/audit/audit-record.test.d.ts +5 -0
  145. package/dist/lib/audit/audit-record.test.d.ts.map +1 -0
  146. package/dist/lib/audit/audit-record.test.js +258 -0
  147. package/dist/lib/audit/audit-record.test.js.map +1 -0
  148. package/dist/lib/audit/audit-scoring-constants.d.ts +57 -0
  149. package/dist/lib/audit/audit-scoring-constants.d.ts.map +1 -0
  150. package/dist/lib/audit/audit-scoring-constants.js +59 -0
  151. package/dist/lib/audit/audit-scoring-constants.js.map +1 -0
  152. package/dist/lib/audit/compliance-report.d.ts +125 -0
  153. package/dist/lib/audit/compliance-report.d.ts.map +1 -0
  154. package/dist/lib/audit/compliance-report.js +205 -0
  155. package/dist/lib/audit/compliance-report.js.map +1 -0
  156. package/dist/lib/audit/compliance-report.test.d.ts +5 -0
  157. package/dist/lib/audit/compliance-report.test.d.ts.map +1 -0
  158. package/dist/lib/audit/compliance-report.test.js +290 -0
  159. package/dist/lib/audit/compliance-report.test.js.map +1 -0
  160. package/dist/lib/audit/retention-guard.d.ts +41 -0
  161. package/dist/lib/audit/retention-guard.d.ts.map +1 -0
  162. package/dist/lib/audit/retention-guard.js +103 -0
  163. package/dist/lib/audit/retention-guard.js.map +1 -0
  164. package/dist/lib/audit/retention-guard.test.d.ts +5 -0
  165. package/dist/lib/audit/retention-guard.test.d.ts.map +1 -0
  166. package/dist/lib/audit/retention-guard.test.js +109 -0
  167. package/dist/lib/audit/retention-guard.test.js.map +1 -0
  168. package/dist/lib/audit/skill-auditor-scoring.d.ts +69 -0
  169. package/dist/lib/audit/skill-auditor-scoring.d.ts.map +1 -0
  170. package/dist/lib/audit/skill-auditor-scoring.js +149 -0
  171. package/dist/lib/audit/skill-auditor-scoring.js.map +1 -0
  172. package/dist/lib/audit/skill-auditor-scoring.test.d.ts +2 -0
  173. package/dist/lib/audit/skill-auditor-scoring.test.d.ts.map +1 -0
  174. package/dist/lib/audit/skill-auditor-scoring.test.js +369 -0
  175. package/dist/lib/audit/skill-auditor-scoring.test.js.map +1 -0
  176. package/dist/lib/audit/verification-events.d.ts +119 -0
  177. package/dist/lib/audit/verification-events.d.ts.map +1 -0
  178. package/dist/lib/audit/verification-events.js +175 -0
  179. package/dist/lib/audit/verification-events.js.map +1 -0
  180. package/dist/lib/audit/verification-events.test.d.ts +5 -0
  181. package/dist/lib/audit/verification-events.test.d.ts.map +1 -0
  182. package/dist/lib/audit/verification-events.test.js +197 -0
  183. package/dist/lib/audit/verification-events.test.js.map +1 -0
  184. package/dist/lib/core/constants-models.d.ts +90 -0
  185. package/dist/lib/core/constants-models.d.ts.map +1 -0
  186. package/dist/lib/core/constants-models.js +208 -0
  187. package/dist/lib/core/constants-models.js.map +1 -0
  188. package/dist/lib/core/constants-otel.d.ts +68 -0
  189. package/dist/lib/core/constants-otel.d.ts.map +1 -0
  190. package/dist/lib/core/constants-otel.js +128 -0
  191. package/dist/lib/core/constants-otel.js.map +1 -0
  192. package/dist/lib/core/constants-symlink.test.d.ts.map +1 -0
  193. package/dist/lib/{constants-symlink.test.js → core/constants-symlink.test.js} +25 -24
  194. package/dist/lib/core/constants-symlink.test.js.map +1 -0
  195. package/dist/lib/core/constants-telemetry.d.ts +21 -0
  196. package/dist/lib/core/constants-telemetry.d.ts.map +1 -0
  197. package/dist/lib/core/constants-telemetry.js +162 -0
  198. package/dist/lib/core/constants-telemetry.js.map +1 -0
  199. package/dist/lib/core/constants.d.ts +152 -0
  200. package/dist/lib/core/constants.d.ts.map +1 -0
  201. package/dist/lib/core/constants.js +223 -0
  202. package/dist/lib/core/constants.js.map +1 -0
  203. package/dist/lib/core/constants.test.d.ts.map +1 -0
  204. package/dist/lib/{constants.test.js → core/constants.test.js} +198 -82
  205. package/dist/lib/core/constants.test.js.map +1 -0
  206. package/dist/lib/core/doc-sync.test.d.ts +9 -0
  207. package/dist/lib/core/doc-sync.test.d.ts.map +1 -0
  208. package/dist/lib/core/doc-sync.test.js +159 -0
  209. package/dist/lib/core/doc-sync.test.js.map +1 -0
  210. package/dist/lib/core/edge-cases.test.d.ts.map +1 -0
  211. package/dist/lib/{edge-cases.test.js → core/edge-cases.test.js} +76 -73
  212. package/dist/lib/core/edge-cases.test.js.map +1 -0
  213. package/dist/lib/{file-utils.d.ts → core/file-utils.d.ts} +63 -8
  214. package/dist/lib/core/file-utils.d.ts.map +1 -0
  215. package/dist/lib/{file-utils.js → core/file-utils.js} +186 -93
  216. package/dist/lib/core/file-utils.js.map +1 -0
  217. package/dist/lib/core/file-utils.test-constants.d.ts +38 -0
  218. package/dist/lib/core/file-utils.test-constants.d.ts.map +1 -0
  219. package/dist/lib/core/file-utils.test-constants.js +40 -0
  220. package/dist/lib/core/file-utils.test-constants.js.map +1 -0
  221. package/dist/lib/core/file-utils.test.d.ts.map +1 -0
  222. package/dist/lib/{file-utils.test.js → core/file-utils.test.js} +240 -214
  223. package/dist/lib/core/file-utils.test.js.map +1 -0
  224. package/dist/lib/{input-validator.d.ts → core/input-validator.d.ts} +30 -20
  225. package/dist/lib/core/input-validator.d.ts.map +1 -0
  226. package/dist/lib/core/input-validator.fuzz.test.d.ts.map +1 -0
  227. package/dist/lib/{input-validator.fuzz.test.js → core/input-validator.fuzz.test.js} +41 -29
  228. package/dist/lib/core/input-validator.fuzz.test.js.map +1 -0
  229. package/dist/lib/{input-validator.js → core/input-validator.js} +83 -39
  230. package/dist/lib/core/input-validator.js.map +1 -0
  231. package/dist/lib/core/input-validator.test.d.ts.map +1 -0
  232. package/dist/lib/{input-validator.test.js → core/input-validator.test.js} +95 -45
  233. package/dist/lib/core/input-validator.test.js.map +1 -0
  234. package/dist/lib/{logger.d.ts → core/logger.d.ts} +4 -18
  235. package/dist/lib/core/logger.d.ts.map +1 -0
  236. package/dist/lib/core/logger.js +104 -0
  237. package/dist/lib/core/logger.js.map +1 -0
  238. package/dist/lib/core/logger.test.d.ts.map +1 -0
  239. package/dist/lib/core/logger.test.js.map +1 -0
  240. package/dist/lib/core/schema-types.d.ts +37 -0
  241. package/dist/lib/core/schema-types.d.ts.map +1 -0
  242. package/dist/lib/core/schema-types.js +29 -0
  243. package/dist/lib/core/schema-types.js.map +1 -0
  244. package/dist/lib/{server-utils.d.ts → core/server-utils.d.ts} +11 -1
  245. package/dist/lib/core/server-utils.d.ts.map +1 -0
  246. package/dist/lib/{server-utils.js → core/server-utils.js} +25 -5
  247. package/dist/lib/core/server-utils.js.map +1 -0
  248. package/dist/lib/core/shared-schemas.d.ts +301 -0
  249. package/dist/lib/core/shared-schemas.d.ts.map +1 -0
  250. package/dist/lib/core/shared-schemas.js +222 -0
  251. package/dist/lib/core/shared-schemas.js.map +1 -0
  252. package/dist/lib/core/shared-schemas.test.d.ts.map +1 -0
  253. package/dist/lib/{shared-schemas.test.js → core/shared-schemas.test.js} +48 -18
  254. package/dist/lib/core/shared-schemas.test.js.map +1 -0
  255. package/dist/lib/core/units.d.ts +67 -0
  256. package/dist/lib/core/units.d.ts.map +1 -0
  257. package/dist/lib/core/units.js +88 -0
  258. package/dist/lib/core/units.js.map +1 -0
  259. package/dist/lib/cost/cost-estimation.d.ts +264 -0
  260. package/dist/lib/cost/cost-estimation.d.ts.map +1 -0
  261. package/dist/lib/cost/cost-estimation.js +541 -0
  262. package/dist/lib/cost/cost-estimation.js.map +1 -0
  263. package/dist/lib/cost/cost-estimation.test.d.ts +5 -0
  264. package/dist/lib/cost/cost-estimation.test.d.ts.map +1 -0
  265. package/dist/lib/cost/cost-estimation.test.js +701 -0
  266. package/dist/lib/cost/cost-estimation.test.js.map +1 -0
  267. package/dist/lib/cost/pricing-cache.d.ts +59 -0
  268. package/dist/lib/cost/pricing-cache.d.ts.map +1 -0
  269. package/dist/lib/cost/pricing-cache.js +120 -0
  270. package/dist/lib/cost/pricing-cache.js.map +1 -0
  271. package/dist/lib/cost/pricing-cache.test.d.ts +5 -0
  272. package/dist/lib/cost/pricing-cache.test.d.ts.map +1 -0
  273. package/dist/lib/cost/pricing-cache.test.js +176 -0
  274. package/dist/lib/cost/pricing-cache.test.js.map +1 -0
  275. package/dist/lib/dashboard-file-utils.d.ts +35 -0
  276. package/dist/lib/dashboard-file-utils.d.ts.map +1 -0
  277. package/dist/lib/dashboard-file-utils.js +94 -0
  278. package/dist/lib/dashboard-file-utils.js.map +1 -0
  279. package/dist/lib/{error-sanitizer.d.ts → errors/error-sanitizer.d.ts} +5 -0
  280. package/dist/lib/errors/error-sanitizer.d.ts.map +1 -0
  281. package/dist/lib/{error-sanitizer.js → errors/error-sanitizer.js} +8 -6
  282. package/dist/lib/errors/error-sanitizer.js.map +1 -0
  283. package/dist/lib/errors/error-sanitizer.test.d.ts.map +1 -0
  284. package/dist/lib/{error-sanitizer.test.js → errors/error-sanitizer.test.js} +17 -11
  285. package/dist/lib/errors/error-sanitizer.test.js.map +1 -0
  286. package/dist/lib/{error-types.d.ts → errors/error-types.d.ts} +5 -0
  287. package/dist/lib/errors/error-types.d.ts.map +1 -0
  288. package/dist/lib/{error-types.js → errors/error-types.js} +34 -1
  289. package/dist/lib/errors/error-types.js.map +1 -0
  290. package/dist/lib/errors/error-types.test.d.ts.map +1 -0
  291. package/dist/lib/{error-types.test.js → errors/error-types.test.js} +51 -1
  292. package/dist/lib/errors/error-types.test.js.map +1 -0
  293. package/dist/lib/errors/query-sanitizer.d.ts.map +1 -0
  294. package/dist/lib/{query-sanitizer.js → errors/query-sanitizer.js} +9 -1
  295. package/dist/lib/errors/query-sanitizer.js.map +1 -0
  296. package/dist/lib/errors/query-sanitizer.test.d.ts.map +1 -0
  297. package/dist/lib/{query-sanitizer.test.js → errors/query-sanitizer.test.js} +9 -6
  298. package/dist/lib/errors/query-sanitizer.test.js.map +1 -0
  299. package/dist/lib/exports/confident-export.d.ts +105 -0
  300. package/dist/lib/exports/confident-export.d.ts.map +1 -0
  301. package/dist/lib/exports/confident-export.js +385 -0
  302. package/dist/lib/exports/confident-export.js.map +1 -0
  303. package/dist/lib/exports/confident-export.test.d.ts +7 -0
  304. package/dist/lib/exports/confident-export.test.d.ts.map +1 -0
  305. package/dist/lib/exports/confident-export.test.js +848 -0
  306. package/dist/lib/exports/confident-export.test.js.map +1 -0
  307. package/dist/lib/exports/datadog-export.d.ts +200 -0
  308. package/dist/lib/exports/datadog-export.d.ts.map +1 -0
  309. package/dist/lib/exports/datadog-export.js +488 -0
  310. package/dist/lib/exports/datadog-export.js.map +1 -0
  311. package/dist/lib/exports/datadog-export.test.d.ts +2 -0
  312. package/dist/lib/exports/datadog-export.test.d.ts.map +1 -0
  313. package/dist/lib/exports/datadog-export.test.js +890 -0
  314. package/dist/lib/exports/datadog-export.test.js.map +1 -0
  315. package/dist/lib/exports/export-config-schemas.d.ts +67 -0
  316. package/dist/lib/exports/export-config-schemas.d.ts.map +1 -0
  317. package/dist/lib/exports/export-config-schemas.js +120 -0
  318. package/dist/lib/exports/export-config-schemas.js.map +1 -0
  319. package/dist/lib/exports/export-config-schemas.test.d.ts +8 -0
  320. package/dist/lib/exports/export-config-schemas.test.d.ts.map +1 -0
  321. package/dist/lib/exports/export-config-schemas.test.js +503 -0
  322. package/dist/lib/exports/export-config-schemas.test.js.map +1 -0
  323. package/dist/lib/exports/export-utils.d.ts +127 -0
  324. package/dist/lib/exports/export-utils.d.ts.map +1 -0
  325. package/dist/lib/exports/export-utils.js +303 -0
  326. package/dist/lib/exports/export-utils.js.map +1 -0
  327. package/dist/lib/exports/export-utils.test.d.ts +5 -0
  328. package/dist/lib/exports/export-utils.test.d.ts.map +1 -0
  329. package/dist/lib/exports/export-utils.test.js +344 -0
  330. package/dist/lib/exports/export-utils.test.js.map +1 -0
  331. package/dist/lib/exports/langfuse-export.d.ts +129 -0
  332. package/dist/lib/exports/langfuse-export.d.ts.map +1 -0
  333. package/dist/lib/exports/langfuse-export.js +370 -0
  334. package/dist/lib/exports/langfuse-export.js.map +1 -0
  335. package/dist/lib/exports/langfuse-export.test.d.ts +7 -0
  336. package/dist/lib/exports/langfuse-export.test.d.ts.map +1 -0
  337. package/dist/lib/exports/langfuse-export.test.js +1020 -0
  338. package/dist/lib/exports/langfuse-export.test.js.map +1 -0
  339. package/dist/lib/{otlp-export.d.ts → exports/otlp-export.d.ts} +3 -2
  340. package/dist/lib/exports/otlp-export.d.ts.map +1 -0
  341. package/dist/lib/{otlp-export.js → exports/otlp-export.js} +51 -36
  342. package/dist/lib/exports/otlp-export.js.map +1 -0
  343. package/dist/lib/exports/otlp-format-converter.d.ts +70 -0
  344. package/dist/lib/exports/otlp-format-converter.d.ts.map +1 -0
  345. package/dist/lib/exports/otlp-format-converter.js +401 -0
  346. package/dist/lib/exports/otlp-format-converter.js.map +1 -0
  347. package/dist/lib/exports/otlp-proto-encode.d.ts +53 -0
  348. package/dist/lib/exports/otlp-proto-encode.d.ts.map +1 -0
  349. package/dist/lib/exports/otlp-proto-encode.js +165 -0
  350. package/dist/lib/exports/otlp-proto-encode.js.map +1 -0
  351. package/dist/lib/exports/otlp-proto-encode.test.d.ts +7 -0
  352. package/dist/lib/exports/otlp-proto-encode.test.d.ts.map +1 -0
  353. package/dist/lib/exports/otlp-proto-encode.test.js +997 -0
  354. package/dist/lib/exports/otlp-proto-encode.test.js.map +1 -0
  355. package/dist/lib/exports/phoenix-export.d.ts +119 -0
  356. package/dist/lib/exports/phoenix-export.d.ts.map +1 -0
  357. package/dist/lib/exports/phoenix-export.js +448 -0
  358. package/dist/lib/exports/phoenix-export.js.map +1 -0
  359. package/dist/lib/exports/phoenix-export.test.d.ts +11 -0
  360. package/dist/lib/exports/phoenix-export.test.d.ts.map +1 -0
  361. package/dist/lib/exports/phoenix-export.test.js +816 -0
  362. package/dist/lib/exports/phoenix-export.test.js.map +1 -0
  363. package/dist/lib/index.d.ts +16 -0
  364. package/dist/lib/index.d.ts.map +1 -0
  365. package/dist/lib/index.js +31 -0
  366. package/dist/lib/index.js.map +1 -0
  367. package/dist/lib/judge/evaluation-hooks-schemas.d.ts +186 -0
  368. package/dist/lib/judge/evaluation-hooks-schemas.d.ts.map +1 -0
  369. package/dist/lib/judge/evaluation-hooks-schemas.js +125 -0
  370. package/dist/lib/judge/evaluation-hooks-schemas.js.map +1 -0
  371. package/dist/lib/judge/evaluation-hooks.d.ts +88 -0
  372. package/dist/lib/judge/evaluation-hooks.d.ts.map +1 -0
  373. package/dist/lib/judge/evaluation-hooks.js +658 -0
  374. package/dist/lib/judge/evaluation-hooks.js.map +1 -0
  375. package/dist/lib/judge/evaluation-hooks.test.d.ts +8 -0
  376. package/dist/lib/judge/evaluation-hooks.test.d.ts.map +1 -0
  377. package/dist/lib/judge/evaluation-hooks.test.js +934 -0
  378. package/dist/lib/judge/evaluation-hooks.test.js.map +1 -0
  379. package/dist/lib/judge/llm-as-judge.d.ts +138 -0
  380. package/dist/lib/judge/llm-as-judge.d.ts.map +1 -0
  381. package/dist/lib/judge/llm-as-judge.js +103 -0
  382. package/dist/lib/judge/llm-as-judge.js.map +1 -0
  383. package/dist/lib/judge/llm-as-judge.test.d.ts +2 -0
  384. package/dist/lib/judge/llm-as-judge.test.d.ts.map +1 -0
  385. package/dist/lib/judge/llm-as-judge.test.js +2179 -0
  386. package/dist/lib/judge/llm-as-judge.test.js.map +1 -0
  387. package/dist/lib/judge/llm-judge-bias.d.ts +44 -0
  388. package/dist/lib/judge/llm-judge-bias.d.ts.map +1 -0
  389. package/dist/lib/judge/llm-judge-bias.js +130 -0
  390. package/dist/lib/judge/llm-judge-bias.js.map +1 -0
  391. package/dist/lib/judge/llm-judge-bias.test.d.ts +2 -0
  392. package/dist/lib/judge/llm-judge-bias.test.d.ts.map +1 -0
  393. package/dist/lib/judge/llm-judge-bias.test.js +380 -0
  394. package/dist/lib/judge/llm-judge-bias.test.js.map +1 -0
  395. package/dist/lib/judge/llm-judge-code.d.ts +99 -0
  396. package/dist/lib/judge/llm-judge-code.d.ts.map +1 -0
  397. package/dist/lib/judge/llm-judge-code.js +261 -0
  398. package/dist/lib/judge/llm-judge-code.js.map +1 -0
  399. package/dist/lib/judge/llm-judge-code.test.d.ts +2 -0
  400. package/dist/lib/judge/llm-judge-code.test.d.ts.map +1 -0
  401. package/dist/lib/judge/llm-judge-code.test.js +981 -0
  402. package/dist/lib/judge/llm-judge-code.test.js.map +1 -0
  403. package/dist/lib/judge/llm-judge-config.d.ts +241 -0
  404. package/dist/lib/judge/llm-judge-config.d.ts.map +1 -0
  405. package/dist/lib/judge/llm-judge-config.js +390 -0
  406. package/dist/lib/judge/llm-judge-config.js.map +1 -0
  407. package/dist/lib/judge/llm-judge-config.test.d.ts +5 -0
  408. package/dist/lib/judge/llm-judge-config.test.d.ts.map +1 -0
  409. package/dist/lib/judge/llm-judge-config.test.js +392 -0
  410. package/dist/lib/judge/llm-judge-config.test.js.map +1 -0
  411. package/dist/lib/judge/llm-judge-constants.d.ts +111 -0
  412. package/dist/lib/judge/llm-judge-constants.d.ts.map +1 -0
  413. package/dist/lib/judge/llm-judge-constants.js +150 -0
  414. package/dist/lib/judge/llm-judge-constants.js.map +1 -0
  415. package/dist/lib/judge/llm-judge-dag.d.ts +57 -0
  416. package/dist/lib/judge/llm-judge-dag.d.ts.map +1 -0
  417. package/dist/lib/judge/llm-judge-dag.js +217 -0
  418. package/dist/lib/judge/llm-judge-dag.js.map +1 -0
  419. package/dist/lib/judge/llm-judge-dag.test.d.ts +8 -0
  420. package/dist/lib/judge/llm-judge-dag.test.d.ts.map +1 -0
  421. package/dist/lib/judge/llm-judge-dag.test.js +973 -0
  422. package/dist/lib/judge/llm-judge-dag.test.js.map +1 -0
  423. package/dist/lib/judge/llm-judge-domain.d.ts +42 -0
  424. package/dist/lib/judge/llm-judge-domain.d.ts.map +1 -0
  425. package/dist/lib/judge/llm-judge-domain.js +167 -0
  426. package/dist/lib/judge/llm-judge-domain.js.map +1 -0
  427. package/dist/lib/judge/llm-judge-domain.test.d.ts +6 -0
  428. package/dist/lib/judge/llm-judge-domain.test.d.ts.map +1 -0
  429. package/dist/lib/judge/llm-judge-domain.test.js +337 -0
  430. package/dist/lib/judge/llm-judge-domain.test.js.map +1 -0
  431. package/dist/lib/judge/llm-judge-geval.d.ts +42 -0
  432. package/dist/lib/judge/llm-judge-geval.d.ts.map +1 -0
  433. package/dist/lib/judge/llm-judge-geval.js +213 -0
  434. package/dist/lib/judge/llm-judge-geval.js.map +1 -0
  435. package/dist/lib/judge/llm-judge-geval.test.d.ts +2 -0
  436. package/dist/lib/judge/llm-judge-geval.test.d.ts.map +1 -0
  437. package/dist/lib/judge/llm-judge-geval.test.js +556 -0
  438. package/dist/lib/judge/llm-judge-geval.test.js.map +1 -0
  439. package/dist/lib/judge/llm-judge-otel.test.d.ts +9 -0
  440. package/dist/lib/judge/llm-judge-otel.test.d.ts.map +1 -0
  441. package/dist/lib/judge/llm-judge-otel.test.js +91 -0
  442. package/dist/lib/judge/llm-judge-otel.test.js.map +1 -0
  443. package/dist/lib/judge/llm-judge-qag.d.ts +38 -0
  444. package/dist/lib/judge/llm-judge-qag.d.ts.map +1 -0
  445. package/dist/lib/judge/llm-judge-qag.js +205 -0
  446. package/dist/lib/judge/llm-judge-qag.js.map +1 -0
  447. package/dist/lib/judge/llm-judge-qag.test.d.ts +2 -0
  448. package/dist/lib/judge/llm-judge-qag.test.d.ts.map +1 -0
  449. package/dist/lib/judge/llm-judge-qag.test.js +386 -0
  450. package/dist/lib/judge/llm-judge-qag.test.js.map +1 -0
  451. package/dist/lib/judge/llm-judge-resilience.d.ts +74 -0
  452. package/dist/lib/judge/llm-judge-resilience.d.ts.map +1 -0
  453. package/dist/lib/judge/llm-judge-resilience.js +146 -0
  454. package/dist/lib/judge/llm-judge-resilience.js.map +1 -0
  455. package/dist/lib/judge/llm-judge-resilience.test.d.ts +2 -0
  456. package/dist/lib/judge/llm-judge-resilience.test.d.ts.map +1 -0
  457. package/dist/lib/judge/llm-judge-resilience.test.js +353 -0
  458. package/dist/lib/judge/llm-judge-resilience.test.js.map +1 -0
  459. package/dist/lib/judge/llm-judge-security.d.ts +106 -0
  460. package/dist/lib/judge/llm-judge-security.d.ts.map +1 -0
  461. package/dist/lib/judge/llm-judge-security.js +314 -0
  462. package/dist/lib/judge/llm-judge-security.js.map +1 -0
  463. package/dist/lib/judge/llm-judge-security.test.d.ts +2 -0
  464. package/dist/lib/judge/llm-judge-security.test.d.ts.map +1 -0
  465. package/dist/lib/judge/llm-judge-security.test.js +1011 -0
  466. package/dist/lib/judge/llm-judge-security.test.js.map +1 -0
  467. package/dist/lib/observability/context-accumulator.d.ts +32 -0
  468. package/dist/lib/observability/context-accumulator.d.ts.map +1 -0
  469. package/dist/lib/observability/context-accumulator.js +87 -0
  470. package/dist/lib/observability/context-accumulator.js.map +1 -0
  471. package/dist/lib/observability/evaluation-events.d.ts +35 -0
  472. package/dist/lib/observability/evaluation-events.d.ts.map +1 -0
  473. package/dist/lib/observability/evaluation-events.js +90 -0
  474. package/dist/lib/observability/evaluation-events.js.map +1 -0
  475. package/dist/lib/observability/file-span-exporter.d.ts +17 -0
  476. package/dist/lib/observability/file-span-exporter.d.ts.map +1 -0
  477. package/dist/lib/observability/file-span-exporter.js +49 -0
  478. package/dist/lib/observability/file-span-exporter.js.map +1 -0
  479. package/dist/lib/observability/histogram-bucket-constants.d.ts +25 -0
  480. package/dist/lib/observability/histogram-bucket-constants.d.ts.map +1 -0
  481. package/dist/lib/observability/histogram-bucket-constants.js +60 -0
  482. package/dist/lib/observability/histogram-bucket-constants.js.map +1 -0
  483. package/dist/lib/observability/histogram.d.ts +112 -0
  484. package/dist/lib/observability/histogram.d.ts.map +1 -0
  485. package/dist/lib/observability/histogram.js +170 -0
  486. package/dist/lib/observability/histogram.js.map +1 -0
  487. package/dist/lib/observability/histogram.test.d.ts +5 -0
  488. package/dist/lib/observability/histogram.test.d.ts.map +1 -0
  489. package/dist/lib/observability/histogram.test.js +385 -0
  490. package/dist/lib/observability/histogram.test.js.map +1 -0
  491. package/dist/lib/observability/indexer.d.ts +114 -0
  492. package/dist/lib/observability/indexer.d.ts.map +1 -0
  493. package/dist/lib/{indexer.js → observability/indexer.js} +65 -16
  494. package/dist/lib/observability/indexer.js.map +1 -0
  495. package/dist/lib/observability/indexer.test.d.ts.map +1 -0
  496. package/dist/lib/{indexer.test.js → observability/indexer.test.js} +94 -77
  497. package/dist/lib/observability/indexer.test.js.map +1 -0
  498. package/dist/lib/observability/instrumentation-eval.test.d.ts +5 -0
  499. package/dist/lib/observability/instrumentation-eval.test.d.ts.map +1 -0
  500. package/dist/lib/observability/instrumentation-eval.test.js +63 -0
  501. package/dist/lib/observability/instrumentation-eval.test.js.map +1 -0
  502. package/dist/lib/observability/instrumentation-init-errors.test.d.ts +13 -0
  503. package/dist/lib/observability/instrumentation-init-errors.test.d.ts.map +1 -0
  504. package/dist/lib/observability/instrumentation-init-errors.test.js +194 -0
  505. package/dist/lib/observability/instrumentation-init-errors.test.js.map +1 -0
  506. package/dist/lib/observability/instrumentation-retry-timeout.test.d.ts +15 -0
  507. package/dist/lib/observability/instrumentation-retry-timeout.test.d.ts.map +1 -0
  508. package/dist/lib/observability/instrumentation-retry-timeout.test.js +188 -0
  509. package/dist/lib/observability/instrumentation-retry-timeout.test.js.map +1 -0
  510. package/dist/lib/observability/instrumentation-set-otel.test.d.ts +5 -0
  511. package/dist/lib/observability/instrumentation-set-otel.test.d.ts.map +1 -0
  512. package/dist/lib/observability/instrumentation-set-otel.test.js +59 -0
  513. package/dist/lib/observability/instrumentation-set-otel.test.js.map +1 -0
  514. package/dist/lib/observability/instrumentation.d.ts +158 -0
  515. package/dist/lib/observability/instrumentation.d.ts.map +1 -0
  516. package/dist/lib/observability/instrumentation.integration.test.d.ts +2 -0
  517. package/dist/lib/observability/instrumentation.integration.test.d.ts.map +1 -0
  518. package/dist/lib/observability/instrumentation.integration.test.js +590 -0
  519. package/dist/lib/observability/instrumentation.integration.test.js.map +1 -0
  520. package/dist/lib/observability/instrumentation.js +512 -0
  521. package/dist/lib/observability/instrumentation.js.map +1 -0
  522. package/dist/lib/observability/instrumentation.test.d.ts +2 -0
  523. package/dist/lib/observability/instrumentation.test.d.ts.map +1 -0
  524. package/dist/lib/observability/instrumentation.test.js +822 -0
  525. package/dist/lib/observability/instrumentation.test.js.map +1 -0
  526. package/dist/lib/observability/mcp-semconv-constants.d.ts +98 -0
  527. package/dist/lib/observability/mcp-semconv-constants.d.ts.map +1 -0
  528. package/dist/lib/observability/mcp-semconv-constants.js +102 -0
  529. package/dist/lib/observability/mcp-semconv-constants.js.map +1 -0
  530. package/dist/lib/observability/mcp-semconv.d.ts +37 -0
  531. package/dist/lib/observability/mcp-semconv.d.ts.map +1 -0
  532. package/dist/lib/observability/mcp-semconv.js +87 -0
  533. package/dist/lib/observability/mcp-semconv.js.map +1 -0
  534. package/dist/lib/observability/mcp-semconv.test.d.ts +2 -0
  535. package/dist/lib/observability/mcp-semconv.test.d.ts.map +1 -0
  536. package/dist/lib/observability/mcp-semconv.test.js +168 -0
  537. package/dist/lib/observability/mcp-semconv.test.js.map +1 -0
  538. package/dist/lib/observability/metrics.d.ts +100 -0
  539. package/dist/lib/observability/metrics.d.ts.map +1 -0
  540. package/dist/lib/observability/metrics.js +429 -0
  541. package/dist/lib/observability/metrics.js.map +1 -0
  542. package/dist/lib/observability/metrics.test.d.ts +5 -0
  543. package/dist/lib/observability/metrics.test.d.ts.map +1 -0
  544. package/dist/lib/observability/metrics.test.js +191 -0
  545. package/dist/lib/observability/metrics.test.js.map +1 -0
  546. package/dist/lib/observability/observability-test-constants.d.ts +34 -0
  547. package/dist/lib/observability/observability-test-constants.d.ts.map +1 -0
  548. package/dist/lib/observability/observability-test-constants.js +55 -0
  549. package/dist/lib/observability/observability-test-constants.js.map +1 -0
  550. package/dist/lib/observability/opentelemetry-resources.test.d.ts +2 -0
  551. package/dist/lib/observability/opentelemetry-resources.test.d.ts.map +1 -0
  552. package/dist/lib/observability/opentelemetry-resources.test.js +19 -0
  553. package/dist/lib/observability/opentelemetry-resources.test.js.map +1 -0
  554. package/dist/lib/observability/parse-stats.d.ts +119 -0
  555. package/dist/lib/observability/parse-stats.d.ts.map +1 -0
  556. package/dist/lib/observability/parse-stats.js +207 -0
  557. package/dist/lib/observability/parse-stats.js.map +1 -0
  558. package/dist/lib/observability/parse-stats.test.d.ts +5 -0
  559. package/dist/lib/observability/parse-stats.test.d.ts.map +1 -0
  560. package/dist/lib/observability/parse-stats.test.js +287 -0
  561. package/dist/lib/observability/parse-stats.test.js.map +1 -0
  562. package/dist/lib/observability/render-trace-tree.d.ts +31 -0
  563. package/dist/lib/observability/render-trace-tree.d.ts.map +1 -0
  564. package/dist/lib/observability/render-trace-tree.js +95 -0
  565. package/dist/lib/observability/render-trace-tree.js.map +1 -0
  566. package/dist/lib/observability/render-trace-tree.test.d.ts +5 -0
  567. package/dist/lib/observability/render-trace-tree.test.d.ts.map +1 -0
  568. package/dist/lib/observability/render-trace-tree.test.js +97 -0
  569. package/dist/lib/observability/render-trace-tree.test.js.map +1 -0
  570. package/dist/lib/observability/span-attributes.d.ts +27 -0
  571. package/dist/lib/observability/span-attributes.d.ts.map +1 -0
  572. package/dist/lib/observability/span-attributes.js +85 -0
  573. package/dist/lib/observability/span-attributes.js.map +1 -0
  574. package/dist/lib/observability/trace-anomaly-detector.d.ts +23 -0
  575. package/dist/lib/observability/trace-anomaly-detector.d.ts.map +1 -0
  576. package/dist/lib/observability/trace-anomaly-detector.js +211 -0
  577. package/dist/lib/observability/trace-anomaly-detector.js.map +1 -0
  578. package/dist/lib/observability/trace-anomaly-detector.test.d.ts +5 -0
  579. package/dist/lib/observability/trace-anomaly-detector.test.d.ts.map +1 -0
  580. package/dist/lib/observability/trace-anomaly-detector.test.js +224 -0
  581. package/dist/lib/observability/trace-anomaly-detector.test.js.map +1 -0
  582. package/dist/lib/observability/trace-anomaly-schemas.d.ts +189 -0
  583. package/dist/lib/observability/trace-anomaly-schemas.d.ts.map +1 -0
  584. package/dist/lib/observability/trace-anomaly-schemas.js +167 -0
  585. package/dist/lib/observability/trace-anomaly-schemas.js.map +1 -0
  586. package/dist/lib/privacy/content-redaction.d.ts +141 -0
  587. package/dist/lib/privacy/content-redaction.d.ts.map +1 -0
  588. package/dist/lib/privacy/content-redaction.js +210 -0
  589. package/dist/lib/privacy/content-redaction.js.map +1 -0
  590. package/dist/lib/privacy/content-redaction.test.d.ts +2 -0
  591. package/dist/lib/privacy/content-redaction.test.d.ts.map +1 -0
  592. package/dist/lib/privacy/content-redaction.test.js +302 -0
  593. package/dist/lib/privacy/content-redaction.test.js.map +1 -0
  594. package/dist/lib/quality/bucket-utils.d.ts +17 -0
  595. package/dist/lib/quality/bucket-utils.d.ts.map +1 -0
  596. package/dist/lib/quality/bucket-utils.js +31 -0
  597. package/dist/lib/quality/bucket-utils.js.map +1 -0
  598. package/dist/lib/quality/bucket-utils.test.d.ts +2 -0
  599. package/dist/lib/quality/bucket-utils.test.d.ts.map +1 -0
  600. package/dist/lib/quality/bucket-utils.test.js +42 -0
  601. package/dist/lib/quality/bucket-utils.test.js.map +1 -0
  602. package/dist/lib/quality/qfe-backtest-detail.test.d.ts +5 -0
  603. package/dist/lib/quality/qfe-backtest-detail.test.d.ts.map +1 -0
  604. package/dist/lib/quality/qfe-backtest-detail.test.js +179 -0
  605. package/dist/lib/quality/qfe-backtest-detail.test.js.map +1 -0
  606. package/dist/lib/quality/qfe-calibration-paths.test.d.ts +5 -0
  607. package/dist/lib/quality/qfe-calibration-paths.test.d.ts.map +1 -0
  608. package/dist/lib/quality/qfe-calibration-paths.test.js +203 -0
  609. package/dist/lib/quality/qfe-calibration-paths.test.js.map +1 -0
  610. package/dist/lib/quality/qfe-correlation-helpers.test.d.ts +6 -0
  611. package/dist/lib/quality/qfe-correlation-helpers.test.d.ts.map +1 -0
  612. package/dist/lib/quality/qfe-correlation-helpers.test.js +143 -0
  613. package/dist/lib/quality/qfe-correlation-helpers.test.js.map +1 -0
  614. package/dist/lib/quality/qfe-cqi-paths.test.d.ts +6 -0
  615. package/dist/lib/quality/qfe-cqi-paths.test.d.ts.map +1 -0
  616. package/dist/lib/quality/qfe-cqi-paths.test.js +231 -0
  617. package/dist/lib/quality/qfe-cqi-paths.test.js.map +1 -0
  618. package/dist/lib/quality/qfe-critic-internals.test.d.ts +6 -0
  619. package/dist/lib/quality/qfe-critic-internals.test.d.ts.map +1 -0
  620. package/dist/lib/quality/qfe-critic-internals.test.js +191 -0
  621. package/dist/lib/quality/qfe-critic-internals.test.js.map +1 -0
  622. package/dist/lib/quality/qfe-derived-paths.test.d.ts +2 -0
  623. package/dist/lib/quality/qfe-derived-paths.test.d.ts.map +1 -0
  624. package/dist/lib/quality/qfe-derived-paths.test.js +372 -0
  625. package/dist/lib/quality/qfe-derived-paths.test.js.map +1 -0
  626. package/dist/lib/quality/qfe-dynamics-paths.test.d.ts +8 -0
  627. package/dist/lib/quality/qfe-dynamics-paths.test.d.ts.map +1 -0
  628. package/dist/lib/quality/qfe-dynamics-paths.test.js +223 -0
  629. package/dist/lib/quality/qfe-dynamics-paths.test.js.map +1 -0
  630. package/dist/lib/quality/qfe-granger-internals.test.d.ts +6 -0
  631. package/dist/lib/quality/qfe-granger-internals.test.d.ts.map +1 -0
  632. package/dist/lib/quality/qfe-granger-internals.test.js +158 -0
  633. package/dist/lib/quality/qfe-granger-internals.test.js.map +1 -0
  634. package/dist/lib/quality/qfe-label-normalize.test.d.ts +7 -0
  635. package/dist/lib/quality/qfe-label-normalize.test.d.ts.map +1 -0
  636. package/dist/lib/quality/qfe-label-normalize.test.js +332 -0
  637. package/dist/lib/quality/qfe-label-normalize.test.js.map +1 -0
  638. package/dist/lib/quality/qfe-ordinal-edge.test.d.ts +6 -0
  639. package/dist/lib/quality/qfe-ordinal-edge.test.d.ts.map +1 -0
  640. package/dist/lib/quality/qfe-ordinal-edge.test.js +98 -0
  641. package/dist/lib/quality/qfe-ordinal-edge.test.js.map +1 -0
  642. package/dist/lib/quality/qfe-roles-detail.test.d.ts +5 -0
  643. package/dist/lib/quality/qfe-roles-detail.test.d.ts.map +1 -0
  644. package/dist/lib/quality/qfe-roles-detail.test.js +115 -0
  645. package/dist/lib/quality/qfe-roles-detail.test.js.map +1 -0
  646. package/dist/lib/quality/qfe-rolling-detail.test.d.ts +7 -0
  647. package/dist/lib/quality/qfe-rolling-detail.test.d.ts.map +1 -0
  648. package/dist/lib/quality/qfe-rolling-detail.test.js +249 -0
  649. package/dist/lib/quality/qfe-rolling-detail.test.js.map +1 -0
  650. package/dist/lib/quality/qfe-stats-internals.test.d.ts +7 -0
  651. package/dist/lib/quality/qfe-stats-internals.test.d.ts.map +1 -0
  652. package/dist/lib/quality/qfe-stats-internals.test.js +143 -0
  653. package/dist/lib/quality/qfe-stats-internals.test.js.map +1 -0
  654. package/dist/lib/quality/qfe-streaming.test.d.ts +5 -0
  655. package/dist/lib/quality/qfe-streaming.test.d.ts.map +1 -0
  656. package/dist/lib/quality/qfe-streaming.test.js +239 -0
  657. package/dist/lib/quality/qfe-streaming.test.js.map +1 -0
  658. package/dist/lib/quality/qfe-sweep-detail.test.d.ts +6 -0
  659. package/dist/lib/quality/qfe-sweep-detail.test.d.ts.map +1 -0
  660. package/dist/lib/quality/qfe-sweep-detail.test.js +291 -0
  661. package/dist/lib/quality/qfe-sweep-detail.test.js.map +1 -0
  662. package/dist/lib/quality/quality-alerts.d.ts +23 -0
  663. package/dist/lib/quality/quality-alerts.d.ts.map +1 -0
  664. package/dist/lib/quality/quality-alerts.js +89 -0
  665. package/dist/lib/quality/quality-alerts.js.map +1 -0
  666. package/dist/lib/quality/quality-alerts.test.d.ts +2 -0
  667. package/dist/lib/quality/quality-alerts.test.d.ts.map +1 -0
  668. package/dist/lib/quality/quality-alerts.test.js +86 -0
  669. package/dist/lib/quality/quality-alerts.test.js.map +1 -0
  670. package/dist/lib/quality/quality-constants.d.ts +294 -0
  671. package/dist/lib/quality/quality-constants.d.ts.map +1 -0
  672. package/dist/lib/quality/quality-constants.js +335 -0
  673. package/dist/lib/quality/quality-constants.js.map +1 -0
  674. package/dist/lib/quality/quality-feature-engineering.d.ts +1071 -0
  675. package/dist/lib/quality/quality-feature-engineering.d.ts.map +1 -0
  676. package/dist/lib/quality/quality-feature-engineering.js +2076 -0
  677. package/dist/lib/quality/quality-feature-engineering.js.map +1 -0
  678. package/dist/lib/quality/quality-feature-engineering.test.d.ts +5 -0
  679. package/dist/lib/quality/quality-feature-engineering.test.d.ts.map +1 -0
  680. package/dist/lib/quality/quality-feature-engineering.test.js +2908 -0
  681. package/dist/lib/quality/quality-feature-engineering.test.js.map +1 -0
  682. package/dist/lib/quality/quality-metrics.d.ts +943 -0
  683. package/dist/lib/quality/quality-metrics.d.ts.map +1 -0
  684. package/dist/lib/quality/quality-metrics.js +1151 -0
  685. package/dist/lib/quality/quality-metrics.js.map +1 -0
  686. package/dist/lib/quality/quality-metrics.test.d.ts +5 -0
  687. package/dist/lib/quality/quality-metrics.test.d.ts.map +1 -0
  688. package/dist/lib/quality/quality-metrics.test.js +2766 -0
  689. package/dist/lib/quality/quality-metrics.test.js.map +1 -0
  690. package/dist/lib/quality/quality-multi-agent.d.ts +106 -0
  691. package/dist/lib/quality/quality-multi-agent.d.ts.map +1 -0
  692. package/dist/lib/quality/quality-multi-agent.js +124 -0
  693. package/dist/lib/quality/quality-multi-agent.js.map +1 -0
  694. package/dist/lib/quality/quality-multi-agent.test.d.ts +6 -0
  695. package/dist/lib/quality/quality-multi-agent.test.d.ts.map +1 -0
  696. package/dist/lib/quality/quality-multi-agent.test.js +163 -0
  697. package/dist/lib/quality/quality-multi-agent.test.js.map +1 -0
  698. package/dist/lib/quality/quality-sla.d.ts +35 -0
  699. package/dist/lib/quality/quality-sla.d.ts.map +1 -0
  700. package/dist/lib/quality/quality-sla.js +62 -0
  701. package/dist/lib/quality/quality-sla.js.map +1 -0
  702. package/dist/lib/quality/quality-sla.test.d.ts +5 -0
  703. package/dist/lib/quality/quality-sla.test.d.ts.map +1 -0
  704. package/dist/lib/quality/quality-sla.test.js +144 -0
  705. package/dist/lib/quality/quality-sla.test.js.map +1 -0
  706. package/dist/lib/quality/quality-test-constants.d.ts +23 -0
  707. package/dist/lib/quality/quality-test-constants.d.ts.map +1 -0
  708. package/dist/lib/quality/quality-test-constants.js +25 -0
  709. package/dist/lib/quality/quality-test-constants.js.map +1 -0
  710. package/dist/lib/quality/quality-trends.d.ts +101 -0
  711. package/dist/lib/quality/quality-trends.d.ts.map +1 -0
  712. package/dist/lib/quality/quality-trends.js +299 -0
  713. package/dist/lib/quality/quality-trends.js.map +1 -0
  714. package/dist/lib/quality/quality-trends.test.d.ts +6 -0
  715. package/dist/lib/quality/quality-trends.test.d.ts.map +1 -0
  716. package/dist/lib/quality/quality-trends.test.js +377 -0
  717. package/dist/lib/quality/quality-trends.test.js.map +1 -0
  718. package/dist/lib/quality/quality-views.d.ts +966 -0
  719. package/dist/lib/quality/quality-views.d.ts.map +1 -0
  720. package/dist/lib/quality/quality-views.js +367 -0
  721. package/dist/lib/quality/quality-views.js.map +1 -0
  722. package/dist/lib/quality/quality-views.test.d.ts +6 -0
  723. package/dist/lib/quality/quality-views.test.d.ts.map +1 -0
  724. package/dist/lib/quality/quality-views.test.js +262 -0
  725. package/dist/lib/quality/quality-views.test.js.map +1 -0
  726. package/dist/lib/quality/quality-visualization.d.ts +112 -0
  727. package/dist/lib/quality/quality-visualization.d.ts.map +1 -0
  728. package/dist/lib/quality/quality-visualization.js +136 -0
  729. package/dist/lib/quality/quality-visualization.js.map +1 -0
  730. package/dist/lib/quality/quality-visualization.test.d.ts +5 -0
  731. package/dist/lib/quality/quality-visualization.test.d.ts.map +1 -0
  732. package/dist/lib/quality/quality-visualization.test.js +189 -0
  733. package/dist/lib/quality/quality-visualization.test.js.map +1 -0
  734. package/dist/lib/resilience/cache.d.ts +56 -0
  735. package/dist/lib/resilience/cache.d.ts.map +1 -0
  736. package/dist/lib/resilience/cache.js +96 -0
  737. package/dist/lib/resilience/cache.js.map +1 -0
  738. package/dist/lib/resilience/cache.test.d.ts.map +1 -0
  739. package/dist/lib/{cache.test.js → resilience/cache.test.js} +21 -20
  740. package/dist/lib/resilience/cache.test.js.map +1 -0
  741. package/dist/lib/resilience/circuit-breaker.d.ts +147 -0
  742. package/dist/lib/resilience/circuit-breaker.d.ts.map +1 -0
  743. package/dist/lib/resilience/circuit-breaker.js +251 -0
  744. package/dist/lib/resilience/circuit-breaker.js.map +1 -0
  745. package/dist/lib/resilience/circuit-breaker.test.d.ts.map +1 -0
  746. package/dist/lib/{circuit-breaker.test.js → resilience/circuit-breaker.test.js} +29 -26
  747. package/dist/lib/resilience/circuit-breaker.test.js.map +1 -0
  748. package/dist/lib/{toon-encoder.d.ts → resilience/toon-encoder.d.ts} +6 -1
  749. package/dist/lib/resilience/toon-encoder.d.ts.map +1 -0
  750. package/dist/lib/{toon-encoder.js → resilience/toon-encoder.js} +7 -2
  751. package/dist/lib/resilience/toon-encoder.js.map +1 -0
  752. package/dist/lib/resilience/toon-encoder.test.d.ts.map +1 -0
  753. package/dist/lib/{toon-encoder.test.js → resilience/toon-encoder.test.js} +7 -6
  754. package/dist/lib/resilience/toon-encoder.test.js.map +1 -0
  755. package/dist/lib/testing/mock-llm-builder.d.ts +139 -0
  756. package/dist/lib/testing/mock-llm-builder.d.ts.map +1 -0
  757. package/dist/lib/testing/mock-llm-builder.js +254 -0
  758. package/dist/lib/testing/mock-llm-builder.js.map +1 -0
  759. package/dist/lib/testing/mock-llm-builder.test.d.ts +5 -0
  760. package/dist/lib/testing/mock-llm-builder.test.d.ts.map +1 -0
  761. package/dist/lib/testing/mock-llm-builder.test.js +304 -0
  762. package/dist/lib/testing/mock-llm-builder.test.js.map +1 -0
  763. package/dist/lib/validation/api-schemas.d.ts +705 -0
  764. package/dist/lib/validation/api-schemas.d.ts.map +1 -0
  765. package/dist/lib/validation/api-schemas.js +351 -0
  766. package/dist/lib/validation/api-schemas.js.map +1 -0
  767. package/dist/lib/validation/api-schemas.test.d.ts +5 -0
  768. package/dist/lib/validation/api-schemas.test.d.ts.map +1 -0
  769. package/dist/lib/validation/api-schemas.test.js +427 -0
  770. package/dist/lib/validation/api-schemas.test.js.map +1 -0
  771. package/dist/lib/validation/dashboard-schemas.d.ts +203 -0
  772. package/dist/lib/validation/dashboard-schemas.d.ts.map +1 -0
  773. package/dist/lib/validation/dashboard-schemas.js +186 -0
  774. package/dist/lib/validation/dashboard-schemas.js.map +1 -0
  775. package/dist/lib/validation/dashboard-schemas.test.d.ts +5 -0
  776. package/dist/lib/validation/dashboard-schemas.test.d.ts.map +1 -0
  777. package/dist/lib/validation/dashboard-schemas.test.js +353 -0
  778. package/dist/lib/validation/dashboard-schemas.test.js.map +1 -0
  779. package/dist/server.d.ts +7 -1
  780. package/dist/server.d.ts.map +1 -1
  781. package/dist/server.js +172 -102
  782. package/dist/server.js.map +1 -1
  783. package/dist/server.test.js +102 -95
  784. package/dist/server.test.js.map +1 -1
  785. package/dist/test-helpers/assertions.d.ts +6 -0
  786. package/dist/test-helpers/assertions.d.ts.map +1 -0
  787. package/dist/test-helpers/assertions.js +11 -0
  788. package/dist/test-helpers/assertions.js.map +1 -0
  789. package/dist/test-helpers/env-utils.d.ts +0 -64
  790. package/dist/test-helpers/env-utils.d.ts.map +1 -1
  791. package/dist/test-helpers/env-utils.js +0 -100
  792. package/dist/test-helpers/env-utils.js.map +1 -1
  793. package/dist/test-helpers/fuzz-generators.d.ts.map +1 -1
  794. package/dist/test-helpers/fuzz-generators.js +62 -22
  795. package/dist/test-helpers/fuzz-generators.js.map +1 -1
  796. package/dist/test-helpers/index.d.ts +3 -2
  797. package/dist/test-helpers/index.d.ts.map +1 -1
  798. package/dist/test-helpers/index.js +4 -2
  799. package/dist/test-helpers/index.js.map +1 -1
  800. package/dist/test-helpers/memfs-utils.test.js +81 -76
  801. package/dist/test-helpers/memfs-utils.test.js.map +1 -1
  802. package/dist/test-helpers/mock-backends.d.ts +19 -17
  803. package/dist/test-helpers/mock-backends.d.ts.map +1 -1
  804. package/dist/test-helpers/mock-backends.js +16 -4
  805. package/dist/test-helpers/mock-backends.js.map +1 -1
  806. package/dist/test-helpers/mock-backends.test.js +43 -112
  807. package/dist/test-helpers/mock-backends.test.js.map +1 -1
  808. package/dist/test-helpers/race-condition-helpers.d.ts.map +1 -1
  809. package/dist/test-helpers/race-condition-helpers.js +3 -2
  810. package/dist/test-helpers/race-condition-helpers.js.map +1 -1
  811. package/dist/test-helpers/schema-validators.d.ts +2 -2
  812. package/dist/test-helpers/schema-validators.d.ts.map +1 -1
  813. package/dist/test-helpers/schema-validators.js +35 -31
  814. package/dist/test-helpers/schema-validators.js.map +1 -1
  815. package/dist/test-helpers/test-constants.d.ts +74 -0
  816. package/dist/test-helpers/test-constants.d.ts.map +1 -0
  817. package/dist/test-helpers/test-constants.js +78 -0
  818. package/dist/test-helpers/test-constants.js.map +1 -0
  819. package/dist/test-helpers/test-data-builders.d.ts +25 -7
  820. package/dist/test-helpers/test-data-builders.d.ts.map +1 -1
  821. package/dist/test-helpers/test-data-builders.js +32 -9
  822. package/dist/test-helpers/test-data-builders.js.map +1 -1
  823. package/dist/test-helpers/test-data-builders.test.js +116 -107
  824. package/dist/test-helpers/test-data-builders.test.js.map +1 -1
  825. package/dist/test-helpers/tool-validators.d.ts +1 -1
  826. package/dist/test-helpers/tool-validators.d.ts.map +1 -1
  827. package/dist/test-helpers/tool-validators.js +10 -10
  828. package/dist/test-helpers/tool-validators.js.map +1 -1
  829. package/dist/tools/audit-trail.d.ts +170 -0
  830. package/dist/tools/audit-trail.d.ts.map +1 -0
  831. package/dist/tools/audit-trail.js +109 -0
  832. package/dist/tools/audit-trail.js.map +1 -0
  833. package/dist/tools/audit-trail.test.d.ts +5 -0
  834. package/dist/tools/audit-trail.test.d.ts.map +1 -0
  835. package/dist/tools/audit-trail.test.js +122 -0
  836. package/dist/tools/audit-trail.test.js.map +1 -0
  837. package/dist/tools/context-stats.d.ts +6 -20
  838. package/dist/tools/context-stats.d.ts.map +1 -1
  839. package/dist/tools/context-stats.js +106 -90
  840. package/dist/tools/context-stats.js.map +1 -1
  841. package/dist/tools/context-stats.test.js +109 -60
  842. package/dist/tools/context-stats.test.js.map +1 -1
  843. package/dist/tools/detect-trace-anomalies.d.ts +123 -0
  844. package/dist/tools/detect-trace-anomalies.d.ts.map +1 -0
  845. package/dist/tools/detect-trace-anomalies.js +66 -0
  846. package/dist/tools/detect-trace-anomalies.js.map +1 -0
  847. package/dist/tools/estimate-cost.d.ts +77 -0
  848. package/dist/tools/estimate-cost.d.ts.map +1 -0
  849. package/dist/tools/estimate-cost.js +104 -0
  850. package/dist/tools/estimate-cost.js.map +1 -0
  851. package/dist/tools/estimate-cost.test.d.ts +5 -0
  852. package/dist/tools/estimate-cost.test.d.ts.map +1 -0
  853. package/dist/tools/estimate-cost.test.js +343 -0
  854. package/dist/tools/estimate-cost.test.js.map +1 -0
  855. package/dist/tools/export-base.d.ts +77 -0
  856. package/dist/tools/export-base.d.ts.map +1 -0
  857. package/dist/tools/export-base.js +150 -0
  858. package/dist/tools/export-base.js.map +1 -0
  859. package/dist/tools/export-base.test.d.ts +18 -0
  860. package/dist/tools/export-base.test.d.ts.map +1 -0
  861. package/dist/tools/export-base.test.js +220 -0
  862. package/dist/tools/export-base.test.js.map +1 -0
  863. package/dist/tools/export-confident.d.ts +149 -0
  864. package/dist/tools/export-confident.d.ts.map +1 -0
  865. package/dist/tools/export-confident.js +36 -0
  866. package/dist/tools/export-confident.js.map +1 -0
  867. package/dist/tools/export-confident.test.d.ts +7 -0
  868. package/dist/tools/export-confident.test.d.ts.map +1 -0
  869. package/dist/tools/export-confident.test.js +336 -0
  870. package/dist/tools/export-confident.test.js.map +1 -0
  871. package/dist/tools/export-datadog.d.ts +121 -0
  872. package/dist/tools/export-datadog.d.ts.map +1 -0
  873. package/dist/tools/export-datadog.js +158 -0
  874. package/dist/tools/export-datadog.js.map +1 -0
  875. package/dist/tools/export-datadog.test.d.ts +8 -0
  876. package/dist/tools/export-datadog.test.d.ts.map +1 -0
  877. package/dist/tools/export-datadog.test.js +376 -0
  878. package/dist/tools/export-datadog.test.js.map +1 -0
  879. package/dist/tools/export-jaeger.d.ts +100 -0
  880. package/dist/tools/export-jaeger.d.ts.map +1 -0
  881. package/dist/tools/export-jaeger.js +154 -0
  882. package/dist/tools/export-jaeger.js.map +1 -0
  883. package/dist/tools/export-jaeger.test.d.ts +2 -0
  884. package/dist/tools/export-jaeger.test.d.ts.map +1 -0
  885. package/dist/tools/export-jaeger.test.js +113 -0
  886. package/dist/tools/export-jaeger.test.js.map +1 -0
  887. package/dist/tools/export-langfuse.d.ts +135 -0
  888. package/dist/tools/export-langfuse.d.ts.map +1 -0
  889. package/dist/tools/export-langfuse.js +33 -0
  890. package/dist/tools/export-langfuse.js.map +1 -0
  891. package/dist/tools/export-langfuse.test.d.ts +7 -0
  892. package/dist/tools/export-langfuse.test.d.ts.map +1 -0
  893. package/dist/tools/export-langfuse.test.js +292 -0
  894. package/dist/tools/export-langfuse.test.js.map +1 -0
  895. package/dist/tools/export-phoenix.d.ts +170 -0
  896. package/dist/tools/export-phoenix.d.ts.map +1 -0
  897. package/dist/tools/export-phoenix.js +47 -0
  898. package/dist/tools/export-phoenix.js.map +1 -0
  899. package/dist/tools/export-phoenix.test.d.ts +7 -0
  900. package/dist/tools/export-phoenix.test.d.ts.map +1 -0
  901. package/dist/tools/export-phoenix.test.js +317 -0
  902. package/dist/tools/export-phoenix.test.js.map +1 -0
  903. package/dist/tools/get-trace-url.d.ts +2 -10
  904. package/dist/tools/get-trace-url.d.ts.map +1 -1
  905. package/dist/tools/get-trace-url.js +5 -8
  906. package/dist/tools/get-trace-url.js.map +1 -1
  907. package/dist/tools/get-trace-url.test.js +81 -399
  908. package/dist/tools/get-trace-url.test.js.map +1 -1
  909. package/dist/tools/hallucination-detection.d.ts +203 -0
  910. package/dist/tools/hallucination-detection.d.ts.map +1 -0
  911. package/dist/tools/hallucination-detection.js +189 -0
  912. package/dist/tools/hallucination-detection.js.map +1 -0
  913. package/dist/tools/hallucination-detection.test.d.ts +5 -0
  914. package/dist/tools/hallucination-detection.test.d.ts.map +1 -0
  915. package/dist/tools/hallucination-detection.test.js +529 -0
  916. package/dist/tools/hallucination-detection.test.js.map +1 -0
  917. package/dist/tools/health-check.d.ts +35 -16
  918. package/dist/tools/health-check.d.ts.map +1 -1
  919. package/dist/tools/health-check.js +101 -85
  920. package/dist/tools/health-check.js.map +1 -1
  921. package/dist/tools/health-check.test.js +72 -165
  922. package/dist/tools/health-check.test.js.map +1 -1
  923. package/dist/tools/index.d.ts +19 -0
  924. package/dist/tools/index.d.ts.map +1 -1
  925. package/dist/tools/index.js +19 -0
  926. package/dist/tools/index.js.map +1 -1
  927. package/dist/tools/ingest-constants.d.ts +8 -0
  928. package/dist/tools/ingest-constants.d.ts.map +1 -0
  929. package/dist/tools/ingest-constants.js +8 -0
  930. package/dist/tools/ingest-constants.js.map +1 -0
  931. package/dist/tools/ingest-spans.d.ts +45 -0
  932. package/dist/tools/ingest-spans.d.ts.map +1 -0
  933. package/dist/tools/ingest-spans.js +129 -0
  934. package/dist/tools/ingest-spans.js.map +1 -0
  935. package/dist/tools/ingest-spans.test.d.ts +5 -0
  936. package/dist/tools/ingest-spans.test.d.ts.map +1 -0
  937. package/dist/tools/ingest-spans.test.js +250 -0
  938. package/dist/tools/ingest-spans.test.js.map +1 -0
  939. package/dist/tools/ingest-traces.d.ts +76 -0
  940. package/dist/tools/ingest-traces.d.ts.map +1 -0
  941. package/dist/tools/ingest-traces.js +164 -0
  942. package/dist/tools/ingest-traces.js.map +1 -0
  943. package/dist/tools/ingest-traces.test.d.ts +5 -0
  944. package/dist/tools/ingest-traces.test.d.ts.map +1 -0
  945. package/dist/tools/ingest-traces.test.js +483 -0
  946. package/dist/tools/ingest-traces.test.js.map +1 -0
  947. package/dist/tools/inject-evaluations.d.ts +254 -0
  948. package/dist/tools/inject-evaluations.d.ts.map +1 -0
  949. package/dist/tools/inject-evaluations.js +133 -0
  950. package/dist/tools/inject-evaluations.js.map +1 -0
  951. package/dist/tools/inject-evaluations.test.d.ts +5 -0
  952. package/dist/tools/inject-evaluations.test.d.ts.map +1 -0
  953. package/dist/tools/inject-evaluations.test.js +371 -0
  954. package/dist/tools/inject-evaluations.test.js.map +1 -0
  955. package/dist/tools/manage-datasets.d.ts +850 -0
  956. package/dist/tools/manage-datasets.d.ts.map +1 -0
  957. package/dist/tools/manage-datasets.js +139 -0
  958. package/dist/tools/manage-datasets.js.map +1 -0
  959. package/dist/tools/manage-datasets.test.d.ts +5 -0
  960. package/dist/tools/manage-datasets.test.d.ts.map +1 -0
  961. package/dist/tools/manage-datasets.test.js +430 -0
  962. package/dist/tools/manage-datasets.test.js.map +1 -0
  963. package/dist/tools/multi-agent-coordination.d.ts +178 -0
  964. package/dist/tools/multi-agent-coordination.d.ts.map +1 -0
  965. package/dist/tools/multi-agent-coordination.js +270 -0
  966. package/dist/tools/multi-agent-coordination.js.map +1 -0
  967. package/dist/tools/multi-agent-coordination.test.d.ts +5 -0
  968. package/dist/tools/multi-agent-coordination.test.d.ts.map +1 -0
  969. package/dist/tools/multi-agent-coordination.test.js +530 -0
  970. package/dist/tools/multi-agent-coordination.test.js.map +1 -0
  971. package/dist/tools/query-evaluations.d.ts +154 -91
  972. package/dist/tools/query-evaluations.d.ts.map +1 -1
  973. package/dist/tools/query-evaluations.js +206 -169
  974. package/dist/tools/query-evaluations.js.map +1 -1
  975. package/dist/tools/query-evaluations.test.js +386 -391
  976. package/dist/tools/query-evaluations.test.js.map +1 -1
  977. package/dist/tools/query-llm-events.d.ts +100 -75
  978. package/dist/tools/query-llm-events.d.ts.map +1 -1
  979. package/dist/tools/query-llm-events.js +106 -80
  980. package/dist/tools/query-llm-events.js.map +1 -1
  981. package/dist/tools/query-llm-events.test.js +183 -346
  982. package/dist/tools/query-llm-events.test.js.map +1 -1
  983. package/dist/tools/query-logs.d.ts +45 -58
  984. package/dist/tools/query-logs.d.ts.map +1 -1
  985. package/dist/tools/query-logs.js +54 -101
  986. package/dist/tools/query-logs.js.map +1 -1
  987. package/dist/tools/query-logs.test.js +118 -314
  988. package/dist/tools/query-logs.test.js.map +1 -1
  989. package/dist/tools/query-metric-histograms.d.ts +112 -0
  990. package/dist/tools/query-metric-histograms.d.ts.map +1 -0
  991. package/dist/tools/query-metric-histograms.js +69 -0
  992. package/dist/tools/query-metric-histograms.js.map +1 -0
  993. package/dist/tools/query-metric-histograms.test.d.ts +5 -0
  994. package/dist/tools/query-metric-histograms.test.d.ts.map +1 -0
  995. package/dist/tools/query-metric-histograms.test.js +209 -0
  996. package/dist/tools/query-metric-histograms.test.js.map +1 -0
  997. package/dist/tools/query-metrics.d.ts +159 -60
  998. package/dist/tools/query-metrics.d.ts.map +1 -1
  999. package/dist/tools/query-metrics.js +133 -111
  1000. package/dist/tools/query-metrics.js.map +1 -1
  1001. package/dist/tools/query-metrics.test.js +314 -389
  1002. package/dist/tools/query-metrics.test.js.map +1 -1
  1003. package/dist/tools/query-regressions.d.ts +76 -0
  1004. package/dist/tools/query-regressions.d.ts.map +1 -0
  1005. package/dist/tools/query-regressions.js +122 -0
  1006. package/dist/tools/query-regressions.js.map +1 -0
  1007. package/dist/tools/query-regressions.test.d.ts +8 -0
  1008. package/dist/tools/query-regressions.test.d.ts.map +1 -0
  1009. package/dist/tools/query-regressions.test.js +129 -0
  1010. package/dist/tools/query-regressions.test.js.map +1 -0
  1011. package/dist/tools/query-traces.d.ts +103 -71
  1012. package/dist/tools/query-traces.d.ts.map +1 -1
  1013. package/dist/tools/query-traces.js +75 -106
  1014. package/dist/tools/query-traces.js.map +1 -1
  1015. package/dist/tools/query-traces.test.js +140 -846
  1016. package/dist/tools/query-traces.test.js.map +1 -1
  1017. package/dist/tools/query-verifications.d.ts +123 -0
  1018. package/dist/tools/query-verifications.d.ts.map +1 -0
  1019. package/dist/tools/query-verifications.js +102 -0
  1020. package/dist/tools/query-verifications.js.map +1 -0
  1021. package/dist/tools/query-verifications.test.d.ts +5 -0
  1022. package/dist/tools/query-verifications.test.d.ts.map +1 -0
  1023. package/dist/tools/query-verifications.test.js +163 -0
  1024. package/dist/tools/query-verifications.test.js.map +1 -0
  1025. package/dist/tools/routing-telemetry.d.ts +168 -0
  1026. package/dist/tools/routing-telemetry.d.ts.map +1 -0
  1027. package/dist/tools/routing-telemetry.js +267 -0
  1028. package/dist/tools/routing-telemetry.js.map +1 -0
  1029. package/dist/tools/routing-telemetry.test.d.ts +5 -0
  1030. package/dist/tools/routing-telemetry.test.d.ts.map +1 -0
  1031. package/dist/tools/routing-telemetry.test.js +747 -0
  1032. package/dist/tools/routing-telemetry.test.js.map +1 -0
  1033. package/dist/tools/setup-claudeignore.d.ts +4 -32
  1034. package/dist/tools/setup-claudeignore.d.ts.map +1 -1
  1035. package/dist/tools/setup-claudeignore.js +18 -22
  1036. package/dist/tools/setup-claudeignore.js.map +1 -1
  1037. package/dist/tools/setup-claudeignore.test.js +50 -49
  1038. package/dist/tools/setup-claudeignore.test.js.map +1 -1
  1039. package/dist/tools/token-budget.d.ts +170 -0
  1040. package/dist/tools/token-budget.d.ts.map +1 -0
  1041. package/dist/tools/token-budget.js +219 -0
  1042. package/dist/tools/token-budget.js.map +1 -0
  1043. package/dist/tools/token-budget.test.d.ts +5 -0
  1044. package/dist/tools/token-budget.test.d.ts.map +1 -0
  1045. package/dist/tools/token-budget.test.js +293 -0
  1046. package/dist/tools/token-budget.test.js.map +1 -0
  1047. package/package.json +76 -6
  1048. package/dist/backends/local-jsonl.test.d.ts +0 -2
  1049. package/dist/backends/local-jsonl.test.d.ts.map +0 -1
  1050. package/dist/backends/local-jsonl.test.js +0 -4651
  1051. package/dist/backends/local-jsonl.test.js.map +0 -1
  1052. package/dist/backends/signoz-api-circuit-breaker.test.d.ts +0 -6
  1053. package/dist/backends/signoz-api-circuit-breaker.test.d.ts.map +0 -1
  1054. package/dist/backends/signoz-api-circuit-breaker.test.js +0 -548
  1055. package/dist/backends/signoz-api-circuit-breaker.test.js.map +0 -1
  1056. package/dist/backends/signoz-api-rate-limiter.test.d.ts +0 -6
  1057. package/dist/backends/signoz-api-rate-limiter.test.d.ts.map +0 -1
  1058. package/dist/backends/signoz-api-rate-limiter.test.js +0 -389
  1059. package/dist/backends/signoz-api-rate-limiter.test.js.map +0 -1
  1060. package/dist/backends/signoz-api-ssrf.test.d.ts +0 -6
  1061. package/dist/backends/signoz-api-ssrf.test.d.ts.map +0 -1
  1062. package/dist/backends/signoz-api-ssrf.test.js +0 -216
  1063. package/dist/backends/signoz-api-ssrf.test.js.map +0 -1
  1064. package/dist/backends/signoz-api-test-helpers.d.ts +0 -80
  1065. package/dist/backends/signoz-api-test-helpers.d.ts.map +0 -1
  1066. package/dist/backends/signoz-api-test-helpers.js +0 -79
  1067. package/dist/backends/signoz-api-test-helpers.js.map +0 -1
  1068. package/dist/backends/signoz-api.d.ts +0 -95
  1069. package/dist/backends/signoz-api.d.ts.map +0 -1
  1070. package/dist/backends/signoz-api.integration.test.d.ts +0 -8
  1071. package/dist/backends/signoz-api.integration.test.d.ts.map +0 -1
  1072. package/dist/backends/signoz-api.integration.test.js +0 -137
  1073. package/dist/backends/signoz-api.integration.test.js.map +0 -1
  1074. package/dist/backends/signoz-api.js +0 -1016
  1075. package/dist/backends/signoz-api.js.map +0 -1
  1076. package/dist/backends/signoz-api.test.d.ts +0 -11
  1077. package/dist/backends/signoz-api.test.d.ts.map +0 -1
  1078. package/dist/backends/signoz-api.test.js +0 -831
  1079. package/dist/backends/signoz-api.test.js.map +0 -1
  1080. package/dist/lib/cache.d.ts +0 -77
  1081. package/dist/lib/cache.d.ts.map +0 -1
  1082. package/dist/lib/cache.js +0 -119
  1083. package/dist/lib/cache.js.map +0 -1
  1084. package/dist/lib/cache.test.d.ts.map +0 -1
  1085. package/dist/lib/cache.test.js.map +0 -1
  1086. package/dist/lib/circuit-breaker.d.ts +0 -83
  1087. package/dist/lib/circuit-breaker.d.ts.map +0 -1
  1088. package/dist/lib/circuit-breaker.js +0 -125
  1089. package/dist/lib/circuit-breaker.js.map +0 -1
  1090. package/dist/lib/circuit-breaker.test.d.ts.map +0 -1
  1091. package/dist/lib/circuit-breaker.test.js.map +0 -1
  1092. package/dist/lib/constants-symlink.test.d.ts.map +0 -1
  1093. package/dist/lib/constants-symlink.test.js.map +0 -1
  1094. package/dist/lib/constants.d.ts +0 -108
  1095. package/dist/lib/constants.d.ts.map +0 -1
  1096. package/dist/lib/constants.js +0 -350
  1097. package/dist/lib/constants.js.map +0 -1
  1098. package/dist/lib/constants.test.d.ts.map +0 -1
  1099. package/dist/lib/constants.test.js.map +0 -1
  1100. package/dist/lib/edge-cases.test.d.ts.map +0 -1
  1101. package/dist/lib/edge-cases.test.js.map +0 -1
  1102. package/dist/lib/error-sanitizer.d.ts.map +0 -1
  1103. package/dist/lib/error-sanitizer.js.map +0 -1
  1104. package/dist/lib/error-sanitizer.test.d.ts.map +0 -1
  1105. package/dist/lib/error-sanitizer.test.js.map +0 -1
  1106. package/dist/lib/error-types.d.ts.map +0 -1
  1107. package/dist/lib/error-types.js.map +0 -1
  1108. package/dist/lib/error-types.test.d.ts.map +0 -1
  1109. package/dist/lib/error-types.test.js.map +0 -1
  1110. package/dist/lib/file-utils.d.ts.map +0 -1
  1111. package/dist/lib/file-utils.js.map +0 -1
  1112. package/dist/lib/file-utils.test.d.ts.map +0 -1
  1113. package/dist/lib/file-utils.test.js.map +0 -1
  1114. package/dist/lib/indexer.d.ts +0 -96
  1115. package/dist/lib/indexer.d.ts.map +0 -1
  1116. package/dist/lib/indexer.js.map +0 -1
  1117. package/dist/lib/indexer.test.d.ts.map +0 -1
  1118. package/dist/lib/indexer.test.js.map +0 -1
  1119. package/dist/lib/input-validator.d.ts.map +0 -1
  1120. package/dist/lib/input-validator.fuzz.test.d.ts.map +0 -1
  1121. package/dist/lib/input-validator.fuzz.test.js.map +0 -1
  1122. package/dist/lib/input-validator.js.map +0 -1
  1123. package/dist/lib/input-validator.test.d.ts.map +0 -1
  1124. package/dist/lib/input-validator.test.js.map +0 -1
  1125. package/dist/lib/logger.d.ts.map +0 -1
  1126. package/dist/lib/logger.js +0 -81
  1127. package/dist/lib/logger.js.map +0 -1
  1128. package/dist/lib/logger.test.d.ts.map +0 -1
  1129. package/dist/lib/logger.test.js.map +0 -1
  1130. package/dist/lib/otlp-export.d.ts.map +0 -1
  1131. package/dist/lib/otlp-export.js.map +0 -1
  1132. package/dist/lib/query-sanitizer.d.ts.map +0 -1
  1133. package/dist/lib/query-sanitizer.js.map +0 -1
  1134. package/dist/lib/query-sanitizer.test.d.ts.map +0 -1
  1135. package/dist/lib/query-sanitizer.test.js.map +0 -1
  1136. package/dist/lib/server-utils.d.ts.map +0 -1
  1137. package/dist/lib/server-utils.js.map +0 -1
  1138. package/dist/lib/shared-schemas.d.ts +0 -81
  1139. package/dist/lib/shared-schemas.d.ts.map +0 -1
  1140. package/dist/lib/shared-schemas.js +0 -80
  1141. package/dist/lib/shared-schemas.js.map +0 -1
  1142. package/dist/lib/shared-schemas.test.d.ts.map +0 -1
  1143. package/dist/lib/shared-schemas.test.js.map +0 -1
  1144. package/dist/lib/toon-encoder.d.ts.map +0 -1
  1145. package/dist/lib/toon-encoder.js.map +0 -1
  1146. package/dist/lib/toon-encoder.test.d.ts.map +0 -1
  1147. package/dist/lib/toon-encoder.test.js.map +0 -1
  1148. package/dist/tools/signoz.integration.test.d.ts +0 -8
  1149. package/dist/tools/signoz.integration.test.d.ts.map +0 -1
  1150. package/dist/tools/signoz.integration.test.js +0 -141
  1151. package/dist/tools/signoz.integration.test.js.map +0 -1
  1152. /package/dist/lib/{constants-symlink.test.d.ts → core/constants-symlink.test.d.ts} +0 -0
  1153. /package/dist/lib/{constants.test.d.ts → core/constants.test.d.ts} +0 -0
  1154. /package/dist/lib/{edge-cases.test.d.ts → core/edge-cases.test.d.ts} +0 -0
  1155. /package/dist/lib/{file-utils.test.d.ts → core/file-utils.test.d.ts} +0 -0
  1156. /package/dist/lib/{input-validator.fuzz.test.d.ts → core/input-validator.fuzz.test.d.ts} +0 -0
  1157. /package/dist/lib/{input-validator.test.d.ts → core/input-validator.test.d.ts} +0 -0
  1158. /package/dist/lib/{logger.test.d.ts → core/logger.test.d.ts} +0 -0
  1159. /package/dist/lib/{logger.test.js → core/logger.test.js} +0 -0
  1160. /package/dist/lib/{shared-schemas.test.d.ts → core/shared-schemas.test.d.ts} +0 -0
  1161. /package/dist/lib/{error-sanitizer.test.d.ts → errors/error-sanitizer.test.d.ts} +0 -0
  1162. /package/dist/lib/{error-types.test.d.ts → errors/error-types.test.d.ts} +0 -0
  1163. /package/dist/lib/{query-sanitizer.d.ts → errors/query-sanitizer.d.ts} +0 -0
  1164. /package/dist/lib/{query-sanitizer.test.d.ts → errors/query-sanitizer.test.d.ts} +0 -0
  1165. /package/dist/lib/{indexer.test.d.ts → observability/indexer.test.d.ts} +0 -0
  1166. /package/dist/lib/{cache.test.d.ts → resilience/cache.test.d.ts} +0 -0
  1167. /package/dist/lib/{circuit-breaker.test.d.ts → resilience/circuit-breaker.test.d.ts} +0 -0
  1168. /package/dist/lib/{toon-encoder.test.d.ts → resilience/toon-encoder.test.d.ts} +0 -0
@@ -1,1016 +0,0 @@
1
- /**
2
- * SigNoz Cloud API backend for querying traces, metrics, and logs
3
- *
4
- * SigNoz has two separate endpoints:
5
- * - Ingest: https://ingest.{region}.signoz.cloud (OTLP for sending data)
6
- * - Query API: https://{tenant}.signoz.io or SIGNOZ_QUERY_URL (for reading data)
7
- *
8
- * This backend uses the Query API (v5) for reading telemetry data.
9
- *
10
- * ## TLS/HTTPS Security
11
- *
12
- * This backend enforces HTTPS-only connections (HTTP URLs are rejected).
13
- * Node.js `fetch()` uses the system certificate store by default, which
14
- * provides standard TLS certificate validation.
15
- *
16
- * For enterprise deployments requiring:
17
- * - **Custom CA certificates**: Set `NODE_EXTRA_CA_CERTS` environment variable
18
- * - **Certificate pinning**: Not currently supported; use network-level controls
19
- * - **Self-signed certificates**: Not recommended for production; use proper PKI
20
- *
21
- * @see https://nodejs.org/api/cli.html#node_extra_ca_certsfile
22
- */
23
- import { SIGNOZ_API_KEY, CIRCUIT_BREAKER, RATE_LIMITER, getSpanKind } from '../lib/constants.js';
24
- import { escapeFilterValueSafe, escapeLikeValueSafe, sanitizeIdentifier, } from '../lib/query-sanitizer.js';
25
- /**
26
- * Whitelist of safe path prefixes for backward compatibility
27
- * These are common patterns for SigNoz deployments and reverse proxies
28
- */
29
- const SAFE_PATH_PREFIXES = [
30
- '/v1/', // OTLP standard paths
31
- '/api/', // SigNoz API paths
32
- '/signoz/', // Common reverse proxy prefix
33
- '/query/', // Query service prefix
34
- ];
35
- /**
36
- * Validate and sanitize a URL to prevent SSRF attacks
37
- * Only allows HTTPS URLs to external hosts
38
- * Preserves whitelisted path prefixes for backward compatibility
39
- */
40
- function validateAndSanitizeUrl(url) {
41
- if (!url)
42
- return '';
43
- try {
44
- const parsed = new URL(url);
45
- // Only allow HTTPS protocol (prevent http://, file://, etc.)
46
- if (parsed.protocol !== 'https:') {
47
- console.error('[SECURITY] Invalid URL protocol - only HTTPS allowed');
48
- return '';
49
- }
50
- // Block internal/private network addresses (SSRF protection)
51
- const hostname = parsed.hostname.toLowerCase();
52
- // Normalize IPv6 for comparison (handles bracketed and various formats)
53
- // Strip zone IDs (e.g., fe80::1%eth0) to prevent SSRF bypass attempts
54
- const normalizedHost = hostname.replace(/^\[|\]$/g, '').split('%')[0];
55
- // Check for localhost variants (full 127.0.0.0/8 loopback range)
56
- if (normalizedHost === 'localhost' ||
57
- /^127\./.test(normalizedHost) || // Full 127.0.0.0/8 loopback range
58
- normalizedHost === '0.0.0.0' ||
59
- // IPv6 localhost variants
60
- normalizedHost === '::1' ||
61
- normalizedHost === '0:0:0:0:0:0:0:1' ||
62
- normalizedHost === '0000:0000:0000:0000:0000:0000:0000:0001' ||
63
- // IPv4-mapped IPv6 localhost (full loopback range)
64
- /^::ffff:127\./.test(normalizedHost) ||
65
- normalizedHost === '::ffff:7f00:1' ||
66
- // .localhost TLD (reserved for localhost)
67
- normalizedHost.endsWith('.localhost')) {
68
- console.error('[SECURITY] Localhost addresses not allowed for SigNoz URL');
69
- return '';
70
- }
71
- // Check for cloud metadata endpoints (169.254.0.0/16 link-local)
72
- // AWS: 169.254.169.254, GCP: 169.254.169.254, Azure: 169.254.169.254
73
- if (/^169\.254\./.test(normalizedHost) ||
74
- /^::ffff:169\.254\./.test(normalizedHost)) {
75
- console.error('[SECURITY] Cloud metadata addresses not allowed for SigNoz URL');
76
- return '';
77
- }
78
- // Check for private network ranges
79
- if (normalizedHost.startsWith('192.168.') ||
80
- normalizedHost.startsWith('10.') ||
81
- /^172\.(1[6-9]|2[0-9]|3[0-1])\./.test(normalizedHost) ||
82
- // IPv6 private ranges
83
- normalizedHost.startsWith('fc') || // Unique local addresses fc00::/7
84
- normalizedHost.startsWith('fd') || // Unique local addresses
85
- normalizedHost.startsWith('fe80') || // Link-local addresses
86
- // IPv4-mapped private ranges
87
- normalizedHost.startsWith('::ffff:192.168.') ||
88
- normalizedHost.startsWith('::ffff:10.') ||
89
- /^::ffff:172\.(1[6-9]|2[0-9]|3[0-1])\./.test(normalizedHost)) {
90
- console.error('[SECURITY] Private network addresses not allowed for SigNoz URL');
91
- return '';
92
- }
93
- // Check for reserved domain suffixes
94
- if (normalizedHost.endsWith('.local') ||
95
- normalizedHost.endsWith('.internal') ||
96
- normalizedHost.endsWith('.localdomain') ||
97
- normalizedHost.endsWith('.home.arpa') // RFC 8375 home network
98
- ) {
99
- console.error('[SECURITY] Reserved domain names not allowed for SigNoz URL');
100
- return '';
101
- }
102
- // Check if path starts with a whitelisted prefix
103
- const path = parsed.pathname;
104
- const hasWhitelistedPath = SAFE_PATH_PREFIXES.some(prefix => path.startsWith(prefix));
105
- if (hasWhitelistedPath) {
106
- // Preserve whitelisted path, but strip query params and fragment for safety
107
- return `${parsed.origin}${path}`;
108
- }
109
- // Return origin only for non-whitelisted paths (strips path, query, fragment)
110
- return parsed.origin;
111
- }
112
- catch (error) {
113
- console.error('[SECURITY] Invalid SIGNOZ_QUERY_URL format');
114
- return '';
115
- }
116
- }
117
- // SigNoz Query API URL (separate from ingest URL) - validated for SSRF protection
118
- const SIGNOZ_QUERY_URL = validateAndSanitizeUrl(process.env.SIGNOZ_QUERY_URL || '');
119
- function startTiming() {
120
- const start = performance.now();
121
- return {
122
- end: () => performance.now() - start
123
- };
124
- }
125
- const SLOW_QUERY_THRESHOLD_MS = 500;
126
- /** Maximum hours ago for timestamp queries (1 year) */
127
- const MAX_HOURS_AGO = 8760;
128
- /** Default timeout for HTTP requests (30 seconds) */
129
- const DEFAULT_TIMEOUT_MS = 30000;
130
- /**
131
- * Token bucket rate limiter to prevent API abuse
132
- * Allows burst traffic up to maxTokens, then refills at refillRate tokens/second
133
- */
134
- export class TokenBucketRateLimiter {
135
- tokens;
136
- lastRefill;
137
- maxTokens;
138
- refillRate;
139
- constructor(maxTokens, refillRate) {
140
- this.maxTokens = maxTokens ?? RATE_LIMITER.MAX_TOKENS;
141
- this.refillRate = refillRate ?? RATE_LIMITER.REFILL_RATE;
142
- this.tokens = this.maxTokens;
143
- this.lastRefill = Date.now();
144
- }
145
- /**
146
- * Refill tokens based on elapsed time
147
- * H1: Cap elapsed time to prevent precision loss in long-running processes
148
- */
149
- refill() {
150
- const now = Date.now();
151
- // Cap elapsed time to maxTokens/refillRate seconds (time to fully refill bucket)
152
- // This prevents precision issues with very large elapsed times
153
- const maxUsefulElapsedMs = (this.maxTokens / this.refillRate) * 1000;
154
- const elapsedMs = Math.min(now - this.lastRefill, maxUsefulElapsedMs);
155
- const tokensToAdd = Math.floor((elapsedMs / 1000) * this.refillRate);
156
- if (tokensToAdd > 0) {
157
- this.tokens = Math.min(this.maxTokens, this.tokens + tokensToAdd);
158
- this.lastRefill = now;
159
- }
160
- }
161
- /**
162
- * Try to consume a token. Returns true if allowed, false if rate limited.
163
- */
164
- tryConsume() {
165
- this.refill();
166
- if (this.tokens > 0) {
167
- this.tokens--;
168
- return true;
169
- }
170
- console.warn(`[obs-toolkit] Rate limit exceeded (0/${this.maxTokens} tokens available)`);
171
- return false;
172
- }
173
- /**
174
- * Get current available tokens (for monitoring/testing)
175
- */
176
- getAvailableTokens() {
177
- this.refill();
178
- return this.tokens;
179
- }
180
- /**
181
- * Refund a single token (used when request is rejected by circuit breaker)
182
- * This prevents the circuit breaker from consuming rate limit tokens for requests it blocks
183
- */
184
- refund() {
185
- this.tokens = Math.min(this.maxTokens, this.tokens + 1);
186
- }
187
- /**
188
- * Reset the rate limiter to full capacity (for testing only)
189
- */
190
- reset() {
191
- this.tokens = this.maxTokens;
192
- this.lastRefill = Date.now();
193
- }
194
- }
195
- /**
196
- * Simple circuit breaker for API calls with integrated rate limiting
197
- */
198
- class ApiCircuitBreaker {
199
- failures = 0;
200
- lastFailure = 0;
201
- state = 'closed';
202
- rateLimiter;
203
- /** Prevents multiple concurrent requests during half-open state */
204
- halfOpenRequestInFlight = false;
205
- maxFailures;
206
- resetMs;
207
- constructor() {
208
- this.maxFailures = CIRCUIT_BREAKER.MAX_FAILURES;
209
- this.resetMs = CIRCUIT_BREAKER.RESET_MS;
210
- this.rateLimiter = new TokenBucketRateLimiter();
211
- }
212
- canRequest() {
213
- // Check rate limit first
214
- if (!this.rateLimiter.tryConsume()) {
215
- return false;
216
- }
217
- if (this.state === 'open') {
218
- if (Date.now() - this.lastFailure > this.resetMs) {
219
- // Prevent race condition: only allow one request through during half-open
220
- if (this.halfOpenRequestInFlight) {
221
- this.rateLimiter.refund();
222
- return false; // Another half-open request is already testing
223
- }
224
- this.halfOpenRequestInFlight = true;
225
- console.info(`[obs-toolkit] Circuit breaker entering HALF-OPEN state (reset timeout elapsed)`);
226
- this.state = 'half-open';
227
- return true;
228
- }
229
- // Refund the single consumed token since we're not making the request
230
- this.rateLimiter.refund();
231
- return false;
232
- }
233
- // In half-open state, reject if a request is already in flight
234
- if (this.state === 'half-open' && this.halfOpenRequestInFlight) {
235
- this.rateLimiter.refund();
236
- return false;
237
- }
238
- return true;
239
- }
240
- recordSuccess() {
241
- this.halfOpenRequestInFlight = false;
242
- if (this.state === 'half-open') {
243
- console.info(`[obs-toolkit] Circuit breaker CLOSED after successful request`);
244
- }
245
- this.failures = 0;
246
- this.state = 'closed';
247
- }
248
- recordFailure() {
249
- this.halfOpenRequestInFlight = false;
250
- this.failures++;
251
- this.lastFailure = Date.now();
252
- if (this.failures >= this.maxFailures && this.state !== 'open') {
253
- const previousState = this.state;
254
- this.state = 'open';
255
- console.warn(`[obs-toolkit] Circuit breaker OPENED after ${this.failures} consecutive failures (was: ${previousState})`);
256
- }
257
- }
258
- getState() {
259
- return this.state;
260
- }
261
- /**
262
- * Check if rate limited (for health check reporting)
263
- */
264
- isRateLimited() {
265
- return this.rateLimiter.getAvailableTokens() === 0;
266
- }
267
- /**
268
- * Get available tokens (for monitoring)
269
- */
270
- getAvailableTokens() {
271
- return this.rateLimiter.getAvailableTokens();
272
- }
273
- }
274
- /**
275
- * Encode cursor data to opaque base64 string
276
- */
277
- function encodeCursor(data) {
278
- return Buffer.from(JSON.stringify(data)).toString('base64');
279
- }
280
- /**
281
- * Decode cursor from base64 string, returns null on invalid cursor
282
- */
283
- function decodeCursor(cursor) {
284
- try {
285
- const decoded = Buffer.from(cursor, 'base64').toString('utf-8');
286
- const data = JSON.parse(decoded);
287
- if (typeof data.ts !== 'number' || typeof data.offset !== 'number') {
288
- return null;
289
- }
290
- return data;
291
- }
292
- catch {
293
- console.warn('[obs-toolkit] Invalid pagination cursor, resetting to start');
294
- return null;
295
- }
296
- }
297
- export class SigNozApiBackend {
298
- name = 'signoz-api';
299
- baseUrl;
300
- apiKey;
301
- circuitBreaker = new ApiCircuitBreaker();
302
- constructor(baseUrl, apiKey) {
303
- // Use SIGNOZ_QUERY_URL for queries - must be explicitly set
304
- // Cannot be derived from ingest URL (different domain pattern)
305
- // Example: SIGNOZ_QUERY_URL=https://your-tenant.us.signoz.cloud
306
- // Validate URL to prevent SSRF attacks
307
- const queryUrl = baseUrl ? validateAndSanitizeUrl(baseUrl) : SIGNOZ_QUERY_URL;
308
- this.baseUrl = queryUrl.replace(/\/+$/, '');
309
- this.apiKey = apiKey || SIGNOZ_API_KEY;
310
- }
311
- async fetch(path, options) {
312
- if (!this.baseUrl || !this.apiKey) {
313
- throw new Error('SigNoz Query URL or API key not configured. Set SIGNOZ_QUERY_URL and SIGNOZ_API_KEY');
314
- }
315
- if (!this.circuitBreaker.canRequest()) {
316
- // canRequest() returns false for both rate limiting and circuit breaker
317
- // Check which one triggered the rejection
318
- if (this.circuitBreaker.getState() === 'open') {
319
- throw new Error('Circuit breaker open - SigNoz API unavailable');
320
- }
321
- throw new Error('Rate limit exceeded - too many requests');
322
- }
323
- const url = `${this.baseUrl}${path}`;
324
- const headers = {
325
- 'SIGNOZ-API-KEY': this.apiKey,
326
- 'Content-Type': 'application/json',
327
- };
328
- // Create AbortController for timeout
329
- const controller = new AbortController();
330
- const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS);
331
- try {
332
- const response = await fetch(url, {
333
- ...options,
334
- headers: { ...headers, ...options?.headers },
335
- signal: controller.signal,
336
- });
337
- clearTimeout(timeoutId);
338
- if (!response.ok) {
339
- // Security: sanitize error message to avoid leaking internal system information
340
- // Log full error server-side, return sanitized message to client
341
- const text = await response.text();
342
- console.error(`SigNoz API error (${response.status}): ${text}`);
343
- throw new Error(`SigNoz API error: ${response.status} - Request failed`);
344
- }
345
- this.circuitBreaker.recordSuccess();
346
- // Validate Content-Type before parsing JSON (headers may be absent in test mocks)
347
- const contentType = response.headers?.get?.('content-type');
348
- if (contentType && !contentType.includes('application/json')) {
349
- throw new Error(`SigNoz API returned unexpected Content-Type: ${contentType}`);
350
- }
351
- return response.json();
352
- }
353
- catch (error) {
354
- clearTimeout(timeoutId);
355
- this.circuitBreaker.recordFailure();
356
- // Convert AbortError to timeout error for clarity
357
- if (error instanceof Error && error.name === 'AbortError') {
358
- throw new Error(`SigNoz API request timeout after ${DEFAULT_TIMEOUT_MS}ms`);
359
- }
360
- throw error;
361
- }
362
- }
363
- /**
364
- * Get millisecond timestamp for SigNoz v5 API queries
365
- * @param dateStr - Optional date string to parse
366
- * @param defaultHoursAgo - Hours ago for default timestamp (max 8760 = 1 year)
367
- */
368
- getMillisTime(dateStr, defaultHoursAgo = 1) {
369
- if (dateStr) {
370
- return new Date(dateStr).getTime();
371
- }
372
- // Clamp defaultHoursAgo to prevent integer overflow (max 1 year)
373
- const clampedHours = Math.min(Math.max(0, defaultHoursAgo), MAX_HOURS_AGO);
374
- return Date.now() - clampedHours * 60 * 60 * 1000;
375
- }
376
- async queryTraces(options) {
377
- const timer = startTiming();
378
- const logTiming = () => {
379
- const durationMs = timer.end();
380
- if (durationMs > SLOW_QUERY_THRESHOLD_MS) {
381
- console.warn(`[obs-toolkit] Slow query: queryTraces took ${durationMs.toFixed(1)}ms`);
382
- }
383
- };
384
- const start = this.getMillisTime(options.startDate, 1);
385
- const end = this.getMillisTime(options.endDate ? options.endDate + 'T23:59:59Z' : undefined, 0);
386
- const limit = options.limit || 100;
387
- // Build filter expression with input validation and escaping
388
- const filterParts = [];
389
- if (options.traceId) {
390
- filterParts.push(`traceID = '${escapeFilterValueSafe(options.traceId, 'traceId')}'`);
391
- }
392
- if (options.serviceName) {
393
- filterParts.push(`serviceName = '${escapeFilterValueSafe(options.serviceName, 'serviceName')}'`);
394
- }
395
- if (options.spanName) {
396
- filterParts.push(`name LIKE '%${escapeLikeValueSafe(options.spanName, 'spanName')}%'`);
397
- }
398
- if (options.minDurationMs) {
399
- filterParts.push(`durationNano >= ${options.minDurationMs * 1_000_000}`);
400
- }
401
- if (options.maxDurationMs) {
402
- filterParts.push(`durationNano <= ${options.maxDurationMs * 1_000_000}`);
403
- }
404
- // Build v5 API payload using builder_query
405
- const body = {
406
- start,
407
- end,
408
- requestType: 'raw',
409
- compositeQuery: {
410
- queries: [{
411
- type: 'builder_query',
412
- spec: {
413
- name: 'A',
414
- signal: 'traces',
415
- stepInterval: 60,
416
- aggregations: [],
417
- filter: filterParts.length > 0 ? { expression: filterParts.join(' AND ') } : undefined,
418
- selectFields: [
419
- { name: 'traceID' },
420
- { name: 'spanID' },
421
- { name: 'parentSpanID' },
422
- { name: 'name' },
423
- { name: 'serviceName' },
424
- { name: 'kind' },
425
- { name: 'durationNano' },
426
- { name: 'statusCode' },
427
- { name: 'statusMessage' },
428
- ],
429
- order: [{ key: { name: 'timestamp' }, direction: 'desc' }],
430
- limit,
431
- offset: 0,
432
- disabled: false,
433
- },
434
- }],
435
- },
436
- };
437
- try {
438
- const response = await this.fetch('/api/v5/query_range', {
439
- method: 'POST',
440
- body: JSON.stringify(body),
441
- });
442
- const results = [];
443
- for (const result of response.data?.data?.results || []) {
444
- for (const row of result.rows || []) {
445
- const d = row.data || {};
446
- results.push({
447
- traceId: String(d.trace_id || d.traceID || ''),
448
- spanId: String(d.span_id || d.spanID || ''),
449
- parentSpanId: d.parent_span_id || d.parentSpanID ? String(d.parent_span_id || d.parentSpanID) : undefined,
450
- name: String(d.name || ''),
451
- kind: getSpanKind(d.kind !== undefined ? Number(d.kind) : undefined),
452
- startTimeUnixNano: row.timestamp ? new Date(row.timestamp).getTime() * 1_000_000 : 0,
453
- durationMs: Number(d.duration_nano || d.durationNano || 0) / 1_000_000,
454
- status: d.response_status_code ? { code: Number(d.response_status_code), message: '' } : undefined,
455
- attributes: { serviceName: String(d['service.name'] || d.serviceName || '') },
456
- });
457
- }
458
- }
459
- logTiming();
460
- return results;
461
- }
462
- catch (error) {
463
- logTiming();
464
- if (error instanceof Error && (error.message.includes('Circuit breaker') || error.message.includes('Rate limit'))) {
465
- return [];
466
- }
467
- throw error;
468
- }
469
- }
470
- async queryLogs(options) {
471
- const timer = startTiming();
472
- const logTiming = () => {
473
- const durationMs = timer.end();
474
- if (durationMs > SLOW_QUERY_THRESHOLD_MS) {
475
- console.warn(`[obs-toolkit] Slow query: queryLogs took ${durationMs.toFixed(1)}ms`);
476
- }
477
- };
478
- const start = this.getMillisTime(options.startDate, 1);
479
- const end = this.getMillisTime(options.endDate ? options.endDate + 'T23:59:59Z' : undefined, 0);
480
- const limit = options.limit || 100;
481
- // Build filter expression with input validation and escaping
482
- const filterParts = [];
483
- if (options.severity) {
484
- filterParts.push(`severity_text = '${escapeFilterValueSafe(options.severity.toUpperCase(), 'severity')}'`);
485
- }
486
- if (options.traceId) {
487
- filterParts.push(`trace_id = '${escapeFilterValueSafe(options.traceId, 'traceId')}'`);
488
- }
489
- if (options.search) {
490
- filterParts.push(`body LIKE '%${escapeLikeValueSafe(options.search, 'search')}%'`);
491
- }
492
- // Build v5 API payload
493
- const body = {
494
- start,
495
- end,
496
- requestType: 'raw',
497
- compositeQuery: {
498
- queries: [{
499
- type: 'builder_query',
500
- spec: {
501
- name: 'A',
502
- signal: 'logs',
503
- stepInterval: 60,
504
- aggregations: [],
505
- filter: filterParts.length > 0 ? { expression: filterParts.join(' AND ') } : undefined,
506
- selectFields: [
507
- { name: 'timestamp' },
508
- { name: 'severity_text' },
509
- { name: 'body' },
510
- { name: 'trace_id' },
511
- { name: 'span_id' },
512
- ],
513
- order: [{ key: { name: 'timestamp' }, direction: 'desc' }],
514
- limit,
515
- offset: 0,
516
- disabled: false,
517
- },
518
- }],
519
- },
520
- };
521
- try {
522
- const response = await this.fetch('/api/v5/query_range', {
523
- method: 'POST',
524
- body: JSON.stringify(body),
525
- });
526
- const results = [];
527
- for (const result of response.data?.data?.results || []) {
528
- for (const row of result.rows || []) {
529
- const d = row.data || {};
530
- results.push({
531
- timestamp: row.timestamp || new Date().toISOString(),
532
- severity: d.severity_text || 'INFO',
533
- body: d.body || '',
534
- traceId: d.trace_id,
535
- spanId: d.span_id,
536
- attributes: d.attributes_string || {},
537
- });
538
- }
539
- }
540
- logTiming();
541
- return results;
542
- }
543
- catch (error) {
544
- logTiming();
545
- if (error instanceof Error && (error.message.includes('Circuit breaker') || error.message.includes('Rate limit'))) {
546
- return [];
547
- }
548
- throw error;
549
- }
550
- }
551
- async queryMetrics(options) {
552
- const timer = startTiming();
553
- const logTiming = () => {
554
- const durationMs = timer.end();
555
- if (durationMs > SLOW_QUERY_THRESHOLD_MS) {
556
- console.warn(`[obs-toolkit] Slow query: queryMetrics took ${durationMs.toFixed(1)}ms`);
557
- }
558
- };
559
- const start = this.getMillisTime(options.startDate, 1);
560
- const end = this.getMillisTime(options.endDate ? options.endDate + 'T23:59:59Z' : undefined, 0);
561
- if (!options.metricName) {
562
- throw new Error('metricName is required for SigNoz metric queries');
563
- }
564
- // Sanitize metric name (identifiers allow alphanumeric, underscore, dot)
565
- const sanitizedMetricName = sanitizeIdentifier(options.metricName);
566
- if (!sanitizedMetricName) {
567
- throw new Error('Invalid metricName: must contain alphanumeric characters');
568
- }
569
- // Map aggregation options to SigNoz format
570
- // Percentiles: p50, p95, p99 map to SigNoz percentile functions
571
- // rate: maps to SigNoz rate aggregation
572
- const spaceAggMap = {
573
- 'sum': 'sum', 'avg': 'avg', 'min': 'min', 'max': 'max', 'count': 'sum',
574
- 'p50': 'p50', 'p95': 'p95', 'p99': 'p99', 'rate': 'rate',
575
- };
576
- const spaceAgg = spaceAggMap[options.aggregation || 'sum'] || 'sum';
577
- // Sanitize groupBy identifiers
578
- const sanitizedGroupBy = (options.groupBy || []).map(g => sanitizeIdentifier(g)).filter(g => g);
579
- // Build v5 API payload for metrics
580
- const body = {
581
- start,
582
- end,
583
- requestType: 'time_series',
584
- compositeQuery: {
585
- queries: [{
586
- type: 'builder_query',
587
- spec: {
588
- name: 'A',
589
- signal: 'metrics',
590
- stepInterval: 60,
591
- aggregations: [{
592
- metricName: sanitizedMetricName,
593
- timeAggregation: 'rate',
594
- spaceAggregation: spaceAgg,
595
- }],
596
- groupBy: sanitizedGroupBy.map(g => ({ name: g })),
597
- order: [],
598
- limit: options.limit || 100,
599
- offset: 0,
600
- disabled: false,
601
- },
602
- }],
603
- },
604
- };
605
- try {
606
- const response = await this.fetch('/api/v5/query_range', {
607
- method: 'POST',
608
- body: JSON.stringify(body),
609
- });
610
- const results = [];
611
- for (const result of response.data?.data?.results || []) {
612
- for (const agg of result.aggregations || []) {
613
- for (const series of agg.series || []) {
614
- for (const point of series.values || []) {
615
- results.push({
616
- timestamp: new Date(point.timestamp).toISOString(),
617
- name: options.metricName,
618
- value: point.value,
619
- attributes: series.labels,
620
- });
621
- }
622
- }
623
- }
624
- }
625
- logTiming();
626
- return results.slice(0, options.limit || 100);
627
- }
628
- catch (error) {
629
- logTiming();
630
- if (error instanceof Error && (error.message.includes('Circuit breaker') || error.message.includes('Rate limit'))) {
631
- return [];
632
- }
633
- throw error;
634
- }
635
- }
636
- /**
637
- * Query traces with cursor-based pagination
638
- */
639
- async queryTracesPaginated(options) {
640
- const limit = options.limit || 100;
641
- // Decode cursor if provided
642
- let cursorData = null;
643
- if (options.cursor) {
644
- cursorData = decodeCursor(options.cursor);
645
- }
646
- // Adjust start time based on cursor (query from last seen timestamp)
647
- const start = cursorData
648
- ? cursorData.ts
649
- : this.getMillisTime(options.startDate, 1);
650
- const end = this.getMillisTime(options.endDate ? options.endDate + 'T23:59:59Z' : undefined, 0);
651
- // Calculate offset based on cursor
652
- const offset = cursorData?.offset || options.offset || 0;
653
- // Build filter expression with input validation and escaping
654
- const filterParts = [];
655
- if (options.traceId) {
656
- filterParts.push(`traceID = '${escapeFilterValueSafe(options.traceId, 'traceId')}'`);
657
- }
658
- if (options.serviceName) {
659
- filterParts.push(`serviceName = '${escapeFilterValueSafe(options.serviceName, 'serviceName')}'`);
660
- }
661
- if (options.spanName) {
662
- filterParts.push(`name LIKE '%${escapeLikeValueSafe(options.spanName, 'spanName')}%'`);
663
- }
664
- if (options.minDurationMs) {
665
- filterParts.push(`durationNano >= ${options.minDurationMs * 1_000_000}`);
666
- }
667
- if (options.maxDurationMs) {
668
- filterParts.push(`durationNano <= ${options.maxDurationMs * 1_000_000}`);
669
- }
670
- // Request limit + 1 to detect if there are more results
671
- const requestLimit = limit + 1;
672
- // Build v5 API payload using builder_query
673
- const body = {
674
- start,
675
- end,
676
- requestType: 'raw',
677
- compositeQuery: {
678
- queries: [{
679
- type: 'builder_query',
680
- spec: {
681
- name: 'A',
682
- signal: 'traces',
683
- stepInterval: 60,
684
- aggregations: [],
685
- filter: filterParts.length > 0 ? { expression: filterParts.join(' AND ') } : undefined,
686
- selectFields: [
687
- { name: 'traceID' },
688
- { name: 'spanID' },
689
- { name: 'parentSpanID' },
690
- { name: 'name' },
691
- { name: 'serviceName' },
692
- { name: 'kind' },
693
- { name: 'durationNano' },
694
- { name: 'statusCode' },
695
- { name: 'statusMessage' },
696
- ],
697
- order: [{ key: { name: 'timestamp' }, direction: 'desc' }],
698
- limit: requestLimit,
699
- offset,
700
- disabled: false,
701
- },
702
- }],
703
- },
704
- };
705
- try {
706
- const response = await this.fetch('/api/v5/query_range', {
707
- method: 'POST',
708
- body: JSON.stringify(body),
709
- });
710
- const results = [];
711
- let lastTimestamp = 0;
712
- for (const result of response.data?.data?.results || []) {
713
- for (const row of result.rows || []) {
714
- const d = row.data || {};
715
- const ts = row.timestamp ? new Date(row.timestamp).getTime() : 0;
716
- lastTimestamp = ts;
717
- results.push({
718
- traceId: String(d.trace_id || d.traceID || ''),
719
- spanId: String(d.span_id || d.spanID || ''),
720
- parentSpanId: d.parent_span_id || d.parentSpanID ? String(d.parent_span_id || d.parentSpanID) : undefined,
721
- name: String(d.name || ''),
722
- kind: getSpanKind(d.kind !== undefined ? Number(d.kind) : undefined),
723
- startTimeUnixNano: ts * 1_000_000,
724
- durationMs: Number(d.duration_nano || d.durationNano || 0) / 1_000_000,
725
- status: d.response_status_code ? { code: Number(d.response_status_code), message: '' } : undefined,
726
- attributes: { serviceName: String(d['service.name'] || d.serviceName || '') },
727
- });
728
- }
729
- }
730
- // Determine if there are more results
731
- const hasMore = results.length > limit;
732
- const data = hasMore ? results.slice(0, limit) : results;
733
- // Generate next cursor if there are more results
734
- let nextCursor;
735
- if (hasMore && data.length > 0) {
736
- const lastItem = data[data.length - 1];
737
- const lastTs = lastItem.startTimeUnixNano / 1_000_000; // Convert back to ms
738
- nextCursor = encodeCursor({ ts: lastTs, offset: offset + limit });
739
- }
740
- return { data, nextCursor, hasMore };
741
- }
742
- catch (error) {
743
- if (error instanceof Error && (error.message.includes('Circuit breaker') || error.message.includes('Rate limit'))) {
744
- return { data: [], hasMore: false };
745
- }
746
- throw error;
747
- }
748
- }
749
- /**
750
- * Query logs with cursor-based pagination
751
- */
752
- async queryLogsPaginated(options) {
753
- const limit = options.limit || 100;
754
- // Decode cursor if provided
755
- let cursorData = null;
756
- if (options.cursor) {
757
- cursorData = decodeCursor(options.cursor);
758
- }
759
- // Adjust start time based on cursor (query from last seen timestamp)
760
- const start = cursorData
761
- ? cursorData.ts
762
- : this.getMillisTime(options.startDate, 1);
763
- const end = this.getMillisTime(options.endDate ? options.endDate + 'T23:59:59Z' : undefined, 0);
764
- // Calculate offset based on cursor
765
- const offset = cursorData?.offset || options.offset || 0;
766
- // Build filter expression with input validation and escaping
767
- const filterParts = [];
768
- if (options.severity) {
769
- filterParts.push(`severity_text = '${escapeFilterValueSafe(options.severity.toUpperCase(), 'severity')}'`);
770
- }
771
- if (options.traceId) {
772
- filterParts.push(`trace_id = '${escapeFilterValueSafe(options.traceId, 'traceId')}'`);
773
- }
774
- if (options.search) {
775
- filterParts.push(`body LIKE '%${escapeLikeValueSafe(options.search, 'search')}%'`);
776
- }
777
- // Request limit + 1 to detect if there are more results
778
- const requestLimit = limit + 1;
779
- // Build v5 API payload
780
- const body = {
781
- start,
782
- end,
783
- requestType: 'raw',
784
- compositeQuery: {
785
- queries: [{
786
- type: 'builder_query',
787
- spec: {
788
- name: 'A',
789
- signal: 'logs',
790
- stepInterval: 60,
791
- aggregations: [],
792
- filter: filterParts.length > 0 ? { expression: filterParts.join(' AND ') } : undefined,
793
- selectFields: [
794
- { name: 'timestamp' },
795
- { name: 'severity_text' },
796
- { name: 'body' },
797
- { name: 'trace_id' },
798
- { name: 'span_id' },
799
- ],
800
- order: [{ key: { name: 'timestamp' }, direction: 'desc' }],
801
- limit: requestLimit,
802
- offset,
803
- disabled: false,
804
- },
805
- }],
806
- },
807
- };
808
- try {
809
- const response = await this.fetch('/api/v5/query_range', {
810
- method: 'POST',
811
- body: JSON.stringify(body),
812
- });
813
- const results = [];
814
- let lastTimestamp = '';
815
- for (const result of response.data?.data?.results || []) {
816
- for (const row of result.rows || []) {
817
- const d = row.data || {};
818
- lastTimestamp = row.timestamp || new Date().toISOString();
819
- results.push({
820
- timestamp: lastTimestamp,
821
- severity: d.severity_text || 'INFO',
822
- body: d.body || '',
823
- traceId: d.trace_id,
824
- spanId: d.span_id,
825
- attributes: d.attributes_string || {},
826
- });
827
- }
828
- }
829
- // Determine if there are more results
830
- const hasMore = results.length > limit;
831
- const data = hasMore ? results.slice(0, limit) : results;
832
- // Generate next cursor if there are more results
833
- let nextCursor;
834
- if (hasMore && data.length > 0) {
835
- const lastItem = data[data.length - 1];
836
- const lastTs = new Date(lastItem.timestamp).getTime();
837
- nextCursor = encodeCursor({ ts: lastTs, offset: offset + limit });
838
- }
839
- return { data, nextCursor, hasMore };
840
- }
841
- catch (error) {
842
- if (error instanceof Error && (error.message.includes('Circuit breaker') || error.message.includes('Rate limit'))) {
843
- return { data: [], hasMore: false };
844
- }
845
- throw error;
846
- }
847
- }
848
- /**
849
- * Query metrics with cursor-based pagination
850
- */
851
- async queryMetricsPaginated(options) {
852
- const limit = options.limit || 100;
853
- // Decode cursor if provided
854
- let cursorData = null;
855
- if (options.cursor) {
856
- cursorData = decodeCursor(options.cursor);
857
- }
858
- // Adjust start time based on cursor
859
- const start = cursorData
860
- ? cursorData.ts
861
- : this.getMillisTime(options.startDate, 1);
862
- const end = this.getMillisTime(options.endDate ? options.endDate + 'T23:59:59Z' : undefined, 0);
863
- if (!options.metricName) {
864
- throw new Error('metricName is required for SigNoz metric queries');
865
- }
866
- // Sanitize metric name (identifiers allow alphanumeric, underscore, dot)
867
- const sanitizedMetricName = sanitizeIdentifier(options.metricName);
868
- if (!sanitizedMetricName) {
869
- throw new Error('Invalid metricName: must contain alphanumeric characters');
870
- }
871
- // Map aggregation options to SigNoz format
872
- // Percentiles: p50, p95, p99 map to SigNoz percentile functions
873
- // rate: maps to SigNoz rate aggregation
874
- const spaceAggMap = {
875
- 'sum': 'sum', 'avg': 'avg', 'min': 'min', 'max': 'max', 'count': 'sum',
876
- 'p50': 'p50', 'p95': 'p95', 'p99': 'p99', 'rate': 'rate',
877
- };
878
- const spaceAgg = spaceAggMap[options.aggregation || 'sum'] || 'sum';
879
- // Sanitize groupBy identifiers
880
- const sanitizedGroupBy = (options.groupBy || []).map(g => sanitizeIdentifier(g)).filter(g => g);
881
- // Calculate offset based on cursor
882
- const offset = cursorData?.offset || options.offset || 0;
883
- // Request limit + 1 to detect if there are more results
884
- const requestLimit = limit + 1;
885
- // Build v5 API payload for metrics
886
- const body = {
887
- start,
888
- end,
889
- requestType: 'time_series',
890
- compositeQuery: {
891
- queries: [{
892
- type: 'builder_query',
893
- spec: {
894
- name: 'A',
895
- signal: 'metrics',
896
- stepInterval: 60,
897
- aggregations: [{
898
- metricName: sanitizedMetricName,
899
- timeAggregation: 'rate',
900
- spaceAggregation: spaceAgg,
901
- }],
902
- groupBy: sanitizedGroupBy.map(g => ({ name: g })),
903
- order: [],
904
- limit: requestLimit,
905
- offset,
906
- disabled: false,
907
- },
908
- }],
909
- },
910
- };
911
- try {
912
- const response = await this.fetch('/api/v5/query_range', {
913
- method: 'POST',
914
- body: JSON.stringify(body),
915
- });
916
- const results = [];
917
- for (const result of response.data?.data?.results || []) {
918
- for (const agg of result.aggregations || []) {
919
- for (const series of agg.series || []) {
920
- for (const point of series.values || []) {
921
- results.push({
922
- timestamp: new Date(point.timestamp).toISOString(),
923
- name: options.metricName,
924
- value: point.value,
925
- attributes: series.labels,
926
- });
927
- }
928
- }
929
- }
930
- }
931
- // Determine if there are more results
932
- const hasMore = results.length > limit;
933
- const data = hasMore ? results.slice(0, limit) : results;
934
- // Generate next cursor if there are more results
935
- let nextCursor;
936
- if (hasMore && data.length > 0) {
937
- const lastItem = data[data.length - 1];
938
- const lastTs = new Date(lastItem.timestamp).getTime();
939
- nextCursor = encodeCursor({ ts: lastTs, offset: offset + limit });
940
- }
941
- return { data, nextCursor, hasMore };
942
- }
943
- catch (error) {
944
- if (error instanceof Error && (error.message.includes('Circuit breaker') || error.message.includes('Rate limit'))) {
945
- return { data: [], hasMore: false };
946
- }
947
- throw error;
948
- }
949
- }
950
- async healthCheck() {
951
- if (!this.baseUrl) {
952
- return { status: 'error', message: 'SigNoz Query URL not configured. Set SIGNOZ_QUERY_URL', configured: false };
953
- }
954
- if (!this.apiKey) {
955
- return { status: 'error', message: 'SigNoz API key not configured. Set SIGNOZ_API_KEY', configured: false };
956
- }
957
- if (this.circuitBreaker.getState() === 'open') {
958
- return { status: 'error', message: 'Circuit breaker open - API temporarily unavailable', configured: true };
959
- }
960
- if (this.circuitBreaker.isRateLimited()) {
961
- return { status: 'error', message: 'Rate limit exceeded - too many requests', configured: true };
962
- }
963
- try {
964
- // Try a simple query as health check - query last 5 minutes of traces
965
- const body = {
966
- start: Date.now() - 5 * 60 * 1000,
967
- end: Date.now(),
968
- requestType: 'raw',
969
- compositeQuery: {
970
- queries: [{
971
- type: 'builder_query',
972
- spec: {
973
- name: 'A',
974
- signal: 'traces',
975
- stepInterval: 60,
976
- aggregations: [],
977
- limit: 1,
978
- offset: 0,
979
- disabled: false,
980
- },
981
- }],
982
- },
983
- };
984
- const response = await this.fetch('/api/v5/query_range', {
985
- method: 'POST',
986
- body: JSON.stringify(body),
987
- });
988
- if (response.status === 'success') {
989
- return { status: 'ok', message: `Connected to ${this.baseUrl}`, configured: true };
990
- }
991
- return { status: 'error', message: 'Unexpected response from SigNoz API', configured: true };
992
- }
993
- catch (error) {
994
- // Security: sanitize error messages - known safe errors pass through,
995
- // others get a generic message to prevent information disclosure
996
- const message = error instanceof Error ? error.message : 'Unknown error';
997
- const isSafeMessage = message.includes('Circuit breaker') ||
998
- message.includes('Rate limit') ||
999
- message.includes('SigNoz') ||
1000
- message.includes('API');
1001
- return {
1002
- status: 'error',
1003
- message: isSafeMessage ? message : 'Connection failed',
1004
- configured: true,
1005
- };
1006
- }
1007
- }
1008
- /**
1009
- * Get SigNoz trace viewer URL for a trace ID
1010
- */
1011
- getTraceUrl(traceId) {
1012
- // The query API URL is already the correct format for the UI
1013
- return `${this.baseUrl}/trace/${traceId}`;
1014
- }
1015
- }
1016
- //# sourceMappingURL=signoz-api.js.map