nlcurl 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 (199) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/dist/cli/args.d.ts +42 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +262 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/index.d.ts +8 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +114 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/output.d.ts +22 -0
  12. package/dist/cli/output.d.ts.map +1 -0
  13. package/dist/cli/output.js +105 -0
  14. package/dist/cli/output.js.map +1 -0
  15. package/dist/cookies/jar.d.ts +41 -0
  16. package/dist/cookies/jar.d.ts.map +1 -0
  17. package/dist/cookies/jar.js +148 -0
  18. package/dist/cookies/jar.js.map +1 -0
  19. package/dist/cookies/parser.d.ts +24 -0
  20. package/dist/cookies/parser.d.ts.map +1 -0
  21. package/dist/cookies/parser.js +93 -0
  22. package/dist/cookies/parser.js.map +1 -0
  23. package/dist/core/client.d.ts +79 -0
  24. package/dist/core/client.d.ts.map +1 -0
  25. package/dist/core/client.js +106 -0
  26. package/dist/core/client.js.map +1 -0
  27. package/dist/core/errors.d.ts +36 -0
  28. package/dist/core/errors.d.ts.map +1 -0
  29. package/dist/core/errors.js +65 -0
  30. package/dist/core/errors.js.map +1 -0
  31. package/dist/core/request.d.ts +96 -0
  32. package/dist/core/request.d.ts.map +1 -0
  33. package/dist/core/request.js +5 -0
  34. package/dist/core/request.js.map +1 -0
  35. package/dist/core/response.d.ts +48 -0
  36. package/dist/core/response.d.ts.map +1 -0
  37. package/dist/core/response.js +65 -0
  38. package/dist/core/response.js.map +1 -0
  39. package/dist/core/session.d.ts +60 -0
  40. package/dist/core/session.d.ts.map +1 -0
  41. package/dist/core/session.js +305 -0
  42. package/dist/core/session.js.map +1 -0
  43. package/dist/fingerprints/akamai.d.ts +17 -0
  44. package/dist/fingerprints/akamai.d.ts.map +1 -0
  45. package/dist/fingerprints/akamai.js +30 -0
  46. package/dist/fingerprints/akamai.js.map +1 -0
  47. package/dist/fingerprints/database.d.ts +33 -0
  48. package/dist/fingerprints/database.d.ts.map +1 -0
  49. package/dist/fingerprints/database.js +68 -0
  50. package/dist/fingerprints/database.js.map +1 -0
  51. package/dist/fingerprints/extensions.d.ts +49 -0
  52. package/dist/fingerprints/extensions.d.ts.map +1 -0
  53. package/dist/fingerprints/extensions.js +178 -0
  54. package/dist/fingerprints/extensions.js.map +1 -0
  55. package/dist/fingerprints/ja3.d.ts +32 -0
  56. package/dist/fingerprints/ja3.d.ts.map +1 -0
  57. package/dist/fingerprints/ja3.js +64 -0
  58. package/dist/fingerprints/ja3.js.map +1 -0
  59. package/dist/fingerprints/profiles/chrome.d.ts +30 -0
  60. package/dist/fingerprints/profiles/chrome.d.ts.map +1 -0
  61. package/dist/fingerprints/profiles/chrome.js +202 -0
  62. package/dist/fingerprints/profiles/chrome.js.map +1 -0
  63. package/dist/fingerprints/profiles/edge.d.ts +16 -0
  64. package/dist/fingerprints/profiles/edge.d.ts.map +1 -0
  65. package/dist/fingerprints/profiles/edge.js +61 -0
  66. package/dist/fingerprints/profiles/edge.js.map +1 -0
  67. package/dist/fingerprints/profiles/firefox.d.ts +13 -0
  68. package/dist/fingerprints/profiles/firefox.d.ts.map +1 -0
  69. package/dist/fingerprints/profiles/firefox.js +160 -0
  70. package/dist/fingerprints/profiles/firefox.js.map +1 -0
  71. package/dist/fingerprints/profiles/safari.d.ts +16 -0
  72. package/dist/fingerprints/profiles/safari.d.ts.map +1 -0
  73. package/dist/fingerprints/profiles/safari.js +140 -0
  74. package/dist/fingerprints/profiles/safari.js.map +1 -0
  75. package/dist/fingerprints/profiles/tor.d.ts +14 -0
  76. package/dist/fingerprints/profiles/tor.d.ts.map +1 -0
  77. package/dist/fingerprints/profiles/tor.js +136 -0
  78. package/dist/fingerprints/profiles/tor.js.map +1 -0
  79. package/dist/fingerprints/types.d.ts +104 -0
  80. package/dist/fingerprints/types.d.ts.map +1 -0
  81. package/dist/fingerprints/types.js +9 -0
  82. package/dist/fingerprints/types.js.map +1 -0
  83. package/dist/http/h1/client.d.ts +21 -0
  84. package/dist/http/h1/client.d.ts.map +1 -0
  85. package/dist/http/h1/client.js +136 -0
  86. package/dist/http/h1/client.js.map +1 -0
  87. package/dist/http/h1/encoder.d.ts +11 -0
  88. package/dist/http/h1/encoder.d.ts.map +1 -0
  89. package/dist/http/h1/encoder.js +75 -0
  90. package/dist/http/h1/encoder.js.map +1 -0
  91. package/dist/http/h1/parser.d.ts +61 -0
  92. package/dist/http/h1/parser.d.ts.map +1 -0
  93. package/dist/http/h1/parser.js +258 -0
  94. package/dist/http/h1/parser.js.map +1 -0
  95. package/dist/http/h2/client.d.ts +48 -0
  96. package/dist/http/h2/client.d.ts.map +1 -0
  97. package/dist/http/h2/client.js +376 -0
  98. package/dist/http/h2/client.js.map +1 -0
  99. package/dist/http/h2/frames.d.ts +65 -0
  100. package/dist/http/h2/frames.d.ts.map +1 -0
  101. package/dist/http/h2/frames.js +184 -0
  102. package/dist/http/h2/frames.js.map +1 -0
  103. package/dist/http/h2/hpack.d.ts +27 -0
  104. package/dist/http/h2/hpack.d.ts.map +1 -0
  105. package/dist/http/h2/hpack.js +423 -0
  106. package/dist/http/h2/hpack.js.map +1 -0
  107. package/dist/http/negotiator.d.ts +36 -0
  108. package/dist/http/negotiator.d.ts.map +1 -0
  109. package/dist/http/negotiator.js +101 -0
  110. package/dist/http/negotiator.js.map +1 -0
  111. package/dist/http/pool.d.ts +63 -0
  112. package/dist/http/pool.d.ts.map +1 -0
  113. package/dist/http/pool.js +177 -0
  114. package/dist/http/pool.js.map +1 -0
  115. package/dist/index.d.ts +22 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +23 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/middleware/interceptor.d.ts +27 -0
  120. package/dist/middleware/interceptor.d.ts.map +1 -0
  121. package/dist/middleware/interceptor.js +35 -0
  122. package/dist/middleware/interceptor.js.map +1 -0
  123. package/dist/middleware/rate-limiter.d.ts +26 -0
  124. package/dist/middleware/rate-limiter.d.ts.map +1 -0
  125. package/dist/middleware/rate-limiter.js +59 -0
  126. package/dist/middleware/rate-limiter.js.map +1 -0
  127. package/dist/middleware/retry.d.ts +17 -0
  128. package/dist/middleware/retry.d.ts.map +1 -0
  129. package/dist/middleware/retry.js +64 -0
  130. package/dist/middleware/retry.js.map +1 -0
  131. package/dist/proxy/http-proxy.d.ts +23 -0
  132. package/dist/proxy/http-proxy.d.ts.map +1 -0
  133. package/dist/proxy/http-proxy.js +93 -0
  134. package/dist/proxy/http-proxy.js.map +1 -0
  135. package/dist/proxy/socks.d.ts +24 -0
  136. package/dist/proxy/socks.d.ts.map +1 -0
  137. package/dist/proxy/socks.js +196 -0
  138. package/dist/proxy/socks.js.map +1 -0
  139. package/dist/tls/constants.d.ts +142 -0
  140. package/dist/tls/constants.d.ts.map +1 -0
  141. package/dist/tls/constants.js +163 -0
  142. package/dist/tls/constants.js.map +1 -0
  143. package/dist/tls/node-engine.d.ts +22 -0
  144. package/dist/tls/node-engine.d.ts.map +1 -0
  145. package/dist/tls/node-engine.js +190 -0
  146. package/dist/tls/node-engine.js.map +1 -0
  147. package/dist/tls/stealth/client-hello.d.ts +38 -0
  148. package/dist/tls/stealth/client-hello.d.ts.map +1 -0
  149. package/dist/tls/stealth/client-hello.js +197 -0
  150. package/dist/tls/stealth/client-hello.js.map +1 -0
  151. package/dist/tls/stealth/engine.d.ts +16 -0
  152. package/dist/tls/stealth/engine.d.ts.map +1 -0
  153. package/dist/tls/stealth/engine.js +196 -0
  154. package/dist/tls/stealth/engine.js.map +1 -0
  155. package/dist/tls/stealth/handshake.d.ts +45 -0
  156. package/dist/tls/stealth/handshake.d.ts.map +1 -0
  157. package/dist/tls/stealth/handshake.js +403 -0
  158. package/dist/tls/stealth/handshake.js.map +1 -0
  159. package/dist/tls/stealth/key-schedule.d.ts +85 -0
  160. package/dist/tls/stealth/key-schedule.d.ts.map +1 -0
  161. package/dist/tls/stealth/key-schedule.js +141 -0
  162. package/dist/tls/stealth/key-schedule.js.map +1 -0
  163. package/dist/tls/stealth/record-layer.d.ts +74 -0
  164. package/dist/tls/stealth/record-layer.d.ts.map +1 -0
  165. package/dist/tls/stealth/record-layer.js +167 -0
  166. package/dist/tls/stealth/record-layer.js.map +1 -0
  167. package/dist/tls/types.d.ts +58 -0
  168. package/dist/tls/types.d.ts.map +1 -0
  169. package/dist/tls/types.js +6 -0
  170. package/dist/tls/types.js.map +1 -0
  171. package/dist/utils/buffer-reader.d.ts +32 -0
  172. package/dist/utils/buffer-reader.d.ts.map +1 -0
  173. package/dist/utils/buffer-reader.js +99 -0
  174. package/dist/utils/buffer-reader.js.map +1 -0
  175. package/dist/utils/buffer-writer.d.ts +35 -0
  176. package/dist/utils/buffer-writer.d.ts.map +1 -0
  177. package/dist/utils/buffer-writer.js +121 -0
  178. package/dist/utils/buffer-writer.js.map +1 -0
  179. package/dist/utils/encoding.d.ts +19 -0
  180. package/dist/utils/encoding.d.ts.map +1 -0
  181. package/dist/utils/encoding.js +63 -0
  182. package/dist/utils/encoding.js.map +1 -0
  183. package/dist/utils/logger.d.ts +24 -0
  184. package/dist/utils/logger.d.ts.map +1 -0
  185. package/dist/utils/logger.js +56 -0
  186. package/dist/utils/logger.js.map +1 -0
  187. package/dist/utils/url.d.ts +22 -0
  188. package/dist/utils/url.d.ts.map +1 -0
  189. package/dist/utils/url.js +56 -0
  190. package/dist/utils/url.js.map +1 -0
  191. package/dist/ws/client.d.ts +63 -0
  192. package/dist/ws/client.d.ts.map +1 -0
  193. package/dist/ws/client.js +273 -0
  194. package/dist/ws/client.js.map +1 -0
  195. package/dist/ws/frame.d.ts +44 -0
  196. package/dist/ws/frame.d.ts.map +1 -0
  197. package/dist/ws/frame.js +146 -0
  198. package/dist/ws/frame.js.map +1 -0
  199. package/package.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firefox.d.ts","sourceRoot":"","sources":["../../../src/fingerprints/profiles/firefox.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,aAAa,CAAC;AAsKrB,eAAO,MAAM,UAAU,gBAAwC,CAAC;AAChE,eAAO,MAAM,UAAU,gBAAwC,CAAC;AAChE,eAAO,MAAM,UAAU,gBAAwC,CAAC;AAChE,eAAO,MAAM,UAAU,gBAAwC,CAAC;AAChE,eAAO,MAAM,UAAU,gBAAwC,CAAC;AAChE,eAAO,MAAM,UAAU,gBAAwC,CAAC;AAEhE,eAAO,MAAM,aAAa,gBAAa,CAAC;AAExC,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAQ9D,CAAC"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Firefox browser fingerprint profiles.
