@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,204 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExtractionOperator = void 0;
4
+ const truncate_log_util_1 = require("../utils/truncate-log.util");
5
+ class ExtractionOperator {
6
+ pipeEngine;
7
+ logger;
8
+ constructor(pipeEngine, logger) {
9
+ this.pipeEngine = pipeEngine;
10
+ this.logger = logger;
11
+ }
12
+ parseSelector(raw) {
13
+ const match = raw.match(/^(.*)@([A-Za-z_][\w-]*)$/);
14
+ if (match && match[1].trim() !== '') {
15
+ return { selector: match[1], attribute: match[2] };
16
+ }
17
+ return { selector: raw };
18
+ }
19
+ validateSelector(key, selector) {
20
+ if (!selector || selector.trim() === '') {
21
+ throw new Error(`Selector for '${key}' cannot be empty`);
22
+ }
23
+ }
24
+ async extractSingle(page, url, selectors, pipes) {
25
+ const result = {};
26
+ const evalOne = page['$eval'].bind(page);
27
+ await Promise.all(Object.entries(selectors).map(async ([key, rawSelector]) => {
28
+ const { selector, attribute } = this.parseSelector(rawSelector);
29
+ try {
30
+ const value = attribute
31
+ ? await evalOne(selector, (el, attr) => el.getAttribute(attr), attribute)
32
+ : await evalOne(selector, (el) => el.textContent);
33
+ result[key] = pipes?.[key]
34
+ ? this.pipeEngine.apply(typeof value === 'string' ? value : String(value ?? ''), pipes[key], url)
35
+ : value;
36
+ }
37
+ catch (err) {
38
+ this.logger.warn(`Failed to scrape '${key}' (${rawSelector}): ${err instanceof Error ? err.message : String(err)}`);
39
+ }
40
+ }));
41
+ return result;
42
+ }
43
+ async extractAllData(page, target, as = 'text', attribute) {
44
+ if (target.shadowHost && !target.value) {
45
+ const hosts = await page.$$(target.shadowHost);
46
+ const results = await Promise.all(hosts.map((host) => host.evaluate((el, extractAs, attr) => {
47
+ const sr = el.shadowRoot;
48
+ if (!sr)
49
+ return '';
50
+ if (extractAs === 'html' || extractAs === 'outerHtml')
51
+ return sr.innerHTML;
52
+ if (extractAs === 'attribute')
53
+ return el.getAttribute(attr || '') || '';
54
+ return sr.textContent?.trim() || '';
55
+ }, as, attribute)));
56
+ return results;
57
+ }
58
+ if (target.shadowHost) {
59
+ return await this.extractAllFromShadowRoot(page, target, as, attribute);
60
+ }
61
+ if (target.type === 'css') {
62
+ return await page.$$eval(target.value, (elements, extractAs, attr) => elements.map((el) => {
63
+ if (extractAs === 'html')
64
+ return el.innerHTML;
65
+ if (extractAs === 'outerHtml')
66
+ return el.outerHTML;
67
+ if (extractAs === 'attribute')
68
+ return el.getAttribute(attr || '') || '';
69
+ return el.textContent?.trim() || '';
70
+ }), as, attribute);
71
+ }
72
+ return await page.evaluate((selector, extractAs, attr) => {
73
+ const results = document.evaluate(selector, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
74
+ const values = [];
75
+ for (let i = 0; i < results.snapshotLength; i++) {
76
+ const node = results.snapshotItem(i);
77
+ if (!(node instanceof Element)) {
78
+ values.push(node?.textContent?.trim() || '');
79
+ continue;
80
+ }
81
+ if (extractAs === 'html')
82
+ values.push(node.innerHTML);
83
+ else if (extractAs === 'outerHtml')
84
+ values.push(node.outerHTML);
85
+ else if (extractAs === 'attribute')
86
+ values.push(node.getAttribute(attr || '') || '');
87
+ else
88
+ values.push(node.textContent?.trim() || '');
89
+ }
90
+ return values;
91
+ }, target.value, as, attribute);
92
+ }
93
+ async extractAllFromShadowRoot(page, target, as = 'text', attribute) {
94
+ const hosts = await page.$$(target.shadowHost);
95
+ const allResults = await Promise.all(hosts.map(async (host) => {
96
+ return await host.evaluate((el, selector, targetType, extractAs, attr) => {
97
+ const shadowRoot = el.shadowRoot;
98
+ if (!shadowRoot)
99
+ return [];
100
+ const getVal = (e) => {
101
+ if (extractAs === 'html')
102
+ return e.innerHTML;
103
+ if (extractAs === 'outerHtml')
104
+ return e.outerHTML;
105
+ if (extractAs === 'attribute')
106
+ return e.getAttribute(attr || '') || '';
107
+ return e.textContent?.trim() || '';
108
+ };
109
+ if (targetType === 'css') {
110
+ const elements = shadowRoot.querySelectorAll(selector);
111
+ return Array.from(elements).map(getVal);
112
+ }
113
+ const results = document.evaluate(selector, shadowRoot, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
114
+ const values = [];
115
+ let node;
116
+ while ((node = results.iterateNext())) {
117
+ values.push(node instanceof Element
118
+ ? getVal(node)
119
+ : node?.textContent?.trim() || '');
120
+ }
121
+ return values;
122
+ }, target.value, target.type, as, attribute);
123
+ }));
124
+ return allResults.flat();
125
+ }
126
+ async extractData(page, target, as = 'text', attribute, debugLogMaxLength = 0) {
127
+ if (target.shadowHost && !target.value) {
128
+ const host = await page.$(target.shadowHost);
129
+ if (!host)
130
+ throw new Error(`Shadow host not found: ${target.shadowHost}`);
131
+ return host.evaluate((el, extractAs, attr) => {
132
+ const sr = el.shadowRoot;
133
+ if (!sr)
134
+ return '';
135
+ if (extractAs === 'html' || extractAs === 'outerHtml')
136
+ return sr.innerHTML;
137
+ if (extractAs === 'attribute')
138
+ return el.getAttribute(attr || '') || '';
139
+ return sr.textContent?.trim() || '';
140
+ }, as, attribute);
141
+ }
142
+ const element = await this.findElement(page, target, debugLogMaxLength);
143
+ if (!element) {
144
+ throw new Error(`Element not found: ${target.value}`);
145
+ }
146
+ return element.evaluate((el, extractAs, attr) => {
147
+ if (extractAs === 'html')
148
+ return el.innerHTML;
149
+ if (extractAs === 'outerHtml')
150
+ return el.outerHTML;
151
+ if (extractAs === 'attribute')
152
+ return el.getAttribute(attr || '') || '';
153
+ return el.textContent?.trim() || '';
154
+ }, as, attribute);
155
+ }
156
+ describeTarget(target) {
157
+ const base = target.value
158
+ ? `${target.type}="${target.value}"`
159
+ : `(no selector)`;
160
+ return target.shadowHost
161
+ ? `shadowHost="${target.shadowHost}" > ${base}`
162
+ : base;
163
+ }
164
+ async findElement(page, target, debugLogMaxLength = 0) {
165
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` findElement: ${this.describeTarget(target)}`));
166
+ if (target.shadowHost) {
167
+ const el = await this.findElementInShadowRoot(page, target);
168
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` findElement result: ${el ? 'found' : 'NOT FOUND'}`));
169
+ return el;
170
+ }
171
+ if (target.type === 'css') {
172
+ const el = await page.$(target.value);
173
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` findElement result: ${el ? 'found' : 'NOT FOUND'}`));
174
+ return el;
175
+ }
176
+ const el = await page
177
+ .evaluateHandle((selector) => {
178
+ const result = document.evaluate(selector, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
179
+ return result.singleNodeValue;
180
+ }, target.value)
181
+ .then((handle) => handle.asElement());
182
+ this.logger.debug((0, truncate_log_util_1.truncateLog)(debugLogMaxLength, ` findElement result: ${el ? 'found' : 'NOT FOUND'}`));
183
+ return el;
184
+ }
185
+ async findElementInShadowRoot(page, target) {
186
+ const host = await page.$(target.shadowHost);
187
+ if (!host)
188
+ return null;
189
+ return host
190
+ .evaluateHandle((el, selector, targetType) => {
191
+ const shadowRoot = el.shadowRoot;
192
+ if (!shadowRoot)
193
+ return null;
194
+ if (targetType === 'css') {
195
+ return shadowRoot.querySelector(selector);
196
+ }
197
+ const result = document.evaluate(selector, shadowRoot, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
198
+ return result.singleNodeValue;
199
+ }, target.value, target.type)
200
+ .then((handle) => handle.asElement());
201
+ }
202
+ }
203
+ exports.ExtractionOperator = ExtractionOperator;
204
+ //# sourceMappingURL=extraction.operator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction.operator.js","sourceRoot":"","sources":["../../src/operators/extraction.operator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { ExtractionOperator } from './extraction.operator';
2
+ export { CaptureOperator } from './capture.operator';
3
+ export { ContainerOperator } from './container.operator';
4
+ export { WorkflowOperator } from './workflow.operator';
5
+ export { PaginationOperator } from './pagination.operator';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PaginationOperator = exports.WorkflowOperator = exports.ContainerOperator = exports.CaptureOperator = exports.ExtractionOperator = void 0;
4
+ var extraction_operator_1 = require("./extraction.operator");
5
+ Object.defineProperty(exports, "ExtractionOperator", { enumerable: true, get: function () { return extraction_operator_1.ExtractionOperator; } });
6
+ var capture_operator_1 = require("./capture.operator");
7
+ Object.defineProperty(exports, "CaptureOperator", { enumerable: true, get: function () { return capture_operator_1.CaptureOperator; } });
8
+ var container_operator_1 = require("./container.operator");
9
+ Object.defineProperty(exports, "ContainerOperator", { enumerable: true, get: function () { return container_operator_1.ContainerOperator; } });
10
+ var workflow_operator_1 = require("./workflow.operator");
11
+ Object.defineProperty(exports, "WorkflowOperator", { enumerable: true, get: function () { return workflow_operator_1.WorkflowOperator; } });
12
+ var pagination_operator_1 = require("./pagination.operator");
13
+ Object.defineProperty(exports, "PaginationOperator", { enumerable: true, get: function () { return pagination_operator_1.PaginationOperator; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operators/index.ts"],"names":[],"mappings":";;;AAAA,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAC3B,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,24 @@
1
+ import type { Page } from 'puppeteer-core';
2
+ import { LoggerWithLevel } from '../utils/logger.util';
3
+ import type { PaginationOptions } from '../interfaces/types';
4
+ export declare class PaginationOperator {
5
+ private readonly logger;
6
+ constructor(logger: LoggerWithLevel);
7
+ private findPaginationElement;
8
+ paginateClickNext<T>(page: Page, containerFn: (page: Page) => Promise<T[]>, opts: PaginationOptions): Promise<{
9
+ items: T[];
10
+ pages: number;
11
+ }>;
12
+ paginateLoadMore<T>(page: Page, containerFn: (page: Page) => Promise<T[]>, opts: PaginationOptions): Promise<{
13
+ items: T[];
14
+ pages: number;
15
+ }>;
16
+ paginateInfiniteScroll<T>(page: Page, containerFn: (page: Page) => Promise<T[]>, opts: PaginationOptions): Promise<{
17
+ items: T[];
18
+ pages: number;
19
+ }>;
20
+ paginateUrlIncrement<T>(urlTemplate: string, containerFn: (url: string) => Promise<T[]>, opts: PaginationOptions, startPage: number): Promise<{
21
+ items: T[];
22
+ pages: number;
23
+ }>;
24
+ }
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PaginationOperator = void 0;
4
+ const delay_util_1 = require("../utils/delay.util");
5
+ const dom_util_1 = require("../utils/dom.util");
6
+ const isTargetClosed = (err) => err instanceof Error &&
7
+ (err.message.includes('Target closed') ||
8
+ err.message.includes('No target with given id') ||
9
+ err.message.includes('detached Frame') ||
10
+ err.message.includes('Attempted to use detached') ||
11
+ err.message.includes('Execution context was destroyed') ||
12
+ err.message.includes('context was destroyed') ||
13
+ err.message.includes('Session closed') ||
14
+ err.message.includes('Navigating frame was detached'));
15
+ class PaginationOperator {
16
+ logger;
17
+ constructor(logger) {
18
+ this.logger = logger;
19
+ }
20
+ async findPaginationElement(page, selector) {
21
+ if (!(0, dom_util_1.isXPathSelector)(selector)) {
22
+ return page.$(selector);
23
+ }
24
+ const pageWithX = page;
25
+ if (typeof pageWithX.$x === 'function') {
26
+ const results = await pageWithX.$x(selector);
27
+ return results[0] ?? null;
28
+ }
29
+ const handle = await page
30
+ .evaluateHandle((sel) => {
31
+ const res = document.evaluate(sel, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
32
+ return res.singleNodeValue;
33
+ }, selector)
34
+ .then((h) => h.asElement());
35
+ return handle;
36
+ }
37
+ async paginateClickNext(page, containerFn, opts) {
38
+ const max = opts.maxPages ?? 10;
39
+ const wait = opts.waitAfter ?? 800;
40
+ const all = [];
41
+ let pages = 0;
42
+ for (let i = 0; i < max; i++) {
43
+ try {
44
+ const items = await containerFn(page);
45
+ all.push(...items);
46
+ pages++;
47
+ if (!opts.selector)
48
+ break;
49
+ const btn = await this.findPaginationElement(page, opts.selector);
50
+ if (!btn)
51
+ break;
52
+ await Promise.all([
53
+ page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
54
+ btn.click(),
55
+ ]);
56
+ await (0, delay_util_1.delay)(wait);
57
+ }
58
+ catch (err) {
59
+ if (isTargetClosed(err))
60
+ break;
61
+ if (err instanceof Error && err.message.includes('TimeoutError'))
62
+ break;
63
+ throw err;
64
+ }
65
+ }
66
+ return { items: all, pages };
67
+ }
68
+ async paginateLoadMore(page, containerFn, opts) {
69
+ const max = opts.maxPages ?? 10;
70
+ const wait = opts.waitAfter ?? 800;
71
+ let previousCount = 0;
72
+ let clicks = 0;
73
+ let lastItems = [];
74
+ for (let i = 0; i < max; i++) {
75
+ try {
76
+ const items = await containerFn(page);
77
+ if (items.length === previousCount) {
78
+ return { items, pages: clicks + 1 };
79
+ }
80
+ lastItems = items;
81
+ previousCount = items.length;
82
+ if (!opts.selector)
83
+ break;
84
+ const btn = await this.findPaginationElement(page, opts.selector);
85
+ if (!btn)
86
+ break;
87
+ await btn.click();
88
+ clicks++;
89
+ await (0, delay_util_1.delay)(wait);
90
+ }
91
+ catch (err) {
92
+ if (isTargetClosed(err))
93
+ break;
94
+ throw err;
95
+ }
96
+ }
97
+ try {
98
+ const finalItems = await containerFn(page);
99
+ return { items: finalItems, pages: clicks + 1 };
100
+ }
101
+ catch (err) {
102
+ if (isTargetClosed(err))
103
+ return { items: lastItems, pages: clicks + 1 };
104
+ throw err;
105
+ }
106
+ }
107
+ async paginateInfiniteScroll(page, containerFn, opts) {
108
+ const max = opts.maxPages ?? 10;
109
+ const wait = opts.waitAfter ?? 800;
110
+ let previousCount = 0;
111
+ let scrolls = 0;
112
+ let lastItems = [];
113
+ for (let i = 0; i < max; i++) {
114
+ try {
115
+ const items = await containerFn(page);
116
+ if (opts.endSelector) {
117
+ const endEl = await this.findPaginationElement(page, opts.endSelector);
118
+ if (endEl)
119
+ return { items, pages: scrolls + 1 };
120
+ }
121
+ if (items.length === previousCount)
122
+ return { items, pages: scrolls + 1 };
123
+ lastItems = items;
124
+ previousCount = items.length;
125
+ if (opts.selector) {
126
+ const sentinel = await this.findPaginationElement(page, opts.selector);
127
+ if (sentinel) {
128
+ await page.evaluate((el) => el.scrollIntoView(), sentinel);
129
+ }
130
+ else {
131
+ await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
132
+ }
133
+ }
134
+ else {
135
+ await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
136
+ }
137
+ scrolls++;
138
+ await (0, delay_util_1.delay)(wait);
139
+ }
140
+ catch (err) {
141
+ if (isTargetClosed(err))
142
+ break;
143
+ throw err;
144
+ }
145
+ }
146
+ try {
147
+ const finalItems = await containerFn(page);
148
+ return { items: finalItems, pages: scrolls + 1 };
149
+ }
150
+ catch (err) {
151
+ if (isTargetClosed(err))
152
+ return { items: lastItems, pages: scrolls + 1 };
153
+ throw err;
154
+ }
155
+ }
156
+ async paginateUrlIncrement(urlTemplate, containerFn, opts, startPage) {
157
+ const max = opts.maxPages ?? 10;
158
+ const wait = opts.waitAfter ?? 800;
159
+ const all = [];
160
+ let pagesScraped = 0;
161
+ for (let p = startPage; p < startPage + max; p++) {
162
+ try {
163
+ const url = urlTemplate.replace('{page}', String(p));
164
+ const items = await containerFn(url);
165
+ if (items.length === 0)
166
+ break;
167
+ all.push(...items);
168
+ pagesScraped++;
169
+ if (p < startPage + max - 1)
170
+ await (0, delay_util_1.delay)(wait);
171
+ }
172
+ catch (err) {
173
+ if (isTargetClosed(err))
174
+ break;
175
+ throw err;
176
+ }
177
+ }
178
+ return { items: all, pages: pagesScraped };
179
+ }
180
+ }
181
+ exports.PaginationOperator = PaginationOperator;
182
+ //# sourceMappingURL=pagination.operator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.operator.js","sourceRoot":"","sources":["../../src/operators/pagination.operator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { Page } from 'puppeteer-core';
2
+ import { PipeEngine } from '../pipes/pipe-engine';
3
+ import { CleansingService } from '../services/cleansing.service';
4
+ import { CookieService } from '../services/cookie.service';
5
+ import { LoggerWithLevel } from '../utils/logger.util';
6
+ import { ExtractionOperator } from './extraction.operator';
7
+ import { ContainerOperator } from './container.operator';
8
+ import type { WorkflowAction, VariableContext } from '../interfaces/workflow-options';
9
+ export declare class WorkflowOperator {
10
+ private readonly extraction;
11
+ private readonly container;
12
+ private readonly pipeEngine;
13
+ private readonly cleansingService;
14
+ private readonly logger;
15
+ private readonly getCookieService;
16
+ constructor(extraction: ExtractionOperator, container: ContainerOperator, pipeEngine: PipeEngine, cleansingService: CleansingService, logger: LoggerWithLevel, getCookieService: () => CookieService);
17
+ executeAction(page: Page, action: WorkflowAction, context: VariableContext, debugLogMaxLength?: number): Promise<void>;
18
+ private dispatchAction;
19
+ evaluateCondition(page: Page, condition: WorkflowAction['condition'], debugLogMaxLength?: number): Promise<boolean>;
20
+ private describeTarget;
21
+ private findElement;
22
+ private findElementInShadowRoot;
23
+ private waitForTarget;
24
+ private clickElement;
25
+ private typeText;
26
+ private selectOption;
27
+ private scrollToElement;
28
+ private maybeScrollToElement;
29
+ private scrollElementIntoView;
30
+ private hoverElement;
31
+ private clearElement;
32
+ private resolveRawValue;
33
+ private resolveValue;
34
+ private interpolateValue;
35
+ }