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.
- package/README.md +126 -5
- package/dist/backends/index.d.ts +163 -0
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +57 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/index.test.js +55 -1
- package/dist/backends/index.test.js.map +1 -1
- package/dist/backends/local-jsonl.d.ts +30 -0
- package/dist/backends/local-jsonl.d.ts.map +1 -1
- package/dist/backends/local-jsonl.js +912 -550
- package/dist/backends/local-jsonl.js.map +1 -1
- package/dist/backends/signoz-api-rate-limiter.test.js +2 -1
- package/dist/backends/signoz-api-rate-limiter.test.js.map +1 -1
- package/dist/backends/signoz-api.d.ts +16 -2
- package/dist/backends/signoz-api.d.ts.map +1 -1
- package/dist/backends/signoz-api.js +650 -534
- package/dist/backends/signoz-api.js.map +1 -1
- package/dist/backends/signoz-api.test.js +6 -5
- package/dist/backends/signoz-api.test.js.map +1 -1
- package/dist/lib/agent-as-judge.d.ts +388 -0
- package/dist/lib/agent-as-judge.d.ts.map +1 -0
- package/dist/lib/agent-as-judge.js +740 -0
- package/dist/lib/agent-as-judge.js.map +1 -0
- package/dist/lib/agent-as-judge.test.d.ts +5 -0
- package/dist/lib/agent-as-judge.test.d.ts.map +1 -0
- package/dist/lib/agent-as-judge.test.js +816 -0
- package/dist/lib/agent-as-judge.test.js.map +1 -0
- package/dist/lib/cache.d.ts +15 -2
- package/dist/lib/cache.d.ts.map +1 -1
- package/dist/lib/cache.js +16 -2
- package/dist/lib/cache.js.map +1 -1
- package/dist/lib/circuit-breaker.d.ts +18 -0
- package/dist/lib/circuit-breaker.d.ts.map +1 -1
- package/dist/lib/circuit-breaker.js +41 -8
- package/dist/lib/circuit-breaker.js.map +1 -1
- package/dist/lib/confident-export.d.ts +101 -0
- package/dist/lib/confident-export.d.ts.map +1 -0
- package/dist/lib/confident-export.js +393 -0
- package/dist/lib/confident-export.js.map +1 -0
- package/dist/lib/confident-export.test.d.ts +7 -0
- package/dist/lib/confident-export.test.d.ts.map +1 -0
- package/dist/lib/confident-export.test.js +835 -0
- package/dist/lib/confident-export.test.js.map +1 -0
- package/dist/lib/constants.d.ts +75 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +104 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/datadog-export.d.ts +156 -0
- package/dist/lib/datadog-export.d.ts.map +1 -0
- package/dist/lib/datadog-export.js +464 -0
- package/dist/lib/datadog-export.js.map +1 -0
- package/dist/lib/datadog-export.test.d.ts +14 -0
- package/dist/lib/datadog-export.test.d.ts.map +1 -0
- package/dist/lib/datadog-export.test.js +890 -0
- package/dist/lib/datadog-export.test.js.map +1 -0
- package/dist/lib/evaluation-hooks.d.ts +49 -0
- package/dist/lib/evaluation-hooks.d.ts.map +1 -0
- package/dist/lib/evaluation-hooks.js +488 -0
- package/dist/lib/evaluation-hooks.js.map +1 -0
- package/dist/lib/evaluation-hooks.test.d.ts +8 -0
- package/dist/lib/evaluation-hooks.test.d.ts.map +1 -0
- package/dist/lib/evaluation-hooks.test.js +624 -0
- package/dist/lib/evaluation-hooks.test.js.map +1 -0
- package/dist/lib/export-utils.d.ts +99 -0
- package/dist/lib/export-utils.d.ts.map +1 -0
- package/dist/lib/export-utils.js +238 -0
- package/dist/lib/export-utils.js.map +1 -0
- package/dist/lib/export-utils.test.d.ts +5 -0
- package/dist/lib/export-utils.test.d.ts.map +1 -0
- package/dist/lib/export-utils.test.js +193 -0
- package/dist/lib/export-utils.test.js.map +1 -0
- package/dist/lib/file-utils.d.ts +17 -2
- package/dist/lib/file-utils.d.ts.map +1 -1
- package/dist/lib/file-utils.js +24 -5
- package/dist/lib/file-utils.js.map +1 -1
- package/dist/lib/file-utils.test.js +30 -0
- package/dist/lib/file-utils.test.js.map +1 -1
- package/dist/lib/histogram.d.ts +119 -0
- package/dist/lib/histogram.d.ts.map +1 -0
- package/dist/lib/histogram.js +202 -0
- package/dist/lib/histogram.js.map +1 -0
- package/dist/lib/histogram.test.d.ts +5 -0
- package/dist/lib/histogram.test.d.ts.map +1 -0
- package/dist/lib/histogram.test.js +381 -0
- package/dist/lib/histogram.test.js.map +1 -0
- package/dist/lib/instrumentation.d.ts +153 -0
- package/dist/lib/instrumentation.d.ts.map +1 -0
- package/dist/lib/instrumentation.integration.test.d.ts +2 -0
- package/dist/lib/instrumentation.integration.test.d.ts.map +1 -0
- package/dist/lib/instrumentation.integration.test.js +589 -0
- package/dist/lib/instrumentation.integration.test.js.map +1 -0
- package/dist/lib/instrumentation.js +520 -0
- package/dist/lib/instrumentation.js.map +1 -0
- package/dist/lib/instrumentation.test.d.ts +2 -0
- package/dist/lib/instrumentation.test.d.ts.map +1 -0
- package/dist/lib/instrumentation.test.js +821 -0
- package/dist/lib/instrumentation.test.js.map +1 -0
- package/dist/lib/langfuse-export.d.ts +125 -0
- package/dist/lib/langfuse-export.d.ts.map +1 -0
- package/dist/lib/langfuse-export.js +367 -0
- package/dist/lib/langfuse-export.js.map +1 -0
- package/dist/lib/langfuse-export.test.d.ts +7 -0
- package/dist/lib/langfuse-export.test.d.ts.map +1 -0
- package/dist/lib/langfuse-export.test.js +1007 -0
- package/dist/lib/langfuse-export.test.js.map +1 -0
- package/dist/lib/llm-as-judge.d.ts +657 -0
- package/dist/lib/llm-as-judge.d.ts.map +1 -0
- package/dist/lib/llm-as-judge.js +1397 -0
- package/dist/lib/llm-as-judge.js.map +1 -0
- package/dist/lib/llm-as-judge.test.d.ts +2 -0
- package/dist/lib/llm-as-judge.test.d.ts.map +1 -0
- package/dist/lib/llm-as-judge.test.js +2409 -0
- package/dist/lib/llm-as-judge.test.js.map +1 -0
- package/dist/lib/logger.d.ts +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/metrics.d.ts +62 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +166 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/metrics.test.d.ts +5 -0
- package/dist/lib/metrics.test.d.ts.map +1 -0
- package/dist/lib/metrics.test.js +189 -0
- package/dist/lib/metrics.test.js.map +1 -0
- package/dist/lib/parse-stats.d.ts +119 -0
- package/dist/lib/parse-stats.d.ts.map +1 -0
- package/dist/lib/parse-stats.js +206 -0
- package/dist/lib/parse-stats.js.map +1 -0
- package/dist/lib/parse-stats.test.d.ts +5 -0
- package/dist/lib/parse-stats.test.d.ts.map +1 -0
- package/dist/lib/parse-stats.test.js +283 -0
- package/dist/lib/parse-stats.test.js.map +1 -0
- package/dist/lib/phoenix-export.d.ts +109 -0
- package/dist/lib/phoenix-export.d.ts.map +1 -0
- package/dist/lib/phoenix-export.js +429 -0
- package/dist/lib/phoenix-export.js.map +1 -0
- package/dist/lib/phoenix-export.test.d.ts +11 -0
- package/dist/lib/phoenix-export.test.d.ts.map +1 -0
- package/dist/lib/phoenix-export.test.js +725 -0
- package/dist/lib/phoenix-export.test.js.map +1 -0
- package/dist/lib/server-utils.d.ts +6 -1
- package/dist/lib/server-utils.d.ts.map +1 -1
- package/dist/lib/server-utils.js +9 -1
- package/dist/lib/server-utils.js.map +1 -1
- package/dist/lib/shared-schemas.d.ts +6 -0
- package/dist/lib/shared-schemas.d.ts.map +1 -1
- package/dist/lib/shared-schemas.js +11 -4
- package/dist/lib/shared-schemas.js.map +1 -1
- package/dist/lib/verification-events.d.ts +100 -0
- package/dist/lib/verification-events.d.ts.map +1 -0
- package/dist/lib/verification-events.js +162 -0
- package/dist/lib/verification-events.js.map +1 -0
- package/dist/lib/verification-events.test.d.ts +5 -0
- package/dist/lib/verification-events.test.d.ts.map +1 -0
- package/dist/lib/verification-events.test.js +193 -0
- package/dist/lib/verification-events.test.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +77 -21
- package/dist/server.js.map +1 -1
- package/dist/tools/context-stats.d.ts.map +1 -1
- package/dist/tools/context-stats.js +6 -8
- package/dist/tools/context-stats.js.map +1 -1
- package/dist/tools/export-confident.d.ts +145 -0
- package/dist/tools/export-confident.d.ts.map +1 -0
- package/dist/tools/export-confident.js +134 -0
- package/dist/tools/export-confident.js.map +1 -0
- package/dist/tools/export-confident.test.d.ts +7 -0
- package/dist/tools/export-confident.test.d.ts.map +1 -0
- package/dist/tools/export-confident.test.js +332 -0
- package/dist/tools/export-confident.test.js.map +1 -0
- package/dist/tools/export-datadog.d.ts +160 -0
- package/dist/tools/export-datadog.d.ts.map +1 -0
- package/dist/tools/export-datadog.js +160 -0
- package/dist/tools/export-datadog.js.map +1 -0
- package/dist/tools/export-datadog.test.d.ts +8 -0
- package/dist/tools/export-datadog.test.d.ts.map +1 -0
- package/dist/tools/export-datadog.test.js +419 -0
- package/dist/tools/export-datadog.test.js.map +1 -0
- package/dist/tools/export-langfuse.d.ts +137 -0
- package/dist/tools/export-langfuse.d.ts.map +1 -0
- package/dist/tools/export-langfuse.js +131 -0
- package/dist/tools/export-langfuse.js.map +1 -0
- package/dist/tools/export-langfuse.test.d.ts +7 -0
- package/dist/tools/export-langfuse.test.d.ts.map +1 -0
- package/dist/tools/export-langfuse.test.js +303 -0
- package/dist/tools/export-langfuse.test.js.map +1 -0
- package/dist/tools/export-phoenix.d.ts +145 -0
- package/dist/tools/export-phoenix.d.ts.map +1 -0
- package/dist/tools/export-phoenix.js +135 -0
- package/dist/tools/export-phoenix.js.map +1 -0
- package/dist/tools/export-phoenix.test.d.ts +7 -0
- package/dist/tools/export-phoenix.test.d.ts.map +1 -0
- package/dist/tools/export-phoenix.test.js +316 -0
- package/dist/tools/export-phoenix.test.js.map +1 -0
- package/dist/tools/health-check.d.ts +26 -0
- package/dist/tools/health-check.d.ts.map +1 -1
- package/dist/tools/health-check.js +36 -7
- package/dist/tools/health-check.js.map +1 -1
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inject-evaluations.d.ts +1315 -0
- package/dist/tools/inject-evaluations.d.ts.map +1 -0
- package/dist/tools/inject-evaluations.js +121 -0
- package/dist/tools/inject-evaluations.js.map +1 -0
- package/dist/tools/inject-evaluations.test.d.ts +5 -0
- package/dist/tools/inject-evaluations.test.d.ts.map +1 -0
- package/dist/tools/inject-evaluations.test.js +359 -0
- package/dist/tools/inject-evaluations.test.js.map +1 -0
- package/dist/tools/query-evaluations.d.ts +25 -4
- package/dist/tools/query-evaluations.d.ts.map +1 -1
- package/dist/tools/query-evaluations.js +10 -0
- package/dist/tools/query-evaluations.js.map +1 -1
- package/dist/tools/query-llm-events.js +2 -2
- package/dist/tools/query-llm-events.js.map +1 -1
- package/dist/tools/query-logs.d.ts +8 -8
- package/dist/tools/query-logs.js +3 -3
- package/dist/tools/query-logs.js.map +1 -1
- package/dist/tools/query-metrics.d.ts +4 -4
- package/dist/tools/query-metrics.js +2 -2
- package/dist/tools/query-metrics.js.map +1 -1
- package/dist/tools/query-traces.d.ts +8 -8
- package/dist/tools/query-verifications.d.ts +111 -0
- package/dist/tools/query-verifications.d.ts.map +1 -0
- package/dist/tools/query-verifications.js +101 -0
- package/dist/tools/query-verifications.js.map +1 -0
- package/dist/tools/query-verifications.test.d.ts +5 -0
- package/dist/tools/query-verifications.test.d.ts.map +1 -0
- package/dist/tools/query-verifications.test.js +156 -0
- package/dist/tools/query-verifications.test.js.map +1 -0
- package/dist/types/evaluation-hooks.d.ts +176 -0
- package/dist/types/evaluation-hooks.d.ts.map +1 -0
- package/dist/types/evaluation-hooks.js +49 -0
- package/dist/types/evaluation-hooks.js.map +1 -0
- 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":"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"}
|
|
@@ -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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"}
|