@testivai/witness 1.13.0 → 2.0.1

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 (108) hide show
  1. package/README.md +5 -10
  2. package/dist/baselines/store.d.ts +1 -1
  3. package/dist/baselines/store.d.ts.map +1 -1
  4. package/dist/baselines/store.js.map +1 -1
  5. package/dist/bin/testivai.js +0 -2
  6. package/dist/bin/testivai.js.map +1 -1
  7. package/dist/browser/binding.d.ts +1 -6
  8. package/dist/browser/binding.d.ts.map +1 -1
  9. package/dist/browser/binding.js +6 -139
  10. package/dist/browser/binding.js.map +1 -1
  11. package/dist/browser/capture.d.ts +2 -3
  12. package/dist/browser/capture.d.ts.map +1 -1
  13. package/dist/browser/capture.js +7 -19
  14. package/dist/browser/capture.js.map +1 -1
  15. package/dist/browser/client.d.ts +2 -2
  16. package/dist/browser/client.d.ts.map +1 -1
  17. package/dist/browser/client.js.map +1 -1
  18. package/dist/browser/discovery.d.ts +1 -1
  19. package/dist/browser/discovery.d.ts.map +1 -1
  20. package/dist/browser/discovery.js +5 -5
  21. package/dist/browser/discovery.js.map +1 -1
  22. package/dist/commands/capture.js.map +1 -1
  23. package/dist/commands/init.d.ts +3 -3
  24. package/dist/commands/init.js +10 -8
  25. package/dist/commands/init.js.map +1 -1
  26. package/dist/commands/run.d.ts.map +1 -1
  27. package/dist/commands/run.js +45 -443
  28. package/dist/commands/run.js.map +1 -1
  29. package/dist/config/index.d.ts +3 -1
  30. package/dist/config/index.d.ts.map +1 -1
  31. package/dist/config/index.js +3 -2
  32. package/dist/config/index.js.map +1 -1
  33. package/dist/config/local-config.d.ts +7 -9
  34. package/dist/config/local-config.d.ts.map +1 -1
  35. package/dist/config/local-config.js +32 -25
  36. package/dist/config/local-config.js.map +1 -1
  37. package/dist/config/validate-config.d.ts +33 -0
  38. package/dist/config/validate-config.d.ts.map +1 -0
  39. package/dist/config/validate-config.js +125 -0
  40. package/dist/config/validate-config.js.map +1 -0
  41. package/dist/diff/attribution.d.ts +1 -1
  42. package/dist/diff/attribution.d.ts.map +1 -1
  43. package/dist/diff/diff.d.ts +1 -1
  44. package/dist/diff/diff.d.ts.map +1 -1
  45. package/dist/diff/diff.js +3 -3
  46. package/dist/diff/diff.js.map +1 -1
  47. package/dist/diff/dom-diff.js +1 -1
  48. package/dist/diff/dom-diff.js.map +1 -1
  49. package/dist/diff/ignore.d.ts +1 -1
  50. package/dist/diff/ignore.d.ts.map +1 -1
  51. package/dist/diff/mask.d.ts +2 -2
  52. package/dist/diff/mask.d.ts.map +1 -1
  53. package/dist/diff/mask.js +2 -2
  54. package/dist/diff/mask.js.map +1 -1
  55. package/dist/diff/regions.d.ts +1 -1
  56. package/dist/diff/regions.d.ts.map +1 -1
  57. package/dist/diff/resize.d.ts +1 -1
  58. package/dist/diff/resize.d.ts.map +1 -1
  59. package/dist/index.d.ts +1 -3
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -20
  62. package/dist/index.js.map +1 -1
  63. package/dist/report/compare.d.ts +3 -3
  64. package/dist/report/compare.d.ts.map +1 -1
  65. package/dist/report/compare.js +1 -1
  66. package/dist/report/compare.js.map +1 -1
  67. package/dist/report/generator.d.ts +2 -2
  68. package/dist/report/generator.d.ts.map +1 -1
  69. package/dist/report/generator.js.map +1 -1
  70. package/dist/report/template.d.ts +1 -1
  71. package/dist/report/template.d.ts.map +1 -1
  72. package/dist/report/template.js +16 -17
  73. package/dist/report/template.js.map +1 -1
  74. package/dist/standalone/launcher.d.ts +12 -0
  75. package/dist/standalone/launcher.d.ts.map +1 -1
  76. package/dist/standalone/launcher.js +41 -6
  77. package/dist/standalone/launcher.js.map +1 -1
  78. package/dist/standalone/run.js.map +1 -1
  79. package/dist/types.d.ts +13 -136
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/types.js +0 -1
  82. package/dist/types.js.map +1 -1
  83. package/dist/utils/file-naming.d.ts.map +1 -1
  84. package/dist/utils/file-naming.js +14 -5
  85. package/dist/utils/file-naming.js.map +1 -1
  86. package/dist/utils/framework-detect.d.ts +1 -1
  87. package/dist/utils/framework-detect.d.ts.map +1 -1
  88. package/dist/utils/framework-detect.js +9 -9
  89. package/dist/utils/framework-detect.js.map +1 -1
  90. package/dist/utils/logger.d.ts +0 -1
  91. package/dist/utils/logger.d.ts.map +1 -1
  92. package/dist/utils/logger.js +10 -15
  93. package/dist/utils/logger.js.map +1 -1
  94. package/dist/utils/process.d.ts +1 -1
  95. package/dist/utils/process.d.ts.map +1 -1
  96. package/dist/utils/process.js.map +1 -1
  97. package/dist/utils/template-generator.d.ts.map +1 -1
  98. package/dist/utils/template-generator.js +0 -6
  99. package/dist/utils/template-generator.js.map +1 -1
  100. package/package.json +7 -9
  101. package/dist/ci.d.ts +0 -31
  102. package/dist/ci.d.ts.map +0 -1
  103. package/dist/ci.js +0 -118
  104. package/dist/ci.js.map +0 -1
  105. package/dist/commands/auth.d.ts +0 -3
  106. package/dist/commands/auth.d.ts.map +0 -1
  107. package/dist/commands/auth.js +0 -129
  108. package/dist/commands/auth.js.map +0 -1
