guardrail-cli 1.0.6 → 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.
- package/README.md +483 -10
- package/dist/commands/baseline.d.ts +7 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +79 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/cache.d.ts +13 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +165 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/evidence.d.ts +45 -0
- package/dist/commands/evidence.d.ts.map +1 -0
- package/dist/commands/evidence.js +197 -0
- package/dist/commands/evidence.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +15 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/scan-secrets.d.ts +47 -0
- package/dist/commands/scan-secrets.d.ts.map +1 -0
- package/dist/commands/scan-secrets.js +225 -0
- package/dist/commands/scan-secrets.js.map +1 -0
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
- package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
- package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
- package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities-osv.js +716 -0
- package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
- package/dist/commands/scan-vulnerabilities.d.ts +32 -0
- package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities.js +283 -0
- package/dist/commands/scan-vulnerabilities.js.map +1 -0
- package/dist/commands/secrets-allowlist.d.ts +7 -0
- package/dist/commands/secrets-allowlist.d.ts.map +1 -0
- package/dist/commands/secrets-allowlist.js +85 -0
- package/dist/commands/secrets-allowlist.js.map +1 -0
- package/dist/fix/applicator.d.ts +44 -0
- package/dist/fix/applicator.d.ts.map +1 -0
- package/dist/fix/applicator.js +144 -0
- package/dist/fix/applicator.js.map +1 -0
- package/dist/fix/backup.d.ts +38 -0
- package/dist/fix/backup.d.ts.map +1 -0
- package/dist/fix/backup.js +154 -0
- package/dist/fix/backup.js.map +1 -0
- package/dist/fix/engine.d.ts +55 -0
- package/dist/fix/engine.d.ts.map +1 -0
- package/dist/fix/engine.js +285 -0
- package/dist/fix/engine.js.map +1 -0
- package/dist/fix/index.d.ts +5 -0
- package/dist/fix/index.d.ts.map +1 -0
- package/dist/fix/index.js +12 -0
- package/dist/fix/index.js.map +1 -0
- package/dist/fix/interactive.d.ts +22 -0
- package/dist/fix/interactive.d.ts.map +1 -0
- package/dist/fix/interactive.js +172 -0
- package/dist/fix/interactive.js.map +1 -0
- package/dist/formatters/index.d.ts +6 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +11 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/sarif-enhanced.d.ts +78 -0
- package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
- package/dist/formatters/sarif-enhanced.js +144 -0
- package/dist/formatters/sarif-enhanced.js.map +1 -0
- package/dist/formatters/sarif-v2.d.ts +121 -0
- package/dist/formatters/sarif-v2.d.ts.map +1 -0
- package/dist/formatters/sarif-v2.js +356 -0
- package/dist/formatters/sarif-v2.js.map +1 -0
- package/dist/formatters/sarif.d.ts +72 -0
- package/dist/formatters/sarif.d.ts.map +1 -0
- package/dist/formatters/sarif.js +146 -0
- package/dist/formatters/sarif.js.map +1 -0
- package/dist/index.js +3362 -1397
- package/dist/index.js.map +1 -1
- package/dist/init/ci-generator.d.ts +18 -0
- package/dist/init/ci-generator.d.ts.map +1 -0
- package/dist/init/ci-generator.js +251 -0
- package/dist/init/ci-generator.js.map +1 -0
- package/dist/init/detect-framework.d.ts +15 -0
- package/dist/init/detect-framework.d.ts.map +1 -0
- package/dist/init/detect-framework.js +299 -0
- package/dist/init/detect-framework.js.map +1 -0
- package/dist/init/hooks-installer.d.ts +22 -0
- package/dist/init/hooks-installer.d.ts.map +1 -0
- package/dist/init/hooks-installer.js +302 -0
- package/dist/init/hooks-installer.js.map +1 -0
- package/dist/init/index.d.ts +8 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +22 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/templates.d.ts +401 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +240 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/reality/reality-runner.d.ts +76 -0
- package/dist/reality/reality-runner.d.ts.map +1 -0
- package/dist/reality/reality-runner.js +454 -0
- package/dist/reality/reality-runner.js.map +1 -0
- package/dist/runtime/auth-utils.d.ts +43 -0
- package/dist/runtime/auth-utils.d.ts.map +1 -0
- package/dist/runtime/auth-utils.js +126 -0
- package/dist/runtime/auth-utils.js.map +1 -0
- package/dist/runtime/client.d.ts +74 -0
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +222 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/creds.d.ts +48 -0
- package/dist/runtime/creds.d.ts.map +1 -0
- package/dist/runtime/creds.js +245 -0
- package/dist/runtime/creds.js.map +1 -0
- package/dist/runtime/exit-codes.d.ts +47 -0
- package/dist/runtime/exit-codes.d.ts.map +1 -0
- package/dist/runtime/exit-codes.js +91 -0
- package/dist/runtime/exit-codes.js.map +1 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +25 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/semver.d.ts +37 -0
- package/dist/runtime/semver.d.ts.map +1 -0
- package/dist/runtime/semver.js +110 -0
- package/dist/runtime/semver.js.map +1 -0
- package/dist/scanner/baseline.d.ts +52 -0
- package/dist/scanner/baseline.d.ts.map +1 -0
- package/dist/scanner/baseline.js +85 -0
- package/dist/scanner/baseline.js.map +1 -0
- package/dist/scanner/incremental.d.ts +30 -0
- package/dist/scanner/incremental.d.ts.map +1 -0
- package/dist/scanner/incremental.js +82 -0
- package/dist/scanner/incremental.js.map +1 -0
- package/dist/scanner/parallel.d.ts +43 -0
- package/dist/scanner/parallel.d.ts.map +1 -0
- package/dist/scanner/parallel.js +99 -0
- package/dist/scanner/parallel.js.map +1 -0
- package/dist/ui/frame.d.ts +68 -0
- package/dist/ui/frame.d.ts.map +1 -0
- package/dist/ui/frame.js +165 -0
- package/dist/ui/frame.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +16 -0
- package/dist/ui/index.js.map +1 -0
- package/package.json +42 -9
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reality Mode - Playwright Test Execution
|
|
3
|
+
*
|
|
4
|
+
* Enterprise-grade execution of generated Playwright tests with:
|
|
5
|
+
* - Dependency detection (Playwright, browsers)
|
|
6
|
+
* - Artifact storage (.guardrail/reality/<runId>/)
|
|
7
|
+
* - Configurable execution (headless, timeout, workers, reporter)
|
|
8
|
+
* - Signal handling (Ctrl+C, timeout kill)
|
|
9
|
+
*/
|
|
10
|
+
export interface PlaywrightRunOptions {
|
|
11
|
+
testFile: string;
|
|
12
|
+
headless: boolean;
|
|
13
|
+
timeout: number;
|
|
14
|
+
workers: number;
|
|
15
|
+
reporter: string;
|
|
16
|
+
projectPath: string;
|
|
17
|
+
baseUrl: string;
|
|
18
|
+
flow: string;
|
|
19
|
+
trace?: 'on' | 'off' | 'retain-on-failure' | 'on-first-retry';
|
|
20
|
+
video?: 'on' | 'off' | 'retain-on-failure' | 'on-first-retry';
|
|
21
|
+
screenshot?: 'on' | 'off' | 'only-on-failure';
|
|
22
|
+
}
|
|
23
|
+
export interface DependencyCheckResult {
|
|
24
|
+
playwrightInstalled: boolean;
|
|
25
|
+
browsersInstalled: boolean;
|
|
26
|
+
playwrightPath: string | null;
|
|
27
|
+
errorMessage: string | null;
|
|
28
|
+
installCommands: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface RunArtifacts {
|
|
31
|
+
runId: string;
|
|
32
|
+
artifactDir: string;
|
|
33
|
+
testFilePath: string;
|
|
34
|
+
reportPath: string | null;
|
|
35
|
+
screenshotsDir: string;
|
|
36
|
+
}
|
|
37
|
+
export interface PlaywrightRunResult {
|
|
38
|
+
success: boolean;
|
|
39
|
+
exitCode: number;
|
|
40
|
+
output: string;
|
|
41
|
+
artifacts: RunArtifacts;
|
|
42
|
+
duration: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if Playwright is installed and browsers are available
|
|
46
|
+
*/
|
|
47
|
+
export declare function checkPlaywrightDependencies(projectPath: string): DependencyCheckResult;
|
|
48
|
+
/**
|
|
49
|
+
* Build Playwright command arguments
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildPlaywrightArgs(options: PlaywrightRunOptions): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Create artifact directory structure
|
|
54
|
+
*/
|
|
55
|
+
export declare function createArtifactDirectory(projectPath: string, flow: string): RunArtifacts;
|
|
56
|
+
/**
|
|
57
|
+
* Copy test file to artifact directory
|
|
58
|
+
*/
|
|
59
|
+
export declare function copyTestToArtifacts(sourceTestFile: string, artifacts: RunArtifacts): void;
|
|
60
|
+
/**
|
|
61
|
+
* Run Playwright tests with proper signal handling
|
|
62
|
+
*/
|
|
63
|
+
export declare function runPlaywrightTests(options: PlaywrightRunOptions, artifacts: RunArtifacts, onOutput: (data: string) => void): Promise<PlaywrightRunResult>;
|
|
64
|
+
/**
|
|
65
|
+
* Format duration for display
|
|
66
|
+
*/
|
|
67
|
+
export declare function formatDuration(ms: number): string;
|
|
68
|
+
/**
|
|
69
|
+
* Run Playwright codegen for recording mode
|
|
70
|
+
*/
|
|
71
|
+
export declare function runPlaywrightCodegen(baseUrl: string, outputFile: string, projectPath: string, onOutput: (data: string) => void): Promise<{
|
|
72
|
+
success: boolean;
|
|
73
|
+
exitCode: number;
|
|
74
|
+
output: string;
|
|
75
|
+
}>;
|
|
76
|
+
//# sourceMappingURL=reality-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reality-runner.d.ts","sourceRoot":"","sources":["../../src/reality/reality-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IAC9D,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IAC9D,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,iBAAiB,CAAC;CAC/C;AAED,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CA4GtF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAqC3E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAiBvF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAEzF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CAiK9B;AA8CD;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAYjD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA2EjE"}
|
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Reality Mode - Playwright Test Execution
|
|
4
|
+
*
|
|
5
|
+
* Enterprise-grade execution of generated Playwright tests with:
|
|
6
|
+
* - Dependency detection (Playwright, browsers)
|
|
7
|
+
* - Artifact storage (.guardrail/reality/<runId>/)
|
|
8
|
+
* - Configurable execution (headless, timeout, workers, reporter)
|
|
9
|
+
* - Signal handling (Ctrl+C, timeout kill)
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.checkPlaywrightDependencies = checkPlaywrightDependencies;
|
|
13
|
+
exports.buildPlaywrightArgs = buildPlaywrightArgs;
|
|
14
|
+
exports.createArtifactDirectory = createArtifactDirectory;
|
|
15
|
+
exports.copyTestToArtifacts = copyTestToArtifacts;
|
|
16
|
+
exports.runPlaywrightTests = runPlaywrightTests;
|
|
17
|
+
exports.formatDuration = formatDuration;
|
|
18
|
+
exports.runPlaywrightCodegen = runPlaywrightCodegen;
|
|
19
|
+
const child_process_1 = require("child_process");
|
|
20
|
+
const fs_1 = require("fs");
|
|
21
|
+
const path_1 = require("path");
|
|
22
|
+
const crypto_1 = require("crypto");
|
|
23
|
+
/**
|
|
24
|
+
* Check if Playwright is installed and browsers are available
|
|
25
|
+
*/
|
|
26
|
+
function checkPlaywrightDependencies(projectPath) {
|
|
27
|
+
const result = {
|
|
28
|
+
playwrightInstalled: false,
|
|
29
|
+
browsersInstalled: false,
|
|
30
|
+
playwrightPath: null,
|
|
31
|
+
errorMessage: null,
|
|
32
|
+
installCommands: [],
|
|
33
|
+
};
|
|
34
|
+
// Check for Playwright in node_modules
|
|
35
|
+
const localPlaywright = (0, path_1.join)(projectPath, 'node_modules', '@playwright', 'test');
|
|
36
|
+
const localPlaywrightBin = (0, path_1.join)(projectPath, 'node_modules', '.bin', 'playwright');
|
|
37
|
+
if ((0, fs_1.existsSync)(localPlaywright)) {
|
|
38
|
+
result.playwrightInstalled = true;
|
|
39
|
+
result.playwrightPath = localPlaywrightBin;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Check for global Playwright
|
|
43
|
+
try {
|
|
44
|
+
const globalCheck = (0, child_process_1.execSync)('npx playwright --version', {
|
|
45
|
+
encoding: 'utf8',
|
|
46
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
47
|
+
timeout: 10000,
|
|
48
|
+
});
|
|
49
|
+
if (globalCheck && globalCheck.includes('.')) {
|
|
50
|
+
result.playwrightInstalled = true;
|
|
51
|
+
result.playwrightPath = 'npx playwright';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Not installed globally either
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!result.playwrightInstalled) {
|
|
59
|
+
result.errorMessage = 'Playwright is not installed.';
|
|
60
|
+
result.installCommands = [
|
|
61
|
+
'npm install -D @playwright/test',
|
|
62
|
+
'npx playwright install',
|
|
63
|
+
];
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
// Check if browsers are installed
|
|
67
|
+
try {
|
|
68
|
+
const browserCheckCmd = result.playwrightPath === 'npx playwright'
|
|
69
|
+
? 'npx playwright install --dry-run chromium 2>&1'
|
|
70
|
+
: `"${result.playwrightPath}" install --dry-run chromium 2>&1`;
|
|
71
|
+
// Try to detect browser installation by checking common paths
|
|
72
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
73
|
+
const browserPaths = [
|
|
74
|
+
(0, path_1.join)(homeDir, '.cache', 'ms-playwright'),
|
|
75
|
+
(0, path_1.join)(homeDir, 'AppData', 'Local', 'ms-playwright'),
|
|
76
|
+
(0, path_1.join)(homeDir, 'Library', 'Caches', 'ms-playwright'),
|
|
77
|
+
];
|
|
78
|
+
let browsersFound = false;
|
|
79
|
+
for (const browserPath of browserPaths) {
|
|
80
|
+
if ((0, fs_1.existsSync)(browserPath)) {
|
|
81
|
+
try {
|
|
82
|
+
const contents = (0, fs_1.readdirSync)(browserPath);
|
|
83
|
+
if (contents.some(f => f.startsWith('chromium'))) {
|
|
84
|
+
browsersFound = true;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Ignore read errors
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (browsersFound) {
|
|
94
|
+
result.browsersInstalled = true;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Try running a quick test to see if browsers work
|
|
98
|
+
try {
|
|
99
|
+
(0, child_process_1.execSync)('npx playwright test --list 2>&1', {
|
|
100
|
+
encoding: 'utf8',
|
|
101
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
102
|
+
timeout: 15000,
|
|
103
|
+
cwd: projectPath,
|
|
104
|
+
});
|
|
105
|
+
result.browsersInstalled = true;
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
const errorOutput = e.stdout?.toString() || e.stderr?.toString() || '';
|
|
109
|
+
if (errorOutput.includes('Executable doesn\'t exist') ||
|
|
110
|
+
errorOutput.includes('browserType.launch') ||
|
|
111
|
+
errorOutput.includes('npx playwright install')) {
|
|
112
|
+
result.browsersInstalled = false;
|
|
113
|
+
result.errorMessage = 'Playwright browsers are not installed.';
|
|
114
|
+
result.installCommands = ['npx playwright install'];
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Might just be no tests found, which is fine
|
|
118
|
+
result.browsersInstalled = true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Assume browsers might be installed if we can't check
|
|
125
|
+
result.browsersInstalled = true;
|
|
126
|
+
}
|
|
127
|
+
if (!result.browsersInstalled) {
|
|
128
|
+
result.errorMessage = 'Playwright browsers are not installed.';
|
|
129
|
+
result.installCommands = ['npx playwright install'];
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Build Playwright command arguments
|
|
135
|
+
*/
|
|
136
|
+
function buildPlaywrightArgs(options) {
|
|
137
|
+
const args = ['test', options.testFile];
|
|
138
|
+
// Headless mode (Playwright default is headless, --headed overrides)
|
|
139
|
+
if (!options.headless) {
|
|
140
|
+
args.push('--headed');
|
|
141
|
+
}
|
|
142
|
+
// Timeout (in milliseconds)
|
|
143
|
+
if (options.timeout > 0) {
|
|
144
|
+
args.push('--timeout', String(options.timeout * 1000));
|
|
145
|
+
}
|
|
146
|
+
// Workers
|
|
147
|
+
args.push('--workers', String(options.workers));
|
|
148
|
+
// Reporter
|
|
149
|
+
if (options.reporter) {
|
|
150
|
+
args.push('--reporter', options.reporter);
|
|
151
|
+
}
|
|
152
|
+
// Screenshot
|
|
153
|
+
if (options.screenshot) {
|
|
154
|
+
args.push('--screenshot', options.screenshot);
|
|
155
|
+
}
|
|
156
|
+
// Trace mode
|
|
157
|
+
if (options.trace) {
|
|
158
|
+
args.push('--trace', options.trace);
|
|
159
|
+
}
|
|
160
|
+
// Video
|
|
161
|
+
if (options.video) {
|
|
162
|
+
args.push('--video', options.video);
|
|
163
|
+
}
|
|
164
|
+
return args;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Create artifact directory structure
|
|
168
|
+
*/
|
|
169
|
+
function createArtifactDirectory(projectPath, flow) {
|
|
170
|
+
const runId = `${flow}-${Date.now()}-${(0, crypto_1.randomUUID)().slice(0, 8)}`;
|
|
171
|
+
const artifactDir = (0, path_1.join)(projectPath, '.guardrail', 'reality', runId);
|
|
172
|
+
const screenshotsDir = (0, path_1.join)(artifactDir, 'screenshots');
|
|
173
|
+
const reportDir = (0, path_1.join)(artifactDir, 'report');
|
|
174
|
+
(0, fs_1.mkdirSync)(artifactDir, { recursive: true });
|
|
175
|
+
(0, fs_1.mkdirSync)(screenshotsDir, { recursive: true });
|
|
176
|
+
(0, fs_1.mkdirSync)(reportDir, { recursive: true });
|
|
177
|
+
return {
|
|
178
|
+
runId,
|
|
179
|
+
artifactDir,
|
|
180
|
+
testFilePath: (0, path_1.join)(artifactDir, `reality-${flow}.test.ts`),
|
|
181
|
+
reportPath: reportDir,
|
|
182
|
+
screenshotsDir,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Copy test file to artifact directory
|
|
187
|
+
*/
|
|
188
|
+
function copyTestToArtifacts(sourceTestFile, artifacts) {
|
|
189
|
+
(0, fs_1.copyFileSync)(sourceTestFile, artifacts.testFilePath);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Run Playwright tests with proper signal handling
|
|
193
|
+
*/
|
|
194
|
+
async function runPlaywrightTests(options, artifacts, onOutput) {
|
|
195
|
+
return new Promise((resolve) => {
|
|
196
|
+
const startTime = Date.now();
|
|
197
|
+
let output = '';
|
|
198
|
+
let childProcess = null;
|
|
199
|
+
let killed = false;
|
|
200
|
+
let timeoutHandle = null;
|
|
201
|
+
const depCheck = checkPlaywrightDependencies(options.projectPath);
|
|
202
|
+
if (!depCheck.playwrightInstalled || !depCheck.browsersInstalled) {
|
|
203
|
+
resolve({
|
|
204
|
+
success: false,
|
|
205
|
+
exitCode: 2,
|
|
206
|
+
output: depCheck.errorMessage || 'Dependency check failed',
|
|
207
|
+
artifacts,
|
|
208
|
+
duration: Date.now() - startTime,
|
|
209
|
+
});
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const args = buildPlaywrightArgs(options);
|
|
213
|
+
// Add output directory for artifacts
|
|
214
|
+
args.push('--output', artifacts.screenshotsDir);
|
|
215
|
+
// Determine if we should use npx or local binary
|
|
216
|
+
const useNpx = depCheck.playwrightPath === 'npx playwright';
|
|
217
|
+
const command = useNpx ? 'npx' : process.platform === 'win32' ? 'npx' : depCheck.playwrightPath;
|
|
218
|
+
const spawnArgs = useNpx ? ['playwright', ...args] : args;
|
|
219
|
+
// Write run metadata
|
|
220
|
+
const metadata = {
|
|
221
|
+
runId: artifacts.runId,
|
|
222
|
+
startTime: new Date().toISOString(),
|
|
223
|
+
options: {
|
|
224
|
+
testFile: options.testFile,
|
|
225
|
+
headless: options.headless,
|
|
226
|
+
timeout: options.timeout,
|
|
227
|
+
workers: options.workers,
|
|
228
|
+
reporter: options.reporter,
|
|
229
|
+
baseUrl: options.baseUrl,
|
|
230
|
+
flow: options.flow,
|
|
231
|
+
},
|
|
232
|
+
command: `${command} ${spawnArgs.join(' ')}`,
|
|
233
|
+
};
|
|
234
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(artifacts.artifactDir, 'run-metadata.json'), JSON.stringify(metadata, null, 2));
|
|
235
|
+
childProcess = (0, child_process_1.spawn)(command, spawnArgs, {
|
|
236
|
+
cwd: (0, path_1.dirname)(options.testFile),
|
|
237
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
238
|
+
shell: process.platform === 'win32',
|
|
239
|
+
env: {
|
|
240
|
+
...process.env,
|
|
241
|
+
PLAYWRIGHT_HTML_REPORT: artifacts.reportPath || undefined,
|
|
242
|
+
BASE_URL: options.baseUrl,
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
// Set up timeout
|
|
246
|
+
if (options.timeout > 0) {
|
|
247
|
+
const totalTimeout = options.timeout * 1000 * 2; // 2x timeout for safety
|
|
248
|
+
timeoutHandle = setTimeout(() => {
|
|
249
|
+
if (childProcess && !killed) {
|
|
250
|
+
killed = true;
|
|
251
|
+
output += '\n[TIMEOUT] Test execution exceeded timeout limit. Killing process.\n';
|
|
252
|
+
onOutput('\n[TIMEOUT] Test execution exceeded timeout limit. Killing process.\n');
|
|
253
|
+
childProcess.kill('SIGTERM');
|
|
254
|
+
setTimeout(() => {
|
|
255
|
+
if (childProcess && !childProcess.killed) {
|
|
256
|
+
childProcess.kill('SIGKILL');
|
|
257
|
+
}
|
|
258
|
+
}, 5000);
|
|
259
|
+
}
|
|
260
|
+
}, totalTimeout);
|
|
261
|
+
}
|
|
262
|
+
// Handle Ctrl+C
|
|
263
|
+
const sigintHandler = () => {
|
|
264
|
+
if (childProcess && !killed) {
|
|
265
|
+
killed = true;
|
|
266
|
+
output += '\n[INTERRUPTED] Received SIGINT. Stopping tests.\n';
|
|
267
|
+
onOutput('\n[INTERRUPTED] Received SIGINT. Stopping tests.\n');
|
|
268
|
+
childProcess.kill('SIGTERM');
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
process.on('SIGINT', sigintHandler);
|
|
272
|
+
childProcess.stdout?.on('data', (data) => {
|
|
273
|
+
const text = data.toString();
|
|
274
|
+
output += text;
|
|
275
|
+
onOutput(text);
|
|
276
|
+
});
|
|
277
|
+
childProcess.stderr?.on('data', (data) => {
|
|
278
|
+
const text = data.toString();
|
|
279
|
+
output += text;
|
|
280
|
+
onOutput(text);
|
|
281
|
+
});
|
|
282
|
+
childProcess.on('close', (code) => {
|
|
283
|
+
if (timeoutHandle) {
|
|
284
|
+
clearTimeout(timeoutHandle);
|
|
285
|
+
}
|
|
286
|
+
process.removeListener('SIGINT', sigintHandler);
|
|
287
|
+
const duration = Date.now() - startTime;
|
|
288
|
+
const exitCode = code ?? 1;
|
|
289
|
+
// Write output log
|
|
290
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(artifacts.artifactDir, 'output.log'), output);
|
|
291
|
+
// Write result summary
|
|
292
|
+
const summary = {
|
|
293
|
+
runId: artifacts.runId,
|
|
294
|
+
success: exitCode === 0,
|
|
295
|
+
exitCode,
|
|
296
|
+
duration,
|
|
297
|
+
endTime: new Date().toISOString(),
|
|
298
|
+
killed,
|
|
299
|
+
};
|
|
300
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(artifacts.artifactDir, 'result.json'), JSON.stringify(summary, null, 2));
|
|
301
|
+
// Copy any HTML report if available
|
|
302
|
+
copyHtmlReportIfExists(options.projectPath, artifacts);
|
|
303
|
+
resolve({
|
|
304
|
+
success: exitCode === 0,
|
|
305
|
+
exitCode,
|
|
306
|
+
output,
|
|
307
|
+
artifacts,
|
|
308
|
+
duration,
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
childProcess.on('error', (err) => {
|
|
312
|
+
if (timeoutHandle) {
|
|
313
|
+
clearTimeout(timeoutHandle);
|
|
314
|
+
}
|
|
315
|
+
process.removeListener('SIGINT', sigintHandler);
|
|
316
|
+
const duration = Date.now() - startTime;
|
|
317
|
+
output += `\n[ERROR] Failed to spawn Playwright: ${err.message}\n`;
|
|
318
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(artifacts.artifactDir, 'output.log'), output);
|
|
319
|
+
resolve({
|
|
320
|
+
success: false,
|
|
321
|
+
exitCode: 1,
|
|
322
|
+
output,
|
|
323
|
+
artifacts,
|
|
324
|
+
duration,
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Copy HTML report to artifacts if it exists
|
|
331
|
+
*/
|
|
332
|
+
function copyHtmlReportIfExists(projectPath, artifacts) {
|
|
333
|
+
const possibleReportPaths = [
|
|
334
|
+
(0, path_1.join)(projectPath, 'playwright-report'),
|
|
335
|
+
(0, path_1.join)((0, path_1.dirname)(artifacts.testFilePath), 'playwright-report'),
|
|
336
|
+
(0, path_1.join)(projectPath, '.guardrail', 'reality-tests', 'playwright-report'),
|
|
337
|
+
];
|
|
338
|
+
for (const reportPath of possibleReportPaths) {
|
|
339
|
+
if ((0, fs_1.existsSync)(reportPath) && (0, fs_1.existsSync)((0, path_1.join)(reportPath, 'index.html'))) {
|
|
340
|
+
try {
|
|
341
|
+
copyDirectoryRecursive(reportPath, artifacts.reportPath);
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
// Ignore copy errors
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Recursively copy directory
|
|
352
|
+
*/
|
|
353
|
+
function copyDirectoryRecursive(src, dest) {
|
|
354
|
+
if (!(0, fs_1.existsSync)(dest)) {
|
|
355
|
+
(0, fs_1.mkdirSync)(dest, { recursive: true });
|
|
356
|
+
}
|
|
357
|
+
const entries = (0, fs_1.readdirSync)(src, { withFileTypes: true });
|
|
358
|
+
for (const entry of entries) {
|
|
359
|
+
const srcPath = (0, path_1.join)(src, entry.name);
|
|
360
|
+
const destPath = (0, path_1.join)(dest, entry.name);
|
|
361
|
+
if (entry.isDirectory()) {
|
|
362
|
+
copyDirectoryRecursive(srcPath, destPath);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
(0, fs_1.copyFileSync)(srcPath, destPath);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Format duration for display
|
|
371
|
+
*/
|
|
372
|
+
function formatDuration(ms) {
|
|
373
|
+
if (ms < 1000) {
|
|
374
|
+
return `${ms}ms`;
|
|
375
|
+
}
|
|
376
|
+
const seconds = Math.floor(ms / 1000);
|
|
377
|
+
const minutes = Math.floor(seconds / 60);
|
|
378
|
+
const remainingSeconds = seconds % 60;
|
|
379
|
+
if (minutes > 0) {
|
|
380
|
+
return `${minutes}m ${remainingSeconds}s`;
|
|
381
|
+
}
|
|
382
|
+
return `${seconds}s`;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Run Playwright codegen for recording mode
|
|
386
|
+
*/
|
|
387
|
+
async function runPlaywrightCodegen(baseUrl, outputFile, projectPath, onOutput) {
|
|
388
|
+
return new Promise((resolve) => {
|
|
389
|
+
const depCheck = checkPlaywrightDependencies(projectPath);
|
|
390
|
+
if (!depCheck.playwrightInstalled || !depCheck.browsersInstalled) {
|
|
391
|
+
const errorMsg = depCheck.errorMessage || 'Dependency check failed';
|
|
392
|
+
onOutput(errorMsg + '\n');
|
|
393
|
+
if (depCheck.installCommands.length > 0) {
|
|
394
|
+
onOutput('\nInstall commands:\n');
|
|
395
|
+
depCheck.installCommands.forEach(cmd => onOutput(` ${cmd}\n`));
|
|
396
|
+
}
|
|
397
|
+
resolve({
|
|
398
|
+
success: false,
|
|
399
|
+
exitCode: 2,
|
|
400
|
+
output: errorMsg,
|
|
401
|
+
});
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
let output = '';
|
|
405
|
+
const args = ['codegen', baseUrl, '--target', 'playwright-test', '--output', outputFile];
|
|
406
|
+
const useNpx = depCheck.playwrightPath === 'npx playwright';
|
|
407
|
+
const command = useNpx ? 'npx' : process.platform === 'win32' ? 'npx' : depCheck.playwrightPath;
|
|
408
|
+
const spawnArgs = useNpx ? ['playwright', ...args] : args;
|
|
409
|
+
onOutput(`Starting Playwright codegen...\n`);
|
|
410
|
+
onOutput(`Command: ${command} ${spawnArgs.join(' ')}\n\n`);
|
|
411
|
+
onOutput('Instructions:\n');
|
|
412
|
+
onOutput(' 1. Browser will open - interact with your app\n');
|
|
413
|
+
onOutput(' 2. Click, type, navigate as needed\n');
|
|
414
|
+
onOutput(' 3. Close the browser when done\n');
|
|
415
|
+
onOutput(' 4. Generated test will be saved to: ' + outputFile + '\n\n');
|
|
416
|
+
const childProcess = (0, child_process_1.spawn)(command, spawnArgs, {
|
|
417
|
+
cwd: (0, path_1.dirname)(outputFile),
|
|
418
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
419
|
+
shell: process.platform === 'win32',
|
|
420
|
+
env: {
|
|
421
|
+
...process.env,
|
|
422
|
+
},
|
|
423
|
+
});
|
|
424
|
+
childProcess.stdout?.on('data', (data) => {
|
|
425
|
+
const text = data.toString();
|
|
426
|
+
output += text;
|
|
427
|
+
onOutput(text);
|
|
428
|
+
});
|
|
429
|
+
childProcess.stderr?.on('data', (data) => {
|
|
430
|
+
const text = data.toString();
|
|
431
|
+
output += text;
|
|
432
|
+
onOutput(text);
|
|
433
|
+
});
|
|
434
|
+
childProcess.on('close', (code) => {
|
|
435
|
+
const exitCode = code ?? 0;
|
|
436
|
+
resolve({
|
|
437
|
+
success: exitCode === 0,
|
|
438
|
+
exitCode,
|
|
439
|
+
output,
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
childProcess.on('error', (err) => {
|
|
443
|
+
const errorMsg = `Failed to spawn Playwright codegen: ${err.message}`;
|
|
444
|
+
output += errorMsg;
|
|
445
|
+
onOutput(errorMsg + '\n');
|
|
446
|
+
resolve({
|
|
447
|
+
success: false,
|
|
448
|
+
exitCode: 1,
|
|
449
|
+
output,
|
|
450
|
+
});
|
|
451
|
+
});
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
//# sourceMappingURL=reality-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reality-runner.js","sourceRoot":"","sources":["../../src/reality/reality-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Auth Utilities
|
|
3
|
+
* - Key masking for secure display
|
|
4
|
+
* - Expiry warning calculations
|
|
5
|
+
* - Cache validity checks
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Mask an API key for secure display
|
|
9
|
+
* Keeps prefix and last 4 characters: gr_pro_****abcd
|
|
10
|
+
*/
|
|
11
|
+
export declare function maskApiKey(apiKey: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Calculate hours until expiry
|
|
14
|
+
* Returns null if no expiry or already expired
|
|
15
|
+
*/
|
|
16
|
+
export declare function hoursUntilExpiry(expiresAt: string | undefined): number | null;
|
|
17
|
+
/**
|
|
18
|
+
* Check if expiry is within warning threshold (72 hours)
|
|
19
|
+
*/
|
|
20
|
+
export declare function isExpiryWarning(expiresAt: string | undefined, thresholdHours?: number): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Format expiry for display
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatExpiry(expiresAt: string | undefined): string;
|
|
25
|
+
/**
|
|
26
|
+
* Check if cached entitlements should be reused
|
|
27
|
+
* Returns true if cache is valid and has > 5 minutes remaining
|
|
28
|
+
*/
|
|
29
|
+
export declare function shouldUseCachedEntitlements(expiresAt: string | undefined): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get client metadata for API requests
|
|
32
|
+
*/
|
|
33
|
+
export declare function getClientMetadata(): {
|
|
34
|
+
version: string;
|
|
35
|
+
os: string;
|
|
36
|
+
arch: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Validate API key format
|
|
40
|
+
* Returns error message or null if valid
|
|
41
|
+
*/
|
|
42
|
+
export declare function validateApiKeyFormat(apiKey: string): string | null;
|
|
43
|
+
//# sourceMappingURL=auth-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-utils.d.ts","sourceRoot":"","sources":["../../src/runtime/auth-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAU7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,GAAE,MAAW,GAAG,OAAO,CAInG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYlE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAQlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAcjF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBlE"}
|