@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.
Files changed (46) hide show
  1. package/README.md +1 -1
  2. package/dist/codes.d.ts +44 -4
  3. package/dist/codes.d.ts.map +1 -1
  4. package/dist/codes.js +44 -4
  5. package/dist/codes.js.map +1 -1
  6. package/dist/diff.d.ts +25 -1
  7. package/dist/diff.d.ts.map +1 -1
  8. package/dist/diff.js +16 -0
  9. package/dist/diff.js.map +1 -1
  10. package/dist/errors.d.ts +50 -2
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/errors.js +50 -2
  13. package/dist/errors.js.map +1 -1
  14. package/dist/index.d.ts +9 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +9 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/profiles/chrome.d.ts +16 -1
  19. package/dist/profiles/chrome.d.ts.map +1 -1
  20. package/dist/profiles/chrome.js +21 -8
  21. package/dist/profiles/chrome.js.map +1 -1
  22. package/dist/profiles/edge.d.ts +7 -6
  23. package/dist/profiles/edge.d.ts.map +1 -1
  24. package/dist/profiles/edge.js +19 -13
  25. package/dist/profiles/edge.js.map +1 -1
  26. package/dist/profiles/firefox.d.ts.map +1 -1
  27. package/dist/profiles/firefox.js +20 -0
  28. package/dist/profiles/firefox.js.map +1 -1
  29. package/dist/profiles/safari.d.ts.map +1 -1
  30. package/dist/profiles/safari.js +6 -0
  31. package/dist/profiles/safari.js.map +1 -1
  32. package/dist/registry.d.ts +57 -4
  33. package/dist/registry.d.ts.map +1 -1
  34. package/dist/registry.js +57 -4
  35. package/dist/registry.js.map +1 -1
  36. package/dist/types.d.ts +55 -6
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/utils.d.ts +36 -4
  39. package/dist/utils.d.ts.map +1 -1
  40. package/dist/utils.js +36 -4
  41. package/dist/utils.js.map +1 -1
  42. package/dist/validate.d.ts +62 -7
  43. package/dist/validate.d.ts.map +1 -1
  44. package/dist/validate.js +67 -6
  45. package/dist/validate.js.map +1 -1
  46. package/package.json +3 -3
@@ -1,25 +1,24 @@
1
1
  /**
2
2
  * Microsoft Edge fingerprint definitions.
3
3
  *
4
- * Edge is Chromium-based, so its TLS fingerprint is close to Chrome's — same
5
- * GREASE behavior, same cipher families — but differs in the advertised user
6
- * agent string, the `sec-ch-ua` brand list (includes "Microsoft Edge"), and a
7
- * slightly different extension order. HTTP/2 settings track Chrome closely.
8
- * Values mirror curl-impersonate's Edge 101 ground-truth signature byte-for-byte
9
- * (see tests/profiles-edge.test.ts for the wire-code mapping).
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 TLS extension order, in wire order, taken verbatim from the
15
- * curl-impersonate signature. GREASE extension slots are excluded (their values
16
- * are randomized per-connection and the profile stores literal wire codes).
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: EDGE_EXTENSION_ORDER,
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":"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"}
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;AA4E7D,eAAO,MAAM,UAAU,EAAE,cAgCxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAgCxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAgCxB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;CAIlB,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"}
@@ -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;AAyF7D,eAAO,MAAM,QAAQ,EAAE,cA2BtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,cA2BtB,CAAC;AAEF,eAAO,MAAM,cAAc;;;CAGjB,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"}
@@ -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":"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"}
1
+ {"version":3,"file":"safari.js","sourceRoot":"","sources":["../../src/profiles/safari.ts"],"names":[],"mappings":"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"}
@@ -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
- /** Look up a profile by its branded id. Throws {@link UnknownProfileError} if absent. */
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
- /** List every registered profile id, in insertion order. */
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
- * Overwrites any existing profile with the same id.
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
@@ -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,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,cAAc,CAMxD;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,IAAI,aAAa,CAAC,SAAS,CAAC,CAEvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE7D"}
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
- /** Look up a profile by its branded id. Throws {@link UnknownProfileError} if absent. */
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
- /** List every registered profile id, in insertion order. */
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
- * Overwrites any existing profile with the same id.
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);
@@ -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,yFAAyF;AACzF,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,4DAA4D;AAC5D,MAAM,UAAU,YAAY;IACxB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAuB;IACnD,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC"}
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
- /** Branded browser-profile identifier (e.g. "chrome-140"). */
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
- /** TLS-layer fingerprint: everything a TLS client hello reveals about the client. */
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
- /** HTTP/2 SETTINGS + tuning parameters. */
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
- /** HTTP/2 numeric settings (RFC 9113 §6.5.1). */
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
- /** HTTP/1.1-layer fingerprint: header defaults and ordering. */
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
- /** A complete browser fingerprint across all layers. */
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. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8DAA8D;AAC9D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1D,+DAA+D;AAC/D,MAAM,MAAM,WAAW,GACjB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,MAAM,CAAC;AAEb,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACvB,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,kDAAkD;IAClD,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,6CAA6C;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,0CAA0C;IAC1C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,oCAAoC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B;AAED,2CAA2C;AAC3C,MAAM,WAAW,YAAY;IACzB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1C,uDAAuD;IACvD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;CACrC;AAED,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACtC;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAY;IACzB,uDAAuD;IACvD,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,YAAY,GAAG,OAAO,CAAC;IAC5C,6CAA6C;IAC7C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACnC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAChC"}
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
- * Exhaustiveness check for `switch`/`if-else` over discriminated unions.
9
- * Call in the `default` branch: `default: assertNever(x)`.
10
- * Adding a new union member forces every handler to compile-error until handled.
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
- * Format: `${name}-${version}`, e.g. "chrome-140".
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
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AAEH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAE3C;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAEjE"}
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
- * Exhaustiveness check for `switch`/`if-else` over discriminated unions.
9
- * Call in the `default` branch: `default: assertNever(x)`.
10
- * Adding a new union member forces every handler to compile-error until handled.
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
- * Format: `${name}-${version}`, e.g. "chrome-140".
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;;;;GAIG;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;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAe;IAClD,OAAO,GAAG,IAAI,IAAI,OAAO,EAAe,CAAC;AAC7C,CAAC"}
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"}