@hanivanrizky/nestjs-browser-action 0.21.0 → 0.22.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.
Files changed (73) hide show
  1. package/README.md +72 -31
  2. package/dist/browser-action.module-definition.d.ts +1 -0
  3. package/dist/browser-action.module.d.ts +3 -0
  4. package/dist/browser-action.module.js +146 -27
  5. package/dist/browser-action.module.js.map +1 -1
  6. package/dist/common/index.d.ts +1 -0
  7. package/dist/common/index.js +18 -0
  8. package/dist/common/index.js.map +1 -0
  9. package/dist/common/tokens.d.ts +7 -0
  10. package/dist/common/tokens.js +36 -0
  11. package/dist/common/tokens.js.map +1 -0
  12. package/dist/decorators/index.d.ts +1 -0
  13. package/dist/decorators/index.js +1 -0
  14. package/dist/decorators/index.js.map +1 -1
  15. package/dist/decorators/inject-browser.decorator.d.ts +2 -1
  16. package/dist/decorators/inject-browser.decorator.js +2 -1
  17. package/dist/decorators/inject-browser.decorator.js.map +1 -1
  18. package/dist/decorators/inject-page-controller.decorator.d.ts +2 -0
  19. package/dist/decorators/inject-page-controller.decorator.js +8 -0
  20. package/dist/decorators/inject-page-controller.decorator.js.map +1 -0
  21. package/dist/decorators/inject-page.decorator.d.ts +2 -1
  22. package/dist/decorators/inject-page.decorator.js +2 -1
  23. package/dist/decorators/inject-page.decorator.js.map +1 -1
  24. package/dist/examples/named-browser-example.d.ts +1 -0
  25. package/dist/examples/named-browser-example.js +183 -0
  26. package/dist/examples/named-browser-example.js.map +1 -0
  27. package/dist/index.d.ts +5 -0
  28. package/dist/index.js +5 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/interfaces/browser-action-options.d.ts +1 -0
  31. package/dist/operators/capture.operator.d.ts +11 -0
  32. package/dist/operators/capture.operator.js +62 -0
  33. package/dist/operators/capture.operator.js.map +1 -0
  34. package/dist/operators/container.operator.d.ts +13 -0
  35. package/dist/operators/container.operator.js +149 -0
  36. package/dist/operators/container.operator.js.map +1 -0
  37. package/dist/operators/extraction.operator.d.ts +22 -0
  38. package/dist/operators/extraction.operator.js +204 -0
  39. package/dist/operators/extraction.operator.js.map +1 -0
  40. package/dist/operators/index.d.ts +5 -0
  41. package/dist/operators/index.js +14 -0
  42. package/dist/operators/index.js.map +1 -0
  43. package/dist/operators/pagination.operator.d.ts +24 -0
  44. package/dist/operators/pagination.operator.js +182 -0
  45. package/dist/operators/pagination.operator.js.map +1 -0
  46. package/dist/operators/workflow.operator.d.ts +35 -0
  47. package/dist/operators/workflow.operator.js +501 -0
  48. package/dist/operators/workflow.operator.js.map +1 -0
  49. package/dist/services/browser-action.service.d.ts +6 -29
  50. package/dist/services/browser-action.service.js +28 -968
  51. package/dist/services/browser-action.service.js.map +1 -1
  52. package/dist/services/browser-holder.d.ts +7 -0
  53. package/dist/services/browser-holder.js +26 -0
  54. package/dist/services/browser-holder.js.map +1 -0
  55. package/dist/services/browser-manager.service.js.map +1 -1
  56. package/dist/services/browser-pool.service.d.ts +0 -4
  57. package/dist/services/browser-pool.service.js +12 -103
  58. package/dist/services/browser-pool.service.js.map +1 -1
  59. package/dist/services/named-browser-shutdown.d.ts +9 -0
  60. package/dist/services/named-browser-shutdown.js +47 -0
  61. package/dist/services/named-browser-shutdown.js.map +1 -0
  62. package/dist/services/page-controller.d.ts +39 -0
  63. package/dist/services/page-controller.js +325 -0
  64. package/dist/services/page-controller.js.map +1 -0
  65. package/dist/services/page-session.d.ts +26 -0
  66. package/dist/services/page-session.js +135 -0
  67. package/dist/services/page-session.js.map +1 -0
  68. package/dist/services/page.service.js.map +1 -1
  69. package/dist/tsconfig.build.tsbuildinfo +1 -1
  70. package/dist/utils/browser-launcher.d.ts +6 -0
  71. package/dist/utils/browser-launcher.js +100 -0
  72. package/dist/utils/browser-launcher.js.map +1 -0
  73. package/package.json +2 -2
