observability-toolkit 1.8.0 → 1.8.4
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 +81 -3
- package/dist/backends/index.d.ts +119 -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.d.ts +5 -0
- package/dist/backends/index.test.d.ts.map +1 -0
- package/dist/backends/index.test.js +156 -0
- package/dist/backends/index.test.js.map +1 -0
- package/dist/backends/local-jsonl-boolean-search.test.js +8 -27
- package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
- package/dist/backends/local-jsonl-logs.test.d.ts +2 -0
- package/dist/backends/local-jsonl-logs.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-logs.test.js +603 -0
- package/dist/backends/local-jsonl-logs.test.js.map +1 -0
- package/dist/backends/local-jsonl-traces.test.d.ts +2 -0
- package/dist/backends/local-jsonl-traces.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-traces.test.js +1723 -0
- package/dist/backends/local-jsonl-traces.test.js.map +1 -0
- package/dist/backends/local-jsonl.d.ts +4 -1
- package/dist/backends/local-jsonl.d.ts.map +1 -1
- package/dist/backends/local-jsonl.js +185 -1
- package/dist/backends/local-jsonl.js.map +1 -1
- package/dist/backends/local-jsonl.test.js +723 -46
- package/dist/backends/local-jsonl.test.js.map +1 -1
- package/dist/backends/signoz-api.d.ts +32 -0
- package/dist/backends/signoz-api.d.ts.map +1 -1
- package/dist/backends/signoz-api.js +231 -33
- package/dist/backends/signoz-api.js.map +1 -1
- package/dist/backends/signoz-api.test.js +410 -63
- package/dist/backends/signoz-api.test.js.map +1 -1
- package/dist/lib/constants.d.ts +59 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +252 -6
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/constants.test.js +357 -21
- package/dist/lib/constants.test.js.map +1 -1
- package/dist/lib/edge-cases.test.d.ts +11 -0
- package/dist/lib/edge-cases.test.d.ts.map +1 -0
- package/dist/lib/edge-cases.test.js +634 -0
- package/dist/lib/edge-cases.test.js.map +1 -0
- package/dist/lib/error-sanitizer.d.ts +57 -0
- package/dist/lib/error-sanitizer.d.ts.map +1 -0
- package/dist/lib/error-sanitizer.js +207 -0
- package/dist/lib/error-sanitizer.js.map +1 -0
- package/dist/lib/error-sanitizer.test.d.ts +8 -0
- package/dist/lib/error-sanitizer.test.d.ts.map +1 -0
- package/dist/lib/error-sanitizer.test.js +369 -0
- package/dist/lib/error-sanitizer.test.js.map +1 -0
- package/dist/lib/file-utils.d.ts +134 -0
- package/dist/lib/file-utils.d.ts.map +1 -1
- package/dist/lib/file-utils.js +395 -9
- package/dist/lib/file-utils.js.map +1 -1
- package/dist/lib/file-utils.test.js +444 -3
- package/dist/lib/file-utils.test.js.map +1 -1
- package/dist/lib/indexer.d.ts +9 -1
- package/dist/lib/indexer.d.ts.map +1 -1
- package/dist/lib/indexer.js +51 -2
- package/dist/lib/indexer.js.map +1 -1
- package/dist/lib/indexer.test.js +138 -20
- package/dist/lib/indexer.test.js.map +1 -1
- package/dist/lib/input-validator.d.ts +103 -0
- package/dist/lib/input-validator.d.ts.map +1 -0
- package/dist/lib/input-validator.js +250 -0
- package/dist/lib/input-validator.js.map +1 -0
- package/dist/lib/input-validator.test.d.ts +2 -0
- package/dist/lib/input-validator.test.d.ts.map +1 -0
- package/dist/lib/input-validator.test.js +287 -0
- package/dist/lib/input-validator.test.js.map +1 -0
- package/dist/lib/query-sanitizer.d.ts +143 -0
- package/dist/lib/query-sanitizer.d.ts.map +1 -0
- package/dist/lib/query-sanitizer.js +261 -0
- package/dist/lib/query-sanitizer.js.map +1 -0
- package/dist/lib/query-sanitizer.test.d.ts +5 -0
- package/dist/lib/query-sanitizer.test.d.ts.map +1 -0
- package/dist/lib/query-sanitizer.test.js +400 -0
- package/dist/lib/query-sanitizer.test.js.map +1 -0
- package/dist/lib/server-utils.d.ts +80 -0
- package/dist/lib/server-utils.d.ts.map +1 -0
- package/dist/lib/server-utils.js +141 -0
- package/dist/lib/server-utils.js.map +1 -0
- package/dist/lib/shared-schemas.d.ts +59 -0
- package/dist/lib/shared-schemas.d.ts.map +1 -0
- package/dist/lib/shared-schemas.js +58 -0
- package/dist/lib/shared-schemas.js.map +1 -0
- package/dist/lib/shared-schemas.test.d.ts +5 -0
- package/dist/lib/shared-schemas.test.d.ts.map +1 -0
- package/dist/lib/shared-schemas.test.js +106 -0
- package/dist/lib/shared-schemas.test.js.map +1 -0
- package/dist/lib/toon-encoder.d.ts +21 -0
- package/dist/lib/toon-encoder.d.ts.map +1 -0
- package/dist/lib/toon-encoder.js +46 -0
- package/dist/lib/toon-encoder.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +155 -81
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +363 -0
- package/dist/server.test.js.map +1 -1
- package/dist/test-helpers/env-utils.d.ts +65 -0
- package/dist/test-helpers/env-utils.d.ts.map +1 -0
- package/dist/test-helpers/env-utils.js +94 -0
- package/dist/test-helpers/env-utils.js.map +1 -0
- package/dist/test-helpers/file-utils.d.ts +93 -0
- package/dist/test-helpers/file-utils.d.ts.map +1 -0
- package/dist/test-helpers/file-utils.js +206 -0
- package/dist/test-helpers/file-utils.js.map +1 -0
- package/dist/test-helpers/index.d.ts +10 -0
- package/dist/test-helpers/index.d.ts.map +1 -0
- package/dist/test-helpers/index.js +28 -0
- package/dist/test-helpers/index.js.map +1 -0
- package/dist/test-helpers/mock-backends.d.ts +139 -0
- package/dist/test-helpers/mock-backends.d.ts.map +1 -0
- package/dist/test-helpers/mock-backends.js +227 -0
- package/dist/test-helpers/mock-backends.js.map +1 -0
- package/dist/test-helpers/mock-backends.test.d.ts +5 -0
- package/dist/test-helpers/mock-backends.test.d.ts.map +1 -0
- package/dist/test-helpers/mock-backends.test.js +368 -0
- package/dist/test-helpers/mock-backends.test.js.map +1 -0
- package/dist/test-helpers/schema-validators.d.ts +32 -0
- package/dist/test-helpers/schema-validators.d.ts.map +1 -0
- package/dist/test-helpers/schema-validators.js +125 -0
- package/dist/test-helpers/schema-validators.js.map +1 -0
- package/dist/test-helpers/test-data-builders.d.ts +223 -0
- package/dist/test-helpers/test-data-builders.d.ts.map +1 -0
- package/dist/test-helpers/test-data-builders.js +288 -0
- package/dist/test-helpers/test-data-builders.js.map +1 -0
- package/dist/test-helpers/test-data-builders.test.d.ts +2 -0
- package/dist/test-helpers/test-data-builders.test.d.ts.map +1 -0
- package/dist/test-helpers/test-data-builders.test.js +306 -0
- package/dist/test-helpers/test-data-builders.test.js.map +1 -0
- package/dist/test-helpers/tool-validators.d.ts +28 -0
- package/dist/test-helpers/tool-validators.d.ts.map +1 -0
- package/dist/test-helpers/tool-validators.js +56 -0
- package/dist/test-helpers/tool-validators.js.map +1 -0
- package/dist/tools/context-stats.d.ts +1 -0
- package/dist/tools/context-stats.d.ts.map +1 -1
- package/dist/tools/context-stats.js +9 -5
- package/dist/tools/context-stats.js.map +1 -1
- package/dist/tools/context-stats.test.js +24 -10
- package/dist/tools/context-stats.test.js.map +1 -1
- package/dist/tools/get-trace-url.js +2 -2
- package/dist/tools/get-trace-url.js.map +1 -1
- package/dist/tools/health-check.js +2 -2
- package/dist/tools/health-check.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/query-evaluations.d.ts +186 -0
- package/dist/tools/query-evaluations.d.ts.map +1 -0
- package/dist/tools/query-evaluations.js +351 -0
- package/dist/tools/query-evaluations.js.map +1 -0
- package/dist/tools/query-evaluations.test.d.ts +5 -0
- package/dist/tools/query-evaluations.test.d.ts.map +1 -0
- package/dist/tools/query-evaluations.test.js +733 -0
- package/dist/tools/query-evaluations.test.js.map +1 -0
- package/dist/tools/query-llm-events.d.ts +24 -18
- package/dist/tools/query-llm-events.d.ts.map +1 -1
- package/dist/tools/query-llm-events.js +103 -60
- package/dist/tools/query-llm-events.js.map +1 -1
- package/dist/tools/query-llm-events.test.js +271 -9
- package/dist/tools/query-llm-events.test.js.map +1 -1
- package/dist/tools/query-logs.d.ts +28 -20
- package/dist/tools/query-logs.d.ts.map +1 -1
- package/dist/tools/query-logs.js +85 -61
- package/dist/tools/query-logs.js.map +1 -1
- package/dist/tools/query-logs.test.js +74 -145
- package/dist/tools/query-logs.test.js.map +1 -1
- package/dist/tools/query-metrics.d.ts +20 -20
- package/dist/tools/query-metrics.d.ts.map +1 -1
- package/dist/tools/query-metrics.js +109 -61
- package/dist/tools/query-metrics.js.map +1 -1
- package/dist/tools/query-metrics.test.js +26 -61
- package/dist/tools/query-metrics.test.js.map +1 -1
- package/dist/tools/query-traces.d.ts +24 -22
- package/dist/tools/query-traces.d.ts.map +1 -1
- package/dist/tools/query-traces.js +95 -70
- package/dist/tools/query-traces.js.map +1 -1
- package/dist/tools/query-traces.test.js +294 -90
- package/dist/tools/query-traces.test.js.map +1 -1
- package/dist/tools/setup-claudeignore.js +7 -7
- package/dist/tools/setup-claudeignore.js.map +1 -1
- package/dist/tools/setup-claudeignore.test.js +4 -25
- package/dist/tools/setup-claudeignore.test.js.map +1 -1
- package/package.json +3 -4
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Unit tests for constants.ts
|
|
3
3
|
*/
|
|
4
|
-
import { describe, it,
|
|
4
|
+
import { describe, it, before, after, beforeEach } from 'node:test';
|
|
5
5
|
import assert from 'node:assert';
|
|
6
|
-
import { join } from 'path';
|
|
7
6
|
import * as fs from 'fs';
|
|
8
7
|
import * as os from 'os';
|
|
8
|
+
import { join } from 'path';
|
|
9
9
|
import * as constants from './constants.js';
|
|
10
|
-
|
|
11
|
-
return fs.mkdtempSync(join(os.tmpdir(), 'constants-test-'));
|
|
12
|
-
}
|
|
13
|
-
function removeTempDir(dir) {
|
|
14
|
-
try {
|
|
15
|
-
fs.rmSync(dir, { recursive: true, force: true });
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
// Ignore cleanup errors
|
|
19
|
-
}
|
|
20
|
-
}
|
|
10
|
+
import { getSharedTempDir, clearTempDir, removeSharedTempDir } from '../test-helpers/file-utils.js';
|
|
21
11
|
describe('Constants', () => {
|
|
22
12
|
describe('CLAUDE_HOME', () => {
|
|
23
13
|
it('should be a string', () => {
|
|
@@ -166,12 +156,158 @@ describe('Constants', () => {
|
|
|
166
156
|
assert(sonnet.input > haiku.input);
|
|
167
157
|
assert(sonnet.output > haiku.output);
|
|
168
158
|
});
|
|
169
|
-
it('output pricing should be
|
|
159
|
+
it('output pricing should be >= input pricing for all models', () => {
|
|
170
160
|
Object.values(constants.MODEL_PRICING).forEach(pricing => {
|
|
171
|
-
assert(pricing.output
|
|
161
|
+
assert(pricing.output >= pricing.input, `Expected output (${pricing.output}) >= input (${pricing.input})`);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
// Multi-provider support tests
|
|
165
|
+
describe('OpenAI models', () => {
|
|
166
|
+
it('should contain gpt-4o', () => {
|
|
167
|
+
assert('gpt-4o' in constants.MODEL_PRICING);
|
|
168
|
+
});
|
|
169
|
+
it('should contain gpt-4o-mini', () => {
|
|
170
|
+
assert('gpt-4o-mini' in constants.MODEL_PRICING);
|
|
171
|
+
});
|
|
172
|
+
it('should contain gpt-4-turbo', () => {
|
|
173
|
+
assert('gpt-4-turbo' in constants.MODEL_PRICING);
|
|
174
|
+
});
|
|
175
|
+
it('should contain gpt-3.5-turbo', () => {
|
|
176
|
+
assert('gpt-3.5-turbo' in constants.MODEL_PRICING);
|
|
177
|
+
});
|
|
178
|
+
it('should contain o1 reasoning model', () => {
|
|
179
|
+
assert('o1' in constants.MODEL_PRICING);
|
|
180
|
+
});
|
|
181
|
+
it('should contain o1-mini', () => {
|
|
182
|
+
assert('o1-mini' in constants.MODEL_PRICING);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('Google Gemini models', () => {
|
|
186
|
+
it('should contain gemini-1.5-pro', () => {
|
|
187
|
+
assert('gemini-1.5-pro' in constants.MODEL_PRICING);
|
|
188
|
+
});
|
|
189
|
+
it('should contain gemini-1.5-flash', () => {
|
|
190
|
+
assert('gemini-1.5-flash' in constants.MODEL_PRICING);
|
|
191
|
+
});
|
|
192
|
+
it('should contain gemini-2.0-flash', () => {
|
|
193
|
+
assert('gemini-2.0-flash' in constants.MODEL_PRICING);
|
|
194
|
+
});
|
|
195
|
+
it('Gemini Pro should have higher pricing than Flash', () => {
|
|
196
|
+
const pro = constants.MODEL_PRICING['gemini-1.5-pro'];
|
|
197
|
+
const flash = constants.MODEL_PRICING['gemini-1.5-flash'];
|
|
198
|
+
assert(pro.input > flash.input);
|
|
199
|
+
assert(pro.output > flash.output);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe('Mistral AI models', () => {
|
|
203
|
+
it('should contain mistral-large', () => {
|
|
204
|
+
assert('mistral-large' in constants.MODEL_PRICING);
|
|
205
|
+
});
|
|
206
|
+
it('should contain mistral-small', () => {
|
|
207
|
+
assert('mistral-small' in constants.MODEL_PRICING);
|
|
208
|
+
});
|
|
209
|
+
it('should contain codestral', () => {
|
|
210
|
+
assert('codestral' in constants.MODEL_PRICING);
|
|
211
|
+
});
|
|
212
|
+
it('Mistral large should have higher pricing than small', () => {
|
|
213
|
+
const large = constants.MODEL_PRICING['mistral-large'];
|
|
214
|
+
const small = constants.MODEL_PRICING['mistral-small'];
|
|
215
|
+
assert(large.input > small.input);
|
|
216
|
+
assert(large.output > small.output);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
describe('Cohere models', () => {
|
|
220
|
+
it('should contain command-r-plus', () => {
|
|
221
|
+
assert('command-r-plus' in constants.MODEL_PRICING);
|
|
222
|
+
});
|
|
223
|
+
it('should contain command-r', () => {
|
|
224
|
+
assert('command-r' in constants.MODEL_PRICING);
|
|
225
|
+
});
|
|
226
|
+
it('Command R Plus should have higher pricing than Command R', () => {
|
|
227
|
+
const plus = constants.MODEL_PRICING['command-r-plus'];
|
|
228
|
+
const r = constants.MODEL_PRICING['command-r'];
|
|
229
|
+
assert(plus.input > r.input);
|
|
230
|
+
assert(plus.output > r.output);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
describe('Groq models', () => {
|
|
234
|
+
it('should contain llama-3.3-70b', () => {
|
|
235
|
+
assert('llama-3.3-70b' in constants.MODEL_PRICING);
|
|
236
|
+
});
|
|
237
|
+
it('should contain llama-3.1-8b', () => {
|
|
238
|
+
assert('llama-3.1-8b' in constants.MODEL_PRICING);
|
|
239
|
+
});
|
|
240
|
+
it('Larger llama model should have higher pricing', () => {
|
|
241
|
+
const large = constants.MODEL_PRICING['llama-3.3-70b'];
|
|
242
|
+
const small = constants.MODEL_PRICING['llama-3.1-8b'];
|
|
243
|
+
assert(large.input > small.input);
|
|
244
|
+
assert(large.output > small.output);
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
describe('Perplexity models', () => {
|
|
248
|
+
it('should contain sonar-pro', () => {
|
|
249
|
+
assert('sonar-pro' in constants.MODEL_PRICING);
|
|
250
|
+
});
|
|
251
|
+
it('should contain sonar', () => {
|
|
252
|
+
assert('sonar' in constants.MODEL_PRICING);
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
describe('model count', () => {
|
|
256
|
+
it('should have at least 30 models defined', () => {
|
|
257
|
+
const modelCount = Object.keys(constants.MODEL_PRICING).length;
|
|
258
|
+
assert(modelCount >= 30, `Expected at least 30 models, got ${modelCount}`);
|
|
172
259
|
});
|
|
173
260
|
});
|
|
174
261
|
});
|
|
262
|
+
describe('MODEL_PRICING_METADATA', () => {
|
|
263
|
+
it('should have lastUpdated as valid ISO date', () => {
|
|
264
|
+
const date = new Date(constants.MODEL_PRICING_METADATA.lastUpdated);
|
|
265
|
+
assert.ok(!isNaN(date.getTime()), 'lastUpdated should be a valid date');
|
|
266
|
+
});
|
|
267
|
+
it('should have staleThresholdDays as positive number', () => {
|
|
268
|
+
assert.ok(constants.MODEL_PRICING_METADATA.staleThresholdDays > 0);
|
|
269
|
+
});
|
|
270
|
+
it('should have staleThresholdDays default to 90', () => {
|
|
271
|
+
assert.strictEqual(constants.MODEL_PRICING_METADATA.staleThresholdDays, 90);
|
|
272
|
+
});
|
|
273
|
+
it('should have sources object with provider URLs', () => {
|
|
274
|
+
const sources = constants.MODEL_PRICING_METADATA.sources;
|
|
275
|
+
assert.ok(typeof sources === 'object');
|
|
276
|
+
assert.ok(sources.anthropic.includes('anthropic.com'));
|
|
277
|
+
assert.ok(sources.openai.includes('openai.com'));
|
|
278
|
+
assert.ok(sources.google.includes('google'));
|
|
279
|
+
assert.ok(sources.mistral.includes('mistral.ai'));
|
|
280
|
+
assert.ok(sources.cohere.includes('cohere.com'));
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
describe('checkPricingStaleness', () => {
|
|
284
|
+
it('should return isStale and daysSinceUpdate', () => {
|
|
285
|
+
const result = constants.checkPricingStaleness();
|
|
286
|
+
assert.ok('isStale' in result);
|
|
287
|
+
assert.ok('daysSinceUpdate' in result);
|
|
288
|
+
assert.strictEqual(typeof result.isStale, 'boolean');
|
|
289
|
+
assert.strictEqual(typeof result.daysSinceUpdate, 'number');
|
|
290
|
+
});
|
|
291
|
+
it('should calculate daysSinceUpdate correctly', () => {
|
|
292
|
+
const result = constants.checkPricingStaleness();
|
|
293
|
+
const lastUpdate = new Date(constants.MODEL_PRICING_METADATA.lastUpdated);
|
|
294
|
+
const now = new Date();
|
|
295
|
+
const expectedDays = Math.floor((now.getTime() - lastUpdate.getTime()) / (1000 * 60 * 60 * 24));
|
|
296
|
+
assert.strictEqual(result.daysSinceUpdate, expectedDays);
|
|
297
|
+
});
|
|
298
|
+
it('should return isStale: true when data is >90 days old', () => {
|
|
299
|
+
// Note: This test documents expected behavior
|
|
300
|
+
// When data is fresh (<90 days), isStale should be false
|
|
301
|
+
// When data is old (>90 days), isStale should be true
|
|
302
|
+
const result = constants.checkPricingStaleness();
|
|
303
|
+
const expectedStale = result.daysSinceUpdate > constants.MODEL_PRICING_METADATA.staleThresholdDays;
|
|
304
|
+
assert.strictEqual(result.isStale, expectedStale);
|
|
305
|
+
});
|
|
306
|
+
it('should return non-negative daysSinceUpdate', () => {
|
|
307
|
+
const result = constants.checkPricingStaleness();
|
|
308
|
+
assert.ok(result.daysSinceUpdate >= 0);
|
|
309
|
+
});
|
|
310
|
+
});
|
|
175
311
|
describe('File patterns', () => {
|
|
176
312
|
describe('TRACES_FILE_PATTERN', () => {
|
|
177
313
|
it('should be a string', () => {
|
|
@@ -298,11 +434,14 @@ describe('Constants', () => {
|
|
|
298
434
|
});
|
|
299
435
|
describe('getTelemetryDirectories', () => {
|
|
300
436
|
let tempDir;
|
|
437
|
+
before(() => {
|
|
438
|
+
tempDir = getSharedTempDir('ConstantsTelemetryDirs');
|
|
439
|
+
});
|
|
301
440
|
beforeEach(() => {
|
|
302
|
-
tempDir
|
|
441
|
+
clearTempDir(tempDir);
|
|
303
442
|
});
|
|
304
|
-
|
|
305
|
-
|
|
443
|
+
after(() => {
|
|
444
|
+
removeSharedTempDir('ConstantsTelemetryDirs');
|
|
306
445
|
});
|
|
307
446
|
it('should return array of directories', () => {
|
|
308
447
|
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
@@ -323,20 +462,26 @@ describe('Constants', () => {
|
|
|
323
462
|
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
324
463
|
const localDir = dirs.find(d => d.source === 'local' && d.path.includes('.claude/telemetry'));
|
|
325
464
|
assert.ok(localDir);
|
|
326
|
-
|
|
465
|
+
// Compare against resolved path since function now resolves all paths
|
|
466
|
+
const resolvedPath = fs.realpathSync(localTelemetry);
|
|
467
|
+
assert.strictEqual(localDir?.path, resolvedPath);
|
|
327
468
|
});
|
|
328
469
|
it('should detect telemetry/ local directory', () => {
|
|
329
470
|
const localTelemetry = join(tempDir, 'telemetry');
|
|
330
471
|
fs.mkdirSync(localTelemetry, { recursive: true });
|
|
331
472
|
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
332
|
-
|
|
473
|
+
// Compare against resolved path since function now resolves all paths
|
|
474
|
+
const resolvedPath = fs.realpathSync(localTelemetry);
|
|
475
|
+
const localDir = dirs.find(d => d.source === 'local' && d.path === resolvedPath);
|
|
333
476
|
assert.ok(localDir);
|
|
334
477
|
});
|
|
335
478
|
it('should detect .telemetry/ local directory', () => {
|
|
336
479
|
const localTelemetry = join(tempDir, '.telemetry');
|
|
337
480
|
fs.mkdirSync(localTelemetry, { recursive: true });
|
|
338
481
|
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
339
|
-
|
|
482
|
+
// Compare against resolved path since function now resolves all paths
|
|
483
|
+
const resolvedPath = fs.realpathSync(localTelemetry);
|
|
484
|
+
const localDir = dirs.find(d => d.source === 'local' && d.path === resolvedPath);
|
|
340
485
|
assert.ok(localDir);
|
|
341
486
|
});
|
|
342
487
|
it('should detect multiple local directories', () => {
|
|
@@ -376,6 +521,197 @@ describe('Constants', () => {
|
|
|
376
521
|
assert.ok(dir.path.length > 0);
|
|
377
522
|
}
|
|
378
523
|
});
|
|
524
|
+
describe('symlink path traversal protection', () => {
|
|
525
|
+
it('should reject symlinks pointing outside allowed directories', () => {
|
|
526
|
+
// Create a symlink that points to /tmp (outside allowed directories)
|
|
527
|
+
const symlinkPath = join(tempDir, 'telemetry');
|
|
528
|
+
const outsideDir = fs.mkdtempSync(join(os.tmpdir(), 'outside-'));
|
|
529
|
+
try {
|
|
530
|
+
fs.symlinkSync(outsideDir, symlinkPath);
|
|
531
|
+
// The symlink should NOT be included because it points outside allowed dirs
|
|
532
|
+
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
533
|
+
const localDirs = dirs.filter(d => d.source === 'local');
|
|
534
|
+
// The symlink should be rejected
|
|
535
|
+
const hasSymlinkTarget = localDirs.some(d => d.path === outsideDir || d.path === symlinkPath);
|
|
536
|
+
assert.strictEqual(hasSymlinkTarget, false, 'Symlink pointing outside allowed dirs should be rejected');
|
|
537
|
+
}
|
|
538
|
+
finally {
|
|
539
|
+
try {
|
|
540
|
+
fs.unlinkSync(symlinkPath);
|
|
541
|
+
fs.rmSync(outsideDir, { recursive: true, force: true });
|
|
542
|
+
}
|
|
543
|
+
catch {
|
|
544
|
+
// Ignore cleanup errors
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
});
|
|
548
|
+
it('should accept symlinks pointing within allowed directories', () => {
|
|
549
|
+
// Create a real telemetry directory within the temp dir
|
|
550
|
+
const realTelemetry = join(tempDir, 'real-telemetry');
|
|
551
|
+
fs.mkdirSync(realTelemetry, { recursive: true });
|
|
552
|
+
// Create a symlink to it from .telemetry
|
|
553
|
+
const symlinkPath = join(tempDir, '.telemetry');
|
|
554
|
+
try {
|
|
555
|
+
fs.symlinkSync(realTelemetry, symlinkPath);
|
|
556
|
+
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
557
|
+
const localDirs = dirs.filter(d => d.source === 'local');
|
|
558
|
+
// The symlink should be accepted and resolved to the real path
|
|
559
|
+
// Note: On macOS, /var is a symlink to /private/var, so we need to compare
|
|
560
|
+
// against the fully resolved path using realpathSync
|
|
561
|
+
const resolvedRealTelemetry = fs.realpathSync(realTelemetry);
|
|
562
|
+
const hasRealPath = localDirs.some(d => d.path === resolvedRealTelemetry);
|
|
563
|
+
assert.ok(hasRealPath, 'Symlink within allowed dirs should resolve to real path');
|
|
564
|
+
}
|
|
565
|
+
finally {
|
|
566
|
+
try {
|
|
567
|
+
fs.unlinkSync(symlinkPath);
|
|
568
|
+
}
|
|
569
|
+
catch {
|
|
570
|
+
// Ignore cleanup errors
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
});
|
|
574
|
+
it('should handle broken symlinks gracefully', () => {
|
|
575
|
+
// Create a symlink pointing to a non-existent path
|
|
576
|
+
const symlinkPath = join(tempDir, 'telemetry');
|
|
577
|
+
const nonExistentPath = join(tempDir, 'does-not-exist-anywhere');
|
|
578
|
+
try {
|
|
579
|
+
fs.symlinkSync(nonExistentPath, symlinkPath);
|
|
580
|
+
// The broken symlink should be handled gracefully (existsSync returns false)
|
|
581
|
+
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
582
|
+
const localDirs = dirs.filter(d => d.source === 'local');
|
|
583
|
+
// Broken symlinks should not be included
|
|
584
|
+
const hasBrokenSymlink = localDirs.some(d => d.path === symlinkPath);
|
|
585
|
+
assert.strictEqual(hasBrokenSymlink, false, 'Broken symlinks should not be included');
|
|
586
|
+
}
|
|
587
|
+
finally {
|
|
588
|
+
try {
|
|
589
|
+
fs.unlinkSync(symlinkPath);
|
|
590
|
+
}
|
|
591
|
+
catch {
|
|
592
|
+
// Ignore cleanup errors
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
});
|
|
596
|
+
it('should not follow symlink chains that escape allowed directories', () => {
|
|
597
|
+
// Create a directory outside temp
|
|
598
|
+
const outsideDir = fs.mkdtempSync(join(os.tmpdir(), 'chain-outside-'));
|
|
599
|
+
const intermediateDir = join(tempDir, 'intermediate');
|
|
600
|
+
fs.mkdirSync(intermediateDir, { recursive: true });
|
|
601
|
+
// Create a symlink in intermediate pointing outside
|
|
602
|
+
const intermediateLink = join(intermediateDir, 'escape');
|
|
603
|
+
try {
|
|
604
|
+
fs.symlinkSync(outsideDir, intermediateLink);
|
|
605
|
+
// Create telemetry symlink pointing to the intermediate escape link
|
|
606
|
+
const telemetryLink = join(tempDir, 'telemetry');
|
|
607
|
+
fs.symlinkSync(intermediateLink, telemetryLink);
|
|
608
|
+
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
609
|
+
const localDirs = dirs.filter(d => d.source === 'local');
|
|
610
|
+
// Neither the symlink nor its chain target should be included
|
|
611
|
+
const hasEscapedPath = localDirs.some(d => d.path === outsideDir || d.path === telemetryLink || d.path === intermediateLink);
|
|
612
|
+
assert.strictEqual(hasEscapedPath, false, 'Symlink chains escaping allowed dirs should be rejected');
|
|
613
|
+
fs.unlinkSync(telemetryLink);
|
|
614
|
+
}
|
|
615
|
+
finally {
|
|
616
|
+
try {
|
|
617
|
+
fs.unlinkSync(intermediateLink);
|
|
618
|
+
fs.rmSync(outsideDir, { recursive: true, force: true });
|
|
619
|
+
}
|
|
620
|
+
catch {
|
|
621
|
+
// Ignore cleanup errors
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
});
|
|
625
|
+
it('should resolve real paths to avoid duplicates from symlinks', () => {
|
|
626
|
+
// Create a real telemetry directory
|
|
627
|
+
const realTelemetry = join(tempDir, 'real-telemetry');
|
|
628
|
+
fs.mkdirSync(realTelemetry, { recursive: true });
|
|
629
|
+
// Create two symlinks pointing to the same real directory
|
|
630
|
+
const symlinkPath1 = join(tempDir, 'telemetry');
|
|
631
|
+
const symlinkPath2 = join(tempDir, '.telemetry');
|
|
632
|
+
try {
|
|
633
|
+
fs.symlinkSync(realTelemetry, symlinkPath1);
|
|
634
|
+
fs.symlinkSync(realTelemetry, symlinkPath2);
|
|
635
|
+
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
636
|
+
const localDirs = dirs.filter(d => d.source === 'local');
|
|
637
|
+
// Both symlinks resolve to the same real path, so only one entry
|
|
638
|
+
// Note: On macOS, /var is a symlink to /private/var, so compare resolved paths
|
|
639
|
+
const resolvedRealTelemetry = fs.realpathSync(realTelemetry);
|
|
640
|
+
const realPathCount = localDirs.filter(d => d.path === resolvedRealTelemetry).length;
|
|
641
|
+
assert.strictEqual(realPathCount, 1, 'Multiple symlinks to same target should only appear once');
|
|
642
|
+
}
|
|
643
|
+
finally {
|
|
644
|
+
try {
|
|
645
|
+
fs.unlinkSync(symlinkPath1);
|
|
646
|
+
fs.unlinkSync(symlinkPath2);
|
|
647
|
+
}
|
|
648
|
+
catch {
|
|
649
|
+
// Ignore cleanup errors
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
it('should use atomic path check to prevent TOCTOU race conditions', () => {
|
|
654
|
+
// This test verifies that the implementation uses atomic operations
|
|
655
|
+
// by checking that both symlink detection and resolution happen together
|
|
656
|
+
const realTelemetry = join(tempDir, 'atomic-test-target');
|
|
657
|
+
fs.mkdirSync(realTelemetry, { recursive: true });
|
|
658
|
+
const symlinkPath = join(tempDir, 'telemetry');
|
|
659
|
+
try {
|
|
660
|
+
fs.symlinkSync(realTelemetry, symlinkPath);
|
|
661
|
+
// Call getTelemetryDirectories - it should atomically check and resolve
|
|
662
|
+
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
663
|
+
const localDirs = dirs.filter(d => d.source === 'local');
|
|
664
|
+
// The resolved path should be the real target
|
|
665
|
+
const resolvedRealTelemetry = fs.realpathSync(realTelemetry);
|
|
666
|
+
const hasAtomicallyResolved = localDirs.some(d => d.path === resolvedRealTelemetry);
|
|
667
|
+
assert.ok(hasAtomicallyResolved, 'Should atomically resolve symlink to real path');
|
|
668
|
+
// Should NOT contain the symlink path itself
|
|
669
|
+
const hasSymlinkPath = localDirs.some(d => d.path === symlinkPath);
|
|
670
|
+
assert.strictEqual(hasSymlinkPath, false, 'Should use resolved path, not symlink path');
|
|
671
|
+
}
|
|
672
|
+
finally {
|
|
673
|
+
try {
|
|
674
|
+
fs.unlinkSync(symlinkPath);
|
|
675
|
+
}
|
|
676
|
+
catch {
|
|
677
|
+
// Ignore cleanup errors
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
});
|
|
681
|
+
it('should reject symlinks pointing to files (not directories)', () => {
|
|
682
|
+
// Create a file instead of a directory
|
|
683
|
+
const targetFile = join(tempDir, 'target-file.txt');
|
|
684
|
+
fs.writeFileSync(targetFile, 'test content');
|
|
685
|
+
const symlinkPath = join(tempDir, 'telemetry');
|
|
686
|
+
try {
|
|
687
|
+
fs.symlinkSync(targetFile, symlinkPath);
|
|
688
|
+
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
689
|
+
const localDirs = dirs.filter(d => d.source === 'local');
|
|
690
|
+
// Symlink to file should be rejected (telemetry must be a directory)
|
|
691
|
+
const hasFileSymlink = localDirs.some(d => d.path === targetFile || d.path === symlinkPath);
|
|
692
|
+
assert.strictEqual(hasFileSymlink, false, 'Symlink to file should be rejected');
|
|
693
|
+
}
|
|
694
|
+
finally {
|
|
695
|
+
try {
|
|
696
|
+
fs.unlinkSync(symlinkPath);
|
|
697
|
+
fs.unlinkSync(targetFile);
|
|
698
|
+
}
|
|
699
|
+
catch {
|
|
700
|
+
// Ignore cleanup errors
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
});
|
|
704
|
+
it('should handle permission denied errors gracefully', () => {
|
|
705
|
+
// This test verifies error handling in atomic path check
|
|
706
|
+
// Create a directory with restricted permissions (if possible)
|
|
707
|
+
const restrictedDir = join(tempDir, 'restricted');
|
|
708
|
+
fs.mkdirSync(restrictedDir, { recursive: true });
|
|
709
|
+
// Note: On some systems, we may not be able to test permission denied
|
|
710
|
+
// This test verifies the function doesn't throw on inaccessible paths
|
|
711
|
+
const dirs = constants.getTelemetryDirectories(tempDir);
|
|
712
|
+
assert.ok(Array.isArray(dirs), 'Should return array even with permission issues');
|
|
713
|
+
});
|
|
714
|
+
});
|
|
379
715
|
});
|
|
380
716
|
});
|
|
381
717
|
//# sourceMappingURL=constants.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.test.js","sourceRoot":"","sources":["../../src/lib/constants.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.test.js","sourceRoot":"","sources":["../../src/lib/constants.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge case tests for security and robustness (T2)
|
|
3
|
+
*
|
|
4
|
+
* Covers:
|
|
5
|
+
* - Malformed JSONL with null bytes
|
|
6
|
+
* - Extremely large attribute values
|
|
7
|
+
* - Time range edge cases spanning year boundaries
|
|
8
|
+
* - Integer overflow in timestamp calculations
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=edge-cases.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-cases.test.d.ts","sourceRoot":"","sources":["../../src/lib/edge-cases.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|