jumpy-lion 0.0.24 → 0.0.26
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-plugin.d.ts +7 -7
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +132 -61
- package/dist/browser-plugin.js.map +1 -1
- package/dist/fingerprinting/all-fingerprint-defender/_locales/en/messages.json +95 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js +1 -7
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js +1 -18
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js +1 -1258
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js +1 -76
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js +1 -15
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js +1 -77
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js +1 -19
- package/dist/fingerprinting/all-fingerprint-defender/assets/debounce-09920c81.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/options-fe2fb5aa.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/popup-1886d2ef.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-128.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-16.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-24.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-32-disabled.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-32.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-48.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/manifest.json +83 -0
- package/dist/fingerprinting/all-fingerprint-defender/options.html +17 -0
- package/dist/fingerprinting/all-fingerprint-defender/popup.html +23 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -3
package/dist/browser-plugin.d.ts
CHANGED
|
@@ -17,6 +17,13 @@ export interface LaunchBrowserOptions {
|
|
|
17
17
|
useExperimentalFingerprints?: boolean;
|
|
18
18
|
}
|
|
19
19
|
export default class CDPBrowserPlugin extends BrowserPlugin<Library, LaunchBrowserOptions, LaunchResult, NewPageOptions, NewPageResult> {
|
|
20
|
+
private static readonly PORT_RANGE;
|
|
21
|
+
private static usedPorts;
|
|
22
|
+
private static lastAssignedPort;
|
|
23
|
+
private static portLock;
|
|
24
|
+
private getNextAvailablePort;
|
|
25
|
+
private _isPortAvailable;
|
|
26
|
+
private releasePort;
|
|
20
27
|
/**
|
|
21
28
|
*/
|
|
22
29
|
protected _addProxyToLaunchOptions(): Promise<void>;
|
|
@@ -50,19 +57,12 @@ export default class CDPBrowserPlugin extends BrowserPlugin<Library, LaunchBrows
|
|
|
50
57
|
* @private
|
|
51
58
|
*/
|
|
52
59
|
private _waitForPort;
|
|
53
|
-
/**
|
|
54
|
-
* Finds a free port to use.
|
|
55
|
-
*
|
|
56
|
-
* @private
|
|
57
|
-
*/
|
|
58
|
-
private _findFreePort;
|
|
59
60
|
/**
|
|
60
61
|
* Tries to connect to the browser using CDP with retries.
|
|
61
62
|
*
|
|
62
63
|
* @private
|
|
63
64
|
*/
|
|
64
65
|
private _connectWithRetry;
|
|
65
|
-
private _isPortAvailable;
|
|
66
66
|
}
|
|
67
67
|
export {};
|
|
68
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;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;
|
|
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,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAGhC;IAEF,OAAO,CAAC,MAAM,CAAC,SAAS,CAAqB;IAC7C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAuC;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;YAElB,oBAAoB;YAsDpB,gBAAgB;IA6B9B,OAAO,CAAC,WAAW;IAUnB;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;IAgDxB;;;;OAIG;IAGH,SAAS,CAAC,iBAAiB,IAAI,oBAAoB;IAMnD;;;;OAIG;YACW,cAAc;IA4B5B;;;;OAIG;YACW,YAAY;IAmB1B;;;;OAIG;YACW,iBAAiB;CAuClC"}
|
package/dist/browser-plugin.js
CHANGED
|
@@ -4,7 +4,80 @@ import CDPBrowserController from './browser-controller.js';
|
|
|
4
4
|
import { launchChromeBrowserWithNewProfile } from './browser-process/browser.js';
|
|
5
5
|
import { CdpLauncher } from './launcher-wrap.js';
|
|
6
6
|
import { anonymizeProxySugar } from './proxy/anonymize-proxy.js';
|
|
7
|
-
|
|
7
|
+
class CDPBrowserPlugin extends BrowserPlugin {
|
|
8
|
+
async getNextAvailablePort() {
|
|
9
|
+
const maxAttempts = 100; // Prevent infinite loops
|
|
10
|
+
let attempts = 0;
|
|
11
|
+
while (attempts < maxAttempts) {
|
|
12
|
+
// Wait if another instance is currently assigning a port
|
|
13
|
+
while (CDPBrowserPlugin.portLock) {
|
|
14
|
+
await new Promise(resolve => setTimeout(resolve, 100 + Math.random() * 100));
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
// Set lock before port assignment
|
|
18
|
+
CDPBrowserPlugin.portLock = true;
|
|
19
|
+
// Increment the last assigned port, wrapping around if necessary
|
|
20
|
+
CDPBrowserPlugin.lastAssignedPort++;
|
|
21
|
+
if (CDPBrowserPlugin.lastAssignedPort > CDPBrowserPlugin.PORT_RANGE.max) {
|
|
22
|
+
CDPBrowserPlugin.lastAssignedPort = CDPBrowserPlugin.PORT_RANGE.min;
|
|
23
|
+
}
|
|
24
|
+
const candidatePort = CDPBrowserPlugin.lastAssignedPort;
|
|
25
|
+
// Skip if port is already tracked as in use
|
|
26
|
+
if (CDPBrowserPlugin.usedPorts.has(candidatePort)) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
// Add random delay before checking port availability
|
|
30
|
+
await new Promise(resolve => setTimeout(resolve, 200 + Math.random() * 300));
|
|
31
|
+
// Check if port is actually available
|
|
32
|
+
if (await this._isPortAvailable(candidatePort)) {
|
|
33
|
+
CDPBrowserPlugin.usedPorts.add(candidatePort);
|
|
34
|
+
log.debug(`Reserved port ${candidatePort} for browser instance`);
|
|
35
|
+
return candidatePort;
|
|
36
|
+
}
|
|
37
|
+
// Add delay before next attempt if port was unavailable
|
|
38
|
+
await new Promise(resolve => setTimeout(resolve, 150 + Math.random() * 200));
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
// Always release the lock
|
|
42
|
+
CDPBrowserPlugin.portLock = false;
|
|
43
|
+
}
|
|
44
|
+
attempts++; // Increment attempts only once per full iteration
|
|
45
|
+
}
|
|
46
|
+
throw new Error('No available ports found in the configured range after maximum attempts');
|
|
47
|
+
}
|
|
48
|
+
async _isPortAvailable(port) {
|
|
49
|
+
return new Promise((resolve) => {
|
|
50
|
+
const server = net.createServer();
|
|
51
|
+
server.once('error', (_err) => {
|
|
52
|
+
server.close();
|
|
53
|
+
resolve(false);
|
|
54
|
+
});
|
|
55
|
+
server.once('listening', () => {
|
|
56
|
+
server.close();
|
|
57
|
+
resolve(true);
|
|
58
|
+
});
|
|
59
|
+
// Add timeout to prevent hanging
|
|
60
|
+
server.on('error', () => { });
|
|
61
|
+
setTimeout(() => {
|
|
62
|
+
server.close();
|
|
63
|
+
resolve(false);
|
|
64
|
+
}, 1000);
|
|
65
|
+
try {
|
|
66
|
+
server.listen(port, '127.0.0.1');
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
resolve(false);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
releasePort(port) {
|
|
74
|
+
if (CDPBrowserPlugin.usedPorts.has(port)) {
|
|
75
|
+
CDPBrowserPlugin.usedPorts.delete(port);
|
|
76
|
+
log.debug(`Released port ${port} back to pool`);
|
|
77
|
+
// Add delay after release to prevent immediate reuse
|
|
78
|
+
setTimeout(() => { }, 500);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
8
81
|
/**
|
|
9
82
|
*/
|
|
10
83
|
async _addProxyToLaunchOptions() {
|
|
@@ -25,39 +98,45 @@ export default class CDPBrowserPlugin extends BrowserPlugin {
|
|
|
25
98
|
* @private
|
|
26
99
|
*/
|
|
27
100
|
async _launch(launchContext) {
|
|
28
|
-
const debuggingPort = await this.
|
|
29
|
-
// Add port availability check
|
|
30
|
-
if (!(await this._isPortAvailable(debuggingPort))) {
|
|
31
|
-
throw new Error(`Port ${debuggingPort} is already in use`);
|
|
32
|
-
}
|
|
33
|
-
const { launchOptions, useIncognitoPages, proxyUrl } = launchContext;
|
|
34
|
-
if (!launchOptions.browserType) {
|
|
35
|
-
launchOptions.browserType = "chrome";
|
|
36
|
-
}
|
|
37
|
-
let browser;
|
|
38
|
-
launchOptions.useIncognitoPages = useIncognitoPages;
|
|
39
|
-
log.debug("Launch options", launchOptions);
|
|
40
|
-
const [anonymizedProxyUrl, close] = await anonymizeProxySugar(proxyUrl);
|
|
41
|
-
if (anonymizedProxyUrl) {
|
|
42
|
-
launchOptions.proxyUrl = anonymizedProxyUrl;
|
|
43
|
-
}
|
|
44
|
-
const browserProcess = await this._launchBrowser(debuggingPort, launchOptions);
|
|
45
|
-
log.debug("browserProcess", browserProcess);
|
|
101
|
+
const debuggingPort = await this.getNextAvailablePort();
|
|
46
102
|
try {
|
|
47
|
-
|
|
103
|
+
const { launchOptions, useIncognitoPages, proxyUrl } = launchContext;
|
|
104
|
+
if (!launchOptions.browserType) {
|
|
105
|
+
launchOptions.browserType = "chrome";
|
|
106
|
+
}
|
|
107
|
+
let browser;
|
|
108
|
+
launchOptions.useIncognitoPages = useIncognitoPages;
|
|
109
|
+
log.debug("Launch options", { ...launchOptions, debuggingPort });
|
|
110
|
+
const [anonymizedProxyUrl, close] = await anonymizeProxySugar(proxyUrl);
|
|
48
111
|
if (anonymizedProxyUrl) {
|
|
112
|
+
launchOptions.proxyUrl = anonymizedProxyUrl;
|
|
113
|
+
}
|
|
114
|
+
const browserProcess = await this._launchBrowser(debuggingPort, launchOptions);
|
|
115
|
+
log.debug("Browser process started", { pid: browserProcess.pid, debuggingPort });
|
|
116
|
+
try {
|
|
117
|
+
browser = await this._connectWithRetry(debuggingPort, 10, 4000);
|
|
118
|
+
// Add both cleanup handlers
|
|
49
119
|
browser.on('close', async () => {
|
|
50
|
-
|
|
120
|
+
this.releasePort(debuggingPort);
|
|
121
|
+
if (anonymizedProxyUrl) {
|
|
122
|
+
await close();
|
|
123
|
+
}
|
|
51
124
|
});
|
|
125
|
+
launchContext.debuggingPort = debuggingPort;
|
|
126
|
+
launchContext.process = browserProcess;
|
|
127
|
+
return browser;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (anonymizedProxyUrl) {
|
|
131
|
+
await close();
|
|
132
|
+
}
|
|
133
|
+
throw error;
|
|
52
134
|
}
|
|
53
135
|
}
|
|
54
136
|
catch (error) {
|
|
55
|
-
|
|
137
|
+
this.releasePort(debuggingPort);
|
|
56
138
|
throw error;
|
|
57
139
|
}
|
|
58
|
-
launchContext.debuggingPort = debuggingPort;
|
|
59
|
-
launchContext.process = browserProcess;
|
|
60
|
-
return browser;
|
|
61
140
|
}
|
|
62
141
|
/**
|
|
63
142
|
* Creates a new browser controller.
|
|
@@ -124,31 +203,6 @@ export default class CDPBrowserPlugin extends BrowserPlugin {
|
|
|
124
203
|
}());
|
|
125
204
|
});
|
|
126
205
|
}
|
|
127
|
-
/**
|
|
128
|
-
* Finds a free port to use.
|
|
129
|
-
*
|
|
130
|
-
* @private
|
|
131
|
-
*/
|
|
132
|
-
async _findFreePort(startingPort) {
|
|
133
|
-
return new Promise((resolve, reject) => {
|
|
134
|
-
const server = net.createServer();
|
|
135
|
-
server.on('error', (err) => {
|
|
136
|
-
if (err.code === 'EADDRINUSE') {
|
|
137
|
-
this._findFreePort(startingPort + 1).then(resolve).catch(reject); // Port is in use, try the next one
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
reject(err);
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
server.on('listening', () => {
|
|
144
|
-
const { port } = server.address();
|
|
145
|
-
server.close(() => {
|
|
146
|
-
resolve(port);
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
server.listen(startingPort, '127.0.0.1');
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
206
|
/**
|
|
153
207
|
* Tries to connect to the browser using CDP with retries.
|
|
154
208
|
*
|
|
@@ -188,16 +242,33 @@ export default class CDPBrowserPlugin extends BrowserPlugin {
|
|
|
188
242
|
// Always throw the wrapped error with our standard message
|
|
189
243
|
throw new Error(`Failed to connect to browser after ${maxRetries} attempts.`);
|
|
190
244
|
}
|
|
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
|
-
}
|
|
202
245
|
}
|
|
246
|
+
Object.defineProperty(CDPBrowserPlugin, "PORT_RANGE", {
|
|
247
|
+
enumerable: true,
|
|
248
|
+
configurable: true,
|
|
249
|
+
writable: true,
|
|
250
|
+
value: {
|
|
251
|
+
min: 9223,
|
|
252
|
+
max: 9423 // Give a range of 100 ports
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
Object.defineProperty(CDPBrowserPlugin, "usedPorts", {
|
|
256
|
+
enumerable: true,
|
|
257
|
+
configurable: true,
|
|
258
|
+
writable: true,
|
|
259
|
+
value: new Set()
|
|
260
|
+
});
|
|
261
|
+
Object.defineProperty(CDPBrowserPlugin, "lastAssignedPort", {
|
|
262
|
+
enumerable: true,
|
|
263
|
+
configurable: true,
|
|
264
|
+
writable: true,
|
|
265
|
+
value: CDPBrowserPlugin.PORT_RANGE.min - 1
|
|
266
|
+
});
|
|
267
|
+
Object.defineProperty(CDPBrowserPlugin, "portLock", {
|
|
268
|
+
enumerable: true,
|
|
269
|
+
configurable: true,
|
|
270
|
+
writable: true,
|
|
271
|
+
value: false
|
|
272
|
+
});
|
|
273
|
+
export default CDPBrowserPlugin;
|
|
203
274
|
//# 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;AAC3D,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AAGjF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAgBjE,MAAM,CAAC,OAAO,OAAO,
|
|
1
|
+
{"version":3,"file":"browser-plugin.js","sourceRoot":"","sources":["../src/browser-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Donate": {
|
|
3
|
+
"message": "Donate"
|
|
4
|
+
},
|
|
5
|
+
"ExtensionDescription": {
|
|
6
|
+
"message": "All in one fingerprint protection - protect against Canvas, WebGL, Font, AudioContext fingerprinting in your browser."
|
|
7
|
+
},
|
|
8
|
+
"ExtensionName": {
|
|
9
|
+
"message": "All Fingerprint Defender"
|
|
10
|
+
},
|
|
11
|
+
"MoreOptions": {
|
|
12
|
+
"message": "More Options"
|
|
13
|
+
},
|
|
14
|
+
"RateUs": {
|
|
15
|
+
"message": "Rate us"
|
|
16
|
+
},
|
|
17
|
+
"ReloadExtension": {
|
|
18
|
+
"message": "Reload extension"
|
|
19
|
+
},
|
|
20
|
+
"MakeBy": {
|
|
21
|
+
"message": "Make by afixer.app"
|
|
22
|
+
},
|
|
23
|
+
"PreventFingerprintingOn": {
|
|
24
|
+
"message": "Prevent fingerprinting on"
|
|
25
|
+
},
|
|
26
|
+
"Refresh": {
|
|
27
|
+
"message": "Refresh"
|
|
28
|
+
},
|
|
29
|
+
"RefreshThisPage": {
|
|
30
|
+
"message": "Refresh this page to apply new options"
|
|
31
|
+
},
|
|
32
|
+
"DetectedAndObfuscated": {
|
|
33
|
+
"message": "Detected fingerprinting type"
|
|
34
|
+
},
|
|
35
|
+
"CanvasFingerprint": {
|
|
36
|
+
"message": "Canvas Fingerprint"
|
|
37
|
+
},
|
|
38
|
+
"NumberOfFingerprints": {
|
|
39
|
+
"message": "Number of prevented fingerprints"
|
|
40
|
+
},
|
|
41
|
+
"NumberOfHosts": {
|
|
42
|
+
"message": "Number of fingerprinting hosts"
|
|
43
|
+
},
|
|
44
|
+
"Host": {
|
|
45
|
+
"message": "Host"
|
|
46
|
+
},
|
|
47
|
+
"Count": {
|
|
48
|
+
"message": "Count"
|
|
49
|
+
},
|
|
50
|
+
"Audio": {
|
|
51
|
+
"message": "Audio"
|
|
52
|
+
},
|
|
53
|
+
"Canvas": {
|
|
54
|
+
"message": "Canvas"
|
|
55
|
+
},
|
|
56
|
+
"WebGL": {
|
|
57
|
+
"message": "WebGL"
|
|
58
|
+
},
|
|
59
|
+
"Font": {
|
|
60
|
+
"message": "Font"
|
|
61
|
+
},
|
|
62
|
+
"UpdatedAt": {
|
|
63
|
+
"message": "Updated at"
|
|
64
|
+
},
|
|
65
|
+
"Action": {
|
|
66
|
+
"message": "Action"
|
|
67
|
+
},
|
|
68
|
+
"Delete": {
|
|
69
|
+
"message": "Delete"
|
|
70
|
+
},
|
|
71
|
+
"Add": {
|
|
72
|
+
"message": "Add"
|
|
73
|
+
},
|
|
74
|
+
"Added": {
|
|
75
|
+
"message": "Added"
|
|
76
|
+
},
|
|
77
|
+
"WhiteList": {
|
|
78
|
+
"message": "White list"
|
|
79
|
+
},
|
|
80
|
+
"InWhiteList": {
|
|
81
|
+
"message": "In whitelist"
|
|
82
|
+
},
|
|
83
|
+
"AddToWhiteList": {
|
|
84
|
+
"message": "Add to whitelist"
|
|
85
|
+
},
|
|
86
|
+
"Total": {
|
|
87
|
+
"message": "Total"
|
|
88
|
+
},
|
|
89
|
+
"History": {
|
|
90
|
+
"message": "History"
|
|
91
|
+
},
|
|
92
|
+
"Last30Days": {
|
|
93
|
+
"message": "last 30 days"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
if
|
|
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
|
|
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)))){document.documentElement.setAttribute("data-afd-extension-id",chrome.runtime.id);const e="disabled:"+window.location.host;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(){})})}
|
|
@@ -1,18 +1 @@
|
|
|
1
|
-
import
|
|
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
|
|
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";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))]))}});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")){const e=new URL(t.url);b.value=e.host,k(e.host),t.id&&(H(t.id,t.incognito).then(r=>{for(const w of r)(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))}))}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)for(const r of e.detections)t.add(e.host);if(p.value.length>0)for(const e of p.value)s.push({host:e,detected:t.has(e)});return s}),h=C(()=>{const s=new Set;for(const t of g.value)for(const e of t.detections)s.add(e.type);return s}),f=C(()=>{const s=[];for(const t of g.value)for(const e of t.detections)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)])]))}});const He=N(ze,[["__scopeId","data-v-053380fd"]]);J(He).mount("#app");
|