@browsercore/profiles 0.2.0 → 0.2.2
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/README.md +1 -1
- package/dist/codes.d.ts +44 -4
- package/dist/codes.d.ts.map +1 -1
- package/dist/codes.js +44 -4
- package/dist/codes.js.map +1 -1
- package/dist/diff.d.ts +25 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +16 -0
- package/dist/diff.js.map +1 -1
- package/dist/errors.d.ts +50 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +50 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/profiles/chrome.d.ts +16 -1
- package/dist/profiles/chrome.d.ts.map +1 -1
- package/dist/profiles/chrome.js +21 -8
- package/dist/profiles/chrome.js.map +1 -1
- package/dist/profiles/edge.d.ts +7 -6
- package/dist/profiles/edge.d.ts.map +1 -1
- package/dist/profiles/edge.js +19 -13
- package/dist/profiles/edge.js.map +1 -1
- package/dist/profiles/firefox.d.ts.map +1 -1
- package/dist/profiles/firefox.js +20 -0
- package/dist/profiles/firefox.js.map +1 -1
- package/dist/profiles/safari.d.ts.map +1 -1
- package/dist/profiles/safari.js +6 -0
- package/dist/profiles/safari.js.map +1 -1
- package/dist/registry.d.ts +57 -4
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +57 -4
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +55 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +36 -4
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +36 -4
- package/dist/utils.js.map +1 -1
- package/dist/validate.d.ts +62 -7
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +67 -6
- package/dist/validate.js.map +1 -1
- package/package.json +3 -3
package/dist/profiles/edge.js
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Microsoft Edge fingerprint definitions.
|
|
3
3
|
*
|
|
4
|
-
* Edge is Chromium-based, so its TLS fingerprint
|
|
5
|
-
*
|
|
6
|
-
* agent string
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* Edge is Chromium-based, so its TLS fingerprint matches Chrome's — same GREASE
|
|
5
|
+
* behavior, same cipher families, and the same extension wire order. Edge
|
|
6
|
+
* differs only in the advertised user agent string and the `sec-ch-ua` brand
|
|
7
|
+
* list (includes "Microsoft Edge"). HTTP/2 settings track Chrome closely.
|
|
8
|
+
* Cipher / group / version / signature values mirror curl-impersonate's
|
|
9
|
+
* ground-truth signature; the extension order is shared verbatim with Chrome
|
|
10
|
+
* via {@link chromeExtensionOrder} (captured via curl_cffi against tls.peet.ws).
|
|
10
11
|
*/
|
|
12
|
+
import { chromeExtensionOrder } from "./chrome.js";
|
|
11
13
|
/** TLS 1.3 GREASE placeholder cipher (0x?a?a) Edge inserts at the top of the list. */
|
|
12
14
|
const GREASE = "TLS_GREASE_RESERVED_0";
|
|
13
15
|
/**
|
|
14
|
-
* Edge
|
|
15
|
-
*
|
|
16
|
-
*
|
|
16
|
+
* Edge shares Chrome's extension order (modern Chromium 120+ is the base for
|
|
17
|
+
* edge-120 / edge-128). Both Edge profiles use application_settings_old (17513),
|
|
18
|
+
* predating the 17613 switch that landed in Chrome ~132.
|
|
17
19
|
*/
|
|
18
|
-
const EDGE_EXTENSION_ORDER = [
|
|
19
|
-
0, 23, 65281, 10, 11, 35, 16, 5, 13, 18, 51, 45, 43, 27, 17513, 21,
|
|
20
|
-
];
|
|
21
20
|
const edgeTlsBase = {
|
|
22
|
-
extensionOrder:
|
|
21
|
+
extensionOrder: chromeExtensionOrder(17513),
|
|
23
22
|
supportedVersions: ["TLS 1.3", "TLS 1.2"],
|
|
24
23
|
keyShareGroups: ["x25519", "secp256r1", "secp384r1"],
|
|
25
24
|
signatureAlgorithms: [
|
|
@@ -33,12 +32,19 @@ const edgeTlsBase = {
|
|
|
33
32
|
"rsa_pkcs1_sha512",
|
|
34
33
|
],
|
|
35
34
|
grease: true,
|
|
35
|
+
ecPointFormats: [0x00],
|
|
36
|
+
compressCertificateAlgorithms: [0x02],
|
|
37
|
+
recordPadding: 512,
|
|
36
38
|
};
|
|
37
39
|
const edgeHttp2Base = {
|
|
38
40
|
initialWindowSize: 6291456,
|
|
39
41
|
maxFrameSize: 16384,
|
|
40
42
|
headerTableSize: 65536,
|
|
41
43
|
weight: 256,
|
|
44
|
+
settingsOrder: [1, 2, 4, 6],
|
|
45
|
+
grease: true,
|
|
46
|
+
connectionWindowUpdate: 15663105,
|
|
47
|
+
pseudoHeaderOrder: ["method", "authority", "scheme", "path"],
|
|
42
48
|
};
|
|
43
49
|
const edgeHttp1Base = {
|
|
44
50
|
connection: "keep-alive",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/profiles/edge.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/profiles/edge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firefox.d.ts","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"firefox.d.ts","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AA8F7D,eAAO,MAAM,UAAU,EAAE,cAgCxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAkCxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAkCxB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;CAIlB,CAAC"}
|
package/dist/profiles/firefox.js
CHANGED
|
@@ -68,6 +68,22 @@ const firefoxHttp2Base = {
|
|
|
68
68
|
headerTableSize: 65536,
|
|
69
69
|
weight: 256,
|
|
70
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* Impersonation fields shared by firefox-128 and firefox-135 (but not
|
|
73
|
+
* firefox-120, which predates the impersonation data). Firefox differs from
|
|
74
|
+
* Chrome: no HTTP/2 GREASE, a distinct connection WINDOW_UPDATE, and
|
|
75
|
+
* compress_certificate offers brotli + zlib (not just brotli).
|
|
76
|
+
*/
|
|
77
|
+
const firefoxTlsImpersonation = {
|
|
78
|
+
ecPointFormats: [0x00],
|
|
79
|
+
compressCertificateAlgorithms: [0x02, 0x01],
|
|
80
|
+
};
|
|
81
|
+
const firefoxHttp2Impersonation = {
|
|
82
|
+
settingsOrder: [1, 2, 4, 6],
|
|
83
|
+
grease: false,
|
|
84
|
+
connectionWindowUpdate: 12517377,
|
|
85
|
+
pseudoHeaderOrder: ["method", "authority", "scheme", "path"],
|
|
86
|
+
};
|
|
71
87
|
const firefoxHttp1Base = {
|
|
72
88
|
connection: "keep-alive",
|
|
73
89
|
acceptEncoding: "gzip, deflate, br",
|
|
@@ -123,10 +139,12 @@ export const firefox128 = {
|
|
|
123
139
|
version: "128.0",
|
|
124
140
|
tls: {
|
|
125
141
|
...firefoxTlsBase,
|
|
142
|
+
...firefoxTlsImpersonation,
|
|
126
143
|
cipherSuites: firefoxTlsCiphers,
|
|
127
144
|
},
|
|
128
145
|
http2: {
|
|
129
146
|
...firefoxHttp2Base,
|
|
147
|
+
...firefoxHttp2Impersonation,
|
|
130
148
|
settings: {
|
|
131
149
|
headerTableSize: 65536,
|
|
132
150
|
enablePush: false,
|
|
@@ -155,10 +173,12 @@ export const firefox135 = {
|
|
|
155
173
|
version: "135.0",
|
|
156
174
|
tls: {
|
|
157
175
|
...firefoxTlsBase,
|
|
176
|
+
...firefoxTlsImpersonation,
|
|
158
177
|
cipherSuites: firefoxTlsCiphers,
|
|
159
178
|
},
|
|
160
179
|
http2: {
|
|
161
180
|
...firefoxHttp2Base,
|
|
181
|
+
...firefoxHttp2Impersonation,
|
|
162
182
|
settings: {
|
|
163
183
|
headerTableSize: 65536,
|
|
164
184
|
enablePush: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firefox.js","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"firefox.js","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safari.d.ts","sourceRoot":"","sources":["../../src/profiles/safari.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"safari.d.ts","sourceRoot":"","sources":["../../src/profiles/safari.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AA+F7D,eAAO,MAAM,QAAQ,EAAE,cA2BtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,cA2BtB,CAAC;AAEF,eAAO,MAAM,cAAc;;;CAGjB,CAAC"}
|
package/dist/profiles/safari.js
CHANGED
|
@@ -43,12 +43,18 @@ const safariTlsBase = {
|
|
|
43
43
|
"rsa_pkcs1_sha1",
|
|
44
44
|
],
|
|
45
45
|
grease: true,
|
|
46
|
+
ecPointFormats: [0x00],
|
|
47
|
+
compressCertificateAlgorithms: [0x02],
|
|
46
48
|
};
|
|
47
49
|
const safariHttp2Base = {
|
|
48
50
|
initialWindowSize: 1048576,
|
|
49
51
|
maxFrameSize: 16384,
|
|
50
52
|
headerTableSize: 65536,
|
|
51
53
|
weight: 256,
|
|
54
|
+
settingsOrder: [1, 2, 4, 6],
|
|
55
|
+
grease: false,
|
|
56
|
+
connectionWindowUpdate: 0,
|
|
57
|
+
pseudoHeaderOrder: ["method", "authority", "scheme", "path"],
|
|
52
58
|
};
|
|
53
59
|
const safariHttp1Base = {
|
|
54
60
|
connection: "keep-alive",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safari.js","sourceRoot":"","sources":["../../src/profiles/safari.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,wFAAwF;AACxF,MAAM,MAAM,GAAG,uBAAuB,CAAC;AAEvC;;;;GAIG;AACH,MAAM,sBAAsB,GAAsB;IAC9C,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CAC1D,CAAC;AAEF,MAAM,aAAa,GAAG;IAClB,cAAc,EAAE,sBAAsB;IACtC,iBAAiB,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAC/D,cAAc,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;IACjE;;;;;OAKG;IACH,mBAAmB,EAAE;QACjB,wBAAwB;QACxB,qBAAqB;QACrB,kBAAkB;QAClB,wBAAwB;QACxB,YAAY;QACZ,qBAAqB;QACrB,qBAAqB;QACrB,kBAAkB;QAClB,qBAAqB;QACrB,kBAAkB;QAClB,gBAAgB;KACnB;IACD,MAAM,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"safari.js","sourceRoot":"","sources":["../../src/profiles/safari.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -7,13 +7,66 @@
|
|
|
7
7
|
* evaluation; later {@link registerProfile} calls append or overwrite by id.
|
|
8
8
|
*/
|
|
9
9
|
import type { BrowserProfile, ProfileId } from "./types.js";
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Look up a profile by its branded id.
|
|
12
|
+
*
|
|
13
|
+
* Built-in profiles (chrome, firefox, safari, edge) are always available.
|
|
14
|
+
* Custom profiles registered via {@link registerProfile} are returned here too.
|
|
15
|
+
*
|
|
16
|
+
* @param id - The {@link ProfileId} to look up.
|
|
17
|
+
* @returns The matching {@link BrowserProfile}.
|
|
18
|
+
* @throws {UnknownProfileError} If no profile with the given id is registered.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* const chrome = getProfile("chrome-140" as ProfileId);
|
|
23
|
+
* console.log(chrome.tls.cipherSuites);
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @since 0.1.0
|
|
27
|
+
*/
|
|
11
28
|
export declare function getProfile(id: ProfileId): BrowserProfile;
|
|
12
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* List every registered profile id, in insertion order.
|
|
31
|
+
*
|
|
32
|
+
* Built-in profiles come first (chrome, firefox, safari, edge in that order),
|
|
33
|
+
* followed by any custom profiles registered via {@link registerProfile}.
|
|
34
|
+
* The order is stable because the registry is backed by a `Map`.
|
|
35
|
+
*
|
|
36
|
+
* @returns A readonly array of {@link ProfileId} values.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* for (const id of listProfiles()) {
|
|
41
|
+
* console.log(id); // "chrome-140", "firefox-128", ...
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @since 0.1.0
|
|
46
|
+
*/
|
|
13
47
|
export declare function listProfiles(): ReadonlyArray<ProfileId>;
|
|
14
48
|
/**
|
|
15
|
-
* Register a custom profile (e.g. a private build or a future version).
|
|
16
|
-
*
|
|
49
|
+
* Register a custom profile (e.g. a private build or a future browser version).
|
|
50
|
+
*
|
|
51
|
+
* Adds the profile to the registry, or overwrites any existing profile with the
|
|
52
|
+
* same id. After registration the profile is returned from {@link getProfile}
|
|
53
|
+
* and listed by {@link listProfiles}.
|
|
54
|
+
*
|
|
55
|
+
* @param profile - The {@link BrowserProfile} to register.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* registerProfile({
|
|
60
|
+
* id: "chrome-141" as ProfileId,
|
|
61
|
+
* name: "chrome",
|
|
62
|
+
* version: "141.0.0.0",
|
|
63
|
+
* tls: { ... },
|
|
64
|
+
* http2: { ... },
|
|
65
|
+
* http1: { ... },
|
|
66
|
+
* });
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @since 0.1.0
|
|
17
70
|
*/
|
|
18
71
|
export declare function registerProfile(profile: BrowserProfile): void;
|
|
19
72
|
//# sourceMappingURL=registry.d.ts.map
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA2B5D
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA2B5D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,cAAc,CAMxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAAC,SAAS,CAAC,CAEvD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE7D"}
|
package/dist/registry.js
CHANGED
|
@@ -28,7 +28,24 @@ for (const profile of Object.values(SafariProfiles)) {
|
|
|
28
28
|
for (const profile of Object.values(EdgeProfiles)) {
|
|
29
29
|
index(profile);
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Look up a profile by its branded id.
|
|
33
|
+
*
|
|
34
|
+
* Built-in profiles (chrome, firefox, safari, edge) are always available.
|
|
35
|
+
* Custom profiles registered via {@link registerProfile} are returned here too.
|
|
36
|
+
*
|
|
37
|
+
* @param id - The {@link ProfileId} to look up.
|
|
38
|
+
* @returns The matching {@link BrowserProfile}.
|
|
39
|
+
* @throws {UnknownProfileError} If no profile with the given id is registered.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* const chrome = getProfile("chrome-140" as ProfileId);
|
|
44
|
+
* console.log(chrome.tls.cipherSuites);
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @since 0.1.0
|
|
48
|
+
*/
|
|
32
49
|
export function getProfile(id) {
|
|
33
50
|
const profile = registry.get(id);
|
|
34
51
|
if (profile === undefined) {
|
|
@@ -36,13 +53,49 @@ export function getProfile(id) {
|
|
|
36
53
|
}
|
|
37
54
|
return profile;
|
|
38
55
|
}
|
|
39
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* List every registered profile id, in insertion order.
|
|
58
|
+
*
|
|
59
|
+
* Built-in profiles come first (chrome, firefox, safari, edge in that order),
|
|
60
|
+
* followed by any custom profiles registered via {@link registerProfile}.
|
|
61
|
+
* The order is stable because the registry is backed by a `Map`.
|
|
62
|
+
*
|
|
63
|
+
* @returns A readonly array of {@link ProfileId} values.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* for (const id of listProfiles()) {
|
|
68
|
+
* console.log(id); // "chrome-140", "firefox-128", ...
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* @since 0.1.0
|
|
73
|
+
*/
|
|
40
74
|
export function listProfiles() {
|
|
41
75
|
return Array.from(registry.keys());
|
|
42
76
|
}
|
|
43
77
|
/**
|
|
44
|
-
* Register a custom profile (e.g. a private build or a future version).
|
|
45
|
-
*
|
|
78
|
+
* Register a custom profile (e.g. a private build or a future browser version).
|
|
79
|
+
*
|
|
80
|
+
* Adds the profile to the registry, or overwrites any existing profile with the
|
|
81
|
+
* same id. After registration the profile is returned from {@link getProfile}
|
|
82
|
+
* and listed by {@link listProfiles}.
|
|
83
|
+
*
|
|
84
|
+
* @param profile - The {@link BrowserProfile} to register.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* registerProfile({
|
|
89
|
+
* id: "chrome-141" as ProfileId,
|
|
90
|
+
* name: "chrome",
|
|
91
|
+
* version: "141.0.0.0",
|
|
92
|
+
* tls: { ... },
|
|
93
|
+
* http2: { ... },
|
|
94
|
+
* http1: { ... },
|
|
95
|
+
* });
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* @since 0.1.0
|
|
46
99
|
*/
|
|
47
100
|
export function registerProfile(profile) {
|
|
48
101
|
index(profile);
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEtD,SAAS,KAAK,CAAC,OAAuB;IAClC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,oDAAoD;AACpD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;IAClD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;IACnD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;IAClD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEtD,SAAS,KAAK,CAAC,OAAuB;IAClC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,oDAAoD;AACpD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;IAClD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;IACnD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;IAClD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,EAAa;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY;IACxB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe,CAAC,OAAuB;IACnD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,13 +5,26 @@
|
|
|
5
5
|
* HOW to emit it on the wire. Protocol implementations (tls, http1, http2) read
|
|
6
6
|
* these definitions and translate them into bytes / header order / settings frames.
|
|
7
7
|
*/
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Branded browser-profile identifier.
|
|
10
|
+
*
|
|
11
|
+
* Format: `"${name}-${version}"`, e.g. `"chrome-140"`, `"firefox-128"`.
|
|
12
|
+
* Branding prevents passing an arbitrary string where a validated id is expected.
|
|
13
|
+
*
|
|
14
|
+
* @see createId for building a branded id from a name + version.
|
|
15
|
+
*/
|
|
9
16
|
export type ProfileId = string & {
|
|
10
17
|
__brand: "ProfileId";
|
|
11
18
|
};
|
|
12
19
|
/** Known browser families. Discriminated-union literal set. */
|
|
13
20
|
export type ProfileName = "chrome" | "firefox" | "safari" | "edge";
|
|
14
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* TLS-layer fingerprint: everything a ClientHello reveals about the client.
|
|
23
|
+
*
|
|
24
|
+
* Stored as human-readable strings (cipher names, group names) and integer
|
|
25
|
+
* arrays (extension order). Translation to wire bytes happens in the protocol
|
|
26
|
+
* layers via {@link cipherSuiteToWire} and the IANA code tables in {@link codes.ts}.
|
|
27
|
+
*/
|
|
15
28
|
export interface TlsProfile {
|
|
16
29
|
/** Ordered list of offered cipher suites (IANA names). Order matters for fingerprinting. */
|
|
17
30
|
readonly cipherSuites: readonly string[];
|
|
@@ -25,10 +38,21 @@ export interface TlsProfile {
|
|
|
25
38
|
readonly signatureAlgorithms: readonly string[];
|
|
26
39
|
/** record_size_limit extension value, if advertised. Absent when not sent. */
|
|
27
40
|
readonly recordSizeLimit?: number;
|
|
41
|
+
/** EC point formats offered. Chrome: [0x00 (uncompressed)]. */
|
|
42
|
+
readonly ecPointFormats?: readonly number[];
|
|
43
|
+
/** compress_certificate algorithms. Chrome: [0x02 (brotli)]. */
|
|
44
|
+
readonly compressCertificateAlgorithms?: readonly number[];
|
|
45
|
+
/** Record padding target in bytes. Chrome: 512. */
|
|
46
|
+
readonly recordPadding?: number;
|
|
28
47
|
/** Whether this browser randomizes with GREASE values (RFC 8701). */
|
|
29
48
|
readonly grease: boolean;
|
|
30
49
|
}
|
|
31
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* HTTP/2 SETTINGS + tuning parameters.
|
|
52
|
+
*
|
|
53
|
+
* Captures the values a client advertises in its initial SETTINGS frame and
|
|
54
|
+
* the defaults it applies to stream priority / window sizing.
|
|
55
|
+
*/
|
|
32
56
|
export interface Http2Profile {
|
|
33
57
|
/** HTTP/2 settings the client sends in its first SETTINGS frame. */
|
|
34
58
|
readonly settings: Partial<Http2Settings>;
|
|
@@ -42,8 +66,22 @@ export interface Http2Profile {
|
|
|
42
66
|
readonly weight: number;
|
|
43
67
|
/** Default priority dependency / exclusive flag, if any. */
|
|
44
68
|
readonly priority?: Http2Priority;
|
|
69
|
+
/** Wire order of SETTINGS ids (fingerprint signal). Chrome: [1, 2, 4, 6]. */
|
|
70
|
+
readonly settingsOrder?: readonly number[];
|
|
71
|
+
/** Whether to inject GREASE settings. Chrome: true. */
|
|
72
|
+
readonly grease?: boolean;
|
|
73
|
+
/** Connection-level WINDOW_UPDATE value in preface. Chrome: 15663105. */
|
|
74
|
+
readonly connectionWindowUpdate?: number;
|
|
75
|
+
/** Pseudo-header order. Chrome: ["method", "authority", "scheme", "path"]. */
|
|
76
|
+
readonly pseudoHeaderOrder?: readonly string[];
|
|
45
77
|
}
|
|
46
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* HTTP/2 numeric settings (RFC 9113 §6.5.1).
|
|
80
|
+
*
|
|
81
|
+
* These are the settings a client advertises in its SETTINGS frame; not every
|
|
82
|
+
* browser sends all of them, so the type is used as `Partial<Http2Settings>`
|
|
83
|
+
* in {@link Http2Profile}.
|
|
84
|
+
*/
|
|
47
85
|
export interface Http2Settings {
|
|
48
86
|
readonly headerTableSize: number;
|
|
49
87
|
readonly enablePush: boolean;
|
|
@@ -58,7 +96,12 @@ export interface Http2Priority {
|
|
|
58
96
|
readonly exclusive: boolean;
|
|
59
97
|
readonly weight: number;
|
|
60
98
|
}
|
|
61
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* HTTP/1.1-layer fingerprint: header defaults and ordering.
|
|
101
|
+
*
|
|
102
|
+
* Models the headers a browser sends on every request and the order in which
|
|
103
|
+
* it serializes them — both are fingerprint signals.
|
|
104
|
+
*/
|
|
62
105
|
export interface Http1Profile {
|
|
63
106
|
/** Default headers sent on every request, in order. */
|
|
64
107
|
readonly defaultHeaders: Readonly<Record<string, string>>;
|
|
@@ -69,7 +112,13 @@ export interface Http1Profile {
|
|
|
69
112
|
/** Accept-Encoding value sent by default. */
|
|
70
113
|
readonly acceptEncoding: string;
|
|
71
114
|
}
|
|
72
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* A complete browser fingerprint across all layers.
|
|
117
|
+
*
|
|
118
|
+
* Pure data — no protocol logic, no Node imports. The `id` uniquely identifies
|
|
119
|
+
* this profile in the registry. Higher layers read these definitions and
|
|
120
|
+
* translate them into wire bytes / header order / settings frames.
|
|
121
|
+
*/
|
|
73
122
|
export interface BrowserProfile {
|
|
74
123
|
readonly id: ProfileId;
|
|
75
124
|
/** Human-readable browser name. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -5,15 +5,47 @@
|
|
|
5
5
|
* cross-package imports.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Compile-time exhaustiveness check for `switch`/`if-else` over discriminated unions.
|
|
9
|
+
*
|
|
10
|
+
* Call in the `default` branch with the narrowed variable: `default: assertNever(x)`.
|
|
11
|
+
* The argument is typed `never`, so adding a new union member forces every handler
|
|
12
|
+
* to compile-error until it handles the new case. At runtime (if the check is ever
|
|
13
|
+
* bypassed by an untyped value) it throws with the offending value.
|
|
14
|
+
*
|
|
15
|
+
* @param x - A value that must be `never` at compile time.
|
|
16
|
+
* @throws {Error} If reached at runtime with a non-`never` value.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* switch (state.state) {
|
|
21
|
+
* case "open": return doOpen();
|
|
22
|
+
* case "closed": return doClosed();
|
|
23
|
+
* default: return assertNever(state.state);
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @since 0.1.0
|
|
11
28
|
*/
|
|
12
29
|
export declare function assertNever(x: never): never;
|
|
13
30
|
import type { ProfileId } from "./types.js";
|
|
14
31
|
/**
|
|
15
32
|
* Build a branded {@link ProfileId} from a browser name + version.
|
|
16
|
-
*
|
|
33
|
+
*
|
|
34
|
+
* The canonical id format is `"${name}-${version}"`, e.g. `"chrome-140"`.
|
|
35
|
+
* The version is the major version only — patch-level differences within a
|
|
36
|
+
* major release do not change the fingerprint.
|
|
37
|
+
*
|
|
38
|
+
* @param name - Browser family name, e.g. `"chrome"`.
|
|
39
|
+
* @param version - Major version string, e.g. `"140"`.
|
|
40
|
+
* @returns A branded {@link ProfileId}.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* createId("chrome", "140"); // ProfileId<"chrome-140">
|
|
45
|
+
* createId("firefox", "128"); // ProfileId<"firefox-128">
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @since 0.1.0
|
|
17
49
|
*/
|
|
18
50
|
export declare function createId(name: string, version: string): ProfileId;
|
|
19
51
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAE3C;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAEjE"}
|
package/dist/utils.js
CHANGED
|
@@ -5,9 +5,26 @@
|
|
|
5
5
|
* cross-package imports.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Compile-time exhaustiveness check for `switch`/`if-else` over discriminated unions.
|
|
9
|
+
*
|
|
10
|
+
* Call in the `default` branch with the narrowed variable: `default: assertNever(x)`.
|
|
11
|
+
* The argument is typed `never`, so adding a new union member forces every handler
|
|
12
|
+
* to compile-error until it handles the new case. At runtime (if the check is ever
|
|
13
|
+
* bypassed by an untyped value) it throws with the offending value.
|
|
14
|
+
*
|
|
15
|
+
* @param x - A value that must be `never` at compile time.
|
|
16
|
+
* @throws {Error} If reached at runtime with a non-`never` value.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* switch (state.state) {
|
|
21
|
+
* case "open": return doOpen();
|
|
22
|
+
* case "closed": return doClosed();
|
|
23
|
+
* default: return assertNever(state.state);
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @since 0.1.0
|
|
11
28
|
*/
|
|
12
29
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
13
30
|
export function assertNever(x) {
|
|
@@ -15,7 +32,22 @@ export function assertNever(x) {
|
|
|
15
32
|
}
|
|
16
33
|
/**
|
|
17
34
|
* Build a branded {@link ProfileId} from a browser name + version.
|
|
18
|
-
*
|
|
35
|
+
*
|
|
36
|
+
* The canonical id format is `"${name}-${version}"`, e.g. `"chrome-140"`.
|
|
37
|
+
* The version is the major version only — patch-level differences within a
|
|
38
|
+
* major release do not change the fingerprint.
|
|
39
|
+
*
|
|
40
|
+
* @param name - Browser family name, e.g. `"chrome"`.
|
|
41
|
+
* @param version - Major version string, e.g. `"140"`.
|
|
42
|
+
* @returns A branded {@link ProfileId}.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* createId("chrome", "140"); // ProfileId<"chrome-140">
|
|
47
|
+
* createId("firefox", "128"); // ProfileId<"firefox-128">
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @since 0.1.0
|
|
19
51
|
*/
|
|
20
52
|
export function createId(name, version) {
|
|
21
53
|
return `${name}-${version}`;
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,6DAA6D;AAC7D,MAAM,UAAU,WAAW,CAAC,CAAQ;IAChC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9D,CAAC;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAe;IAClD,OAAO,GAAG,IAAI,IAAI,OAAO,EAAe,CAAC;AAC7C,CAAC"}
|