@@ -1,37 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
@@ -42,29 +9,21 @@ const chalk_1 = __importDefault(require("chalk"));
42
9
  const client_1 = require("../browser/client");
43
10
  const binding_1 = require("../browser/binding");
44
11
  const discovery_1 = require("../browser/discovery");
45
- const common_1 = require("@testivai/common");
46
12
  const process_1 = require("../utils/process");
47
13
  const logger_1 = require("../utils/logger");
48
- const ci_1 = require("../ci");
49
- const simple_git_1 = __importDefault(require("simple-git"));
50
14
  const local_config_1 = require("../config/local-config");
51
15
  const generator_1 = require("../report/generator");
52
16
  exports.runCommand = new commander_1.Command('run')
53
17
  .description('Run visual tests with automatic capture')
54
18
  .argument('<command>', 'Test command to execute (e.g., "npm test", "cypress run")')
55
19
  .option('-p, --port <number>', 'Chrome remote debugging port')
56
- .option('-b, --batch-id <id>', 'Specify batch ID (auto-generated if not provided)')
57
20
  .option('--debug', 'Enable debug logging for snapshots')
58
21
  .action(async (command, options) => {
59
22
  let client = null;
60
23
  let processManager = null;
61
- let batchId = null;
62
24
  // Setup signal handlers for cleanup
63
25
  (0, process_1.setupSignalHandlers)(async () => {
64
26
  logger_1.logger.info('Cleaning up...');
65
- if (batchId) {
66
- await finishBatch(batchId);
67
- }
68
27
  if (client) {
69
28
  await client.disconnect();
70
29
  }
@@ -73,141 +32,17 @@ exports.runCommand = new commander_1.Command('run')
73
32
  }
74
33
  });
75
34
  try {
76
- // ── Local mode check ────────────────────────────────────────────────
77
35
  const cwd = process.cwd();
78
- if ((0, local_config_1.isLocalMode)(cwd)) {
79
- const localConfig = (0, local_config_1.loadLocalConfig)(cwd);
80
- logger_1.logger.info('Running in local mode...');
81
- // Get browser port from options or default
82
- const port = parseInt(options.port || '9222', 10);
83
- // Start the test command FIRST (non-blocking)
84
- logger_1.logger.info(`Starting test command: ${chalk_1.default.cyan(command)}`);
85
- processManager = new process_1.ProcessManager(command, [], {
86
- cwd,
87
- env: {
88
- ...process.env,
89
- TESTIVAI_MODE: 'local',
90
- TESTIVAI_BROWSER_PORT: port.toString(),
91
- TESTIVAI_CDP_PORT: port.toString(),
92
- },
93
- });
94
- await processManager.start();
95
- // Give the test command a moment to start launching Chrome
96
- logger_1.logger.info('Waiting for test runner to start...');
97
- await new Promise(resolve => setTimeout(resolve, 2000));
98
- // Now wait for Chrome to become available
99
- logger_1.logger.info('Waiting for browser connection...');
100
- client = new client_1.BrowserClient();
101
- let connected = false;
102
- let retryCount = 0;
103
- const maxRetries = 60; // Wait up to 60 seconds for Chrome to start
104
- while (!connected && retryCount < maxRetries && processManager.isRunning()) {
105
- try {
106
- await client.connect(port);
107
- connected = true;
108
- logger_1.logger.info('Successfully connected to browser');
109
- }
110
- catch (error) {
111
- retryCount++;
112
- if (retryCount >= maxRetries) {
113
- logger_1.logger.warn(`Failed to connect to Chrome after ${maxRetries} attempts. Continuing without browser capture...`);
114
- break;
115
- }
116
- if (!processManager.isRunning()) {
117
- logger_1.logger.warn(`Test command exited before Chrome could start. Continuing without browser capture...`);
118
- break;
119
- }
120
- logger_1.logger.info(`Waiting for Chrome on port ${port}... (${retryCount}/${maxRetries})`);
121
- await new Promise(resolve => setTimeout(resolve, 1000));
122
- }
123
- }
124
- // Set up browser binding if connected
125
- let binding = null;
126
- if (connected) {
127
- binding = new binding_1.BrowserBinding(client, { debug: false });
128
- await binding.setupBindings();
129
- logger_1.logger.info('Browser binding setup complete');
130
- }
131
- // Wait for the test command to complete
132
- logger_1.logger.info('Monitoring test execution...');
133
- const result = await processManager.wait();
134
- // Get all captured snapshots
135
- let snapshots = [];
136
- if (binding) {
137
- snapshots = binding.getSnapshots();
138
- logger_1.logger.info(`Captured ${snapshots.length} snapshot(s)`);
139
- binding.cleanup();
140
- }
141
- // Clean up browser connection
142
- if (client) {
143
- await client.disconnect();
144
- }
145
- // Generate report
146
- logger_1.logger.info('Generating visual report...');
147
- const reportData = (0, generator_1.generateReport)({
148
- projectRoot: cwd,
149
- reportDir: localConfig.reportDir || 'visual-report',
150
- threshold: localConfig.threshold,
151
- autoOpen: localConfig.autoOpen,
152
- });
153
- // Print summary
154
- const { summary } = reportData;
155
- console.log();
156
- console.log(chalk_1.default.cyan(' ═══ Visual Report Summary ═══'));
157
- console.log(` Total: ${summary.total} | ` +
158
- chalk_1.default.green(`Passed: ${summary.passed}`) + ' | ' +
159
- chalk_1.default.red(`Changed: ${summary.changed}`) + ' | ' +
160
- chalk_1.default.yellow(`New: ${summary.newSnapshots}`));
161
- if (summary.changed > 0 || summary.newSnapshots > 0) {
162
- console.log();
163
- console.log(chalk_1.default.gray(' To approve all: npx testivai approve --all'));
164
- }
165
- // Exit code
166
- if (localConfig.failOnDiff && summary.changed > 0) {
167
- process.exit(1);
168
- }
169
- process.exit(result.exitCode || 0);
170
- }
171
- // ── Cloud mode (existing flow) ──────────────────────────────────────
172
- // Load configuration
173
- const config = (0, common_1.loadConfig)();
174
- const apiKey = (0, common_1.getApiKey)();
175
- // Check debug flag from command line or config
176
- const isDebug = options.debug || config?.debug || false;
177
- if (!apiKey) {
178
- logger_1.logger.error('Not authenticated. Run "testivai auth <api-key>" first.');
179
- process.exit(2);
180
- }
181
- // Validate API key
182
- logger_1.logger.info('Validating API key...');
183
- const apiClient = new common_1.CoreApiClient(apiKey);
184
- const validation = await apiClient.validateApiKey();
185
- if (!validation.valid) {
186
- logger_1.logger.error(`Invalid API key: ${validation.error}`);
187
- process.exit(2);
188
- }
189
- // Get browser port from config or options
190
- const resolvedConfig = await config;
191
- const port = parseInt(options.port || resolvedConfig.browserPort || resolvedConfig.cdpPort || '9222', 10);
192
- // Get git info first (doesn't require Chrome)
193
- const gitInfo = await getGitInfo();
194
- // Detect CI environment
195
- const ciRunId = (0, ci_1.getCiRunId)();
196
- const ciInfo = (0, ci_1.getCiInfo)();
197
- if (ciRunId && isDebug) {
198
- logger_1.logger.info(`Detected CI environment. Run ID: ${ciRunId}`);
199
- if (ciInfo) {
200
- logger_1.logger.info(`CI Info: provider=${ciInfo.provider}, PR=#${ciInfo.prNumber || 'N/A'}`);
201
- }
202
- }
36
+ const localConfig = (0, local_config_1.loadLocalConfig)(cwd);
37
+ // Get browser port from options or default
38
+ const port = parseInt(options.port || '9222', 10);
203
39
  // Start the test command FIRST (non-blocking)
204
- // This allows the test runner to launch Chrome
205
40
  logger_1.logger.info(`Starting test command: ${chalk_1.default.cyan(command)}`);
206
41
  processManager = new process_1.ProcessManager(command, [], {
207
- cwd: process.cwd(),
42
+ cwd,
208
43
  env: {
209
44
  ...process.env,
210
- TESTIVAI_MODE: 'true',
45
+ TESTIVAI_MODE: 'local',
211
46
  TESTIVAI_BROWSER_PORT: port.toString(),
212
47
  TESTIVAI_CDP_PORT: port.toString(),
213
48
  },
@@ -228,51 +63,64 @@ exports.runCommand = new commander_1.Command('run')
228
63
  connected = true;
229
64
  logger_1.logger.info('Successfully connected to browser');
230
65
  }
231
- catch (error) {
66
+ catch (_error) {
232
67
  retryCount++;
233
68
  if (retryCount >= maxRetries) {
234
- throw new Error(`Failed to connect to Chrome after ${maxRetries} attempts. The test runner may not be launching Chrome with --remote-debugging-port=${port}`);
69
+ logger_1.logger.warn(`Failed to connect to Chrome after ${maxRetries} attempts. Continuing without browser capture...`);
70
+ break;
235
71
  }
236
72
  if (!processManager.isRunning()) {
237
- throw new Error(`Test command exited before Chrome could start. Make sure your test runner launches Chrome with --remote-debugging-port=${port}`);
73
+ logger_1.logger.warn(`Test command exited before Chrome could start. Continuing without browser capture...`);
74
+ break;
238
75
  }
239
76
  logger_1.logger.info(`Waiting for Chrome on port ${port}... (${retryCount}/${maxRetries})`);
240
77
  await new Promise(resolve => setTimeout(resolve, 1000));
241
78
  }
242
79
  }
243
- if (!connected) {
244
- throw new Error('Failed to connect to browser');
80
+ // Set up browser binding if connected
81
+ let binding = null;
82
+ if (connected) {
83
+ binding = new binding_1.BrowserBinding(client, { debug: options.debug ?? false });
84
+ await binding.setupBindings();
85
+ logger_1.logger.info('Browser binding setup complete');
245
86
  }
246
- // Get browser info
247
- const browserInfo = await getBrowserInfo(client);
248
- // Set up browser binding
249
- const binding = new binding_1.BrowserBinding(client, { debug: isDebug });
250
- await binding.setupBindings();
251
87
  // Wait for the test command to complete
252
88
  logger_1.logger.info('Monitoring test execution...');
253
89
  const result = await processManager.wait();
254
90
  // Get all captured snapshots
255
- const snapshots = binding.getSnapshots();
256
- logger_1.logger.info(`Captured ${snapshots.length} snapshot(s)`);
91
+ if (binding) {
92
+ const snapshots = binding.getSnapshots();
93
+ logger_1.logger.info(`Captured ${snapshots.length} snapshot(s)`);
94
+ binding.cleanup();
95
+ }
257
96
  // Clean up browser connection
258
- binding.cleanup();
259
- // Start batch with snapshots (like Playwright SDK)
260
- if (snapshots.length > 0) {
261
- batchId = options.batchId || await startBatchWithSnapshots(apiClient, gitInfo, browserInfo, snapshots, isDebug, ciRunId, ciInfo);
97
+ if (client) {
98
+ await client.disconnect();
262
99
  }
263
- else {
264
- batchId = options.batchId || await startBatch(apiClient, gitInfo, browserInfo, ciRunId, ciInfo);
100
+ // Generate report
101
+ logger_1.logger.info('Generating visual report...');
102
+ const reportData = (0, generator_1.generateReport)({
103
+ projectRoot: cwd,
104
+ reportDir: localConfig.reportDir || 'visual-report',
105
+ threshold: localConfig.threshold,
106
+ autoOpen: localConfig.autoOpen,
107
+ });
108
+ // Print summary
109
+ const { summary } = reportData;
110
+ console.log();
111
+ console.log(chalk_1.default.cyan(' === Visual Report Summary ==='));
112
+ console.log(` Total: ${summary.total} | ` +
113
+ chalk_1.default.green(`Passed: ${summary.passed}`) + ' | ' +
114
+ chalk_1.default.red(`Changed: ${summary.changed}`) + ' | ' +
115
+ chalk_1.default.yellow(`New: ${summary.newSnapshots}`));
116
+ if (summary.changed > 0 || summary.newSnapshots > 0) {
117
+ console.log();
118
+ console.log(chalk_1.default.gray(' To approve all: npx testivai approve --all'));
265
119
  }
266
- // Finish batch
267
- if (batchId) {
268
- await finishBatch(batchId);
120
+ // Exit code
121
+ if (localConfig.failOnDiff && summary.changed > 0) {
122
+ process.exit(1);
269
123
  }
270
- // Print results
271
- console.log(chalk_1.default.green('\n=== Test Results ==='));
272
- console.log(`Batch ID: ${batchId}`);
273
- console.log(`Snapshots: ${snapshots.length}`);
274
- console.log(`Exit code: ${result.exitCode}`);
275
- // Exit with same code as test command
276
124
  process.exit(result.exitCode || 0);
277
125
  }
278
126
  catch (error) {
@@ -287,250 +135,4 @@ exports.runCommand = new commander_1.Command('run')
287
135
  }
288
136
  }
289
137
  });
290
- /**
291
- * Get browser information
292
- */
293
- async function getBrowserInfo(client) {
294
- try {
295
- const connectionInfo = client.getConnectionInfo();
296
- // Navigate to a blank page to ensure viewport is properly initialized
297
- await client.send('Page.navigate', { url: 'about:blank' });
298
- // Wait a moment for the page to load
299
- await new Promise(resolve => setTimeout(resolve, 100));
300
- const userAgent = await client.send('Runtime.evaluate', {
301
- expression: 'navigator.userAgent',
302
- returnByValue: true,
303
- });
304
- const viewport = await client.send('Runtime.evaluate', {
305
- expression: `
306
- (function() {
307
- return {
308
- width: window.innerWidth,
309
- height: window.innerHeight
310
- };
311
- })()
312
- `,
313
- returnByValue: true,
314
- });
315
- // Ensure we have valid viewport dimensions
316
- const width = viewport.result.value?.width || 1920; // Default fallback
317
- const height = viewport.result.value?.height || 1080; // Default fallback
318
- return {
319
- name: 'chrome',
320
- version: connectionInfo?.browserVersion || 'unknown',
321
- viewportWidth: width,
322
- viewportHeight: height,
323
- userAgent: userAgent.result.value || 'unknown',
324
- os: 'unknown',
325
- device: 'desktop',
326
- };
327
- }
328
- catch (error) {
329
- logger_1.logger.error('Failed to get browser info:', error);
330
- // Return sensible defaults if we can't get the actual values
331
- return {
332
- name: 'chrome',
333
- version: 'unknown',
334
- viewportWidth: 1920,
335
- viewportHeight: 1080,
336
- userAgent: 'unknown',
337
- os: 'unknown',
338
- device: 'desktop',
339
- };
340
- }
341
- }
342
- /**
343
- * Get git information
344
- */
345
- async function getGitInfo() {
346
- try {
347
- const git = (0, simple_git_1.default)();
348
- const [branch, commit, message, author] = await Promise.all([
349
- git.revparse(['--abbrev-ref', 'HEAD']).catch(() => 'unknown'),
350
- git.revparse(['HEAD']).catch(() => 'unknown'),
351
- git.show(['-s', '--format=%s']).catch(() => ''),
352
- git.show(['-s', '--format=%an']).catch(() => ''),
353
- ]);
354
- return {
355
- branch,
356
- commit,
357
- message: message || undefined,
358
- author: author || undefined,
359
- };
360
- }
361
- catch (error) {
362
- logger_1.logger.error('Failed to get git info:', error);
363
- return {
364
- branch: 'unknown',
365
- commit: 'unknown',
366
- };
367
- }
368
- }
369
- /**
370
- * Start a new batch with snapshots (like Playwright SDK)
371
- */
372
- async function startBatchWithSnapshots(apiClient, gitInfo, browserInfo, snapshots, debug, ciRunId, ciInfo) {
373
- try {
374
- // Transform snapshots to match API format
375
- const transformedSnapshots = snapshots.map(snapshot => {
376
- const structureHtml = snapshot.structure || '';
377
- if (debug) {
378
- logger_1.logger.info(`DEBUG: Snapshot ${snapshot.name} - Structure length: ${structureHtml.length} chars`);
379
- }
380
- if (structureHtml.length === 0) {
381
- logger_1.logger.warn(`WARNING: Empty structure for snapshot ${snapshot.name}`);
382
- }
383
- else if (debug) {
384
- logger_1.logger.info(`DEBUG: Structure preview: ${structureHtml.substring(0, 100)}...`);
385
- }
386
- return {
387
- snapshotName: snapshot.name,
388
- testName: snapshot.name,
389
- timestamp: new Date(snapshot.timestamp).getTime(),
390
- url: snapshot.url || 'about:blank',
391
- viewport: snapshot.viewport || { width: 1920, height: 1080 },
392
- screenshotData: snapshot.screenshot, // Already base64 encoded
393
- structure: { html: structureHtml },
394
- styles: snapshot.styles || { computed_styles: {} },
395
- performanceMetrics: snapshot.performanceMetrics,
396
- layout: {
397
- x: 0,
398
- y: 0,
399
- width: snapshot.viewport?.width || 1920,
400
- height: snapshot.viewport?.height || 1080
401
- }
402
- };
403
- });
404
- const batchPayload = {
405
- git: gitInfo,
406
- browser: browserInfo,
407
- snapshots: transformedSnapshots,
408
- timestamp: Date.now(),
409
- runId: ciRunId || process.env.CI_RUN_ID || null,
410
- ci: ciInfo || null,
411
- };
412
- // Compress if large
413
- const compressionHelper = (await Promise.resolve().then(() => __importStar(require('@testivai/common')))).compressionHelper;
414
- const payloadJson = JSON.stringify(batchPayload);
415
- const compressionResult = await compressionHelper.compress(payloadJson);
416
- const apiKey = (0, common_1.getApiKey)();
417
- if (!apiKey) {
418
- throw new Error('API key is required');
419
- }
420
- const apiUrl = process.env.TESTIVAI_API_URL || common_1.DEFAULT_CORE_API_URL;
421
- // Create AbortController for timeout
422
- const controller = new AbortController();
423
- const timeout = setTimeout(() => controller.abort(), 30000); // 30 second timeout
424
- const response = await fetch(`${apiUrl}/api/v1/ingest/start-batch`, {
425
- method: 'POST',
426
- headers: {
427
- 'X-API-Key': apiKey,
428
- 'Content-Type': 'application/json',
429
- ...(compressionResult.compressionRatio > 0 && {
430
- 'Content-Encoding': 'gzip',
431
- }),
432
- },
433
- body: compressionResult.data,
434
- signal: controller.signal,
435
- });
436
- clearTimeout(timeout);
437
- if (!response.ok) {
438
- throw new Error(`Failed to start batch: ${response.statusText}`);
439
- }
440
- const result = await response.json();
441
- const returnedBatchId = result.batch_id || result.batchId;
442
- if (!returnedBatchId) {
443
- throw new Error('No batch ID returned from API');
444
- }
445
- return returnedBatchId;
446
- }
447
- catch (error) {
448
- if (error instanceof Error && error.name === 'AbortError') {
449
- logger_1.logger.error('Failed to start batch: Request timed out after 30 seconds');
450
- }
451
- else {
452
- logger_1.logger.error('Failed to start batch:', error);
453
- }
454
- throw error;
455
- }
456
- }
457
- /**
458
- * Start a new batch (without snapshots)
459
- */
460
- async function startBatch(apiClient, gitInfo, browserInfo, ciRunId, ciInfo) {
461
- try {
462
- const apiKey = (0, common_1.getApiKey)();
463
- if (!apiKey) {
464
- throw new Error('API key is required');
465
- }
466
- const apiUrl = process.env.TESTIVAI_API_URL || common_1.DEFAULT_CORE_API_URL;
467
- // Create AbortController for timeout
468
- const controller = new AbortController();
469
- const timeout = setTimeout(() => controller.abort(), 30000); // 30 second timeout
470
- const response = await fetch(`${apiUrl}/api/v1/ingest/start-batch`, {
471
- method: 'POST',
472
- headers: {
473
- 'X-API-Key': apiKey,
474
- 'Content-Type': 'application/json',
475
- },
476
- body: JSON.stringify({
477
- git: gitInfo,
478
- browser: browserInfo,
479
- snapshots: [],
480
- timestamp: Date.now(),
481
- runId: ciRunId || process.env.CI_RUN_ID || null,
482
- ci: ciInfo || null,
483
- }),
484
- signal: controller.signal,
485
- });
486
- clearTimeout(timeout);
487
- if (!response.ok) {
488
- throw new Error(`Failed to start batch: ${response.statusText}`);
489
- }
490
- const result = await response.json();
491
- logger_1.logger.upload(result.batch_id);
492
- return result.batch_id;
493
- }
494
- catch (error) {
495
- if (error instanceof Error && error.name === 'AbortError') {
496
- logger_1.logger.error('Failed to start batch: Request timed out after 30 seconds');
497
- }
498
- else {
499
- logger_1.logger.error('Failed to start batch:', error);
500
- }
501
- throw error;
502
- }
503
- }
504
- /**
505
- * Finish a batch
506
- */
507
- async function finishBatch(batchId) {
508
- try {
509
- const apiKey = (0, common_1.getApiKey)();
510
- if (!apiKey) {
511
- throw new Error('API key is required');
512
- }
513
- const apiUrl = process.env.TESTIVAI_API_URL || common_1.DEFAULT_CORE_API_URL;
514
- // Create AbortController for timeout
515
- const controller = new AbortController();
516
- const timeout = setTimeout(() => controller.abort(), 30000); // 30 second timeout
517
- const response = await fetch(`${apiUrl}/api/v1/ingest/finish-batch/${batchId}`, {
518
- method: 'POST',
519
- headers: {
520
- 'X-API-Key': apiKey,
521
- 'Content-Type': 'application/json',
522
- },
523
- signal: controller.signal,
524
- });
525
- clearTimeout(timeout);
526
- if (!response.ok) {
527
- throw new Error(`Failed to finish batch: ${response.statusText}`);
528
- }
529
- logger_1.logger.success(`Batch ${batchId} finished successfully`);
530
- }
531
- catch (error) {
532
- logger_1.logger.error('Failed to finish batch:', error);
533
- // Don't throw here - we want to exit even if finishing fails
534
- }
535
- }
536
138
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAkD;AAClD,gDAAoD;AACpD,oDAA6D;AAC7D,8CAAuE;AACvE,4CAAyC;AACzC,yDAAyD;AACzD,mDAAqD;AAExC,QAAA,UAAU,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,yCAAyC,CAAC;KACtD,QAAQ,CAAC,WAAW,EAAE,2DAA2D,CAAC;KAClF,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,SAAS,EAAE,oCAAoC,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,IAAI,cAAc,GAA0B,IAAI,CAAC;IAEjD,oCAAoC;IACpC,IAAA,6BAAmB,EAAC,KAAK,IAAI,EAAE;QAC7B,eAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAA,8BAAe,EAAC,GAAG,CAAC,CAAC;QAEzC,2CAA2C;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QAElD,8CAA8C;QAC9C,eAAM,CAAC,IAAI,CAAC,0BAA0B,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7D,cAAc,GAAG,IAAI,wBAAc,CAAC,OAAO,EAAE,EAAE,EAAE;YAC/C,GAAG;YACH,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,aAAa,EAAE,OAAO;gBACtB,qBAAqB,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACtC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE;aACT;SAC5B,CAAC,CAAC;QAEH,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;QAE7B,2DAA2D;QAC3D,eAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,0CAA0C;QAC1C,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACjD,MAAM,GAAG,IAAI,sBAAa,EAAE,CAAC;QAE7B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,4CAA4C;QAEnE,OAAO,CAAC,SAAS,IAAI,UAAU,GAAG,UAAU,IAAI,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC;YAC3E,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC3B,SAAS,GAAG,IAAI,CAAC;gBACjB,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,UAAU,EAAE,CAAC;gBACb,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;oBAC7B,eAAM,CAAC,IAAI,CAAC,qCAAqC,UAAU,kDAAkD,CAAC,CAAC;oBAC/G,MAAM;gBACR,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC;oBAChC,eAAM,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;oBACpG,MAAM;gBACR,CAAC;gBACD,eAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,QAAQ,UAAU,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,OAAO,GAA0B,IAAI,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,GAAG,IAAI,wBAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;YACxE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9B,eAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAChD,CAAC;QAED,wCAAwC;QACxC,eAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAE3C,6BAA6B;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YACzC,eAAM,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,MAAM,cAAc,CAAC,CAAC;YACxD,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;QAED,8BAA8B;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QAED,kBAAkB;QAClB,eAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAA,0BAAc,EAAC;YAChC,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,eAAe;YACnD,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC/B,CAAC,CAAC;QAEH,gBAAgB;QAChB,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAC/B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,KAAK,OAAO;YAC1C,eAAK,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO;YAClD,eAAK,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO;YAClD,eAAK,CAAC,MAAM,CAAC,QAAQ,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,YAAY;QACZ,IAAI,WAAW,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAErC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,iCAAqB,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * TestivAI Configuration
3
3
  */
4
- export { loadLocalConfig, createDefaultConfig, localConfigExists, isLocalMode, getConfigPath, getDefaultConfig, } from './local-config';
4
+ export { loadLocalConfig, createDefaultConfig, localConfigExists, getConfigPath, getDefaultConfig, } from './local-config';
5
5
  export type { LocalConfig } from './local-config';
6
+ export { validateLocalConfig } from './validate-config';
7
+ export type { ConfigValidation } from './validate-config';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -3,12 +3,13 @@
3
3
  * TestivAI Configuration
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getDefaultConfig = exports.getConfigPath = exports.isLocalMode = exports.localConfigExists = exports.createDefaultConfig = exports.loadLocalConfig = void 0;
6
+ exports.validateLocalConfig = exports.getDefaultConfig = exports.getConfigPath = exports.localConfigExists = exports.createDefaultConfig = exports.loadLocalConfig = void 0;
7
7
  var local_config_1 = require("./local-config");
8
8
  Object.defineProperty(exports, "loadLocalConfig", { enumerable: true, get: function () { return local_config_1.loadLocalConfig; } });
9
9
  Object.defineProperty(exports, "createDefaultConfig", { enumerable: true, get: function () { return local_config_1.createDefaultConfig; } });
10
10
  Object.defineProperty(exports, "localConfigExists", { enumerable: true, get: function () { return local_config_1.localConfigExists; } });
11
- Object.defineProperty(exports, "isLocalMode", { enumerable: true, get: function () { return local_config_1.isLocalMode; } });
12
11
  Object.defineProperty(exports, "getConfigPath", { enumerable: true, get: function () { return local_config_1.getConfigPath; } });
13
12
  Object.defineProperty(exports, "getDefaultConfig", { enumerable: true, get: function () { return local_config_1.getDefaultConfig; } });
13
+ var validate_config_1 = require("./validate-config");
14
+ Object.defineProperty(exports, "validateLocalConfig", { enumerable: true, get: function () { return validate_config_1.validateLocalConfig; } });
14
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+CAOwB;AANtB,+GAAA,eAAe,OAAA;AACf,mHAAA,mBAAmB,OAAA;AACnB,iHAAA,iBAAiB,OAAA;AACjB,2GAAA,WAAW,OAAA;AACX,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+CAMwB;AALtB,+GAAA,eAAe,OAAA;AACf,mHAAA,mBAAmB,OAAA;AACnB,iHAAA,iBAAiB,OAAA;AACjB,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAKlB,qDAAwD;AAA/C,sHAAA,mBAAmB,OAAA"}