device-passport 1.1.0 → 1.2.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/CHANGELOG.md +10 -7
- package/README.md +41 -0
- package/assets/ego-profile-manager.png +0 -0
- package/dist/adapters/index.cjs +2 -2
- package/dist/adapters/index.d.cts +4 -94
- package/dist/adapters/index.d.mts +4 -94
- package/dist/adapters/index.d.ts +4 -94
- package/dist/adapters/index.mjs +2 -2
- package/dist/ego/index.cjs +22 -0
- package/dist/ego/index.d.cts +5 -0
- package/dist/ego/index.d.mts +5 -0
- package/dist/ego/index.d.ts +5 -0
- package/dist/ego/index.mjs +8 -0
- package/dist/evaluator/index.cjs +22 -584
- package/dist/evaluator/index.mjs +3 -564
- package/dist/geo/index.cjs +1 -1
- package/dist/geo/index.d.cts +4 -0
- package/dist/geo/index.d.mts +4 -0
- package/dist/geo/index.d.ts +4 -0
- package/dist/geo/index.mjs +2 -2
- package/dist/index.cjs +41 -441
- package/dist/index.d.cts +10 -198
- package/dist/index.d.mts +10 -198
- package/dist/index.d.ts +10 -198
- package/dist/index.mjs +7 -418
- package/dist/shared/device-passport.BGfRcQNh.mjs +565 -0
- package/dist/shared/{device-passport.BPd2-w8e.cjs → device-passport.BKtmLzPt.cjs} +4 -3
- package/dist/shared/{device-passport.BBf9OKap.mjs → device-passport.BPQj0qdT.mjs} +4 -3
- package/dist/shared/device-passport.CDS7xrj8.d.ts +469 -0
- package/dist/shared/device-passport.CfLes-lq.d.cts +469 -0
- package/dist/shared/device-passport.CsOWqPIr.d.cts +77 -0
- package/dist/shared/device-passport.D7pEnyp2.d.ts +77 -0
- package/dist/shared/{device-passport.CLaBZWUV.cjs → device-passport.D9xW6R0B.cjs} +4 -2
- package/dist/shared/device-passport.DirQmSd4.d.cts +47 -0
- package/dist/shared/device-passport.DirQmSd4.d.mts +47 -0
- package/dist/shared/device-passport.DirQmSd4.d.ts +47 -0
- package/dist/shared/device-passport.EK4RX7Xd.cjs +584 -0
- package/dist/shared/device-passport.ZBspe4ZW.d.mts +77 -0
- package/dist/shared/device-passport.dVEqzSEb.d.mts +469 -0
- package/dist/shared/{device-passport.NHw_f6HT.mjs → device-passport.gNo82fQ5.mjs} +5 -3
- package/dist/shared/device-passport.kekU28UM.mjs +705 -0
- package/dist/shared/device-passport.qL4tjwc0.cjs +718 -0
- package/dist/storage/index.d.cts +3 -34
- package/dist/storage/index.d.mts +3 -34
- package/dist/storage/index.d.ts +3 -34
- package/dist/types/index.d.cts +183 -1
- package/dist/types/index.d.mts +183 -1
- package/dist/types/index.d.ts +183 -1
- package/package.json +6 -1
package/dist/index.cjs
CHANGED
|
@@ -1,425 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const memory = require('./shared/device-passport.Cjxlv8xI.cjs');
|
|
3
|
+
const bridge = require('./shared/device-passport.qL4tjwc0.cjs');
|
|
4
|
+
const cdp = require('./shared/device-passport.D9xW6R0B.cjs');
|
|
6
5
|
const geo_index = require('./geo/index.cjs');
|
|
7
|
-
const
|
|
6
|
+
const memory = require('./shared/device-passport.Cjxlv8xI.cjs');
|
|
7
|
+
const evaluator_index = require('./evaluator/index.cjs');
|
|
8
|
+
const aligner = require('./shared/device-passport.BKtmLzPt.cjs');
|
|
9
|
+
const entropy = require('./shared/device-passport.EK4RX7Xd.cjs');
|
|
8
10
|
require('node:crypto');
|
|
9
11
|
require('node:fs');
|
|
10
12
|
require('node:path');
|
|
11
13
|
|
|
12
|
-
class DevicePassportInstance {
|
|
13
|
-
profile;
|
|
14
|
-
constructor(profile) {
|
|
15
|
-
if (!profile) {
|
|
16
|
-
throw new Error("[DevicePassportInstance] Profile cannot be null or undefined");
|
|
17
|
-
}
|
|
18
|
-
this.profile = profile;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Factory method to create an instance from a plain DevicePassport object.
|
|
22
|
-
*/
|
|
23
|
-
static from(profile) {
|
|
24
|
-
return new DevicePassportInstance(profile);
|
|
25
|
-
}
|
|
26
|
-
// ==========================================
|
|
27
|
-
// Getters for core profile facets
|
|
28
|
-
// ==========================================
|
|
29
|
-
get id() {
|
|
30
|
-
return this.profile.id;
|
|
31
|
-
}
|
|
32
|
-
get seed() {
|
|
33
|
-
return this.profile.seed;
|
|
34
|
-
}
|
|
35
|
-
get createdAt() {
|
|
36
|
-
return this.profile.createdAt;
|
|
37
|
-
}
|
|
38
|
-
get browser() {
|
|
39
|
-
return this.profile.browser;
|
|
40
|
-
}
|
|
41
|
-
get os() {
|
|
42
|
-
return this.profile.os;
|
|
43
|
-
}
|
|
44
|
-
get hardware() {
|
|
45
|
-
return this.profile.hardware;
|
|
46
|
-
}
|
|
47
|
-
get locale() {
|
|
48
|
-
return this.profile.locale;
|
|
49
|
-
}
|
|
50
|
-
get headers() {
|
|
51
|
-
return this.profile.headers;
|
|
52
|
-
}
|
|
53
|
-
get clientHints() {
|
|
54
|
-
return this.profile.clientHints;
|
|
55
|
-
}
|
|
56
|
-
get context() {
|
|
57
|
-
return this.profile.context;
|
|
58
|
-
}
|
|
59
|
-
get userAgent() {
|
|
60
|
-
return this.profile.headers["user-agent"] || this.profile.browser.userAgent;
|
|
61
|
-
}
|
|
62
|
-
get timezone() {
|
|
63
|
-
return this.profile.locale.timezone;
|
|
64
|
-
}
|
|
65
|
-
get playwrightContext() {
|
|
66
|
-
return this.getPlaywrightContext();
|
|
67
|
-
}
|
|
68
|
-
get puppeteerArgs() {
|
|
69
|
-
return this.getPuppeteerArgs();
|
|
70
|
-
}
|
|
71
|
-
get evaluation() {
|
|
72
|
-
return this.profile.evaluation;
|
|
73
|
-
}
|
|
74
|
-
// ==========================================
|
|
75
|
-
// Lightweight HTTP Mode Adapters
|
|
76
|
-
// ==========================================
|
|
77
|
-
/**
|
|
78
|
-
* Returns HTTP headers formatted in strict canonical browser sequence.
|
|
79
|
-
* Essential for anti-bot evasion against Cloudflare, Akamai, and DataDome.
|
|
80
|
-
*/
|
|
81
|
-
getHeaders(overrides) {
|
|
82
|
-
return cdp.formatCanonicalHeaders(this.profile.headers, overrides);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Returns a higher-order fetch function wrapping standard fetch with this passport's canonical persona.
|
|
86
|
-
*/
|
|
87
|
-
wrapFetch(customFetch) {
|
|
88
|
-
return cdp.withPassport(this, customFetch);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Alias for wrapFetch.
|
|
92
|
-
*/
|
|
93
|
-
withPassport(customFetch) {
|
|
94
|
-
return cdp.withPassport(this, customFetch);
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Generates a copy-pasteable cURL command with correct browser headers and User-Agent.
|
|
98
|
-
*/
|
|
99
|
-
toCurl(url, options) {
|
|
100
|
-
return cdp.toCurl(this, url, options);
|
|
101
|
-
}
|
|
102
|
-
// ==========================================
|
|
103
|
-
// Heavyweight Browser Automation Adapters
|
|
104
|
-
// ==========================================
|
|
105
|
-
/**
|
|
106
|
-
* Generates Playwright BrowserContext options.
|
|
107
|
-
* Usage:
|
|
108
|
-
* ```ts
|
|
109
|
-
* const context = await browser.newContext(passport.getPlaywrightContext());
|
|
110
|
-
* ```
|
|
111
|
-
*/
|
|
112
|
-
getPlaywrightContext() {
|
|
113
|
-
return cdp.getPlaywrightContext(this.profile);
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Returns Puppeteer launch args and page emulation parameters.
|
|
117
|
-
*/
|
|
118
|
-
getPuppeteerArgs() {
|
|
119
|
-
return cdp.getPuppeteerArgs(this.profile);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Generates an in-page stealth script to patch runtime JavaScript APIs
|
|
123
|
-
* (navigator.webdriver, hardwareConcurrency, deviceMemory, WebGL, Client Hints).
|
|
124
|
-
*/
|
|
125
|
-
getStealthScript() {
|
|
126
|
-
return cdp.getStealthScript(this.profile);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Injects stealth scripts and extra HTTP headers into a Playwright BrowserContext.
|
|
130
|
-
*/
|
|
131
|
-
async applyToPlaywright(context) {
|
|
132
|
-
await cdp.applyToPlaywrightContext(context, this.profile);
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Injects stealth scripts and emulation parameters into a Puppeteer Page.
|
|
136
|
-
*/
|
|
137
|
-
async applyToPuppeteer(page) {
|
|
138
|
-
await cdp.applyToPuppeteerPage(page, this.profile);
|
|
139
|
-
}
|
|
140
|
-
// ==========================================
|
|
141
|
-
// Consistency & Diagnostics
|
|
142
|
-
// ==========================================
|
|
143
|
-
/**
|
|
144
|
-
* Evaluates cross-layer consistency and Shannon entropy.
|
|
145
|
-
* Caches the result on `this.profile.evaluation`.
|
|
146
|
-
*/
|
|
147
|
-
evaluate(forceRecompute = false) {
|
|
148
|
-
if (this.profile.evaluation && !forceRecompute) {
|
|
149
|
-
return this.profile.evaluation;
|
|
150
|
-
}
|
|
151
|
-
try {
|
|
152
|
-
const contradictions = evaluator_index.detectAllContradictions(this.profile);
|
|
153
|
-
let estimatedBits = 48;
|
|
154
|
-
let collisionRisk = "very_low";
|
|
155
|
-
try {
|
|
156
|
-
const entropy = evaluator_index.analyzeHeaderEntropy(this.profile.headers);
|
|
157
|
-
if (entropy) {
|
|
158
|
-
estimatedBits = entropy.estimatedBits;
|
|
159
|
-
collisionRisk = entropy.collisionRisk;
|
|
160
|
-
}
|
|
161
|
-
} catch {
|
|
162
|
-
}
|
|
163
|
-
const totalPenalty = contradictions.reduce((sum, c) => sum + c.impactPenalty, 0);
|
|
164
|
-
const overallScore = Math.max(0, Math.min(100, Math.round(100 - totalPenalty)));
|
|
165
|
-
const status = overallScore >= 90 ? "PASS" : overallScore >= 70 ? "WARN" : "FAIL";
|
|
166
|
-
const grade = overallScore >= 95 ? "A+" : overallScore >= 85 ? "A" : overallScore >= 70 ? "B" : overallScore >= 50 ? "C" : "F";
|
|
167
|
-
const checks = [
|
|
168
|
-
{
|
|
169
|
-
id: "chk_os_ua_alignment",
|
|
170
|
-
name: "OS and User-Agent Alignment",
|
|
171
|
-
category: "os_ua_alignment",
|
|
172
|
-
passed: !contradictions.some((c) => c.category === "os_browser"),
|
|
173
|
-
score: contradictions.some((c) => c.category === "os_browser") ? 0 : 100,
|
|
174
|
-
weight: 1.5,
|
|
175
|
-
message: contradictions.find((c) => c.category === "os_browser")?.description ?? "User-Agent and Operating System are fully coherent"
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
id: "chk_hardware_plausibility",
|
|
179
|
-
name: "Hardware and GPU Plausibility",
|
|
180
|
-
category: "hardware_plausibility",
|
|
181
|
-
passed: !contradictions.some((c) => c.category === "hardware_system"),
|
|
182
|
-
score: contradictions.some((c) => c.category === "hardware_system") ? 0 : 100,
|
|
183
|
-
weight: 2,
|
|
184
|
-
message: contradictions.find((c) => c.category === "hardware_system")?.description ?? "GPU renderer, CPU architecture and RAM are physically plausible"
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
id: "chk_geo_locale_coherence",
|
|
188
|
-
name: "Geo and Locale Coherence",
|
|
189
|
-
category: "geo_locale_coherence",
|
|
190
|
-
passed: !contradictions.some((c) => c.category === "geo_chrono"),
|
|
191
|
-
score: contradictions.some((c) => c.category === "geo_chrono") ? 0 : 100,
|
|
192
|
-
weight: 1.5,
|
|
193
|
-
message: contradictions.find((c) => c.category === "geo_chrono")?.description ?? "Timezone, country, and Accept-Language are geographically locked"
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
id: "chk_client_hints_entropy",
|
|
197
|
-
name: "Client Hints RFC 8942 Compliance",
|
|
198
|
-
category: "client_hints_entropy",
|
|
199
|
-
passed: !contradictions.some((c) => c.category === "client_hints"),
|
|
200
|
-
score: contradictions.some((c) => c.category === "client_hints") ? 0 : 100,
|
|
201
|
-
weight: 1.5,
|
|
202
|
-
message: contradictions.find((c) => c.category === "client_hints")?.description ?? "User-Agent Client Hints headers strictly match W3C and Chromium freeze specifications"
|
|
203
|
-
}
|
|
204
|
-
];
|
|
205
|
-
const evaluation = {
|
|
206
|
-
overallScore,
|
|
207
|
-
status,
|
|
208
|
-
grade,
|
|
209
|
-
checks,
|
|
210
|
-
entropyAnalysis: {
|
|
211
|
-
estimatedBits,
|
|
212
|
-
collisionRisk
|
|
213
|
-
},
|
|
214
|
-
evaluatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
215
|
-
};
|
|
216
|
-
this.profile.evaluation = evaluation;
|
|
217
|
-
return evaluation;
|
|
218
|
-
} catch {
|
|
219
|
-
if (this.profile.evaluation) {
|
|
220
|
-
return this.profile.evaluation;
|
|
221
|
-
}
|
|
222
|
-
const baseline = {
|
|
223
|
-
overallScore: 100,
|
|
224
|
-
status: "PASS",
|
|
225
|
-
grade: "A+",
|
|
226
|
-
checks: [],
|
|
227
|
-
evaluatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
228
|
-
};
|
|
229
|
-
this.profile.evaluation = baseline;
|
|
230
|
-
return baseline;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
// ==========================================
|
|
234
|
-
// Serialization
|
|
235
|
-
// ==========================================
|
|
236
|
-
/**
|
|
237
|
-
* Returns the underlying raw DevicePassport data object.
|
|
238
|
-
*/
|
|
239
|
-
toJSON() {
|
|
240
|
-
return this.profile;
|
|
241
|
-
}
|
|
242
|
-
toString() {
|
|
243
|
-
const { id, browser, os, locale } = this.profile;
|
|
244
|
-
return `[DevicePassport ${id} | ${browser?.name ?? "Browser"} ${browser?.version ?? ""} on ${os?.platform ?? "OS"} | ${locale?.language ?? "Locale"}]`;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
function createPassport(seedOrOptionsOrProfile, extraOptions) {
|
|
248
|
-
if (seedOrOptionsOrProfile instanceof DevicePassportInstance) {
|
|
249
|
-
return seedOrOptionsOrProfile;
|
|
250
|
-
}
|
|
251
|
-
if (seedOrOptionsOrProfile && typeof seedOrOptionsOrProfile === "object" && "id" in seedOrOptionsOrProfile && "clientHints" in seedOrOptionsOrProfile && "headers" in seedOrOptionsOrProfile) {
|
|
252
|
-
return new DevicePassportInstance(seedOrOptionsOrProfile);
|
|
253
|
-
}
|
|
254
|
-
let options = {};
|
|
255
|
-
if (typeof seedOrOptionsOrProfile === "string") {
|
|
256
|
-
options = { ...extraOptions, seed: seedOrOptionsOrProfile };
|
|
257
|
-
} else if (seedOrOptionsOrProfile && typeof seedOrOptionsOrProfile === "object") {
|
|
258
|
-
options = { ...seedOrOptionsOrProfile };
|
|
259
|
-
} else if (extraOptions) {
|
|
260
|
-
options = { ...extraOptions };
|
|
261
|
-
}
|
|
262
|
-
if (options.store && options.seed) {
|
|
263
|
-
const storage = typeof options.store === "string" ? new memory.JSONFileStorage({ filePath: options.store }) : options.store;
|
|
264
|
-
if (storage.hasSync && storage.hasSync(options.seed)) {
|
|
265
|
-
const existing = storage.getSync(options.seed);
|
|
266
|
-
if (existing) return new DevicePassportInstance(existing);
|
|
267
|
-
}
|
|
268
|
-
const generated2 = cdp.generatePassport(options);
|
|
269
|
-
if (storage.setSync) {
|
|
270
|
-
storage.setSync(options.seed, generated2);
|
|
271
|
-
} else {
|
|
272
|
-
storage.set(options.seed, generated2).catch(() => {
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
return new DevicePassportInstance(generated2);
|
|
276
|
-
}
|
|
277
|
-
const generated = cdp.generatePassport(options);
|
|
278
|
-
return new DevicePassportInstance(generated);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
class PassportManager {
|
|
282
|
-
storage;
|
|
283
|
-
defaultGeo;
|
|
284
|
-
defaultOS;
|
|
285
|
-
defaultBrowser;
|
|
286
|
-
generator;
|
|
287
|
-
constructor(options) {
|
|
288
|
-
if (typeof options?.store === "string") {
|
|
289
|
-
this.storage = new memory.JSONFileStorage(options.store);
|
|
290
|
-
} else if (options?.store && typeof options.store.get === "function") {
|
|
291
|
-
this.storage = options.store;
|
|
292
|
-
} else {
|
|
293
|
-
this.storage = new memory.MemoryStorage();
|
|
294
|
-
}
|
|
295
|
-
this.defaultGeo = options?.defaultGeo ?? "US";
|
|
296
|
-
this.defaultOS = options?.defaultOS;
|
|
297
|
-
this.defaultBrowser = options?.defaultBrowser;
|
|
298
|
-
this.generator = options?.generator ?? cdp.generatePassport;
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Retrieves an existing sticky passport by seed or deterministically generates
|
|
302
|
-
* and persists a new one if it does not already exist.
|
|
303
|
-
*
|
|
304
|
-
* @param seed Deterministic seed (user ID, account handle, proxy IP, worker slot)
|
|
305
|
-
* @param options Generator options to use if persona needs to be created
|
|
306
|
-
*/
|
|
307
|
-
async getPassport(seed, options) {
|
|
308
|
-
const seedStr = String(seed);
|
|
309
|
-
const existing = await this.storage.get(seedStr);
|
|
310
|
-
if (existing) {
|
|
311
|
-
return new DevicePassportInstance(existing);
|
|
312
|
-
}
|
|
313
|
-
const mergedOptions = {
|
|
314
|
-
seed: seedStr,
|
|
315
|
-
country: options?.country ?? this.defaultGeo,
|
|
316
|
-
os: options?.os ?? this.defaultOS,
|
|
317
|
-
browser: options?.browser ?? this.defaultBrowser,
|
|
318
|
-
...options
|
|
319
|
-
};
|
|
320
|
-
const profile = this.generator(mergedOptions);
|
|
321
|
-
await this.storage.set(seedStr, profile);
|
|
322
|
-
return new DevicePassportInstance(profile);
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Synchronous passport retrieval for environments backed by MemoryStorage or JSONFileStorage.
|
|
326
|
-
*/
|
|
327
|
-
getPassportSync(seed, options) {
|
|
328
|
-
const seedStr = String(seed);
|
|
329
|
-
const syncStore = this.storage;
|
|
330
|
-
if (typeof syncStore.getSync === "function") {
|
|
331
|
-
const existing = syncStore.getSync(seedStr);
|
|
332
|
-
if (existing) {
|
|
333
|
-
return new DevicePassportInstance(existing);
|
|
334
|
-
}
|
|
335
|
-
const mergedOptions = {
|
|
336
|
-
seed: seedStr,
|
|
337
|
-
country: options?.country ?? this.defaultGeo,
|
|
338
|
-
os: options?.os ?? this.defaultOS,
|
|
339
|
-
browser: options?.browser ?? this.defaultBrowser,
|
|
340
|
-
...options
|
|
341
|
-
};
|
|
342
|
-
const profile = this.generator(mergedOptions);
|
|
343
|
-
if (typeof syncStore.setSync === "function") {
|
|
344
|
-
syncStore.setSync(seedStr, profile);
|
|
345
|
-
}
|
|
346
|
-
return new DevicePassportInstance(profile);
|
|
347
|
-
}
|
|
348
|
-
throw new Error(
|
|
349
|
-
"[PassportManager] Current storage adapter does not support synchronous operations. Use await manager.getPassport(seed) instead."
|
|
350
|
-
);
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Forces re-generation and overwrite of a passport for the given seed.
|
|
354
|
-
*/
|
|
355
|
-
async renewPassport(seed, options) {
|
|
356
|
-
const seedStr = String(seed);
|
|
357
|
-
const mergedOptions = {
|
|
358
|
-
seed: seedStr,
|
|
359
|
-
country: options?.country ?? this.defaultGeo,
|
|
360
|
-
os: options?.os ?? this.defaultOS,
|
|
361
|
-
browser: options?.browser ?? this.defaultBrowser,
|
|
362
|
-
...options
|
|
363
|
-
};
|
|
364
|
-
const profile = this.generator(mergedOptions);
|
|
365
|
-
await this.storage.set(seedStr, profile);
|
|
366
|
-
return new DevicePassportInstance(profile);
|
|
367
|
-
}
|
|
368
|
-
/**
|
|
369
|
-
* Check if a passport exists in storage for the given seed.
|
|
370
|
-
*/
|
|
371
|
-
async hasPassport(seed) {
|
|
372
|
-
return this.storage.has(String(seed));
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* Delete a passport from storage.
|
|
376
|
-
*/
|
|
377
|
-
async deletePassport(seed) {
|
|
378
|
-
return this.storage.delete(String(seed));
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Import an existing passport into storage.
|
|
382
|
-
*/
|
|
383
|
-
async importPassport(passport) {
|
|
384
|
-
const raw = passport instanceof DevicePassportInstance ? passport.toJSON() : passport;
|
|
385
|
-
await this.storage.set(raw.seed, raw);
|
|
386
|
-
return new DevicePassportInstance(raw);
|
|
387
|
-
}
|
|
388
|
-
/**
|
|
389
|
-
* List all stored seeds.
|
|
390
|
-
*/
|
|
391
|
-
async listSeeds() {
|
|
392
|
-
return this.storage.keys();
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* List all stored passports as DevicePassportInstance objects.
|
|
396
|
-
*/
|
|
397
|
-
async listPassports() {
|
|
398
|
-
const keys = await this.storage.keys();
|
|
399
|
-
const instances = [];
|
|
400
|
-
for (const key of keys) {
|
|
401
|
-
const item = await this.storage.get(key);
|
|
402
|
-
if (item) {
|
|
403
|
-
instances.push(new DevicePassportInstance(item));
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
return instances;
|
|
407
|
-
}
|
|
408
|
-
/**
|
|
409
|
-
* Clear all stored passports.
|
|
410
|
-
*/
|
|
411
|
-
async clear() {
|
|
412
|
-
await this.storage.clear();
|
|
413
|
-
}
|
|
414
|
-
/**
|
|
415
|
-
* Return number of stored personas.
|
|
416
|
-
*/
|
|
417
|
-
async count() {
|
|
418
|
-
const keys = await this.storage.keys();
|
|
419
|
-
return keys.length;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
|
|
423
14
|
const BENCHMARK_METRICS_METADATA = {
|
|
424
15
|
clientHintsSupport: {
|
|
425
16
|
id: "clientHintsSupport",
|
|
@@ -792,6 +383,18 @@ function formatComparativeMatrixJSON() {
|
|
|
792
383
|
|
|
793
384
|
const VERSION = "1.0.0";
|
|
794
385
|
|
|
386
|
+
exports.AccountProfileManager = bridge.AccountProfileManager;
|
|
387
|
+
exports.DevicePassportInstance = bridge.DevicePassportInstance;
|
|
388
|
+
exports.PROXY_MISSING_NOTE = bridge.PROXY_MISSING_NOTE;
|
|
389
|
+
exports.PROXY_RESOLUTION_NOTE = bridge.PROXY_RESOLUTION_NOTE;
|
|
390
|
+
exports.PassportManager = bridge.PassportManager;
|
|
391
|
+
exports.buildEgoSessionPlan = bridge.buildEgoSessionPlan;
|
|
392
|
+
exports.buildProxyDeclaration = bridge.buildProxyDeclaration;
|
|
393
|
+
exports.createEgoBridge = bridge.createEgoBridge;
|
|
394
|
+
exports.createPassport = bridge.createPassport;
|
|
395
|
+
exports.defaultTaskSpaceName = bridge.defaultTaskSpaceName;
|
|
396
|
+
exports.getEgoNativeBridge = bridge.getEgoNativeBridge;
|
|
397
|
+
exports.getProfileReadiness = bridge.getProfileReadiness;
|
|
795
398
|
exports.ALL_PRESETS = cdp.ALL_PRESETS;
|
|
796
399
|
exports.CANONICAL_HEADER_ORDER = cdp.CANONICAL_HEADER_ORDER;
|
|
797
400
|
exports.CHROME_VERSIONS = cdp.CHROME_VERSIONS;
|
|
@@ -825,34 +428,16 @@ exports.parseStructuredBrandList = cdp.parseStructuredBrandList;
|
|
|
825
428
|
exports.toCurl = cdp.toCurl;
|
|
826
429
|
exports.validateHardwareContradictions = cdp.validateHardwareContradictions;
|
|
827
430
|
exports.withPassport = cdp.withPassport;
|
|
828
|
-
exports.BASELINE_OPTIMAL_ENTROPY = evaluator_index.BASELINE_OPTIMAL_ENTROPY;
|
|
829
|
-
exports.BROWSER_BASELINE_FREQUENCIES = evaluator_index.BROWSER_BASELINE_FREQUENCIES;
|
|
830
|
-
exports.COUNTRY_PRIMARY_LANGUAGES = evaluator_index.COUNTRY_PRIMARY_LANGUAGES;
|
|
831
|
-
exports.COUNTRY_TIMEZONE_MAP = evaluator_index.COUNTRY_TIMEZONE_MAP;
|
|
832
|
-
exports.MIN_STRUCTURAL_ENTROPY = evaluator_index.MIN_STRUCTURAL_ENTROPY;
|
|
833
|
-
exports.OPTIMAL_CHAR_ENTROPY_MAX = evaluator_index.OPTIMAL_CHAR_ENTROPY_MAX;
|
|
834
|
-
exports.OPTIMAL_CHAR_ENTROPY_MIN = evaluator_index.OPTIMAL_CHAR_ENTROPY_MIN;
|
|
835
|
-
exports.OPTIMAL_ENTROPY_MAX = evaluator_index.OPTIMAL_ENTROPY_MAX;
|
|
836
|
-
exports.OPTIMAL_ENTROPY_MIN = evaluator_index.OPTIMAL_ENTROPY_MIN;
|
|
837
|
-
exports.analyzeHeaderEntropy = evaluator_index.analyzeHeaderEntropy;
|
|
838
|
-
exports.calculateKLDivergence = evaluator_index.calculateKLDivergence;
|
|
839
|
-
exports.calculateShannonEntropy = evaluator_index.calculateShannonEntropy;
|
|
840
|
-
exports.calculateStructuralEntropy = evaluator_index.calculateStructuralEntropy;
|
|
841
|
-
exports.detectAllContradictions = evaluator_index.detectAllContradictions;
|
|
842
|
-
exports.detectClientHintsContradictions = evaluator_index.detectClientHintsContradictions;
|
|
843
|
-
exports.detectGeoChronoContradictions = evaluator_index.detectGeoChronoContradictions;
|
|
844
|
-
exports.detectHardwareContradictions = evaluator_index.detectHardwareContradictions;
|
|
845
|
-
exports.detectOSBrowserContradictions = evaluator_index.detectOSBrowserContradictions;
|
|
846
|
-
exports.evaluateCoherence = evaluator_index.evaluateCoherence;
|
|
847
|
-
exports.evaluateGeoAlignment = evaluator_index.evaluateGeoAlignment;
|
|
848
|
-
exports.evaluatePassport = evaluator_index.evaluatePassport;
|
|
849
|
-
exports.JSONFileStorage = memory.JSONFileStorage;
|
|
850
|
-
exports.MemoryStorage = memory.MemoryStorage;
|
|
851
431
|
exports.GEO_LOCALES = geo_index.GEO_LOCALES;
|
|
852
432
|
exports.TIMEZONE_MATRIX = geo_index.TIMEZONE_MATRIX;
|
|
853
433
|
exports.detectGeoFromUrl = geo_index.detectGeoFromUrl;
|
|
854
434
|
exports.getLocaleProfile = geo_index.getLocaleProfile;
|
|
855
435
|
exports.isValidCountryCode = geo_index.isValidCountryCode;
|
|
436
|
+
exports.JSONFileStorage = memory.JSONFileStorage;
|
|
437
|
+
exports.MemoryStorage = memory.MemoryStorage;
|
|
438
|
+
exports.evaluateCoherence = evaluator_index.evaluateCoherence;
|
|
439
|
+
exports.evaluateGeoAlignment = evaluator_index.evaluateGeoAlignment;
|
|
440
|
+
exports.evaluatePassport = evaluator_index.evaluatePassport;
|
|
856
441
|
exports.ALPHA3_TO_ALPHA2 = aligner.ALPHA3_TO_ALPHA2;
|
|
857
442
|
exports.COUNTRY_LOCALES = aligner.COUNTRY_LOCALES;
|
|
858
443
|
exports.COUNTRY_NAME_TO_CODE = aligner.COUNTRY_NAME_TO_CODE;
|
|
@@ -880,12 +465,27 @@ exports.normalizeCountryCode = aligner.normalizeCountryCode;
|
|
|
880
465
|
exports.parseAcceptLanguage = aligner.parseAcceptLanguage;
|
|
881
466
|
exports.toGeoLocation = aligner.toGeoLocation;
|
|
882
467
|
exports.toLocaleProfile = aligner.toLocaleProfile;
|
|
468
|
+
exports.BASELINE_OPTIMAL_ENTROPY = entropy.BASELINE_OPTIMAL_ENTROPY;
|
|
469
|
+
exports.BROWSER_BASELINE_FREQUENCIES = entropy.BROWSER_BASELINE_FREQUENCIES;
|
|
470
|
+
exports.COUNTRY_PRIMARY_LANGUAGES = entropy.COUNTRY_PRIMARY_LANGUAGES;
|
|
471
|
+
exports.COUNTRY_TIMEZONE_MAP = entropy.COUNTRY_TIMEZONE_MAP;
|
|
472
|
+
exports.MIN_STRUCTURAL_ENTROPY = entropy.MIN_STRUCTURAL_ENTROPY;
|
|
473
|
+
exports.OPTIMAL_CHAR_ENTROPY_MAX = entropy.OPTIMAL_CHAR_ENTROPY_MAX;
|
|
474
|
+
exports.OPTIMAL_CHAR_ENTROPY_MIN = entropy.OPTIMAL_CHAR_ENTROPY_MIN;
|
|
475
|
+
exports.OPTIMAL_ENTROPY_MAX = entropy.OPTIMAL_ENTROPY_MAX;
|
|
476
|
+
exports.OPTIMAL_ENTROPY_MIN = entropy.OPTIMAL_ENTROPY_MIN;
|
|
477
|
+
exports.analyzeHeaderEntropy = entropy.analyzeHeaderEntropy;
|
|
478
|
+
exports.calculateKLDivergence = entropy.calculateKLDivergence;
|
|
479
|
+
exports.calculateShannonEntropy = entropy.calculateShannonEntropy;
|
|
480
|
+
exports.calculateStructuralEntropy = entropy.calculateStructuralEntropy;
|
|
481
|
+
exports.detectAllContradictions = entropy.detectAllContradictions;
|
|
482
|
+
exports.detectClientHintsContradictions = entropy.detectClientHintsContradictions;
|
|
483
|
+
exports.detectGeoChronoContradictions = entropy.detectGeoChronoContradictions;
|
|
484
|
+
exports.detectHardwareContradictions = entropy.detectHardwareContradictions;
|
|
485
|
+
exports.detectOSBrowserContradictions = entropy.detectOSBrowserContradictions;
|
|
883
486
|
exports.BENCHMARK_METRICS_METADATA = BENCHMARK_METRICS_METADATA;
|
|
884
487
|
exports.COMPARATIVE_DATASET = COMPARATIVE_DATASET;
|
|
885
|
-
exports.DevicePassportInstance = DevicePassportInstance;
|
|
886
|
-
exports.PassportManager = PassportManager;
|
|
887
488
|
exports.VERSION = VERSION;
|
|
888
|
-
exports.createPassport = createPassport;
|
|
889
489
|
exports.formatComparativeMatrixJSON = formatComparativeMatrixJSON;
|
|
890
490
|
exports.formatComparativeMatrixLaTeX = formatComparativeMatrixLaTeX;
|
|
891
491
|
exports.formatComparativeMatrixMarkdown = formatComparativeMatrixMarkdown;
|