@browsercore/profiles 0.1.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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/dist/diff.d.ts +37 -0
  4. package/dist/diff.d.ts.map +1 -0
  5. package/dist/diff.js +140 -0
  6. package/dist/diff.js.map +1 -0
  7. package/dist/errors.d.ts +20 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +27 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/index.d.ts +17 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.internal.d.ts +9 -0
  14. package/dist/index.internal.d.ts.map +1 -0
  15. package/dist/index.internal.js +9 -0
  16. package/dist/index.internal.js.map +1 -0
  17. package/dist/index.js +14 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/profiles/chrome.d.ts +18 -0
  20. package/dist/profiles/chrome.d.ts.map +1 -0
  21. package/dist/profiles/chrome.js +214 -0
  22. package/dist/profiles/chrome.js.map +1 -0
  23. package/dist/profiles/edge.d.ts +17 -0
  24. package/dist/profiles/edge.d.ts.map +1 -0
  25. package/dist/profiles/edge.js +161 -0
  26. package/dist/profiles/edge.js.map +1 -0
  27. package/dist/profiles/firefox.d.ts +17 -0
  28. package/dist/profiles/firefox.d.ts.map +1 -0
  29. package/dist/profiles/firefox.js +204 -0
  30. package/dist/profiles/firefox.js.map +1 -0
  31. package/dist/profiles/safari.d.ts +16 -0
  32. package/dist/profiles/safari.d.ts.map +1 -0
  33. package/dist/profiles/safari.js +134 -0
  34. package/dist/profiles/safari.js.map +1 -0
  35. package/dist/registry.d.ts +17 -0
  36. package/dist/registry.d.ts.map +1 -0
  37. package/dist/registry.js +48 -0
  38. package/dist/registry.js.map +1 -0
  39. package/dist/types.d.ts +83 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +9 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/utils.d.ts +18 -0
  44. package/dist/utils.d.ts.map +1 -0
  45. package/dist/utils.js +23 -0
  46. package/dist/utils.js.map +1 -0
  47. package/dist/validate.d.ts +80 -0
  48. package/dist/validate.d.ts.map +1 -0
  49. package/dist/validate.js +185 -0
  50. package/dist/validate.js.map +1 -0
  51. package/package.json +43 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/profiles/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAiD7D,eAAO,MAAM,OAAO,EAAE,cAoDrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,cAoDrB,CAAC;AAEF,eAAO,MAAM,YAAY;;;CAGf,CAAC"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Microsoft Edge fingerprint definitions.
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 real Edge captures per version.
9
+ */
10
+ const GREASE = "TLS_GREASE_RESERVED_0";
11
+ const edgeTlsBase = {
12
+ extensionOrder: [
13
+ 0, 10, 11, 13, 16, 17513, 18, 23, 27, 35, 41, 43, 45, 5, 51, 65281,
14
+ ],
15
+ supportedVersions: ["TLS 1.3", "TLS 1.2"],
16
+ keyShareGroups: ["x25519", "secp256r1"],
17
+ signatureAlgorithms: [
18
+ "ecdsa_secp256r1_sha256",
19
+ "rsa_pss_rsae_sha256",
20
+ "rsa_pkcs1_sha256",
21
+ "ecdsa_secp384r1_sha384",
22
+ "rsa_pss_rsae_sha384",
23
+ "rsa_pkcs1_sha384",
24
+ ],
25
+ grease: true,
26
+ };
27
+ const edgeHttp2Base = {
28
+ initialWindowSize: 6291456,
29
+ maxFrameSize: 16384,
30
+ headerTableSize: 65536,
31
+ weight: 256,
32
+ };
33
+ const edgeHttp1Base = {
34
+ connection: "keep-alive",
35
+ acceptEncoding: "gzip, deflate, br",
36
+ headerOrder: [
37
+ "host",
38
+ "connection",
39
+ "sec-ch-ua",
40
+ "sec-ch-ua-mobile",
41
+ "sec-ch-ua-platform",
42
+ "upgrade-insecure-requests",
43
+ "user-agent",
44
+ "accept",
45
+ "sec-fetch-site",
46
+ "sec-fetch-mode",
47
+ "sec-fetch-user",
48
+ "sec-fetch-dest",
49
+ "accept-encoding",
50
+ "accept-language",
51
+ ],
52
+ };
53
+ export const edge120 = {
54
+ id: "edge-120",
55
+ name: "edge",
56
+ version: "120.0.2210.91",
57
+ tls: {
58
+ ...edgeTlsBase,
59
+ cipherSuites: [
60
+ GREASE,
61
+ "TLS_AES_128_GCM_SHA256",
62
+ "TLS_AES_256_GCM_SHA384",
63
+ "TLS_CHACHA20_POLY1305_SHA256",
64
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
65
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
66
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
67
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
68
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
69
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
70
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
71
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
72
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
73
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
74
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
75
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
76
+ ],
77
+ },
78
+ http2: {
79
+ ...edgeHttp2Base,
80
+ settings: {
81
+ headerTableSize: 65536,
82
+ enablePush: false,
83
+ maxConcurrentStreams: 100,
84
+ initialWindowSize: 6291456,
85
+ maxFrameSize: 16384,
86
+ },
87
+ },
88
+ http1: {
89
+ ...edgeHttp1Base,
90
+ defaultHeaders: {
91
+ "sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
92
+ "sec-ch-ua-mobile": "?0",
93
+ "sec-ch-ua-platform": '"macOS"',
94
+ "upgrade-insecure-requests": "1",
95
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
96
+ accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
97
+ "sec-fetch-site": "none",
98
+ "sec-fetch-mode": "navigate",
99
+ "sec-fetch-user": "?1",
100
+ "sec-fetch-dest": "document",
101
+ "accept-language": "en-US,en;q=0.9",
102
+ },
103
+ },
104
+ };
105
+ export const edge128 = {
106
+ id: "edge-128",
107
+ name: "edge",
108
+ version: "128.0.2739.70",
109
+ tls: {
110
+ ...edgeTlsBase,
111
+ cipherSuites: [
112
+ GREASE,
113
+ "TLS_AES_128_GCM_SHA256",
114
+ "TLS_AES_256_GCM_SHA384",
115
+ "TLS_CHACHA20_POLY1305_SHA256",
116
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
117
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
118
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
119
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
120
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
121
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
122
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
123
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
124
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
125
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
126
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
127
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
128
+ ],
129
+ },
130
+ http2: {
131
+ ...edgeHttp2Base,
132
+ settings: {
133
+ headerTableSize: 65536,
134
+ enablePush: false,
135
+ maxConcurrentStreams: 100,
136
+ initialWindowSize: 6291456,
137
+ maxFrameSize: 16384,
138
+ },
139
+ },
140
+ http1: {
141
+ ...edgeHttp1Base,
142
+ defaultHeaders: {
143
+ "sec-ch-ua": '"Chromium";v="128", "Not;A=Brand";v="24", "Microsoft Edge";v="128"',
144
+ "sec-ch-ua-mobile": "?0",
145
+ "sec-ch-ua-platform": '"macOS"',
146
+ "upgrade-insecure-requests": "1",
147
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
148
+ accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
149
+ "sec-fetch-site": "none",
150
+ "sec-fetch-mode": "navigate",
151
+ "sec-fetch-user": "?1",
152
+ "sec-fetch-dest": "document",
153
+ "accept-language": "en-US,en;q=0.9",
154
+ },
155
+ },
156
+ };
157
+ export const EdgeProfiles = {
158
+ edge120,
159
+ edge128,
160
+ };
161
+ //# sourceMappingURL=edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/profiles/edge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Firefox fingerprint definitions.
3
+ *
4
+ * Firefox uses a distinct cipher order from Chrome, does NOT enable GREASE, and
5
+ * advertises a different TLS extension set. HTTP/2 settings are more conservative
6
+ * (smaller initial window). Values mirror real Firefox captures per version.
7
+ */
8
+ import type { BrowserProfile } from "../types.js";
9
+ export declare const firefox120: BrowserProfile;
10
+ export declare const firefox128: BrowserProfile;
11
+ export declare const firefox135: BrowserProfile;
12
+ export declare const FirefoxProfiles: {
13
+ readonly firefox120: BrowserProfile;
14
+ readonly firefox128: BrowserProfile;
15
+ readonly firefox135: BrowserProfile;
16
+ };
17
+ //# sourceMappingURL=firefox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firefox.d.ts","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AA8C7D,eAAO,MAAM,UAAU,EAAE,cAkDxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAkDxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAkDxB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;CAIlB,CAAC"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Firefox fingerprint definitions.
3
+ *
4
+ * Firefox uses a distinct cipher order from Chrome, does NOT enable GREASE, and
5
+ * advertises a different TLS extension set. HTTP/2 settings are more conservative
6
+ * (smaller initial window). Values mirror real Firefox captures per version.
7
+ */
8
+ const firefoxTlsBase = {
9
+ extensionOrder: [
10
+ 0, 10, 11, 13, 16, 18, 23, 35, 41, 43, 45, 51, 65281,
11
+ ],
12
+ supportedVersions: ["TLS 1.3", "TLS 1.2"],
13
+ keyShareGroups: ["x25519", "secp256r1", "secp384r1"],
14
+ signatureAlgorithms: [
15
+ "ecdsa_secp256r1_sha256",
16
+ "ecdsa_secp384r1_sha384",
17
+ "ed25519",
18
+ "rsa_pss_rsae_sha256",
19
+ "rsa_pss_rsae_sha384",
20
+ "rsa_pkcs1_sha256",
21
+ "rsa_pkcs1_sha384",
22
+ "rsa_pkcs1_sha1",
23
+ ],
24
+ grease: false,
25
+ };
26
+ const firefoxHttp2Base = {
27
+ initialWindowSize: 12582912,
28
+ maxFrameSize: 16384,
29
+ headerTableSize: 65536,
30
+ weight: 256,
31
+ };
32
+ const firefoxHttp1Base = {
33
+ connection: "keep-alive",
34
+ acceptEncoding: "gzip, deflate, br",
35
+ headerOrder: [
36
+ "host",
37
+ "user-agent",
38
+ "accept",
39
+ "accept-language",
40
+ "accept-encoding",
41
+ "connection",
42
+ "upgrade-insecure-requests",
43
+ "sec-fetch-dest",
44
+ "sec-fetch-mode",
45
+ "sec-fetch-site",
46
+ "sec-fetch-user",
47
+ ],
48
+ };
49
+ export const firefox120 = {
50
+ id: "firefox-120",
51
+ name: "firefox",
52
+ version: "120.0",
53
+ tls: {
54
+ ...firefoxTlsBase,
55
+ cipherSuites: [
56
+ "TLS_AES_128_GCM_SHA256",
57
+ "TLS_CHACHA20_POLY1305_SHA256",
58
+ "TLS_AES_256_GCM_SHA384",
59
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
60
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
61
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
62
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
63
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
64
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
65
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
66
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
67
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
68
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
69
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
70
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
71
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
72
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
73
+ ],
74
+ },
75
+ http2: {
76
+ ...firefoxHttp2Base,
77
+ settings: {
78
+ headerTableSize: 65536,
79
+ enablePush: false,
80
+ maxConcurrentStreams: 100,
81
+ initialWindowSize: 12582912,
82
+ maxFrameSize: 16384,
83
+ },
84
+ },
85
+ http1: {
86
+ ...firefoxHttp1Base,
87
+ defaultHeaders: {
88
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:120.0) Gecko/20100101 Firefox/120.0",
89
+ accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
90
+ "accept-language": "en-US,en;q=0.5",
91
+ "upgrade-insecure-requests": "1",
92
+ "sec-fetch-dest": "document",
93
+ "sec-fetch-mode": "navigate",
94
+ "sec-fetch-site": "none",
95
+ "sec-fetch-user": "?1",
96
+ },
97
+ },
98
+ };
99
+ export const firefox128 = {
100
+ id: "firefox-128",
101
+ name: "firefox",
102
+ version: "128.0",
103
+ tls: {
104
+ ...firefoxTlsBase,
105
+ cipherSuites: [
106
+ "TLS_AES_128_GCM_SHA256",
107
+ "TLS_CHACHA20_POLY1305_SHA256",
108
+ "TLS_AES_256_GCM_SHA384",
109
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
110
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
111
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
112
+ "TLS_ECDHE_RSA_WITH_CHACHA0_POLY1305_SHA256",
113
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
114
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
115
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
116
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
117
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
118
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
119
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
120
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
121
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
122
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
123
+ ],
124
+ },
125
+ http2: {
126
+ ...firefoxHttp2Base,
127
+ settings: {
128
+ headerTableSize: 65536,
129
+ enablePush: false,
130
+ maxConcurrentStreams: 100,
131
+ initialWindowSize: 12582912,
132
+ maxFrameSize: 16384,
133
+ },
134
+ },
135
+ http1: {
136
+ ...firefoxHttp1Base,
137
+ defaultHeaders: {
138
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0",
139
+ accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
140
+ "accept-language": "en-US,en;q=0.5",
141
+ "upgrade-insecure-requests": "1",
142
+ "sec-fetch-dest": "document",
143
+ "sec-fetch-mode": "navigate",
144
+ "sec-fetch-site": "none",
145
+ "sec-fetch-user": "?1",
146
+ },
147
+ },
148
+ };
149
+ export const firefox135 = {
150
+ id: "firefox-135",
151
+ name: "firefox",
152
+ version: "135.0",
153
+ tls: {
154
+ ...firefoxTlsBase,
155
+ cipherSuites: [
156
+ "TLS_AES_128_GCM_SHA256",
157
+ "TLS_CHACHA20_POLY1305_SHA256",
158
+ "TLS_AES_256_GCM_SHA384",
159
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
160
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
161
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
162
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
163
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
164
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
165
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
166
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
167
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
168
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
169
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
170
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
171
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
172
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
173
+ ],
174
+ },
175
+ http2: {
176
+ ...firefoxHttp2Base,
177
+ settings: {
178
+ headerTableSize: 65536,
179
+ enablePush: false,
180
+ maxConcurrentStreams: 128,
181
+ initialWindowSize: 12582912,
182
+ maxFrameSize: 16384,
183
+ },
184
+ },
185
+ http1: {
186
+ ...firefoxHttp1Base,
187
+ defaultHeaders: {
188
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:135.0) Gecko/20100101 Firefox/135.0",
189
+ accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
190
+ "accept-language": "en-US,en;q=0.5",
191
+ "upgrade-insecure-requests": "1",
192
+ "sec-fetch-dest": "document",
193
+ "sec-fetch-mode": "navigate",
194
+ "sec-fetch-site": "none",
195
+ "sec-fetch-user": "?1",
196
+ },
197
+ },
198
+ };
199
+ export const FirefoxProfiles = {
200
+ firefox120,
201
+ firefox128,
202
+ firefox135,
203
+ };
204
+ //# sourceMappingURL=firefox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firefox.js","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Safari fingerprint definitions.
3
+ *
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.
8
+ */
9
+ import type { BrowserProfile } from "../types.js";
10
+ export declare const safari17: BrowserProfile;
11
+ export declare const safari18: BrowserProfile;
12
+ export declare const SafariProfiles: {
13
+ readonly safari17: BrowserProfile;
14
+ readonly safari18: BrowserProfile;
15
+ };
16
+ //# sourceMappingURL=safari.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safari.d.ts","sourceRoot":"","sources":["../../src/profiles/safari.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAoC7D,eAAO,MAAM,QAAQ,EAAE,cA6CtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,cA6CtB,CAAC;AAEF,eAAO,MAAM,cAAc;;;CAGjB,CAAC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Safari fingerprint definitions.
3
+ *
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.
8
+ */
9
+ 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"],
15
+ signatureAlgorithms: [
16
+ "ecdsa_secp256r1_sha256",
17
+ "rsa_pss_rsae_sha256",
18
+ "rsa_pkcs1_sha256",
19
+ ],
20
+ grease: true,
21
+ };
22
+ const safariHttp2Base = {
23
+ initialWindowSize: 1048576,
24
+ maxFrameSize: 16384,
25
+ headerTableSize: 65536,
26
+ weight: 256,
27
+ };
28
+ const safariHttp1Base = {
29
+ connection: "keep-alive",
30
+ acceptEncoding: "gzip, deflate, br",
31
+ headerOrder: [
32
+ "host",
33
+ "accept",
34
+ "accept-encoding",
35
+ "accept-language",
36
+ "user-agent",
37
+ "connection",
38
+ ],
39
+ };
40
+ export const safari17 = {
41
+ id: "safari-17",
42
+ name: "safari",
43
+ version: "17.6",
44
+ tls: {
45
+ ...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
+ ],
65
+ },
66
+ http2: {
67
+ ...safariHttp2Base,
68
+ settings: {
69
+ headerTableSize: 65536,
70
+ enablePush: false,
71
+ maxConcurrentStreams: 100,
72
+ initialWindowSize: 1048576,
73
+ maxFrameSize: 16384,
74
+ },
75
+ },
76
+ http1: {
77
+ ...safariHttp1Base,
78
+ defaultHeaders: {
79
+ accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
80
+ "accept-language": "en-US,en;q=0.9",
81
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Safari/605.1.15",
82
+ },
83
+ },
84
+ };
85
+ export const safari18 = {
86
+ id: "safari-18",
87
+ name: "safari",
88
+ version: "18.1",
89
+ tls: {
90
+ ...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
+ ],
110
+ },
111
+ http2: {
112
+ ...safariHttp2Base,
113
+ settings: {
114
+ headerTableSize: 65536,
115
+ enablePush: false,
116
+ maxConcurrentStreams: 100,
117
+ initialWindowSize: 1048576,
118
+ maxFrameSize: 16384,
119
+ },
120
+ },
121
+ http1: {
122
+ ...safariHttp1Base,
123
+ defaultHeaders: {
124
+ accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
125
+ "accept-language": "en-US,en;q=0.9",
126
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Safari/605.1.15",
127
+ },
128
+ },
129
+ };
130
+ export const SafariProfiles = {
131
+ safari17,
132
+ safari18,
133
+ };
134
+ //# sourceMappingURL=safari.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safari.js","sourceRoot":"","sources":["../../src/profiles/safari.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Profile registry — the single source of truth for known browser fingerprints.
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).
6
+ */
7
+ import type { BrowserProfile, ProfileId } from "./types.js";
8
+ /** Look up a profile by its branded id. Throws {@link UnknownProfileError} if absent. */
9
+ export declare function getProfile(id: ProfileId): BrowserProfile;
10
+ /** List every registered profile id, in insertion order. */
11
+ export declare function listProfiles(): ReadonlyArray<ProfileId>;
12
+ /**
13
+ * Register a custom profile (e.g. a private build or a future version).
14
+ * Overwrites any existing profile with the same id.
15
+ */
16
+ export declare function registerProfile(profile: BrowserProfile): void;
17
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Profile registry — the single source of truth for known browser fingerprints.
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).
6
+ */
7
+ import { UnknownProfileError } from "./errors.js";
8
+ import { ChromeProfiles } from "./profiles/chrome.js";
9
+ import { FirefoxProfiles } from "./profiles/firefox.js";
10
+ import { SafariProfiles } from "./profiles/safari.js";
11
+ import { EdgeProfiles } from "./profiles/edge.js";
12
+ const registry = new Map();
13
+ function index(profile) {
14
+ registry.set(profile.id, profile);
15
+ }
16
+ // Built-in profiles — indexed at module evaluation.
17
+ for (const profile of Object.values(ChromeProfiles)) {
18
+ index(profile);
19
+ }
20
+ for (const profile of Object.values(FirefoxProfiles)) {
21
+ index(profile);
22
+ }
23
+ for (const profile of Object.values(SafariProfiles)) {
24
+ index(profile);
25
+ }
26
+ for (const profile of Object.values(EdgeProfiles)) {
27
+ index(profile);
28
+ }
29
+ /** Look up a profile by its branded id. Throws {@link UnknownProfileError} if absent. */
30
+ export function getProfile(id) {
31
+ const profile = registry.get(id);
32
+ if (profile === undefined) {
33
+ throw new UnknownProfileError(id);
34
+ }
35
+ return profile;
36
+ }
37
+ /** List every registered profile id, in insertion order. */
38
+ export function listProfiles() {
39
+ return Array.from(registry.keys());
40
+ }
41
+ /**
42
+ * Register a custom profile (e.g. a private build or a future version).
43
+ * Overwrites any existing profile with the same id.
44
+ */
45
+ export function registerProfile(profile) {
46
+ index(profile);
47
+ }
48
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +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"}