3
+ */
4
+ import { CipherSuite, ExtensionType, NamedGroup, SignatureScheme, ECPointFormat, PskKeyExchangeMode, ProtocolVersion, } from '../../tls/constants.js';
5
+ import * as ext from '../extensions.js';
6
+ // ---- Firefox cipher suites ----
7
+ const FF_CIPHER_SUITES = [
8
+ CipherSuite.TLS_AES_128_GCM_SHA256,
9
+ CipherSuite.TLS_CHACHA20_POLY1305_SHA256,
10
+ CipherSuite.TLS_AES_256_GCM_SHA384,
11
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
12
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
13
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
14
+ CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
15
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
16
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
17
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
18
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
19
+ CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256,
20
+ CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384,
21
+ CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA,
22
+ CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA,
23
+ ];
24
+ const FF_GROUPS = [
25
+ NamedGroup.X25519,
26
+ NamedGroup.SECP256R1,
27
+ NamedGroup.SECP384R1,
28
+ NamedGroup.SECP521R1,
29
+ NamedGroup.FFDHE2048,
30
+ NamedGroup.FFDHE3072,
31
+ ];
32
+ const FF_SIGALGS = [
33
+ SignatureScheme.ECDSA_SECP256R1_SHA256,
34
+ SignatureScheme.ECDSA_SECP384R1_SHA384,
35
+ SignatureScheme.ECDSA_SECP521R1_SHA512,
36
+ SignatureScheme.RSA_PSS_RSAE_SHA256,
37
+ SignatureScheme.RSA_PSS_RSAE_SHA384,
38
+ SignatureScheme.RSA_PSS_RSAE_SHA512,
39
+ SignatureScheme.RSA_PKCS1_SHA256,
40
+ SignatureScheme.RSA_PKCS1_SHA384,
41
+ SignatureScheme.RSA_PKCS1_SHA512,
42
+ ];
43
+ const FF_SUPPORTED_VERSIONS = [
44
+ ProtocolVersion.TLS_1_3,
45
+ ProtocolVersion.TLS_1_2,
46
+ ];
47
+ // ---- Extension ordering (Firefox) ----
48
+ function firefoxExtensions() {
49
+ return [
50
+ { type: ExtensionType.SERVER_NAME, data: ext.sniData },
51
+ { type: ExtensionType.EXTENDED_MASTER_SECRET, data: () => ext.extendedMasterSecretData() },
52
+ { type: ExtensionType.RENEGOTIATION_INFO, data: () => ext.renegotiationInfoData() },
53
+ { type: ExtensionType.SUPPORTED_GROUPS, data: () => ext.supportedGroupsData(FF_GROUPS) },
54
+ { type: ExtensionType.EC_POINT_FORMATS, data: () => ext.ecPointFormatsData([ECPointFormat.UNCOMPRESSED]) },
55
+ { type: ExtensionType.SESSION_TICKET, data: () => ext.sessionTicketData() },
56
+ { type: ExtensionType.APPLICATION_LAYER_PROTOCOL_NEGOTIATION, data: () => ext.alpnData(['h2', 'http/1.1']) },
57
+ { type: ExtensionType.STATUS_REQUEST, data: () => ext.statusRequestData() },
58
+ { type: ExtensionType.DELEGATED_CREDENTIALS, data: () => ext.delegatedCredentialsData([
59
+ SignatureScheme.ECDSA_SECP256R1_SHA256,
60
+ SignatureScheme.ECDSA_SECP384R1_SHA384,
61
+ SignatureScheme.ECDSA_SECP521R1_SHA512,
62
+ SignatureScheme.RSA_PSS_RSAE_SHA256,
63
+ SignatureScheme.RSA_PSS_RSAE_SHA384,
64
+ SignatureScheme.RSA_PSS_RSAE_SHA512,
65
+ ]) },
66
+ { type: ExtensionType.KEY_SHARE, data: () => ext.keySharePlaceholder([NamedGroup.X25519, NamedGroup.SECP256R1]) },
67
+ { type: ExtensionType.SUPPORTED_VERSIONS, data: () => ext.supportedVersionsData(FF_SUPPORTED_VERSIONS) },
68
+ { type: ExtensionType.SIGNATURE_ALGORITHMS, data: () => ext.signatureAlgorithmsData(FF_SIGALGS) },
69
+ { type: ExtensionType.PSK_KEY_EXCHANGE_MODES, data: () => ext.pskKeyExchangeModesData([PskKeyExchangeMode.PSK_DHE_KE]) },
70
+ { type: ExtensionType.RECORD_SIZE_LIMIT, data: () => ext.recordSizeLimitData(16385) },
71
+ ];
72
+ }
73
+ // ---- HTTP/2 ----
74
+ const FF_H2 = {
75
+ settings: [
76
+ { id: 1, value: 65536 }, // HEADER_TABLE_SIZE
77
+ { id: 2, value: 0 }, // ENABLE_PUSH
78
+ { id: 4, value: 131072 }, // INITIAL_WINDOW_SIZE
79
+ { id: 5, value: 16384 }, // MAX_FRAME_SIZE
80
+ ],
81
+ windowUpdate: 12517377,
82
+ pseudoHeaderOrder: [':method', ':path', ':authority', ':scheme'],
83
+ priorityFrames: [],
84
+ };
85
+ // ---- Header template ----
86
+ function firefoxHeaders(version) {
87
+ const major = version.split('.')[0];
88
+ const ua = `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:${major}.0) Gecko/20100101 Firefox/${major}.0`;
89
+ return {
90
+ userAgent: ua,
91
+ headers: [
92
+ ['user-agent', ua],
93
+ ['accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'],
94
+ ['accept-language', 'en-US,en;q=0.5'],
95
+ ['accept-encoding', 'gzip, deflate, br, zstd'],
96
+ ['sec-fetch-dest', 'document'],
97
+ ['sec-fetch-mode', 'navigate'],
98
+ ['sec-fetch-site', 'none'],
99
+ ['sec-fetch-user', '?1'],
100
+ ['priority', 'u=0, i'],
101
+ ],
102
+ };
103
+ }
104
+ // ---- TLS template ----
105
+ function firefoxTLS() {
106
+ return {
107
+ recordVersion: ProtocolVersion.TLS_1_0,
108
+ clientVersion: ProtocolVersion.TLS_1_2,
109
+ cipherSuites: FF_CIPHER_SUITES,
110
+ compressionMethods: [0],
111
+ extensions: firefoxExtensions(),
112
+ supportedGroups: FF_GROUPS,
113
+ signatureAlgorithms: FF_SIGALGS,
114
+ alpnProtocols: ['h2', 'http/1.1'],
115
+ grease: false,
116
+ randomSessionId: true,
117
+ keyShareGroups: [NamedGroup.X25519, NamedGroup.SECP256R1],
118
+ pskKeyExchangeModes: [PskKeyExchangeMode.PSK_DHE_KE],
119
+ supportedVersions: FF_SUPPORTED_VERSIONS,
120
+ ecPointFormats: [ECPointFormat.UNCOMPRESSED],
121
+ recordSizeLimit: 16385,
122
+ delegatedCredentials: [
123
+ SignatureScheme.ECDSA_SECP256R1_SHA256,
124
+ SignatureScheme.ECDSA_SECP384R1_SHA384,
125
+ SignatureScheme.ECDSA_SECP521R1_SHA512,
126
+ SignatureScheme.RSA_PSS_RSAE_SHA256,
127
+ SignatureScheme.RSA_PSS_RSAE_SHA384,
128
+ SignatureScheme.RSA_PSS_RSAE_SHA512,
129
+ ],
130
+ };
131
+ }
132
+ // ---- Profile factory ----
133
+ function firefoxProfile(name, version) {
134
+ return {
135
+ name,
136
+ browser: 'firefox',
137
+ version,
138
+ tls: firefoxTLS(),
139
+ h2: FF_H2,
140
+ headers: firefoxHeaders(version),
141
+ };
142
+ }
143
+ // ---- Exported profiles ----
144
+ export const firefox133 = firefoxProfile('firefox133', '133.0');
145
+ export const firefox134 = firefoxProfile('firefox134', '134.0');
146
+ export const firefox135 = firefoxProfile('firefox135', '135.0');
147
+ export const firefox136 = firefoxProfile('firefox136', '136.0');
148
+ export const firefox137 = firefoxProfile('firefox137', '137.0');
149
+ export const firefox138 = firefoxProfile('firefox138', '138.0');
150
+ export const firefoxLatest = firefox138;
151
+ export const firefoxProfiles = new Map([
152
+ ['firefox133', firefox133],
153
+ ['firefox134', firefox134],
154
+ ['firefox135', firefox135],
155
+ ['firefox136', firefox136],
156
+ ['firefox137', firefox137],
157
+ ['firefox138', firefox138],
158
+ ['firefox_latest', firefox138],
159
+ ]);
160
+ //# sourceMappingURL=firefox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firefox.js","sourceRoot":"","sources":["../../../src/fingerprints/profiles/firefox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Safari browser fingerprint profiles.
3
+ */
4
+ import type { BrowserProfile } from '../types.js';
5
+ export declare const safari153: BrowserProfile;
6
+ export declare const safari155: BrowserProfile;
7
+ export declare const safari160: BrowserProfile;
8
+ export declare const safari165: BrowserProfile;
9
+ export declare const safari170: BrowserProfile;
10
+ export declare const safari174: BrowserProfile;
11
+ export declare const safari175: BrowserProfile;
12
+ export declare const safari180: BrowserProfile;
13
+ export declare const safari182: BrowserProfile;
14
+ export declare const safariLatest: BrowserProfile;
15
+ export declare const safariProfiles: ReadonlyMap<string, BrowserProfile>;
16
+ //# sourceMappingURL=safari.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safari.d.ts","sourceRoot":"","sources":["../../../src/fingerprints/profiles/safari.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,aAAa,CAAC;AA+IrB,eAAO,MAAM,SAAS,gBAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,gBAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,gBAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,gBAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,gBAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,gBAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,gBAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,gBAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,gBAAiD,CAAC;AAExE,eAAO,MAAM,YAAY,gBAAY,CAAC;AAEtC,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAW7D,CAAC"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Safari browser fingerprint profiles.
3
+ */
4
+ import { CipherSuite, ExtensionType, NamedGroup, SignatureScheme, ECPointFormat, PskKeyExchangeMode, ProtocolVersion, } from '../../tls/constants.js';
5
+ import * as ext from '../extensions.js';
6
+ // ---- Safari cipher suites ----
7
+ // Safari has a distinctive cipher order, placing CHACHA20 earlier
8
+ const SAFARI_CIPHER_SUITES = [
9
+ CipherSuite.TLS_AES_128_GCM_SHA256,
10
+ CipherSuite.TLS_AES_256_GCM_SHA384,
11
+ CipherSuite.TLS_CHACHA20_POLY1305_SHA256,
12
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
13
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
14
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
15
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
16
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
17
+ CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
18
+ CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384,
19
+ CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256,
20
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
21
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
22
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
23
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
24
+ CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA,
25
+ CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA,
26
+ ];
27
+ const SAFARI_GROUPS = [
28
+ NamedGroup.X25519,
29
+ NamedGroup.SECP256R1,
30
+ NamedGroup.SECP384R1,
31
+ NamedGroup.SECP521R1,
32
+ ];
33
+ const SAFARI_SIGALGS = [
34
+ SignatureScheme.ECDSA_SECP256R1_SHA256,
35
+ SignatureScheme.RSA_PSS_RSAE_SHA256,
36
+ SignatureScheme.RSA_PKCS1_SHA256,
37
+ SignatureScheme.ECDSA_SECP384R1_SHA384,
38
+ SignatureScheme.ECDSA_SECP521R1_SHA512,
39
+ SignatureScheme.RSA_PSS_RSAE_SHA384,
40
+ SignatureScheme.RSA_PSS_RSAE_SHA512,
41
+ SignatureScheme.RSA_PKCS1_SHA384,
42
+ SignatureScheme.RSA_PKCS1_SHA512,
43
+ ];
44
+ // ---- Extensions ----
45
+ function safariExtensions() {
46
+ return [
47
+ { type: ExtensionType.SERVER_NAME, data: ext.sniData },
48
+ { type: ExtensionType.EXTENDED_MASTER_SECRET, data: () => ext.extendedMasterSecretData() },
49
+ { type: ExtensionType.RENEGOTIATION_INFO, data: () => ext.renegotiationInfoData() },
50
+ { type: ExtensionType.SUPPORTED_GROUPS, data: () => ext.supportedGroupsData(SAFARI_GROUPS) },
51
+ { type: ExtensionType.EC_POINT_FORMATS, data: () => ext.ecPointFormatsData([ECPointFormat.UNCOMPRESSED]) },
52
+ { type: ExtensionType.APPLICATION_LAYER_PROTOCOL_NEGOTIATION, data: () => ext.alpnData(['h2', 'http/1.1']) },
53
+ { type: ExtensionType.STATUS_REQUEST, data: () => ext.statusRequestData() },
54
+ { type: ExtensionType.SIGNATURE_ALGORITHMS, data: () => ext.signatureAlgorithmsData(SAFARI_SIGALGS) },
55
+ { type: ExtensionType.SIGNED_CERTIFICATE_TIMESTAMP },
56
+ { type: ExtensionType.KEY_SHARE, data: () => ext.keySharePlaceholder([NamedGroup.X25519]) },
57
+ { type: ExtensionType.PSK_KEY_EXCHANGE_MODES, data: () => ext.pskKeyExchangeModesData([PskKeyExchangeMode.PSK_DHE_KE]) },
58
+ { type: ExtensionType.SUPPORTED_VERSIONS, data: () => ext.supportedVersionsData([ProtocolVersion.TLS_1_3, ProtocolVersion.TLS_1_2]) },
59
+ ];
60
+ }
61
+ // ---- HTTP/2 ----
62
+ const SAFARI_H2 = {
63
+ settings: [
64
+ { id: 4, value: 4194304 }, // INITIAL_WINDOW_SIZE
65
+ { id: 3, value: 100 }, // MAX_CONCURRENT_STREAMS
66
+ ],
67
+ windowUpdate: 10485760,
68
+ pseudoHeaderOrder: [':method', ':scheme', ':path', ':authority'],
69
+ priorityFrames: [],
70
+ };
71
+ // ---- Headers ----
72
+ function safariHeaders(version, webkitBuild) {
73
+ const ua = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/${webkitBuild} (KHTML, like Gecko) Version/${version} Safari/${webkitBuild}`;
74
+ return {
75
+ userAgent: ua,
76
+ headers: [
77
+ ['user-agent', ua],
78
+ ['accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'],
79
+ ['accept-language', 'en-US,en;q=0.9'],
80
+ ['accept-encoding', 'gzip, deflate, br'],
81
+ ['sec-fetch-dest', 'document'],
82
+ ['sec-fetch-mode', 'navigate'],
83
+ ['sec-fetch-site', 'none'],
84
+ ],
85
+ };
86
+ }
87
+ // ---- TLS template ----
88
+ function safariTLS() {
89
+ return {
90
+ recordVersion: ProtocolVersion.TLS_1_0,
91
+ clientVersion: ProtocolVersion.TLS_1_2,
92
+ cipherSuites: SAFARI_CIPHER_SUITES,
93
+ compressionMethods: [0],
94
+ extensions: safariExtensions(),
95
+ supportedGroups: SAFARI_GROUPS,
96
+ signatureAlgorithms: SAFARI_SIGALGS,
97
+ alpnProtocols: ['h2', 'http/1.1'],
98
+ grease: true,
99
+ randomSessionId: true,
100
+ keyShareGroups: [NamedGroup.X25519],
101
+ pskKeyExchangeModes: [PskKeyExchangeMode.PSK_DHE_KE],
102
+ supportedVersions: [ProtocolVersion.TLS_1_3, ProtocolVersion.TLS_1_2],
103
+ ecPointFormats: [ECPointFormat.UNCOMPRESSED],
104
+ };
105
+ }
106
+ // ---- Profile factory ----
107
+ function safariProfile(name, version, webkitBuild) {
108
+ return {
109
+ name,
110
+ browser: 'safari',
111
+ version,
112
+ tls: safariTLS(),
113
+ h2: SAFARI_H2,
114
+ headers: safariHeaders(version, webkitBuild),
115
+ };
116
+ }
117
+ // ---- Exported profiles ----
118
+ export const safari153 = safariProfile('safari153', '15.3', '605.1.15');
119
+ export const safari155 = safariProfile('safari155', '15.5', '605.1.15');
120
+ export const safari160 = safariProfile('safari160', '16.0', '605.1.15');
121
+ export const safari165 = safariProfile('safari165', '16.5', '605.1.15');
122
+ export const safari170 = safariProfile('safari170', '17.0', '605.1.15');
123
+ export const safari174 = safariProfile('safari174', '17.4', '605.1.15');
124
+ export const safari175 = safariProfile('safari175', '17.5', '605.1.15');
125
+ export const safari180 = safariProfile('safari180', '18.0', '605.1.15');
126
+ export const safari182 = safariProfile('safari182', '18.2', '605.1.15');
127
+ export const safariLatest = safari182;
128
+ export const safariProfiles = new Map([
129
+ ['safari153', safari153],
130
+ ['safari155', safari155],
131
+ ['safari160', safari160],
132
+ ['safari165', safari165],
133
+ ['safari170', safari170],
134
+ ['safari174', safari174],
135
+ ['safari175', safari175],
136
+ ['safari180', safari180],
137
+ ['safari182', safari182],
138
+ ['safari_latest', safari182],
139
+ ]);
140
+ //# sourceMappingURL=safari.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safari.js","sourceRoot":"","sources":["../../../src/fingerprints/profiles/safari.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Tor Browser fingerprint profiles.
3
+ *
4
+ * Tor Browser is based on Firefox ESR with specific privacy hardening.
5
+ * It uses a narrower set of cipher suites and extensions to reduce
6
+ * fingerprint uniqueness across Tor users.
7
+ */
8
+ import type { BrowserProfile } from '../types.js';
9
+ export declare const tor133: BrowserProfile;
10
+ export declare const tor140: BrowserProfile;
11
+ export declare const tor145: BrowserProfile;
12
+ export declare const torLatest: BrowserProfile;
13
+ export declare const torProfiles: ReadonlyMap<string, BrowserProfile>;
14
+ //# sourceMappingURL=tor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tor.d.ts","sourceRoot":"","sources":["../../../src/fingerprints/profiles/tor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,aAAa,CAAC;AA+IrB,eAAO,MAAM,MAAM,gBAAgC,CAAC;AACpD,eAAO,MAAM,MAAM,gBAAgC,CAAC;AACpD,eAAO,MAAM,MAAM,gBAAgC,CAAC;AAEpD,eAAO,MAAM,SAAS,gBAAS,CAAC;AAEhC,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAK1D,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Tor Browser fingerprint profiles.
3
+ *
4
+ * Tor Browser is based on Firefox ESR with specific privacy hardening.
5
+ * It uses a narrower set of cipher suites and extensions to reduce
6
+ * fingerprint uniqueness across Tor users.
7
+ */
8
+ import { CipherSuite, ExtensionType, NamedGroup, SignatureScheme, ECPointFormat, PskKeyExchangeMode, ProtocolVersion, } from '../../tls/constants.js';
9
+ import * as ext from '../extensions.js';
10
+ // ---- Tor cipher suites (same as Firefox but no_padding removed) ----
11
+ const TOR_CIPHER_SUITES = [
12
+ CipherSuite.TLS_AES_128_GCM_SHA256,
13
+ CipherSuite.TLS_CHACHA20_POLY1305_SHA256,
14
+ CipherSuite.TLS_AES_256_GCM_SHA384,
15
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
16
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
17
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
18
+ CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
19
+ CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
20
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
21
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
22
+ CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
23
+ CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256,
24
+ CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384,
25
+ CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA,
26
+ CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA,
27
+ ];
28
+ const TOR_GROUPS = [
29
+ NamedGroup.X25519,
30
+ NamedGroup.SECP256R1,
31
+ NamedGroup.SECP384R1,
32
+ NamedGroup.SECP521R1,
33
+ NamedGroup.FFDHE2048,
34
+ NamedGroup.FFDHE3072,
35
+ ];
36
+ const TOR_SIGALGS = [
37
+ SignatureScheme.ECDSA_SECP256R1_SHA256,
38
+ SignatureScheme.ECDSA_SECP384R1_SHA384,
39
+ SignatureScheme.ECDSA_SECP521R1_SHA512,
40
+ SignatureScheme.RSA_PSS_RSAE_SHA256,
41
+ SignatureScheme.RSA_PSS_RSAE_SHA384,
42
+ SignatureScheme.RSA_PSS_RSAE_SHA512,
43
+ SignatureScheme.RSA_PKCS1_SHA256,
44
+ SignatureScheme.RSA_PKCS1_SHA384,
45
+ SignatureScheme.RSA_PKCS1_SHA512,
46
+ ];
47
+ // ---- Extensions ----
48
+ function torExtensions() {
49
+ return [
50
+ { type: ExtensionType.SERVER_NAME, data: ext.sniData },
51
+ { type: ExtensionType.EXTENDED_MASTER_SECRET, data: () => ext.extendedMasterSecretData() },
52
+ { type: ExtensionType.RENEGOTIATION_INFO, data: () => ext.renegotiationInfoData() },
53
+ { type: ExtensionType.SUPPORTED_GROUPS, data: () => ext.supportedGroupsData(TOR_GROUPS) },
54
+ { type: ExtensionType.EC_POINT_FORMATS, data: () => ext.ecPointFormatsData([ECPointFormat.UNCOMPRESSED]) },
55
+ { type: ExtensionType.SESSION_TICKET, data: () => ext.sessionTicketData() },
56
+ { type: ExtensionType.APPLICATION_LAYER_PROTOCOL_NEGOTIATION, data: () => ext.alpnData(['h2', 'http/1.1']) },
57
+ { type: ExtensionType.STATUS_REQUEST, data: () => ext.statusRequestData() },
58
+ { type: ExtensionType.KEY_SHARE, data: () => ext.keySharePlaceholder([NamedGroup.X25519, NamedGroup.SECP256R1]) },
59
+ { type: ExtensionType.SUPPORTED_VERSIONS, data: () => ext.supportedVersionsData([ProtocolVersion.TLS_1_3, ProtocolVersion.TLS_1_2]) },
60
+ { type: ExtensionType.SIGNATURE_ALGORITHMS, data: () => ext.signatureAlgorithmsData(TOR_SIGALGS) },
61
+ { type: ExtensionType.PSK_KEY_EXCHANGE_MODES, data: () => ext.pskKeyExchangeModesData([PskKeyExchangeMode.PSK_DHE_KE]) },
62
+ { type: ExtensionType.RECORD_SIZE_LIMIT, data: () => ext.recordSizeLimitData(16385) },
63
+ ];
64
+ }
65
+ // ---- HTTP/2 ----
66
+ const TOR_H2 = {
67
+ settings: [
68
+ { id: 1, value: 65536 },
69
+ { id: 2, value: 0 },
70
+ { id: 4, value: 131072 },
71
+ { id: 5, value: 16384 },
72
+ ],
73
+ windowUpdate: 12517377,
74
+ pseudoHeaderOrder: [':method', ':path', ':authority', ':scheme'],
75
+ priorityFrames: [],
76
+ };
77
+ // ---- Headers ----
78
+ function torHeaders(ffVersion) {
79
+ const ua = `Mozilla/5.0 (Windows NT 10.0; rv:${ffVersion}) Gecko/20100101 Firefox/${ffVersion}`;
80
+ return {
81
+ userAgent: ua,
82
+ headers: [
83
+ ['user-agent', ua],
84
+ ['accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'],
85
+ ['accept-language', 'en-US,en;q=0.5'],
86
+ ['accept-encoding', 'gzip, deflate, br'],
87
+ ['sec-fetch-dest', 'document'],
88
+ ['sec-fetch-mode', 'navigate'],
89
+ ['sec-fetch-site', 'none'],
90
+ ['sec-fetch-user', '?1'],
91
+ ],
92
+ };
93
+ }
94
+ // ---- TLS template ----
95
+ function torTLS() {
96
+ return {
97
+ recordVersion: ProtocolVersion.TLS_1_0,
98
+ clientVersion: ProtocolVersion.TLS_1_2,
99
+ cipherSuites: TOR_CIPHER_SUITES,
100
+ compressionMethods: [0],
101
+ extensions: torExtensions(),
102
+ supportedGroups: TOR_GROUPS,
103
+ signatureAlgorithms: TOR_SIGALGS,
104
+ alpnProtocols: ['h2', 'http/1.1'],
105
+ grease: false,
106
+ randomSessionId: true,
107
+ keyShareGroups: [NamedGroup.X25519, NamedGroup.SECP256R1],
108
+ pskKeyExchangeModes: [PskKeyExchangeMode.PSK_DHE_KE],
109
+ supportedVersions: [ProtocolVersion.TLS_1_3, ProtocolVersion.TLS_1_2],
110
+ ecPointFormats: [ECPointFormat.UNCOMPRESSED],
111
+ recordSizeLimit: 16385,
112
+ };
113
+ }
114
+ // ---- Profile factory ----
115
+ function torProfile(name, ffVersion) {
116
+ return {
117
+ name,
118
+ browser: 'tor',
119
+ version: ffVersion,
120
+ tls: torTLS(),
121
+ h2: TOR_H2,
122
+ headers: torHeaders(ffVersion),
123
+ };
124
+ }
125
+ // ---- Exported profiles ----
126
+ export const tor133 = torProfile('tor133', '128.0');
127
+ export const tor140 = torProfile('tor140', '128.0');
128
+ export const tor145 = torProfile('tor145', '128.0');
129
+ export const torLatest = tor145;
130
+ export const torProfiles = new Map([
131
+ ['tor133', tor133],
132
+ ['tor140', tor140],
133
+ ['tor145', tor145],
134
+ ['tor_latest', tor145],
135
+ ]);
136
+ //# sourceMappingURL=tor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tor.js","sourceRoot":"","sources":["../../../src/fingerprints/profiles/tor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Fingerprint profile types.
3
+ *
4
+ * Each BrowserProfile captures every parameter needed to replicate a
5
+ * specific browser's TLS ClientHello and HTTP/2 connection preface so
6
+ * that the JA3 and Akamai h2 fingerprints match the real browser.
7
+ */
8
+ export interface TLSExtensionDef {
9
+ /** IANA extension type (e.g. 0x0000 for SNI). */
10
+ type: number;
11
+ /**
12
+ * Opaque payload builder. Receives the SNI hostname at runtime and
13
+ * must return the extension_data bytes (without the type/length
14
+ * header -- that is added automatically).
15
+ *
16
+ * If undefined the extension carries an empty payload.
17
+ */
18
+ data?: (sni: string) => Buffer;
19
+ }
20
+ export interface TLSProfile {
21
+ /** TLS record-layer version sent in the ClientHello record header.
22
+ * Almost always 0x0301 (TLS 1.0) for compatibility. */
23
+ recordVersion: number;
24
+ /** Client version field inside the ClientHello body.
25
+ * 0x0303 (TLS 1.2) for modern browsers -- real negotiation happens
26
+ * via the supported_versions extension. */
27
+ clientVersion: number;
28
+ /** Ordered list of cipher suite IDs (including any GREASE values). */
29
+ cipherSuites: number[];
30
+ /** Compression methods (always [0] for modern browsers). */
31
+ compressionMethods: number[];
32
+ /** Extensions in exact order. The ordering determines the JA3 hash. */
33
+ extensions: TLSExtensionDef[];
34
+ /** Named groups (supported_groups extension value). */
35
+ supportedGroups: number[];
36
+ /** Signature algorithms (signature_algorithms extension value). */
37
+ signatureAlgorithms: number[];
38
+ /** ALPN protocol list. */
39
+ alpnProtocols: string[];
40
+ /** Whether to include GREASE values for cipher suites, extensions,
41
+ * supported groups, and key share. */
42
+ grease: boolean;
43
+ /** If true, generate a random session ID (32 bytes). Chrome does this. */
44
+ randomSessionId: boolean;
45
+ /** Compress-certificate algorithm IDs (if the extension is present). */
46
+ certCompressAlgorithms?: number[];
47
+ /** Key-share groups to send in the ClientHello (must be a subset of
48
+ * supportedGroups). */
49
+ keyShareGroups: number[];
50
+ /** PSK key exchange modes. */
51
+ pskKeyExchangeModes?: number[];
52
+ /** Supported TLS versions (for the supported_versions extension). */
53
+ supportedVersions: number[];
54
+ /** EC point formats. */
55
+ ecPointFormats?: number[];
56
+ /** Token binding parameters (if the extension is present). */
57
+ tokenBindingParams?: Buffer;
58
+ /** Delegated credentials signature algorithms. */
59
+ delegatedCredentials?: number[];
60
+ /** Record size limit value. */
61
+ recordSizeLimit?: number;
62
+ /** Application settings protocols (ALPS). */
63
+ applicationSettings?: string[];
64
+ }
65
+ export interface H2Setting {
66
+ id: number;
67
+ value: number;
68
+ }
69
+ export interface H2Profile {
70
+ /** SETTINGS frame entries in exact order. */
71
+ settings: H2Setting[];
72
+ /** WINDOW_UPDATE increment sent immediately after the SETTINGS. */
73
+ windowUpdate: number;
74
+ /** Pseudo-header order for requests (e.g. [":method", ":authority",
75
+ * ":scheme", ":path"]). */
76
+ pseudoHeaderOrder: string[];
77
+ /** Priority frames sent in the connection preface (optional). */
78
+ priorityFrames?: Array<{
79
+ streamId: number;
80
+ exclusive: boolean;
81
+ dependsOn: number;
82
+ weight: number;
83
+ }>;
84
+ /** Header order hint -- browsers send certain headers in a fixed order. */
85
+ headerOrder?: string[];
86
+ }
87
+ export interface HeaderProfile {
88
+ /** Default HTTP headers in the order the browser sends them. */
89
+ headers: Array<[string, string]>;
90
+ /** User-Agent string. */
91
+ userAgent: string;
92
+ }
93
+ export interface BrowserProfile {
94
+ /** Canonical name, e.g. "chrome136". */
95
+ name: string;
96
+ /** Browser family. */
97
+ browser: 'chrome' | 'firefox' | 'safari' | 'edge' | 'tor';
98
+ /** Browser version string. */
99
+ version: string;
100
+ tls: TLSProfile;
101
+ h2: H2Profile;
102
+ headers: HeaderProfile;
103
+ }
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fingerprints/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB;4DACwD;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB;;gDAE4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,wEAAwE;IACxE,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,uDAAuD;IACvD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mEAAmE;IACnE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,0BAA0B;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;2CACuC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,0EAA0E;IAC1E,eAAe,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC;4BACwB;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8BAA8B;IAC9B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,qEAAqE;IACrE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,wBAAwB;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAID,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB;gCAC4B;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iEAAiE;IACjE,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAID,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAC1D,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;IAChB,EAAE,EAAE,SAAS,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;CACxB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Fingerprint profile types.
3
+ *
4
+ * Each BrowserProfile captures every parameter needed to replicate a
5
+ * specific browser's TLS ClientHello and HTTP/2 connection preface so
6
+ * that the JA3 and Akamai h2 fingerprints match the real browser.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/fingerprints/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}