@@ -0,0 +1,501 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowOperator = void 0;
4
+ const class_validator_1 = require("class-validator");
5
+ const delay_util_1 = require("../utils/delay.util");
6
+ const truncate_log_util_1 = require("../utils/truncate-log.util");
7
+ const browser_action_constants_1 = require("../constants/browser-action.constants");
8
+ class WorkflowOperator {
9
+ extraction;
10
+ container;
11
+ pipeEngine;
12
+ cleansingService;
13
+ logger;
14
+ getCookieService;
15
+ constructor(extraction, container, pipeEngine, cleansingService, logger, getCookieService) {
16
+ this.extraction = extraction;
17
+ this.container = container;
18
+ this.pipeEngine = pipeEngine;
19
+ this.cleansingService = cleansingService;
20
+ this.logger = logger;
21
+ this.getCookieService = getCookieService;
22
+ }
23
+ async executeAction(page, action, context, debugLogMaxLength = 0) {
24
+ if (action.condition) {
25
+ const shouldExecute = await this.evaluateCondition(page, action.condition, debugLogMaxLength);
26
+ if (!shouldExecute) {
27
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, `Skipping action due to condition: ${action.action}`));
28
+ return;
29
+ }
30
+ }
31
+ const value = this.interpolateValue(String(action.value || ''), context);
32
+ const actionLabel = action.id
33
+ ? `[${action.action}] id="${action.id}"`
34
+ : `[${action.action}]`;
35
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, `Executing action: ${actionLabel}`));
36
+ const maxRetries = Math.min(action.options?.retry ?? 0, 100);
37
+ const retryDelay = Math.min(action.options?.retryDelay ?? 0, 300_000);
38
+ for (let attempt = 0;; attempt++) {
39
+ try {
40
+ await this.dispatchAction(page, action, value, context, debugLogMaxLength);
41
+ return;
42
+ }
43
+ catch (err) {
44
+ if (attempt >= maxRetries)
45
+ throw err;
46
+ this.logger.warn((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, `Action ${actionLabel} failed (attempt ${attempt + 1}/${maxRetries + 1}), retrying: ${err instanceof Error ? err.message : String(err)}`));
47
+ if (retryDelay > 0)
48
+ await (0, delay_util_1.delay)(retryDelay);
49
+ }
50
+ }
51
+ }
52
+ async dispatchAction(page, action, value, context, debugLogMaxLength) {
53
+ switch (action.action) {
54
+ case 'navigate': {
55
+ const navOptions = {};
56
+ if (action.options?.waitUntil)
57
+ navOptions.waitUntil = action.options.waitUntil;
58
+ if (action.options?.timeout)
59
+ navOptions.timeout = action.options.timeout;
60
+ if (!(0, class_validator_1.isURL)(value, {
61
+ require_protocol: true,
62
+ protocols: ['http', 'https'],
63
+ })) {
64
+ throw new Error(`Invalid or disallowed URL: ${value}`);
65
+ }
66
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` navigate → ${value}`));
67
+ await page.goto(value, Object.keys(navOptions).length ? navOptions : undefined);
68
+ break;
69
+ }
70
+ case 'wait':
71
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` wait ${Number(action.value) || 0}ms`));
72
+ await (0, delay_util_1.delay)(Math.min(Number(action.value) || 0, 300_000));
73
+ break;
74
+ case 'waitFor':
75
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` waitFor target: ${this.describeTarget(action.target)}`));
76
+ await this.waitForTarget(page, action.target, action.options);
77
+ break;
78
+ case 'click':
79
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` click target: ${this.describeTarget(action.target)}`));
80
+ await this.clickElement(page, action.target, action.options, debugLogMaxLength);
81
+ break;
82
+ case 'type':
83
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` type target: ${this.describeTarget(action.target)} value: "${value}"`));
84
+ await this.typeText(page, action.target, value, action.options, debugLogMaxLength);
85
+ break;
86
+ case 'select':
87
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` select target: ${this.describeTarget(action.target)} value: "${value}"`));
88
+ await this.selectOption(page, action.target, value, action.options, debugLogMaxLength);
89
+ break;
90
+ case 'scroll':
91
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` scroll target: ${this.describeTarget(action.target)}`));
92
+ await this.scrollToElement(page, action.target, debugLogMaxLength);
93
+ break;
94
+ case 'extract': {
95
+ const extractOptions = action.options || {};
96
+ const extractAs = extractOptions.as ?? 'text';
97
+ const extractAttr = extractOptions.attribute;
98
+ if (!action.target) {
99
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` extract full page HTML`));
100
+ if (action.id)
101
+ context[action.id] = await page.content();
102
+ break;
103
+ }
104
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` extract target: ${this.describeTarget(action.target)} as="${extractAs}"${extractAttr ? ` attr="${extractAttr}"` : ''}${extractOptions.multiple ? ' multiple=true' : ''}`));
105
+ if (extractOptions.multiple) {
106
+ const allValues = await this.extraction.extractAllData(page, action.target, extractAs, extractAttr);
107
+ if (action.id) {
108
+ context[action.id] = allValues;
109
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` extracted ${Array.isArray(allValues) ? allValues.length : 1} item(s) → id="${action.id}"`));
110
+ }
111
+ }
112
+ else {
113
+ const extractedValue = await this.extraction.extractData(page, action.target, extractAs, extractAttr, debugLogMaxLength);
114
+ if (action.id) {
115
+ context[action.id] = extractedValue;
116
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` extracted → id="${action.id}": ${JSON.stringify(extractedValue)}`));
117
+ }
118
+ }
119
+ break;
120
+ }
121
+ case 'screenshot': {
122
+ const screenshotPath = String(action.value || `${browser_action_constants_1.DEFAULT_SCREENSHOT_FILENAME}-${Date.now()}.png`);
123
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` screenshot → ${screenshotPath}`));
124
+ await page.screenshot({ path: screenshotPath });
125
+ break;
126
+ }
127
+ case 'evaluate': {
128
+ let evalCode;
129
+ if (value.includes('=>')) {
130
+ evalCode = `(${value})()`;
131
+ }
132
+ else {
133
+ evalCode = value;
134
+ }
135
+ if (evalCode.length > 50_000) {
136
+ throw new Error('evaluate script exceeds maximum length of 50000 characters');
137
+ }
138
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, `Evaluating: ${evalCode}`));
139
+ const evalResult = await page.evaluate(evalCode);
140
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, `Result: ${JSON.stringify(evalResult)}`));
141
+ if (action.id) {
142
+ context[action.id] = evalResult;
143
+ }
144
+ break;
145
+ }
146
+ case 'cleanse': {
147
+ const pipes = action.options?.pipes;
148
+ if (!pipes) {
149
+ throw new Error('cleanse action requires pipes');
150
+ }
151
+ const valueKey = String(action.value || '');
152
+ const rawValue = this.resolveRawValue(valueKey, context);
153
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` cleanse raw: ${JSON.stringify(rawValue)}`));
154
+ const cleanedValue = Array.isArray(rawValue)
155
+ ? rawValue.map((item) => this.pipeEngine.apply(String(item), pipes))
156
+ : this.pipeEngine.apply(String(rawValue), pipes);
157
+ if (action.id) {
158
+ context[action.id] = cleanedValue;
159
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, `Cleansed value for '${action.id}': ${JSON.stringify(cleanedValue)}`));
160
+ }
161
+ break;
162
+ }
163
+ case 'saveCookies': {
164
+ const sessionName = String(value);
165
+ const overwrite = action.options?.overwrite ?? false;
166
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` saveCookies session="${sessionName}" overwrite=${overwrite}`));
167
+ const metadata = {};
168
+ if (action.options?.metadata) {
169
+ Object.assign(metadata, action.options.metadata);
170
+ }
171
+ await this.getCookieService().saveCookies(page, sessionName, {
172
+ overwrite,
173
+ metadata,
174
+ });
175
+ break;
176
+ }
177
+ case 'loadCookies': {
178
+ const sessionName = String(value);
179
+ const throwIfNotExists = action.onError !== 'skip' && action.onError !== 'continue';
180
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` loadCookies session="${sessionName}"`));
181
+ await this.getCookieService().loadCookies(page, sessionName, {
182
+ throwIfNotExists,
183
+ });
184
+ break;
185
+ }
186
+ case 'clearCookies': {
187
+ const sessionName = String(value);
188
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` clearCookies session="${sessionName}"`));
189
+ await this.getCookieService().deleteCookies(sessionName);
190
+ break;
191
+ }
192
+ case 'listCookies': {
193
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` listCookies`));
194
+ const sessions = await this.getCookieService().listCookies();
195
+ if (action.id) {
196
+ context[action.id] = sessions;
197
+ }
198
+ break;
199
+ }
200
+ case 'hover':
201
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` hover target: ${this.describeTarget(action.target)}`));
202
+ await this.hoverElement(page, action.target, action.options, debugLogMaxLength);
203
+ break;
204
+ case 'keyPress':
205
+ if (!value) {
206
+ throw new Error('keyPress action requires a key value');
207
+ }
208
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` keyPress key="${value}"`));
209
+ await page.keyboard.press(value);
210
+ break;
211
+ case 'clear':
212
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` clear target: ${this.describeTarget(action.target)}`));
213
+ await this.clearElement(page, action.target, debugLogMaxLength);
214
+ break;
215
+ case 'waitForNetwork':
216
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` waitForNetwork timeout=${action.options?.timeout ?? browser_action_constants_1.DEFAULT_ACTION_TIMEOUT}ms`));
217
+ await page.waitForNetworkIdle({
218
+ timeout: action.options?.timeout ?? browser_action_constants_1.DEFAULT_ACTION_TIMEOUT,
219
+ });
220
+ break;
221
+ case 'reload':
222
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` reload waitUntil="${action.options?.waitUntil ?? 'load'}"`));
223
+ await page.reload({
224
+ waitUntil: action.options?.waitUntil ?? 'load',
225
+ timeout: action.options?.timeout ?? browser_action_constants_1.DEFAULT_NAVIGATION_TIMEOUT,
226
+ });
227
+ break;
228
+ case 'scrapeContainer': {
229
+ const o = action.options;
230
+ if (!o?.container || !o?.fields) {
231
+ throw new Error('scrapeContainer requires options.container and options.fields');
232
+ }
233
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` scrapeContainer container="${o.container}"`));
234
+ const containerResult = await this.container.executeContainerExtraction(page, {
235
+ container: o.container,
236
+ fields: o.fields,
237
+ pagination: o.pagination,
238
+ }, o.currentPage ?? 1);
239
+ if (action.id) {
240
+ context[action.id] = containerResult.items;
241
+ if (containerResult.pagination) {
242
+ context[`${action.id}_pagination`] = containerResult.pagination;
243
+ }
244
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` scrapeContainer → id="${action.id}": ${containerResult.items.length} items`));
245
+ }
246
+ break;
247
+ }
248
+ case 'extractPagination': {
249
+ const o = action.options;
250
+ if (!o?.container || !o?.linkSelector || !o?.labelSelector) {
251
+ throw new Error('extractPagination requires options.container, linkSelector, and labelSelector');
252
+ }
253
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` extractPagination container="${o.container}"`));
254
+ const paginationResult = await this.container.resolvePagination(page, {
255
+ container: o.container,
256
+ linkSelector: o.linkSelector,
257
+ labelSelector: o.labelSelector,
258
+ }, o.currentPage ?? 1);
259
+ if (action.id) {
260
+ context[action.id] = paginationResult;
261
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` extractPagination → id="${action.id}": nextUrl=${paginationResult.nextUrl}`));
262
+ }
263
+ break;
264
+ }
265
+ default: {
266
+ const exhaustiveCheck = action.action;
267
+ throw new Error(`Unknown action type: ${String(exhaustiveCheck)}`);
268
+ }
269
+ }
270
+ }
271
+ async evaluateCondition(page, condition, debugLogMaxLength = 0) {
272
+ if (!condition)
273
+ return true;
274
+ if (condition.ifExists) {
275
+ const element = await this.findElement(page, condition.ifExists, debugLogMaxLength);
276
+ return element !== null;
277
+ }
278
+ if (condition.unlessExists) {
279
+ const element = await this.findElement(page, condition.unlessExists, debugLogMaxLength);
280
+ return element === null;
281
+ }
282
+ return true;
283
+ }
284
+ describeTarget(target) {
285
+ const base = target.value
286
+ ? `${target.type}="${target.value}"`
287
+ : `(no selector)`;
288
+ return target.shadowHost
289
+ ? `shadowHost="${target.shadowHost}" > ${base}`
290
+ : base;
291
+ }
292
+ async findElement(page, target, debugLogMaxLength = 0) {
293
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` findElement: ${this.describeTarget(target)}`));
294
+ if (target.shadowHost) {
295
+ const el = await this.findElementInShadowRoot(page, target);
296
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` findElement result: ${el ? 'found' : 'NOT FOUND'}`));
297
+ return el;
298
+ }
299
+ if (target.type === 'css') {
300
+ const el = await page.$(target.value);
301
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` findElement result: ${el ? 'found' : 'NOT FOUND'}`));
302
+ return el;
303
+ }
304
+ const el = await page
305
+ .evaluateHandle((selector) => {
306
+ const result = document.evaluate(selector, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
307
+ return result.singleNodeValue;
308
+ }, target.value)
309
+ .then((handle) => handle.asElement());
310
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` findElement result: ${el ? 'found' : 'NOT FOUND'}`));
311
+ return el;
312
+ }
313
+ async findElementInShadowRoot(page, target) {
314
+ const host = await page.$(target.shadowHost);
315
+ if (!host)
316
+ return null;
317
+ return host
318
+ .evaluateHandle((el, selector, targetType) => {
319
+ const shadowRoot = el.shadowRoot;
320
+ if (!shadowRoot)
321
+ return null;
322
+ if (targetType === 'css') {
323
+ return shadowRoot.querySelector(selector);
324
+ }
325
+ const result = document.evaluate(selector, shadowRoot, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
326
+ return result.singleNodeValue;
327
+ }, target.value, target.type)
328
+ .then((handle) => handle.asElement());
329
+ }
330
+ async waitForTarget(page, target, options) {
331
+ const timeout = options?.timeout || browser_action_constants_1.DEFAULT_ACTION_TIMEOUT;
332
+ if (target.type === 'css') {
333
+ await page.waitForSelector(target.value, { timeout });
334
+ }
335
+ else {
336
+ await page.waitForFunction((selector) => {
337
+ const result = document.evaluate(selector, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
338
+ return result.singleNodeValue !== null;
339
+ }, { timeout }, target.value);
340
+ }
341
+ }
342
+ async clickElement(page, target, options, debugLogMaxLength = 0) {
343
+ const element = await this.findElement(page, target, debugLogMaxLength);
344
+ if (!element) {
345
+ throw new Error(`Element not found: ${target.value}`);
346
+ }
347
+ await this.maybeScrollToElement(element, options?.scrollTo);
348
+ const elem = element;
349
+ await elem.click();
350
+ if (options?.waitForNavigation) {
351
+ await page.waitForNavigation({
352
+ timeout: options.navigationTimeout || browser_action_constants_1.DEFAULT_NAVIGATION_TIMEOUT,
353
+ });
354
+ }
355
+ }
356
+ async typeText(page, target, value, options, debugLogMaxLength = 0) {
357
+ const element = await this.findElement(page, target, debugLogMaxLength);
358
+ if (!element) {
359
+ throw new Error(`Element not found: ${target.value}`);
360
+ }
361
+ await this.maybeScrollToElement(element, options?.scrollTo);
362
+ const elem = element;
363
+ await elem.click();
364
+ const typeDelay = options?.delay || 0;
365
+ await elem.type(value, { delay: typeDelay });
366
+ await elem.evaluate((el) => {
367
+ el.dispatchEvent(new Event('change', { bubbles: true }));
368
+ el.dispatchEvent(new Event('blur', { bubbles: true }));
369
+ });
370
+ }
371
+ async selectOption(page, target, value, options, debugLogMaxLength = 0) {
372
+ const element = await this.findElement(page, target, debugLogMaxLength);
373
+ if (!element) {
374
+ throw new Error(`Element not found: ${target.value}`);
375
+ }
376
+ await this.maybeScrollToElement(element, options?.scrollTo);
377
+ const elem = element;
378
+ await elem.select(value);
379
+ }
380
+ async scrollToElement(page, target, debugLogMaxLength = 0) {
381
+ const element = await this.findElement(page, target, debugLogMaxLength);
382
+ if (!element) {
383
+ throw new Error(`Element not found: ${target.value}`);
384
+ }
385
+ await this.scrollElementIntoView(element);
386
+ }
387
+ async maybeScrollToElement(element, shouldScroll) {
388
+ if (shouldScroll) {
389
+ await this.scrollElementIntoView(element);
390
+ }
391
+ }
392
+ async scrollElementIntoView(element) {
393
+ await element.evaluate((el) => el.scrollIntoView({ behavior: 'smooth', block: 'center' }), {});
394
+ await (0, delay_util_1.delay)(browser_action_constants_1.DEFAULT_SCROLL_DELAY_MS);
395
+ }
396
+ async hoverElement(page, target, options, debugLogMaxLength = 0) {
397
+ const element = await this.findElement(page, target, debugLogMaxLength);
398
+ if (!element) {
399
+ throw new Error(`Element not found: ${target.value}`);
400
+ }
401
+ await this.maybeScrollToElement(element, options?.scrollTo);
402
+ const elem = element;
403
+ await elem.hover();
404
+ }
405
+ async clearElement(page, target, debugLogMaxLength = 0) {
406
+ const element = await this.findElement(page, target, debugLogMaxLength);
407
+ if (!element) {
408
+ throw new Error(`Element not found: ${target.value}`);
409
+ }
410
+ await element.evaluate((el) => {
411
+ if ('value' in el) {
412
+ el.value = '';
413
+ el.dispatchEvent(new Event('input', { bubbles: true }));
414
+ el.dispatchEvent(new Event('change', { bubbles: true }));
415
+ }
416
+ });
417
+ }
418
+ resolveRawValue(value, context) {
419
+ if (value.startsWith('${') && value.endsWith('}')) {
420
+ const path = value.slice(2, -1);
421
+ if (!path.includes('${') && !path.includes('.') && !path.includes('[')) {
422
+ return context[path] ?? value;
423
+ }
424
+ }
425
+ return this.resolveValue(value, context);
426
+ }
427
+ resolveValue(value, context) {
428
+ if (value.startsWith('${') && value.endsWith('}')) {
429
+ const path = value.slice(2, -1);
430
+ if (!path.includes('${')) {
431
+ const keys = path.split('.');
432
+ let result = context;
433
+ for (const key of keys) {
434
+ const arrayMatch = key.match(/^(\w+)\[(\d+)\]$/);
435
+ if (arrayMatch) {
436
+ const [, arrayKey, indexStr] = arrayMatch;
437
+ if (!result || typeof result !== 'object') {
438
+ return value;
439
+ }
440
+ const arrayValue = result[arrayKey];
441
+ const index = parseInt(indexStr, 10);
442
+ result = Array.isArray(arrayValue) ? arrayValue[index] : undefined;
443
+ }
444
+ else {
445
+ if (!result || typeof result !== 'object') {
446
+ return value;
447
+ }
448
+ result = result[key];
449
+ }
450
+ if (result === undefined) {
451
+ return value;
452
+ }
453
+ }
454
+ if (result === null || typeof result === 'object') {
455
+ return value;
456
+ }
457
+ return result;
458
+ }
459
+ return this.interpolateValue(path, context);
460
+ }
461
+ return value;
462
+ }
463
+ interpolateValue(value, context) {
464
+ return value.replace(/\$\{([^}]+)\}/g, (_match, path) => {
465
+ const keys = path.split('.');
466
+ let result = context;
467
+ for (const key of keys) {
468
+ if (key === '__proto__' ||
469
+ key === 'constructor' ||
470
+ key === 'prototype') {
471
+ return '';
472
+ }
473
+ const arrayMatch = key.match(/^(\w+)\[(\d+)\]$/);
474
+ if (arrayMatch) {
475
+ const [, arrayKey, indexStr] = arrayMatch;
476
+ if (!result || typeof result !== 'object') {
477
+ return '';
478
+ }
479
+ const arrayValue = result[arrayKey];
480
+ const index = parseInt(indexStr, 10);
481
+ result = Array.isArray(arrayValue) ? arrayValue[index] : undefined;
482
+ }
483
+ else {
484
+ if (!result || typeof result !== 'object') {
485
+ return '';
486
+ }
487
+ result = result[key];
488
+ }
489
+ if (result === undefined) {
490
+ return '';
491
+ }
492
+ }
493
+ if (result === null || typeof result === 'object') {
494
+ return '';
495
+ }
496
+ return result;
497
+ });
498
+ }
499
+ }
500
+ exports.WorkflowOperator = WorkflowOperator;
501
+ //# sourceMappingURL=workflow.operator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.operator.js","sourceRoot":"","sources":["../../src/operators/workflow.operator.ts"],"names":[],"mappings":"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"}
@@ -16,49 +16,26 @@ export declare class BrowserActionService {
16
16
  private readonly logger;
17
17
  private readonly pipeEngine;
18
18
  private activeDebugLogMaxLength;
19
+ private readonly extraction;
20
+ private readonly capture;
21
+ private readonly container;
22
+ private readonly workflow;
23
+ private readonly pagination;
19
24
  constructor(pageService: PageService, cookieService: CookieService, cleansingService: CleansingService, moduleRef: ModuleRef, moduleOptions?: BrowserActionOptions | undefined);
20
25
  private newPage;
21
26
  takeScreenshot(url: string, path: string, options?: ScreenshotOptions, scraperOptions?: ScraperOptions): Promise<Buffer>;
22
27
  generatePDF(url: string, path: string, options?: PDFOptions, scraperOptions?: ScraperOptions): Promise<Buffer>;
23
28
  captureTlsFingerprint(path: string, url?: string): Promise<TlsFingerprint>;
24
- private buildTlsFingerprint;
25
29
  scrape<T extends SelectorMap>(url: string, selectors: T, options?: ScraperOptions): Promise<ScrapeResult>;
26
- private parseSelector;
27
30
  private buildNavOptions;
28
31
  scrapeAll<T extends SelectorMap>(url: string, selectors: T, options?: ScraperOptions): Promise<ScrapeAllResult>;
29
32
  scrapeContainerFields<T = Record<string, unknown>>(url: string, descriptor: ContainerDescriptor<T>, options?: ScraperOptions): Promise<ContainerScrapeResult<T>>;
30
33
  evaluateWebsite<T = Record<string, unknown>>(options: EvaluateOptions): Promise<EvaluateResult<T>>;
31
- private findPaginationElement;
32
- private paginateClickNext;
33
- private paginateLoadMore;
34
- private paginateInfiniteScroll;
35
- private paginateUrlIncrement;
36
- private extractAllData;
37
- private extractAllFromShadowRoot;
38
34
  waitForSelector(url: string, selector: string, timeout?: number, scraperOptions?: ScraperOptions): Promise<Page>;
39
35
  evaluate<T = unknown>(url: string, script: string | (() => unknown), options?: ScraperOptions): Promise<T>;
40
36
  scrapeWithWorkflow<T = Record<string, unknown>>(url: string, workflow: WorkflowDefinition, variables?: VariableContext): Promise<WorkflowResultTyped<T>>;
41
37
  scrapeAllWithWorkflow<T = Record<string, unknown>>(url: string, workflow: WorkflowDefinition, variables?: VariableContext): Promise<WorkflowResultTyped<T>>;
38
+ private executeContainerExtraction;
42
39
  private executeAction;
43
- private dispatchAction;
44
40
  private evaluateCondition;
45
- private describeTarget;
46
- private findElement;
47
- private findElementInShadowRoot;
48
- private waitForTarget;
49
- private clickElement;
50
- private typeText;
51
- private selectOption;
52
- private scrollToElement;
53
- private maybeScrollToElement;
54
- private scrollElementIntoView;
55
- private executeContainerExtraction;
56
- private resolvePagination;
57
- private validateSelector;
58
- private extractData;
59
- private hoverElement;
60
- private clearElement;
61
- private resolveRawValue;
62
- private resolveValue;
63
- private interpolateValue;
64
41
  }