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.
Files changed (138) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +38 -0
  3. package/dist/cli/bundle.js +6220 -1373
  4. package/dist/cli/commands/security.d.ts.map +1 -1
  5. package/dist/cli/commands/security.js +66 -1
  6. package/dist/cli/commands/security.js.map +1 -1
  7. package/dist/cli/commands/test.d.ts.map +1 -1
  8. package/dist/cli/commands/test.js +86 -3
  9. package/dist/cli/commands/test.js.map +1 -1
  10. package/dist/cli/index.js +119 -0
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/coordination/workflow-orchestrator.d.ts.map +1 -1
  13. package/dist/coordination/workflow-orchestrator.js +2 -6
  14. package/dist/coordination/workflow-orchestrator.js.map +1 -1
  15. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.d.ts +71 -0
  16. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.d.ts.map +1 -0
  17. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.js +456 -0
  18. package/dist/domains/test-execution/services/e2e/adaptive-locator-service.js.map +1 -0
  19. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.d.ts +81 -0
  20. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.d.ts.map +1 -0
  21. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.js +20 -0
  22. package/dist/domains/test-execution/services/e2e/adaptive-locator-types.js.map +1 -0
  23. package/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts +19 -0
  24. package/dist/domains/test-execution/services/e2e/browser-orchestrator.d.ts.map +1 -1
  25. package/dist/domains/test-execution/services/e2e/browser-orchestrator.js +82 -0
  26. package/dist/domains/test-execution/services/e2e/browser-orchestrator.js.map +1 -1
  27. package/dist/domains/test-execution/services/e2e/index.d.ts +2 -0
  28. package/dist/domains/test-execution/services/e2e/index.d.ts.map +1 -1
  29. package/dist/domains/test-execution/services/e2e/index.js +5 -0
  30. package/dist/domains/test-execution/services/e2e/index.js.map +1 -1
  31. package/dist/domains/test-execution/services/e2e/step-executors.d.ts +6 -0
  32. package/dist/domains/test-execution/services/e2e/step-executors.d.ts.map +1 -1
  33. package/dist/domains/test-execution/services/e2e/step-executors.js +17 -2
  34. package/dist/domains/test-execution/services/e2e/step-executors.js.map +1 -1
  35. package/dist/domains/test-execution/services/e2e/types.d.ts +18 -1
  36. package/dist/domains/test-execution/services/e2e/types.d.ts.map +1 -1
  37. package/dist/domains/test-execution/services/e2e/types.js.map +1 -1
  38. package/dist/integrations/browser/client-factory.d.ts +6 -1
  39. package/dist/integrations/browser/client-factory.d.ts.map +1 -1
  40. package/dist/integrations/browser/client-factory.js +37 -2
  41. package/dist/integrations/browser/client-factory.js.map +1 -1
  42. package/dist/integrations/browser/index.d.ts +5 -1
  43. package/dist/integrations/browser/index.d.ts.map +1 -1
  44. package/dist/integrations/browser/index.js +8 -1
  45. package/dist/integrations/browser/index.js.map +1 -1
  46. package/dist/integrations/browser/page-pool-types.d.ts +70 -0
  47. package/dist/integrations/browser/page-pool-types.d.ts.map +1 -0
  48. package/dist/integrations/browser/page-pool-types.js +19 -0
  49. package/dist/integrations/browser/page-pool-types.js.map +1 -0
  50. package/dist/integrations/browser/page-pool.d.ts +79 -0
  51. package/dist/integrations/browser/page-pool.d.ts.map +1 -0
  52. package/dist/integrations/browser/page-pool.js +288 -0
  53. package/dist/integrations/browser/page-pool.js.map +1 -0
  54. package/dist/integrations/browser/resource-blocking.d.ts +47 -0
  55. package/dist/integrations/browser/resource-blocking.d.ts.map +1 -0
  56. package/dist/integrations/browser/resource-blocking.js +195 -0
  57. package/dist/integrations/browser/resource-blocking.js.map +1 -0
  58. package/dist/integrations/browser/stealth/index.d.ts +8 -0
  59. package/dist/integrations/browser/stealth/index.d.ts.map +1 -0
  60. package/dist/integrations/browser/stealth/index.js +7 -0
  61. package/dist/integrations/browser/stealth/index.js.map +1 -0
  62. package/dist/integrations/browser/stealth/stealth-client.d.ts +51 -0
  63. package/dist/integrations/browser/stealth/stealth-client.d.ts.map +1 -0
  64. package/dist/integrations/browser/stealth/stealth-client.js +359 -0
  65. package/dist/integrations/browser/stealth/stealth-client.js.map +1 -0
  66. package/dist/integrations/browser/stealth/stealth-types.d.ts +35 -0
  67. package/dist/integrations/browser/stealth/stealth-types.d.ts.map +1 -0
  68. package/dist/integrations/browser/stealth/stealth-types.js +17 -0
  69. package/dist/integrations/browser/stealth/stealth-types.js.map +1 -0
  70. package/dist/integrations/browser/types.d.ts +13 -10
  71. package/dist/integrations/browser/types.d.ts.map +1 -1
  72. package/dist/integrations/browser/types.js.map +1 -1
  73. package/dist/mcp/bundle.js +5090 -222
  74. package/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
  75. package/dist/mcp/handlers/core-handlers.js +35 -0
  76. package/dist/mcp/handlers/core-handlers.js.map +1 -1
  77. package/dist/mcp/protocol-server.d.ts.map +1 -1
  78. package/dist/mcp/protocol-server.js +4 -1
  79. package/dist/mcp/protocol-server.js.map +1 -1
  80. package/dist/mcp/qe-tool-bridge.d.ts +27 -0
  81. package/dist/mcp/qe-tool-bridge.d.ts.map +1 -0
  82. package/dist/mcp/qe-tool-bridge.js +87 -0
  83. package/dist/mcp/qe-tool-bridge.js.map +1 -0
  84. package/dist/mcp/tools/registry.d.ts +4 -0
  85. package/dist/mcp/tools/registry.d.ts.map +1 -1
  86. package/dist/mcp/tools/registry.js +20 -0
  87. package/dist/mcp/tools/registry.js.map +1 -1
  88. package/dist/mcp/tools/security-compliance/visual-security.d.ts +45 -0
  89. package/dist/mcp/tools/security-compliance/visual-security.d.ts.map +1 -0
  90. package/dist/mcp/tools/security-compliance/visual-security.js +218 -0
  91. package/dist/mcp/tools/security-compliance/visual-security.js.map +1 -0
  92. package/dist/mcp/tools/test-execution/browser-workflow.d.ts +50 -0
  93. package/dist/mcp/tools/test-execution/browser-workflow.d.ts.map +1 -0
  94. package/dist/mcp/tools/test-execution/browser-workflow.js +145 -0
  95. package/dist/mcp/tools/test-execution/browser-workflow.js.map +1 -0
  96. package/dist/mcp/tools/test-execution/load-test.d.ts +37 -0
  97. package/dist/mcp/tools/test-execution/load-test.d.ts.map +1 -0
  98. package/dist/mcp/tools/test-execution/load-test.js +98 -0
  99. package/dist/mcp/tools/test-execution/load-test.js.map +1 -0
  100. package/dist/mcp/tools/test-execution/schedule.d.ts +44 -0
  101. package/dist/mcp/tools/test-execution/schedule.d.ts.map +1 -0
  102. package/dist/mcp/tools/test-execution/schedule.js +96 -0
  103. package/dist/mcp/tools/test-execution/schedule.js.map +1 -0
  104. package/dist/planning/goap-planner.d.ts.map +1 -1
  105. package/dist/planning/goap-planner.js +7 -28
  106. package/dist/planning/goap-planner.js.map +1 -1
  107. package/dist/planning/plan-executor.d.ts.map +1 -1
  108. package/dist/planning/plan-executor.js +7 -28
  109. package/dist/planning/plan-executor.js.map +1 -1
  110. package/package.json +3 -10
  111. package/dist/cli/commands/qe-tools.d.ts +0 -27
  112. package/dist/cli/commands/qe-tools.d.ts.map +0 -1
  113. package/dist/cli/commands/qe-tools.js +0 -771
  114. package/dist/cli/commands/qe-tools.js.map +0 -1
  115. package/dist/neural-optimizer/index.d.ts +0 -55
  116. package/dist/neural-optimizer/index.d.ts.map +0 -1
  117. package/dist/neural-optimizer/index.js +0 -57
  118. package/dist/neural-optimizer/index.js.map +0 -1
  119. package/dist/neural-optimizer/replay-buffer.d.ts +0 -126
  120. package/dist/neural-optimizer/replay-buffer.d.ts.map +0 -1
  121. package/dist/neural-optimizer/replay-buffer.js +0 -356
  122. package/dist/neural-optimizer/replay-buffer.js.map +0 -1
  123. package/dist/neural-optimizer/swarm-topology.d.ts +0 -157
  124. package/dist/neural-optimizer/swarm-topology.d.ts.map +0 -1
  125. package/dist/neural-optimizer/swarm-topology.js +0 -384
  126. package/dist/neural-optimizer/swarm-topology.js.map +0 -1
  127. package/dist/neural-optimizer/topology-optimizer.d.ts +0 -137
  128. package/dist/neural-optimizer/topology-optimizer.d.ts.map +0 -1
  129. package/dist/neural-optimizer/topology-optimizer.js +0 -657
  130. package/dist/neural-optimizer/topology-optimizer.js.map +0 -1
  131. package/dist/neural-optimizer/types.d.ts +0 -333
  132. package/dist/neural-optimizer/types.d.ts.map +0 -1
  133. package/dist/neural-optimizer/types.js +0 -57
  134. package/dist/neural-optimizer/types.js.map +0 -1
  135. package/dist/neural-optimizer/value-network.d.ts +0 -129
  136. package/dist/neural-optimizer/value-network.d.ts.map +0 -1
  137. package/dist/neural-optimizer/value-network.js +0 -279
  138. 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,7 @@
1
+ /**
2
+ * Stealth Browser Module
3
+ * @module integrations/browser/stealth
4
+ */
5
+ export { StealthBrowserClient } from './stealth-client';
6
+ export { DEFAULT_STEALTH_CONFIG } from './stealth-types';
7
+ //# sourceMappingURL=index.js.map
@@ -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"}