@ossiana/node-libcurl 1.1.3-alpha-3 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/LICENSE +21 -21
  2. package/dist/export.d.ts +6 -4
  3. package/dist/export.js +13 -9
  4. package/dist/export.js.map +1 -1
  5. package/dist/fetch.d.ts +27 -27
  6. package/dist/fetch.js +51 -51
  7. package/dist/fetch.js.map +1 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.js +17 -17
  10. package/dist/ja3Map.d.ts +12 -0
  11. package/dist/ja3Map.js +16 -0
  12. package/dist/ja3Map.js.map +1 -0
  13. package/dist/libcurl.d.ts +186 -172
  14. package/dist/libcurl.js +364 -350
  15. package/dist/libcurl.js.map +1 -1
  16. package/dist/libcurlWebSocket.d.ts +30 -0
  17. package/dist/libcurlWebSocket.js +83 -0
  18. package/dist/libcurlWebSocket.js.map +1 -0
  19. package/dist/requests.d.ts +101 -82
  20. package/dist/requests.js +372 -248
  21. package/dist/requests.js.map +1 -1
  22. package/dist/utils.d.ts +7 -6
  23. package/dist/utils.js +110 -101
  24. package/dist/utils.js.map +1 -1
  25. package/package.json +48 -41
  26. package/readme.md +79 -79
  27. package/scripts/bindings.js +15 -0
  28. package/scripts/postinstall.js +104 -0
  29. package/binding.gyp +0 -97
  30. package/src/ja3Table.json +0 -102
  31. package/src/libcurl/bao_curl.cpp +0 -338
  32. package/src/libcurl/bao_curl_multi.cpp +0 -123
  33. package/src/libcurl/bao_curl_node_addon.cpp +0 -511
  34. package/src/libcurl/include/bao_curl.h +0 -116
  35. package/src/libcurl/include/curl/Makefile.am +0 -39
  36. package/src/libcurl/include/curl/curl.h +0 -3104
  37. package/src/libcurl/include/curl/curlver.h +0 -77
  38. package/src/libcurl/include/curl/easy.h +0 -123
  39. package/src/libcurl/include/curl/mprintf.h +0 -50
  40. package/src/libcurl/include/curl/multi.h +0 -457
  41. package/src/libcurl/include/curl/options.h +0 -68
  42. package/src/libcurl/include/curl/stdcheaders.h +0 -33
  43. package/src/libcurl/include/curl/system.h +0 -504
  44. package/src/libcurl/include/curl/typecheck-gcc.h +0 -707
  45. package/src/libcurl/include/curl/urlapi.h +0 -145
  46. package/src/libcurl/include/request_tls_utils.h +0 -30
  47. package/src/libcurl/include/utils.h +0 -23
  48. package/src/libcurl/utils.cpp +0 -43
