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.
- package/LICENSE +21 -0
- package/README.md +162 -0
- package/dist/cli/args.d.ts +42 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +262 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +114 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +22 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +105 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cookies/jar.d.ts +41 -0
- package/dist/cookies/jar.d.ts.map +1 -0
- package/dist/cookies/jar.js +148 -0
- package/dist/cookies/jar.js.map +1 -0
- package/dist/cookies/parser.d.ts +24 -0
- package/dist/cookies/parser.d.ts.map +1 -0
- package/dist/cookies/parser.js +93 -0
- package/dist/cookies/parser.js.map +1 -0
- package/dist/core/client.d.ts +79 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +106 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/errors.d.ts +36 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +65 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/request.d.ts +96 -0
- package/dist/core/request.d.ts.map +1 -0
- package/dist/core/request.js +5 -0
- package/dist/core/request.js.map +1 -0
- package/dist/core/response.d.ts +48 -0
- package/dist/core/response.d.ts.map +1 -0
- package/dist/core/response.js +65 -0
- package/dist/core/response.js.map +1 -0
- package/dist/core/session.d.ts +60 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +305 -0
- package/dist/core/session.js.map +1 -0
- package/dist/fingerprints/akamai.d.ts +17 -0
- package/dist/fingerprints/akamai.d.ts.map +1 -0
- package/dist/fingerprints/akamai.js +30 -0
- package/dist/fingerprints/akamai.js.map +1 -0
- package/dist/fingerprints/database.d.ts +33 -0
- package/dist/fingerprints/database.d.ts.map +1 -0
- package/dist/fingerprints/database.js +68 -0
- package/dist/fingerprints/database.js.map +1 -0
- package/dist/fingerprints/extensions.d.ts +49 -0
- package/dist/fingerprints/extensions.d.ts.map +1 -0
- package/dist/fingerprints/extensions.js +178 -0
- package/dist/fingerprints/extensions.js.map +1 -0
- package/dist/fingerprints/ja3.d.ts +32 -0
- package/dist/fingerprints/ja3.d.ts.map +1 -0
- package/dist/fingerprints/ja3.js +64 -0
- package/dist/fingerprints/ja3.js.map +1 -0
- package/dist/fingerprints/profiles/chrome.d.ts +30 -0
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -0
- package/dist/fingerprints/profiles/chrome.js +202 -0
- package/dist/fingerprints/profiles/chrome.js.map +1 -0
- package/dist/fingerprints/profiles/edge.d.ts +16 -0
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -0
- package/dist/fingerprints/profiles/edge.js +61 -0
- package/dist/fingerprints/profiles/edge.js.map +1 -0
- package/dist/fingerprints/profiles/firefox.d.ts +13 -0
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -0
- package/dist/fingerprints/profiles/firefox.js +160 -0
- package/dist/fingerprints/profiles/firefox.js.map +1 -0
- package/dist/fingerprints/profiles/safari.d.ts +16 -0
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -0
- package/dist/fingerprints/profiles/safari.js +140 -0
- package/dist/fingerprints/profiles/safari.js.map +1 -0
- package/dist/fingerprints/profiles/tor.d.ts +14 -0
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -0
- package/dist/fingerprints/profiles/tor.js +136 -0
- package/dist/fingerprints/profiles/tor.js.map +1 -0
- package/dist/fingerprints/types.d.ts +104 -0
- package/dist/fingerprints/types.d.ts.map +1 -0
- package/dist/fingerprints/types.js +9 -0
- package/dist/fingerprints/types.js.map +1 -0
- package/dist/http/h1/client.d.ts +21 -0
- package/dist/http/h1/client.d.ts.map +1 -0
- package/dist/http/h1/client.js +136 -0
- package/dist/http/h1/client.js.map +1 -0
- package/dist/http/h1/encoder.d.ts +11 -0
- package/dist/http/h1/encoder.d.ts.map +1 -0
- package/dist/http/h1/encoder.js +75 -0
- package/dist/http/h1/encoder.js.map +1 -0
- package/dist/http/h1/parser.d.ts +61 -0
- package/dist/http/h1/parser.d.ts.map +1 -0
- package/dist/http/h1/parser.js +258 -0
- package/dist/http/h1/parser.js.map +1 -0
- package/dist/http/h2/client.d.ts +48 -0
- package/dist/http/h2/client.d.ts.map +1 -0
- package/dist/http/h2/client.js +376 -0
- package/dist/http/h2/client.js.map +1 -0
- package/dist/http/h2/frames.d.ts +65 -0
- package/dist/http/h2/frames.d.ts.map +1 -0
- package/dist/http/h2/frames.js +184 -0
- package/dist/http/h2/frames.js.map +1 -0
- package/dist/http/h2/hpack.d.ts +27 -0
- package/dist/http/h2/hpack.d.ts.map +1 -0
- package/dist/http/h2/hpack.js +423 -0
- package/dist/http/h2/hpack.js.map +1 -0
- package/dist/http/negotiator.d.ts +36 -0
- package/dist/http/negotiator.d.ts.map +1 -0
- package/dist/http/negotiator.js +101 -0
- package/dist/http/negotiator.js.map +1 -0
- package/dist/http/pool.d.ts +63 -0
- package/dist/http/pool.d.ts.map +1 -0
- package/dist/http/pool.js +177 -0
- package/dist/http/pool.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/interceptor.d.ts +27 -0
- package/dist/middleware/interceptor.d.ts.map +1 -0
- package/dist/middleware/interceptor.js +35 -0
- package/dist/middleware/interceptor.js.map +1 -0
- package/dist/middleware/rate-limiter.d.ts +26 -0
- package/dist/middleware/rate-limiter.d.ts.map +1 -0
- package/dist/middleware/rate-limiter.js +59 -0
- package/dist/middleware/rate-limiter.js.map +1 -0
- package/dist/middleware/retry.d.ts +17 -0
- package/dist/middleware/retry.d.ts.map +1 -0
- package/dist/middleware/retry.js +64 -0
- package/dist/middleware/retry.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +23 -0
- package/dist/proxy/http-proxy.d.ts.map +1 -0
- package/dist/proxy/http-proxy.js +93 -0
- package/dist/proxy/http-proxy.js.map +1 -0
- package/dist/proxy/socks.d.ts +24 -0
- package/dist/proxy/socks.d.ts.map +1 -0
- package/dist/proxy/socks.js +196 -0
- package/dist/proxy/socks.js.map +1 -0
- package/dist/tls/constants.d.ts +142 -0
- package/dist/tls/constants.d.ts.map +1 -0
- package/dist/tls/constants.js +163 -0
- package/dist/tls/constants.js.map +1 -0
- package/dist/tls/node-engine.d.ts +22 -0
- package/dist/tls/node-engine.d.ts.map +1 -0
- package/dist/tls/node-engine.js +190 -0
- package/dist/tls/node-engine.js.map +1 -0
- package/dist/tls/stealth/client-hello.d.ts +38 -0
- package/dist/tls/stealth/client-hello.d.ts.map +1 -0
- package/dist/tls/stealth/client-hello.js +197 -0
- package/dist/tls/stealth/client-hello.js.map +1 -0
- package/dist/tls/stealth/engine.d.ts +16 -0
- package/dist/tls/stealth/engine.d.ts.map +1 -0
- package/dist/tls/stealth/engine.js +196 -0
- package/dist/tls/stealth/engine.js.map +1 -0
- package/dist/tls/stealth/handshake.d.ts +45 -0
- package/dist/tls/stealth/handshake.d.ts.map +1 -0
- package/dist/tls/stealth/handshake.js +403 -0
- package/dist/tls/stealth/handshake.js.map +1 -0
- package/dist/tls/stealth/key-schedule.d.ts +85 -0
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -0
- package/dist/tls/stealth/key-schedule.js +141 -0
- package/dist/tls/stealth/key-schedule.js.map +1 -0
- package/dist/tls/stealth/record-layer.d.ts +74 -0
- package/dist/tls/stealth/record-layer.d.ts.map +1 -0
- package/dist/tls/stealth/record-layer.js +167 -0
- package/dist/tls/stealth/record-layer.js.map +1 -0
- package/dist/tls/types.d.ts +58 -0
- package/dist/tls/types.d.ts.map +1 -0
- package/dist/tls/types.js +6 -0
- package/dist/tls/types.js.map +1 -0
- package/dist/utils/buffer-reader.d.ts +32 -0
- package/dist/utils/buffer-reader.d.ts.map +1 -0
- package/dist/utils/buffer-reader.js +99 -0
- package/dist/utils/buffer-reader.js.map +1 -0
- package/dist/utils/buffer-writer.d.ts +35 -0
- package/dist/utils/buffer-writer.d.ts.map +1 -0
- package/dist/utils/buffer-writer.js +121 -0
- package/dist/utils/buffer-writer.js.map +1 -0
- package/dist/utils/encoding.d.ts +19 -0
- package/dist/utils/encoding.d.ts.map +1 -0
- package/dist/utils/encoding.js +63 -0
- package/dist/utils/encoding.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +56 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/url.d.ts +22 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +56 -0
- package/dist/utils/url.js.map +1 -0
- package/dist/ws/client.d.ts +63 -0
- package/dist/ws/client.d.ts.map +1 -0
- package/dist/ws/client.js +273 -0
- package/dist/ws/client.js.map +1 -0
- package/dist/ws/frame.d.ts +44 -0
- package/dist/ws/frame.d.ts.map +1 -0
- package/dist/ws/frame.js +146 -0
- package/dist/ws/frame.js.map +1 -0
- 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"}
|