agentic-qe 3.7.5 → 3.7.7
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/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +38 -0
- package/dist/cli/bundle.js +6220 -1373
- package/dist/cli/commands/security.d.ts.map +1 -1
- package/dist/cli/commands/security.js +66 -1
- package/dist/cli/commands/security.js.map +1 -1
- package/dist/cli/commands/test.d.ts.map +1 -1
- package/dist/cli/commands/test.js +86 -3
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/index.js +119 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/coordination/workflow-orchestrator.d.ts.map +1 -1
- package/dist/coordination/workflow-orchestrator.js +2 -6
- package/dist/coordination/workflow-orchestrator.js.map +1 -1
- package/dist/domains/test-execution/services/e2e/adaptive-locator-service.d.ts +71 -0
- package/dist/domains/test-execution/services/e2e/adaptive-locator-service.d.ts.map +1 -0
- package/dist/domains/test-execution/services/e2e/adaptive-locator-service.js +456 -0
- package/dist/domains/test-execution/services/e2e/adaptive-locator-service.js.map +1 -0
- package/dist/domains/test-execution/services/e2e/adaptive-locator-types.d.ts +81 -0
- package/dist/domains/test-execution/services/e2e/adaptive-locator-types.d.ts.map +1 -0
- package/dist/domains/test-execution/services/e2e/adaptive-locator-types.js +20 -0
- package/dist/domains/test-execution/services/e2e/adaptive-locator-types.js.map +1 -0
- package/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts +19 -0
- package/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts.map +1 -1
- package/dist/domains/test-execution/services/e2e/browser-orchestrator.js +82 -0
- package/dist/domains/test-execution/services/e2e/browser-orchestrator.js.map +1 -1
- package/dist/domains/test-execution/services/e2e/index.d.ts +2 -0
- package/dist/domains/test-execution/services/e2e/index.d.ts.map +1 -1
- package/dist/domains/test-execution/services/e2e/index.js +5 -0
- package/dist/domains/test-execution/services/e2e/index.js.map +1 -1
- package/dist/domains/test-execution/services/e2e/step-executors.d.ts +6 -0
- package/dist/domains/test-execution/services/e2e/step-executors.d.ts.map +1 -1
- package/dist/domains/test-execution/services/e2e/step-executors.js +17 -2
- package/dist/domains/test-execution/services/e2e/step-executors.js.map +1 -1
- package/dist/domains/test-execution/services/e2e/types.d.ts +18 -1
- package/dist/domains/test-execution/services/e2e/types.d.ts.map +1 -1
- package/dist/domains/test-execution/services/e2e/types.js.map +1 -1
- package/dist/integrations/browser/client-factory.d.ts +6 -1
- package/dist/integrations/browser/client-factory.d.ts.map +1 -1
- package/dist/integrations/browser/client-factory.js +37 -2
- package/dist/integrations/browser/client-factory.js.map +1 -1
- package/dist/integrations/browser/index.d.ts +5 -1
- package/dist/integrations/browser/index.d.ts.map +1 -1
- package/dist/integrations/browser/index.js +8 -1
- package/dist/integrations/browser/index.js.map +1 -1
- package/dist/integrations/browser/page-pool-types.d.ts +70 -0
- package/dist/integrations/browser/page-pool-types.d.ts.map +1 -0
- package/dist/integrations/browser/page-pool-types.js +19 -0
- package/dist/integrations/browser/page-pool-types.js.map +1 -0
- package/dist/integrations/browser/page-pool.d.ts +79 -0
- package/dist/integrations/browser/page-pool.d.ts.map +1 -0
- package/dist/integrations/browser/page-pool.js +288 -0
- package/dist/integrations/browser/page-pool.js.map +1 -0
- package/dist/integrations/browser/resource-blocking.d.ts +47 -0
- package/dist/integrations/browser/resource-blocking.d.ts.map +1 -0
- package/dist/integrations/browser/resource-blocking.js +195 -0
- package/dist/integrations/browser/resource-blocking.js.map +1 -0
- package/dist/integrations/browser/stealth/index.d.ts +8 -0
- package/dist/integrations/browser/stealth/index.d.ts.map +1 -0
- package/dist/integrations/browser/stealth/index.js +7 -0
- package/dist/integrations/browser/stealth/index.js.map +1 -0
- package/dist/integrations/browser/stealth/stealth-client.d.ts +51 -0
- package/dist/integrations/browser/stealth/stealth-client.d.ts.map +1 -0
- package/dist/integrations/browser/stealth/stealth-client.js +359 -0
- package/dist/integrations/browser/stealth/stealth-client.js.map +1 -0
- package/dist/integrations/browser/stealth/stealth-types.d.ts +35 -0
- package/dist/integrations/browser/stealth/stealth-types.d.ts.map +1 -0
- package/dist/integrations/browser/stealth/stealth-types.js +17 -0
- package/dist/integrations/browser/stealth/stealth-types.js.map +1 -0
- package/dist/integrations/browser/types.d.ts +13 -10
- package/dist/integrations/browser/types.d.ts.map +1 -1
- package/dist/integrations/browser/types.js.map +1 -1
- package/dist/mcp/bundle.js +5090 -222
- package/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
- package/dist/mcp/handlers/core-handlers.js +35 -0
- package/dist/mcp/handlers/core-handlers.js.map +1 -1
- package/dist/mcp/protocol-server.d.ts.map +1 -1
- package/dist/mcp/protocol-server.js +4 -1
- package/dist/mcp/protocol-server.js.map +1 -1
- package/dist/mcp/qe-tool-bridge.d.ts +27 -0
- package/dist/mcp/qe-tool-bridge.d.ts.map +1 -0
- package/dist/mcp/qe-tool-bridge.js +87 -0
- package/dist/mcp/qe-tool-bridge.js.map +1 -0
- package/dist/mcp/tools/registry.d.ts +4 -0
- package/dist/mcp/tools/registry.d.ts.map +1 -1
- package/dist/mcp/tools/registry.js +20 -0
- package/dist/mcp/tools/registry.js.map +1 -1
- package/dist/mcp/tools/security-compliance/visual-security.d.ts +45 -0
- package/dist/mcp/tools/security-compliance/visual-security.d.ts.map +1 -0
- package/dist/mcp/tools/security-compliance/visual-security.js +218 -0
- package/dist/mcp/tools/security-compliance/visual-security.js.map +1 -0
- package/dist/mcp/tools/test-execution/browser-workflow.d.ts +50 -0
- package/dist/mcp/tools/test-execution/browser-workflow.d.ts.map +1 -0
- package/dist/mcp/tools/test-execution/browser-workflow.js +145 -0
- package/dist/mcp/tools/test-execution/browser-workflow.js.map +1 -0
- package/dist/mcp/tools/test-execution/load-test.d.ts +37 -0
- package/dist/mcp/tools/test-execution/load-test.d.ts.map +1 -0
- package/dist/mcp/tools/test-execution/load-test.js +98 -0
- package/dist/mcp/tools/test-execution/load-test.js.map +1 -0
- package/dist/mcp/tools/test-execution/schedule.d.ts +44 -0
- package/dist/mcp/tools/test-execution/schedule.d.ts.map +1 -0
- package/dist/mcp/tools/test-execution/schedule.js +96 -0
- package/dist/mcp/tools/test-execution/schedule.js.map +1 -0
- package/dist/planning/goap-planner.d.ts.map +1 -1
- package/dist/planning/goap-planner.js +7 -28
- package/dist/planning/goap-planner.js.map +1 -1
- package/dist/planning/plan-executor.d.ts.map +1 -1
- package/dist/planning/plan-executor.js +7 -28
- package/dist/planning/plan-executor.js.map +1 -1
- package/package.json +3 -10
- package/dist/cli/commands/qe-tools.d.ts +0 -27
- package/dist/cli/commands/qe-tools.d.ts.map +0 -1
- package/dist/cli/commands/qe-tools.js +0 -771
- package/dist/cli/commands/qe-tools.js.map +0 -1
- package/dist/neural-optimizer/index.d.ts +0 -55
- package/dist/neural-optimizer/index.d.ts.map +0 -1
- package/dist/neural-optimizer/index.js +0 -57
- package/dist/neural-optimizer/index.js.map +0 -1
- package/dist/neural-optimizer/replay-buffer.d.ts +0 -126
- package/dist/neural-optimizer/replay-buffer.d.ts.map +0 -1
- package/dist/neural-optimizer/replay-buffer.js +0 -356
- package/dist/neural-optimizer/replay-buffer.js.map +0 -1
- package/dist/neural-optimizer/swarm-topology.d.ts +0 -157
- package/dist/neural-optimizer/swarm-topology.d.ts.map +0 -1
- package/dist/neural-optimizer/swarm-topology.js +0 -384
- package/dist/neural-optimizer/swarm-topology.js.map +0 -1
- package/dist/neural-optimizer/topology-optimizer.d.ts +0 -137
- package/dist/neural-optimizer/topology-optimizer.d.ts.map +0 -1
- package/dist/neural-optimizer/topology-optimizer.js +0 -657
- package/dist/neural-optimizer/topology-optimizer.js.map +0 -1
- package/dist/neural-optimizer/types.d.ts +0 -333
- package/dist/neural-optimizer/types.d.ts.map +0 -1
- package/dist/neural-optimizer/types.js +0 -57
- package/dist/neural-optimizer/types.js.map +0 -1
- package/dist/neural-optimizer/value-network.d.ts +0 -129
- package/dist/neural-optimizer/value-network.d.ts.map +0 -1
- package/dist/neural-optimizer/value-network.js +0 -279
- package/dist/neural-optimizer/value-network.js.map +0 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Blocking for Browser Automation
|
|
3
|
+
*
|
|
4
|
+
* Inspired by Scrapling's resource filtering patterns.
|
|
5
|
+
* Blocks non-essential resources (images, fonts, tracking) during E2E tests
|
|
6
|
+
* to improve page load speed and reduce flakiness.
|
|
7
|
+
*
|
|
8
|
+
* @module integrations/browser/resource-blocking
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Categories of resources that can be blocked
|
|
12
|
+
*/
|
|
13
|
+
export type ResourceCategory = 'image' | 'font' | 'media' | 'stylesheet' | 'tracking' | 'advertising' | 'websocket';
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for resource blocking
|
|
16
|
+
*/
|
|
17
|
+
export interface ResourceBlockingConfig {
|
|
18
|
+
/** Enable resource blocking */
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
/** Resource categories to block */
|
|
21
|
+
blockedCategories: ResourceCategory[];
|
|
22
|
+
/** URL patterns to always allow (overrides blocked categories) */
|
|
23
|
+
allowPatterns?: string[];
|
|
24
|
+
/** URL patterns to always block (in addition to categories) */
|
|
25
|
+
blockPatterns?: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Preset names for resource blocking configurations
|
|
29
|
+
*/
|
|
30
|
+
export type ResourceBlockingPreset = 'functional' | 'visual' | 'performance';
|
|
31
|
+
/**
|
|
32
|
+
* Determine if a request should be blocked based on URL, resource type, and config.
|
|
33
|
+
*
|
|
34
|
+
* @param url - The request URL
|
|
35
|
+
* @param resourceType - The CDP/Playwright resource type string (e.g., 'image', 'script', 'font')
|
|
36
|
+
* @param config - The resource blocking configuration
|
|
37
|
+
* @returns true if the request should be blocked
|
|
38
|
+
*/
|
|
39
|
+
export declare function shouldBlockRequest(url: string, resourceType: string, config: ResourceBlockingConfig): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Get a resource blocking preset by name.
|
|
42
|
+
*
|
|
43
|
+
* @param name - Preset name or a ResourceBlockingConfig object (passed through)
|
|
44
|
+
* @returns A ResourceBlockingConfig
|
|
45
|
+
*/
|
|
46
|
+
export declare function getResourceBlockingPreset(name: ResourceBlockingPreset | ResourceBlockingConfig): ResourceBlockingConfig;
|
|
47
|
+
//# sourceMappingURL=resource-blocking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-blocking.d.ts","sourceRoot":"","sources":["../../../src/integrations/browser/resource-blocking.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP,MAAM,GACN,OAAO,GACP,YAAY,GACZ,UAAU,GACV,aAAa,GACb,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,CAAC;AAsG7E;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAuCT;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,sBAAsB,GAAG,sBAAsB,GACpD,sBAAsB,CAUxB"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Blocking for Browser Automation
|
|
3
|
+
*
|
|
4
|
+
* Inspired by Scrapling's resource filtering patterns.
|
|
5
|
+
* Blocks non-essential resources (images, fonts, tracking) during E2E tests
|
|
6
|
+
* to improve page load speed and reduce flakiness.
|
|
7
|
+
*
|
|
8
|
+
* @module integrations/browser/resource-blocking
|
|
9
|
+
*/
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Known Tracker / Ad Domains
|
|
12
|
+
// ============================================================================
|
|
13
|
+
const TRACKING_DOMAINS = new Set([
|
|
14
|
+
'google-analytics.com',
|
|
15
|
+
'googletagmanager.com',
|
|
16
|
+
'analytics.google.com',
|
|
17
|
+
'hotjar.com',
|
|
18
|
+
'fullstory.com',
|
|
19
|
+
'segment.io',
|
|
20
|
+
'segment.com',
|
|
21
|
+
'mixpanel.com',
|
|
22
|
+
'heap.io',
|
|
23
|
+
'heapanalytics.com',
|
|
24
|
+
'amplitude.com',
|
|
25
|
+
'mouseflow.com',
|
|
26
|
+
'crazyegg.com',
|
|
27
|
+
'optimizely.com',
|
|
28
|
+
'newrelic.com',
|
|
29
|
+
'nr-data.net',
|
|
30
|
+
'sentry.io',
|
|
31
|
+
'bugsnag.com',
|
|
32
|
+
'logrocket.com',
|
|
33
|
+
'clarity.ms',
|
|
34
|
+
'facebook.net',
|
|
35
|
+
'connect.facebook.net',
|
|
36
|
+
]);
|
|
37
|
+
const ADVERTISING_DOMAINS = new Set([
|
|
38
|
+
'doubleclick.net',
|
|
39
|
+
'googlesyndication.com',
|
|
40
|
+
'googleadservices.com',
|
|
41
|
+
'google-analytics.com',
|
|
42
|
+
'adservice.google.com',
|
|
43
|
+
'pagead2.googlesyndication.com',
|
|
44
|
+
'ads.twitter.com',
|
|
45
|
+
'ads-api.twitter.com',
|
|
46
|
+
'adsserver.com',
|
|
47
|
+
'adnxs.com',
|
|
48
|
+
'amazon-adsystem.com',
|
|
49
|
+
'criteo.com',
|
|
50
|
+
'moatads.com',
|
|
51
|
+
'outbrain.com',
|
|
52
|
+
'taboola.com',
|
|
53
|
+
'bidswitch.net',
|
|
54
|
+
'rubiconproject.com',
|
|
55
|
+
]);
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// Resource Type Mapping
|
|
58
|
+
// ============================================================================
|
|
59
|
+
/**
|
|
60
|
+
* Maps Playwright/CDP resource types to our categories
|
|
61
|
+
*/
|
|
62
|
+
const RESOURCE_TYPE_TO_CATEGORY = {
|
|
63
|
+
image: 'image',
|
|
64
|
+
font: 'font',
|
|
65
|
+
media: 'media',
|
|
66
|
+
stylesheet: 'stylesheet',
|
|
67
|
+
websocket: 'websocket',
|
|
68
|
+
};
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// Presets
|
|
71
|
+
// ============================================================================
|
|
72
|
+
const PRESETS = {
|
|
73
|
+
/**
|
|
74
|
+
* Functional preset: block everything non-essential for functional testing.
|
|
75
|
+
* Fastest page loads — only HTML, JS, and XHR/fetch are allowed.
|
|
76
|
+
*/
|
|
77
|
+
functional: {
|
|
78
|
+
enabled: true,
|
|
79
|
+
blockedCategories: ['image', 'font', 'media', 'stylesheet', 'tracking', 'advertising'],
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Visual preset: block nothing — needed for visual regression testing.
|
|
83
|
+
*/
|
|
84
|
+
visual: {
|
|
85
|
+
enabled: false,
|
|
86
|
+
blockedCategories: [],
|
|
87
|
+
},
|
|
88
|
+
/**
|
|
89
|
+
* Performance preset: block heavy resources and tracking only.
|
|
90
|
+
* Keeps stylesheets for layout accuracy but drops images/fonts/media.
|
|
91
|
+
*/
|
|
92
|
+
performance: {
|
|
93
|
+
enabled: true,
|
|
94
|
+
blockedCategories: ['image', 'font', 'media', 'tracking', 'advertising'],
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
// ============================================================================
|
|
98
|
+
// Core Logic
|
|
99
|
+
// ============================================================================
|
|
100
|
+
/**
|
|
101
|
+
* Determine if a request should be blocked based on URL, resource type, and config.
|
|
102
|
+
*
|
|
103
|
+
* @param url - The request URL
|
|
104
|
+
* @param resourceType - The CDP/Playwright resource type string (e.g., 'image', 'script', 'font')
|
|
105
|
+
* @param config - The resource blocking configuration
|
|
106
|
+
* @returns true if the request should be blocked
|
|
107
|
+
*/
|
|
108
|
+
export function shouldBlockRequest(url, resourceType, config) {
|
|
109
|
+
if (!config.enabled) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
// Check allow patterns first (highest priority)
|
|
113
|
+
if (config.allowPatterns?.length) {
|
|
114
|
+
for (const pattern of config.allowPatterns) {
|
|
115
|
+
if (urlMatchesPattern(url, pattern)) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Check explicit block patterns
|
|
121
|
+
if (config.blockPatterns?.length) {
|
|
122
|
+
for (const pattern of config.blockPatterns) {
|
|
123
|
+
if (urlMatchesPattern(url, pattern)) {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Check resource type against blocked categories
|
|
129
|
+
const category = RESOURCE_TYPE_TO_CATEGORY[resourceType];
|
|
130
|
+
if (category && config.blockedCategories.includes(category)) {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
// Check domain-based categories (tracking & advertising)
|
|
134
|
+
if (config.blockedCategories.includes('tracking') && isDomainInSet(url, TRACKING_DOMAINS)) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
if (config.blockedCategories.includes('advertising') && isDomainInSet(url, ADVERTISING_DOMAINS)) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get a resource blocking preset by name.
|
|
144
|
+
*
|
|
145
|
+
* @param name - Preset name or a ResourceBlockingConfig object (passed through)
|
|
146
|
+
* @returns A ResourceBlockingConfig
|
|
147
|
+
*/
|
|
148
|
+
export function getResourceBlockingPreset(name) {
|
|
149
|
+
if (typeof name === 'object') {
|
|
150
|
+
return name;
|
|
151
|
+
}
|
|
152
|
+
const preset = PRESETS[name];
|
|
153
|
+
if (!preset) {
|
|
154
|
+
return PRESETS.visual; // safe default: block nothing
|
|
155
|
+
}
|
|
156
|
+
// Return a copy to prevent mutation
|
|
157
|
+
return { ...preset, blockedCategories: [...preset.blockedCategories] };
|
|
158
|
+
}
|
|
159
|
+
// ============================================================================
|
|
160
|
+
// Helpers
|
|
161
|
+
// ============================================================================
|
|
162
|
+
/**
|
|
163
|
+
* Cache of compiled glob patterns to avoid RegExp creation on every request
|
|
164
|
+
*/
|
|
165
|
+
const patternCache = new Map();
|
|
166
|
+
/**
|
|
167
|
+
* Check if a URL matches a simple glob pattern (supports * wildcard)
|
|
168
|
+
*/
|
|
169
|
+
function urlMatchesPattern(url, pattern) {
|
|
170
|
+
let regex = patternCache.get(pattern);
|
|
171
|
+
if (!regex) {
|
|
172
|
+
const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*');
|
|
173
|
+
regex = new RegExp(escaped, 'i');
|
|
174
|
+
patternCache.set(pattern, regex);
|
|
175
|
+
}
|
|
176
|
+
return regex.test(url);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Check if a URL's hostname matches any domain in a set
|
|
180
|
+
*/
|
|
181
|
+
function isDomainInSet(url, domains) {
|
|
182
|
+
try {
|
|
183
|
+
const hostname = new URL(url).hostname;
|
|
184
|
+
for (const domain of domains) {
|
|
185
|
+
if (hostname === domain || hostname.endsWith(`.${domain}`)) {
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Invalid URL — don't block
|
|
192
|
+
}
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=resource-blocking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-blocking.js","sourceRoot":"","sources":["../../../src/integrations/browser/resource-blocking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stealth Browser Module
|
|
3
|
+
* @module integrations/browser/stealth
|
|
4
|
+
*/
|
|
5
|
+
export { StealthBrowserClient } from './stealth-client';
|
|
6
|
+
export type { StealthBrowserConfig } from './stealth-types';
|
|
7
|
+
export { DEFAULT_STEALTH_CONFIG } from './stealth-types';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/integrations/browser/stealth/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/integrations/browser/stealth/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stealth Browser Client via Patchright
|
|
3
|
+
*
|
|
4
|
+
* Implements IBrowserClient using Patchright — a drop-in Playwright replacement
|
|
5
|
+
* that avoids CDP detection for bot-protected test environments.
|
|
6
|
+
*
|
|
7
|
+
* Uses lazy require pattern (like ruvector wrappers) so the module works
|
|
8
|
+
* even if patchright is not installed.
|
|
9
|
+
*
|
|
10
|
+
* @module integrations/browser/stealth/stealth-client
|
|
11
|
+
*/
|
|
12
|
+
import type { IBrowserClient, BrowserLaunchOptions, BrowserSessionInfo, BrowserNavigateResult, BrowserScreenshotResult, ElementTarget } from '../types';
|
|
13
|
+
import { BrowserError } from '../types';
|
|
14
|
+
import type { Result } from '../../../shared/types';
|
|
15
|
+
import type { StealthBrowserConfig } from './stealth-types';
|
|
16
|
+
/**
|
|
17
|
+
* Stealth browser client using Patchright for bot-protected environments.
|
|
18
|
+
* Implements IBrowserClient with `tool = 'stealth'`.
|
|
19
|
+
*/
|
|
20
|
+
export declare class StealthBrowserClient implements IBrowserClient {
|
|
21
|
+
readonly tool: "stealth";
|
|
22
|
+
private readonly stealthConfig;
|
|
23
|
+
private page;
|
|
24
|
+
private context;
|
|
25
|
+
private browser;
|
|
26
|
+
private sessionId;
|
|
27
|
+
constructor(config?: Partial<StealthBrowserConfig>);
|
|
28
|
+
isAvailable(): Promise<boolean>;
|
|
29
|
+
launch(options?: BrowserLaunchOptions): Promise<Result<BrowserSessionInfo, BrowserError>>;
|
|
30
|
+
quit(): Promise<Result<void, BrowserError>>;
|
|
31
|
+
navigate(url: string): Promise<Result<BrowserNavigateResult, BrowserError>>;
|
|
32
|
+
reload(): Promise<Result<void, BrowserError>>;
|
|
33
|
+
goBack(): Promise<Result<void, BrowserError>>;
|
|
34
|
+
goForward(): Promise<Result<void, BrowserError>>;
|
|
35
|
+
click(target: ElementTarget | string): Promise<Result<void, BrowserError>>;
|
|
36
|
+
fill(target: ElementTarget | string, text: string): Promise<Result<void, BrowserError>>;
|
|
37
|
+
getText(target: ElementTarget | string): Promise<Result<string, BrowserError>>;
|
|
38
|
+
isVisible(target: ElementTarget | string): Promise<Result<boolean, BrowserError>>;
|
|
39
|
+
screenshot(options?: {
|
|
40
|
+
path?: string;
|
|
41
|
+
fullPage?: boolean;
|
|
42
|
+
}): Promise<Result<BrowserScreenshotResult, BrowserError>>;
|
|
43
|
+
evaluate<T = unknown>(script: string): Promise<Result<T, BrowserError>>;
|
|
44
|
+
dispose(): Promise<void>;
|
|
45
|
+
private resolveSelector;
|
|
46
|
+
private applyResourceBlocking;
|
|
47
|
+
private waitForCloudflare;
|
|
48
|
+
private notLaunched;
|
|
49
|
+
private wrapError;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=stealth-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stealth-client.d.ts","sourceRoot":"","sources":["../../../../src/integrations/browser/stealth/stealth-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAA2B,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AA2E5D;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAEnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAQ5C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,MAAM,CACV,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAoE9C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IA8B3C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;IA8B3E,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAU7C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAU7C,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAchD,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAW1E,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAWvF,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAW9E,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAejF,UAAU,CACd,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,YAAY,CAAC,CAAC;IA2BnD,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAcvE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,OAAO,CAAC,eAAe;YAgBT,qBAAqB;YAsBrB,iBAAiB;IAoB/B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,SAAS;CAWlB"}
|