@showrun/core 0.1.10 → 0.2.0-rc.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AAElE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAczC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAqR5B"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AAElE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAYzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;QACL,IAAI,EAAE,IAAI,CAAC;QACX,OAAO,EAAE,OAAO,YAAY,EAAE,cAAc,CAAC;QAC7C,KAAK,EAAE,OAAO,YAAY,EAAE,KAAK,CAAC;QAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAChC,GAAG,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;aACrC,CAAC;SACH,CAAC;QACF,IAAI,EAAE,OAAO,iBAAiB,EAAE,gBAAgB,CAAC;KAClD,EACD,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACzE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAiV5B"}
package/dist/runner.js CHANGED
@@ -6,6 +6,7 @@ import { isFlowHttpCompatible } from './httpReplay.js';
6
6
  import { resolveProxy } from './proxy/proxyService.js';
7
7
  import { createReplayTransport } from './transport/index.js';
8
8
  import { writeSnapshots, extractTopLevelKeys, detectSensitiveHeaders, } from './requestSnapshot.js';
9
+ import { createPlaywrightJsUtil } from './util/index.js';
9
10
  /**
10
11
  * Runs a task pack with Playwright
11
12
  * This is a reusable function that can be used by both CLI and MCP server
@@ -38,9 +39,11 @@ export async function runTaskPack(taskPack, inputs, options) {
38
39
  if (taskPack.browser?.proxy?.enabled && !resolvedProxy) {
39
40
  console.log('[runner] Proxy enabled in pack but credentials not configured, running without proxy');
40
41
  }
41
- // ─── HTTP-first execution ───────────────────────────────────────────
42
+ // ─── playwright-js packs always need a browser ─────────────────────
43
+ const isPlaywrightJs = taskPack.kind === 'playwright-js';
44
+ // ─── HTTP-first execution (json-dsl only) ─────────────────────────
42
45
  const snapshots = taskPack.snapshots ?? null;
43
- if (!options.skipHttpReplay && isFlowHttpCompatible(taskPack.flow, snapshots)) {
46
+ if (!isPlaywrightJs && !options.skipHttpReplay && isFlowHttpCompatible(taskPack.flow, snapshots)) {
44
47
  logger.log({
45
48
  type: 'run_started',
46
49
  data: {
@@ -67,7 +70,7 @@ export async function runTaskPack(taskPack, inputs, options) {
67
70
  let runContext = null;
68
71
  try {
69
72
  // Log run start (only if not already logged above)
70
- if (options.skipHttpReplay || !isFlowHttpCompatible(taskPack.flow, snapshots)) {
73
+ if (isPlaywrightJs || options.skipHttpReplay || !isFlowHttpCompatible(taskPack.flow, snapshots)) {
71
74
  logger.log({
72
75
  type: 'run_started',
73
76
  data: {
@@ -103,44 +106,92 @@ export async function runTaskPack(taskPack, inputs, options) {
103
106
  version: () => 'unknown',
104
107
  };
105
108
  runContext = RunContextFactory.create(page, browserProxy, logger, artifactsDir, networkCapture);
106
- // Execute declarative DSL flow
107
- const flowResult = await runFlow(runContext, taskPack.flow, {
108
- inputs: inputsWithDefaults,
109
- auth: taskPack.auth,
110
- sessionId: options.sessionId,
111
- profileId: options.profileId,
112
- cacheDir: options.cacheDir,
113
- secrets,
114
- });
115
- // Filter collectibles to only include those defined in the pack
116
- // This prevents intermediate variables from polluting the output
117
- const definedCollectibleNames = new Set((taskPack.collectibles || []).map(c => c.name));
118
- const filteredCollectibles = {};
119
- for (const [key, value] of Object.entries(flowResult.collectibles)) {
120
- if (definedCollectibleNames.has(key)) {
121
- filteredCollectibles[key] = value;
109
+ let result;
110
+ if (isPlaywrightJs) {
111
+ // ─── playwright-js execution ────────────────────────────────────
112
+ if (!taskPack.playwrightJsSource) {
113
+ throw new Error('playwright-js pack is missing playwrightJsSource');
114
+ }
115
+ if (!options.playwrightJsExecutor) {
116
+ throw new Error('playwright-js packs require a playwrightJsExecutor option');
117
+ }
118
+ const jsStartTime = Date.now();
119
+ const jsResult = await options.playwrightJsExecutor(taskPack.playwrightJsSource, {
120
+ page,
121
+ context: browserSession.context,
122
+ frame: page.mainFrame(),
123
+ inputs: inputsWithDefaults,
124
+ secrets,
125
+ showrun: {
126
+ network: {
127
+ list: networkCapture.list.bind(networkCapture),
128
+ find: networkCapture.find.bind(networkCapture),
129
+ get: networkCapture.get.bind(networkCapture),
130
+ replay: networkCapture.replay.bind(networkCapture),
131
+ },
132
+ },
133
+ util: createPlaywrightJsUtil(page),
134
+ });
135
+ const returnValue = jsResult.collectibles;
136
+ // Filter collectibles to only include those defined in the pack
137
+ const definedCollectibleNames = new Set((taskPack.collectibles || []).map(c => c.name));
138
+ const filteredCollectibles = {};
139
+ for (const [key, value] of Object.entries(returnValue)) {
140
+ if (definedCollectibleNames.has(key)) {
141
+ filteredCollectibles[key] = value;
142
+ }
143
+ }
144
+ result = {
145
+ collectibles: filteredCollectibles,
146
+ meta: {
147
+ url: page.url(),
148
+ durationMs: Date.now() - jsStartTime,
149
+ notes: 'Executed playwright-js flow',
150
+ },
151
+ };
152
+ // Surface captured console logs
153
+ if (jsResult.logs && jsResult.logs.length > 0) {
154
+ result._logs = jsResult.logs;
122
155
  }
123
156
  }
124
- // Convert RunFlowResult to RunResult format
125
- const result = {
126
- collectibles: filteredCollectibles,
127
- meta: {
128
- url: flowResult.meta.url,
129
- durationMs: flowResult.meta.durationMs,
130
- notes: `Executed ${flowResult.meta.stepsExecuted}/${flowResult.meta.stepsTotal} steps`,
131
- },
132
- };
133
- // Propagate diagnostic hints if present
134
- if (flowResult._hints && flowResult._hints.length > 0) {
135
- result._hints = flowResult._hints;
136
- }
137
- // Capture snapshots for network_replay steps after successful browser run
138
- if (packPath && networkCapture) {
139
- try {
140
- captureSnapshots(taskPack, flowResult, networkCapture, packPath);
157
+ else {
158
+ // ─── json-dsl execution ─────────────────────────────────────────
159
+ const flowResult = await runFlow(runContext, taskPack.flow, {
160
+ inputs: inputsWithDefaults,
161
+ auth: taskPack.auth,
162
+ sessionId: options.sessionId,
163
+ profileId: options.profileId,
164
+ cacheDir: options.cacheDir,
165
+ secrets,
166
+ });
167
+ // Filter collectibles to only include those defined in the pack
168
+ const definedCollectibleNames = new Set((taskPack.collectibles || []).map(c => c.name));
169
+ const filteredCollectibles = {};
170
+ for (const [key, value] of Object.entries(flowResult.collectibles)) {
171
+ if (definedCollectibleNames.has(key)) {
172
+ filteredCollectibles[key] = value;
173
+ }
174
+ }
175
+ result = {
176
+ collectibles: filteredCollectibles,
177
+ meta: {
178
+ url: flowResult.meta.url,
179
+ durationMs: flowResult.meta.durationMs,
180
+ notes: `Executed ${flowResult.meta.stepsExecuted}/${flowResult.meta.stepsTotal} steps`,
181
+ },
182
+ };
183
+ // Propagate diagnostic hints if present
184
+ if (flowResult._hints && flowResult._hints.length > 0) {
185
+ result._hints = flowResult._hints;
141
186
  }
142
- catch (snapErr) {
143
- console.warn(`[runner] Failed to capture snapshots: ${snapErr instanceof Error ? snapErr.message : String(snapErr)}`);
187
+ // Capture snapshots for network_replay steps after successful browser run
188
+ if (packPath && networkCapture) {
189
+ try {
190
+ captureSnapshots(taskPack, flowResult, networkCapture, packPath);
191
+ }
192
+ catch (snapErr) {
193
+ console.warn(`[runner] Failed to capture snapshots: ${snapErr instanceof Error ? snapErr.message : String(snapErr)}`);
194
+ }
144
195
  }
145
196
  }
146
197
  const durationMs = Date.now() - startTime;
package/dist/types.d.ts CHANGED
@@ -84,6 +84,11 @@ export interface TaskPackMetadata {
84
84
  name: string;
85
85
  version: string;
86
86
  description?: string;
87
+ /**
88
+ * Execution timeout in milliseconds (default: 300000 = 5 minutes)
89
+ * Can be overridden by CLI --timeout flag
90
+ */
91
+ timeoutMs?: number;
87
92
  }