package/dist/libcurl.js CHANGED
@@ -1,351 +1,365 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LibCurl = exports.LibCurlError = exports.LibCurlJA3EcPointFormat = exports.LibCurlJA3SupportGroup = exports.LibCurlJA3Extension = exports.LibCurlJA3Cipher = exports.LibCurlJA3TlsVersion = exports.LibCurlHttpVersionInfo = void 0;
7
- const bindings_1 = __importDefault(require("bindings"));
8
- const utils_1 = require("./utils");
9
- const { BaoLibCurl } = (0, bindings_1.default)('bao_curl_node_addon');
10
- BaoLibCurl.globalInit();
11
- process.on('exit', (e) => {
12
- BaoLibCurl.globalCleanup();
13
- });
14
- var LibCurlHttpVersionInfo;
15
- (function (LibCurlHttpVersionInfo) {
16
- LibCurlHttpVersionInfo[LibCurlHttpVersionInfo["http1_1"] = 0] = "http1_1";
17
- LibCurlHttpVersionInfo[LibCurlHttpVersionInfo["http2"] = 1] = "http2";
18
- })(LibCurlHttpVersionInfo = exports.LibCurlHttpVersionInfo || (exports.LibCurlHttpVersionInfo = {}));
19
- var LibCurlJA3TlsVersion;
20
- (function (LibCurlJA3TlsVersion) {
21
- LibCurlJA3TlsVersion[LibCurlJA3TlsVersion["TLSv1_2"] = 771] = "TLSv1_2";
22
- LibCurlJA3TlsVersion[LibCurlJA3TlsVersion["TLSv1_3"] = 772] = "TLSv1_3";
23
- })(LibCurlJA3TlsVersion = exports.LibCurlJA3TlsVersion || (exports.LibCurlJA3TlsVersion = {}));
24
- var LibCurlJA3Cipher;
25
- (function (LibCurlJA3Cipher) {
26
- LibCurlJA3Cipher[LibCurlJA3Cipher["NULL-SHA"] = 2] = "NULL-SHA";
27
- LibCurlJA3Cipher[LibCurlJA3Cipher["DES-CBC3-SHA"] = 10] = "DES-CBC3-SHA";
28
- LibCurlJA3Cipher[LibCurlJA3Cipher["AES128-SHA"] = 47] = "AES128-SHA";
29
- LibCurlJA3Cipher[LibCurlJA3Cipher["AES256-SHA"] = 53] = "AES256-SHA";
30
- LibCurlJA3Cipher[LibCurlJA3Cipher["PSK-AES128-CBC-SHA"] = 140] = "PSK-AES128-CBC-SHA";
31
- LibCurlJA3Cipher[LibCurlJA3Cipher["PSK-AES256-CBC-SHA"] = 141] = "PSK-AES256-CBC-SHA";
32
- LibCurlJA3Cipher[LibCurlJA3Cipher["AES128-GCM-SHA256"] = 156] = "AES128-GCM-SHA256";
33
- LibCurlJA3Cipher[LibCurlJA3Cipher["AES256-GCM-SHA384"] = 157] = "AES256-GCM-SHA384";
34
- LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_AES_128_GCM_SHA256"] = 4865] = "TLS_AES_128_GCM_SHA256";
35
- LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_AES_256_GCM_SHA384"] = 4866] = "TLS_AES_256_GCM_SHA384";
36
- LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_CHACHA20_POLY1305_SHA256"] = 4867] = "TLS_CHACHA20_POLY1305_SHA256";
37
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-AES128-SHA"] = 49161] = "ECDHE-ECDSA-AES128-SHA";
38
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-AES256-SHA"] = 49162] = "ECDHE-ECDSA-AES256-SHA";
39
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-AES128-SHA"] = 49171] = "ECDHE-RSA-AES128-SHA";
40
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-AES256-SHA"] = 49172] = "ECDHE-RSA-AES256-SHA";
41
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-AES128-GCM-SHA256"] = 49195] = "ECDHE-ECDSA-AES128-GCM-SHA256";
42
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-AES256-GCM-SHA384"] = 49196] = "ECDHE-ECDSA-AES256-GCM-SHA384";
43
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-AES128-GCM-SHA256"] = 49199] = "ECDHE-RSA-AES128-GCM-SHA256";
44
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-AES256-GCM-SHA384"] = 49200] = "ECDHE-RSA-AES256-GCM-SHA384";
45
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-PSK-AES128-CBC-SHA"] = 49205] = "ECDHE-PSK-AES128-CBC-SHA";
46
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-PSK-AES256-CBC-SHA"] = 49206] = "ECDHE-PSK-AES256-CBC-SHA";
47
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-CHACHA20-POLY1305"] = 52392] = "ECDHE-RSA-CHACHA20-POLY1305";
48
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-CHACHA20-POLY1305"] = 52393] = "ECDHE-ECDSA-CHACHA20-POLY1305";
49
- LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-PSK-CHACHA20-POLY1305"] = 52396] = "ECDHE-PSK-CHACHA20-POLY1305";
50
- })(LibCurlJA3Cipher = exports.LibCurlJA3Cipher || (exports.LibCurlJA3Cipher = {}));
51
- var LibCurlJA3Extension;
52
- (function (LibCurlJA3Extension) {
53
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_server_name"] = 0] = "TLSEXT_TYPE_server_name";
54
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_status_request"] = 5] = "TLSEXT_TYPE_status_request";
55
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_ec_point_formats"] = 11] = "TLSEXT_TYPE_ec_point_formats";
56
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_signature_algorithms"] = 13] = "TLSEXT_TYPE_signature_algorithms";
57
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_srtp"] = 14] = "TLSEXT_TYPE_srtp";
58
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_application_layer_protocol_negotiation"] = 16] = "TLSEXT_TYPE_application_layer_protocol_negotiation";
59
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_padding"] = 21] = "TLSEXT_TYPE_padding";
60
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_extended_master_secret"] = 23] = "TLSEXT_TYPE_extended_master_secret";
61
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_quic_transport_parameters_legacy"] = 65445] = "TLSEXT_TYPE_quic_transport_parameters_legacy";
62
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_quic_transport_parameters"] = 57] = "TLSEXT_TYPE_quic_transport_parameters";
63
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_cert_compression"] = 27] = "TLSEXT_TYPE_cert_compression";
64
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_session_ticket"] = 35] = "TLSEXT_TYPE_session_ticket";
65
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_supported_groups"] = 10] = "TLSEXT_TYPE_supported_groups";
66
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_pre_shared_key"] = 41] = "TLSEXT_TYPE_pre_shared_key";
67
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_early_data"] = 42] = "TLSEXT_TYPE_early_data";
68
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_supported_versions"] = 43] = "TLSEXT_TYPE_supported_versions";
69
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_cookie"] = 44] = "TLSEXT_TYPE_cookie";
70
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_psk_key_exchange_modes"] = 45] = "TLSEXT_TYPE_psk_key_exchange_modes";
71
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_certificate_authorities"] = 47] = "TLSEXT_TYPE_certificate_authorities";
72
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_signature_algorithms_cert"] = 50] = "TLSEXT_TYPE_signature_algorithms_cert";
73
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_key_share"] = 51] = "TLSEXT_TYPE_key_share";
74
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_renegotiate"] = 65281] = "TLSEXT_TYPE_renegotiate";
75
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_delegated_credential"] = 34] = "TLSEXT_TYPE_delegated_credential";
76
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_application_settings"] = 17513] = "TLSEXT_TYPE_application_settings";
77
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_encrypted_client_hello"] = 65037] = "TLSEXT_TYPE_encrypted_client_hello";
78
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_ech_outer_extensions"] = 64768] = "TLSEXT_TYPE_ech_outer_extensions";
79
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_certificate_timestamp"] = 18] = "TLSEXT_TYPE_certificate_timestamp";
80
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_next_proto_neg"] = 13172] = "TLSEXT_TYPE_next_proto_neg";
81
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_channel_id"] = 30032] = "TLSEXT_TYPE_channel_id";
82
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_record_size_limit"] = 28] = "TLSEXT_TYPE_record_size_limit";
83
- LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_delegated_credentials"] = 34] = "TLSEXT_TYPE_delegated_credentials";
84
- })(LibCurlJA3Extension = exports.LibCurlJA3Extension || (exports.LibCurlJA3Extension = {}));
85
- var LibCurlJA3SupportGroup;
86
- (function (LibCurlJA3SupportGroup) {
87
- LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["P-256"] = 23] = "P-256";
88
- LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["P-384"] = 24] = "P-384";
89
- LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["P-521"] = 25] = "P-521";
90
- LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["X25519"] = 29] = "X25519";
91
- LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["ffdhe2048"] = 256] = "ffdhe2048";
92
- LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["ffdhe3072"] = 257] = "ffdhe3072";
93
- })(LibCurlJA3SupportGroup = exports.LibCurlJA3SupportGroup || (exports.LibCurlJA3SupportGroup = {}));
94
- var LibCurlJA3EcPointFormat;
95
- (function (LibCurlJA3EcPointFormat) {
96
- LibCurlJA3EcPointFormat[LibCurlJA3EcPointFormat["uncompressed"] = 0] = "uncompressed";
97
- LibCurlJA3EcPointFormat[LibCurlJA3EcPointFormat["compressed_fixed"] = 1] = "compressed_fixed";
98
- LibCurlJA3EcPointFormat[LibCurlJA3EcPointFormat["compressed_variable"] = 2] = "compressed_variable";
99
- })(LibCurlJA3EcPointFormat = exports.LibCurlJA3EcPointFormat || (exports.LibCurlJA3EcPointFormat = {}));
100
- const LibCurlBoringSSLExtensionPermutation = [
101
- LibCurlJA3Extension.TLSEXT_TYPE_server_name,
102
- LibCurlJA3Extension.TLSEXT_TYPE_encrypted_client_hello,
103
- LibCurlJA3Extension.TLSEXT_TYPE_extended_master_secret,
104
- LibCurlJA3Extension.TLSEXT_TYPE_renegotiate,
105
- LibCurlJA3Extension.TLSEXT_TYPE_supported_groups,
106
- LibCurlJA3Extension.TLSEXT_TYPE_ec_point_formats,
107
- LibCurlJA3Extension.TLSEXT_TYPE_session_ticket,
108
- LibCurlJA3Extension.TLSEXT_TYPE_application_layer_protocol_negotiation,
109
- LibCurlJA3Extension.TLSEXT_TYPE_status_request,
110
- LibCurlJA3Extension.TLSEXT_TYPE_signature_algorithms,
111
- LibCurlJA3Extension.TLSEXT_TYPE_next_proto_neg,
112
- LibCurlJA3Extension.TLSEXT_TYPE_certificate_timestamp,
113
- LibCurlJA3Extension.TLSEXT_TYPE_channel_id,
114
- LibCurlJA3Extension.TLSEXT_TYPE_srtp,
115
- LibCurlJA3Extension.TLSEXT_TYPE_key_share,
116
- LibCurlJA3Extension.TLSEXT_TYPE_psk_key_exchange_modes,
117
- LibCurlJA3Extension.TLSEXT_TYPE_early_data,
118
- LibCurlJA3Extension.TLSEXT_TYPE_supported_versions,
119
- LibCurlJA3Extension.TLSEXT_TYPE_cookie,
120
- LibCurlJA3Extension.TLSEXT_TYPE_quic_transport_parameters,
121
- LibCurlJA3Extension.TLSEXT_TYPE_quic_transport_parameters_legacy,
122
- LibCurlJA3Extension.TLSEXT_TYPE_cert_compression,
123
- LibCurlJA3Extension.TLSEXT_TYPE_delegated_credential,
124
- LibCurlJA3Extension.TLSEXT_TYPE_application_settings,
125
- LibCurlJA3Extension.TLSEXT_TYPE_record_size_limit,
126
- LibCurlJA3Extension.TLSEXT_TYPE_pre_shared_key,
127
- ];
128
- class LibCurlError extends Error {
129
- constructor(message) {
130
- super(message);
131
- }
132
- }
133
- exports.LibCurlError = LibCurlError;
134
- class LibCurl {
135
- m_libCurl_impl_;
136
- m_isSending_;
137
- constructor() {
138
- this.m_libCurl_impl_ = new BaoLibCurl();
139
- }
140
- static multiExecute() {
141
- }
142
- checkSending() {
143
- if (this.m_isSending_) {
144
- throw new Error('the last request is sending, don\'t send one more request on one instance!');
145
- }
146
- }
147
- open(method, url) {
148
- this.checkSending();
149
- this.m_libCurl_impl_.open(method, url + '');
150
- }
151
- setRequestHeader(key, value) {
152
- this.checkSending();
153
- this.m_libCurl_impl_.setRequestHeader(key, value);
154
- }
155
- setRequestHeaders(headers) {
156
- this.checkSending();
157
- if (!headers) {
158
- return;
159
- }
160
- if (headers instanceof Map) {
161
- headers.forEach((value, key) => this.m_libCurl_impl_.setRequestHeader(key, value));
162
- }
163
- else if (typeof headers == 'string') {
164
- this.m_libCurl_impl_.setRequestHeaders(headers);
165
- }
166
- else if (typeof headers == 'object') {
167
- Object.keys(headers).forEach((key) => {
168
- const value = headers[key];
169
- this.m_libCurl_impl_.setRequestHeader(key, value);
170
- });
171
- }
172
- else {
173
- throw new TypeError('unkown type');
174
- }
175
- }
176
- setProxy(proxyOpt) {
177
- this.checkSending();
178
- if (typeof proxyOpt == 'string') {
179
- this.m_libCurl_impl_.setProxy(proxyOpt);
180
- }
181
- else {
182
- this.m_libCurl_impl_.setProxy(proxyOpt.proxy, proxyOpt.username, proxyOpt.password);
183
- }
184
- }
185
- setTimeout(connectTime, sendTime) {
186
- this.checkSending();
187
- if (connectTime > sendTime) {
188
- throw new Error('连接时间大于发送等待时间.');
189
- }
190
- this.m_libCurl_impl_.setTimeout(connectTime, sendTime);
191
- }
192
- setCookie(cookieOpt) {
193
- this.checkSending();
194
- this.m_libCurl_impl_.setCookie(cookieOpt.name, cookieOpt.value, cookieOpt.domain, cookieOpt.path);
195
- }
196
- deleteCookie(cookieOpt) {
197
- this.checkSending();
198
- this.m_libCurl_impl_.deleteCookie(cookieOpt.name, cookieOpt.domain, cookieOpt.path || "/");
199
- }
200
- getCookies(cookieOpt) {
201
- this.checkSending();
202
- const cookies_ = this.m_libCurl_impl_.getCookies();
203
- return (0, utils_1.httpCookiesToArray)(cookies_).filter((0, utils_1.cookieOptFilter)(cookieOpt)).map(e => `${e[5]}=${encodeURIComponent(e[6])};`).join(' ');
204
- }
205
- getCookiesMap(cookieOpt) {
206
- this.checkSending();
207
- const cookies_ = this.m_libCurl_impl_.getCookies();
208
- return (0, utils_1.httpCookiesToArray)(cookies_).filter((0, utils_1.cookieOptFilter)(cookieOpt)).reduce((e, t) => {
209
- e.set(t[5], {
210
- domain: t[0],
211
- subDomain: t[1],
212
- path: t[2],
213
- secure: t[3],
214
- timestamp: t[4],
215
- value: t[6],
216
- });
217
- return e;
218
- }, new Map());
219
- }
220
- getCookie(cookieOpt) {
221
- this.checkSending();
222
- return this.m_libCurl_impl_.getCookie(cookieOpt.name, cookieOpt.domain || ".", cookieOpt.path || "/");
223
- }
224
- getResponseHeaders() {
225
- this.checkSending();
226
- return this.m_libCurl_impl_.getResponseHeaders();
227
- }
228
- getResponseHeadersMap() {
229
- this.checkSending();
230
- const headers_ = this.m_libCurl_impl_.getResponseHeaders();
231
- return headers_.split('\r\n')
232
- .slice(1)
233
- .reduce((e, t) => {
234
- if (!t) {
235
- return e;
236
- }
237
- const [key, value] = t.split(': ');
238
- e.set(key, value);
239
- return e;
240
- }, new Map());
241
- }
242
- getResponseStatus() {
243
- this.checkSending();
244
- return this.m_libCurl_impl_.getResponseStatus();
245
- }
246
- getResponseContentLength() {
247
- this.checkSending();
248
- return this.m_libCurl_impl_.getResponseContentLength();
249
- }
250
- reset() {
251
- this.checkSending();
252
- this.m_libCurl_impl_.reset();
253
- }
254
- setRedirect(isAllow) {
255
- this.checkSending();
256
- this.m_libCurl_impl_.setRedirect(isAllow);
257
- }
258
- printInnerLogger() {
259
- this.checkSending();
260
- this.m_libCurl_impl_.printInnerLogger();
261
- }
262
- setHttpVersion(version) {
263
- this.checkSending();
264
- this.m_libCurl_impl_.setHttpVersion(version);
265
- }
266
- setInterface(network) {
267
- this.checkSending();
268
- this.m_libCurl_impl_.setInterface(network);
269
- }
270
- setJA3Fingerprint(ja3) {
271
- this.checkSending();
272
- const ja3Arr = ja3.replaceAll('\s', '').split(',');
273
- if (ja3Arr.length != 5) {
274
- throw new LibCurlError('ja3 fingerprint error');
275
- }
276
- const tlsVersion = ja3Arr.at(0);
277
- if (!LibCurlJA3TlsVersion[ja3Arr.at(0)]) {
278
- throw new LibCurlError('ja3 fingerprint tlsVersion no support');
279
- }
280
- let tls13_ciphers = [];
281
- const cipherArr = ja3Arr.at(1).split('-').map((key) => {
282
- const cipher = LibCurlJA3Cipher[key];
283
- if (!cipher) {
284
- throw new LibCurlError(`ja3 fingerprint cipher ${key} no support`);
285
- }
286
- if (cipher.startsWith('TLS_')) {
287
- const pos = ['4865', '4866', '4867'].indexOf(key);
288
- if (pos == -1) {
289
- throw new LibCurlError(`ja3 fingerprint TLSv1.3 cipher ${key} no support`);
290
- }
291
- tls13_ciphers.push(pos + 1);
292
- return;
293
- }
294
- return cipher;
295
- }).filter(Boolean);
296
- const extensions = ja3Arr.at(2).split('-').filter((extension) => {
297
- return extension != '21';
298
- }).map(e => parseInt(e));
299
- const extension_permutation = extensions.map((extension) => {
300
- const pos = LibCurlBoringSSLExtensionPermutation.indexOf(extension);
301
- if (pos == -1) {
302
- throw new LibCurlError(`ja3 fingerprint extension ${extension} no support`);
303
- }
304
- return pos + 1;
305
- });
306
- const supportGroups = ja3Arr.at(3).split('-').map((key) => {
307
- if (!LibCurlJA3SupportGroup[key]) {
308
- throw new LibCurlError(`ja3 fingerprint supportGroup ${key} no support`);
309
- }
310
- return LibCurlJA3SupportGroup[key];
311
- });
312
- this.m_libCurl_impl_.setJA3Fingerprint(parseInt(tlsVersion), cipherArr.join(':'), String.fromCharCode(...tls13_ciphers, 0), String.fromCharCode(...extension_permutation, 0), supportGroups.join(':'), 0);
313
- }
314
- send(body) {
315
- this.checkSending();
316
- this.m_isSending_ = true;
317
- let promise;
318
- if (body) {
319
- let sendData;
320
- if (body instanceof URLSearchParams) {
321
- sendData = body + '';
322
- }
323
- else {
324
- sendData = body;
325
- }
326
- promise = this.m_libCurl_impl_.sendAsync(sendData);
327
- }
328
- else {
329
- promise = this.m_libCurl_impl_.sendAsync();
330
- }
331
- return promise.catch((error) => {
332
- throw new LibCurlError(error);
333
- }).finally(() => {
334
- this.m_isSending_ = false;
335
- });
336
- }
337
- getResponseBody() {
338
- this.checkSending();
339
- return this.m_libCurl_impl_.getResponseBody();
340
- }
341
- getResponseString() {
342
- this.checkSending();
343
- return this.m_libCurl_impl_.getResponseString();
344
- }
345
- getResponseJson() {
346
- this.checkSending();
347
- return JSON.parse(this.getResponseString());
348
- }
349
- }
350
- exports.LibCurl = LibCurl;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LibCurl = exports.LibCurlError = exports.LibCurlJA3EcPointFormat = exports.LibCurlJA3SupportGroup = exports.LibCurlJA3Extension = exports.LibCurlJA3Cipher = exports.LibCurlJA3TlsVersion = exports.LibCurlHttpVersionInfo = void 0;
4
+ const bindings_1 = require("../scripts/bindings");
5
+ const utils_1 = require("./utils");
6
+ bindings_1.BaoLibCurl.globalInit();
7
+ var LibCurlHttpVersionInfo;
8
+ (function (LibCurlHttpVersionInfo) {
9
+ LibCurlHttpVersionInfo[LibCurlHttpVersionInfo["http1_1"] = 0] = "http1_1";
10
+ LibCurlHttpVersionInfo[LibCurlHttpVersionInfo["http2"] = 1] = "http2";
11
+ })(LibCurlHttpVersionInfo = exports.LibCurlHttpVersionInfo || (exports.LibCurlHttpVersionInfo = {}));
12
+ var LibCurlJA3TlsVersion;
13
+ (function (LibCurlJA3TlsVersion) {
14
+ LibCurlJA3TlsVersion[LibCurlJA3TlsVersion["TLSv1_2"] = 771] = "TLSv1_2";
15
+ LibCurlJA3TlsVersion[LibCurlJA3TlsVersion["TLSv1_3"] = 772] = "TLSv1_3";
16
+ })(LibCurlJA3TlsVersion = exports.LibCurlJA3TlsVersion || (exports.LibCurlJA3TlsVersion = {}));
17
+ var LibCurlJA3Cipher;
18
+ (function (LibCurlJA3Cipher) {
19
+ LibCurlJA3Cipher[LibCurlJA3Cipher["NULL-SHA"] = 2] = "NULL-SHA";
20
+ LibCurlJA3Cipher[LibCurlJA3Cipher["DES-CBC3-SHA"] = 10] = "DES-CBC3-SHA";
21
+ LibCurlJA3Cipher[LibCurlJA3Cipher["AES128-SHA"] = 47] = "AES128-SHA";
22
+ LibCurlJA3Cipher[LibCurlJA3Cipher["AES256-SHA"] = 53] = "AES256-SHA";
23
+ LibCurlJA3Cipher[LibCurlJA3Cipher["DHE-RSA-AES128-SHA"] = 51] = "DHE-RSA-AES128-SHA";
24
+ LibCurlJA3Cipher[LibCurlJA3Cipher["DHE-RSA-AES256-SHA"] = 57] = "DHE-RSA-AES256-SHA";
25
+ LibCurlJA3Cipher[LibCurlJA3Cipher["AES128-SHA256"] = 60] = "AES128-SHA256";
26
+ LibCurlJA3Cipher[LibCurlJA3Cipher["AES256-SHA256"] = 61] = "AES256-SHA256";
27
+ LibCurlJA3Cipher[LibCurlJA3Cipher["DHE-RSA-AES128-SHA256"] = 103] = "DHE-RSA-AES128-SHA256";
28
+ LibCurlJA3Cipher[LibCurlJA3Cipher["DHE-RSA-AES256-SHA256"] = 107] = "DHE-RSA-AES256-SHA256";
29
+ LibCurlJA3Cipher[LibCurlJA3Cipher["PSK-AES128-CBC-SHA"] = 140] = "PSK-AES128-CBC-SHA";
30
+ LibCurlJA3Cipher[LibCurlJA3Cipher["PSK-AES256-CBC-SHA"] = 141] = "PSK-AES256-CBC-SHA";
31
+ LibCurlJA3Cipher[LibCurlJA3Cipher["AES128-GCM-SHA256"] = 156] = "AES128-GCM-SHA256";
32
+ LibCurlJA3Cipher[LibCurlJA3Cipher["AES256-GCM-SHA384"] = 157] = "AES256-GCM-SHA384";
33
+ LibCurlJA3Cipher[LibCurlJA3Cipher["DHE-RSA-AES128-GCM-SHA256"] = 158] = "DHE-RSA-AES128-GCM-SHA256";
34
+ LibCurlJA3Cipher[LibCurlJA3Cipher["DHE-RSA-AES256-GCM-SHA384"] = 159] = "DHE-RSA-AES256-GCM-SHA384";
35
+ LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_AES_128_GCM_SHA256"] = 4865] = "TLS_AES_128_GCM_SHA256";
36
+ LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_AES_256_GCM_SHA384"] = 4866] = "TLS_AES_256_GCM_SHA384";
37
+ LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_CHACHA20_POLY1305_SHA256"] = 4867] = "TLS_CHACHA20_POLY1305_SHA256";
38
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-DES-CBC3-SHA"] = 49160] = "ECDHE-ECDSA-DES-CBC3-SHA";
39
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-AES128-SHA"] = 49161] = "ECDHE-ECDSA-AES128-SHA";
40
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-AES256-SHA"] = 49162] = "ECDHE-ECDSA-AES256-SHA";
41
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-DES-CBC3-SHA"] = 49170] = "ECDHE-RSA-DES-CBC3-SHA";
42
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-AES128-SHA"] = 49171] = "ECDHE-RSA-AES128-SHA";
43
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-AES256-SHA"] = 49172] = "ECDHE-RSA-AES256-SHA";
44
+ LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"] = 49187] = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256";
45
+ LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"] = 49188] = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384";
46
+ LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"] = 49191] = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
47
+ LibCurlJA3Cipher[LibCurlJA3Cipher["TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"] = 49192] = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
48
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-AES128-GCM-SHA256"] = 49195] = "ECDHE-ECDSA-AES128-GCM-SHA256";
49
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-AES256-GCM-SHA384"] = 49196] = "ECDHE-ECDSA-AES256-GCM-SHA384";
50
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-AES128-GCM-SHA256"] = 49199] = "ECDHE-RSA-AES128-GCM-SHA256";
51
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-AES256-GCM-SHA384"] = 49200] = "ECDHE-RSA-AES256-GCM-SHA384";
52
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-PSK-AES128-CBC-SHA"] = 49205] = "ECDHE-PSK-AES128-CBC-SHA";
53
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-PSK-AES256-CBC-SHA"] = 49206] = "ECDHE-PSK-AES256-CBC-SHA";
54
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-RSA-CHACHA20-POLY1305"] = 52392] = "ECDHE-RSA-CHACHA20-POLY1305";
55
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-ECDSA-CHACHA20-POLY1305"] = 52393] = "ECDHE-ECDSA-CHACHA20-POLY1305";
56
+ LibCurlJA3Cipher[LibCurlJA3Cipher["ECDHE-PSK-CHACHA20-POLY1305"] = 52396] = "ECDHE-PSK-CHACHA20-POLY1305";
57
+ })(LibCurlJA3Cipher = exports.LibCurlJA3Cipher || (exports.LibCurlJA3Cipher = {}));
58
+ var LibCurlJA3Extension;
59
+ (function (LibCurlJA3Extension) {
60
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_server_name"] = 0] = "TLSEXT_TYPE_server_name";
61
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_status_request"] = 5] = "TLSEXT_TYPE_status_request";
62
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_ec_point_formats"] = 11] = "TLSEXT_TYPE_ec_point_formats";
63
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_signature_algorithms"] = 13] = "TLSEXT_TYPE_signature_algorithms";
64
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_srtp"] = 14] = "TLSEXT_TYPE_srtp";
65
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_application_layer_protocol_negotiation"] = 16] = "TLSEXT_TYPE_application_layer_protocol_negotiation";
66
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_padding"] = 21] = "TLSEXT_TYPE_padding";
67
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_extended_master_secret"] = 23] = "TLSEXT_TYPE_extended_master_secret";
68
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_quic_transport_parameters_legacy"] = 65445] = "TLSEXT_TYPE_quic_transport_parameters_legacy";
69
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_quic_transport_parameters"] = 57] = "TLSEXT_TYPE_quic_transport_parameters";
70
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_cert_compression"] = 27] = "TLSEXT_TYPE_cert_compression";
71
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_session_ticket"] = 35] = "TLSEXT_TYPE_session_ticket";
72
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_supported_groups"] = 10] = "TLSEXT_TYPE_supported_groups";
73
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_pre_shared_key"] = 41] = "TLSEXT_TYPE_pre_shared_key";
74
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_early_data"] = 42] = "TLSEXT_TYPE_early_data";
75
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_supported_versions"] = 43] = "TLSEXT_TYPE_supported_versions";
76
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_cookie"] = 44] = "TLSEXT_TYPE_cookie";
77
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_psk_key_exchange_modes"] = 45] = "TLSEXT_TYPE_psk_key_exchange_modes";
78
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_certificate_authorities"] = 47] = "TLSEXT_TYPE_certificate_authorities";
79
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_signature_algorithms_cert"] = 50] = "TLSEXT_TYPE_signature_algorithms_cert";
80
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_key_share"] = 51] = "TLSEXT_TYPE_key_share";
81
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_renegotiate"] = 65281] = "TLSEXT_TYPE_renegotiate";
82
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_delegated_credential"] = 34] = "TLSEXT_TYPE_delegated_credential";
83
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_application_settings"] = 17513] = "TLSEXT_TYPE_application_settings";
84
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_encrypted_client_hello"] = 65037] = "TLSEXT_TYPE_encrypted_client_hello";
85
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_ech_outer_extensions"] = 64768] = "TLSEXT_TYPE_ech_outer_extensions";
86
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_certificate_timestamp"] = 18] = "TLSEXT_TYPE_certificate_timestamp";
87
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_next_proto_neg"] = 13172] = "TLSEXT_TYPE_next_proto_neg";
88
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_channel_id"] = 30032] = "TLSEXT_TYPE_channel_id";
89
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_record_size_limit"] = 28] = "TLSEXT_TYPE_record_size_limit";
90
+ LibCurlJA3Extension[LibCurlJA3Extension["TLSEXT_TYPE_delegated_credentials"] = 34] = "TLSEXT_TYPE_delegated_credentials";
91
+ })(LibCurlJA3Extension = exports.LibCurlJA3Extension || (exports.LibCurlJA3Extension = {}));
92
+ var LibCurlJA3SupportGroup;
93
+ (function (LibCurlJA3SupportGroup) {
94
+ LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["P-256"] = 23] = "P-256";
95
+ LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["P-384"] = 24] = "P-384";
96
+ LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["P-521"] = 25] = "P-521";
97
+ LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["X25519"] = 29] = "X25519";
98
+ LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["ffdhe2048"] = 256] = "ffdhe2048";
99
+ LibCurlJA3SupportGroup[LibCurlJA3SupportGroup["ffdhe3072"] = 257] = "ffdhe3072";
100
+ })(LibCurlJA3SupportGroup = exports.LibCurlJA3SupportGroup || (exports.LibCurlJA3SupportGroup = {}));
101
+ var LibCurlJA3EcPointFormat;
102
+ (function (LibCurlJA3EcPointFormat) {
103
+ LibCurlJA3EcPointFormat[LibCurlJA3EcPointFormat["uncompressed"] = 0] = "uncompressed";
104
+ LibCurlJA3EcPointFormat[LibCurlJA3EcPointFormat["compressed_fixed"] = 1] = "compressed_fixed";
105
+ LibCurlJA3EcPointFormat[LibCurlJA3EcPointFormat["compressed_variable"] = 2] = "compressed_variable";
106
+ })(LibCurlJA3EcPointFormat = exports.LibCurlJA3EcPointFormat || (exports.LibCurlJA3EcPointFormat = {}));
107
+ const LibCurlBoringSSLExtensionPermutation = [
108
+ LibCurlJA3Extension.TLSEXT_TYPE_server_name,
109
+ LibCurlJA3Extension.TLSEXT_TYPE_encrypted_client_hello,
110
+ LibCurlJA3Extension.TLSEXT_TYPE_extended_master_secret,
111
+ LibCurlJA3Extension.TLSEXT_TYPE_renegotiate,
112
+ LibCurlJA3Extension.TLSEXT_TYPE_supported_groups,
113
+ LibCurlJA3Extension.TLSEXT_TYPE_ec_point_formats,
114
+ LibCurlJA3Extension.TLSEXT_TYPE_session_ticket,
115
+ LibCurlJA3Extension.TLSEXT_TYPE_application_layer_protocol_negotiation,
116
+ LibCurlJA3Extension.TLSEXT_TYPE_status_request,
117
+ LibCurlJA3Extension.TLSEXT_TYPE_signature_algorithms,
118
+ LibCurlJA3Extension.TLSEXT_TYPE_next_proto_neg,
119
+ LibCurlJA3Extension.TLSEXT_TYPE_certificate_timestamp,
120
+ LibCurlJA3Extension.TLSEXT_TYPE_channel_id,
121
+ LibCurlJA3Extension.TLSEXT_TYPE_srtp,
122
+ LibCurlJA3Extension.TLSEXT_TYPE_key_share,
123
+ LibCurlJA3Extension.TLSEXT_TYPE_psk_key_exchange_modes,
124
+ LibCurlJA3Extension.TLSEXT_TYPE_early_data,
125
+ LibCurlJA3Extension.TLSEXT_TYPE_supported_versions,
126
+ LibCurlJA3Extension.TLSEXT_TYPE_cookie,
127
+ LibCurlJA3Extension.TLSEXT_TYPE_quic_transport_parameters,
128
+ LibCurlJA3Extension.TLSEXT_TYPE_quic_transport_parameters_legacy,
129
+ LibCurlJA3Extension.TLSEXT_TYPE_cert_compression,
130
+ LibCurlJA3Extension.TLSEXT_TYPE_delegated_credential,
131
+ LibCurlJA3Extension.TLSEXT_TYPE_application_settings,
132
+ LibCurlJA3Extension.TLSEXT_TYPE_record_size_limit,
133
+ LibCurlJA3Extension.TLSEXT_TYPE_pre_shared_key,
134
+ ];
135
+ class LibCurlError extends Error {
136
+ constructor(message) {
137
+ super(message);
138
+ }
139
+ }
140
+ exports.LibCurlError = LibCurlError;
141
+ class LibCurl {
142
+ m_libCurl_impl_;
143
+ m_isSending_;
144
+ constructor() {
145
+ this.m_libCurl_impl_ = new bindings_1.BaoLibCurl();
146
+ }
147
+ checkSending() {
148
+ if (this.m_isSending_) {
149
+ throw new Error('the last request is sending, don\'t send one more request on one instance!');
150
+ }
151
+ }
152
+ checkError() {
153
+ const code = this.m_libCurl_impl_.getLastCode();
154
+ if (code == 0) {
155
+ return;
156
+ }
157
+ const error = this.m_libCurl_impl_.getLastCodeError();
158
+ throw new Error(error);
159
+ }
160
+ open(method, url) {
161
+ this.checkSending();
162
+ this.m_libCurl_impl_.open(method, url + '');
163
+ }
164
+ setRequestHeader(key, value) {
165
+ this.checkSending();
166
+ this.m_libCurl_impl_.setRequestHeader(key, value);
167
+ }
168
+ setRequestHeaders(headers) {
169
+ this.checkSending();
170
+ if (!headers) {
171
+ return;
172
+ }
173
+ if (headers instanceof Map) {
174
+ headers.forEach((value, key) => this.m_libCurl_impl_.setRequestHeader(key, value));
175
+ }
176
+ else if (typeof headers == 'string') {
177
+ this.m_libCurl_impl_.setRequestHeaders(headers);
178
+ }
179
+ else if (typeof headers == 'object') {
180
+ Object.keys(headers).forEach((key) => {
181
+ const value = headers[key];
182
+ this.m_libCurl_impl_.setRequestHeader(key, value);
183
+ });
184
+ }
185
+ else {
186
+ throw new TypeError('unkown type');
187
+ }
188
+ }
189
+ setProxy(proxyOpt) {
190
+ this.checkSending();
191
+ if (typeof proxyOpt == 'string') {
192
+ this.m_libCurl_impl_.setProxy(proxyOpt);
193
+ }
194
+ else {
195
+ this.m_libCurl_impl_.setProxy(proxyOpt.proxy, proxyOpt.username, proxyOpt.password);
196
+ }
197
+ this.checkError();
198
+ }
199
+ setTimeout(connectTime, sendTime) {
200
+ this.checkSending();
201
+ if (connectTime > sendTime) {
202
+ throw new Error('连接时间大于发送等待时间.');
203
+ }
204
+ this.m_libCurl_impl_.setTimeout(connectTime, sendTime);
205
+ }
206
+ setCookie(cookieOpt) {
207
+ this.checkSending();
208
+ this.m_libCurl_impl_.setCookie(cookieOpt.name, cookieOpt.value, cookieOpt.domain, cookieOpt.path);
209
+ }
210
+ deleteCookie(cookieOpt) {
211
+ this.checkSending();
212
+ this.m_libCurl_impl_.deleteCookie(cookieOpt.name, cookieOpt.domain, cookieOpt.path || "/");
213
+ }
214
+ getCookies(cookieOpt) {
215
+ this.checkSending();
216
+ const cookies_ = this.m_libCurl_impl_.getCookies();
217
+ return (0, utils_1.httpCookiesToArray)(cookies_).filter((0, utils_1.cookieOptFilter)(cookieOpt)).map(e => `${e[5]}=${encodeURIComponent(e[6])};`).join(' ');
218
+ }
219
+ getCookiesMap(cookieOpt) {
220
+ this.checkSending();
221
+ const cookies_ = this.m_libCurl_impl_.getCookies();
222
+ return (0, utils_1.httpCookiesToArray)(cookies_).filter((0, utils_1.cookieOptFilter)(cookieOpt)).reduce((e, t) => {
223
+ e.set(t[5], {
224
+ domain: t[0],
225
+ subDomain: t[1],
226
+ path: t[2],
227
+ secure: t[3],
228
+ timestamp: t[4],
229
+ value: t[6],
230
+ });
231
+ return e;
232
+ }, new Map());
233
+ }
234
+ getCookie(cookieOpt) {
235
+ this.checkSending();
236
+ return this.m_libCurl_impl_.getCookie(cookieOpt.name, cookieOpt.domain || ".", cookieOpt.path || "/");
237
+ }
238
+ getResponseHeaders() {
239
+ this.checkSending();
240
+ return this.m_libCurl_impl_.getResponseHeaders();
241
+ }
242
+ getResponseHeadersMap() {
243
+ this.checkSending();
244
+ const headers_ = this.m_libCurl_impl_.getResponseHeaders();
245
+ return headers_.split('\r\n')
246
+ .slice(1)
247
+ .reduce((e, t) => {
248
+ if (!t) {
249
+ return e;
250
+ }
251
+ const [key, value] = t.split(': ');
252
+ e.set(key, value);
253
+ return e;
254
+ }, new Map());
255
+ }
256
+ getResponseStatus() {
257
+ this.checkSending();
258
+ return this.m_libCurl_impl_.getResponseStatus();
259
+ }
260
+ getResponseContentLength() {
261
+ this.checkSending();
262
+ return this.m_libCurl_impl_.getResponseContentLength();
263
+ }
264
+ reset() {
265
+ this.checkSending();
266
+ this.m_libCurl_impl_.reset();
267
+ }
268
+ setRedirect(isAllow) {
269
+ this.checkSending();
270
+ this.m_libCurl_impl_.setRedirect(isAllow);
271
+ }
272
+ printInnerLogger() {
273
+ this.checkSending();
274
+ this.m_libCurl_impl_.printInnerLogger();
275
+ }
276
+ setHttpVersion(version) {
277
+ this.checkSending();
278
+ this.m_libCurl_impl_.setHttpVersion(version);
279
+ }
280
+ setInterface(network) {
281
+ this.checkSending();
282
+ this.m_libCurl_impl_.setInterface(network);
283
+ }
284
+ setJA3Fingerprint(ja3) {
285
+ this.checkSending();
286
+ const ja3Arr = ja3.replaceAll('\s', '').split(',');
287
+ if (ja3Arr.length != 5) {
288
+ throw new LibCurlError('ja3 fingerprint error');
289
+ }
290
+ const tlsVersion = ja3Arr.at(0);
291
+ if (!LibCurlJA3TlsVersion[ja3Arr.at(0)]) {
292
+ throw new LibCurlError('ja3 fingerprint tlsVersion no support');
293
+ }
294
+ let tls13_ciphers = [];
295
+ const cipherArr = ja3Arr.at(1).split('-').map((key) => {
296
+ const cipher = LibCurlJA3Cipher[key];
297
+ if (!cipher) {
298
+ throw new LibCurlError(`ja3 fingerprint cipher ${key} no support`);
299
+ }
300
+ if (cipher.startsWith('TLS_')) {
301
+ const pos = ['4865', '4866', '4867', '49187', '49188', '49191', '49192'].indexOf(key);
302
+ if (pos == -1) {
303
+ throw new LibCurlError(`ja3 fingerprint TLSv1.3 cipher ${key} no support`);
304
+ }
305
+ tls13_ciphers.push(pos + 1);
306
+ return;
307
+ }
308
+ return cipher;
309
+ }).filter(Boolean);
310
+ const extensions = ja3Arr.at(2).split('-').filter((extension) => {
311
+ return extension != '21';
312
+ }).map(e => parseInt(e));
313
+ const extension_permutation = extensions.map((extension) => {
314
+ const pos = LibCurlBoringSSLExtensionPermutation.indexOf(extension);
315
+ if (pos == -1) {
316
+ throw new LibCurlError(`ja3 fingerprint extension ${extension} no support`);
317
+ }
318
+ return pos + 1;
319
+ });
320
+ const supportGroups = ja3Arr.at(3).split('-').map((key) => {
321
+ if (!LibCurlJA3SupportGroup[key]) {
322
+ throw new LibCurlError(`ja3 fingerprint supportGroup ${key} no support`);
323
+ }
324
+ return LibCurlJA3SupportGroup[key];
325
+ });
326
+ this.m_libCurl_impl_.setJA3Fingerprint(parseInt(tlsVersion), cipherArr.join(':'), String.fromCharCode(...tls13_ciphers, 0), String.fromCharCode(...extension_permutation, 0), supportGroups.join(':'), 0);
327
+ }
328
+ send(body) {
329
+ this.checkSending();
330
+ this.m_isSending_ = true;
331
+ let promise;
332
+ if (body) {
333
+ let sendData;
334
+ if (body instanceof URLSearchParams) {
335
+ sendData = body + '';
336
+ }
337
+ else {
338
+ sendData = body;
339
+ }
340
+ promise = this.m_libCurl_impl_.sendAsync(sendData);
341
+ }
342
+ else {
343
+ promise = this.m_libCurl_impl_.sendAsync();
344
+ }
345
+ return promise.catch((error) => {
346
+ throw new LibCurlError(error);
347
+ }).finally(() => {
348
+ this.m_isSending_ = false;
349
+ });
350
+ }
351
+ getResponseBody() {
352
+ this.checkSending();
353
+ return this.m_libCurl_impl_.getResponseBody();
354
+ }
355
+ getResponseString() {
356
+ this.checkSending();
357
+ return this.m_libCurl_impl_.getResponseString();
358
+ }
359
+ getResponseJson() {
360
+ this.checkSending();
361
+ return JSON.parse(this.getResponseString());
362
+ }
363
+ }
364
+ exports.LibCurl = LibCurl;
351
365
  //# sourceMappingURL=libcurl.js.map