@hasna/testers 0.0.6 → 0.0.8
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/dist/cli/index.js +1424 -395
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/environments.d.ts +22 -0
- package/dist/db/environments.d.ts.map +1 -0
- package/dist/db/runs.d.ts.map +1 -1
- package/dist/db/scenarios.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +422 -171
- package/dist/lib/assertions.d.ts +26 -0
- package/dist/lib/assertions.d.ts.map +1 -0
- package/dist/lib/browser-lightpanda.d.ts +43 -0
- package/dist/lib/browser-lightpanda.d.ts.map +1 -0
- package/dist/lib/browser.d.ts +9 -3
- package/dist/lib/browser.d.ts.map +1 -1
- package/dist/lib/ci.d.ts +2 -0
- package/dist/lib/ci.d.ts.map +1 -0
- package/dist/lib/openapi-import.d.ts +8 -0
- package/dist/lib/openapi-import.d.ts.map +1 -0
- package/dist/lib/recorder.d.ts +24 -0
- package/dist/lib/recorder.d.ts.map +1 -0
- package/dist/lib/runner.d.ts +1 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/visual-diff.d.ts +36 -0
- package/dist/lib/visual-diff.d.ts.map +1 -0
- package/dist/mcp/index.js +341 -12
- package/dist/server/index.js +335 -12
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/server/index.js
CHANGED
|
@@ -11,6 +11,7 @@ var __export = (target, all) => {
|
|
|
11
11
|
});
|
|
12
12
|
};
|
|
13
13
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
14
|
+
var __require = import.meta.require;
|
|
14
15
|
|
|
15
16
|
// src/types/index.ts
|
|
16
17
|
function scenarioFromRow(row) {
|
|
@@ -29,6 +30,7 @@ function scenarioFromRow(row) {
|
|
|
29
30
|
requiresAuth: row.requires_auth === 1,
|
|
30
31
|
authConfig: row.auth_config ? JSON.parse(row.auth_config) : null,
|
|
31
32
|
metadata: row.metadata ? JSON.parse(row.metadata) : null,
|
|
33
|
+
assertions: JSON.parse(row.assertions || "[]"),
|
|
32
34
|
version: row.version,
|
|
33
35
|
createdAt: row.created_at,
|
|
34
36
|
updatedAt: row.updated_at
|
|
@@ -48,7 +50,8 @@ function runFromRow(row) {
|
|
|
48
50
|
failed: row.failed,
|
|
49
51
|
startedAt: row.started_at,
|
|
50
52
|
finishedAt: row.finished_at,
|
|
51
|
-
metadata: row.metadata ? JSON.parse(row.metadata) : null
|
|
53
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : null,
|
|
54
|
+
isBaseline: row.is_baseline === 1
|
|
52
55
|
};
|
|
53
56
|
}
|
|
54
57
|
function resultFromRow(row) {
|
|
@@ -397,10 +400,190 @@ var init_database = __esm(() => {
|
|
|
397
400
|
CREATE INDEX IF NOT EXISTS idx_deps_scenario ON scenario_dependencies(scenario_id);
|
|
398
401
|
CREATE INDEX IF NOT EXISTS idx_deps_depends ON scenario_dependencies(depends_on);
|
|
399
402
|
CREATE INDEX IF NOT EXISTS idx_flows_project ON flows(project_id);
|
|
403
|
+
`,
|
|
404
|
+
`
|
|
405
|
+
ALTER TABLE scenarios ADD COLUMN assertions TEXT DEFAULT '[]';
|
|
406
|
+
`,
|
|
407
|
+
`
|
|
408
|
+
CREATE TABLE IF NOT EXISTS environments (
|
|
409
|
+
id TEXT PRIMARY KEY,
|
|
410
|
+
name TEXT NOT NULL UNIQUE,
|
|
411
|
+
url TEXT NOT NULL,
|
|
412
|
+
auth_preset_name TEXT,
|
|
413
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
414
|
+
is_default INTEGER NOT NULL DEFAULT 0,
|
|
415
|
+
metadata TEXT DEFAULT '{}',
|
|
416
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
417
|
+
);
|
|
418
|
+
`,
|
|
419
|
+
`
|
|
420
|
+
ALTER TABLE runs ADD COLUMN is_baseline INTEGER NOT NULL DEFAULT 0;
|
|
400
421
|
`
|
|
401
422
|
];
|
|
402
423
|
});
|
|
403
424
|
|
|
425
|
+
// src/lib/browser-lightpanda.ts
|
|
426
|
+
var exports_browser_lightpanda = {};
|
|
427
|
+
__export(exports_browser_lightpanda, {
|
|
428
|
+
startLightpandaServer: () => startLightpandaServer,
|
|
429
|
+
launchLightpanda: () => launchLightpanda,
|
|
430
|
+
isLightpandaAvailable: () => isLightpandaAvailable,
|
|
431
|
+
installLightpanda: () => installLightpanda,
|
|
432
|
+
getLightpandaPage: () => getLightpandaPage,
|
|
433
|
+
closeLightpanda: () => closeLightpanda
|
|
434
|
+
});
|
|
435
|
+
import { chromium } from "playwright";
|
|
436
|
+
import { spawn } from "child_process";
|
|
437
|
+
function isLightpandaAvailable() {
|
|
438
|
+
try {
|
|
439
|
+
const possiblePaths = [
|
|
440
|
+
`${process.env["HOME"]}/.cache/lightpanda-node/lightpanda`,
|
|
441
|
+
process.env["LIGHTPANDA_EXECUTABLE_PATH"]
|
|
442
|
+
];
|
|
443
|
+
for (const p of possiblePaths) {
|
|
444
|
+
if (p) {
|
|
445
|
+
try {
|
|
446
|
+
const { existsSync: existsSync2 } = __require("fs");
|
|
447
|
+
if (existsSync2(p))
|
|
448
|
+
return true;
|
|
449
|
+
} catch {
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
const { execSync } = __require("child_process");
|
|
455
|
+
execSync("lightpanda --version", { stdio: "ignore", timeout: 5000 });
|
|
456
|
+
return true;
|
|
457
|
+
} catch {
|
|
458
|
+
return false;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
function findLightpandaBinary() {
|
|
462
|
+
const envPath = process.env["LIGHTPANDA_EXECUTABLE_PATH"];
|
|
463
|
+
if (envPath)
|
|
464
|
+
return envPath;
|
|
465
|
+
const cachePath = `${process.env["HOME"]}/.cache/lightpanda-node/lightpanda`;
|
|
466
|
+
try {
|
|
467
|
+
const { existsSync: existsSync2 } = __require("fs");
|
|
468
|
+
if (existsSync2(cachePath))
|
|
469
|
+
return cachePath;
|
|
470
|
+
} catch {}
|
|
471
|
+
return "lightpanda";
|
|
472
|
+
}
|
|
473
|
+
async function startLightpandaServer(port) {
|
|
474
|
+
const binary = findLightpandaBinary();
|
|
475
|
+
const cdpPort = port ?? 9222 + Math.floor(Math.random() * 1000);
|
|
476
|
+
return new Promise((resolve, reject) => {
|
|
477
|
+
const proc = spawn(binary, ["serve", "--port", String(cdpPort)], {
|
|
478
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
479
|
+
});
|
|
480
|
+
let resolved = false;
|
|
481
|
+
const timeout = setTimeout(() => {
|
|
482
|
+
if (!resolved) {
|
|
483
|
+
resolved = true;
|
|
484
|
+
resolve({
|
|
485
|
+
process: proc,
|
|
486
|
+
wsEndpoint: `ws://127.0.0.1:${cdpPort}`
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
}, 5000);
|
|
490
|
+
proc.stdout?.on("data", (data) => {
|
|
491
|
+
const output = data.toString();
|
|
492
|
+
if (output.includes("127.0.0.1") || output.includes("listening") || output.includes("DevTools")) {
|
|
493
|
+
if (!resolved) {
|
|
494
|
+
resolved = true;
|
|
495
|
+
clearTimeout(timeout);
|
|
496
|
+
resolve({
|
|
497
|
+
process: proc,
|
|
498
|
+
wsEndpoint: `ws://127.0.0.1:${cdpPort}`
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
proc.stderr?.on("data", (data) => {
|
|
504
|
+
const output = data.toString();
|
|
505
|
+
if (output.includes("127.0.0.1") || output.includes("listening")) {
|
|
506
|
+
if (!resolved) {
|
|
507
|
+
resolved = true;
|
|
508
|
+
clearTimeout(timeout);
|
|
509
|
+
resolve({
|
|
510
|
+
process: proc,
|
|
511
|
+
wsEndpoint: `ws://127.0.0.1:${cdpPort}`
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
proc.on("error", (err) => {
|
|
517
|
+
clearTimeout(timeout);
|
|
518
|
+
if (!resolved) {
|
|
519
|
+
resolved = true;
|
|
520
|
+
reject(new BrowserError(`Failed to start Lightpanda: ${err.message}. ` + `Install it with: bun install @lightpanda/browser`));
|
|
521
|
+
}
|
|
522
|
+
});
|
|
523
|
+
proc.on("exit", (code) => {
|
|
524
|
+
if (!resolved) {
|
|
525
|
+
resolved = true;
|
|
526
|
+
clearTimeout(timeout);
|
|
527
|
+
reject(new BrowserError(`Lightpanda exited with code ${code}. ` + `Install it with: bun install @lightpanda/browser`));
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
async function launchLightpanda(_options) {
|
|
533
|
+
try {
|
|
534
|
+
const { process: proc, wsEndpoint } = await startLightpandaServer();
|
|
535
|
+
lightpandaProcess = proc;
|
|
536
|
+
const browser = await chromium.connectOverCDP(wsEndpoint);
|
|
537
|
+
return browser;
|
|
538
|
+
} catch (error) {
|
|
539
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
540
|
+
throw new BrowserError(`Failed to launch Lightpanda: ${message}`);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
async function getLightpandaPage(browser, options) {
|
|
544
|
+
try {
|
|
545
|
+
const contexts = browser.contexts();
|
|
546
|
+
const context = contexts.length > 0 ? contexts[0] : await browser.newContext({
|
|
547
|
+
viewport: options?.viewport ?? { width: 1280, height: 720 },
|
|
548
|
+
userAgent: options?.userAgent,
|
|
549
|
+
locale: options?.locale
|
|
550
|
+
});
|
|
551
|
+
const page = await context.newPage();
|
|
552
|
+
return page;
|
|
553
|
+
} catch (error) {
|
|
554
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
555
|
+
throw new BrowserError(`Failed to create Lightpanda page: ${message}`);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
async function closeLightpanda(browser) {
|
|
559
|
+
try {
|
|
560
|
+
await browser.close();
|
|
561
|
+
} catch {}
|
|
562
|
+
if (lightpandaProcess) {
|
|
563
|
+
try {
|
|
564
|
+
lightpandaProcess.kill("SIGTERM");
|
|
565
|
+
lightpandaProcess = null;
|
|
566
|
+
} catch {}
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
async function installLightpanda() {
|
|
570
|
+
const { execSync } = __require("child_process");
|
|
571
|
+
try {
|
|
572
|
+
execSync("bun install @lightpanda/browser", {
|
|
573
|
+
stdio: "inherit",
|
|
574
|
+
cwd: process.env["HOME"]
|
|
575
|
+
});
|
|
576
|
+
} catch (error) {
|
|
577
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
578
|
+
throw new BrowserError(`Failed to install Lightpanda: ${message}
|
|
579
|
+
` + `Try manually: bun install @lightpanda/browser`);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
var lightpandaProcess = null;
|
|
583
|
+
var init_browser_lightpanda = __esm(() => {
|
|
584
|
+
init_types();
|
|
585
|
+
});
|
|
586
|
+
|
|
404
587
|
// src/db/flows.ts
|
|
405
588
|
var exports_flows = {};
|
|
406
589
|
__export(exports_flows, {
|
|
@@ -578,9 +761,9 @@ function createScenario(input) {
|
|
|
578
761
|
const short_id = nextShortId(input.projectId);
|
|
579
762
|
const timestamp = now();
|
|
580
763
|
db2.query(`
|
|
581
|
-
INSERT INTO scenarios (id, short_id, project_id, name, description, steps, tags, priority, model, timeout_ms, target_path, requires_auth, auth_config, metadata, version, created_at, updated_at)
|
|
582
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?)
|
|
583
|
-
`).run(id, short_id, input.projectId ?? null, input.name, input.description, JSON.stringify(input.steps ?? []), JSON.stringify(input.tags ?? []), input.priority ?? "medium", input.model ?? null, input.timeoutMs ?? null, input.targetPath ?? null, input.requiresAuth ? 1 : 0, input.authConfig ? JSON.stringify(input.authConfig) : null, input.metadata ? JSON.stringify(input.metadata) : null, timestamp, timestamp);
|
|
764
|
+
INSERT INTO scenarios (id, short_id, project_id, name, description, steps, tags, priority, model, timeout_ms, target_path, requires_auth, auth_config, metadata, assertions, version, created_at, updated_at)
|
|
765
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?)
|
|
766
|
+
`).run(id, short_id, input.projectId ?? null, input.name, input.description, JSON.stringify(input.steps ?? []), JSON.stringify(input.tags ?? []), input.priority ?? "medium", input.model ?? null, input.timeoutMs ?? null, input.targetPath ?? null, input.requiresAuth ? 1 : 0, input.authConfig ? JSON.stringify(input.authConfig) : null, input.metadata ? JSON.stringify(input.metadata) : null, JSON.stringify(input.assertions ?? []), timestamp, timestamp);
|
|
584
767
|
return getScenario(id);
|
|
585
768
|
}
|
|
586
769
|
function getScenario(id) {
|
|
@@ -698,6 +881,10 @@ function updateScenario(id, input, version) {
|
|
|
698
881
|
sets.push("metadata = ?");
|
|
699
882
|
params.push(JSON.stringify(input.metadata));
|
|
700
883
|
}
|
|
884
|
+
if (input.assertions !== undefined) {
|
|
885
|
+
sets.push("assertions = ?");
|
|
886
|
+
params.push(JSON.stringify(input.assertions));
|
|
887
|
+
}
|
|
701
888
|
if (sets.length === 0) {
|
|
702
889
|
return existing;
|
|
703
890
|
}
|
|
@@ -828,6 +1015,10 @@ function updateRun(id, updates) {
|
|
|
828
1015
|
sets.push("metadata = ?");
|
|
829
1016
|
params.push(updates.metadata);
|
|
830
1017
|
}
|
|
1018
|
+
if (updates.is_baseline !== undefined) {
|
|
1019
|
+
sets.push("is_baseline = ?");
|
|
1020
|
+
params.push(updates.is_baseline);
|
|
1021
|
+
}
|
|
831
1022
|
if (sets.length === 0) {
|
|
832
1023
|
return existing;
|
|
833
1024
|
}
|
|
@@ -939,14 +1130,22 @@ function listScreenshots(resultId) {
|
|
|
939
1130
|
}
|
|
940
1131
|
|
|
941
1132
|
// src/lib/browser.ts
|
|
942
|
-
import { chromium } from "playwright";
|
|
1133
|
+
import { chromium as chromium2 } from "playwright";
|
|
943
1134
|
init_types();
|
|
944
1135
|
var DEFAULT_VIEWPORT = { width: 1280, height: 720 };
|
|
945
1136
|
async function launchBrowser(options) {
|
|
1137
|
+
const engine = options?.engine ?? process.env["TESTERS_BROWSER_ENGINE"] ?? "playwright";
|
|
1138
|
+
if (engine === "lightpanda") {
|
|
1139
|
+
const { launchLightpanda: launchLightpanda2, isLightpandaAvailable: isLightpandaAvailable2 } = await Promise.resolve().then(() => (init_browser_lightpanda(), exports_browser_lightpanda));
|
|
1140
|
+
if (!isLightpandaAvailable2()) {
|
|
1141
|
+
throw new BrowserError("Lightpanda not installed. Run: testers install-browser --engine lightpanda");
|
|
1142
|
+
}
|
|
1143
|
+
return launchLightpanda2({ viewport: options?.viewport });
|
|
1144
|
+
}
|
|
946
1145
|
const headless = options?.headless ?? true;
|
|
947
1146
|
const viewport = options?.viewport ?? DEFAULT_VIEWPORT;
|
|
948
1147
|
try {
|
|
949
|
-
const browser = await
|
|
1148
|
+
const browser = await chromium2.launch({
|
|
950
1149
|
headless,
|
|
951
1150
|
args: [
|
|
952
1151
|
`--window-size=${viewport.width},${viewport.height}`
|
|
@@ -959,6 +1158,11 @@ async function launchBrowser(options) {
|
|
|
959
1158
|
}
|
|
960
1159
|
}
|
|
961
1160
|
async function getPage(browser, options) {
|
|
1161
|
+
const engine = options?.engine ?? "playwright";
|
|
1162
|
+
if (engine === "lightpanda") {
|
|
1163
|
+
const { getLightpandaPage: getLightpandaPage2 } = await Promise.resolve().then(() => (init_browser_lightpanda(), exports_browser_lightpanda));
|
|
1164
|
+
return getLightpandaPage2(browser, options);
|
|
1165
|
+
}
|
|
962
1166
|
const viewport = options?.viewport ?? DEFAULT_VIEWPORT;
|
|
963
1167
|
try {
|
|
964
1168
|
const context = await browser.newContext({
|
|
@@ -973,7 +1177,11 @@ async function getPage(browser, options) {
|
|
|
973
1177
|
throw new BrowserError(`Failed to create page: ${message}`);
|
|
974
1178
|
}
|
|
975
1179
|
}
|
|
976
|
-
async function closeBrowser(browser) {
|
|
1180
|
+
async function closeBrowser(browser, engine) {
|
|
1181
|
+
if (engine === "lightpanda") {
|
|
1182
|
+
const { closeLightpanda: closeLightpanda2 } = await Promise.resolve().then(() => (init_browser_lightpanda(), exports_browser_lightpanda));
|
|
1183
|
+
return closeLightpanda2(browser);
|
|
1184
|
+
}
|
|
977
1185
|
try {
|
|
978
1186
|
await browser.close();
|
|
979
1187
|
} catch (error) {
|
|
@@ -1907,12 +2115,124 @@ function loadConfig() {
|
|
|
1907
2115
|
return config;
|
|
1908
2116
|
}
|
|
1909
2117
|
|
|
2118
|
+
// src/lib/webhooks.ts
|
|
2119
|
+
init_database();
|
|
2120
|
+
function fromRow(row) {
|
|
2121
|
+
return {
|
|
2122
|
+
id: row.id,
|
|
2123
|
+
url: row.url,
|
|
2124
|
+
events: JSON.parse(row.events),
|
|
2125
|
+
projectId: row.project_id,
|
|
2126
|
+
secret: row.secret,
|
|
2127
|
+
active: row.active === 1,
|
|
2128
|
+
createdAt: row.created_at
|
|
2129
|
+
};
|
|
2130
|
+
}
|
|
2131
|
+
function listWebhooks(projectId) {
|
|
2132
|
+
const db2 = getDatabase();
|
|
2133
|
+
let query = "SELECT * FROM webhooks WHERE active = 1";
|
|
2134
|
+
const params = [];
|
|
2135
|
+
if (projectId) {
|
|
2136
|
+
query += " AND (project_id = ? OR project_id IS NULL)";
|
|
2137
|
+
params.push(projectId);
|
|
2138
|
+
}
|
|
2139
|
+
query += " ORDER BY created_at DESC";
|
|
2140
|
+
const rows = db2.query(query).all(...params);
|
|
2141
|
+
return rows.map(fromRow);
|
|
2142
|
+
}
|
|
2143
|
+
function signPayload(body, secret) {
|
|
2144
|
+
const encoder = new TextEncoder;
|
|
2145
|
+
const key = encoder.encode(secret);
|
|
2146
|
+
const data = encoder.encode(body);
|
|
2147
|
+
let hash = 0;
|
|
2148
|
+
for (let i = 0;i < data.length; i++) {
|
|
2149
|
+
hash = (hash << 5) - hash + data[i] + (key[i % key.length] ?? 0) | 0;
|
|
2150
|
+
}
|
|
2151
|
+
return `sha256=${Math.abs(hash).toString(16).padStart(16, "0")}`;
|
|
2152
|
+
}
|
|
2153
|
+
function formatSlackPayload(payload) {
|
|
2154
|
+
const status = payload.run.status === "passed" ? ":white_check_mark:" : ":x:";
|
|
2155
|
+
const color = payload.run.status === "passed" ? "#22c55e" : "#ef4444";
|
|
2156
|
+
return {
|
|
2157
|
+
attachments: [
|
|
2158
|
+
{
|
|
2159
|
+
color,
|
|
2160
|
+
blocks: [
|
|
2161
|
+
{
|
|
2162
|
+
type: "section",
|
|
2163
|
+
text: {
|
|
2164
|
+
type: "mrkdwn",
|
|
2165
|
+
text: `${status} *Test Run ${payload.run.status.toUpperCase()}*
|
|
2166
|
+
` + `URL: ${payload.run.url}
|
|
2167
|
+
` + `Results: ${payload.run.passed}/${payload.run.total} passed` + (payload.run.failed > 0 ? ` (${payload.run.failed} failed)` : "") + (payload.schedule ? `
|
|
2168
|
+
Schedule: ${payload.schedule.name}` : "")
|
|
2169
|
+
}
|
|
2170
|
+
}
|
|
2171
|
+
]
|
|
2172
|
+
}
|
|
2173
|
+
]
|
|
2174
|
+
};
|
|
2175
|
+
}
|
|
2176
|
+
async function dispatchWebhooks(event, run, schedule) {
|
|
2177
|
+
const webhooks = listWebhooks(run.projectId ?? undefined);
|
|
2178
|
+
const payload = {
|
|
2179
|
+
event,
|
|
2180
|
+
run: {
|
|
2181
|
+
id: run.id,
|
|
2182
|
+
url: run.url,
|
|
2183
|
+
status: run.status,
|
|
2184
|
+
passed: run.passed,
|
|
2185
|
+
failed: run.failed,
|
|
2186
|
+
total: run.total
|
|
2187
|
+
},
|
|
2188
|
+
schedule,
|
|
2189
|
+
timestamp: new Date().toISOString()
|
|
2190
|
+
};
|
|
2191
|
+
for (const webhook of webhooks) {
|
|
2192
|
+
if (!webhook.events.includes(event) && !webhook.events.includes("*"))
|
|
2193
|
+
continue;
|
|
2194
|
+
const isSlack = webhook.url.includes("hooks.slack.com");
|
|
2195
|
+
const body = isSlack ? JSON.stringify(formatSlackPayload(payload)) : JSON.stringify(payload);
|
|
2196
|
+
const headers = {
|
|
2197
|
+
"Content-Type": "application/json"
|
|
2198
|
+
};
|
|
2199
|
+
if (webhook.secret) {
|
|
2200
|
+
headers["X-Testers-Signature"] = signPayload(body, webhook.secret);
|
|
2201
|
+
}
|
|
2202
|
+
try {
|
|
2203
|
+
const response = await fetch(webhook.url, {
|
|
2204
|
+
method: "POST",
|
|
2205
|
+
headers,
|
|
2206
|
+
body
|
|
2207
|
+
});
|
|
2208
|
+
if (!response.ok) {
|
|
2209
|
+
await new Promise((r) => setTimeout(r, 5000));
|
|
2210
|
+
await fetch(webhook.url, { method: "POST", headers, body });
|
|
2211
|
+
}
|
|
2212
|
+
} catch {}
|
|
2213
|
+
}
|
|
2214
|
+
}
|
|
2215
|
+
|
|
1910
2216
|
// src/lib/runner.ts
|
|
1911
2217
|
var eventHandler = null;
|
|
1912
2218
|
function emit(event) {
|
|
1913
2219
|
if (eventHandler)
|
|
1914
2220
|
eventHandler(event);
|
|
1915
2221
|
}
|
|
2222
|
+
function withTimeout(promise, ms, label) {
|
|
2223
|
+
return new Promise((resolve, reject) => {
|
|
2224
|
+
const timer = setTimeout(() => {
|
|
2225
|
+
reject(new Error(`Scenario timeout after ${ms}ms: ${label}`));
|
|
2226
|
+
}, ms);
|
|
2227
|
+
promise.then((val) => {
|
|
2228
|
+
clearTimeout(timer);
|
|
2229
|
+
resolve(val);
|
|
2230
|
+
}, (err) => {
|
|
2231
|
+
clearTimeout(timer);
|
|
2232
|
+
reject(err);
|
|
2233
|
+
});
|
|
2234
|
+
});
|
|
2235
|
+
}
|
|
1916
2236
|
async function runSingleScenario(scenario, runId, options) {
|
|
1917
2237
|
const config = loadConfig();
|
|
1918
2238
|
const model = resolveModel(options.model ?? scenario.model ?? config.defaultModel);
|
|
@@ -1930,13 +2250,14 @@ async function runSingleScenario(scenario, runId, options) {
|
|
|
1930
2250
|
let browser = null;
|
|
1931
2251
|
let page = null;
|
|
1932
2252
|
try {
|
|
1933
|
-
browser = await launchBrowser({ headless: !(options.headed ?? false) });
|
|
2253
|
+
browser = await launchBrowser({ headless: !(options.headed ?? false), engine: options.engine });
|
|
1934
2254
|
page = await getPage(browser, {
|
|
1935
2255
|
viewport: config.browser.viewport
|
|
1936
2256
|
});
|
|
1937
2257
|
const targetUrl = scenario.targetPath ? `${options.url.replace(/\/$/, "")}${scenario.targetPath}` : options.url;
|
|
1938
|
-
|
|
1939
|
-
|
|
2258
|
+
const scenarioTimeout = scenario.timeoutMs ?? options.timeout ?? config.browser.timeout ?? 60000;
|
|
2259
|
+
await page.goto(targetUrl, { timeout: Math.min(scenarioTimeout, 30000) });
|
|
2260
|
+
const agentResult = await withTimeout(runAgentLoop({
|
|
1940
2261
|
client,
|
|
1941
2262
|
page,
|
|
1942
2263
|
scenario,
|
|
@@ -1957,7 +2278,7 @@ async function runSingleScenario(scenario, runId, options) {
|
|
|
1957
2278
|
stepNumber: stepEvent.stepNumber
|
|
1958
2279
|
});
|
|
1959
2280
|
}
|
|
1960
|
-
});
|
|
2281
|
+
}), scenarioTimeout, scenario.name);
|
|
1961
2282
|
for (const ss of agentResult.screenshots) {
|
|
1962
2283
|
createScreenshot({
|
|
1963
2284
|
resultId: result.id,
|
|
@@ -1994,7 +2315,7 @@ async function runSingleScenario(scenario, runId, options) {
|
|
|
1994
2315
|
return updatedResult;
|
|
1995
2316
|
} finally {
|
|
1996
2317
|
if (browser)
|
|
1997
|
-
await closeBrowser(browser);
|
|
2318
|
+
await closeBrowser(browser, options.engine);
|
|
1998
2319
|
}
|
|
1999
2320
|
}
|
|
2000
2321
|
async function runBatch(scenarios, options) {
|
|
@@ -2089,6 +2410,8 @@ async function runBatch(scenarios, options) {
|
|
|
2089
2410
|
finished_at: new Date().toISOString()
|
|
2090
2411
|
});
|
|
2091
2412
|
emit({ type: "run:complete", runId: run.id });
|
|
2413
|
+
const eventType = finalRun.status === "failed" ? "failed" : "completed";
|
|
2414
|
+
dispatchWebhooks(eventType, finalRun).catch(() => {});
|
|
2092
2415
|
return { run: finalRun, results };
|
|
2093
2416
|
}
|
|
2094
2417
|
async function runByFilter(options) {
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,6 +2,14 @@ export type ScenarioPriority = "low" | "medium" | "high" | "critical";
|
|
|
2
2
|
export type RunStatus = "pending" | "running" | "passed" | "failed" | "cancelled";
|
|
3
3
|
export type ResultStatus = "passed" | "failed" | "error" | "skipped";
|
|
4
4
|
export type ModelPreset = "quick" | "thorough" | "deep";
|
|
5
|
+
export type BrowserEngine = "playwright" | "lightpanda";
|
|
6
|
+
export type AssertionType = "visible" | "not_visible" | "text_contains" | "text_equals" | "element_count" | "no_console_errors" | "url_contains" | "title_contains";
|
|
7
|
+
export interface Assertion {
|
|
8
|
+
type: AssertionType;
|
|
9
|
+
selector?: string;
|
|
10
|
+
expected?: string | number;
|
|
11
|
+
description?: string;
|
|
12
|
+
}
|
|
5
13
|
export declare const MODEL_MAP: Record<ModelPreset, string>;
|
|
6
14
|
export interface ProjectRow {
|
|
7
15
|
id: string;
|
|
@@ -35,6 +43,7 @@ export interface ScenarioRow {
|
|
|
35
43
|
requires_auth: number;
|
|
36
44
|
auth_config: string | null;
|
|
37
45
|
metadata: string | null;
|
|
46
|
+
assertions: string;
|
|
38
47
|
version: number;
|
|
39
48
|
created_at: string;
|
|
40
49
|
updated_at: string;
|
|
@@ -53,6 +62,7 @@ export interface RunRow {
|
|
|
53
62
|
started_at: string;
|
|
54
63
|
finished_at: string | null;
|
|
55
64
|
metadata: string | null;
|
|
65
|
+
is_baseline: number;
|
|
56
66
|
}
|
|
57
67
|
export interface ResultRow {
|
|
58
68
|
id: string;
|
|
@@ -133,6 +143,7 @@ export interface Scenario {
|
|
|
133
143
|
requiresAuth: boolean;
|
|
134
144
|
authConfig: AuthConfig | null;
|
|
135
145
|
metadata: Record<string, unknown> | null;
|
|
146
|
+
assertions: Assertion[];
|
|
136
147
|
version: number;
|
|
137
148
|
createdAt: string;
|
|
138
149
|
updatedAt: string;
|
|
@@ -151,6 +162,7 @@ export interface Run {
|
|
|
151
162
|
startedAt: string;
|
|
152
163
|
finishedAt: string | null;
|
|
153
164
|
metadata: Record<string, unknown> | null;
|
|
165
|
+
isBaseline: boolean;
|
|
154
166
|
}
|
|
155
167
|
export interface Result {
|
|
156
168
|
id: string;
|
|
@@ -214,6 +226,7 @@ export interface CreateScenarioInput {
|
|
|
214
226
|
targetPath?: string;
|
|
215
227
|
requiresAuth?: boolean;
|
|
216
228
|
authConfig?: AuthConfig;
|
|
229
|
+
assertions?: Assertion[];
|
|
217
230
|
metadata?: Record<string, unknown>;
|
|
218
231
|
projectId?: string;
|
|
219
232
|
}
|
|
@@ -228,6 +241,7 @@ export interface UpdateScenarioInput {
|
|
|
228
241
|
targetPath?: string;
|
|
229
242
|
requiresAuth?: boolean;
|
|
230
243
|
authConfig?: AuthConfig;
|
|
244
|
+
assertions?: Assertion[];
|
|
231
245
|
metadata?: Record<string, unknown>;
|
|
232
246
|
}
|
|
233
247
|
export interface CreateRunInput {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|