88
93
  /**
89
94
  * Task Pack manifest (taskpack.json)
@@ -94,9 +99,9 @@ export interface TaskPackMetadata {
94
99
  */
95
100
  export interface TaskPackManifest extends TaskPackMetadata {
96
101
  /**
97
- * Pack kind: must be "json-dsl"
102
+ * Pack kind
98
103
  */
99
- kind: 'json-dsl';
104
+ kind: 'json-dsl' | 'playwright-js';
100
105
  /**
101
106
  * Auth configuration for resilience and recovery
102
107
  */
@@ -109,6 +114,14 @@ export interface TaskPackManifest extends TaskPackMetadata {
109
114
  * Browser configuration
110
115
  */
111
116
  browser?: BrowserSettings;
117
+ /**
118
+ * Input schema (used by playwright-js packs where inputs are declared in taskpack.json)
119
+ */
120
+ inputs?: InputSchema;
121
+ /**
122
+ * Collectible definitions (used by playwright-js packs where collectibles are declared in taskpack.json)
123
+ */
124
+ collectibles?: CollectibleDefinition[];
112
125
  }
113
126
  /**
114
127
  * Run context provided to task pack execution
@@ -136,6 +149,10 @@ export interface RunResult {
136
149
  * These help AI agents understand why data extraction may have failed.
137
150
  */
138
151
  _hints?: string[];
152
+ /**
153
+ * Captured console.log output from playwright-js flows.
154
+ */
155
+ _logs?: string[];
139
156
  }
