nlcurl 0.3.1 → 0.5.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/README.md +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +84 -90
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.js +25 -25
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +2 -2
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +55 -55
- package/dist/cli/output.js.map +1 -1
- package/dist/cookies/jar.d.ts +1 -1
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +20 -22
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +1 -1
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +20 -22
- package/dist/cookies/parser.js.map +1 -1
- package/dist/core/client.d.ts +3 -3
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +9 -8
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +64 -21
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +112 -36
- package/dist/core/errors.js.map +1 -1
- package/dist/core/request.d.ts +10 -5
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +2 -2
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +6 -8
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +7 -6
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +58 -43
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +96 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +246 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/fingerprints/akamai.d.ts +1 -1
- package/dist/fingerprints/akamai.d.ts.map +1 -1
- package/dist/fingerprints/akamai.js +3 -7
- package/dist/fingerprints/akamai.js.map +1 -1
- package/dist/fingerprints/database.d.ts +7 -7
- package/dist/fingerprints/database.d.ts.map +1 -1
- package/dist/fingerprints/database.js +12 -18
- package/dist/fingerprints/database.js.map +1 -1
- package/dist/fingerprints/extensions.d.ts.map +1 -1
- package/dist/fingerprints/extensions.js +4 -4
- package/dist/fingerprints/extensions.js.map +1 -1
- package/dist/fingerprints/ja3.d.ts +1 -1
- package/dist/fingerprints/ja3.d.ts.map +1 -1
- package/dist/fingerprints/ja3.js +12 -12
- package/dist/fingerprints/ja3.js.map +1 -1
- package/dist/fingerprints/profiles/chrome.d.ts +1 -1
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
- package/dist/fingerprints/profiles/chrome.js +59 -100
- package/dist/fingerprints/profiles/chrome.js.map +1 -1
- package/dist/fingerprints/profiles/edge.d.ts +1 -1
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
- package/dist/fingerprints/profiles/edge.js +26 -26
- package/dist/fingerprints/profiles/edge.js.map +1 -1
- package/dist/fingerprints/profiles/firefox.d.ts +1 -1
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
- package/dist/fingerprints/profiles/firefox.js +35 -85
- package/dist/fingerprints/profiles/firefox.js.map +1 -1
- package/dist/fingerprints/profiles/safari.d.ts +1 -1
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
- package/dist/fingerprints/profiles/safari.js +35 -68
- package/dist/fingerprints/profiles/safari.js.map +1 -1
- package/dist/fingerprints/profiles/tor.d.ts +1 -1
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
- package/dist/fingerprints/profiles/tor.js +24 -57
- package/dist/fingerprints/profiles/tor.js.map +1 -1
- package/dist/fingerprints/types.d.ts +1 -1
- package/dist/fingerprints/types.d.ts.map +1 -1
- package/dist/http/h1/client.d.ts +4 -4
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +31 -31
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +1 -1
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +21 -20
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +1 -1
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +29 -33
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +5 -4
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +88 -76
- package/dist/http/h2/client.js.map +1 -1
- package/dist/http/h2/frames.d.ts +7 -3
- package/dist/http/h2/frames.d.ts.map +1 -1
- package/dist/http/h2/frames.js +16 -12
- package/dist/http/h2/frames.js.map +1 -1
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +331 -130
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/negotiator.d.ts +4 -4
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +45 -48
- package/dist/http/negotiator.js.map +1 -1
- package/dist/http/pool.d.ts +5 -5
- package/dist/http/pool.d.ts.map +1 -1
- package/dist/http/pool.js +5 -5
- package/dist/http/pool.js.map +1 -1
- package/dist/index.d.ts +16 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -1
- package/dist/middleware/interceptor.d.ts +2 -2
- package/dist/middleware/interceptor.d.ts.map +1 -1
- package/dist/middleware/interceptor.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +2 -0
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/middleware/retry.d.ts +6 -4
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +9 -7
- package/dist/middleware/retry.js.map +1 -1
- package/dist/proxy/http-proxy.d.ts +1 -1
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +14 -14
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.d.ts +1 -1
- package/dist/proxy/socks.d.ts.map +1 -1
- package/dist/proxy/socks.js +57 -28
- package/dist/proxy/socks.js.map +1 -1
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +1 -4
- package/dist/tls/constants.js.map +1 -1
- package/dist/tls/node-engine.d.ts +2 -2
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +58 -58
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/stealth/client-hello.d.ts +1 -1
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +8 -14
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +2 -2
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +23 -26
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +3 -3
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +62 -74
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +2 -2
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +20 -20
- package/dist/tls/stealth/key-schedule.js.map +1 -1
- package/dist/tls/stealth/record-layer.d.ts +1 -1
- package/dist/tls/stealth/record-layer.d.ts.map +1 -1
- package/dist/tls/stealth/record-layer.js +13 -13
- package/dist/tls/stealth/record-layer.js.map +1 -1
- package/dist/tls/types.d.ts +4 -4
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/utils/buffer-reader.d.ts.map +1 -1
- package/dist/utils/buffer-reader.js.map +1 -1
- package/dist/utils/buffer-writer.d.ts.map +1 -1
- package/dist/utils/buffer-writer.js +6 -0
- package/dist/utils/buffer-writer.js.map +1 -1
- package/dist/utils/encoding.d.ts +1 -1
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +23 -25
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +26 -0
- package/dist/utils/happy-eyeballs.d.ts.map +1 -0
- package/dist/utils/happy-eyeballs.js +201 -0
- package/dist/utils/happy-eyeballs.js.map +1 -0
- package/dist/utils/logger.d.ts +48 -7
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +61 -13
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +2 -2
- package/dist/utils/url.js.map +1 -1
- package/dist/ws/client.d.ts +2 -2
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +76 -71
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +8 -8
- package/dist/ws/frame.js.map +1 -1
- package/package.json +61 -57
package/dist/cli/output.js
CHANGED
|
@@ -11,14 +11,14 @@ export function formatOutput(response, args) {
|
|
|
11
11
|
const parts = [];
|
|
12
12
|
if (args.include || args.verbose) {
|
|
13
13
|
parts.push(formatResponseHeaders(response));
|
|
14
|
-
parts.push(
|
|
14
|
+
parts.push("");
|
|
15
15
|
}
|
|
16
16
|
if (args.head) {
|
|
17
|
-
return parts.join(
|
|
17
|
+
return parts.join("\n");
|
|
18
18
|
}
|
|
19
19
|
const body = response.text();
|
|
20
20
|
parts.push(body);
|
|
21
|
-
return parts.join(
|
|
21
|
+
return parts.join("\n");
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* Formats the response status line and headers in the style used by curl's
|
|
@@ -33,7 +33,7 @@ export function formatResponseHeaders(response) {
|
|
|
33
33
|
for (const [key, value] of Object.entries(response.headers)) {
|
|
34
34
|
lines.push(`${key}: ${value}`);
|
|
35
35
|
}
|
|
36
|
-
return lines.join(
|
|
36
|
+
return lines.join("\n");
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* Formats a verbose outgoing request summary in the style used by curl's `-v`
|
|
@@ -53,8 +53,8 @@ export function formatVerboseRequest(method, url, headers) {
|
|
|
53
53
|
for (const [key, value] of Object.entries(headers)) {
|
|
54
54
|
lines.push(`> ${key}: ${value}`);
|
|
55
55
|
}
|
|
56
|
-
lines.push(
|
|
57
|
-
return lines.join(
|
|
56
|
+
lines.push(">");
|
|
57
|
+
return lines.join("\n");
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
60
|
* Returns the complete help text describing all supported CLI flags and
|
|
@@ -63,55 +63,55 @@ export function formatVerboseRequest(method, url, headers) {
|
|
|
63
63
|
* @returns {string} Help text suitable for printing to stdout.
|
|
64
64
|
*/
|
|
65
65
|
export function printHelp() {
|
|
66
|
-
return `nlcurl -- HTTP client with browser fingerprint impersonation
|
|
67
|
-
|
|
68
|
-
USAGE:
|
|
69
|
-
nlcurl [OPTIONS] <URL>
|
|
70
|
-
|
|
71
|
-
OPTIONS:
|
|
72
|
-
-X, --request <METHOD> HTTP method (GET, POST, PUT, DELETE, etc.)
|
|
73
|
-
-H, --header <HEADER> Add a request header (Name: Value)
|
|
74
|
-
-d, --data <DATA> Request body (sets method to POST if not specified)
|
|
75
|
-
--data-raw <DATA> Request body without special character processing
|
|
76
|
-
-A, --user-agent <AGENT> Set the User-Agent header
|
|
77
|
-
-o, --output <FILE> Write response body to file
|
|
78
|
-
-I, --head Send HEAD request, show headers only
|
|
79
|
-
-i, --include Include response headers in output
|
|
80
|
-
-v, --verbose Verbose output (request and response details)
|
|
81
|
-
-s, --silent Suppress progress and error messages
|
|
82
|
-
--compressed Request compressed response
|
|
83
|
-
|
|
84
|
-
IMPERSONATION:
|
|
85
|
-
--impersonate <PROFILE> Browser profile (e.g. chrome136, firefox138)
|
|
86
|
-
--stealth Use stealth TLS engine for full fingerprint control
|
|
87
|
-
--ja3 <FINGERPRINT> Custom JA3 fingerprint string
|
|
88
|
-
--akamai <FINGERPRINT> Custom Akamai HTTP/2 fingerprint string
|
|
89
|
-
--list-profiles List all available browser profiles
|
|
90
|
-
|
|
91
|
-
CONNECTION:
|
|
92
|
-
-x, --proxy <URL> Proxy URL (http, socks4, socks5)
|
|
93
|
-
-U, --proxy-user <USER:PASS> Proxy authentication
|
|
94
|
-
-k, --insecure Skip TLS certificate verification
|
|
95
|
-
-L, --location Follow redirects (default)
|
|
96
|
-
--no-location Do not follow redirects
|
|
97
|
-
--max-redirs <NUM> Maximum number of redirects (default: 20)
|
|
98
|
-
-m, --max-time <SECONDS> Maximum request time in seconds
|
|
99
|
-
--http1.1 Force HTTP/1.1
|
|
100
|
-
--http2 Force HTTP/2
|
|
101
|
-
|
|
102
|
-
COOKIES:
|
|
103
|
-
-b, --cookie <DATA> Send cookies (name=value pairs)
|
|
104
|
-
-c, --cookie-jar <FILE> Write received cookies to file
|
|
105
|
-
|
|
106
|
-
META:
|
|
107
|
-
-h, --help Show this help message
|
|
108
|
-
-V, --version Show version
|
|
109
|
-
|
|
110
|
-
EXAMPLES:
|
|
111
|
-
nlcurl https://httpbin.org/get
|
|
112
|
-
nlcurl --impersonate chrome136 https://tls.browserleaks.com/json
|
|
113
|
-
nlcurl --stealth --impersonate firefox138 https://example.com
|
|
114
|
-
nlcurl -X POST -d '{"key":"value"}' -H "Content-Type: application/json" https://api.example.com
|
|
66
|
+
return `nlcurl -- HTTP client with browser fingerprint impersonation
|
|
67
|
+
|
|
68
|
+
USAGE:
|
|
69
|
+
nlcurl [OPTIONS] <URL>
|
|
70
|
+
|
|
71
|
+
OPTIONS:
|
|
72
|
+
-X, --request <METHOD> HTTP method (GET, POST, PUT, DELETE, etc.)
|
|
73
|
+
-H, --header <HEADER> Add a request header (Name: Value)
|
|
74
|
+
-d, --data <DATA> Request body (sets method to POST if not specified)
|
|
75
|
+
--data-raw <DATA> Request body without special character processing
|
|
76
|
+
-A, --user-agent <AGENT> Set the User-Agent header
|
|
77
|
+
-o, --output <FILE> Write response body to file
|
|
78
|
+
-I, --head Send HEAD request, show headers only
|
|
79
|
+
-i, --include Include response headers in output
|
|
80
|
+
-v, --verbose Verbose output (request and response details)
|
|
81
|
+
-s, --silent Suppress progress and error messages
|
|
82
|
+
--compressed Request compressed response
|
|
83
|
+
|
|
84
|
+
IMPERSONATION:
|
|
85
|
+
--impersonate <PROFILE> Browser profile (e.g. chrome136, firefox138)
|
|
86
|
+
--stealth Use stealth TLS engine for full fingerprint control
|
|
87
|
+
--ja3 <FINGERPRINT> Custom JA3 fingerprint string
|
|
88
|
+
--akamai <FINGERPRINT> Custom Akamai HTTP/2 fingerprint string
|
|
89
|
+
--list-profiles List all available browser profiles
|
|
90
|
+
|
|
91
|
+
CONNECTION:
|
|
92
|
+
-x, --proxy <URL> Proxy URL (http, socks4, socks5)
|
|
93
|
+
-U, --proxy-user <USER:PASS> Proxy authentication
|
|
94
|
+
-k, --insecure Skip TLS certificate verification
|
|
95
|
+
-L, --location Follow redirects (default)
|
|
96
|
+
--no-location Do not follow redirects
|
|
97
|
+
--max-redirs <NUM> Maximum number of redirects (default: 20)
|
|
98
|
+
-m, --max-time <SECONDS> Maximum request time in seconds
|
|
99
|
+
--http1.1 Force HTTP/1.1
|
|
100
|
+
--http2 Force HTTP/2
|
|
101
|
+
|
|
102
|
+
COOKIES:
|
|
103
|
+
-b, --cookie <DATA> Send cookies (name=value pairs)
|
|
104
|
+
-c, --cookie-jar <FILE> Write received cookies to file
|
|
105
|
+
|
|
106
|
+
META:
|
|
107
|
+
-h, --help Show this help message
|
|
108
|
+
-V, --version Show version
|
|
109
|
+
|
|
110
|
+
EXAMPLES:
|
|
111
|
+
nlcurl https://httpbin.org/get
|
|
112
|
+
nlcurl --impersonate chrome136 https://tls.browserleaks.com/json
|
|
113
|
+
nlcurl --stealth --impersonate firefox138 https://example.com
|
|
114
|
+
nlcurl -X POST -d '{"key":"value"}' -H "Content-Type: application/json" https://api.example.com
|
|
115
115
|
nlcurl -x socks5://127.0.0.1:1080 --impersonate chrome https://ifconfig.me`;
|
|
116
116
|
}
|
|
117
117
|
//# sourceMappingURL=output.js.map
|
package/dist/cli/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,QAAwB,EAAE,IAAgB;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAwB;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,QAAQ,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAErF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,GAAW,EAAE,OAA+B;IAC/F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAErC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+EAiDsE,CAAC;AAChF,CAAC"}
|
package/dist/cookies/jar.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jar.d.ts","sourceRoot":"","sources":["../../src/cookies/jar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jar.d.ts","sourceRoot":"","sources":["../../src/cookies/jar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAK5E;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAgB;IAE/B;;;;;;;;OAQG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;IAWxG;;;;;;;;OAQG;IACH,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;IAajC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;;OAKG;IACH,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC;IAI5B;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACH,gBAAgB,IAAI,MAAM;IAkB1B;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAyBzC,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,sBAAsB;CAY/B"}
|
package/dist/cookies/jar.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseSetCookie, serializeCookies } from
|
|
1
|
+
import { parseSetCookie, serializeCookies } from "./parser.js";
|
|
2
2
|
const MAX_COOKIES = 3000;
|
|
3
3
|
const MAX_COOKIES_PER_DOMAIN = 50;
|
|
4
4
|
/**
|
|
@@ -39,7 +39,7 @@ export class CookieJar {
|
|
|
39
39
|
const now = Date.now();
|
|
40
40
|
const matching = this.cookies.filter((c) => this.matches(c, url, now));
|
|
41
41
|
if (matching.length === 0)
|
|
42
|
-
return
|
|
42
|
+
return "";
|
|
43
43
|
matching.sort((a, b) => {
|
|
44
44
|
if (a.path.length !== b.path.length)
|
|
45
45
|
return b.path.length - a.path.length;
|
|
@@ -85,13 +85,13 @@ export class CookieJar {
|
|
|
85
85
|
* @returns {string} Netscape-format cookie file content (newline-terminated).
|
|
86
86
|
*/
|
|
87
87
|
toNetscapeString() {
|
|
88
|
-
const lines = [
|
|
88
|
+
const lines = ["# Netscape HTTP Cookie File"];
|
|
89
89
|
for (const c of this.cookies) {
|
|
90
|
-
const domain = c.domain.startsWith(
|
|
91
|
-
const includeSubdomains = domain.startsWith(
|
|
92
|
-
const path = c.path ||
|
|
93
|
-
const secure = c.secure ?
|
|
94
|
-
let expires =
|
|
90
|
+
const domain = c.domain.startsWith(".") ? c.domain : "." + c.domain;
|
|
91
|
+
const includeSubdomains = domain.startsWith(".") ? "TRUE" : "FALSE";
|
|
92
|
+
const path = c.path || "/";
|
|
93
|
+
const secure = c.secure ? "TRUE" : "FALSE";
|
|
94
|
+
let expires = "0";
|
|
95
95
|
if (c.maxAge !== undefined) {
|
|
96
96
|
expires = String(Math.floor((c.createdAt + c.maxAge * 1000) / 1000));
|
|
97
97
|
}
|
|
@@ -100,7 +100,7 @@ export class CookieJar {
|
|
|
100
100
|
}
|
|
101
101
|
lines.push(`${domain}\t${includeSubdomains}\t${path}\t${secure}\t${expires}\t${c.name}\t${c.value}`);
|
|
102
102
|
}
|
|
103
|
-
return lines.join(
|
|
103
|
+
return lines.join("\n") + "\n";
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
106
|
* Imports cookies from a Netscape cookie file string. Lines beginning with
|
|
@@ -110,20 +110,20 @@ export class CookieJar {
|
|
|
110
110
|
* @param {string} content - Netscape cookie file content.
|
|
111
111
|
*/
|
|
112
112
|
loadNetscapeString(content) {
|
|
113
|
-
for (const line of content.split(
|
|
113
|
+
for (const line of content.split("\n")) {
|
|
114
114
|
const trimmed = line.trim();
|
|
115
|
-
if (!trimmed || trimmed.startsWith(
|
|
115
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
116
116
|
continue;
|
|
117
|
-
const parts = trimmed.split(
|
|
117
|
+
const parts = trimmed.split("\t");
|
|
118
118
|
if (parts.length < 7)
|
|
119
119
|
continue;
|
|
120
120
|
const [domain, , path, secure, expires, name, value] = parts;
|
|
121
121
|
const cookie = {
|
|
122
122
|
name: name,
|
|
123
123
|
value: value,
|
|
124
|
-
domain: domain.startsWith(
|
|
124
|
+
domain: domain.startsWith(".") ? domain.slice(1) : domain,
|
|
125
125
|
path: path,
|
|
126
|
-
secure: secure ===
|
|
126
|
+
secure: secure === "TRUE",
|
|
127
127
|
httpOnly: false,
|
|
128
128
|
sameSite: undefined,
|
|
129
129
|
createdAt: Date.now(),
|
|
@@ -169,35 +169,33 @@ export class CookieJar {
|
|
|
169
169
|
return false;
|
|
170
170
|
if (!this.pathMatches(url.pathname, cookie.path))
|
|
171
171
|
return false;
|
|
172
|
-
if (cookie.secure && url.protocol !==
|
|
172
|
+
if (cookie.secure && url.protocol !== "https:")
|
|
173
173
|
return false;
|
|
174
174
|
return true;
|
|
175
175
|
}
|
|
176
176
|
domainMatches(host, domain) {
|
|
177
177
|
if (host === domain)
|
|
178
178
|
return true;
|
|
179
|
-
return host.endsWith(
|
|
179
|
+
return host.endsWith("." + domain);
|
|
180
180
|
}
|
|
181
181
|
pathMatches(requestPath, cookiePath) {
|
|
182
182
|
if (requestPath === cookiePath)
|
|
183
183
|
return true;
|
|
184
184
|
if (requestPath.startsWith(cookiePath)) {
|
|
185
|
-
if (cookiePath.endsWith(
|
|
185
|
+
if (cookiePath.endsWith("/"))
|
|
186
186
|
return true;
|
|
187
|
-
if (requestPath[cookiePath.length] ===
|
|
187
|
+
if (requestPath[cookiePath.length] === "/")
|
|
188
188
|
return true;
|
|
189
189
|
}
|
|
190
190
|
return false;
|
|
191
191
|
}
|
|
192
192
|
extractSetCookieValues(headers, rawHeaders) {
|
|
193
193
|
if (rawHeaders) {
|
|
194
|
-
return rawHeaders
|
|
195
|
-
.filter(([k]) => k.toLowerCase() === 'set-cookie')
|
|
196
|
-
.map(([, v]) => v);
|
|
194
|
+
return rawHeaders.filter(([k]) => k.toLowerCase() === "set-cookie").map(([, v]) => v);
|
|
197
195
|
}
|
|
198
196
|
const values = [];
|
|
199
197
|
for (const [key, value] of Object.entries(headers)) {
|
|
200
|
-
if (key.toLowerCase() ===
|
|
198
|
+
if (key.toLowerCase() === "set-cookie") {
|
|
201
199
|
values.push(value);
|
|
202
200
|
}
|
|
203
201
|
}
|
package/dist/cookies/jar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jar.js","sourceRoot":"","sources":["../../src/cookies/jar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jar.js","sourceRoot":"","sources":["../../src/cookies/jar.ts"],"names":[],"mappings":"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"}
|
package/dist/cookies/parser.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cookies/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cookies/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAsE7E;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAE1D"}
|
package/dist/cookies/parser.js
CHANGED
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
* the domain attribute fails validation against the request origin.
|
|
10
10
|
*/
|
|
11
11
|
export function parseSetCookie(header, requestUrl) {
|
|
12
|
-
const parts = header.split(
|
|
12
|
+
const parts = header.split(";").map((s) => s.trim());
|
|
13
13
|
if (parts.length === 0)
|
|
14
14
|
return null;
|
|
15
15
|
const nameValue = parts[0];
|
|
16
|
-
const eqIdx = nameValue.indexOf(
|
|
16
|
+
const eqIdx = nameValue.indexOf("=");
|
|
17
17
|
if (eqIdx < 0)
|
|
18
18
|
return null;
|
|
19
19
|
const name = nameValue.substring(0, eqIdx).trim();
|
|
@@ -31,47 +31,45 @@ export function parseSetCookie(header, requestUrl) {
|
|
|
31
31
|
};
|
|
32
32
|
for (let i = 1; i < parts.length; i++) {
|
|
33
33
|
const attr = parts[i];
|
|
34
|
-
const attrEq = attr.indexOf(
|
|
35
|
-
const attrName = (attrEq >= 0 ? attr.substring(0, attrEq) : attr)
|
|
36
|
-
|
|
37
|
-
.toLowerCase();
|
|
38
|
-
const attrValue = attrEq >= 0 ? attr.substring(attrEq + 1).trim() : '';
|
|
34
|
+
const attrEq = attr.indexOf("=");
|
|
35
|
+
const attrName = (attrEq >= 0 ? attr.substring(0, attrEq) : attr).trim().toLowerCase();
|
|
36
|
+
const attrValue = attrEq >= 0 ? attr.substring(attrEq + 1).trim() : "";
|
|
39
37
|
switch (attrName) {
|
|
40
|
-
case
|
|
38
|
+
case "domain": {
|
|
41
39
|
let d = attrValue.toLowerCase();
|
|
42
|
-
if (d.startsWith(
|
|
40
|
+
if (d.startsWith("."))
|
|
43
41
|
d = d.substring(1);
|
|
44
42
|
const host = requestUrl.hostname.toLowerCase();
|
|
45
|
-
if (d !== host && !host.endsWith(
|
|
43
|
+
if (d !== host && !host.endsWith("." + d)) {
|
|
46
44
|
return null;
|
|
47
45
|
}
|
|
48
46
|
cookie.domain = d;
|
|
49
47
|
break;
|
|
50
48
|
}
|
|
51
|
-
case
|
|
52
|
-
cookie.path = attrValue ||
|
|
49
|
+
case "path":
|
|
50
|
+
cookie.path = attrValue || "/";
|
|
53
51
|
break;
|
|
54
|
-
case
|
|
52
|
+
case "expires": {
|
|
55
53
|
const date = new Date(attrValue);
|
|
56
54
|
if (!Number.isNaN(date.getTime())) {
|
|
57
55
|
cookie.expires = date;
|
|
58
56
|
}
|
|
59
57
|
break;
|
|
60
58
|
}
|
|
61
|
-
case
|
|
59
|
+
case "max-age": {
|
|
62
60
|
const secs = parseInt(attrValue, 10);
|
|
63
61
|
if (!Number.isNaN(secs)) {
|
|
64
62
|
cookie.maxAge = secs;
|
|
65
63
|
}
|
|
66
64
|
break;
|
|
67
65
|
}
|
|
68
|
-
case
|
|
66
|
+
case "secure":
|
|
69
67
|
cookie.secure = true;
|
|
70
68
|
break;
|
|
71
|
-
case
|
|
69
|
+
case "httponly":
|
|
72
70
|
cookie.httpOnly = true;
|
|
73
71
|
break;
|
|
74
|
-
case
|
|
72
|
+
case "samesite":
|
|
75
73
|
cookie.sameSite = attrValue.toLowerCase();
|
|
76
74
|
break;
|
|
77
75
|
}
|
|
@@ -79,11 +77,11 @@ export function parseSetCookie(header, requestUrl) {
|
|
|
79
77
|
return cookie;
|
|
80
78
|
}
|
|
81
79
|
function defaultPath(path) {
|
|
82
|
-
if (!path || !path.startsWith(
|
|
83
|
-
return
|
|
84
|
-
const lastSlash = path.lastIndexOf(
|
|
80
|
+
if (!path || !path.startsWith("/"))
|
|
81
|
+
return "/";
|
|
82
|
+
const lastSlash = path.lastIndexOf("/");
|
|
85
83
|
if (lastSlash === 0)
|
|
86
|
-
return
|
|
84
|
+
return "/";
|
|
87
85
|
return path.substring(0, lastSlash);
|
|
88
86
|
}
|
|
89
87
|
/**
|
|
@@ -93,6 +91,6 @@ function defaultPath(path) {
|
|
|
93
91
|
* @returns {string} Semicolon-separated `name=value` string suitable for the `Cookie` header.
|
|
94
92
|
*/
|
|
95
93
|
export function serializeCookies(cookies) {
|
|
96
|
-
return cookies.map((c) => `${c.name}=${c.value}`).join(
|
|
94
|
+
return cookies.map((c) => `${c.name}=${c.value}`).join("; ");
|
|
97
95
|
}
|
|
98
96
|
//# sourceMappingURL=parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cookies/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cookies/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/core/client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { NLcURLRequest, NLcURLSessionConfig, RequestBody } from
|
|
2
|
-
import { NLcURLResponse } from
|
|
3
|
-
import { NLcURLSession, type RequestOptions } from
|
|
1
|
+
import type { NLcURLRequest, NLcURLSessionConfig, RequestBody } from "./request.js";
|
|
2
|
+
import { NLcURLResponse } from "./response.js";
|
|
3
|
+
import { NLcURLSession, type RequestOptions } from "./session.js";
|
|
4
4
|
/**
|
|
5
5
|
* Creates a new {@link NLcURLSession} with the given configuration. Use a
|
|
6
6
|
* session when you need to share cookies, connection pools, or interceptors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,aAAa,CAEzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAoB3E;AAED;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAEnH;AAED;;;;;;;GAOG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAExI;AAED;;;;;;;GAOG;AACH,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAEvI;AAED;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAEzI;AAED;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAEnH;AAED;;;;;;GAMG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAEpH"}
|
package/dist/core/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NLcURLSession } from
|
|
1
|
+
import { NLcURLSession } from "./session.js";
|
|
2
2
|
/**
|
|
3
3
|
* Creates a new {@link NLcURLSession} with the given configuration. Use a
|
|
4
4
|
* session when you need to share cookies, connection pools, or interceptors
|
|
@@ -40,7 +40,7 @@ export async function request(input) {
|
|
|
40
40
|
throw err;
|
|
41
41
|
}
|
|
42
42
|
const cleanup = () => session.close();
|
|
43
|
-
response.body?.once(
|
|
43
|
+
response.body?.once("close", cleanup);
|
|
44
44
|
if (response.body === null)
|
|
45
45
|
session.close();
|
|
46
46
|
return response;
|
|
@@ -60,7 +60,7 @@ export async function request(input) {
|
|
|
60
60
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
61
61
|
*/
|
|
62
62
|
export async function get(url, options) {
|
|
63
|
-
return request({ ...options, url, method:
|
|
63
|
+
return request({ ...options, url, method: "GET" });
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
66
|
* Issues a one-shot `POST` request.
|
|
@@ -71,7 +71,7 @@ export async function get(url, options) {
|
|
|
71
71
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
72
72
|
*/
|
|
73
73
|
export async function post(url, body, options) {
|
|
74
|
-
return request({ ...options, url, method:
|
|
74
|
+
return request({ ...options, url, method: "POST", body });
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
77
|
* Issues a one-shot `PUT` request.
|
|
@@ -82,7 +82,7 @@ export async function post(url, body, options) {
|
|
|
82
82
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
83
83
|
*/
|
|
84
84
|
export async function put(url, body, options) {
|
|
85
|
-
return request({ ...options, url, method:
|
|
85
|
+
return request({ ...options, url, method: "PUT", body });
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
88
88
|
* Issues a one-shot `PATCH` request.
|
|
@@ -93,7 +93,7 @@ export async function put(url, body, options) {
|
|
|
93
93
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
94
94
|
*/
|
|
95
95
|
export async function patch(url, body, options) {
|
|
96
|
-
return request({ ...options, url, method:
|
|
96
|
+
return request({ ...options, url, method: "PATCH", body });
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
99
|
* Issues a one-shot `DELETE` request.
|
|
@@ -103,7 +103,7 @@ export async function patch(url, body, options) {
|
|
|
103
103
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
104
104
|
*/
|
|
105
105
|
export async function del(url, options) {
|
|
106
|
-
return request({ ...options, url, method:
|
|
106
|
+
return request({ ...options, url, method: "DELETE" });
|
|
107
107
|
}
|
|
108
108
|
/**
|
|
109
109
|
* Issues a one-shot `HEAD` request. The response body will be empty.
|
|
@@ -113,7 +113,7 @@ export async function del(url, options) {
|
|
|
113
113
|
* @returns {Promise<NLcURLResponse>} Resolves with the response (headers only, no body).
|
|
114
114
|
*/
|
|
115
115
|
export async function head(url, options) {
|
|
116
|
-
return request({ ...options, url, method:
|
|
116
|
+
return request({ ...options, url, method: "HEAD" });
|
|
117
117
|
}
|
|
118
118
|
function extractSessionConfig(req) {
|
|
119
119
|
return {
|
|
@@ -128,6 +128,7 @@ function extractSessionConfig(req) {
|
|
|
128
128
|
timeout: req.timeout,
|
|
129
129
|
acceptEncoding: req.acceptEncoding,
|
|
130
130
|
cookieJar: req.cookieJar,
|
|
131
|
+
logger: req.logger,
|
|
131
132
|
};
|
|
132
133
|
}
|
|
133
134
|
//# sourceMappingURL=client.js.map
|
package/dist/core/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
|