nlcurl 0.6.0 → 0.8.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 +143 -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 +111 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +414 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cache/types.d.ts +69 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- 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 +33 -31
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +69 -33
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +14 -16
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +30 -13
- 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 +30 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +34 -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 +34 -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 +63 -85
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +64 -59
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +70 -52
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +81 -70
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +198 -71
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +44 -42
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +47 -58
- package/dist/core/validation.js.map +1 -1
- package/dist/dns/cache.d.ts +59 -0
- package/dist/dns/cache.d.ts.map +1 -0
- package/dist/dns/cache.js +99 -0
- package/dist/dns/cache.js.map +1 -0
- package/dist/dns/codec.d.ts +39 -0
- package/dist/dns/codec.d.ts.map +1 -0
- package/dist/dns/codec.js +238 -0
- package/dist/dns/codec.js.map +1 -0
- package/dist/dns/doh-resolver.d.ts +38 -0
- package/dist/dns/doh-resolver.d.ts.map +1 -0
- package/dist/dns/doh-resolver.js +191 -0
- package/dist/dns/doh-resolver.js.map +1 -0
- 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 +158 -0
- package/dist/dns/dot-resolver.js.map +1 -0
- package/dist/dns/https-rr.d.ts +40 -0
- package/dist/dns/https-rr.d.ts.map +1 -0
- package/dist/dns/https-rr.js +109 -0
- package/dist/dns/https-rr.js.map +1 -0
- package/dist/dns/types.d.ts +82 -0
- package/dist/dns/types.d.ts.map +1 -0
- package/dist/dns/types.js +23 -0
- package/dist/dns/types.js.map +1 -0
- 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 +83 -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 +39 -0
- package/dist/hsts/store.d.ts.map +1 -0
- package/dist/hsts/store.js +163 -0
- package/dist/hsts/store.js.map +1 -0
- package/dist/hsts/types.d.ts +24 -0
- package/dist/hsts/types.d.ts.map +1 -0
- package/dist/hsts/types.js +2 -0
- package/dist/hsts/types.js.map +1 -0
- package/dist/http/alt-svc.d.ts +67 -0
- package/dist/http/alt-svc.d.ts.map +1 -0
- package/dist/http/alt-svc.js +186 -0
- package/dist/http/alt-svc.js.map +1 -0
- 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 +29 -22
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +10 -17
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +10 -17
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +22 -59
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +15 -47
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +18 -59
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +29 -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 +16 -35
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +16 -35
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/h3/detection.d.ts +15 -0
- package/dist/http/h3/detection.d.ts.map +1 -0
- package/dist/http/h3/detection.js +41 -0
- package/dist/http/h3/detection.js.map +1 -0
- package/dist/http/negotiator.d.ts +43 -33
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +99 -41
- 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 +36 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- 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 +15 -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 +128 -0
- package/dist/proxy/auth.js.map +1 -0
- package/dist/proxy/env-proxy.d.ts +11 -0
- package/dist/proxy/env-proxy.d.ts.map +1 -0
- package/dist/proxy/env-proxy.js +56 -0
- package/dist/proxy/env-proxy.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +13 -18
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +24 -14
- 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 +6 -9
- package/dist/proxy/socks.js.map +1 -1
- package/dist/sse/parser.d.ts +47 -0
- package/dist/sse/parser.d.ts.map +1 -0
- package/dist/sse/parser.js +139 -0
- package/dist/sse/parser.js.map +1 -0
- package/dist/tls/constants.d.ts +15 -74
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +15 -74
- 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 +130 -0
- package/dist/tls/ech.d.ts.map +1 -0
- package/dist/tls/ech.js +353 -0
- package/dist/tls/ech.js.map +1 -0
- 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 +15 -14
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +54 -14
- 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 +10 -0
- package/dist/tls/pin-verification.d.ts.map +1 -0
- package/dist/tls/pin-verification.js +28 -0
- package/dist/tls/pin-verification.js.map +1 -0
- package/dist/tls/session-cache.d.ts +58 -0
- package/dist/tls/session-cache.d.ts.map +1 -0
- package/dist/tls/session-cache.js +76 -0
- package/dist/tls/session-cache.js.map +1 -0
- package/dist/tls/stealth/client-hello.d.ts +34 -32
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +116 -11
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +5 -15
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +163 -47
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +23 -32
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +112 -27
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +59 -86
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +46 -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 +30 -0
- package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -0
- package/dist/tls/stealth/tls12-handshake.js +470 -0
- package/dist/tls/stealth/tls12-handshake.js.map +1 -0
- package/dist/tls/types.d.ts +46 -48
- 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 -28
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +77 -40
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +20 -7
- package/dist/utils/happy-eyeballs.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.js +57 -25
- 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 -52
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +92 -37
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +27 -42
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +25 -37
- package/dist/ws/frame.js.map +1 -1
- package/dist/ws/permessage-deflate.d.ts +53 -0
- package/dist/ws/permessage-deflate.d.ts.map +1 -0
- package/dist/ws/permessage-deflate.js +140 -0
- package/dist/ws/permessage-deflate.js.map +1 -0
- package/package.json +62 -62
package/dist/index.d.ts
CHANGED
|
@@ -1,26 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
* Public API entry point for the NLcURL library. Re-exports all types, classes,
|
|
3
|
-
* and functions that form the stable public surface of the package.
|
|
4
|
-
*
|
|
5
|
-
* @module nlcurl
|
|
6
|
-
*/
|
|
7
|
-
export type { HttpMethod, NLcURLRequest, NLcURLSessionConfig, RequestBody, RequestTimings, RetryConfig, TimeoutConfig } from "./core/request.js";
|
|
1
|
+
export type { HttpMethod, NLcURLRequest, NLcURLSessionConfig, RequestBody, RequestTimings, RetryConfig, TimeoutConfig, ProgressEvent, ProgressCallback, ServerSentEvent } from "./core/request.js";
|
|
8
2
|
export { NLcURLResponse } from "./core/response.js";
|
|
9
3
|
export type { ResponseMeta } from "./core/response.js";
|
|
10
4
|
export { NLcURLError, TLSError, HTTPError, TimeoutError, ProxyError, AbortError, ConnectionError, ProtocolError } from "./core/errors.js";
|
|
11
5
|
export { NLcURLSession, type RequestOptions } from "./core/session.js";
|
|
12
6
|
export { createSession, request, get, post, put, patch, del, head } from "./core/client.js";
|
|
7
|
+
export { buildAuthHeader, parseAuthenticateScheme, type AuthConfig } from "./core/auth.js";
|
|
13
8
|
export { getProfile, listProfiles, DEFAULT_PROFILE } from "./fingerprints/database.js";
|
|
14
9
|
export type { BrowserProfile, TLSProfile, H2Profile, HeaderProfile } from "./fingerprints/types.js";
|
|
15
10
|
export type { RequestInterceptor, ResponseInterceptor } from "./middleware/interceptor.js";
|
|
16
11
|
export type { RateLimitConfig } from "./middleware/rate-limiter.js";
|
|
12
|
+
export { parseRetryAfter, getRetryAfterMs } from "./middleware/retry-after.js";
|
|
17
13
|
export type { Logger, LogLevel, LogBindings } from "./utils/logger.js";
|
|
18
|
-
export { ConsoleLogger, SILENT_LOGGER, setDefaultLogger, getDefaultLogger } from "./utils/logger.js";
|
|
14
|
+
export { ConsoleLogger, JsonLogger, SILENT_LOGGER, setDefaultLogger, getDefaultLogger } from "./utils/logger.js";
|
|
19
15
|
export { CookieJar } from "./cookies/jar.js";
|
|
20
16
|
export { isPublicSuffix, getRegistrableDomain } from "./cookies/public-suffix.js";
|
|
21
17
|
export { FormData, type FormFile, type FormValue } from "./http/form-data.js";
|
|
22
18
|
export type { TLSOptions } from "./tls/types.js";
|
|
23
19
|
export { WebSocketClient, type WebSocketOptions, type WebSocketEvents } from "./ws/client.js";
|
|
24
20
|
export { ja3Hash, ja3String } from "./fingerprints/ja3.js";
|
|
21
|
+
export { ja4Fingerprint, ja4aSection } from "./fingerprints/ja4.js";
|
|
25
22
|
export { akamaiFingerprint } from "./fingerprints/akamai.js";
|
|
23
|
+
export { TLSSessionCache, type SessionTicketEntry, type SessionCacheOptions } from "./tls/session-cache.js";
|
|
24
|
+
export { setKeylogFile, getKeylogFile } from "./tls/keylog.js";
|
|
25
|
+
export { resolveEnvProxy } from "./proxy/env-proxy.js";
|
|
26
|
+
export { SSEParser, parseSSEStream } from "./sse/parser.js";
|
|
27
|
+
export { PerMessageDeflate, type DeflateParams, buildDeflateOffer, parseDeflateResponse } from "./ws/permessage-deflate.js";
|
|
28
|
+
export { isQuicAvailable } from "./http/h3/detection.js";
|
|
29
|
+
export { CacheStore, parseCacheControl } from "./cache/store.js";
|
|
30
|
+
export type { CacheConfig, CacheMode, CacheDirectives, CacheEntry } from "./cache/types.js";
|
|
31
|
+
export { HSTSStore } from "./hsts/store.js";
|
|
32
|
+
export type { HSTSConfig, HSTSEntry, HSTSPreloadEntry } from "./hsts/types.js";
|
|
33
|
+
export { DoHResolver } from "./dns/doh-resolver.js";
|
|
34
|
+
export { DNSCache, type DNSCacheConfig, type DNSCacheEntry } from "./dns/cache.js";
|
|
35
|
+
export { HTTPSRRResolver, type HTTPSRRResult } from "./dns/https-rr.js";
|
|
36
|
+
export type { DoHConfig, DNSConfig, DNSRecord, SVCBRecord, ResolvedAddress } from "./dns/types.js";
|
|
37
|
+
export { RTYPE, SvcParamKey } from "./dns/types.js";
|
|
38
|
+
export { AltSvcStore, type AltSvcEntry } from "./http/alt-svc.js";
|
|
39
|
+
export { parseLinkHeader, type EarlyHint, type EarlyHintsCallback } from "./http/early-hints.js";
|
|
40
|
+
export { compressBody, shouldCompress, type RequestEncoding } from "./utils/compression.js";
|
|
41
|
+
export { parseECHConfigList, generateGreaseECH, parseECHRetryConfigs, shouldRetryECH, type ECHConfig, type ECHParameters, type ECHOptions } from "./tls/ech.js";
|
|
42
|
+
export { parseOCSPResponse, isOCSPValid, validateOCSPStapling, OCSPResponseStatus, OCSPCertStatus, type OCSPResult } from "./tls/ocsp.js";
|
|
43
|
+
export { parseSCTList, validateSCTs, extractSCTsFromSocket, SCTVersion, SCTHashAlgorithm, SCTSignatureAlgorithm, type SCT, type SCTValidationResult } from "./tls/ct.js";
|
|
44
|
+
export { canSendEarlyData, prepareEarlyData, checkEarlyDataAccepted, type EarlyDataConfig, type EarlyDataResult } from "./tls/early-data.js";
|
|
45
|
+
export { isValidTrailerField, serializeTrailers, parseTrailers, buildTrailerHeader } from "./http/trailers.js";
|
|
46
|
+
export { buildUploadCreationHeaders, buildUploadResumeHeaders, buildUploadOffsetHeaders, parseUploadOffset, isUploadComplete, splitIntoChunks, parseUploadUrl, type UploadSession, type ResumableUploadConfig } from "./http/resumable-upload.js";
|
|
47
|
+
export { RangeCache, parseContentRange, parseRangeHeader, type ContentRange, type RangeSegment, type RangeCacheEntry } from "./cache/range.js";
|
|
48
|
+
export { parseNoVarySearch, urlsMatchWithNoVarySearch, normalizeUrlForCache, type NoVarySearchDirective } from "./cache/no-vary-search.js";
|
|
49
|
+
export { CacheGroupStore, parseCacheGroups, type CacheGroup } from "./cache/groups.js";
|
|
50
|
+
export { DictionaryStore, parseUseAsDictionary, computeDictionaryHash, buildAvailableDictionaryHeader, buildDictionaryAcceptEncoding, type CompressionDictionary, type DictionaryConfig } from "./utils/dictionary-transport.js";
|
|
51
|
+
export { isTFOSupported, buildTFOSocketOptions, getTFOStatus, type TFOOptions } from "./utils/tcp-fast-open.js";
|
|
52
|
+
export { DoTResolver, DOT_SERVERS, type DoTConfig } from "./dns/dot-resolver.js";
|
|
53
|
+
export { parseProxyAuthenticate, parseDigestChallenge, buildDigestAuth, buildBasicProxyAuth, buildProxyAuthorization, type ProxyAuthConfig, type ProxyAuthScheme, type DigestChallenge } from "./proxy/auth.js";
|
|
26
54
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,12 +2,43 @@ export { NLcURLResponse } from "./core/response.js";
|
|
|
2
2
|
export { NLcURLError, TLSError, HTTPError, TimeoutError, ProxyError, AbortError, ConnectionError, ProtocolError } from "./core/errors.js";
|
|
3
3
|
export { NLcURLSession } from "./core/session.js";
|
|
4
4
|
export { createSession, request, get, post, put, patch, del, head } from "./core/client.js";
|
|
5
|
+
export { buildAuthHeader, parseAuthenticateScheme } from "./core/auth.js";
|
|
5
6
|
export { getProfile, listProfiles, DEFAULT_PROFILE } from "./fingerprints/database.js";
|
|
6
|
-
export {
|
|
7
|
+
export { parseRetryAfter, getRetryAfterMs } from "./middleware/retry-after.js";
|
|
8
|
+
export { ConsoleLogger, JsonLogger, SILENT_LOGGER, setDefaultLogger, getDefaultLogger } from "./utils/logger.js";
|
|
7
9
|
export { CookieJar } from "./cookies/jar.js";
|
|
8
10
|
export { isPublicSuffix, getRegistrableDomain } from "./cookies/public-suffix.js";
|
|
9
11
|
export { FormData } from "./http/form-data.js";
|
|
10
12
|
export { WebSocketClient } from "./ws/client.js";
|
|
11
13
|
export { ja3Hash, ja3String } from "./fingerprints/ja3.js";
|
|
14
|
+
export { ja4Fingerprint, ja4aSection } from "./fingerprints/ja4.js";
|
|
12
15
|
export { akamaiFingerprint } from "./fingerprints/akamai.js";
|
|
16
|
+
export { TLSSessionCache } from "./tls/session-cache.js";
|
|
17
|
+
export { setKeylogFile, getKeylogFile } from "./tls/keylog.js";
|
|
18
|
+
export { resolveEnvProxy } from "./proxy/env-proxy.js";
|
|
19
|
+
export { SSEParser, parseSSEStream } from "./sse/parser.js";
|
|
20
|
+
export { PerMessageDeflate, buildDeflateOffer, parseDeflateResponse } from "./ws/permessage-deflate.js";
|
|
21
|
+
export { isQuicAvailable } from "./http/h3/detection.js";
|
|
22
|
+
export { CacheStore, parseCacheControl } from "./cache/store.js";
|
|
23
|
+
export { HSTSStore } from "./hsts/store.js";
|
|
24
|
+
export { DoHResolver } from "./dns/doh-resolver.js";
|
|
25
|
+
export { DNSCache } from "./dns/cache.js";
|
|
26
|
+
export { HTTPSRRResolver } from "./dns/https-rr.js";
|
|
27
|
+
export { RTYPE, SvcParamKey } from "./dns/types.js";
|
|
28
|
+
export { AltSvcStore } from "./http/alt-svc.js";
|
|
29
|
+
export { parseLinkHeader } from "./http/early-hints.js";
|
|
30
|
+
export { compressBody, shouldCompress } from "./utils/compression.js";
|
|
31
|
+
export { parseECHConfigList, generateGreaseECH, parseECHRetryConfigs, shouldRetryECH } from "./tls/ech.js";
|
|
32
|
+
export { parseOCSPResponse, isOCSPValid, validateOCSPStapling, OCSPResponseStatus, OCSPCertStatus } from "./tls/ocsp.js";
|
|
33
|
+
export { parseSCTList, validateSCTs, extractSCTsFromSocket, SCTVersion, SCTHashAlgorithm, SCTSignatureAlgorithm } from "./tls/ct.js";
|
|
34
|
+
export { canSendEarlyData, prepareEarlyData, checkEarlyDataAccepted } from "./tls/early-data.js";
|
|
35
|
+
export { isValidTrailerField, serializeTrailers, parseTrailers, buildTrailerHeader } from "./http/trailers.js";
|
|
36
|
+
export { buildUploadCreationHeaders, buildUploadResumeHeaders, buildUploadOffsetHeaders, parseUploadOffset, isUploadComplete, splitIntoChunks, parseUploadUrl } from "./http/resumable-upload.js";
|
|
37
|
+
export { RangeCache, parseContentRange, parseRangeHeader } from "./cache/range.js";
|
|
38
|
+
export { parseNoVarySearch, urlsMatchWithNoVarySearch, normalizeUrlForCache } from "./cache/no-vary-search.js";
|
|
39
|
+
export { CacheGroupStore, parseCacheGroups } from "./cache/groups.js";
|
|
40
|
+
export { DictionaryStore, parseUseAsDictionary, computeDictionaryHash, buildAvailableDictionaryHeader, buildDictionaryAcceptEncoding } from "./utils/dictionary-transport.js";
|
|
41
|
+
export { isTFOSupported, buildTFOSocketOptions, getTFOStatus } from "./utils/tcp-fast-open.js";
|
|
42
|
+
export { DoTResolver, DOT_SERVERS } from "./dns/dot-resolver.js";
|
|
43
|
+
export { parseProxyAuthenticate, parseDigestChallenge, buildDigestAuth, buildBasicProxyAuth, buildProxyAuthorization } from "./proxy/auth.js";
|
|
13
44
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,58 +1,39 @@
|
|
|
1
1
|
import type { NLcURLRequest } from "../core/request.js";
|
|
2
2
|
import { NLcURLResponse } from "../core/response.js";
|
|
3
|
-
/**
|
|
4
|
-
* A function that inspects and optionally transforms an outgoing request before
|
|
5
|
-
* it is sent. May be synchronous or asynchronous.
|
|
6
|
-
*
|
|
7
|
-
* @callback RequestInterceptor
|
|
8
|
-
* @param {NLcURLRequest} request - The outgoing request descriptor.
|
|
9
|
-
* @returns {NLcURLRequest | Promise<NLcURLRequest>} The (potentially modified) request.
|
|
10
|
-
*/
|
|
3
|
+
/** Function that transforms a request before it is sent. */
|
|
11
4
|
export type RequestInterceptor = (request: NLcURLRequest) => NLcURLRequest | Promise<NLcURLRequest>;
|
|
12
|
-
/**
|
|
13
|
-
* A function that inspects and optionally transforms an incoming response before
|
|
14
|
-
* it is returned to the caller. May be synchronous or asynchronous.
|
|
15
|
-
*
|
|
16
|
-
* @callback ResponseInterceptor
|
|
17
|
-
* @param {NLcURLResponse} response - The received response.
|
|
18
|
-
* @returns {NLcURLResponse | Promise<NLcURLResponse>} The (potentially modified) response.
|
|
19
|
-
*/
|
|
5
|
+
/** Function that transforms a response after it is received. */
|
|
20
6
|
export type ResponseInterceptor = (response: NLcURLResponse) => NLcURLResponse | Promise<NLcURLResponse>;
|
|
21
|
-
/**
|
|
22
|
-
* Maintains ordered lists of request and response interceptors and applies
|
|
23
|
-
* them sequentially. Interceptors are invoked in the order they were added.
|
|
24
|
-
*/
|
|
7
|
+
/** Ordered chain of request and response interceptors. */
|
|
25
8
|
export declare class InterceptorChain {
|
|
26
9
|
private readonly requestInterceptors;
|
|
27
10
|
private readonly responseInterceptors;
|
|
28
11
|
/**
|
|
29
|
-
*
|
|
12
|
+
* Register a request interceptor.
|
|
30
13
|
*
|
|
31
|
-
* @param {RequestInterceptor} fn - Interceptor function
|
|
14
|
+
* @param {RequestInterceptor} fn - Interceptor function.
|
|
32
15
|
* @returns {this} This instance for chaining.
|
|
33
16
|
*/
|
|
34
17
|
addRequestInterceptor(fn: RequestInterceptor): this;
|
|
35
18
|
/**
|
|
36
|
-
*
|
|
19
|
+
* Register a response interceptor.
|
|
37
20
|
*
|
|
38
|
-
* @param {ResponseInterceptor} fn - Interceptor function
|
|
21
|
+
* @param {ResponseInterceptor} fn - Interceptor function.
|
|
39
22
|
* @returns {this} This instance for chaining.
|
|
40
23
|
*/
|
|
41
24
|
addResponseInterceptor(fn: ResponseInterceptor): this;
|
|
42
25
|
/**
|
|
43
|
-
*
|
|
44
|
-
* returns the final transformed request.
|
|
26
|
+
* Run all request interceptors in order.
|
|
45
27
|
*
|
|
46
|
-
* @param {NLcURLRequest} request -
|
|
47
|
-
* @returns {Promise<NLcURLRequest>}
|
|
28
|
+
* @param {NLcURLRequest} request - Original request.
|
|
29
|
+
* @returns {Promise<NLcURLRequest>} Transformed request.
|
|
48
30
|
*/
|
|
49
31
|
processRequest(request: NLcURLRequest): Promise<NLcURLRequest>;
|
|
50
32
|
/**
|
|
51
|
-
*
|
|
52
|
-
* returns the final transformed response.
|
|
33
|
+
* Run all response interceptors in order.
|
|
53
34
|
*
|
|
54
|
-
* @param {NLcURLResponse} response -
|
|
55
|
-
* @returns {Promise<NLcURLResponse>}
|
|
35
|
+
* @param {NLcURLResponse} response - Original response.
|
|
36
|
+
* @returns {Promise<NLcURLResponse>} Transformed response.
|
|
56
37
|
*/
|
|
57
38
|
processResponse(response: NLcURLResponse): Promise<NLcURLResponse>;
|
|
58
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/middleware/interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/middleware/interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,4DAA4D;AAC5D,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAEpG,gEAAgE;AAChE,MAAM,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,cAAc,KAAK,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAEzG,0DAA0D;AAC1D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA4B;IAChE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAElE;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI;IAKnD;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI;IAKrD;;;;;OAKG;IACG,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAQpE;;;;;OAKG;IACG,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CAOzE"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Maintains ordered lists of request and response interceptors and applies
|
|
3
|
-
* them sequentially. Interceptors are invoked in the order they were added.
|
|
4
|
-
*/
|
|
1
|
+
/** Ordered chain of request and response interceptors. */
|
|
5
2
|
export class InterceptorChain {
|
|
6
3
|
requestInterceptors = [];
|
|
7
4
|
responseInterceptors = [];
|
|
8
5
|
/**
|
|
9
|
-
*
|
|
6
|
+
* Register a request interceptor.
|
|
10
7
|
*
|
|
11
|
-
* @param {RequestInterceptor} fn - Interceptor function
|
|
8
|
+
* @param {RequestInterceptor} fn - Interceptor function.
|
|
12
9
|
* @returns {this} This instance for chaining.
|
|
13
10
|
*/
|
|
14
11
|
addRequestInterceptor(fn) {
|
|
@@ -16,9 +13,9 @@ export class InterceptorChain {
|
|
|
16
13
|
return this;
|
|
17
14
|
}
|
|
18
15
|
/**
|
|
19
|
-
*
|
|
16
|
+
* Register a response interceptor.
|
|
20
17
|
*
|
|
21
|
-
* @param {ResponseInterceptor} fn - Interceptor function
|
|
18
|
+
* @param {ResponseInterceptor} fn - Interceptor function.
|
|
22
19
|
* @returns {this} This instance for chaining.
|
|
23
20
|
*/
|
|
24
21
|
addResponseInterceptor(fn) {
|
|
@@ -26,11 +23,10 @@ export class InterceptorChain {
|
|
|
26
23
|
return this;
|
|
27
24
|
}
|
|
28
25
|
/**
|
|
29
|
-
*
|
|
30
|
-
* returns the final transformed request.
|
|
26
|
+
* Run all request interceptors in order.
|
|
31
27
|
*
|
|
32
|
-
* @param {NLcURLRequest} request -
|
|
33
|
-
* @returns {Promise<NLcURLRequest>}
|
|
28
|
+
* @param {NLcURLRequest} request - Original request.
|
|
29
|
+
* @returns {Promise<NLcURLRequest>} Transformed request.
|
|
34
30
|
*/
|
|
35
31
|
async processRequest(request) {
|
|
36
32
|
let req = request;
|
|
@@ -40,11 +36,10 @@ export class InterceptorChain {
|
|
|
40
36
|
return req;
|
|
41
37
|
}
|
|
42
38
|
/**
|
|
43
|
-
*
|
|
44
|
-
* returns the final transformed response.
|
|
39
|
+
* Run all response interceptors in order.
|
|
45
40
|
*
|
|
46
|
-
* @param {NLcURLResponse} response -
|
|
47
|
-
* @returns {Promise<NLcURLResponse>}
|
|
41
|
+
* @param {NLcURLResponse} response - Original response.
|
|
42
|
+
* @returns {Promise<NLcURLResponse>} Transformed response.
|
|
48
43
|
*/
|
|
49
44
|
async processResponse(response) {
|
|
50
45
|
let resp = response;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../../src/middleware/interceptor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../../src/middleware/interceptor.ts"],"names":[],"mappings":"AASA,0DAA0D;AAC1D,MAAM,OAAO,gBAAgB;IACV,mBAAmB,GAAyB,EAAE,CAAC;IAC/C,oBAAoB,GAA0B,EAAE,CAAC;IAElE;;;;;OAKG;IACH,qBAAqB,CAAC,EAAsB;QAC1C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,EAAuB;QAC5C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,OAAsB;QACzC,IAAI,GAAG,GAAG,OAAO,CAAC;QAClB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1C,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,QAAwB;QAC5C,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3C,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -1,19 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration options for a token-bucket rate limiter.
|
|
3
|
-
*
|
|
4
|
-
* @typedef {Object} RateLimitConfig
|
|
5
|
-
* @property {number} maxRequests - Maximum number of requests allowed per `windowMs` interval.
|
|
6
|
-
* @property {number} windowMs - Duration of the rate-limiting window in milliseconds.
|
|
7
|
-
*/
|
|
1
|
+
/** Configuration for the token-bucket rate limiter. */
|
|
8
2
|
export interface RateLimitConfig {
|
|
3
|
+
/** Maximum number of requests allowed per window. */
|
|
9
4
|
maxRequests: number;
|
|
5
|
+
/** Window duration in milliseconds. */
|
|
10
6
|
windowMs: number;
|
|
11
7
|
}
|
|
12
|
-
/**
|
|
13
|
-
* Token-bucket rate limiter. Callers must call {@link RateLimiter.acquire} and
|
|
14
|
-
* await the returned promise before sending each request. Requests that would
|
|
15
|
-
* exceed the configured rate are queued and granted once the window refills.
|
|
16
|
-
*/
|
|
8
|
+
/** Token-bucket rate limiter for outgoing requests. */
|
|
17
9
|
export declare class RateLimiter {
|
|
18
10
|
private readonly maxRequests;
|
|
19
11
|
private readonly windowMs;
|
|
@@ -21,16 +13,15 @@ export declare class RateLimiter {
|
|
|
21
13
|
private lastRefill;
|
|
22
14
|
private waitQueue;
|
|
23
15
|
/**
|
|
24
|
-
*
|
|
16
|
+
* Create a new rate limiter.
|
|
25
17
|
*
|
|
26
|
-
* @param {RateLimitConfig} config - Rate
|
|
18
|
+
* @param {RateLimitConfig} config - Rate limit configuration.
|
|
27
19
|
*/
|
|
28
20
|
constructor(config: RateLimitConfig);
|
|
29
21
|
/**
|
|
30
|
-
*
|
|
31
|
-
* available, or waits until the current window refills.
|
|
22
|
+
* Acquire a token, waiting if the rate limit has been reached.
|
|
32
23
|
*
|
|
33
|
-
* @returns {Promise<void>}
|
|
24
|
+
* @returns {Promise<void>} Promise that resolves when a token is available.
|
|
34
25
|
*/
|
|
35
26
|
acquire(): Promise<void>;
|
|
36
27
|
private drain;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limiter.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limiter.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,uDAAuD;AACvD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAyB;IAE1C;;;;OAIG;gBACS,MAAM,EAAE,eAAe;IAQnC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B,OAAO,CAAC,KAAK;IAiBb,OAAO,CAAC,MAAM;CAYf"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { validateRateLimitConfig } from "../core/validation.js";
|
|
2
|
-
/**
|
|
3
|
-
* Token-bucket rate limiter. Callers must call {@link RateLimiter.acquire} and
|
|
4
|
-
* await the returned promise before sending each request. Requests that would
|
|
5
|
-
* exceed the configured rate are queued and granted once the window refills.
|
|
6
|
-
*/
|
|
2
|
+
/** Token-bucket rate limiter for outgoing requests. */
|
|
7
3
|
export class RateLimiter {
|
|
8
4
|
maxRequests;
|
|
9
5
|
windowMs;
|
|
@@ -11,9 +7,9 @@ export class RateLimiter {
|
|
|
11
7
|
lastRefill;
|
|
12
8
|
waitQueue = [];
|
|
13
9
|
/**
|
|
14
|
-
*
|
|
10
|
+
* Create a new rate limiter.
|
|
15
11
|
*
|
|
16
|
-
* @param {RateLimitConfig} config - Rate
|
|
12
|
+
* @param {RateLimitConfig} config - Rate limit configuration.
|
|
17
13
|
*/
|
|
18
14
|
constructor(config) {
|
|
19
15
|
validateRateLimitConfig(config);
|
|
@@ -23,10 +19,9 @@ export class RateLimiter {
|
|
|
23
19
|
this.lastRefill = Date.now();
|
|
24
20
|
}
|
|
25
21
|
/**
|
|
26
|
-
*
|
|
27
|
-
* available, or waits until the current window refills.
|
|
22
|
+
* Acquire a token, waiting if the rate limit has been reached.
|
|
28
23
|
*
|
|
29
|
-
* @returns {Promise<void>}
|
|
24
|
+
* @returns {Promise<void>} Promise that resolves when a token is available.
|
|
30
25
|
*/
|
|
31
26
|
async acquire() {
|
|
32
27
|
this.refill();
|
|
@@ -38,7 +33,9 @@ export class RateLimiter {
|
|
|
38
33
|
this.waitQueue.push(resolve);
|
|
39
34
|
const elapsed = Date.now() - this.lastRefill;
|
|
40
35
|
const waitMs = Math.max(1, this.windowMs - elapsed);
|
|
41
|
-
setTimeout(() =>
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
this.drain();
|
|
38
|
+
}, waitMs);
|
|
42
39
|
});
|
|
43
40
|
}
|
|
44
41
|
drain() {
|
|
@@ -51,12 +48,18 @@ export class RateLimiter {
|
|
|
51
48
|
if (this.waitQueue.length > 0) {
|
|
52
49
|
const elapsed = Date.now() - this.lastRefill;
|
|
53
50
|
const waitMs = Math.max(1, this.windowMs - elapsed);
|
|
54
|
-
setTimeout(() =>
|
|
51
|
+
setTimeout(() => {
|
|
52
|
+
this.drain();
|
|
53
|
+
}, waitMs);
|
|
55
54
|
}
|
|
56
55
|
}
|
|
57
56
|
refill() {
|
|
58
57
|
const now = Date.now();
|
|
59
58
|
const elapsed = now - this.lastRefill;
|
|
59
|
+
if (elapsed < 0) {
|
|
60
|
+
this.lastRefill = now;
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
60
63
|
if (elapsed >= this.windowMs) {
|
|
61
64
|
this.tokens = this.maxRequests;
|
|
62
65
|
this.lastRefill = now;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/middleware/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/middleware/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAUhE,uDAAuD;AACvD,MAAM,OAAO,WAAW;IACL,WAAW,CAAS;IACpB,QAAQ,CAAS;IAC1B,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,SAAS,GAAsB,EAAE,CAAC;IAE1C;;;;OAIG;IACH,YAAY,MAAuB;QACjC,uBAAuB,CAAC,MAA4C,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;YACpD,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,EAAE,MAAM,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK;QACX,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAG,CAAC;YACrC,IAAI,EAAE,CAAC;QACT,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;YACpD,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,EAAE,MAAM,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAEO,MAAM;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QACtC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YACtB,OAAO;QACT,CAAC;QACD,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a Retry-After header value into milliseconds.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} value - Raw Retry-After header (seconds or HTTP date).
|
|
5
|
+
* @returns {number|undefined} Delay in milliseconds, or `undefined` if unparseable.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseRetryAfter(value: string): number | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Extract the retry delay from response headers.
|
|
10
|
+
*
|
|
11
|
+
* @param {Record<string, string>} headers - Response headers.
|
|
12
|
+
* @returns {number|undefined} Delay in milliseconds, or `undefined` if no Retry-After header.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getRetryAfterMs(headers: Record<string, string>): number | undefined;
|
|
15
|
+
//# sourceMappingURL=retry-after.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-after.d.ts","sourceRoot":"","sources":["../../src/middleware/retry-after.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAInF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a Retry-After header value into milliseconds.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} value - Raw Retry-After header (seconds or HTTP date).
|
|
5
|
+
* @returns {number|undefined} Delay in milliseconds, or `undefined` if unparseable.
|
|
6
|
+
*/
|
|
7
|
+
export function parseRetryAfter(value) {
|
|
8
|
+
if (!value)
|
|
9
|
+
return undefined;
|
|
10
|
+
const trimmed = value.trim();
|
|
11
|
+
if (/^\d+$/.test(trimmed)) {
|
|
12
|
+
const seconds = parseInt(trimmed, 10);
|
|
13
|
+
if (Number.isFinite(seconds) && seconds >= 0) {
|
|
14
|
+
return seconds * 1000;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const date = new Date(trimmed);
|
|
18
|
+
if (!Number.isNaN(date.getTime())) {
|
|
19
|
+
const delayMs = date.getTime() - Date.now();
|
|
20
|
+
return Math.max(0, delayMs);
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract the retry delay from response headers.
|
|
26
|
+
*
|
|
27
|
+
* @param {Record<string, string>} headers - Response headers.
|
|
28
|
+
* @returns {number|undefined} Delay in milliseconds, or `undefined` if no Retry-After header.
|
|
29
|
+
*/
|
|
30
|
+
export function getRetryAfterMs(headers) {
|
|
31
|
+
const value = headers["retry-after"];
|
|
32
|
+
if (!value)
|
|
33
|
+
return undefined;
|
|
34
|
+
return parseRetryAfter(value);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=retry-after.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-after.js","sourceRoot":"","sources":["../../src/middleware/retry-after.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YAC7C,OAAO,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
import type { RetryConfig } from "../core/request.js";
|
|
2
2
|
import { NLcURLResponse } from "../core/response.js";
|
|
3
3
|
import { type Logger } from "../utils/logger.js";
|
|
4
|
-
/**
|
|
5
|
-
* Carries context about the current retry attempt that is passed to the
|
|
6
|
-
* `execute` callback on each invocation.
|
|
7
|
-
*
|
|
8
|
-
* @typedef {Object} RetryContext
|
|
9
|
-
* @property {number} attempt - Zero-based attempt index (0 = first try).
|
|
10
|
-
* @property {Error} [lastError] - The error thrown by the previous attempt, if any.
|
|
11
|
-
* @property {NLcURLResponse} [lastResponse] - The response from the previous attempt, if any.
|
|
12
|
-
*/
|
|
4
|
+
/** Context passed to each retry attempt. */
|
|
13
5
|
export interface RetryContext {
|
|
6
|
+
/** Current attempt number (1-based). */
|
|
14
7
|
attempt: number;
|
|
8
|
+
/** Error from the previous attempt, if any. */
|
|
15
9
|
lastError?: Error;
|
|
10
|
+
/** Response from the previous attempt, if any. */
|
|
16
11
|
lastResponse?: NLcURLResponse;
|
|
17
12
|
}
|
|
18
13
|
/**
|
|
19
|
-
*
|
|
20
|
-
* back-off and jitter between attempts. Transparent to `AbortError` -- those
|
|
21
|
-
* propagate immediately without retry.
|
|
14
|
+
* Execute a request function with configurable retry logic.
|
|
22
15
|
*
|
|
23
|
-
* @param {RetryConfig
|
|
24
|
-
* @param {(ctx: RetryContext) => Promise<NLcURLResponse>} execute -
|
|
25
|
-
* @param {Logger} [logger] - Optional logger for retry
|
|
26
|
-
* @returns {Promise<NLcURLResponse>}
|
|
27
|
-
* @throws {AbortError} Immediately if the operation is aborted.
|
|
28
|
-
* @throws {Error} Re-throws the last error if all attempts are exhausted.
|
|
16
|
+
* @param {RetryConfig|undefined} config - Retry configuration.
|
|
17
|
+
* @param {(ctx: RetryContext) => Promise<NLcURLResponse>} execute - Function that performs the request attempt.
|
|
18
|
+
* @param {Logger} [logger] - Optional logger for retry events.
|
|
19
|
+
* @returns {Promise<NLcURLResponse>} Final HTTP response after all retries.
|
|
29
20
|
*/
|
|
30
21
|
export declare function withRetry(config: RetryConfig | undefined, execute: (ctx: RetryContext) => Promise<NLcURLResponse>, logger?: Logger): Promise<NLcURLResponse>;
|
|
31
22
|
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/middleware/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,KAAK,MAAM,EAAoB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/middleware/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,KAAK,MAAM,EAAoB,MAAM,oBAAoB,CAAC;AAKnE,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,kDAAkD;IAClD,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AASD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAkDlK"}
|
package/dist/middleware/retry.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AbortError, TLSError, TimeoutError, ConnectionError, ProtocolError } from "../core/errors.js";
|
|
2
2
|
import { getDefaultLogger } from "../utils/logger.js";
|
|
3
|
+
import { getRetryAfterMs } from "./retry-after.js";
|
|
3
4
|
const RETRYABLE_H2_ERROR_CODES = new Set([1, 2, 7, 8, 11, 13]);
|
|
4
5
|
function shouldRetryDefault(error, statusCode) {
|
|
5
6
|
if (error instanceof ConnectionError || error instanceof TimeoutError || error instanceof TLSError)
|
|
@@ -11,16 +12,12 @@ function shouldRetryDefault(error, statusCode) {
|
|
|
11
12
|
return false;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
-
* back-off and jitter between attempts. Transparent to `AbortError` -- those
|
|
16
|
-
* propagate immediately without retry.
|
|
15
|
+
* Execute a request function with configurable retry logic.
|
|
17
16
|
*
|
|
18
|
-
* @param {RetryConfig
|
|
19
|
-
* @param {(ctx: RetryContext) => Promise<NLcURLResponse>} execute -
|
|
20
|
-
* @param {Logger} [logger] - Optional logger for retry
|
|
21
|
-
* @returns {Promise<NLcURLResponse>}
|
|
22
|
-
* @throws {AbortError} Immediately if the operation is aborted.
|
|
23
|
-
* @throws {Error} Re-throws the last error if all attempts are exhausted.
|
|
17
|
+
* @param {RetryConfig|undefined} config - Retry configuration.
|
|
18
|
+
* @param {(ctx: RetryContext) => Promise<NLcURLResponse>} execute - Function that performs the request attempt.
|
|
19
|
+
* @param {Logger} [logger] - Optional logger for retry events.
|
|
20
|
+
* @returns {Promise<NLcURLResponse>} Final HTTP response after all retries.
|
|
24
21
|
*/
|
|
25
22
|
export async function withRetry(config, execute, logger) {
|
|
26
23
|
const log = logger ?? getDefaultLogger();
|
|
@@ -42,6 +39,12 @@ export async function withRetry(config, execute, logger) {
|
|
|
42
39
|
try {
|
|
43
40
|
const response = await execute({ attempt, lastError, lastResponse });
|
|
44
41
|
if (attempt < count && retryOn(null, response.status)) {
|
|
42
|
+
const retryAfterMs = getRetryAfterMs(response.headers);
|
|
43
|
+
if (retryAfterMs !== undefined && retryAfterMs > 0) {
|
|
44
|
+
const cappedDelay = Math.min(retryAfterMs, 300_000);
|
|
45
|
+
log.debug(`retry respecting Retry-After: ${Math.round(cappedDelay)}ms`);
|
|
46
|
+
await sleep(cappedDelay);
|
|
47
|
+
}
|
|
45
48
|
lastResponse = response;
|
|
46
49
|
continue;
|
|
47
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/middleware/retry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAe,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/middleware/retry.ts"],"names":[],"mappings":"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"}
|