140
157
  /**
141
158
  * Logger interface for structured logging
@@ -314,10 +331,18 @@ export interface TaskPack {
314
331
  metadata: TaskPackMetadata;
315
332
  inputs: InputSchema;
316
333
  collectibles: CollectibleDefinition[];
334
+ /**
335
+ * Pack kind (default: 'json-dsl')
336
+ */
337
+ kind?: 'json-dsl' | 'playwright-js';
317
338
  /**
318
339
  * Declarative flow of DSL steps
319
340
  */
320
341
  flow: DslStep[];
342
+ /**
343
+ * Raw Playwright JS source code (for playwright-js packs)
344
+ */
345
+ playwrightJsSource?: string;
321
346
  /**
322
347
  * Auth configuration for resilience and recovery
323
348
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Utility functions exposed to playwright-js flows via context.util
3
+ *
4
+ * These utilities help with common automation challenges like
5
+ * CAPTCHA solving, waiting for specific conditions, etc.
6
+ */
7
+ import type { Page } from 'playwright';
8
+ import { detectCloudflareTurnstile, solveCloudflareTurnstile, type TurnstileDetectionResult, type TurnstileSolveResult } from './turnstile.js';
9
+ export { detectCloudflareTurnstile, solveCloudflareTurnstile };
10
+ export type { TurnstileDetectionResult, TurnstileSolveResult };
11
+ /**
12
+ * Utility object available in playwright-js flows as `util`
13
+ */
14
+ export interface PlaywrightJsUtil {
15
+ /**
16
+ * Detect Cloudflare Turnstile checkbox position on the page.
17
+ *
18
+ * Uses image-based detection since Turnstile uses shadow-DOM
19
+ * which blocks direct element inspection.
20
+ *
21
+ * @example
22
+ * ```javascript
23
+ * const result = await util.detectCloudflareTurnstile();
24
+ * if (result.found) {
25
+ * console.log(`Turnstile at (${result.x}, ${result.y})`);
26
+ * }
27
+ * ```
28
+ */
29
+ detectCloudflareTurnstile: (options?: {
30
+ scale?: number;
31
+ }) => Promise<TurnstileDetectionResult>;
32
+ /**
33
+ * Detect and solve Cloudflare Turnstile by clicking the checkbox.
34
+ *
35
+ * This function detects the widget, clicks the checkbox, and waits
36
+ * for verification. Automatically retries if detection fails.
37
+ *
38
+ * @example
39
+ * ```javascript
40
+ * const result = await util.solveCloudflareTurnstile();
41
+ * if (result.success) {
42
+ * console.log('Turnstile solved!');
43
+ * } else {
44
+ * console.log('Failed:', result.error);
45
+ * }
46
+ * ```
47
+ */
48
+ solveCloudflareTurnstile: (options?: {
49
+ /** Scale factor for HiDPI displays (default: 1) */
50
+ scale?: number;
51
+ /** Time to wait after clicking (default: 2000ms) */
52
+ waitAfterClick?: number;
53
+ /** Number of retry attempts (default: 3) */
54
+ retries?: number;
55
+ /** Delay between retries (default: 1000ms) */
56
+ retryDelay?: number;
57
+ }) => Promise<TurnstileSolveResult>;
58
+ }
59
+ /**
60
+ * Create the util object for a playwright-js execution context.
61
+ *
62
+ * @param page - Playwright Page object to bind utilities to
63
+ * @returns Utility object with bound methods
64
+ */
65
+ export declare function createPlaywrightJsUtil(page: Page): PlaywrightJsUtil;
66
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;;;;;OAaG;IACH,yBAAyB,EAAE,CAAC,OAAO,CAAC,EAAE;QACpC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAExC;;;;;;;;;;;;;;;OAeG;IACH,wBAAwB,EAAE,CAAC,OAAO,CAAC,EAAE;QACnC,mDAAmD;QACnD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,oDAAoD;QACpD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,4CAA4C;QAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,8CAA8C;QAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,CAKnE"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Utility functions exposed to playwright-js flows via context.util
3
+ *
4
+ * These utilities help with common automation challenges like
5
+ * CAPTCHA solving, waiting for specific conditions, etc.
6
+ */
7
+ import { detectCloudflareTurnstile, solveCloudflareTurnstile, } from './turnstile.js';
8
+ // Re-export for direct usage
9
+ export { detectCloudflareTurnstile, solveCloudflareTurnstile };
10
+ /**
11
+ * Create the util object for a playwright-js execution context.
12
+ *
13
+ * @param page - Playwright Page object to bind utilities to
14
+ * @returns Utility object with bound methods
15
+ */
16
+ export function createPlaywrightJsUtil(page) {
17
+ return {
18
+ detectCloudflareTurnstile: (options) => detectCloudflareTurnstile(page, options),
19
+ solveCloudflareTurnstile: (options) => solveCloudflareTurnstile(page, options),
20
+ };
21
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Cloudflare Turnstile detection and solving utilities.
3
+ *
4
+ * Turnstile is Cloudflare's CAPTCHA alternative. This module provides
5
+ * image-based detection of the Turnstile widget checkbox position,
6
+ * useful when shadow-DOM inspection is blocked.
7
+ *
8
+ * Strategy:
9
+ * 1. Screenshot the page
10
+ * 2. Detect the widget by its characteristic light/dark gray background
11
+ * 3. Find the checkbox at a fixed offset from the widget's left edge
12
+ * 4. Click the detected position
13
+ */
14
+ import type { Page } from 'playwright';
15
+ export interface TurnstileDetectionResult {
16
+ found: boolean;
17
+ /** Checkbox center X coordinate (page pixels) */
18
+ x?: number;
19
+ /** Checkbox center Y coordinate (page pixels) */
20
+ y?: number;
21
+ /** Detected widget bounds */
22
+ widget?: {
23
+ x: number;
24
+ y: number;
25
+ width: number;
26
+ height: number;
27
+ };
28
+ /** Detected theme: 'light' or 'dark' */
29
+ theme?: 'light' | 'dark';
30
+ /** Error message if detection failed */
31
+ error?: string;
32
+ }
33
+ export interface TurnstileSolveResult {
34
+ success: boolean;
35
+ /** Whether Turnstile was detected */
36
+ detected: boolean;
37
+ /** Checkbox position that was clicked */
38
+ clickedAt?: {
39
+ x: number;
40
+ y: number;
41
+ };
42
+ /** Error message if solving failed */
43
+ error?: string;
44
+ }
45
+ /**
46
+ * Detect Cloudflare Turnstile checkbox position on the page.
47
+ *
48
+ * Uses image-based detection since Turnstile uses shadow-DOM
49
+ * which blocks direct element inspection.
50
+ *
51
+ * @param page - Playwright Page object
52
+ * @param options - Detection options
53
+ * @returns Detection result with checkbox coordinates
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const result = await detectCloudflareTurnstile(page);
58
+ * if (result.found) {
59
+ * await page.mouse.click(result.x, result.y);
60
+ * }
61
+ * ```
62
+ */
63
+ export declare function detectCloudflareTurnstile(page: Page, options?: {
64
+ scale?: number;
65
+ }): Promise<TurnstileDetectionResult>;
66
+ /**
67
+ * Detect and solve Cloudflare Turnstile by clicking the checkbox.
68
+ *
69
+ * This function:
70
+ * 1. Detects the Turnstile widget using image analysis
71
+ * 2. Clicks the checkbox
72
+ * 3. Waits briefly for the verification to process
73
+ *
74
+ * @param page - Playwright Page object
75
+ * @param options - Solve options
76
+ * @returns Solve result indicating success/failure
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const result = await solveCloudflareTurnstile(page);
81
+ * if (result.success) {
82
+ * console.log('Turnstile solved!');
83
+ * } else {
84
+ * console.log('Failed:', result.error);
85
+ * }
86
+ * ```
87
+ */
88
+ export declare function solveCloudflareTurnstile(page: Page, options?: {
89
+ /** Scale factor for HiDPI displays (default: 1) */
90
+ scale?: number;
91
+ /** Time to wait after clicking (default: 2000ms) */
92
+ waitAfterClick?: number;
93
+ /** Number of retry attempts (default: 3) */
94
+ retries?: number;
95
+ /** Delay between retries (default: 1000ms) */
96
+ retryDelay?: number;
97
+ }): Promise<TurnstileSolveResult>;
98
+ /**
99
+ * Utility object exposed to playwright-js flows via context.util
100
+ */
101
+ export declare const turnstileUtil: {
102
+ detectCloudflareTurnstile: typeof detectCloudflareTurnstile;
103
+ solveCloudflareTurnstile: typeof solveCloudflareTurnstile;
104
+ };
105
+ //# sourceMappingURL=turnstile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnstile.d.ts","sourceRoot":"","sources":["../../src/util/turnstile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,6BAA6B;IAC7B,MAAM,CAAC,EAAE;QACP,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,SAAS,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuID;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CAsCnC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;IACP,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GACL,OAAO,CAAC,oBAAoB,CAAC,CAwD/B;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;CAGzB,CAAC"}