@browsercore/profiles 0.1.3 → 0.1.9

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 (42) hide show
  1. package/README.md +114 -11
  2. package/dist/codes.d.ts +40 -0
  3. package/dist/codes.d.ts.map +1 -0
  4. package/dist/codes.js +111 -0
  5. package/dist/codes.js.map +1 -0
  6. package/dist/diff.d.ts.map +1 -1
  7. package/dist/diff.js +11 -8
  8. package/dist/diff.js.map +1 -1
  9. package/dist/errors.d.ts.map +1 -1
  10. package/dist/errors.js.map +1 -1
  11. package/dist/index.d.ts +2 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/profiles/chrome.d.ts +17 -4
  16. package/dist/profiles/chrome.d.ts.map +1 -1
  17. package/dist/profiles/chrome.js +68 -83
  18. package/dist/profiles/chrome.js.map +1 -1
  19. package/dist/profiles/edge.d.ts +2 -1
  20. package/dist/profiles/edge.d.ts.map +1 -1
  21. package/dist/profiles/edge.js +39 -41
  22. package/dist/profiles/edge.js.map +1 -1
  23. package/dist/profiles/firefox.d.ts +13 -3
  24. package/dist/profiles/firefox.d.ts.map +1 -1
  25. package/dist/profiles/firefox.js +48 -63
  26. package/dist/profiles/firefox.js.map +1 -1
  27. package/dist/profiles/safari.d.ts +6 -3
  28. package/dist/profiles/safari.d.ts.map +1 -1
  29. package/dist/profiles/safari.js +63 -46
  30. package/dist/profiles/safari.js.map +1 -1
  31. package/dist/registry.d.ts +4 -2
  32. package/dist/registry.d.ts.map +1 -1
  33. package/dist/registry.js +4 -2
  34. package/dist/registry.js.map +1 -1
  35. package/dist/utils.d.ts +2 -1
  36. package/dist/utils.d.ts.map +1 -1
  37. package/dist/utils.js.map +1 -1
  38. package/dist/validate.d.ts +8 -4
  39. package/dist/validate.d.ts.map +1 -1
  40. package/dist/validate.js +8 -62
  41. package/dist/validate.js.map +1 -1
  42. package/package.json +49 -44
@@ -2,20 +2,45 @@
2
2
  * Safari fingerprint definitions.
3
3
  *
4
4
  * Safari (WebKit) has a distinct TLS fingerprint: it enables GREASE, uses a
5
- * unique cipher order that prioritizes ChaCha20 less aggressively than Chrome,
6
- * and advertises a smaller set of signature algorithms. HTTP/2 settings are
7
- * conservative. Values mirror real Safari/WebKit captures per version.
5
+ * cipher order that prioritizes ChaCha20 less aggressively than Chrome, and
6
+ * advertises a smaller set of signature algorithms. HTTP/2 settings are
7
+ * conservative. Values mirror curl-impersonate's Safari 15.5 ground-truth
8
+ * signature byte-for-byte (see tests/profiles-safari.test.ts for the wire-code
9
+ * mapping). Safari 17 and 18 share this fingerprint; they differ only in
10
+ * version string and User-Agent.
8
11
  */
