donobu 2.18.5 → 2.19.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.
- package/dist/apis/FlowsApi.d.ts +4 -0
- package/dist/apis/FlowsApi.d.ts.map +1 -1
- package/dist/apis/FlowsApi.js +15 -1
- package/dist/apis/FlowsApi.js.map +1 -1
- package/dist/apis/SpecialFlowsApi.d.ts.map +1 -1
- package/dist/apis/SpecialFlowsApi.js +11 -9
- package/dist/apis/SpecialFlowsApi.js.map +1 -1
- package/dist/assets/generated/version +1 -1
- package/dist/esm/apis/FlowsApi.d.ts +4 -0
- package/dist/esm/apis/FlowsApi.d.ts.map +1 -1
- package/dist/esm/apis/FlowsApi.js +15 -1
- package/dist/esm/apis/FlowsApi.js.map +1 -1
- package/dist/esm/apis/SpecialFlowsApi.d.ts.map +1 -1
- package/dist/esm/apis/SpecialFlowsApi.js +11 -9
- package/dist/esm/apis/SpecialFlowsApi.js.map +1 -1
- package/dist/esm/assets/generated/version +1 -1
- package/dist/esm/lib/testExtension.d.ts.map +1 -1
- package/dist/esm/lib/testExtension.js +11 -10
- package/dist/esm/lib/testExtension.js.map +1 -1
- package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
- package/dist/esm/managers/AdminApiController.js +1 -0
- package/dist/esm/managers/AdminApiController.js.map +1 -1
- package/dist/esm/managers/CodeGenerator.d.ts +47 -1
- package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
- package/dist/esm/managers/CodeGenerator.js +177 -18
- package/dist/esm/managers/CodeGenerator.js.map +1 -1
- package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
- package/dist/esm/managers/DonobuFlow.js +0 -2
- package/dist/esm/managers/DonobuFlow.js.map +1 -1
- package/dist/esm/managers/DonobuFlowsManager.d.ts +58 -34
- package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
- package/dist/esm/managers/DonobuFlowsManager.js +205 -52
- package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
- package/dist/esm/managers/FlowDependencyAnalyzer.d.ts +40 -0
- package/dist/esm/managers/FlowDependencyAnalyzer.d.ts.map +1 -0
- package/dist/esm/managers/FlowDependencyAnalyzer.js +236 -0
- package/dist/esm/managers/FlowDependencyAnalyzer.js.map +1 -0
- package/dist/esm/managers/ProjectStructureGenerator.d.ts +62 -0
- package/dist/esm/managers/ProjectStructureGenerator.d.ts.map +1 -0
- package/dist/esm/managers/ProjectStructureGenerator.js +234 -0
- package/dist/esm/managers/ProjectStructureGenerator.js.map +1 -0
- package/dist/esm/tools/ExtractPaymentProviderKeyTool.d.ts +47 -1
- package/dist/esm/tools/ExtractPaymentProviderKeyTool.d.ts.map +1 -1
- package/dist/esm/tools/ExtractPaymentProviderKeyTool.js +160 -25
- package/dist/esm/tools/ExtractPaymentProviderKeyTool.js.map +1 -1
- package/dist/esm/utils/PlaywrightUtils.d.ts +3 -3
- package/dist/esm/utils/PlaywrightUtils.d.ts.map +1 -1
- package/dist/esm/utils/PlaywrightUtils.js +39 -8
- package/dist/esm/utils/PlaywrightUtils.js.map +1 -1
- package/dist/lib/testExtension.d.ts.map +1 -1
- package/dist/lib/testExtension.js +11 -10
- package/dist/lib/testExtension.js.map +1 -1
- package/dist/managers/AdminApiController.d.ts.map +1 -1
- package/dist/managers/AdminApiController.js +1 -0
- package/dist/managers/AdminApiController.js.map +1 -1
- package/dist/managers/CodeGenerator.d.ts +47 -1
- package/dist/managers/CodeGenerator.d.ts.map +1 -1
- package/dist/managers/CodeGenerator.js +177 -18
- package/dist/managers/CodeGenerator.js.map +1 -1
- package/dist/managers/DonobuFlow.d.ts.map +1 -1
- package/dist/managers/DonobuFlow.js +0 -2
- package/dist/managers/DonobuFlow.js.map +1 -1
- package/dist/managers/DonobuFlowsManager.d.ts +58 -34
- package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
- package/dist/managers/DonobuFlowsManager.js +205 -52
- package/dist/managers/DonobuFlowsManager.js.map +1 -1
- package/dist/managers/FlowDependencyAnalyzer.d.ts +40 -0
- package/dist/managers/FlowDependencyAnalyzer.d.ts.map +1 -0
- package/dist/managers/FlowDependencyAnalyzer.js +236 -0
- package/dist/managers/FlowDependencyAnalyzer.js.map +1 -0
- package/dist/managers/ProjectStructureGenerator.d.ts +62 -0
- package/dist/managers/ProjectStructureGenerator.d.ts.map +1 -0
- package/dist/managers/ProjectStructureGenerator.js +234 -0
- package/dist/managers/ProjectStructureGenerator.js.map +1 -0
- package/dist/tools/ExtractPaymentProviderKeyTool.d.ts +47 -1
- package/dist/tools/ExtractPaymentProviderKeyTool.d.ts.map +1 -1
- package/dist/tools/ExtractPaymentProviderKeyTool.js +160 -25
- package/dist/tools/ExtractPaymentProviderKeyTool.js.map +1 -1
- package/dist/utils/PlaywrightUtils.d.ts +3 -3
- package/dist/utils/PlaywrightUtils.d.ts.map +1 -1
- package/dist/utils/PlaywrightUtils.js +39 -8
- package/dist/utils/PlaywrightUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ExtractPaymentProviderKeyTool = void 0;
|
|
4
4
|
const Tool_1 = require("./Tool");
|
|
5
|
+
/**
|
|
6
|
+
* This tool scans the current web page for publishable payment
|
|
7
|
+
* provider credentials the current page's inline `<script>` blocks.
|
|
8
|
+
*
|
|
9
|
+
* ### Supported providers
|
|
10
|
+
* | Provider | Regex | Example |
|
|
11
|
+
* |----------|-----------------------------------|----------------|
|
|
12
|
+
* | Stripe | `/pk_(test\|live)_[A-Za-z0-9]+/i` | `pk_test_51M…` |
|
|
13
|
+
* | PayPal | `/A[A-Za-z0-9-_]{75,}/i` | `AUGIH…` |
|
|
14
|
+
*
|
|
15
|
+
* On **success** the tool returns a JSON object containing any discovered keys and the
|
|
16
|
+
* URL of the page that was scanned. If **no keys** are found, `isSuccessful` is set to
|
|
17
|
+
* `false` and a short error string is provided.
|
|
18
|
+
*
|
|
19
|
+
* ```json
|
|
20
|
+
* {
|
|
21
|
+
* "stripe": ["pk_test_123", "pk_live_456"],
|
|
22
|
+
* "paypal": ["AUGIH…"],
|
|
23
|
+
* "checkoutPageUrl": "https://shop.example.com/checkout"
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
5
27
|
class ExtractPaymentProviderKeyTool extends Tool_1.Tool {
|
|
6
28
|
constructor() {
|
|
7
29
|
super(ExtractPaymentProviderKeyTool.NAME, 'Extract multiple publishable payment provider keys from the current page.', 'ExtractPaymentProviderToolCoreParameters', 'ExtractPaymentProviderToolGptParameters');
|
|
@@ -9,34 +31,22 @@ class ExtractPaymentProviderKeyTool extends Tool_1.Tool {
|
|
|
9
31
|
async call(context, _parameters) {
|
|
10
32
|
const page = context.page.current;
|
|
11
33
|
// Retrieve all <script> tags' content, handling potential empty or null attributes
|
|
12
|
-
const scriptContents = await
|
|
13
|
-
.map((script) => script.hasAttribute('src')
|
|
14
|
-
? ''
|
|
15
|
-
: script.innerHTML || script.innerText || script.textContent)
|
|
16
|
-
.join('\n'));
|
|
34
|
+
const scriptContents = (await ExtractPaymentProviderKeyTool.getAllScriptSources(page)).join('\n');
|
|
17
35
|
// Define regex patterns for different payment provider keys
|
|
18
|
-
const stripePattern = /(pk_(test|live)_[A-Za-z0-9]+)/
|
|
19
|
-
const paypalPattern = /(?!(pk_(test|live)_))A[A-Za-z0-9-_]{75,}/i;
|
|
36
|
+
const stripePattern = /(pk_(test|live)_[A-Za-z0-9]+)/gi;
|
|
20
37
|
const stripeKeys = new Set();
|
|
21
38
|
const paypalKeys = new Set();
|
|
22
|
-
// Search for Stripe keys
|
|
39
|
+
// Search for Stripe keys (these are well-defined and reliable)
|
|
23
40
|
let match;
|
|
24
|
-
const stripeMatches = scriptContents.matchAll(
|
|
41
|
+
const stripeMatches = scriptContents.matchAll(stripePattern);
|
|
25
42
|
for (match of stripeMatches) {
|
|
26
43
|
stripeKeys.add(match[1]);
|
|
27
44
|
}
|
|
28
|
-
// Search for PayPal client IDs
|
|
29
|
-
const
|
|
30
|
-
for (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (key.match(stripePattern)) {
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
// Verify that the key contains either "_" or "-" and is related to PayPal
|
|
37
|
-
if ((key.includes('_') || key.includes('-')) &&
|
|
38
|
-
this.verifyPayPalPresence(scriptContents, key)) {
|
|
39
|
-
paypalKeys.add(key);
|
|
45
|
+
// Search for PayPal client IDs with improved filtering
|
|
46
|
+
const paypalCandidates = this.extractPayPalCandidates(scriptContents);
|
|
47
|
+
for (const candidate of paypalCandidates) {
|
|
48
|
+
if (this.isValidPayPalClientId(candidate, scriptContents)) {
|
|
49
|
+
paypalKeys.add(candidate);
|
|
40
50
|
}
|
|
41
51
|
}
|
|
42
52
|
// If no keys were found, return failed result
|
|
@@ -68,12 +78,137 @@ class ExtractPaymentProviderKeyTool extends Tool_1.Tool {
|
|
|
68
78
|
async callFromGpt(context, parameters) {
|
|
69
79
|
return this.call(context, parameters);
|
|
70
80
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Extract potential PayPal client ID candidates from script content
|
|
83
|
+
*/
|
|
84
|
+
extractPayPalCandidates(scriptContents) {
|
|
85
|
+
// Look for strings that start with 'A' and are 75+ characters long
|
|
86
|
+
const candidatePattern = /\bA[A-Za-z0-9_-]{75,}\b/g;
|
|
87
|
+
const candidates = Array.from(scriptContents.matchAll(candidatePattern))
|
|
88
|
+
.map((match) => match[0])
|
|
89
|
+
.filter((candidate) => {
|
|
90
|
+
// Filter out obvious false positives
|
|
91
|
+
return !ExtractPaymentProviderKeyTool.EXCLUDED_PATTERNS.some((pattern) => pattern.test(candidate));
|
|
92
|
+
});
|
|
93
|
+
// Remove duplicates
|
|
94
|
+
return Array.from(new Set(candidates));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Enhanced validation for PayPal client IDs
|
|
98
|
+
*/
|
|
99
|
+
isValidPayPalClientId(candidate, scriptContents) {
|
|
100
|
+
// Must match the expected pattern
|
|
101
|
+
if (!ExtractPaymentProviderKeyTool.PAYPAL_CLIENT_ID_PATTERN.test(candidate)) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
// Must not be a Stripe key
|
|
105
|
+
if (candidate.match(/pk_(test|live)_/i)) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// Must have strong contextual evidence
|
|
109
|
+
const hasStrongContext = this.hasStrongPayPalContext(candidate, scriptContents);
|
|
110
|
+
// Additional validation: check if it appears in a structured context
|
|
111
|
+
const hasStructuredContext = this.hasStructuredPayPalContext(candidate, scriptContents);
|
|
112
|
+
return hasStrongContext && hasStructuredContext;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check for strong PayPal contextual indicators near the candidate key
|
|
116
|
+
*/
|
|
117
|
+
hasStrongPayPalContext(candidate, scriptContents) {
|
|
118
|
+
const escapedKey = candidate.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
119
|
+
// Look for PayPal indicators within a reasonable distance (500 characters)
|
|
120
|
+
for (const indicator of ExtractPaymentProviderKeyTool.PAYPAL_CONTEXT_INDICATORS) {
|
|
121
|
+
const contextPattern = new RegExp(`(?:${indicator}[\\s\\S]{0,500}${escapedKey}|${escapedKey}[\\s\\S]{0,500}${indicator})`, 'i');
|
|
122
|
+
if (contextPattern.test(scriptContents)) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if the candidate appears in a structured context (assignments, objects, etc.)
|
|
130
|
+
*/
|
|
131
|
+
hasStructuredPayPalContext(candidate, scriptContents) {
|
|
132
|
+
const escapedKey = candidate.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
133
|
+
// Look for patterns that suggest this is a configured value
|
|
134
|
+
const structuredPatterns = [
|
|
135
|
+
// Direct assignment patterns
|
|
136
|
+
new RegExp(`(?:client_?id|clientId)\\s*[:=]\\s*['"\`]${escapedKey}['"\`]`, 'i'),
|
|
137
|
+
// Object property patterns
|
|
138
|
+
new RegExp(`['"\`](?:client_?id|clientId)['"\`]\\s*:\\s*['"\`]${escapedKey}['"\`]`, 'i'),
|
|
139
|
+
// PayPal SDK configuration patterns
|
|
140
|
+
new RegExp(`paypal[\\s\\S]{0,200}['"\`]${escapedKey}['"\`]`, 'i'),
|
|
141
|
+
// Data attribute patterns
|
|
142
|
+
new RegExp(`data-[\\w-]*client[\\w-]*\\s*=\\s*['"\`]${escapedKey}['"\`]`, 'i'),
|
|
143
|
+
];
|
|
144
|
+
return structuredPatterns.some((pattern) => pattern.test(scriptContents));
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Collects text bodies for:
|
|
148
|
+
* - all inline <script> blocks
|
|
149
|
+
* - every <script src="…"> that is present in the DOM
|
|
150
|
+
*/
|
|
151
|
+
static async getAllScriptSources(page) {
|
|
152
|
+
// 1 — inline scripts (fast, single browser-side pass)
|
|
153
|
+
const inlineTexts = await page.$$eval('script:not([src])', (els) => els.map((s) => s.textContent ?? '').filter(Boolean));
|
|
154
|
+
// 2 — external scripts
|
|
155
|
+
const srcUrls = await page.$$eval('script[src]', (els) => els.map((s) => s.src));
|
|
156
|
+
const contextRequest = page.context().request;
|
|
157
|
+
const externalTexts = await Promise.all(srcUrls.map(async (url) => {
|
|
158
|
+
try {
|
|
159
|
+
// Playwright's request API bypasses CORS / CSP and honours cache validators.
|
|
160
|
+
const resp = await contextRequest.get(url);
|
|
161
|
+
if (!resp.ok() ||
|
|
162
|
+
+(resp.headers()['content-length'] ?? 0) > 1000000) {
|
|
163
|
+
return ''; // skip huge or bad responses
|
|
164
|
+
}
|
|
165
|
+
// Trim very large bodies in memory-friendly way
|
|
166
|
+
const text = await resp.text();
|
|
167
|
+
return text.slice(0, 1000000); // hard cap at 1 MB
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return '';
|
|
171
|
+
}
|
|
172
|
+
}));
|
|
173
|
+
return [...inlineTexts, ...externalTexts.filter(Boolean)];
|
|
75
174
|
}
|
|
76
175
|
}
|
|
77
176
|
exports.ExtractPaymentProviderKeyTool = ExtractPaymentProviderKeyTool;
|
|
78
177
|
ExtractPaymentProviderKeyTool.NAME = 'extractPaymentProviderKey';
|
|
178
|
+
// Common false positive patterns to exclude
|
|
179
|
+
ExtractPaymentProviderKeyTool.EXCLUDED_PATTERNS = [
|
|
180
|
+
/babel_runtime/i,
|
|
181
|
+
/webpack/i,
|
|
182
|
+
/__IMPORTED_MODULE/i,
|
|
183
|
+
/defineProperty/i,
|
|
184
|
+
/toConsumableArray/i,
|
|
185
|
+
/stringify/i,
|
|
186
|
+
/setTimeout/i,
|
|
187
|
+
/indexOf/i,
|
|
188
|
+
/concat/i,
|
|
189
|
+
/assign/i,
|
|
190
|
+
/isArray/i,
|
|
191
|
+
/forEach/i,
|
|
192
|
+
// Common base64/random data patterns
|
|
193
|
+
/^[A-Za-z0-9+/=]{76,}$/, // Pure base64
|
|
194
|
+
/^[A-Z]{10,}$/, // All caps strings
|
|
195
|
+
// Google/Meta tracking IDs that might be long
|
|
196
|
+
/^G-[A-Z0-9]{10}$/,
|
|
197
|
+
/^UA-\d+-\d+$/,
|
|
198
|
+
];
|
|
199
|
+
// PayPal client IDs have specific characteristics
|
|
200
|
+
ExtractPaymentProviderKeyTool.PAYPAL_CLIENT_ID_PATTERN = /^A[A-Za-z0-9_-]{75,79}$/;
|
|
201
|
+
// Strong PayPal contextual indicators
|
|
202
|
+
ExtractPaymentProviderKeyTool.PAYPAL_CONTEXT_INDICATORS = [
|
|
203
|
+
'paypal',
|
|
204
|
+
'client_id',
|
|
205
|
+
'client-id',
|
|
206
|
+
'clientId',
|
|
207
|
+
'PAYPAL',
|
|
208
|
+
'CLIENT_ID',
|
|
209
|
+
'paypal.com',
|
|
210
|
+
'paypaljs',
|
|
211
|
+
'paypal-js',
|
|
212
|
+
'checkout.paypal.com',
|
|
213
|
+
];
|
|
79
214
|
//# sourceMappingURL=ExtractPaymentProviderKeyTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtractPaymentProviderKeyTool.js","sourceRoot":"","sources":["../../src/tools/ExtractPaymentProviderKeyTool.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;
|
|
1
|
+
{"version":3,"file":"ExtractPaymentProviderKeyTool.js","sourceRoot":"","sources":["../../src/tools/ExtractPaymentProviderKeyTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,9 +32,9 @@ export declare class PlaywrightUtils {
|
|
|
32
32
|
/**
|
|
33
33
|
* Captures up to three screenshots of the given page.
|
|
34
34
|
*
|
|
35
|
-
* - `viewport`
|
|
36
|
-
* - `aboveViewport` : up to half-viewport preview just above the fold
|
|
37
|
-
* - `belowViewport` : up to half-viewport preview just below the fold
|
|
35
|
+
* - `viewport` : exact current viewport
|
|
36
|
+
* - `aboveViewport` : up to half-viewport preview just above the fold (cropped to exclude main viewport)
|
|
37
|
+
* - `belowViewport` : up to half-viewport preview just below the fold (cropped to exclude main viewport)
|
|
38
38
|
*
|
|
39
39
|
* All images are returned as JPEG buffers.
|
|
40
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightUtils.d.ts","sourceRoot":"","sources":["../../src/utils/PlaywrightUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAUlD;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CACkB;IAE3E;;;;;OAKG;IACH,gBAAuB,oCAAoC,SACmB;IAE9E;;;;;;;;OAQG;WACiB,sBAAsB,CACxC,IAAI,EAAE,IAAI,EACV,IAAI,GAAE,KAAK,GAAG,MAAe,GAC5B,OAAO,CAAC,MAAM,CAAC;IAgBlB;;;;;;;;OAQG;WACiB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;QAC3D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;
|
|
1
|
+
{"version":3,"file":"PlaywrightUtils.d.ts","sourceRoot":"","sources":["../../src/utils/PlaywrightUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAUlD;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CACkB;IAE3E;;;;;OAKG;IACH,gBAAuB,oCAAoC,SACmB;IAE9E;;;;;;;;OAQG;WACiB,sBAAsB,CACxC,IAAI,EAAE,IAAI,EACV,IAAI,GAAE,KAAK,GAAG,MAAe,GAC5B,OAAO,CAAC,MAAM,CAAC;IAgBlB;;;;;;;;OAQG;WACiB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;QAC3D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IA8HF;;;;;;OAMG;WACiB,iBAAiB,CAAC,OAAO,EAAE;QAC7C,QAAQ,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KAC/C,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMrB;;;;;OAKG;WACiB,wBAAwB,CAC1C,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC;IAWhB;;;OAGG;WACW,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;WAkBhC,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;WAI7C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDnE;;;;OAIG;WACiB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAuB3E"}
|
|
@@ -46,13 +46,14 @@ class PlaywrightUtils {
|
|
|
46
46
|
/**
|
|
47
47
|
* Captures up to three screenshots of the given page.
|
|
48
48
|
*
|
|
49
|
-
* - `viewport`
|
|
50
|
-
* - `aboveViewport` : up to half-viewport preview just above the fold
|
|
51
|
-
* - `belowViewport` : up to half-viewport preview just below the fold
|
|
49
|
+
* - `viewport` : exact current viewport
|
|
50
|
+
* - `aboveViewport` : up to half-viewport preview just above the fold (cropped to exclude main viewport)
|
|
51
|
+
* - `belowViewport` : up to half-viewport preview just below the fold (cropped to exclude main viewport)
|
|
52
52
|
*
|
|
53
53
|
* All images are returned as JPEG buffers.
|
|
54
54
|
*/
|
|
55
55
|
static async takePageScreenshots(page) {
|
|
56
|
+
const screenshotStyleOverride = `#${ControlPanel_1.ControlPanel.DONOBU_CONTROL_PANEL_ELEMENT_ID} { display: none !important; }`;
|
|
56
57
|
// Take the screenshot of the current viewport immediately – this is always available.
|
|
57
58
|
const viewportBuffer = await PlaywrightUtils.takeViewportScreenshot(page, 'jpeg');
|
|
58
59
|
// If the viewport size is not available we cannot reliably scroll.
|
|
@@ -89,7 +90,22 @@ class PlaywrightUtils {
|
|
|
89
90
|
await page.evaluate((y) => window.scrollTo(0, y), targetY);
|
|
90
91
|
// Give the browser a tiny bit of time – many sites throttle paint.
|
|
91
92
|
await page.waitForTimeout(100);
|
|
92
|
-
|
|
93
|
+
// Calculate the non-overlapping portion to capture
|
|
94
|
+
const overlapPixels = Math.max(0, targetY + viewportHeight - originalScrollY);
|
|
95
|
+
const cropHeight = viewportHeight - overlapPixels;
|
|
96
|
+
if (cropHeight > 0) {
|
|
97
|
+
// Use Playwright's clip parameter to capture only the non-overlapping portion
|
|
98
|
+
aboveBuffer = await page.screenshot({
|
|
99
|
+
style: screenshotStyleOverride,
|
|
100
|
+
type: 'jpeg',
|
|
101
|
+
clip: {
|
|
102
|
+
x: 0,
|
|
103
|
+
y: 0,
|
|
104
|
+
width: viewportSize.width,
|
|
105
|
+
height: cropHeight,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
93
109
|
}
|
|
94
110
|
/************************************************************
|
|
95
111
|
* Capture the area *below* the current viewport ("just below the fold")
|
|
@@ -98,7 +114,23 @@ class PlaywrightUtils {
|
|
|
98
114
|
const targetY = Math.min(scrollHeight - viewportHeight, originalScrollY + halfViewport);
|
|
99
115
|
await page.evaluate((y) => window.scrollTo(0, y), targetY);
|
|
100
116
|
await page.waitForTimeout(100);
|
|
101
|
-
|
|
117
|
+
// Calculate the non-overlapping portion to capture
|
|
118
|
+
const overlapPixels = Math.max(0, originalScrollY + viewportHeight - targetY);
|
|
119
|
+
const cropY = overlapPixels;
|
|
120
|
+
const cropHeight = viewportHeight - overlapPixels;
|
|
121
|
+
if (cropHeight > 0) {
|
|
122
|
+
// Use Playwright's clip parameter to capture only the non-overlapping portion
|
|
123
|
+
belowBuffer = await page.screenshot({
|
|
124
|
+
style: screenshotStyleOverride,
|
|
125
|
+
type: 'jpeg',
|
|
126
|
+
clip: {
|
|
127
|
+
x: 0,
|
|
128
|
+
y: cropY,
|
|
129
|
+
width: viewportSize.width,
|
|
130
|
+
height: cropHeight,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
}
|
|
102
134
|
}
|
|
103
135
|
}
|
|
104
136
|
finally {
|
|
@@ -110,9 +142,8 @@ class PlaywrightUtils {
|
|
|
110
142
|
await page.waitForTimeout(50);
|
|
111
143
|
}
|
|
112
144
|
}
|
|
113
|
-
catch (
|
|
114
|
-
|
|
115
|
-
// can do and the caller will receive the original exception.
|
|
145
|
+
catch (restoreError) {
|
|
146
|
+
Logger_1.appLogger.error(`Failed to restore scroll position for page ${page.url()}`, restoreError);
|
|
116
147
|
}
|
|
117
148
|
}
|
|
118
149
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightUtils.js","sourceRoot":"","sources":["../../src/utils/PlaywrightUtils.ts"],"names":[],"mappings":";;;;;;AAEA,qCAAqC;AACrC,2CAAwC;AACxC,gDAAwB;AACxB,2EAAwE;AACxE,iDAAsC;AACtC,2DAAwD;AACxD,6DAA0D;AAC1D,gFAA6E;AAE7E;;;GAGG;AACH,MAAa,eAAe;IAoB1B;;;;;;;;OAQG;IACI,MAAM,CAAC,KAAK,CAAC,sBAAsB,CACxC,IAAU,EACV,OAAuB,MAAM;QAE7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,2BAAY,CAAC,+BAA+B,gCAAgC,CAAC;YAC/F,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC;gBAC3B,KAAK;gBACL,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,yCAAmB,EAAE,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAU;QAKhD,sFAAsF;QACtF,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,sBAAsB,CACjE,IAAI,EACJ,MAAM,CACP,CAAC;QAEF,mEAAmE;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,cAAc;gBACxB,aAAa,EAAE,IAAI;aACpB,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAEpD,oEAAoE;QACpE,wDAAwD;QACxD,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACjE,OAAO;gBACL,eAAe,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC;gBAC1D,YAAY,EACV,QAAQ,CAAC,eAAe,CAAC,YAAY;oBACrC,QAAQ,CAAC,IAAI,CAAC,YAAY;oBAC1B,CAAC;aACJ,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,WAAW,GAAkB,IAAI,CAAC;QAEtC,sEAAsE;QACtE,gEAAgE;QAChE,IAAI,CAAC;YACH;;0EAE8D;YAC9D,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,YAAY,CAAC,CAAC;gBAC5D,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC3D,mEAAmE;gBACnE,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"PlaywrightUtils.js","sourceRoot":"","sources":["../../src/utils/PlaywrightUtils.ts"],"names":[],"mappings":"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"}
|