jumpy-lion 0.0.22 → 0.0.24
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/browser-controller.d.ts.map +1 -1
- package/dist/browser-controller.js +62 -32
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-plugin.d.ts +3 -1
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +36 -9
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/browser.d.ts +1 -0
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +7 -2
- package/dist/browser-process/browser.js.map +1 -1
- package/dist/crawler.d.ts +32 -9
- package/dist/crawler.d.ts.map +1 -1
- package/dist/crawler.js +16 -6
- package/dist/crawler.js.map +1 -1
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js +7 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js +18 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts +83 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js +1258 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js +76 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js +15 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js +77 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js +19 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js.map +1 -0
- package/dist/fingerprinting/canvas-fingerprint.d.ts +3 -1
- package/dist/fingerprinting/canvas-fingerprint.d.ts.map +1 -1
- package/dist/fingerprinting/canvas-fingerprint.js +56 -58
- package/dist/fingerprinting/canvas-fingerprint.js.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.d.ts +0 -1
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.js +2 -5
- package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
- package/dist/launcher-wrap.d.ts +2 -2
- package/dist/launcher-wrap.d.ts.map +1 -1
- package/dist/launcher-wrap.js.map +1 -1
- package/dist/page.d.ts +12 -1
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +224 -4
- package/dist/page.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-controller.d.ts","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAC;AAIxD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,OAAO,MAAM,WAAW,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,iBAAiB,CAC/D,WAAW,EAAE,6CAA6C;AAC1D,OAAO,EAAE,gBAAgB;AACzB,YAAY,EAAE,4BAA4B;AAC1C,EAAE,EAAE,0DAA0D;AAC9D,aAAa,CAChB;IACG,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,qBAAqB,CAAS;IAEhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-controller.d.ts","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAC;AAIxD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,OAAO,MAAM,WAAW,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,iBAAiB,CAC/D,WAAW,EAAE,6CAA6C;AAC1D,OAAO,EAAE,gBAAgB;AACzB,YAAY,EAAE,4BAA4B;AAC1C,EAAE,EAAE,0DAA0D;AAC9D,aAAa,CAChB;IACG,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,qBAAqB,CAAS;IAEhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCjC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAajC;;;OAGG;YACW,iBAAiB;IAuC/B;;;OAGG;cACa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBvC;;;OAGG;cACa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtC;;;OAGG;cACa,QAAQ,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC,aAAa,CAAC;YA+DlD,yBAAyB;IAuBvC;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlF;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ1D,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5G"}
|
|
@@ -26,17 +26,31 @@ export default class CDPBrowserController extends BrowserController {
|
|
|
26
26
|
}); // Flag to track disconnect listener
|
|
27
27
|
}
|
|
28
28
|
async initialize() {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
29
|
+
const maxInitAttempts = 3;
|
|
30
|
+
let attempt = 0;
|
|
31
|
+
while (attempt < maxInitAttempts) {
|
|
32
|
+
try {
|
|
33
|
+
this.client = await CDP({
|
|
34
|
+
port: this.launchContext.debuggingPort,
|
|
35
|
+
local: true,
|
|
36
|
+
});
|
|
37
|
+
const { Network, Page } = this.client;
|
|
38
|
+
await Promise.all([
|
|
39
|
+
Network.enable(),
|
|
40
|
+
Page.enable(),
|
|
41
|
+
]);
|
|
42
|
+
this._attachDisconnectListener();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
attempt++;
|
|
47
|
+
log.error(`Failed to initialize CDP client (attempt ${attempt}/${maxInitAttempts})`, error);
|
|
48
|
+
if (attempt === maxInitAttempts) {
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
// Wait before retrying
|
|
52
|
+
await utils.sleep(2000 * attempt);
|
|
53
|
+
}
|
|
40
54
|
}
|
|
41
55
|
}
|
|
42
56
|
/**
|
|
@@ -48,7 +62,9 @@ export default class CDPBrowserController extends BrowserController {
|
|
|
48
62
|
return;
|
|
49
63
|
this.client.on('disconnect', () => {
|
|
50
64
|
log.error('WebSocket disconnected, attempting to reconnect...');
|
|
51
|
-
this._attemptReconnect()
|
|
65
|
+
void this._attemptReconnect().catch((error) => {
|
|
66
|
+
log.error('Failed to reconnect after multiple attempts. Browser has been closed.', error);
|
|
67
|
+
});
|
|
52
68
|
});
|
|
53
69
|
this.hasDisconnectListener = true; // Mark that we have a disconnect listener attached
|
|
54
70
|
}
|
|
@@ -61,30 +77,31 @@ export default class CDPBrowserController extends BrowserController {
|
|
|
61
77
|
while (this.reconnectAttempts < maxAttempts) {
|
|
62
78
|
try {
|
|
63
79
|
log.info(`Reconnect attempt ${this.reconnectAttempts + 1} of ${maxAttempts}`);
|
|
64
|
-
|
|
80
|
+
// Connect to browser target directly
|
|
81
|
+
this.client = await CDP({
|
|
82
|
+
port: this.launchContext.debuggingPort,
|
|
83
|
+
target: 'browser', // This connects to the root target without creating new ones
|
|
84
|
+
local: true,
|
|
85
|
+
});
|
|
65
86
|
const { Network, Page } = this.client;
|
|
66
|
-
await
|
|
67
|
-
|
|
68
|
-
|
|
87
|
+
await Promise.all([
|
|
88
|
+
Network.enable(),
|
|
89
|
+
Page.enable(),
|
|
90
|
+
]);
|
|
69
91
|
this.reconnectAttempts = 0;
|
|
70
92
|
log.info('Reconnected to browser successfully.');
|
|
71
|
-
|
|
72
|
-
this.hasDisconnectListener = false; // Reset flag to allow attaching again
|
|
93
|
+
this.hasDisconnectListener = false;
|
|
73
94
|
this._attachDisconnectListener();
|
|
74
|
-
return;
|
|
95
|
+
return;
|
|
75
96
|
}
|
|
76
97
|
catch (error) {
|
|
77
98
|
this.reconnectAttempts++;
|
|
78
99
|
log.error(`Reconnect attempt ${this.reconnectAttempts} failed.`, error);
|
|
79
100
|
if (this.reconnectAttempts === maxAttempts) {
|
|
80
|
-
log.error('Max reconnect attempts reached.
|
|
81
|
-
await this._close(); // Close the browser if reconnecting fails
|
|
82
|
-
// Gracefully handle the error without throwing to avoid crashing the process
|
|
83
|
-
log.error('Failed to reconnect after multiple attempts. Browser has been closed.');
|
|
101
|
+
log.error('Max reconnect attempts reached.');
|
|
84
102
|
return;
|
|
85
103
|
}
|
|
86
|
-
|
|
87
|
-
await utils.sleep(delayMs);
|
|
104
|
+
await utils.sleep(delayMs / 2);
|
|
88
105
|
}
|
|
89
106
|
}
|
|
90
107
|
}
|
|
@@ -140,20 +157,29 @@ export default class CDPBrowserController extends BrowserController {
|
|
|
140
157
|
if (!this.client) {
|
|
141
158
|
await this.initialize();
|
|
142
159
|
}
|
|
160
|
+
// Check if client is still connected
|
|
161
|
+
// @ts-expect-error Accessing internal WebSocket
|
|
162
|
+
if (this.client._ws?.readyState !== 1) { // WebSocket.OPEN = 1
|
|
163
|
+
log.info('Browser connection lost, reinitializing...');
|
|
164
|
+
await this.initialize();
|
|
165
|
+
}
|
|
143
166
|
const { Target } = this.client;
|
|
144
167
|
// Create a new page target
|
|
145
168
|
const { targetId } = await Target.createTarget({ url: 'about:blank' });
|
|
146
169
|
const session = await CDP({ target: targetId, port: this.launchContext.debuggingPort });
|
|
147
|
-
// Enable
|
|
148
|
-
await
|
|
149
|
-
|
|
170
|
+
// Enable only essential domains
|
|
171
|
+
await Promise.all([
|
|
172
|
+
session.Network.enable(),
|
|
173
|
+
session.Page.enable(),
|
|
174
|
+
session.DOM.enable(),
|
|
175
|
+
]);
|
|
150
176
|
// Activate the target
|
|
151
177
|
// @TODO: This is quite messy and should be improved
|
|
152
178
|
const { targetInfos } = await Target.getTargets();
|
|
153
179
|
const pages = targetInfos.filter((target) => target.type === 'page' && !target.url.includes('chrome://'));
|
|
154
180
|
await Target.activateTarget({ targetId: pages[pages.length - 1].targetId });
|
|
155
|
-
// Create and return the new page
|
|
156
|
-
const page =
|
|
181
|
+
// Create and return the new page using the static create method
|
|
182
|
+
const page = await CdpPage.create(session);
|
|
157
183
|
page.once(PAGE_CLOSED, () => {
|
|
158
184
|
this.activePages -= 1;
|
|
159
185
|
});
|
|
@@ -165,10 +191,14 @@ export default class CDPBrowserController extends BrowserController {
|
|
|
165
191
|
log.error(`Failed to create new page. Attempt ${retries} of ${maxRetries}`, error);
|
|
166
192
|
if (retries === maxRetries) {
|
|
167
193
|
log.error('Max retries reached. Closing the browser.');
|
|
168
|
-
|
|
194
|
+
try {
|
|
195
|
+
await this._close();
|
|
196
|
+
}
|
|
197
|
+
catch (closeError) {
|
|
198
|
+
log.error('Could not close browser client or process', { error: closeError });
|
|
199
|
+
}
|
|
169
200
|
throw new Error('Failed to create a new page after multiple attempts.');
|
|
170
201
|
}
|
|
171
|
-
// Optional delay before retrying
|
|
172
202
|
await utils.sleep(1000 * retries);
|
|
173
203
|
}
|
|
174
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-controller.js","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,yBAAyB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,OAAO,OAAO,MAAM,WAAW,CAAC;AAIhC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,iBAMjD;IAND;;QAOY;;;;;WAAoB;QACpB;;;;mBAAoB,CAAC;WAAC;QACtB;;;;mBAAwB,KAAK;WAAC,CAAC,oCAAoC;
|
|
1
|
+
{"version":3,"file":"browser-controller.js","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"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"}
|
package/dist/browser-plugin.d.ts
CHANGED
|
@@ -7,13 +7,14 @@ type Library = CdpLauncher;
|
|
|
7
7
|
type LaunchResult = LaunchReturn;
|
|
8
8
|
interface NewPageOptions {
|
|
9
9
|
}
|
|
10
|
-
interface LaunchBrowserOptions {
|
|
10
|
+
export interface LaunchBrowserOptions {
|
|
11
11
|
browserType: "chrome" | "firefox";
|
|
12
12
|
useIncognitoPages: boolean;
|
|
13
13
|
proxyUrl?: string;
|
|
14
14
|
ignoreHttpsErrors: boolean;
|
|
15
15
|
headless?: boolean;
|
|
16
16
|
executablePath?: string;
|
|
17
|
+
useExperimentalFingerprints?: boolean;
|
|
17
18
|
}
|
|
18
19
|
export default class CDPBrowserPlugin extends BrowserPlugin<Library, LaunchBrowserOptions, LaunchResult, NewPageOptions, NewPageResult> {
|
|
19
20
|
/**
|
|
@@ -61,6 +62,7 @@ export default class CDPBrowserPlugin extends BrowserPlugin<Library, LaunchBrows
|
|
|
61
62
|
* @private
|
|
62
63
|
*/
|
|
63
64
|
private _connectWithRetry;
|
|
65
|
+
private _isPortAvailable;
|
|
64
66
|
}
|
|
65
67
|
export {};
|
|
66
68
|
//# sourceMappingURL=browser-plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-plugin.d.ts","sourceRoot":"","sources":["../src/browser-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAO,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-plugin.d.ts","sourceRoot":"","sources":["../src/browser-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAO,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,KAAK,OAAO,GAAG,WAAW,CAAC;AAC3B,KAAK,YAAY,GAAG,YAAY,CAAC;AACjC,UAAU,cAAc;CAAI;AAC5B,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,aAAa,CACvD,OAAO,EACP,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,CAChB;IACG;OACG;cACa,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzD;;;;OAIG;IACH,SAAS,CAAC,uBAAuB,CAC7B,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,GACzG,OAAO;IAKV;;;;OAIG;cACa,OAAO,CACnB,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,GACzG,OAAO,CAAC,YAAY,CAAC;IA4CxB;;;;OAIG;IAGH,SAAS,CAAC,iBAAiB,IAAI,oBAAoB;IAMnD;;;;OAIG;YACW,cAAc;IA4B5B;;;;OAIG;YACW,YAAY;IAmB1B;;;;OAIG;YACW,aAAa;IAuB3B;;;;OAIG;YACW,iBAAiB;YAwCjB,gBAAgB;CAWjC"}
|
package/dist/browser-plugin.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import net from 'net';
|
|
2
2
|
import { BrowserPlugin, log } from 'crawlee';
|
|
3
3
|
import CDPBrowserController from './browser-controller.js';
|
|
4
|
+
import { launchChromeBrowserWithNewProfile } from './browser-process/browser.js';
|
|
4
5
|
import { CdpLauncher } from './launcher-wrap.js';
|
|
5
6
|
import { anonymizeProxySugar } from './proxy/anonymize-proxy.js';
|
|
6
|
-
import { launchChromeBrowserWithNewProfile } from './browser-process/browser.js';
|
|
7
7
|
export default class CDPBrowserPlugin extends BrowserPlugin {
|
|
8
8
|
/**
|
|
9
9
|
*/
|
|
@@ -25,6 +25,11 @@ export default class CDPBrowserPlugin extends BrowserPlugin {
|
|
|
25
25
|
* @private
|
|
26
26
|
*/
|
|
27
27
|
async _launch(launchContext) {
|
|
28
|
+
const debuggingPort = await this._findFreePort(9233);
|
|
29
|
+
// Add port availability check
|
|
30
|
+
if (!(await this._isPortAvailable(debuggingPort))) {
|
|
31
|
+
throw new Error(`Port ${debuggingPort} is already in use`);
|
|
32
|
+
}
|
|
28
33
|
const { launchOptions, useIncognitoPages, proxyUrl } = launchContext;
|
|
29
34
|
if (!launchOptions.browserType) {
|
|
30
35
|
launchOptions.browserType = "chrome";
|
|
@@ -36,7 +41,6 @@ export default class CDPBrowserPlugin extends BrowserPlugin {
|
|
|
36
41
|
if (anonymizedProxyUrl) {
|
|
37
42
|
launchOptions.proxyUrl = anonymizedProxyUrl;
|
|
38
43
|
}
|
|
39
|
-
const debuggingPort = await this._findFreePort(9233);
|
|
40
44
|
const browserProcess = await this._launchBrowser(debuggingPort, launchOptions);
|
|
41
45
|
log.debug("browserProcess", browserProcess);
|
|
42
46
|
try {
|
|
@@ -73,11 +77,11 @@ export default class CDPBrowserPlugin extends BrowserPlugin {
|
|
|
73
77
|
* @private
|
|
74
78
|
*/
|
|
75
79
|
async _launchBrowser(debuggingPort, launchOptions) {
|
|
76
|
-
const { proxyUrl, browserType, ignoreHttpsErrors = true, headless, executablePath } = launchOptions;
|
|
80
|
+
const { proxyUrl, browserType, ignoreHttpsErrors = true, headless, executablePath, useExperimentalFingerprints } = launchOptions;
|
|
77
81
|
let browserProcess;
|
|
78
82
|
switch (browserType) {
|
|
79
83
|
case "chrome": {
|
|
80
|
-
browserProcess = await launchChromeBrowserWithNewProfile({ debuggingPort, anonymizedProxyUrl: proxyUrl, ignoreHttpsErrors, headless, executablePath });
|
|
84
|
+
browserProcess = await launchChromeBrowserWithNewProfile({ debuggingPort, anonymizedProxyUrl: proxyUrl, ignoreHttpsErrors, headless, executablePath, useExperimentalFingerprints });
|
|
81
85
|
break;
|
|
82
86
|
}
|
|
83
87
|
default: {
|
|
@@ -153,24 +157,47 @@ export default class CDPBrowserPlugin extends BrowserPlugin {
|
|
|
153
157
|
async _connectWithRetry(port, maxRetries, retryDelay) {
|
|
154
158
|
let attempt = 0;
|
|
155
159
|
let lastError = null;
|
|
160
|
+
// Add delay before first attempt to allow browser to fully start
|
|
161
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
156
162
|
while (attempt < maxRetries) {
|
|
157
163
|
try {
|
|
158
164
|
const cdpLauncher = new CdpLauncher();
|
|
159
|
-
const browser = await
|
|
165
|
+
const browser = await Promise.race([
|
|
166
|
+
cdpLauncher.launch({ port }),
|
|
167
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Launch timeout')), 10000)),
|
|
168
|
+
]);
|
|
160
169
|
log.info(`Connected to browser on port ${port} on attempt ${attempt + 1}`);
|
|
161
170
|
return browser;
|
|
162
171
|
}
|
|
163
172
|
catch (error) {
|
|
164
173
|
attempt++;
|
|
165
|
-
|
|
166
|
-
|
|
174
|
+
if (error instanceof Error) {
|
|
175
|
+
lastError = error;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
lastError = new Error(String(error));
|
|
179
|
+
}
|
|
180
|
+
log.warning(`Failed to connect to browser on attempt ${attempt}. Error: ${lastError.message}`);
|
|
167
181
|
if (attempt < maxRetries) {
|
|
168
|
-
|
|
182
|
+
// Exponential backoff
|
|
183
|
+
const backoffDelay = retryDelay * 2 ** (attempt - 1);
|
|
184
|
+
await new Promise(resolve => setTimeout(resolve, backoffDelay));
|
|
169
185
|
}
|
|
170
186
|
}
|
|
171
187
|
}
|
|
172
|
-
|
|
188
|
+
// Always throw the wrapped error with our standard message
|
|
173
189
|
throw new Error(`Failed to connect to browser after ${maxRetries} attempts.`);
|
|
174
190
|
}
|
|
191
|
+
async _isPortAvailable(port) {
|
|
192
|
+
return new Promise((resolve) => {
|
|
193
|
+
const tester = net.createServer()
|
|
194
|
+
.once('error', () => resolve(false))
|
|
195
|
+
.once('listening', () => {
|
|
196
|
+
tester.once('close', () => resolve(true))
|
|
197
|
+
.close();
|
|
198
|
+
})
|
|
199
|
+
.listen(port);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
175
202
|
}
|
|
176
203
|
//# sourceMappingURL=browser-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-plugin.js","sourceRoot":"","sources":["../src/browser-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAE,aAAa,EAAE,GAAG,EAAsB,MAAM,SAAS,CAAC;AAGjE,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-plugin.js","sourceRoot":"","sources":["../src/browser-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export interface LaunchBrowserOptions {
|
|
|
7
7
|
ignoreHttpsErrors?: boolean;
|
|
8
8
|
headless?: boolean;
|
|
9
9
|
executablePath?: string;
|
|
10
|
+
useExperimentalFingerprints?: boolean;
|
|
10
11
|
}
|
|
11
12
|
export declare const launchBrowserWithNewProfile: (executablePath: string, options?: LaunchBrowserOptions) => Promise<BrowserProcess>;
|
|
12
13
|
export declare const createTempUserDataDir: () => Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser-process/browser.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser-process/browser.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,MAAM,WAAW,oBAAoB;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,eAAO,MAAM,2BAA2B,mBACpB,MAAM,YACb,oBAAoB,KAC9B,OAAO,CAAC,cAAc,CAkExB,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAa,OAAO,CAAC,MAAM,CAI5D,CAAC;AAEF,eAAO,MAAM,iCAAiC,aAAmB,oBAAoB,4BAKpF,CAAC"}
|
|
@@ -6,8 +6,9 @@ import { log } from '@crawlee/core';
|
|
|
6
6
|
import { getChromeExecutablePath } from './get-chrome-executable.js';
|
|
7
7
|
import { BrowserProcess } from './process.js';
|
|
8
8
|
import { createChromeProfile } from '../browser-profiles/index.js';
|
|
9
|
+
const EXTENSION_PATH = path.resolve(import.meta.dirname, '../fingerprinting/all-fingerprint-defender');
|
|
9
10
|
export const launchBrowserWithNewProfile = async (executablePath, options = {}) => {
|
|
10
|
-
const { anonymizedProxyUrl, debuggingPort, windowWidth = 1920, windowHeight = 1080, ignoreHttpsErrors, headless, } = options;
|
|
11
|
+
const { anonymizedProxyUrl, debuggingPort, windowWidth = 1920, windowHeight = 1080, ignoreHttpsErrors, headless, useExperimentalFingerprints = false, } = options;
|
|
11
12
|
try {
|
|
12
13
|
const userDataDir = await createTempUserDataDir();
|
|
13
14
|
await createChromeProfile(userDataDir);
|
|
@@ -22,7 +23,12 @@ export const launchBrowserWithNewProfile = async (executablePath, options = {})
|
|
|
22
23
|
'--no-default-browser-check',
|
|
23
24
|
'--disable-infobars',
|
|
24
25
|
'--disable-features=IsolateOrigins,site-per-process',
|
|
26
|
+
'--disable-gpu',
|
|
25
27
|
];
|
|
28
|
+
if (useExperimentalFingerprints) {
|
|
29
|
+
browserArgs.push(`--disable-extensions-except=${EXTENSION_PATH}`);
|
|
30
|
+
browserArgs.push(`--load-extension=${EXTENSION_PATH}`);
|
|
31
|
+
}
|
|
26
32
|
if (anonymizedProxyUrl) {
|
|
27
33
|
browserArgs.push(`--proxy-server=${anonymizedProxyUrl}`);
|
|
28
34
|
}
|
|
@@ -35,7 +41,6 @@ export const launchBrowserWithNewProfile = async (executablePath, options = {})
|
|
|
35
41
|
}
|
|
36
42
|
if (headless) {
|
|
37
43
|
browserArgs.push('--headless=new');
|
|
38
|
-
browserArgs.push('--disable-gpu');
|
|
39
44
|
}
|
|
40
45
|
log.debug(`Launching browser with user data dir: ${userDataDir}`);
|
|
41
46
|
log.debug('browserArgs', browserArgs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser-process/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser-process/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/crawler.d.ts
CHANGED
|
@@ -1,23 +1,46 @@
|
|
|
1
1
|
import type { Dictionary } from '@crawlee/types';
|
|
2
|
-
import type
|
|
3
|
-
import type { BrowserCrawlerOptions, BrowserCrawlingContext, BrowserHook, BrowserPoolOptions, BrowserRequestHandler, GetUserDataFromRequest, LoadedContext, RouterRoutes } from 'crawlee';
|
|
2
|
+
import type { BrowserCrawlerOptions, BrowserCrawlingContext, BrowserHook, BrowserRequestHandler, LaunchContext, LoadedContext, RouterRoutes, RouterHandler } from 'crawlee';
|
|
4
3
|
import { BrowserCrawler, Configuration } from 'crawlee';
|
|
5
4
|
import type CDPBrowserController from './browser-controller.js';
|
|
5
|
+
import CDPBrowserPlugin from './browser-plugin.js';
|
|
6
|
+
import { CdpLauncher, LaunchReturn } from './launcher-wrap.js';
|
|
6
7
|
import type CdpPage from './page.js';
|
|
7
8
|
import type { GotoOptions } from './page.js';
|
|
8
|
-
|
|
9
|
+
import type CDPCrawler from './index.js';
|
|
10
|
+
interface LaunchOptions {
|
|
11
|
+
headless?: boolean;
|
|
12
|
+
useExperimentalFingerprints?: boolean;
|
|
13
|
+
windowWidth?: number;
|
|
14
|
+
windowHeight?: number;
|
|
15
|
+
ignoreHttpsErrors?: boolean;
|
|
16
|
+
executablePath?: string;
|
|
17
|
+
browserType?: string;
|
|
18
|
+
useIncognitoPages?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface CDPPluginOptions {
|
|
21
|
+
browserPlugins: [CDPBrowserPlugin];
|
|
22
|
+
}
|
|
23
|
+
export type CDPGotoOptions = Parameters<CdpPage['goto']>[1];
|
|
24
|
+
export interface CDPCrawlingContext<UserData extends Dictionary = Dictionary> extends BrowserCrawlingContext<typeof CDPCrawler, CdpPage, Response, CDPBrowserController, UserData> {
|
|
25
|
+
}
|
|
26
|
+
export interface CDPLaunchContext extends Partial<Omit<LaunchContext<CdpLauncher, LaunchOptions, LaunchReturn, {}, CdpPage>, 'launchOptions'>> {
|
|
27
|
+
launchOptions?: LaunchOptions;
|
|
9
28
|
}
|
|
10
29
|
export interface CDPHook extends BrowserHook<CDPCrawlingContext, CDPGotoOptions> {
|
|
11
30
|
}
|
|
12
31
|
export interface CDPRequestHandler extends BrowserRequestHandler<LoadedContext<CDPCrawlingContext>> {
|
|
32
|
+
(ctx: CDPCrawlingContext): Promise<void> | void;
|
|
13
33
|
}
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
34
|
+
export interface CDPCrawlerOptions extends BrowserCrawlerOptions<CDPCrawlingContext, CDPPluginOptions> {
|
|
35
|
+
launchContext?: CDPLaunchContext;
|
|
36
|
+
requestHandler?: CDPRequestHandler;
|
|
37
|
+
}
|
|
38
|
+
export default class Crawler extends BrowserCrawler<CDPPluginOptions, LaunchOptions, CDPCrawlingContext> {
|
|
39
|
+
private readonly crawlerOptions;
|
|
18
40
|
readonly config: Configuration;
|
|
19
|
-
constructor(
|
|
41
|
+
constructor(crawlerOptions?: CDPCrawlerOptions, config?: Configuration);
|
|
20
42
|
protected _navigationHandler(crawlingContext: CDPCrawlingContext, gotoOptions: GotoOptions): Promise<any>;
|
|
21
43
|
}
|
|
22
|
-
export declare function createCDPRouter<Context extends CDPCrawlingContext = CDPCrawlingContext, UserData extends Dictionary =
|
|
44
|
+
export declare function createCDPRouter<Context extends CDPCrawlingContext = CDPCrawlingContext, UserData extends Dictionary = Context extends CDPCrawlingContext<infer U> ? U : never>(routes?: RouterRoutes<Context, UserData>): RouterHandler<Context>;
|
|
45
|
+
export {};
|
|
23
46
|
//# sourceMappingURL=crawler.d.ts.map
|
package/dist/crawler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crawler.d.ts","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"crawler.d.ts","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5K,OAAO,EAAE,cAAc,EAAE,aAAa,EAAU,MAAM,SAAS,CAAC;AAEhE,OAAO,KAAK,oBAAoB,MAAM,yBAAyB,CAAC;AAChE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAEzC,UAAU,aAAa;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAAG,cAAc,EAAE,CAAC,gBAAgB,CAAC,CAAA;CAAE;AACxE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAG5D,MAAM,WAAW,kBAAkB,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CACxE,SAAQ,sBAAsB,CAC1B,OAAO,UAAU,EACjB,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,QAAQ,CACX;CAAG;AACR,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;IAC1I,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,MAAM,WAAW,OAAQ,SAAQ,WAAW,CAAC,kBAAkB,EAAE,cAAc,CAAC;CAAG;AACnF,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC/F,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACnD;AACD,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAClG,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,cAAc,CAAC,EAAE,iBAAiB,CAAC;CACtC;AAGD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,cAAc,CAC/C,gBAAgB,EAChB,aAAa,EACb,kBAAkB,CACrB;IAGO,OAAO,CAAC,QAAQ,CAAC,cAAc;aACb,MAAM;gBADP,cAAc,GAAE,iBAAsB,EACrC,MAAM,gBAAkC;cA+CrC,kBAAkB,CAAC,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;CAK3H;AAED,wBAAgB,eAAe,CAC3B,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,EACvD,QAAQ,SAAS,UAAU,GAAG,OAAO,SAAS,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,EACvF,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAElE"}
|
package/dist/crawler.js
CHANGED
|
@@ -3,10 +3,12 @@ import CDPBrowserPlugin from './browser-plugin.js';
|
|
|
3
3
|
import { CdpLauncher } from './launcher-wrap.js';
|
|
4
4
|
// Implement the Crawler class with proper typing
|
|
5
5
|
export default class Crawler extends BrowserCrawler {
|
|
6
|
-
constructor(
|
|
7
|
-
|
|
6
|
+
constructor(
|
|
7
|
+
// @ts-expect-error Fix types
|
|
8
|
+
crawlerOptions = {}, config = Configuration.getGlobalConfig()) {
|
|
9
|
+
const { launchContext = {}, headless = false, browserPoolOptions: poolOptions = {}, ...browserCrawlerOptions } = crawlerOptions;
|
|
8
10
|
const browserPoolOptions = {
|
|
9
|
-
...
|
|
11
|
+
...poolOptions,
|
|
10
12
|
};
|
|
11
13
|
if (launchContext.proxyUrl) {
|
|
12
14
|
throw new Error('CDPCrawlerOptions.launchContext.proxyUrl is not allowed. Use CDPCrawlerOptions.proxyConfiguration instead.');
|
|
@@ -23,14 +25,22 @@ export default class Crawler extends BrowserCrawler {
|
|
|
23
25
|
launchContext.launchOptions ?? (launchContext.launchOptions = {});
|
|
24
26
|
launchContext.launchOptions.headless = headless;
|
|
25
27
|
}
|
|
26
|
-
//
|
|
28
|
+
// Update the plugin initialization
|
|
27
29
|
browserPoolOptions.browserPlugins = [
|
|
28
|
-
new CDPBrowserPlugin(new CdpLauncher(), launchContext), //
|
|
30
|
+
new CDPBrowserPlugin(new CdpLauncher(), launchContext), // Temporary type assertion until we fix the underlying types
|
|
29
31
|
];
|
|
32
|
+
if (launchContext.launchOptions?.useExperimentalFingerprints) {
|
|
33
|
+
browserPoolOptions.useFingerprints = false;
|
|
34
|
+
}
|
|
30
35
|
// Pass the options and config to the parent class constructor
|
|
31
36
|
// @TODO:
|
|
32
|
-
// @ts-expect-error Fix types
|
|
33
37
|
super({ ...browserCrawlerOptions, launchContext, browserPoolOptions }, config);
|
|
38
|
+
Object.defineProperty(this, "crawlerOptions", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
configurable: true,
|
|
41
|
+
writable: true,
|
|
42
|
+
value: crawlerOptions
|
|
43
|
+
});
|
|
34
44
|
Object.defineProperty(this, "config", {
|
|
35
45
|
enumerable: true,
|
|
36
46
|
configurable: true,
|
package/dist/crawler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crawler.js","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crawler.js","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGhE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AA0C/D,iDAAiD;AACjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,cAIpC;IACG;IACI,6BAA6B;IACZ,iBAAoC,EAAE,EACrC,SAAS,aAAa,CAAC,eAAe,EAAE;QAE1D,MAAM,EACF,aAAa,GAAG,EAAsB,EACtC,QAAQ,GAAG,KAAK,EAChB,kBAAkB,EAAE,WAAW,GAAG,EAAE,EACpC,GAAG,qBAAqB,EAC3B,GAAG,cAAc,CAAC;QAEnB,MAAM,kBAAkB,GAAG;YACvB,GAAG,WAAW;SACjB,CAAC;QAEF,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;QAClI,CAAC;QAED,yDAAyD;QACzD,IAAI,kBAAkB,CAAC,cAAc,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC5G,CAAC;QAED,iCAAiC;QACjC,kBAAkB,CAAC,cAAc,GAAG;YAChC,IAAI,gBAAgB,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,0BAA0B;SACtE,CAAC;QAEF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACnB,aAAa,CAAC,aAAa,KAA3B,aAAa,CAAC,aAAa,GAAK,EAAE,EAAC;YACnC,aAAa,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAmB,CAAC;QAC/D,CAAC;QAED,mCAAmC;QACnC,kBAAkB,CAAC,cAAc,GAAG;YAChC,IAAI,gBAAgB,CAAC,IAAI,WAAW,EAAE,EAAE,aAAoB,CAAC,EAAE,6DAA6D;SAC/H,CAAC;QAEF,IAAI,aAAa,CAAC,aAAa,EAAE,2BAA2B,EAAE,CAAC;YAC3D,kBAAkB,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/C,CAAC;QAED,8DAA8D;QAC9D,SAAS;QACT,KAAK,CAAC,EAAE,GAAG,qBAAqB,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC;QA5C/E;;;;mBAAiB,cAAc;WAAwB;QACvD;;;;mBAAkB,MAAM;WAAkC;IA4C9D,CAAC;IAED,wEAAwE;IACrD,KAAK,CAAC,kBAAkB,CAAC,eAAmC,EAAE,WAAwB;QACrG,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC;QAEjC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,yBAAyB;IACzF,CAAC;CACJ;AAED,MAAM,UAAU,eAAe,CAG7B,MAAwC;IACtC,OAAO,MAAM,CAAC,MAAM,CAAU,MAAM,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-16ff15da.d.ts","sourceRoot":"","sources":["../../../../src/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
if (!(ignoredSites = ["https://www.google.com/maps", "https://accounts.google.com", "www.figma.com", "www.canva.com", "designer.microsoft.com", "create.vista.com", "console.aws.amazon.com", "www.coze.com"].some(e => window.location.href.startsWith(e) || window.location.host.endsWith(e)))) {
|
|
2
|
+
document.documentElement.setAttribute("data-afd-extension-id", chrome.runtime.id);
|
|
3
|
+
const e = "disabled:" + window.location.host;
|
|
4
|
+
chrome.storage.sync.get([e], function (t) { t[e] && (document.documentElement.setAttribute("data-afd-disabled", "true"), window.dispatchEvent(new Event("afd-disabled"))); }), window.addEventListener("chrome.runtime.sendMessage", function (t) { const o = t.detail; chrome.runtime.sendMessage(o, function () { }); });
|
|
5
|
+
}
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=chunk-16ff15da.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-16ff15da.js","sourceRoot":"","sources":["../../../../src/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js"],"names":[],"mappings":"AAAA,IAAG,CAAC,CAAC,YAAY,GAAC,CAAC,6BAA6B,EAAC,6BAA6B,EAAC,eAAe,EAAC,eAAe,EAAC,wBAAwB,EAAC,kBAAkB,EAAC,wBAAwB,EAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC;IAAA,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,uBAAuB,EAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAAA,MAAM,CAAC,GAAC,WAAW,GAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,UAAS,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,mBAAmB,EAAC,MAAM,CAAC,EAAC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA,CAAA,CAAC,CAAC,EAAC,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,EAAC,UAAS,CAAC,IAAE,MAAM,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAA,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAC,cAAW,CAAC,CAAC,CAAA,CAAA,CAAC,CAAC,CAAA;AAAA,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-1a1456ec.d.ts","sourceRoot":"","sources":["../../../../src/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { d as I, o as n, c as a, b as i, _ as N, e as v, f as z, x as H, y as C, a as o, i as m, j as L, t as d, u as l, D as P, z as $, S as W, F as x, k as B, m as E, q as U, l as q, p as R, A as G, B as j, v as J } from "./chunk-3a7b59dd.js";
|
|
2
|
+
const K = !0, Q = { class: "toggle-button" }, X = { key: 0, class: "on circle" }, Y = { key: 1, class: "off circle" }, Z = I({ __name: "ToggleButton", props: { isOn: { type: Boolean, default: !1 } }, setup(u) { return (c, S) => (n(), a("div", Q, [u.isOn ? (n(), a("div", X)) : i("", !0), u.isOn ? i("", !0) : (n(), a("div", Y))])); } });
|
|
3
|
+
const ee = N(Z, [["__scopeId", "data-v-ee74a099"]]), D = u => (G("data-v-053380fd"), u = u(), j(), u), te = { class: "header" }, se = { class: "title" }, oe = { class: "line space-between" }, ne = { class: "description" }, ae = { class: "line space-between" }, ce = { class: "description2" }, ie = ["href"], le = { class: "content" }, de = { class: "line space-between" }, re = D(() => o("span", { class: "option-icon" }, "⚙", -1)), ue = D(() => o("span", null, "⟳", -1)), _e = [ue], ve = { key: 0, class: "sub-content" }, he = { class: "line line-title" }, ge = { class: "host-line" }, pe = { class: "site-domain" }, fe = { key: 0, class: "site-icon detected" }, me = ["src"], be = D(() => o("span", { style: { "line-height": "10px", "padding-bottom": "6px", "font-size": "2.3rem", "margin-right": "4px" } }, "⟳", -1)), ye = { key: 2, class: "sub-content" }, ke = { class: "line line-title" }, we = { class: "detected-list" }, Ce = { key: 0, class: "tag d-audio" }, De = { key: 1, class: "tag d-canvas" }, Se = { key: 2, class: "tag d-font" }, Me = { key: 3, class: "tag d-webgl" }, Ae = { class: "sub-content" }, xe = { class: "line line-title" }, Be = { class: "total-detected" }, Ie = { key: 3, class: "sub-content" }, Ne = { key: 0, class: "line line-title" }, Oe = { key: 1, class: "canvas-list" }, Ve = { class: "canvas-item" }, Fe = { class: "canvas-desc" }, Te = ["src"], ze = I({ __name: "Popup", setup(u) { const c = window.chrome, S = async () => { await c.storage.local.set({ reload: !0 }), c.runtime.reload(); }, b = v(""), _ = v({}), M = v(!1), g = v([]), p = v([]), y = v(0), O = () => { c.tabs.query({ active: !0, currentWindow: !0 }, s => { const t = s[0]; t && t.url && t.url.startsWith("http") && (c.tabs.reload(t.id), window.close()); }); }; function k(s) { _.value[s] === void 0 && (_.value[s] = !1, c.runtime.sendMessage({ action: "getDisabled", host: s }, function (t) { _.value[s] = t.disabled; })); } let V = E(300); c.storage.sync.onChanged.addListener(s => { var t; (t = s.totalDetected) != null && t.newValue && V(() => { y.value = s.totalDetected.newValue; }); }), z(() => { c.tabs.query({ active: !0, currentWindow: !0 }, s => { const t = s[0]; if (t && t.url && t.url.startsWith("http")) {
|
|
4
|
+
const e = new URL(t.url);
|
|
5
|
+
b.value = e.host, k(e.host), t.id && (H(t.id, t.incognito).then(r => { for (const w of r)
|
|
6
|
+
(w.host === e.host || w.origins.includes(e.host)) && k(w.host); g.value = r; }), c.runtime.sendMessage({ action: "getHosts", tabID: t.id }, r => { r && ((!r.hosts || !r.hosts.includes(e.host)) && r.hosts.push(e.host), p.value = r.hosts, p.value.forEach(k)); }));
|
|
7
|
+
} c.storage.sync.get("totalDetected", e => { y.value = e.totalDetected || 0; }); }); }); const F = async (s) => { c.runtime.sendMessage({ action: "setDisabled", host: s, disabled: !_.value[s] }, () => { _.value[s] = !_.value[s], M.value = !0; }); }, T = s => { const t = s.target; window.open("about:blank").document.write("<img src='" + t.src + "' alt='from canvas'/>"); }, A = C(() => { const s = [], t = new Set; for (const e of g.value)
|
|
8
|
+
for (const r of e.detections)
|
|
9
|
+
t.add(e.host); if (p.value.length > 0)
|
|
10
|
+
for (const e of p.value)
|
|
11
|
+
s.push({ host: e, detected: t.has(e) }); return s; }), h = C(() => { const s = new Set; for (const t of g.value)
|
|
12
|
+
for (const e of t.detections)
|
|
13
|
+
s.add(e.type); return s; }), f = C(() => { const s = []; for (const t of g.value)
|
|
14
|
+
for (const e of t.detections)
|
|
15
|
+
e.type === "CANVAS" && s.push(e); return s.reverse(); }); return (s, t) => (n(), a("main", null, [o("div", te, [m(L, { width: 48 }), o("div", se, [o("div", oe, [o("div", ne, d(l(c).i18n.getMessage("ExtensionName")), 1)]), o("div", ae, [o("div", ce, [o("a", { href: l(U), target: "_blank", rel: "noopener noreferrer" }, d(l(c).i18n.getMessage("MakeBy")), 9, ie)]), m(P)])])]), o("div", le, [o("div", de, [o("button", { class: "btn", onClick: t[0] || (t[0] = e => l(c).runtime.openOptionsPage()) }, [re, $(" " + d(l(c).i18n.getMessage("MoreOptions")), 1)]), l(K) ? i("", !0) : (n(), a("button", { key: 0, class: "btn reload-btn", onClick: S }, _e)), m(W, { "font-size": "1.4rem" })]), b.value ? (n(), a("div", ve, [o("div", he, d(l(c).i18n.getMessage("PreventFingerprintingOn")), 1), o("div", ge, [A.value ? (n(!0), a(x, { key: 0 }, B(A.value, e => (n(), a("div", { key: e.host, class: "line interactive" }, [o("span", pe, [e.detected ? (n(), a("div", fe, "!")) : i("", !0), o("img", { src: l(q)(e.host), class: "site-icon", loading: "lazy" }, null, 8, me), o("span", null, d(e.host), 1)]), m(ee, { "is-on": !_.value[e.host], onClick: r => F(e.host) }, null, 8, ["is-on", "onClick"])]))), 128)) : i("", !0)])])) : i("", !0), M.value ? (n(), a("button", { key: 1, class: "btn refresh-btn zoom-in-effect", onClick: O }, [be, o("span", null, d(l(c).i18n.getMessage("RefreshThisPage")), 1)])) : i("", !0), h.value.size ? (n(), a("div", ye, [o("div", ke, d(l(c).i18n.getMessage("DetectedAndObfuscated")), 1), o("div", we, [h.value.has("AUDIO") ? (n(), a("div", Ce, "Audio")) : i("", !0), h.value.has("CANVAS") ? (n(), a("div", De, "Canvas")) : i("", !0), h.value.has("FONT") ? (n(), a("div", Se, "Font")) : i("", !0), h.value.has("WEBGL") ? (n(), a("div", Me, "WebGL")) : i("", !0)])])) : i("", !0), o("div", Ae, [o("div", xe, d(l(c).i18n.getMessage("NumberOfFingerprints")), 1), o("div", Be, d(y.value.toLocaleString()), 1)]), f.value && f.value.length > 0 ? (n(), a("div", Ie, [b.value ? (n(), a("div", Ne, d(l(c).i18n.getMessage("CanvasFingerprint")), 1)) : i("", !0), f.value ? (n(), a("div", Oe, [(n(!0), a(x, null, B(f.value, e => (n(), a("div", Ve, [o("div", Fe, [o("span", null, d(l(R)(e.occurredAt)), 1), o("span", null, d(e.canvasSize), 1)]), e.type === "CANVAS" ? (n(), a("img", { key: 0, onClick: T, class: "canvas", src: e.canvas }, null, 8, Te)) : i("", !0)]))), 256))])) : i("", !0)])) : i("", !0)])])); } });
|
|
16
|
+
const He = N(ze, [["__scopeId", "data-v-053380fd"]]);
|
|
17
|
+
J(He).mount("#app");
|
|
18
|
+
//# sourceMappingURL=chunk-1a1456ec.js.map
|