12
+ /** TLS 1.3 GREASE placeholder cipher (0x?a?a) Safari inserts at the top of the list. */
13
+ const GREASE = "TLS_GREASE_RESERVED_0";
14
+ /**
15
+ * Safari TLS extension order, in wire order, taken verbatim from the
16
+ * curl-impersonate signature. GREASE extension slots are excluded (their values
17
+ * are randomized per-connection and the profile stores literal wire codes).
18
+ */
19
+ const SAFARI_EXTENSION_ORDER = [
20
+ 0, 23, 65281, 10, 11, 16, 5, 13, 18, 51, 45, 43, 27, 21,
21
+ ];
9
22
  const safariTlsBase = {
10
- extensionOrder: [
11
- 0, 10, 11, 13, 16, 18, 23, 35, 41, 43, 45, 51, 65281,
12
- ],
13
- supportedVersions: ["TLS 1.3", "TLS 1.2"],
14
- keyShareGroups: ["x25519", "secp256r1"],
23
+ extensionOrder: SAFARI_EXTENSION_ORDER,
24
+ supportedVersions: ["TLS 1.3", "TLS 1.2", "TLS 1.1", "TLS 1.0"],
25
+ keyShareGroups: ["x25519", "secp256r1", "secp384r1", "secp521r1"],
26
+ /**
27
+ * Safari's signature algorithm list, in wire order. Note the intentional
28
+ * duplicate rsa_pss_rsae_sha384 (0x0805) — this is a real Safari quirk that
29
+ * curl-impersonate preserves (BoringSSL's uniqueness check is patched out
30
+ * for this reason). See boringssl-old-ciphers.patch in curl-impersonate.
31
+ */
15
32
  signatureAlgorithms: [
16
33
  "ecdsa_secp256r1_sha256",
17
34
  "rsa_pss_rsae_sha256",
18
35
  "rsa_pkcs1_sha256",
36
+ "ecdsa_secp384r1_sha384",
37
+ "ecdsa_sha1",
38
+ "rsa_pss_rsae_sha384",
39
+ "rsa_pss_rsae_sha384",
40
+ "rsa_pkcs1_sha384",
41
+ "rsa_pss_rsae_sha512",
42
+ "rsa_pkcs1_sha512",
43
+ "rsa_pkcs1_sha1",
19
44
  ],
20
45
  grease: true,
21
46
  };
@@ -37,31 +62,41 @@ const safariHttp1Base = {
37
62
  "connection",
38
63
  ],
39
64
  };
