observability-toolkit 1.8.5 → 2.0.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 (237) hide show
  1. package/README.md +126 -5
  2. package/dist/backends/index.d.ts +163 -0
  3. package/dist/backends/index.d.ts.map +1 -1
  4. package/dist/backends/index.js +57 -0
  5. package/dist/backends/index.js.map +1 -1
  6. package/dist/backends/index.test.js +55 -1
  7. package/dist/backends/index.test.js.map +1 -1
  8. package/dist/backends/local-jsonl.d.ts +30 -0
  9. package/dist/backends/local-jsonl.d.ts.map +1 -1
  10. package/dist/backends/local-jsonl.js +912 -550
  11. package/dist/backends/local-jsonl.js.map +1 -1
  12. package/dist/backends/signoz-api-rate-limiter.test.js +2 -1
  13. package/dist/backends/signoz-api-rate-limiter.test.js.map +1 -1
  14. package/dist/backends/signoz-api.d.ts +16 -2
  15. package/dist/backends/signoz-api.d.ts.map +1 -1
  16. package/dist/backends/signoz-api.js +650 -534
  17. package/dist/backends/signoz-api.js.map +1 -1
  18. package/dist/backends/signoz-api.test.js +6 -5
  19. package/dist/backends/signoz-api.test.js.map +1 -1
  20. package/dist/lib/agent-as-judge.d.ts +388 -0
  21. package/dist/lib/agent-as-judge.d.ts.map +1 -0
  22. package/dist/lib/agent-as-judge.js +740 -0
  23. package/dist/lib/agent-as-judge.js.map +1 -0
  24. package/dist/lib/agent-as-judge.test.d.ts +5 -0
  25. package/dist/lib/agent-as-judge.test.d.ts.map +1 -0
  26. package/dist/lib/agent-as-judge.test.js +816 -0
  27. package/dist/lib/agent-as-judge.test.js.map +1 -0
  28. package/dist/lib/cache.d.ts +15 -2
  29. package/dist/lib/cache.d.ts.map +1 -1
  30. package/dist/lib/cache.js +16 -2
  31. package/dist/lib/cache.js.map +1 -1
  32. package/dist/lib/circuit-breaker.d.ts +18 -0
  33. package/dist/lib/circuit-breaker.d.ts.map +1 -1
  34. package/dist/lib/circuit-breaker.js +41 -8
  35. package/dist/lib/circuit-breaker.js.map +1 -1
  36. package/dist/lib/confident-export.d.ts +101 -0
  37. package/dist/lib/confident-export.d.ts.map +1 -0
  38. package/dist/lib/confident-export.js +393 -0
  39. package/dist/lib/confident-export.js.map +1 -0
  40. package/dist/lib/confident-export.test.d.ts +7 -0
  41. package/dist/lib/confident-export.test.d.ts.map +1 -0
  42. package/dist/lib/confident-export.test.js +835 -0
  43. package/dist/lib/confident-export.test.js.map +1 -0
  44. package/dist/lib/constants.d.ts +75 -0
  45. package/dist/lib/constants.d.ts.map +1 -1
  46. package/dist/lib/constants.js +104 -1
  47. package/dist/lib/constants.js.map +1 -1
  48. package/dist/lib/datadog-export.d.ts +156 -0
  49. package/dist/lib/datadog-export.d.ts.map +1 -0
  50. package/dist/lib/datadog-export.js +464 -0
  51. package/dist/lib/datadog-export.js.map +1 -0
  52. package/dist/lib/datadog-export.test.d.ts +14 -0
  53. package/dist/lib/datadog-export.test.d.ts.map +1 -0
  54. package/dist/lib/datadog-export.test.js +890 -0
  55. package/dist/lib/datadog-export.test.js.map +1 -0
  56. package/dist/lib/evaluation-hooks.d.ts +49 -0
  57. package/dist/lib/evaluation-hooks.d.ts.map +1 -0
  58. package/dist/lib/evaluation-hooks.js +488 -0
  59. package/dist/lib/evaluation-hooks.js.map +1 -0
  60. package/dist/lib/evaluation-hooks.test.d.ts +8 -0
  61. package/dist/lib/evaluation-hooks.test.d.ts.map +1 -0
  62. package/dist/lib/evaluation-hooks.test.js +624 -0
  63. package/dist/lib/evaluation-hooks.test.js.map +1 -0
  64. package/dist/lib/export-utils.d.ts +99 -0
  65. package/dist/lib/export-utils.d.ts.map +1 -0
  66. package/dist/lib/export-utils.js +238 -0
  67. package/dist/lib/export-utils.js.map +1 -0
  68. package/dist/lib/export-utils.test.d.ts +5 -0
  69. package/dist/lib/export-utils.test.d.ts.map +1 -0
  70. package/dist/lib/export-utils.test.js +193 -0
  71. package/dist/lib/export-utils.test.js.map +1 -0
  72. package/dist/lib/file-utils.d.ts +17 -2
  73. package/dist/lib/file-utils.d.ts.map +1 -1
  74. package/dist/lib/file-utils.js +24 -5
  75. package/dist/lib/file-utils.js.map +1 -1
  76. package/dist/lib/file-utils.test.js +30 -0
  77. package/dist/lib/file-utils.test.js.map +1 -1
  78. package/dist/lib/histogram.d.ts +119 -0
  79. package/dist/lib/histogram.d.ts.map +1 -0
  80. package/dist/lib/histogram.js +202 -0
  81. package/dist/lib/histogram.js.map +1 -0
  82. package/dist/lib/histogram.test.d.ts +5 -0
  83. package/dist/lib/histogram.test.d.ts.map +1 -0
  84. package/dist/lib/histogram.test.js +381 -0
  85. package/dist/lib/histogram.test.js.map +1 -0
  86. package/dist/lib/instrumentation.d.ts +153 -0
  87. package/dist/lib/instrumentation.d.ts.map +1 -0
  88. package/dist/lib/instrumentation.integration.test.d.ts +2 -0
  89. package/dist/lib/instrumentation.integration.test.d.ts.map +1 -0
  90. package/dist/lib/instrumentation.integration.test.js +589 -0
  91. package/dist/lib/instrumentation.integration.test.js.map +1 -0
  92. package/dist/lib/instrumentation.js +520 -0
  93. package/dist/lib/instrumentation.js.map +1 -0
  94. package/dist/lib/instrumentation.test.d.ts +2 -0
  95. package/dist/lib/instrumentation.test.d.ts.map +1 -0
  96. package/dist/lib/instrumentation.test.js +821 -0
  97. package/dist/lib/instrumentation.test.js.map +1 -0
  98. package/dist/lib/langfuse-export.d.ts +125 -0
  99. package/dist/lib/langfuse-export.d.ts.map +1 -0
  100. package/dist/lib/langfuse-export.js +367 -0
  101. package/dist/lib/langfuse-export.js.map +1 -0
  102. package/dist/lib/langfuse-export.test.d.ts +7 -0
  103. package/dist/lib/langfuse-export.test.d.ts.map +1 -0
  104. package/dist/lib/langfuse-export.test.js +1007 -0
  105. package/dist/lib/langfuse-export.test.js.map +1 -0
  106. package/dist/lib/llm-as-judge.d.ts +657 -0
  107. package/dist/lib/llm-as-judge.d.ts.map +1 -0
  108. package/dist/lib/llm-as-judge.js +1397 -0
  109. package/dist/lib/llm-as-judge.js.map +1 -0
  110. package/dist/lib/llm-as-judge.test.d.ts +2 -0
  111. package/dist/lib/llm-as-judge.test.d.ts.map +1 -0
  112. package/dist/lib/llm-as-judge.test.js +2409 -0
  113. package/dist/lib/llm-as-judge.test.js.map +1 -0
  114. package/dist/lib/logger.d.ts +1 -1
  115. package/dist/lib/logger.d.ts.map +1 -1
  116. package/dist/lib/logger.js.map +1 -1
  117. package/dist/lib/metrics.d.ts +62 -0
  118. package/dist/lib/metrics.d.ts.map +1 -0
  119. package/dist/lib/metrics.js +166 -0
  120. package/dist/lib/metrics.js.map +1 -0
  121. package/dist/lib/metrics.test.d.ts +5 -0
  122. package/dist/lib/metrics.test.d.ts.map +1 -0
  123. package/dist/lib/metrics.test.js +189 -0
  124. package/dist/lib/metrics.test.js.map +1 -0
  125. package/dist/lib/parse-stats.d.ts +119 -0
  126. package/dist/lib/parse-stats.d.ts.map +1 -0
  127. package/dist/lib/parse-stats.js +206 -0
  128. package/dist/lib/parse-stats.js.map +1 -0
  129. package/dist/lib/parse-stats.test.d.ts +5 -0
  130. package/dist/lib/parse-stats.test.d.ts.map +1 -0
  131. package/dist/lib/parse-stats.test.js +283 -0
  132. package/dist/lib/parse-stats.test.js.map +1 -0
  133. package/dist/lib/phoenix-export.d.ts +109 -0
  134. package/dist/lib/phoenix-export.d.ts.map +1 -0
  135. package/dist/lib/phoenix-export.js +429 -0
  136. package/dist/lib/phoenix-export.js.map +1 -0
  137. package/dist/lib/phoenix-export.test.d.ts +11 -0
  138. package/dist/lib/phoenix-export.test.d.ts.map +1 -0
  139. package/dist/lib/phoenix-export.test.js +725 -0
  140. package/dist/lib/phoenix-export.test.js.map +1 -0
  141. package/dist/lib/server-utils.d.ts +6 -1
  142. package/dist/lib/server-utils.d.ts.map +1 -1
  143. package/dist/lib/server-utils.js +9 -1
  144. package/dist/lib/server-utils.js.map +1 -1
  145. package/dist/lib/shared-schemas.d.ts +6 -0
  146. package/dist/lib/shared-schemas.d.ts.map +1 -1
  147. package/dist/lib/shared-schemas.js +11 -4
  148. package/dist/lib/shared-schemas.js.map +1 -1
  149. package/dist/lib/verification-events.d.ts +100 -0
  150. package/dist/lib/verification-events.d.ts.map +1 -0
  151. package/dist/lib/verification-events.js +162 -0
  152. package/dist/lib/verification-events.js.map +1 -0
  153. package/dist/lib/verification-events.test.d.ts +5 -0
  154. package/dist/lib/verification-events.test.d.ts.map +1 -0
  155. package/dist/lib/verification-events.test.js +193 -0
  156. package/dist/lib/verification-events.test.js.map +1 -0
  157. package/dist/server.d.ts +5 -0
  158. package/dist/server.d.ts.map +1 -1
  159. package/dist/server.js +77 -21
  160. package/dist/server.js.map +1 -1
  161. package/dist/tools/context-stats.d.ts.map +1 -1
  162. package/dist/tools/context-stats.js +6 -8
  163. package/dist/tools/context-stats.js.map +1 -1
  164. package/dist/tools/export-confident.d.ts +145 -0
  165. package/dist/tools/export-confident.d.ts.map +1 -0
  166. package/dist/tools/export-confident.js +134 -0
  167. package/dist/tools/export-confident.js.map +1 -0
  168. package/dist/tools/export-confident.test.d.ts +7 -0
  169. package/dist/tools/export-confident.test.d.ts.map +1 -0
  170. package/dist/tools/export-confident.test.js +332 -0
  171. package/dist/tools/export-confident.test.js.map +1 -0
  172. package/dist/tools/export-datadog.d.ts +160 -0
  173. package/dist/tools/export-datadog.d.ts.map +1 -0
  174. package/dist/tools/export-datadog.js +160 -0
  175. package/dist/tools/export-datadog.js.map +1 -0
  176. package/dist/tools/export-datadog.test.d.ts +8 -0
  177. package/dist/tools/export-datadog.test.d.ts.map +1 -0
  178. package/dist/tools/export-datadog.test.js +419 -0
  179. package/dist/tools/export-datadog.test.js.map +1 -0
  180. package/dist/tools/export-langfuse.d.ts +137 -0
  181. package/dist/tools/export-langfuse.d.ts.map +1 -0
  182. package/dist/tools/export-langfuse.js +131 -0
  183. package/dist/tools/export-langfuse.js.map +1 -0
  184. package/dist/tools/export-langfuse.test.d.ts +7 -0
  185. package/dist/tools/export-langfuse.test.d.ts.map +1 -0
  186. package/dist/tools/export-langfuse.test.js +303 -0
  187. package/dist/tools/export-langfuse.test.js.map +1 -0
  188. package/dist/tools/export-phoenix.d.ts +145 -0
  189. package/dist/tools/export-phoenix.d.ts.map +1 -0
  190. package/dist/tools/export-phoenix.js +135 -0
  191. package/dist/tools/export-phoenix.js.map +1 -0
  192. package/dist/tools/export-phoenix.test.d.ts +7 -0
  193. package/dist/tools/export-phoenix.test.d.ts.map +1 -0
  194. package/dist/tools/export-phoenix.test.js +316 -0
  195. package/dist/tools/export-phoenix.test.js.map +1 -0
  196. package/dist/tools/health-check.d.ts +26 -0
  197. package/dist/tools/health-check.d.ts.map +1 -1
  198. package/dist/tools/health-check.js +36 -7
  199. package/dist/tools/health-check.js.map +1 -1
  200. package/dist/tools/index.d.ts +6 -0
  201. package/dist/tools/index.d.ts.map +1 -1
  202. package/dist/tools/index.js +6 -0
  203. package/dist/tools/index.js.map +1 -1
  204. package/dist/tools/inject-evaluations.d.ts +1315 -0
  205. package/dist/tools/inject-evaluations.d.ts.map +1 -0
  206. package/dist/tools/inject-evaluations.js +121 -0
  207. package/dist/tools/inject-evaluations.js.map +1 -0
  208. package/dist/tools/inject-evaluations.test.d.ts +5 -0
  209. package/dist/tools/inject-evaluations.test.d.ts.map +1 -0
  210. package/dist/tools/inject-evaluations.test.js +359 -0
  211. package/dist/tools/inject-evaluations.test.js.map +1 -0
  212. package/dist/tools/query-evaluations.d.ts +25 -4
  213. package/dist/tools/query-evaluations.d.ts.map +1 -1
  214. package/dist/tools/query-evaluations.js +10 -0
  215. package/dist/tools/query-evaluations.js.map +1 -1
  216. package/dist/tools/query-llm-events.js +2 -2
  217. package/dist/tools/query-llm-events.js.map +1 -1
  218. package/dist/tools/query-logs.d.ts +8 -8
  219. package/dist/tools/query-logs.js +3 -3
  220. package/dist/tools/query-logs.js.map +1 -1
  221. package/dist/tools/query-metrics.d.ts +4 -4
  222. package/dist/tools/query-metrics.js +2 -2
  223. package/dist/tools/query-metrics.js.map +1 -1
  224. package/dist/tools/query-traces.d.ts +8 -8
  225. package/dist/tools/query-verifications.d.ts +111 -0
  226. package/dist/tools/query-verifications.d.ts.map +1 -0
  227. package/dist/tools/query-verifications.js +101 -0
  228. package/dist/tools/query-verifications.js.map +1 -0
  229. package/dist/tools/query-verifications.test.d.ts +5 -0
  230. package/dist/tools/query-verifications.test.d.ts.map +1 -0
  231. package/dist/tools/query-verifications.test.js +156 -0
  232. package/dist/tools/query-verifications.test.js.map +1 -0
  233. package/dist/types/evaluation-hooks.d.ts +176 -0
  234. package/dist/types/evaluation-hooks.d.ts.map +1 -0
  235. package/dist/types/evaluation-hooks.js +49 -0
  236. package/dist/types/evaluation-hooks.js.map +1 -0
  237. package/package.json +10 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation-hooks.test.js","sourceRoot":"","sources":["../../src/lib/evaluation-hooks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Shared utilities for evaluation export integrations
