nlcurl 0.7.0 → 0.9.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 +149 -140
- package/dist/cache/groups.d.ts +75 -0
- package/dist/cache/groups.d.ts.map +1 -0
- package/dist/cache/groups.js +118 -0
- package/dist/cache/groups.js.map +1 -0
- package/dist/cache/no-vary-search.d.ts +33 -0
- package/dist/cache/no-vary-search.d.ts.map +1 -0
- package/dist/cache/no-vary-search.js +148 -0
- package/dist/cache/no-vary-search.js.map +1 -0
- package/dist/cache/range.d.ts +120 -0
- package/dist/cache/range.d.ts.map +1 -0
- package/dist/cache/range.js +193 -0
- package/dist/cache/range.js.map +1 -0
- package/dist/cache/store.d.ts +75 -37
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +217 -85
- package/dist/cache/store.js.map +1 -1
- package/dist/cache/types.d.ts +10 -39
- package/dist/cache/types.d.ts.map +1 -1
- package/dist/cli/args.d.ts +4 -37
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -4
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.d.ts +0 -5
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +14 -20
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +14 -20
- package/dist/cli/output.js.map +1 -1
- package/dist/cookies/jar.d.ts +41 -40
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +65 -42
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +13 -17
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +23 -15
- package/dist/cookies/parser.js.map +1 -1
- package/dist/cookies/psl-data.d.ts +1 -1
- package/dist/cookies/psl-data.js +1 -1
- package/dist/cookies/public-suffix.d.ts +5 -27
- package/dist/cookies/public-suffix.d.ts.map +1 -1
- package/dist/cookies/public-suffix.js +5 -37
- package/dist/cookies/public-suffix.js.map +1 -1
- package/dist/core/auth.d.ts +61 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +159 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/client.d.ts +28 -40
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +31 -41
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +64 -88
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +64 -88
- package/dist/core/errors.js.map +1 -1
- package/dist/core/request.d.ts +33 -113
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +49 -66
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +45 -59
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +66 -78
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +136 -77
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +58 -43
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +141 -56
- package/dist/core/validation.js.map +1 -1
- package/dist/dns/cache.d.ts +65 -0
- package/dist/dns/cache.d.ts.map +1 -0
- package/dist/dns/cache.js +119 -0
- package/dist/dns/cache.js.map +1 -0
- package/dist/dns/codec.d.ts +29 -19
- package/dist/dns/codec.d.ts.map +1 -1
- package/dist/dns/codec.js +73 -39
- package/dist/dns/codec.js.map +1 -1
- package/dist/dns/doh-resolver.d.ts +17 -31
- package/dist/dns/doh-resolver.d.ts.map +1 -1
- package/dist/dns/doh-resolver.js +47 -48
- package/dist/dns/doh-resolver.js.map +1 -1
- package/dist/dns/dot-resolver.d.ts +89 -0
- package/dist/dns/dot-resolver.d.ts.map +1 -0
- package/dist/dns/dot-resolver.js +166 -0
- package/dist/dns/dot-resolver.js.map +1 -0
- package/dist/dns/https-rr.d.ts +19 -30
- package/dist/dns/https-rr.d.ts.map +1 -1
- package/dist/dns/https-rr.js +22 -40
- package/dist/dns/https-rr.js.map +1 -1
- package/dist/dns/types.d.ts +31 -59
- package/dist/dns/types.d.ts.map +1 -1
- package/dist/dns/types.js +3 -14
- package/dist/dns/types.js.map +1 -1
- package/dist/fingerprints/akamai.d.ts +3 -11
- package/dist/fingerprints/akamai.d.ts.map +1 -1
- package/dist/fingerprints/akamai.js +3 -11
- package/dist/fingerprints/akamai.js.map +1 -1
- package/dist/fingerprints/database.d.ts +6 -14
- package/dist/fingerprints/database.d.ts.map +1 -1
- package/dist/fingerprints/database.js +6 -14
- package/dist/fingerprints/database.js.map +1 -1
- package/dist/fingerprints/extensions.d.ts +56 -71
- package/dist/fingerprints/extensions.d.ts.map +1 -1
- package/dist/fingerprints/extensions.js +58 -71
- package/dist/fingerprints/extensions.js.map +1 -1
- package/dist/fingerprints/ja3.d.ts +12 -30
- package/dist/fingerprints/ja3.d.ts.map +1 -1
- package/dist/fingerprints/ja3.js +12 -30
- package/dist/fingerprints/ja3.js.map +1 -1
- package/dist/fingerprints/ja4.d.ts +18 -0
- package/dist/fingerprints/ja4.d.ts.map +1 -0
- package/dist/fingerprints/ja4.js +81 -0
- package/dist/fingerprints/ja4.js.map +1 -0
- package/dist/fingerprints/profiles/chrome.d.ts +18 -21
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
- package/dist/fingerprints/profiles/chrome.js +35 -31
- package/dist/fingerprints/profiles/chrome.js.map +1 -1
- package/dist/fingerprints/profiles/edge.d.ts +7 -10
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
- package/dist/fingerprints/profiles/edge.js +7 -10
- package/dist/fingerprints/profiles/edge.js.map +1 -1
- package/dist/fingerprints/profiles/firefox.d.ts +8 -11
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
- package/dist/fingerprints/profiles/firefox.js +8 -11
- package/dist/fingerprints/profiles/firefox.js.map +1 -1
- package/dist/fingerprints/profiles/safari.d.ts +11 -14
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
- package/dist/fingerprints/profiles/safari.js +11 -14
- package/dist/fingerprints/profiles/safari.js.map +1 -1
- package/dist/fingerprints/profiles/tor.d.ts +5 -8
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
- package/dist/fingerprints/profiles/tor.js +5 -8
- package/dist/fingerprints/profiles/tor.js.map +1 -1
- package/dist/fingerprints/types.d.ts +42 -73
- package/dist/fingerprints/types.d.ts.map +1 -1
- package/dist/hsts/store.d.ts +19 -21
- package/dist/hsts/store.d.ts.map +1 -1
- package/dist/hsts/store.js +20 -28
- package/dist/hsts/store.js.map +1 -1
- package/dist/hsts/types.d.ts +10 -14
- package/dist/hsts/types.d.ts.map +1 -1
- package/dist/http/alt-svc.d.ts +27 -52
- package/dist/http/alt-svc.d.ts.map +1 -1
- package/dist/http/alt-svc.js +17 -67
- package/dist/http/alt-svc.js.map +1 -1
- package/dist/http/early-hints.d.ts +23 -0
- package/dist/http/early-hints.d.ts.map +1 -0
- package/dist/http/early-hints.js +33 -0
- package/dist/http/early-hints.js.map +1 -0
- package/dist/http/form-data.d.ts +17 -35
- package/dist/http/form-data.d.ts.map +1 -1
- package/dist/http/form-data.js +12 -34
- package/dist/http/form-data.js.map +1 -1
- package/dist/http/h1/client.d.ts +14 -26
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +14 -23
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +21 -17
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +56 -20
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +23 -59
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +61 -55
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +23 -59
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +107 -64
- package/dist/http/h2/client.js.map +1 -1
- package/dist/http/h2/frames.d.ts +53 -84
- package/dist/http/h2/frames.d.ts.map +1 -1
- package/dist/http/h2/frames.js +48 -76
- package/dist/http/h2/frames.js.map +1 -1
- package/dist/http/h2/hpack.d.ts +20 -36
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +41 -36
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/negotiator.d.ts +25 -38
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +17 -38
- package/dist/http/negotiator.js.map +1 -1
- package/dist/http/pool.d.ts +34 -64
- package/dist/http/pool.d.ts.map +1 -1
- package/dist/http/pool.js +22 -41
- package/dist/http/pool.js.map +1 -1
- package/dist/http/resumable-upload.d.ts +76 -0
- package/dist/http/resumable-upload.d.ts.map +1 -0
- package/dist/http/resumable-upload.js +104 -0
- package/dist/http/resumable-upload.js.map +1 -0
- package/dist/http/trailers.d.ts +29 -0
- package/dist/http/trailers.d.ts.map +1 -0
- package/dist/http/trailers.js +57 -0
- package/dist/http/trailers.js.map +1 -0
- package/dist/index.d.ts +24 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/middleware/circuit-breaker.d.ts +44 -0
- package/dist/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/middleware/circuit-breaker.js +96 -0
- package/dist/middleware/circuit-breaker.js.map +1 -0
- package/dist/middleware/interceptor.d.ts +13 -32
- package/dist/middleware/interceptor.d.ts.map +1 -1
- package/dist/middleware/interceptor.js +11 -16
- package/dist/middleware/interceptor.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts +8 -17
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +11 -12
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/middleware/retry-after.d.ts +15 -0
- package/dist/middleware/retry-after.d.ts.map +1 -0
- package/dist/middleware/retry-after.js +36 -0
- package/dist/middleware/retry-after.js.map +1 -0
- package/dist/middleware/retry.d.ts +9 -18
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +12 -9
- package/dist/middleware/retry.js.map +1 -1
- package/dist/proxy/auth.d.ts +73 -0
- package/dist/proxy/auth.d.ts.map +1 -0
- package/dist/proxy/auth.js +129 -0
- package/dist/proxy/auth.js.map +1 -0
- package/dist/proxy/env-proxy.d.ts +5 -15
- package/dist/proxy/env-proxy.d.ts.map +1 -1
- package/dist/proxy/env-proxy.js +5 -23
- package/dist/proxy/env-proxy.js.map +1 -1
- package/dist/proxy/http-proxy.d.ts +12 -19
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +5 -8
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.d.ts +13 -20
- package/dist/proxy/socks.d.ts.map +1 -1
- package/dist/proxy/socks.js +8 -10
- package/dist/proxy/socks.js.map +1 -1
- package/dist/sse/parser.d.ts +16 -37
- package/dist/sse/parser.d.ts.map +1 -1
- package/dist/sse/parser.js +31 -28
- package/dist/sse/parser.js.map +1 -1
- package/dist/tls/constants.d.ts +21 -72
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +21 -72
- package/dist/tls/constants.js.map +1 -1
- package/dist/tls/ct.d.ts +78 -0
- package/dist/tls/ct.d.ts.map +1 -0
- package/dist/tls/ct.js +175 -0
- package/dist/tls/ct.js.map +1 -0
- package/dist/tls/early-data.d.ts +45 -0
- package/dist/tls/early-data.d.ts.map +1 -0
- package/dist/tls/early-data.js +46 -0
- package/dist/tls/early-data.js.map +1 -0
- package/dist/tls/ech.d.ts +68 -85
- package/dist/tls/ech.d.ts.map +1 -1
- package/dist/tls/ech.js +54 -102
- package/dist/tls/ech.js.map +1 -1
- package/dist/tls/keylog.d.ts +34 -0
- package/dist/tls/keylog.d.ts.map +1 -0
- package/dist/tls/keylog.js +64 -0
- package/dist/tls/keylog.js.map +1 -0
- package/dist/tls/node-engine.d.ts +10 -17
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +41 -18
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/ocsp.d.ts +55 -0
- package/dist/tls/ocsp.d.ts.map +1 -0
- package/dist/tls/ocsp.js +131 -0
- package/dist/tls/ocsp.js.map +1 -0
- package/dist/tls/pin-verification.d.ts +5 -4
- package/dist/tls/pin-verification.d.ts.map +1 -1
- package/dist/tls/pin-verification.js +5 -11
- package/dist/tls/pin-verification.js.map +1 -1
- package/dist/tls/session-cache.d.ts +27 -39
- package/dist/tls/session-cache.d.ts.map +1 -1
- package/dist/tls/session-cache.js +20 -24
- package/dist/tls/session-cache.js.map +1 -1
- package/dist/tls/stealth/client-hello.d.ts +26 -45
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +15 -31
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +10 -15
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +98 -18
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +32 -31
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +74 -47
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +81 -86
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +70 -58
- package/dist/tls/stealth/key-schedule.js.map +1 -1
- package/dist/tls/stealth/record-layer.d.ts +52 -75
- package/dist/tls/stealth/record-layer.d.ts.map +1 -1
- package/dist/tls/stealth/record-layer.js +47 -63
- package/dist/tls/stealth/record-layer.js.map +1 -1
- package/dist/tls/stealth/tls12-handshake.d.ts +16 -0
- package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -1
- package/dist/tls/stealth/tls12-handshake.js +10 -2
- package/dist/tls/stealth/tls12-handshake.js.map +1 -1
- package/dist/tls/types.d.ts +46 -60
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/utils/buffer-reader.d.ts +26 -81
- package/dist/utils/buffer-reader.d.ts.map +1 -1
- package/dist/utils/buffer-reader.js +26 -81
- package/dist/utils/buffer-reader.js.map +1 -1
- package/dist/utils/buffer-writer.d.ts +30 -66
- package/dist/utils/buffer-writer.d.ts.map +1 -1
- package/dist/utils/buffer-writer.js +30 -66
- package/dist/utils/buffer-writer.js.map +1 -1
- package/dist/utils/compression.d.ts +18 -0
- package/dist/utils/compression.d.ts.map +1 -0
- package/dist/utils/compression.js +34 -0
- package/dist/utils/compression.js.map +1 -0
- package/dist/utils/dictionary-transport.d.ts +97 -0
- package/dist/utils/dictionary-transport.d.ts.map +1 -0
- package/dist/utils/dictionary-transport.js +171 -0
- package/dist/utils/dictionary-transport.js.map +1 -0
- package/dist/utils/encoding.d.ts +12 -30
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +15 -46
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +18 -8
- package/dist/utils/happy-eyeballs.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.js +19 -27
- package/dist/utils/happy-eyeballs.js.map +1 -1
- package/dist/utils/logger.d.ts +54 -81
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +92 -64
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/tcp-fast-open.d.ts +30 -0
- package/dist/utils/tcp-fast-open.d.ts.map +1 -0
- package/dist/utils/tcp-fast-open.js +36 -0
- package/dist/utils/tcp-fast-open.js.map +1 -0
- package/dist/utils/url.d.ts +18 -25
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +18 -25
- package/dist/utils/url.js.map +1 -1
- package/dist/ws/client.d.ts +35 -53
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +96 -38
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +24 -41
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +26 -33
- package/dist/ws/frame.js.map +1 -1
- package/dist/ws/permessage-deflate.d.ts +23 -28
- package/dist/ws/permessage-deflate.d.ts.map +1 -1
- package/dist/ws/permessage-deflate.js +18 -26
- package/dist/ws/permessage-deflate.js.map +1 -1
- package/package.json +2 -2
- package/dist/http/h3/detection.d.ts +0 -17
- package/dist/http/h3/detection.d.ts.map +0 -1
- package/dist/http/h3/detection.js +0 -59
- package/dist/http/h3/detection.js.map +0 -1
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { createHash, createHmac, randomBytes } from "node:crypto";
|
|
2
|
+
const digestNonceCounters = new Map();
|
|
3
|
+
/**
|
|
4
|
+
* Builds an HTTP Authorization header value from the given auth configuration.
|
|
5
|
+
*
|
|
6
|
+
* @param {AuthConfig} auth - The authentication configuration.
|
|
7
|
+
* @param {Object} [context] - Additional context for stateful schemes.
|
|
8
|
+
* @param {string} [context.method] - HTTP method for Digest/SigV4.
|
|
9
|
+
* @param {string} [context.url] - Request URL for Digest/SigV4.
|
|
10
|
+
* @param {string} [context.wwwAuthenticate] - WWW-Authenticate header for Digest.
|
|
11
|
+
* @param {Record<string, string>} [context.headers] - Request headers for SigV4.
|
|
12
|
+
* @param {Buffer} [context.body] - Request body for SigV4.
|
|
13
|
+
* @returns {string|undefined} The formatted Authorization header value, or `undefined` if credentials are incomplete.
|
|
14
|
+
*/
|
|
15
|
+
export function buildAuthHeader(auth, context) {
|
|
16
|
+
switch (auth.type) {
|
|
17
|
+
case "basic": {
|
|
18
|
+
if (!auth.username)
|
|
19
|
+
return undefined;
|
|
20
|
+
const credentials = `${auth.username}:${auth.password ?? ""}`;
|
|
21
|
+
return `Basic ${Buffer.from(credentials, "utf-8").toString("base64")}`;
|
|
22
|
+
}
|
|
23
|
+
case "bearer": {
|
|
24
|
+
if (!auth.token)
|
|
25
|
+
return undefined;
|
|
26
|
+
return `Bearer ${auth.token}`;
|
|
27
|
+
}
|
|
28
|
+
case "digest": {
|
|
29
|
+
if (!auth.username || !context?.wwwAuthenticate || !context?.method || !context?.url)
|
|
30
|
+
return undefined;
|
|
31
|
+
const challenge = parseDigestChallenge(context.wwwAuthenticate);
|
|
32
|
+
if (!challenge)
|
|
33
|
+
return undefined;
|
|
34
|
+
return buildDigestAuthHeader(context.method, context.url, auth.username, auth.password ?? "", challenge);
|
|
35
|
+
}
|
|
36
|
+
case "aws-sigv4": {
|
|
37
|
+
if (!auth.awsAccessKeyId || !auth.awsSecretKey || !auth.awsRegion || !auth.awsService || !context?.method || !context?.url)
|
|
38
|
+
return undefined;
|
|
39
|
+
return buildAWSSigV4(context.method, context.url, context.headers ?? {}, context.body ?? Buffer.alloc(0), auth.awsAccessKeyId, auth.awsSecretKey, auth.awsRegion, auth.awsService, auth.awsSessionToken);
|
|
40
|
+
}
|
|
41
|
+
default:
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parse a Digest challenge from WWW-Authenticate header.
|
|
47
|
+
*/
|
|
48
|
+
function parseDigestChallenge(header) {
|
|
49
|
+
const lower = header.toLowerCase().trim();
|
|
50
|
+
if (!lower.startsWith("digest "))
|
|
51
|
+
return null;
|
|
52
|
+
const challenge = header.substring(7);
|
|
53
|
+
const params = {};
|
|
54
|
+
const regex = /(\w+)=(?:"([^"]*)"|([\w.]+))/g;
|
|
55
|
+
let match;
|
|
56
|
+
while ((match = regex.exec(challenge)) !== null) {
|
|
57
|
+
params[match[1].toLowerCase()] = match[2] ?? match[3] ?? "";
|
|
58
|
+
}
|
|
59
|
+
if (!params["realm"] || !params["nonce"])
|
|
60
|
+
return null;
|
|
61
|
+
return {
|
|
62
|
+
realm: params["realm"],
|
|
63
|
+
nonce: params["nonce"],
|
|
64
|
+
qop: params["qop"],
|
|
65
|
+
opaque: params["opaque"],
|
|
66
|
+
algorithm: params["algorithm"],
|
|
67
|
+
stale: params["stale"]?.toLowerCase() === "true",
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function md(algo, data) {
|
|
71
|
+
return createHash(algo).update(data).digest("hex");
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build a Digest Authorization header value (RFC 7616).
|
|
75
|
+
*/
|
|
76
|
+
function buildDigestAuthHeader(method, uri, username, password, challenge) {
|
|
77
|
+
const algorithm = (challenge.algorithm ?? "MD5").toUpperCase();
|
|
78
|
+
const hashFn = algorithm === "SHA-256" || algorithm === "SHA-256-SESS" ? "sha256" : algorithm === "SHA-512-256" || algorithm === "SHA-512-256-SESS" ? "sha512-256" : "md5";
|
|
79
|
+
let ha1 = md(hashFn, `${username}:${challenge.realm}:${password}`);
|
|
80
|
+
const cnonce = randomBytes(16).toString("hex");
|
|
81
|
+
if (algorithm.endsWith("-SESS")) {
|
|
82
|
+
ha1 = md(hashFn, `${ha1}:${challenge.nonce}:${cnonce}`);
|
|
83
|
+
}
|
|
84
|
+
const parsedUrl = new URL(uri, "http://localhost");
|
|
85
|
+
const digestUri = parsedUrl.pathname + parsedUrl.search;
|
|
86
|
+
const ha2 = md(hashFn, `${method}:${digestUri}`);
|
|
87
|
+
const count = (digestNonceCounters.get(challenge.nonce) ?? 0) + 1;
|
|
88
|
+
digestNonceCounters.set(challenge.nonce, count);
|
|
89
|
+
const nc = count.toString(16).padStart(8, "0");
|
|
90
|
+
let response;
|
|
91
|
+
let headerStr;
|
|
92
|
+
if (challenge.qop) {
|
|
93
|
+
const qop = challenge.qop.includes("auth") ? "auth" : challenge.qop;
|
|
94
|
+
response = md(hashFn, `${ha1}:${challenge.nonce}:${nc}:${cnonce}:${qop}:${ha2}`);
|
|
95
|
+
headerStr = `Digest username="${username}", realm="${challenge.realm}", `;
|
|
96
|
+
headerStr += `nonce="${challenge.nonce}", uri="${digestUri}", `;
|
|
97
|
+
headerStr += `algorithm=${algorithm}, qop=${qop}, nc=${nc}, cnonce="${cnonce}", `;
|
|
98
|
+
headerStr += `response="${response}"`;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
response = md(hashFn, `${ha1}:${challenge.nonce}:${ha2}`);
|
|
102
|
+
headerStr = `Digest username="${username}", realm="${challenge.realm}", `;
|
|
103
|
+
headerStr += `nonce="${challenge.nonce}", uri="${digestUri}", `;
|
|
104
|
+
headerStr += `algorithm=${algorithm}, response="${response}"`;
|
|
105
|
+
}
|
|
106
|
+
if (challenge.opaque)
|
|
107
|
+
headerStr += `, opaque="${challenge.opaque}"`;
|
|
108
|
+
return headerStr;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* AWS Signature Version 4 signing (simplified).
|
|
112
|
+
*/
|
|
113
|
+
function buildAWSSigV4(method, url, headers, body, accessKeyId, secretKey, region, service, sessionToken) {
|
|
114
|
+
const parsed = new URL(url);
|
|
115
|
+
const now = new Date();
|
|
116
|
+
const dateStamp = now.toISOString().replace(/[-:T]/g, "").substring(0, 8);
|
|
117
|
+
const amzDate = now
|
|
118
|
+
.toISOString()
|
|
119
|
+
.replace(/[-:]/g, "")
|
|
120
|
+
.replace(/\.\d{3}/, "");
|
|
121
|
+
const signedHeaders = {};
|
|
122
|
+
signedHeaders["host"] = parsed.host;
|
|
123
|
+
for (const [k, v] of Object.entries(headers)) {
|
|
124
|
+
signedHeaders[k.toLowerCase().trim()] = v.trim();
|
|
125
|
+
}
|
|
126
|
+
signedHeaders["x-amz-date"] = amzDate;
|
|
127
|
+
if (sessionToken) {
|
|
128
|
+
signedHeaders["x-amz-security-token"] = sessionToken;
|
|
129
|
+
}
|
|
130
|
+
const sortedHeaderNames = Object.keys(signedHeaders).sort();
|
|
131
|
+
const canonicalHeaders = sortedHeaderNames.map((k) => `${k}:${signedHeaders[k]}`).join("\n") + "\n";
|
|
132
|
+
const signedHeadersList = sortedHeaderNames.join(";");
|
|
133
|
+
const payloadHash = createHash("sha256").update(body).digest("hex");
|
|
134
|
+
const canonicalUri = parsed.pathname || "/";
|
|
135
|
+
const canonicalQueryString = [...parsed.searchParams]
|
|
136
|
+
.sort((a, b) => a[0].localeCompare(b[0]))
|
|
137
|
+
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
|
|
138
|
+
.join("&");
|
|
139
|
+
const canonicalRequest = [method.toUpperCase(), canonicalUri, canonicalQueryString, canonicalHeaders, signedHeadersList, payloadHash].join("\n");
|
|
140
|
+
const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;
|
|
141
|
+
const stringToSign = ["AWS4-HMAC-SHA256", amzDate, credentialScope, createHash("sha256").update(canonicalRequest).digest("hex")].join("\n");
|
|
142
|
+
const kDate = createHmac("sha256", `AWS4${secretKey}`).update(dateStamp).digest();
|
|
143
|
+
const kRegion = createHmac("sha256", kDate).update(region).digest();
|
|
144
|
+
const kService = createHmac("sha256", kRegion).update(service).digest();
|
|
145
|
+
const kSigning = createHmac("sha256", kService).update("aws4_request").digest();
|
|
146
|
+
const signature = createHmac("sha256", kSigning).update(stringToSign).digest("hex");
|
|
147
|
+
return `AWS4-HMAC-SHA256 Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeadersList}, Signature=${signature}`;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Extracts the authentication scheme name from a WWW-Authenticate or Proxy-Authenticate header.
|
|
151
|
+
*
|
|
152
|
+
* @param {string} header - The raw authenticate header value.
|
|
153
|
+
* @returns {string|undefined} The lowercase scheme name (e.g. "basic", "bearer"), or `undefined` if not parseable.
|
|
154
|
+
*/
|
|
155
|
+
export function parseAuthenticateScheme(header) {
|
|
156
|
+
const match = /^(\w+)\s/i.exec(header.trim());
|
|
157
|
+
return match ? match[1].toLowerCase() : undefined;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/core/client.d.ts
CHANGED
|
@@ -2,92 +2,80 @@ import type { NLcURLRequest, NLcURLSessionConfig, RequestBody } from "./request.
|
|
|
2
2
|
import { NLcURLResponse } from "./response.js";
|
|
3
3
|
import { NLcURLSession, type RequestOptions } from "./session.js";
|
|
4
4
|
/**
|
|
5
|
-
* Creates a new
|
|
6
|
-
*
|
|
7
|
-
* across multiple requests. Call {@link NLcURLSession.close} when finished.
|
|
5
|
+
* Creates a new session with optional configuration for connection reuse,
|
|
6
|
+
* cookie persistence, caching, and other session-level features.
|
|
8
7
|
*
|
|
9
|
-
* @param {NLcURLSessionConfig} [config] - Session
|
|
8
|
+
* @param {NLcURLSessionConfig} [config] - Session configuration options.
|
|
10
9
|
* @returns {NLcURLSession} A new session instance.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* const session = createSession({ impersonate: 'chrome136' });
|
|
14
|
-
* const r = await session.get('https://example.com');
|
|
15
|
-
* session.close();
|
|
16
10
|
*/
|
|
17
11
|
export declare function createSession(config?: NLcURLSessionConfig): NLcURLSession;
|
|
18
12
|
/**
|
|
19
|
-
* Sends a one-shot HTTP request
|
|
20
|
-
*
|
|
21
|
-
* For repeated requests to the same origin, prefer {@link createSession}.
|
|
13
|
+
* Sends a one-shot HTTP request using a temporary session. Supports streaming
|
|
14
|
+
* responses when `input.stream` is `true`.
|
|
22
15
|
*
|
|
23
|
-
* @param {NLcURLRequest} input -
|
|
16
|
+
* @param {NLcURLRequest} input - The full request descriptor including URL, method, headers, and body.
|
|
24
17
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
25
|
-
* @throws {AbortError} If the `signal` in `input` fires before completion.
|
|
26
|
-
* @throws {TimeoutError} If any configured timeout is exceeded.
|
|
27
|
-
* @throws {ConnectionError} If the TCP connection cannot be established.
|
|
28
|
-
* @throws {TLSError} If the TLS handshake fails.
|
|
29
|
-
* @throws {ProxyError} If the proxy tunnel cannot be established.
|
|
30
18
|
*/
|
|
31
19
|
export declare function request(input: NLcURLRequest): Promise<NLcURLResponse>;
|
|
32
20
|
/**
|
|
33
|
-
*
|
|
21
|
+
* Sends an HTTP GET request.
|
|
34
22
|
*
|
|
35
|
-
* @param {string}
|
|
36
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
23
|
+
* @param {string} url - The target URL.
|
|
24
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
37
25
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
38
26
|
*/
|
|
39
27
|
export declare function get(url: string, options?: RequestOptions & {
|
|
40
28
|
impersonate?: string;
|
|
41
29
|
}): Promise<NLcURLResponse>;
|
|
42
30
|
/**
|
|
43
|
-
*
|
|
31
|
+
* Sends an HTTP POST request.
|
|
44
32
|
*
|
|
45
|
-
* @param {string}
|
|
46
|
-
* @param {RequestBody}
|
|
47
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
33
|
+
* @param {string} url - The target URL.
|
|
34
|
+
* @param {RequestBody} [body] - The request body.
|
|
35
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
48
36
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
49
37
|
*/
|
|
50
38
|
export declare function post(url: string, body?: RequestBody, options?: RequestOptions & {
|
|
51
39
|
impersonate?: string;
|
|
52
40
|
}): Promise<NLcURLResponse>;
|
|
53
41
|
/**
|
|
54
|
-
*
|
|
42
|
+
* Sends an HTTP PUT request.
|
|
55
43
|
*
|
|
56
|
-
* @param {string}
|
|
57
|
-
* @param {RequestBody}
|
|
58
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
44
|
+
* @param {string} url - The target URL.
|
|
45
|
+
* @param {RequestBody} [body] - The request body.
|
|
46
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
59
47
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
60
48
|
*/
|
|
61
49
|
export declare function put(url: string, body?: RequestBody, options?: RequestOptions & {
|
|
62
50
|
impersonate?: string;
|
|
63
51
|
}): Promise<NLcURLResponse>;
|
|
64
52
|
/**
|
|
65
|
-
*
|
|
53
|
+
* Sends an HTTP PATCH request.
|
|
66
54
|
*
|
|
67
|
-
* @param {string}
|
|
68
|
-
* @param {RequestBody}
|
|
69
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
55
|
+
* @param {string} url - The target URL.
|
|
56
|
+
* @param {RequestBody} [body] - The request body.
|
|
57
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
70
58
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
71
59
|
*/
|
|
72
60
|
export declare function patch(url: string, body?: RequestBody, options?: RequestOptions & {
|
|
73
61
|
impersonate?: string;
|
|
74
62
|
}): Promise<NLcURLResponse>;
|
|
75
63
|
/**
|
|
76
|
-
*
|
|
64
|
+
* Sends an HTTP DELETE request.
|
|
77
65
|
*
|
|
78
|
-
* @param {string}
|
|
79
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
66
|
+
* @param {string} url - The target URL.
|
|
67
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
80
68
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
81
69
|
*/
|
|
82
70
|
export declare function del(url: string, options?: RequestOptions & {
|
|
83
71
|
impersonate?: string;
|
|
84
72
|
}): Promise<NLcURLResponse>;
|
|
85
73
|
/**
|
|
86
|
-
*
|
|
74
|
+
* Sends an HTTP HEAD request.
|
|
87
75
|
*
|
|
88
|
-
* @param {string}
|
|
89
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
90
|
-
* @returns {Promise<NLcURLResponse>} Resolves with the response
|
|
76
|
+
* @param {string} url - The target URL.
|
|
77
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
78
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
91
79
|
*/
|
|
92
80
|
export declare function head(url: string, options?: RequestOptions & {
|
|
93
81
|
impersonate?: string;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,aAAa,CAEzE;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAsB3E;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,32 +1,20 @@
|
|
|
1
1
|
import { NLcURLSession } from "./session.js";
|
|
2
2
|
/**
|
|
3
|
-
* Creates a new
|
|
4
|
-
*
|
|
5
|
-
* across multiple requests. Call {@link NLcURLSession.close} when finished.
|
|
3
|
+
* Creates a new session with optional configuration for connection reuse,
|
|
4
|
+
* cookie persistence, caching, and other session-level features.
|
|
6
5
|
*
|
|
7
|
-
* @param {NLcURLSessionConfig} [config] - Session
|
|
6
|
+
* @param {NLcURLSessionConfig} [config] - Session configuration options.
|
|
8
7
|
* @returns {NLcURLSession} A new session instance.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* const session = createSession({ impersonate: 'chrome136' });
|
|
12
|
-
* const r = await session.get('https://example.com');
|
|
13
|
-
* session.close();
|
|
14
8
|
*/
|
|
15
9
|
export function createSession(config) {
|
|
16
10
|
return new NLcURLSession(config);
|
|
17
11
|
}
|
|
18
12
|
/**
|
|
19
|
-
* Sends a one-shot HTTP request
|
|
20
|
-
*
|
|
21
|
-
* For repeated requests to the same origin, prefer {@link createSession}.
|
|
13
|
+
* Sends a one-shot HTTP request using a temporary session. Supports streaming
|
|
14
|
+
* responses when `input.stream` is `true`.
|
|
22
15
|
*
|
|
23
|
-
* @param {NLcURLRequest} input -
|
|
16
|
+
* @param {NLcURLRequest} input - The full request descriptor including URL, method, headers, and body.
|
|
24
17
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
25
|
-
* @throws {AbortError} If the `signal` in `input` fires before completion.
|
|
26
|
-
* @throws {TimeoutError} If any configured timeout is exceeded.
|
|
27
|
-
* @throws {ConnectionError} If the TCP connection cannot be established.
|
|
28
|
-
* @throws {TLSError} If the TLS handshake fails.
|
|
29
|
-
* @throws {ProxyError} If the proxy tunnel cannot be established.
|
|
30
18
|
*/
|
|
31
19
|
export async function request(input) {
|
|
32
20
|
const session = new NLcURLSession(extractSessionConfig(input));
|
|
@@ -39,7 +27,9 @@ export async function request(input) {
|
|
|
39
27
|
session.close();
|
|
40
28
|
throw err;
|
|
41
29
|
}
|
|
42
|
-
const cleanup = () =>
|
|
30
|
+
const cleanup = () => {
|
|
31
|
+
session.close();
|
|
32
|
+
};
|
|
43
33
|
response.body?.once("close", cleanup);
|
|
44
34
|
if (response.body === null)
|
|
45
35
|
session.close();
|
|
@@ -53,64 +43,64 @@ export async function request(input) {
|
|
|
53
43
|
}
|
|
54
44
|
}
|
|
55
45
|
/**
|
|
56
|
-
*
|
|
46
|
+
* Sends an HTTP GET request.
|
|
57
47
|
*
|
|
58
|
-
* @param {string}
|
|
59
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
48
|
+
* @param {string} url - The target URL.
|
|
49
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
60
50
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
61
51
|
*/
|
|
62
52
|
export async function get(url, options) {
|
|
63
53
|
return request({ ...options, url, method: "GET" });
|
|
64
54
|
}
|
|
65
55
|
/**
|
|
66
|
-
*
|
|
56
|
+
* Sends an HTTP POST request.
|
|
67
57
|
*
|
|
68
|
-
* @param {string}
|
|
69
|
-
* @param {RequestBody}
|
|
70
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
58
|
+
* @param {string} url - The target URL.
|
|
59
|
+
* @param {RequestBody} [body] - The request body.
|
|
60
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
71
61
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
72
62
|
*/
|
|
73
63
|
export async function post(url, body, options) {
|
|
74
64
|
return request({ ...options, url, method: "POST", body });
|
|
75
65
|
}
|
|
76
66
|
/**
|
|
77
|
-
*
|
|
67
|
+
* Sends an HTTP PUT request.
|
|
78
68
|
*
|
|
79
|
-
* @param {string}
|
|
80
|
-
* @param {RequestBody}
|
|
81
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
69
|
+
* @param {string} url - The target URL.
|
|
70
|
+
* @param {RequestBody} [body] - The request body.
|
|
71
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
82
72
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
83
73
|
*/
|
|
84
74
|
export async function put(url, body, options) {
|
|
85
75
|
return request({ ...options, url, method: "PUT", body });
|
|
86
76
|
}
|
|
87
77
|
/**
|
|
88
|
-
*
|
|
78
|
+
* Sends an HTTP PATCH request.
|
|
89
79
|
*
|
|
90
|
-
* @param {string}
|
|
91
|
-
* @param {RequestBody}
|
|
92
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
80
|
+
* @param {string} url - The target URL.
|
|
81
|
+
* @param {RequestBody} [body] - The request body.
|
|
82
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
93
83
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
94
84
|
*/
|
|
95
85
|
export async function patch(url, body, options) {
|
|
96
86
|
return request({ ...options, url, method: "PATCH", body });
|
|
97
87
|
}
|
|
98
88
|
/**
|
|
99
|
-
*
|
|
89
|
+
* Sends an HTTP DELETE request.
|
|
100
90
|
*
|
|
101
|
-
* @param {string}
|
|
102
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
91
|
+
* @param {string} url - The target URL.
|
|
92
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
103
93
|
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
104
94
|
*/
|
|
105
95
|
export async function del(url, options) {
|
|
106
96
|
return request({ ...options, url, method: "DELETE" });
|
|
107
97
|
}
|
|
108
98
|
/**
|
|
109
|
-
*
|
|
99
|
+
* Sends an HTTP HEAD request.
|
|
110
100
|
*
|
|
111
|
-
* @param {string}
|
|
112
|
-
* @param {RequestOptions & { impersonate?: string }}
|
|
113
|
-
* @returns {Promise<NLcURLResponse>} Resolves with the response
|
|
101
|
+
* @param {string} url - The target URL.
|
|
102
|
+
* @param {RequestOptions & { impersonate?: string }} [options] - Optional request configuration.
|
|
103
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
114
104
|
*/
|
|
115
105
|
export async function head(url, options) {
|
|
116
106
|
return request({ ...options, url, method: "HEAD" });
|
package/dist/core/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAuB,MAAM,cAAc,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
|