65
+ /**
66
+ * Safari cipher suites in wire order, matching curl-impersonate's Safari 15.5
67
+ * signature. The legacy tail uses SHA-CBC (not SHA256-CBC) variants followed by
68
+ * a 3DES tail — BoringSSL dropped these, but curl-impersonate restores them.
69
+ */
70
+ const SAFARI_CIPHERS = [
71
+ GREASE,
72
+ "TLS_AES_128_GCM_SHA256",
73
+ "TLS_AES_256_GCM_SHA384",
74
+ "TLS_CHACHA20_POLY1305_SHA256",
75
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
76
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
77
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
78
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
79
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
80
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
81
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
82
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
83
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
84
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
85
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
86
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
87
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
88
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
89
+ "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
90
+ "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
91
+ "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
92
+ ];
40
93
  export const safari17 = {
41
94
  id: "safari-17",
42
95
  name: "safari",
43
96
  version: "17.6",
44
97
  tls: {
45
98
  ...safariTlsBase,
46
- cipherSuites: [
47
- "TLS_AES_128_GCM_SHA256",
48
- "TLS_AES_256_GCM_SHA384",
49
- "TLS_CHACHA20_POLY1305_SHA256",
50
- "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
51
- "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
52
- "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
53
- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
54
- "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
55
- "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
56
- "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
57
- "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
58
- "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
59
- "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
60
- "TLS_RSA_WITH_AES_256_GCM_SHA384",
61
- "TLS_RSA_WITH_AES_128_GCM_SHA256",
62
- "TLS_RSA_WITH_AES_256_CBC_SHA256",
63
- "TLS_RSA_WITH_AES_128_CBC_SHA256",
64
- ],
99
+ cipherSuites: SAFARI_CIPHERS,
65
100
  },
66
101
  http2: {
67
102
  ...safariHttp2Base,
@@ -88,25 +123,7 @@ export const safari18 = {
88
123
  version: "18.1",
89
124
  tls: {
90
125
  ...safariTlsBase,
91
- cipherSuites: [
92
- "TLS_AES_128_GCM_SHA256",
93
- "TLS_AES_256_GCM_SHA384",
94
- "TLS_CHACHA20_POLY1305_SHA256",
95
- "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
96
- "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
97
- "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
98
- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
99
- "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
100
- "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
101
- "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
102
- "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
103
- "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
104
- "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
105
- "TLS_RSA_WITH_AES_256_GCM_SHA384",
106
- "TLS_RSA_WITH_AES_128_GCM_SHA256",
107
- "TLS_RSA_WITH_AES_256_CBC_SHA256",
108
- "TLS_RSA_WITH_AES_128_CBC_SHA256",
109
- ],
126
+ cipherSuites: SAFARI_CIPHERS,
110
127
  },
111
128
  http2: {
112
129
  ...safariHttp2Base,
@@ -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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"}
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * Profile registry — the single source of truth for known browser fingerprints.
3
3
  *
4
- * Profiles are registered once at module load (via the per-browser map files) and
5
- * can be extended at runtime through {@link registerProfile}. Lookups are O(1).
4
+ * Backed by a `Map`, which preserves insertion order, so {@link listProfiles}
5
+ * returns ids in a stable, deterministic sequence (built-ins first, then any
6
+ * runtime-registered profiles). Built-in profiles are indexed once at module
7
+ * evaluation; later {@link registerProfile} calls append or overwrite by id.
6
8
  */
7
9
  import type { BrowserProfile, ProfileId } from "./types.js";
8
10
  /** Look up a profile by its branded id. Throws {@link UnknownProfileError} if absent. */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;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,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"}
package/dist/registry.js CHANGED
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * Profile registry — the single source of truth for known browser fingerprints.
3
3
  *
4
- * Profiles are registered once at module load (via the per-browser map files) and
5
- * can be extended at runtime through {@link registerProfile}. Lookups are O(1).
4
+ * Backed by a `Map`, which preserves insertion order, so {@link listProfiles}
5
+ * returns ids in a stable, deterministic sequence (built-ins first, then any
6
+ * runtime-registered profiles). Built-in profiles are indexed once at module
7
+ * evaluation; later {@link registerProfile} calls append or overwrite by id.
6
8
  */
7
9
  import { UnknownProfileError } from "./errors.js";
8
10
  import { ChromeProfiles } from "./profiles/chrome.js";
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;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,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"}
package/dist/utils.d.ts CHANGED
@@ -10,9 +10,10 @@
10
10
  * Adding a new union member forces every handler to compile-error until handled.
11
11
  */
12
12
  export declare function assertNever(x: never): never;
13
+ import type { ProfileId } from "./types.js";
13
14
  /**
14
15
  * Build a branded {@link ProfileId} from a browser name + version.
15
16
  * Format: `${name}-${version}`, e.g. "chrome-140".
16
17
  */
17
- export declare function createId(name: string, version: string): string;
18
+ export declare function createId(name: string, version: string): ProfileId;
18
19
  //# 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;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9D"}
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"}
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;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAe;IAClD,OAAO,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;AAChC,CAAC"}
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"}
@@ -59,6 +59,13 @@ export declare class ValidationError extends ProfileError {
59
59
  cause?: Error;
60
60
  });
61
61
  }
62
+ /** Outcome of validating a profile against a captured ClientHello. */
63
+ export interface ValidationResult {
64
+ /** True when every field matches (respecting GREASE randomization for cipher suites). */
65
+ readonly ok: boolean;
66
+ /** Empty when `ok` is true; otherwise one {@link ProfileDiff} per mismatched field. */
67
+ readonly diffs: ProfileDiff[];
68
+ }
62
69
  /**
63
70
  * Project a profile's TLS fields onto the wire values its ClientHello should
64
71
  * carry for a connection to `serverName`. Extension order is taken verbatim from
@@ -73,8 +80,5 @@ export declare function buildExpectedClientHello(profile: BrowserProfile, server
73
80
  * for cipher suites), and the list of diffs otherwise. SNI is not compared
74
81
  * because captures do not record the destination hostname.
75
82
  */
76
- export declare function validateProfileAgainstCapture(profile: BrowserProfile, capture: TlsCapture): {
77
- ok: boolean;
78
- diffs: ProfileDiff[];
79
- };
83
+ export declare function validateProfileAgainstCapture(profile: BrowserProfile, capture: TlsCapture): ValidationResult;
80
84
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACvB,iEAAiE;IACjE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,qEAAqE;IACrE,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,yCAAyC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,yCAAyC;IACzC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAChC,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,yDAAyD;IACzD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,iCAAiC;IACjC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,iCAAiC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAmED,kFAAkF;AAClF,qBAAa,eAAgB,SAAQ,YAAY;IAC7C,SAAyB,IAAI,EAAG,iBAAiB,CAAU;gBAE/C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;CAI3D;AAkCD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACnB,mBAAmB,CAUrB;AAsDD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CACzC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,GACpB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAoBvC"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAS3C,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACvB,iEAAiE;IACjE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,qEAAqE;IACrE,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,yCAAyC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,yCAAyC;IACzC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAChC,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,yDAAyD;IACzD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,iCAAiC;IACjC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,iCAAiC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,kFAAkF;AAClF,qBAAa,eAAgB,SAAQ,YAAY;IAC7C,SAAyB,IAAI,EAAG,iBAAiB,CAAU;IAE3D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,EAGvD;CACJ;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,uFAAuF;IACvF,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;CACjC;AAkCD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACnB,mBAAmB,CAUrB;AA2DD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CACzC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,GACpB,gBAAgB,CAoBlB"}
package/dist/validate.js CHANGED
@@ -15,66 +15,7 @@
15
15
  * extension slot. See the per-field comments below.
16
16
  */
17
17
  import { ProfileError } from "./errors.js";
18
- /** The name Chrome uses in its cipher list to mark a GREASE slot (RFC 8701). */
19
- const CIPHER_GREASE_PLACEHOLDER = "TLS_GREASE_RESERVED_0";
20
- /**
21
- * IANA TLS Cipher Suite Registry — selected codes.
22
- *
23
- * Values are the canonical 2-byte wire codes from
24
- * <https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4>.
25
- * Only the suites used by the shipped profiles are mapped; an unknown name is a
26
- * bug in a profile definition and throws.
27
- */
28
- const CIPHER_SUITE_CODES = {
29
- // GREASE: real value is randomized per-connection (0x0a0a..0xfafa). We use the
30
- // first canonical GREASE code for the expected representation; validation
31
- // accepts any GREASE-pattern value at a GREASE slot.
32
- [CIPHER_GREASE_PLACEHOLDER]: 0x0a0a,
33
- TLS_AES_128_GCM_SHA256: 0x1301,
34
- TLS_AES_256_GCM_SHA384: 0x1302,
35
- TLS_CHACHA20_POLY1305_SHA256: 0x1303,
36
- TLS_AES_128_CCM_SHA256: 0x1304,
37
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: 0xc02b,
38
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: 0xc02f,
39
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: 0xc02c,
40
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: 0xc030,
41
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: 0xcca9,
42
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: 0xcca8,
43
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: 0xc013,
44
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: 0xc014,
45
- TLS_RSA_WITH_AES_128_GCM_SHA256: 0x009c,
46
- TLS_RSA_WITH_AES_256_GCM_SHA384: 0x009d,
47
- TLS_RSA_WITH_AES_128_CBC_SHA: 0x002f,
48
- TLS_RSA_WITH_AES_256_CBC_SHA: 0x0035,
49
- };
50
- /**
51
- * IANA TLS Supported Groups Registry (named groups) — selected codes.
52
- * <https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8>
53
- */
54
- const NAMED_GROUP_CODES = {
55
- x25519: 0x001d,
56
- secp256r1: 0x0017,
57
- secp384r1: 0x0018,
58
- };
59
- /**
60
- * IANA TLS SignatureScheme Registry — selected codes.
61
- * <https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-16>
62
- */
63
- const SIGNATURE_SCHEME_CODES = {
64
- ecdsa_secp256r1_sha256: 0x0403,
65
- rsa_pss_rsae_sha256: 0x0804,
66
- rsa_pkcs1_sha256: 0x0401,
67
- ecdsa_secp384r1_sha384: 0x0503,
68
- rsa_pss_rsae_sha384: 0x0805,
69
- rsa_pkcs1_sha384: 0x0501,
70
- };
71
- /** IANA TLS ProtocolVersion codes for the supported_versions extension. */
72
- const VERSION_CODES = {
73
- "TLS 1.3": 0x0304,
74
- "TLS 1.2": 0x0303,
75
- "TLS 1.1": 0x0302,
76
- "TLS 1.0": 0x0301,
77
- };
18
+ import { CIPHER_GREASE_PLACEHOLDER, CIPHER_SUITE_CODES, NAMED_GROUP_CODES, SIGNATURE_SCHEME_CODES, VERSION_CODES, } from "./codes.js";
78
19
  /** Validation / projection failure (unknown profile value, bad capture, etc.). */
79
20
  export class ValidationError extends ProfileError {
80
21
  kind = "ValidationError";
@@ -123,9 +64,14 @@ export function buildExpectedClientHello(profile, serverName) {
123
64
  sni: serverName,
124
65
  };
125
66
  }
126
- /** A 2-byte value matches the GREASE pattern 0x?a?a (high byte === low byte). */
67
+ /**
68
+ * A 2-byte value matches the GREASE pattern 0x?a?a (high byte === low byte).
69
+ * RFC 8701 reserves the range 0x0a0a..0xfafa in steps of 0x1010, so values below
70
+ * 0x0a0a (notably 0x0000) are excluded even though they share the high===low
71
+ * byte shape.
72
+ */
127
73
  function isGreaseValue(v) {
128
- return (v >> 8) === (v & 0xff);
74
+ return v >= 0x0a0a && (v >> 8) === (v & 0xff);
129
75
  }
130
76
  /**
131
77
  * Element-wise diff of two numeric arrays, reporting one {@link ProfileDiff} per
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,47 +1,52 @@
1
1
  {
2
- "name": "@browsercore/profiles",
3
- "version": "0.1.3",
4
- "description": "Browser fingerprint definitions (TLS / HTTP/2 / HTTP/1.1). Pure data \u2014 no protocol implementation.",
5
- "repository": {
6
- "type": "git",
7
- "url": "https://github.com/jverneuer/browsercore-profiles.git"
8
- },
9
- "homepage": "https://github.com/jverneuer/browsercore-profiles#readme",
10
- "bugs": {
11
- "url": "https://github.com/jverneuer/browsercore-profiles/issues"
12
- },
13
- "license": "MIT",
14
- "type": "module",
15
- "main": "./dist/index.js",
16
- "types": "./dist/index.d.ts",
17
- "exports": {
18
- ".": {
19
- "types": "./dist/index.d.ts",
20
- "import": "./dist/index.js"
2
+ "name": "@browsercore/profiles",
3
+ "version": "0.1.9",
4
+ "description": "Browser fingerprint definitions (TLS / HTTP/2 / HTTP/1.1). Pure data — no protocol implementation.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/jverneuer/browsercore-profiles.git"
8
+ },
9
+ "homepage": "https://github.com/jverneuer/browsercore-profiles#readme",
10
+ "bugs": {
11
+ "url": "https://github.com/jverneuer/browsercore-profiles/issues"
12
+ },
13
+ "license": "MIT",
14
+ "type": "module",
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "LICENSE",
26
+ "README.md"
27
+ ],
28
+ "publishConfig": {
29
+ "access": "public",
30
+ "registry": "https://registry.npmjs.org/"
31
+ },
32
+ "scripts": {
33
+ "clean": "rm -rf dist",
34
+ "build": "tsc -p tsconfig.build.json",
35
+ "prepublishOnly": "npm run clean && npm run build",
36
+ "typecheck": "tsc -p tsconfig.json --noEmit",
37
+ "test": "vitest run",
38
+ "lint": "oxlint --type-aware src/"
39
+ },
40
+ "devDependencies": {
41
+ "@browsercore/dev": "latest",
42
+ "@types/node": "^26.1.2",
43
+ "@vitest/coverage-v8": "^4.1.10",
44
+ "typescript": "^7.0.0",
45
+ "vitest": "^4.1.10",
46
+ "oxlint": "^1.76.0",
47
+ "oxlint-tsgolint": "7.0.2001"
48
+ },
49
+ "engines": {
50
+ "node": ">=26.0.0"
21
51
  }
22
- },
23
- "files": [
24
- "dist",
25
- "LICENSE",
26
- "README.md"
27
- ],
28
- "publishConfig": {
29
- "access": "public",
30
- "registry": "https://registry.npmjs.org/"
31
- },
32
- "scripts": {
33
- "clean": "rm -rf dist",
34
- "build": "tsc -p tsconfig.build.json",
35
- "prepublishOnly": "npm run clean && npm run build",
36
- "typecheck": "tsc -p tsconfig.json --noEmit",
37
- "test": "vitest run"
38
- },
39
- "devDependencies": {
40
- "@types/node": "^20.14.0",
41
- "typescript": "^5.6.3",
42
- "vitest": "^2.1.8"
43
- },
44
- "engines": {
45
- "node": ">=24.0.0"
46
- }
47
52
  }