3
+ *
4
+ * Common functionality used by Langfuse, Confident AI, and other export providers.
5
+ * Extracted to prevent code duplication and ensure consistent behavior.
6
+ */
7
+ /** Retry configuration constants */
8
+ export declare const DEFAULT_MAX_RETRIES = 3;
9
+ export declare const BACKOFF_BASE_MS = 1000;
10
+ export declare const BACKOFF_MAX_MS = 10000;
11
+ /**
12
+ * Memory warning threshold in MB.
13
+ * Configurable via EXPORT_MEMORY_WARN_MB environment variable.
14
+ * Default: 400MB
15
+ */
16
+ export declare const MEMORY_WARNING_THRESHOLD_MB: number;
17
+ /**
18
+ * Memory abort threshold in MB.
19
+ * Configurable via EXPORT_MEMORY_ABORT_MB environment variable.
20
+ * Default: 600MB
21
+ */
22
+ export declare const MEMORY_ABORT_THRESHOLD_MB: number;
23
+ export declare const PROGRESS_LOG_INTERVAL = 10;
24
+ /**
25
+ * Timestamp validation bounds (year 2000-3000).
26
+ * - Year 2000 minimum: Pre-2000 data is likely clock skew or test artifacts
27
+ * - Year 3000 maximum: Far-future dates may cause OTLP ingestion failures
28
+ * - This range allows reasonable forward-dating for testing/scheduling
29
+ */
30
+ export declare const EARLIEST_VALID_TIMESTAMP_MS = 946684800000;
31
+ export declare const LATEST_VALID_TIMESTAMP_MS = 32503680000000;
32
+ /**
33
+ * Memory usage status for OOM prevention
34
+ */
35
+ export interface MemoryStatus {
36
+ heapUsedMB: number;
37
+ shouldWarn: boolean;
38
+ shouldAbort: boolean;
39
+ }
40
+ /**
41
+ * Check memory usage and return status.
42
+ * Used to prevent OOM on large exports.
43
+ */
44
+ export declare function checkMemoryUsage(): MemoryStatus;
45
+ /**
46
+ * Fetch with exponential backoff retry for transient failures.
47
+ * Retries on network errors, timeouts, 429 (rate limit), and 5xx errors.
48
+ *
49
+ * @param url - Target URL for the request
50
+ * @param options - Fetch options (method, headers, body, etc.)
51
+ * @param maxRetries - Maximum number of retry attempts (default: 3)
52
+ * @param timeoutMs - Request timeout in milliseconds (default: 5000)
53
+ * @returns Promise resolving to the fetch Response
54
+ * @throws Error if all retries are exhausted
55
+ */
56
+ export declare function fetchWithRetry(url: string, options: RequestInit, maxRetries?: number, timeoutMs?: number): Promise<Response>;
57
+ /**
58
+ * Sanitize error text to prevent credential leakage in logs.
59
+ * Removes potential API keys, Basic auth tokens, and other sensitive data.
60
+ *
61
+ * @param text - Error text to sanitize
62
+ * @returns Sanitized text with credentials redacted
63
+ */
64
+ export declare function sanitizeErrorText(text: string): string;
65
+ /**
66
+ * Options for external URL validation
67
+ */
68
+ export interface UrlValidationOptions {
69
+ /** Allow HTTP protocol (default: false, HTTPS only) */
70
+ allowHttp?: boolean;
71
+ /** Allow localhost addresses (default: false) */
72
+ allowLocalhost?: boolean;
73
+ /** Provider name for error logging (default: 'External') */
74
+ provider?: string;
75
+ }
76
+ /**
77
+ * Validate and sanitize a URL to prevent SSRF attacks.
78
+ * By default, only allows HTTPS URLs to external hosts.
79
+ *
80
+ * @param url - URL to validate
81
+ * @param options - Validation options
82
+ * @returns Validated URL origin (with path preserved) or empty string if invalid
83
+ */
84
+ export declare function validateExternalUrl(url: string, options?: UrlValidationOptions): string;
85
+ /**
86
+ * Check if a timestamp is within valid bounds (year 2000-3000)
87
+ *
88
+ * @param timestampMs - Timestamp in milliseconds
89
+ * @returns true if timestamp is valid
90
+ */
91
+ export declare function isValidTimestamp(timestampMs: number): boolean;
92
+ /**
93
+ * Generate a random hex string for trace/span IDs using crypto
94
+ *
95
+ * @param length - Length of hex string (must be even)
96
+ * @returns Random hex string of specified length
97
+ */
98
+ export declare function generateHexId(length: number): string;
99
+ //# sourceMappingURL=export-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-utils.d.ts","sourceRoot":"","sources":["../../src/lib/export-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,oCAAoC;AACpC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,cAAc,QAAQ,CAAC;AAMpC;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAKtC,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAKpC,CAAC;AAEL,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,eAAe,CAAC;AACxD,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAQ/C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAW,EACpB,UAAU,SAAsB,EAChC,SAAS,SAAO,GACf,OAAO,CAAC,QAAQ,CAAC,CA2CnB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBtD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,MAAM,CA2F3F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIpD"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Shared utilities for evaluation export integrations
3
+ *
4
+ * Common functionality used by Langfuse, Confident AI, and other export providers.
5
+ * Extracted to prevent code duplication and ensure consistent behavior.
6
+ */
7
+ import { webcrypto } from 'crypto';
8
+ import { HttpStatus } from './constants.js';
9
+ /** Retry configuration constants */
10
+ export const DEFAULT_MAX_RETRIES = 3;
11
+ export const BACKOFF_BASE_MS = 1000;
12
+ export const BACKOFF_MAX_MS = 10000;
13
+ /** Memory protection default values */
14
+ const DEFAULT_MEMORY_WARN_MB = 400;
15
+ const DEFAULT_MEMORY_ABORT_MB = 600;
16
+ /**
17
+ * Memory warning threshold in MB.
18
+ * Configurable via EXPORT_MEMORY_WARN_MB environment variable.
19
+ * Default: 400MB
20
+ */
21
+ export const MEMORY_WARNING_THRESHOLD_MB = (() => {
22
+ const envValue = process.env.EXPORT_MEMORY_WARN_MB;
23
+ if (!envValue)
24
+ return DEFAULT_MEMORY_WARN_MB;
25
+ const parsed = parseInt(envValue, 10);
26
+ return isNaN(parsed) || parsed < 1 ? DEFAULT_MEMORY_WARN_MB : parsed;
27
+ })();
28
+ /**
29
+ * Memory abort threshold in MB.
30
+ * Configurable via EXPORT_MEMORY_ABORT_MB environment variable.
31
+ * Default: 600MB
32
+ */
33
+ export const MEMORY_ABORT_THRESHOLD_MB = (() => {
34
+ const envValue = process.env.EXPORT_MEMORY_ABORT_MB;
35
+ if (!envValue)
36
+ return DEFAULT_MEMORY_ABORT_MB;
37
+ const parsed = parseInt(envValue, 10);
38
+ return isNaN(parsed) || parsed < 1 ? DEFAULT_MEMORY_ABORT_MB : parsed;
39
+ })();
40
+ export const PROGRESS_LOG_INTERVAL = 10;
41
+ /**
42
+ * Timestamp validation bounds (year 2000-3000).
43
+ * - Year 2000 minimum: Pre-2000 data is likely clock skew or test artifacts
44
+ * - Year 3000 maximum: Far-future dates may cause OTLP ingestion failures
45
+ * - This range allows reasonable forward-dating for testing/scheduling
46
+ */
47
+ export const EARLIEST_VALID_TIMESTAMP_MS = 946684800000; // 2000-01-01T00:00:00Z
48
+ export const LATEST_VALID_TIMESTAMP_MS = 32503680000000; // 3000-01-01T00:00:00Z
49
+ /**
50
+ * Check memory usage and return status.
51
+ * Used to prevent OOM on large exports.
52
+ */
53
+ export function checkMemoryUsage() {
54
+ const heapUsed = process.memoryUsage().heapUsed;
55
+ const heapUsedMB = Math.round(heapUsed / 1024 / 1024);
56
+ return {
57
+ heapUsedMB,
58
+ shouldWarn: heapUsedMB > MEMORY_WARNING_THRESHOLD_MB,
59
+ shouldAbort: heapUsedMB > MEMORY_ABORT_THRESHOLD_MB,
60
+ };
61
+ }
62
+ /**
63
+ * Fetch with exponential backoff retry for transient failures.
64
+ * Retries on network errors, timeouts, 429 (rate limit), and 5xx errors.
65
+ *
66
+ * @param url - Target URL for the request
67
+ * @param options - Fetch options (method, headers, body, etc.)
68
+ * @param maxRetries - Maximum number of retry attempts (default: 3)
69
+ * @param timeoutMs - Request timeout in milliseconds (default: 5000)
70
+ * @returns Promise resolving to the fetch Response
71
+ * @throws Error if all retries are exhausted
72
+ */
73
+ export async function fetchWithRetry(url, options, maxRetries = DEFAULT_MAX_RETRIES, timeoutMs = 5000) {
74
+ let lastError;
75
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
76
+ const controller = new AbortController();
77
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
78
+ try {
79
+ const response = await fetch(url, {
80
+ ...options,
81
+ signal: controller.signal,
82
+ });
83
+ clearTimeout(timeoutId);
84
+ // Retry on rate limit or server errors (5xx)
85
+ if (response.status === HttpStatus.TOO_MANY_REQUESTS || response.status >= HttpStatus.INTERNAL_SERVER_ERROR) {
86
+ if (attempt < maxRetries) {
87
+ const backoffMs = Math.min(BACKOFF_BASE_MS * Math.pow(2, attempt), BACKOFF_MAX_MS);
88
+ await new Promise(resolve => setTimeout(resolve, backoffMs));
89
+ continue;
90
+ }
91
+ }
92
+ return response;
93
+ }
94
+ catch (error) {
95
+ clearTimeout(timeoutId);
96
+ lastError = error instanceof Error ? error : new Error(String(error));
97
+ // Retry ALL errors (network, DNS, timeouts) not just AbortError
98
+ if (attempt < maxRetries) {
99
+ const backoffMs = Math.min(BACKOFF_BASE_MS * Math.pow(2, attempt), BACKOFF_MAX_MS);
100
+ await new Promise(resolve => setTimeout(resolve, backoffMs));
101
+ continue;
102
+ }
103
+ // All retries exhausted - throw the last error
104
+ throw lastError;
105
+ }
106
+ }
107
+ // This line is only reachable if loop exits without return/throw (shouldn't happen)
108
+ throw lastError || new Error('Max retries exceeded');
109
+ }
110
+ /**
111
+ * Sanitize error text to prevent credential leakage in logs.
112
+ * Removes potential API keys, Basic auth tokens, and other sensitive data.
113
+ *
114
+ * @param text - Error text to sanitize
115
+ * @returns Sanitized text with credentials redacted
116
+ */
117
+ export function sanitizeErrorText(text) {
118
+ return text
119
+ // Remove Basic auth headers
120
+ .replace(/Basic\s+[A-Za-z0-9+/=]+/gi, '[REDACTED]')
121
+ // Remove pk-xxx:sk-xxx patterns (Langfuse)
122
+ .replace(/pk-[^:\s]+:[^:\s]+/gi, '[REDACTED]')
123
+ // Remove bearer tokens
124
+ .replace(/Bearer\s+[A-Za-z0-9._-]+/gi, '[REDACTED]')
125
+ // Remove Langfuse API key patterns
126
+ .replace(/sk-[A-Za-z0-9]{20,}/gi, '[REDACTED]')
127
+ .replace(/pk-[A-Za-z0-9]{20,}/gi, '[REDACTED]')
128
+ // Remove Confident AI API key patterns (confident_us...)
129
+ .replace(/confident_[a-z]{2}[A-Za-z0-9_-]{20,}/gi, '[REDACTED]')
130
+ // Remove x-confident-api-key header values
131
+ .replace(/x-confident-api-key:\s*[^\s,]+/gi, 'x-confident-api-key: [REDACTED]')
132
+ // Remove DD-API-KEY header values (Datadog)
133
+ .replace(/DD-API-KEY:\s*[^\s,]+/gi, 'DD-API-KEY: [REDACTED]')
134
+ // Remove generic API key patterns
135
+ .replace(/api[_-]?key[=:]\s*[^\s&"']+/gi, 'api_key=[REDACTED]');
136
+ }
137
+ /**
138
+ * Validate and sanitize a URL to prevent SSRF attacks.
139
+ * By default, only allows HTTPS URLs to external hosts.
140
+ *
141
+ * @param url - URL to validate
142
+ * @param options - Validation options
143
+ * @returns Validated URL origin (with path preserved) or empty string if invalid
144
+ */
145
+ export function validateExternalUrl(url, options = {}) {
146
+ const { allowHttp = false, allowLocalhost = false, provider = 'External', } = options;
147
+ if (!url)
148
+ return '';
149
+ try {
150
+ const parsed = new URL(url);
151
+ // Check protocol
152
+ if (parsed.protocol === 'http:' && !allowHttp) {
153
+ console.error(`[SECURITY] Invalid ${provider} URL protocol - only HTTPS allowed`);
154
+ return '';
155
+ }
156
+ if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
157
+ console.error(`[SECURITY] Invalid ${provider} URL protocol - only HTTP(S) allowed`);
158
+ return '';
159
+ }
160
+ const hostname = parsed.hostname.toLowerCase();
161
+ const normalizedHost = hostname.replace(/^\[|\]$/g, '').split('%')[0];
162
+ // Block localhost variants (unless explicitly allowed)
163
+ if (!allowLocalhost) {
164
+ if (normalizedHost === 'localhost' ||
165
+ /^127\./.test(normalizedHost) ||
166
+ normalizedHost === '0.0.0.0' ||
167
+ normalizedHost === '::1' ||
168
+ normalizedHost === '0:0:0:0:0:0:0:1' ||
169
+ /^::ffff:127\./.test(normalizedHost) ||
170
+ normalizedHost.endsWith('.localhost')) {
171
+ console.error(`[SECURITY] Localhost addresses not allowed for ${provider} URL`);
172
+ return '';
173
+ }
174
+ }
175
+ // Block cloud metadata endpoints (169.254.0.0/16) - always blocked
176
+ if (/^169\.254\./.test(normalizedHost) ||
177
+ /^::ffff:169\.254\./.test(normalizedHost)) {
178
+ console.error(`[SECURITY] Cloud metadata addresses not allowed for ${provider} URL`);
179
+ return '';
180
+ }
181
+ // Block private network ranges - always blocked
182
+ if (normalizedHost.startsWith('192.168.') ||
183
+ normalizedHost.startsWith('10.') ||
184
+ /^172\.(1[6-9]|2[0-9]|3[0-1])\./.test(normalizedHost) ||
185
+ normalizedHost.startsWith('fc') ||
186
+ normalizedHost.startsWith('fd') ||
187
+ normalizedHost.startsWith('fe80') ||
188
+ normalizedHost.startsWith('::ffff:192.168.') ||
189
+ normalizedHost.startsWith('::ffff:10.') ||
190
+ /^::ffff:172\.(1[6-9]|2[0-9]|3[0-1])\./.test(normalizedHost)) {
191
+ console.error(`[SECURITY] Private network addresses not allowed for ${provider} URL`);
192
+ return '';
193
+ }
194
+ // Block reserved domain suffixes
195
+ if (normalizedHost.endsWith('.local') ||
196
+ normalizedHost.endsWith('.internal') ||
197
+ normalizedHost.endsWith('.localdomain') ||
198
+ normalizedHost.endsWith('.home.arpa')) {
199
+ console.error(`[SECURITY] Reserved domain names not allowed for ${provider} URL`);
200
+ return '';
201
+ }
202
+ // Preserve API path prefixes for self-hosted instances on subpaths
203
+ const path = parsed.pathname;
204
+ if (path && path !== '/') {
205
+ // Strip trailing slash for consistency
206
+ const normalizedPath = path.endsWith('/') ? path.slice(0, -1) : path;
207
+ return parsed.origin + normalizedPath;
208
+ }
209
+ return parsed.origin;
210
+ }
211
+ catch {
212
+ console.error(`[SECURITY] Invalid ${provider} URL format`);
213
+ return '';
214
+ }
215
+ }
216
+ /**
217
+ * Check if a timestamp is within valid bounds (year 2000-3000)
218
+ *
219
+ * @param timestampMs - Timestamp in milliseconds
220
+ * @returns true if timestamp is valid
221
+ */
222
+ export function isValidTimestamp(timestampMs) {
223
+ return !isNaN(timestampMs) &&
224
+ timestampMs >= EARLIEST_VALID_TIMESTAMP_MS &&
225
+ timestampMs <= LATEST_VALID_TIMESTAMP_MS;
226
+ }
227
+ /**
228
+ * Generate a random hex string for trace/span IDs using crypto
229
+ *
230
+ * @param length - Length of hex string (must be even)
231
+ * @returns Random hex string of specified length
232
+ */
233
+ export function generateHexId(length) {
234
+ const bytes = new Uint8Array(length / 2);
235
+ webcrypto.getRandomValues(bytes);
236
+ return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
237
+ }
238
+ //# sourceMappingURL=export-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-utils.js","sourceRoot":"","sources":["../../src/lib/export-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,oCAAoC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAEpC,uCAAuC;AACvC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAW,CAAC,GAAG,EAAE;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,IAAI,CAAC,QAAQ;QAAE,OAAO,sBAAsB,CAAC;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC;AACvE,CAAC,CAAC,EAAE,CAAC;AAEL;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAW,CAAC,GAAG,EAAE;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,OAAO,uBAAuB,CAAC;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC;AACxE,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,YAAY,CAAC,CAAE,uBAAuB;AACjF,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC,CAAE,uBAAuB;AAWjF;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IACtD,OAAO;QACL,UAAU;QACV,UAAU,EAAE,UAAU,GAAG,2BAA2B;QACpD,WAAW,EAAE,UAAU,GAAG,yBAAyB;KACpD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,OAAoB,EACpB,UAAU,GAAG,mBAAmB,EAChC,SAAS,GAAG,IAAI;IAEhB,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,GAAG,OAAO;gBACV,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,6CAA6C;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,iBAAiB,IAAI,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,qBAAqB,EAAE,CAAC;gBAC5G,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;oBACnF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;oBAC7D,SAAS;gBACX,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAEtE,gEAAgE;YAChE,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;gBACnF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,+CAA+C;YAC/C,MAAM,SAAS,CAAC;QAClB,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI;QACT,4BAA4B;SAC3B,OAAO,CAAC,2BAA2B,EAAE,YAAY,CAAC;QACnD,2CAA2C;SAC1C,OAAO,CAAC,sBAAsB,EAAE,YAAY,CAAC;QAC9C,uBAAuB;SACtB,OAAO,CAAC,4BAA4B,EAAE,YAAY,CAAC;QACpD,mCAAmC;SAClC,OAAO,CAAC,uBAAuB,EAAE,YAAY,CAAC;SAC9C,OAAO,CAAC,uBAAuB,EAAE,YAAY,CAAC;QAC/C,yDAAyD;SACxD,OAAO,CAAC,wCAAwC,EAAE,YAAY,CAAC;QAChE,2CAA2C;SAC1C,OAAO,CAAC,kCAAkC,EAAE,iCAAiC,CAAC;QAC/E,4CAA4C;SAC3C,OAAO,CAAC,yBAAyB,EAAE,wBAAwB,CAAC;QAC7D,kCAAkC;SACjC,OAAO,CAAC,+BAA+B,EAAE,oBAAoB,CAAC,CAAC;AACpE,CAAC;AAcD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,UAAgC,EAAE;IACjF,MAAM,EACJ,SAAS,GAAG,KAAK,EACjB,cAAc,GAAG,KAAK,EACtB,QAAQ,GAAG,UAAU,GACtB,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAE5B,iBAAiB;QACjB,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,sBAAsB,QAAQ,oCAAoC,CAAC,CAAC;YAClF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,sBAAsB,QAAQ,sCAAsC,CAAC,CAAC;YACpF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtE,uDAAuD;QACvD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,IACE,cAAc,KAAK,WAAW;gBAC9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC7B,cAAc,KAAK,SAAS;gBAC5B,cAAc,KAAK,KAAK;gBACxB,cAAc,KAAK,iBAAiB;gBACpC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;gBACpC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,EACrC,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,kDAAkD,QAAQ,MAAM,CAAC,CAAC;gBAChF,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,IACE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;YAClC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,EACzC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,uDAAuD,QAAQ,MAAM,CAAC,CAAC;YACrF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,gDAAgD;QAChD,IACE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;YACrC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;YAChC,gCAAgC,CAAC,IAAI,CAAC,cAAc,CAAC;YACrD,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;YAC/B,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;YAC/B,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;YACjC,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAC5C,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC;YACvC,uCAAuC,CAAC,IAAI,CAAC,cAAc,CAAC,EAC5D,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,wDAAwD,QAAQ,MAAM,CAAC,CAAC;YACtF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,iCAAiC;QACjC,IACE,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC;YACpC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC;YACvC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,EACrC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,oDAAoD,QAAQ,MAAM,CAAC,CAAC;YAClF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,mEAAmE;QACnE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACzB,uCAAuC;YACvC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrE,OAAO,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;QACxC,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,sBAAsB,QAAQ,aAAa,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;QACxB,WAAW,IAAI,2BAA2B;QAC1C,WAAW,IAAI,yBAAyB,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for export-utils module
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=export-utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-utils.test.d.ts","sourceRoot":"","sources":["../../src/lib/export-utils.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Tests for export-utils module
3
+ */
4
+ import { describe, it, beforeEach, afterEach } from 'node:test';
5
+ import assert from 'node:assert';
6
+ describe('export-utils', () => {
7
+ describe('memory threshold configuration', () => {
8
+ let originalEnv;
9
+ beforeEach(() => {
10
+ originalEnv = { ...process.env };
11
+ });
12
+ afterEach(() => {
13
+ process.env = originalEnv;
14
+ // Clear module cache to allow re-import with new env values
15
+ const moduleUrl = new URL('./export-utils.js', import.meta.url).href;
16
+ // Note: ESM modules are cached, so we test default behavior here
17
+ });
18
+ it('uses default 400MB for MEMORY_WARNING_THRESHOLD_MB when env not set', async () => {
19
+ // Fresh import without env var (this tests the default case)
20
+ const { MEMORY_WARNING_THRESHOLD_MB } = await import('./export-utils.js');
21
+ // Default is 400 when EXPORT_MEMORY_WARN_MB is not set
22
+ assert.strictEqual(MEMORY_WARNING_THRESHOLD_MB, 400);
23
+ });
24
+ it('uses default 600MB for MEMORY_ABORT_THRESHOLD_MB when env not set', async () => {
25
+ const { MEMORY_ABORT_THRESHOLD_MB } = await import('./export-utils.js');
26
+ // Default is 600 when EXPORT_MEMORY_ABORT_MB is not set
27
+ assert.strictEqual(MEMORY_ABORT_THRESHOLD_MB, 600);
28
+ });
29
+ it('checkMemoryUsage returns correct structure', async () => {
30
+ const { checkMemoryUsage } = await import('./export-utils.js');
31
+ const status = checkMemoryUsage();
32
+ assert.ok(typeof status.heapUsedMB === 'number');
33
+ assert.ok(status.heapUsedMB >= 0);
34
+ assert.ok(typeof status.shouldWarn === 'boolean');
35
+ assert.ok(typeof status.shouldAbort === 'boolean');
36
+ });
37
+ it('checkMemoryUsage shouldWarn is based on threshold', async () => {
38
+ const { checkMemoryUsage, MEMORY_WARNING_THRESHOLD_MB } = await import('./export-utils.js');
39
+ const status = checkMemoryUsage();
40
+ // shouldWarn should be true if heapUsedMB > threshold
41
+ assert.strictEqual(status.shouldWarn, status.heapUsedMB > MEMORY_WARNING_THRESHOLD_MB);
42
+ });
43
+ it('checkMemoryUsage shouldAbort is based on threshold', async () => {
44
+ const { checkMemoryUsage, MEMORY_ABORT_THRESHOLD_MB } = await import('./export-utils.js');
45
+ const status = checkMemoryUsage();
46
+ // shouldAbort should be true if heapUsedMB > threshold
47
+ assert.strictEqual(status.shouldAbort, status.heapUsedMB > MEMORY_ABORT_THRESHOLD_MB);
48
+ });
49
+ });
50
+ describe('memory threshold parsing', () => {
51
+ // Test the parsing logic directly by verifying the module behavior
52
+ // Note: Due to ESM caching, we can't easily test env var changes at runtime
53
+ // These tests verify the default behavior and structure
54
+ it('exports MEMORY_WARNING_THRESHOLD_MB as number', async () => {
55
+ const { MEMORY_WARNING_THRESHOLD_MB } = await import('./export-utils.js');
56
+ assert.strictEqual(typeof MEMORY_WARNING_THRESHOLD_MB, 'number');
57
+ assert.ok(!isNaN(MEMORY_WARNING_THRESHOLD_MB));
58
+ assert.ok(MEMORY_WARNING_THRESHOLD_MB >= 1);
59
+ });
60
+ it('exports MEMORY_ABORT_THRESHOLD_MB as number', async () => {
61
+ const { MEMORY_ABORT_THRESHOLD_MB } = await import('./export-utils.js');
62
+ assert.strictEqual(typeof MEMORY_ABORT_THRESHOLD_MB, 'number');
63
+ assert.ok(!isNaN(MEMORY_ABORT_THRESHOLD_MB));
64
+ assert.ok(MEMORY_ABORT_THRESHOLD_MB >= 1);
65
+ });
66
+ it('abort threshold should be greater than or equal to warn threshold', async () => {
67
+ const { MEMORY_WARNING_THRESHOLD_MB, MEMORY_ABORT_THRESHOLD_MB } = await import('./export-utils.js');
68
+ // With defaults: 400 < 600
69
+ assert.ok(MEMORY_ABORT_THRESHOLD_MB >= MEMORY_WARNING_THRESHOLD_MB, `Abort threshold (${MEMORY_ABORT_THRESHOLD_MB}) should be >= warn threshold (${MEMORY_WARNING_THRESHOLD_MB})`);
70
+ });
71
+ });
72
+ describe('sanitizeErrorText', () => {
73
+ it('redacts Basic auth headers', async () => {
74
+ const { sanitizeErrorText } = await import('./export-utils.js');
75
+ const text = 'Error: Basic dXNlcjpwYXNzd29yZA== invalid';
76
+ const result = sanitizeErrorText(text);
77
+ assert.ok(!result.includes('dXNlcjpwYXNzd29yZA=='));
78
+ assert.ok(result.includes('[REDACTED]'));
79
+ });
80
+ it('redacts Bearer tokens', async () => {
81
+ const { sanitizeErrorText } = await import('./export-utils.js');
82
+ const text = 'Error: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 invalid';
83
+ const result = sanitizeErrorText(text);
84
+ assert.ok(!result.includes('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9'));
85
+ assert.ok(result.includes('[REDACTED]'));
86
+ });
87
+ it('redacts Langfuse pk/sk patterns', async () => {
88
+ const { sanitizeErrorText } = await import('./export-utils.js');
89
+ const text = 'Error with pk-lf-abc123:sk-lf-xyz789';
90
+ const result = sanitizeErrorText(text);
91
+ assert.ok(!result.includes('pk-lf-abc123:sk-lf-xyz789'));
92
+ assert.ok(result.includes('[REDACTED]'));
93
+ });
94
+ it('redacts Confident AI API keys', async () => {
95
+ const { sanitizeErrorText } = await import('./export-utils.js');
96
+ const text = 'Error with key confident_us_abc123xyz456789012345';
97
+ const result = sanitizeErrorText(text);
98
+ assert.ok(!result.includes('confident_us_abc123xyz456789012345'));
99
+ assert.ok(result.includes('[REDACTED]'));
100
+ });
101
+ it('redacts DD-API-KEY headers', async () => {
102
+ const { sanitizeErrorText } = await import('./export-utils.js');
103
+ const text = 'Header DD-API-KEY: abc123secret456';
104
+ const result = sanitizeErrorText(text);
105
+ assert.ok(!result.includes('abc123secret456'));
106
+ assert.ok(result.includes('[REDACTED]'));
107
+ });
108
+ });
109
+ describe('validateExternalUrl', () => {
110
+ it('rejects HTTP by default', async () => {
111
+ const { validateExternalUrl } = await import('./export-utils.js');
112
+ const result = validateExternalUrl('http://example.com');
113
+ assert.strictEqual(result, '');
114
+ });
115
+ it('accepts HTTPS by default', async () => {
116
+ const { validateExternalUrl } = await import('./export-utils.js');
117
+ const result = validateExternalUrl('https://example.com');
118
+ assert.strictEqual(result, 'https://example.com');
119
+ });
120
+ it('allows HTTP when explicitly enabled', async () => {
121
+ const { validateExternalUrl } = await import('./export-utils.js');
122
+ const result = validateExternalUrl('http://example.com', { allowHttp: true });
123
+ assert.strictEqual(result, 'http://example.com');
124
+ });
125
+ it('rejects localhost by default', async () => {
126
+ const { validateExternalUrl } = await import('./export-utils.js');
127
+ const result = validateExternalUrl('https://localhost:8080');
128
+ assert.strictEqual(result, '');
129
+ });
130
+ it('allows localhost when explicitly enabled', async () => {
131
+ const { validateExternalUrl } = await import('./export-utils.js');
132
+ const result = validateExternalUrl('https://localhost:8080', { allowLocalhost: true });
133
+ assert.strictEqual(result, 'https://localhost:8080');
134
+ });
135
+ it('rejects private network ranges', async () => {
136
+ const { validateExternalUrl } = await import('./export-utils.js');
137
+ assert.strictEqual(validateExternalUrl('https://192.168.1.1'), '');
138
+ assert.strictEqual(validateExternalUrl('https://10.0.0.1'), '');
139
+ assert.strictEqual(validateExternalUrl('https://172.16.0.1'), '');
140
+ });
141
+ it('rejects cloud metadata endpoint', async () => {
142
+ const { validateExternalUrl } = await import('./export-utils.js');
143
+ const result = validateExternalUrl('https://169.254.169.254');
144
+ assert.strictEqual(result, '');
145
+ });
146
+ it('preserves path for subpath installations', async () => {
147
+ const { validateExternalUrl } = await import('./export-utils.js');
148
+ const result = validateExternalUrl('https://example.com/api/v1');
149
+ assert.strictEqual(result, 'https://example.com/api/v1');
150
+ });
151
+ it('strips trailing slash', async () => {
152
+ const { validateExternalUrl } = await import('./export-utils.js');
153
+ const result = validateExternalUrl('https://example.com/api/');
154
+ assert.strictEqual(result, 'https://example.com/api');
155
+ });
156
+ });
157
+ describe('isValidTimestamp', () => {
158
+ it('accepts timestamp in valid range', async () => {
159
+ const { isValidTimestamp } = await import('./export-utils.js');
160
+ const now = Date.now();
161
+ assert.strictEqual(isValidTimestamp(now), true);
162
+ });
163
+ it('rejects timestamp before year 2000', async () => {
164
+ const { isValidTimestamp } = await import('./export-utils.js');
165
+ const pre2000 = new Date('1999-12-31T23:59:59Z').getTime();
166
+ assert.strictEqual(isValidTimestamp(pre2000), false);
167
+ });
168
+ it('rejects timestamp after year 3000', async () => {
169
+ const { isValidTimestamp } = await import('./export-utils.js');
170
+ const post3000 = new Date('3001-01-01T00:00:00Z').getTime();
171
+ assert.strictEqual(isValidTimestamp(post3000), false);
172
+ });
173
+ it('rejects NaN', async () => {
174
+ const { isValidTimestamp } = await import('./export-utils.js');
175
+ assert.strictEqual(isValidTimestamp(NaN), false);
176
+ });
177
+ });
178
+ describe('generateHexId', () => {
179
+ it('generates hex string of correct length', async () => {
180
+ const { generateHexId } = await import('./export-utils.js');
181
+ const id = generateHexId(16);
182
+ assert.strictEqual(id.length, 16);
183
+ assert.ok(/^[0-9a-f]+$/.test(id));
184
+ });
185
+ it('generates different IDs on each call', async () => {
186
+ const { generateHexId } = await import('./export-utils.js');
187
+ const id1 = generateHexId(32);
188
+ const id2 = generateHexId(32);
189
+ assert.notStrictEqual(id1, id2);
190
+ });
191
+ });
192
+ });
193
+ //# sourceMappingURL=export-utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-utils.test.js","sourceRoot":"","sources":["../../src/lib/export-utils.test.ts"],"names":[],"mappings":"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"}