recker 1.0.2-0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +0 -2
- package/README.md +121 -72
- package/dist/cache/memory-storage.d.ts.map +1 -1
- package/dist/cache/memory-storage.js +7 -1
- package/dist/constants/http-status.d.ts +74 -0
- package/dist/constants/http-status.d.ts.map +1 -0
- package/dist/constants/http-status.js +156 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -6
- package/dist/cookies/memory-cookie-jar.d.ts +31 -0
- package/dist/cookies/memory-cookie-jar.d.ts.map +1 -0
- package/dist/cookies/memory-cookie-jar.js +210 -0
- package/dist/core/client.d.ts +9 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +252 -53
- package/dist/core/errors.d.ts +18 -2
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +66 -5
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +5 -0
- package/dist/core/request-promise.d.ts.map +1 -1
- package/dist/core/request-promise.js +8 -2
- package/dist/core/request.d.ts +7 -1
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/request.js +32 -0
- package/dist/core/response.d.ts +2 -0
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +44 -19
- package/dist/events/request-events.d.ts +48 -0
- package/dist/events/request-events.d.ts.map +1 -0
- package/dist/events/request-events.js +85 -0
- package/dist/index.d.ts +28 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +16 -5
- package/dist/mcp/contract.d.ts +77 -0
- package/dist/mcp/contract.d.ts.map +1 -0
- package/dist/mcp/contract.js +278 -0
- package/dist/mcp/types.d.ts +1 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/plugins/auth.d.ts +45 -0
- package/dist/plugins/auth.d.ts.map +1 -0
- package/dist/plugins/auth.js +268 -0
- package/dist/plugins/cache.d.ts +7 -1
- package/dist/plugins/cache.d.ts.map +1 -1
- package/dist/plugins/cache.js +470 -49
- package/dist/plugins/circuit-breaker.js +1 -1
- package/dist/plugins/compression.d.ts.map +1 -1
- package/dist/plugins/compression.js +3 -3
- package/dist/plugins/dedup.d.ts.map +1 -1
- package/dist/plugins/dedup.js +2 -1
- package/dist/plugins/graphql.d.ts +4 -3
- package/dist/plugins/graphql.d.ts.map +1 -1
- package/dist/plugins/graphql.js +24 -5
- package/dist/plugins/grpc-web.d.ts +80 -0
- package/dist/plugins/grpc-web.d.ts.map +1 -0
- package/dist/plugins/grpc-web.js +261 -0
- package/dist/plugins/har-player.d.ts.map +1 -1
- package/dist/plugins/har-player.js +11 -2
- package/dist/plugins/hls.d.ts +33 -0
- package/dist/plugins/hls.d.ts.map +1 -0
- package/dist/plugins/hls.js +225 -0
- package/dist/plugins/http2-push.d.ts +64 -0
- package/dist/plugins/http2-push.d.ts.map +1 -0
- package/dist/plugins/http2-push.js +274 -0
- package/dist/plugins/http3.d.ts +76 -0
- package/dist/plugins/http3.d.ts.map +1 -0
- package/dist/plugins/http3.js +231 -0
- package/dist/plugins/interface-rotator.d.ts +10 -0
- package/dist/plugins/interface-rotator.d.ts.map +1 -0
- package/dist/plugins/interface-rotator.js +57 -0
- package/dist/plugins/jsonrpc.d.ts +76 -0
- package/dist/plugins/jsonrpc.d.ts.map +1 -0
- package/dist/plugins/jsonrpc.js +143 -0
- package/dist/plugins/logger.d.ts +8 -5
- package/dist/plugins/logger.d.ts.map +1 -1
- package/dist/plugins/logger.js +66 -30
- package/dist/plugins/odata.d.ts +182 -0
- package/dist/plugins/odata.d.ts.map +1 -0
- package/dist/plugins/odata.js +561 -0
- package/dist/plugins/retry.d.ts +1 -0
- package/dist/plugins/retry.d.ts.map +1 -1
- package/dist/plugins/retry.js +26 -2
- package/dist/plugins/scrape.d.ts +22 -0
- package/dist/plugins/scrape.d.ts.map +1 -0
- package/dist/plugins/scrape.js +87 -0
- package/dist/plugins/soap.d.ts +73 -0
- package/dist/plugins/soap.d.ts.map +1 -0
- package/dist/plugins/soap.js +347 -0
- package/dist/plugins/user-agent.d.ts +8 -0
- package/dist/plugins/user-agent.d.ts.map +1 -0
- package/dist/plugins/user-agent.js +46 -0
- package/dist/plugins/xml.d.ts +10 -0
- package/dist/plugins/xml.d.ts.map +1 -0
- package/dist/plugins/xml.js +194 -0
- package/dist/presets/anthropic.d.ts +7 -0
- package/dist/presets/anthropic.d.ts.map +1 -0
- package/dist/presets/anthropic.js +17 -0
- package/dist/presets/azure-openai.d.ts +9 -0
- package/dist/presets/azure-openai.d.ts.map +1 -0
- package/dist/presets/azure-openai.js +25 -0
- package/dist/presets/cloudflare.d.ts +13 -0
- package/dist/presets/cloudflare.d.ts.map +1 -0
- package/dist/presets/cloudflare.js +39 -0
- package/dist/presets/cohere.d.ts +6 -0
- package/dist/presets/cohere.d.ts.map +1 -0
- package/dist/presets/cohere.js +16 -0
- package/dist/presets/deepseek.d.ts +6 -0
- package/dist/presets/deepseek.d.ts.map +1 -0
- package/dist/presets/deepseek.js +16 -0
- package/dist/presets/digitalocean.d.ts +6 -0
- package/dist/presets/digitalocean.d.ts.map +1 -0
- package/dist/presets/digitalocean.js +16 -0
- package/dist/presets/discord.d.ts +7 -0
- package/dist/presets/discord.d.ts.map +1 -0
- package/dist/presets/discord.js +17 -0
- package/dist/presets/fireworks.d.ts +6 -0
- package/dist/presets/fireworks.d.ts.map +1 -0
- package/dist/presets/fireworks.js +16 -0
- package/dist/presets/gemini.d.ts +6 -0
- package/dist/presets/gemini.d.ts.map +1 -0
- package/dist/presets/gemini.js +16 -0
- package/dist/presets/github.d.ts +7 -0
- package/dist/presets/github.d.ts.map +1 -0
- package/dist/presets/github.js +17 -0
- package/dist/presets/gitlab.d.ts +7 -0
- package/dist/presets/gitlab.d.ts.map +1 -0
- package/dist/presets/gitlab.js +16 -0
- package/dist/presets/groq.d.ts +6 -0
- package/dist/presets/groq.d.ts.map +1 -0
- package/dist/presets/groq.js +16 -0
- package/dist/presets/huggingface.d.ts +6 -0
- package/dist/presets/huggingface.d.ts.map +1 -0
- package/dist/presets/huggingface.js +16 -0
- package/dist/presets/index.d.ts +28 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +27 -0
- package/dist/presets/linear.d.ts +6 -0
- package/dist/presets/linear.d.ts.map +1 -0
- package/dist/presets/linear.js +16 -0
- package/dist/presets/mistral.d.ts +6 -0
- package/dist/presets/mistral.d.ts.map +1 -0
- package/dist/presets/mistral.js +16 -0
- package/dist/presets/notion.d.ts +7 -0
- package/dist/presets/notion.d.ts.map +1 -0
- package/dist/presets/notion.js +17 -0
- package/dist/presets/openai.d.ts +8 -0
- package/dist/presets/openai.d.ts.map +1 -0
- package/dist/presets/openai.js +23 -0
- package/dist/presets/perplexity.d.ts +6 -0
- package/dist/presets/perplexity.d.ts.map +1 -0
- package/dist/presets/perplexity.js +16 -0
- package/dist/presets/registry.d.ts +20 -0
- package/dist/presets/registry.d.ts.map +1 -0
- package/dist/presets/registry.js +311 -0
- package/dist/presets/replicate.d.ts +6 -0
- package/dist/presets/replicate.d.ts.map +1 -0
- package/dist/presets/replicate.js +16 -0
- package/dist/presets/slack.d.ts +6 -0
- package/dist/presets/slack.d.ts.map +1 -0
- package/dist/presets/slack.js +16 -0
- package/dist/presets/stripe.d.ts +8 -0
- package/dist/presets/stripe.d.ts.map +1 -0
- package/dist/presets/stripe.js +23 -0
- package/dist/presets/supabase.d.ts +7 -0
- package/dist/presets/supabase.d.ts.map +1 -0
- package/dist/presets/supabase.js +18 -0
- package/dist/presets/together.d.ts +6 -0
- package/dist/presets/together.d.ts.map +1 -0
- package/dist/presets/together.js +16 -0
- package/dist/presets/twilio.d.ts +7 -0
- package/dist/presets/twilio.d.ts.map +1 -0
- package/dist/presets/twilio.js +17 -0
- package/dist/presets/vercel.d.ts +7 -0
- package/dist/presets/vercel.d.ts.map +1 -0
- package/dist/presets/vercel.js +23 -0
- package/dist/presets/xai.d.ts +7 -0
- package/dist/presets/xai.d.ts.map +1 -0
- package/dist/presets/xai.js +17 -0
- package/dist/protocols/ftp.d.ts +63 -0
- package/dist/protocols/ftp.d.ts.map +1 -0
- package/dist/protocols/ftp.js +388 -0
- package/dist/protocols/index.d.ts +4 -0
- package/dist/protocols/index.d.ts.map +1 -0
- package/dist/protocols/index.js +3 -0
- package/dist/protocols/sftp.d.ts +65 -0
- package/dist/protocols/sftp.d.ts.map +1 -0
- package/dist/protocols/sftp.js +346 -0
- package/dist/protocols/telnet.d.ts +50 -0
- package/dist/protocols/telnet.d.ts.map +1 -0
- package/dist/protocols/telnet.js +139 -0
- package/dist/runner/request-runner.d.ts.map +1 -1
- package/dist/runner/request-runner.js +1 -0
- package/dist/scrape/document.d.ts +44 -0
- package/dist/scrape/document.d.ts.map +1 -0
- package/dist/scrape/document.js +198 -0
- package/dist/scrape/element.d.ts +50 -0
- package/dist/scrape/element.d.ts.map +1 -0
- package/dist/scrape/element.js +176 -0
- package/dist/scrape/extractors.d.ts +17 -0
- package/dist/scrape/extractors.d.ts.map +1 -0
- package/dist/scrape/extractors.js +356 -0
- package/dist/scrape/index.d.ts +5 -0
- package/dist/scrape/index.d.ts.map +1 -0
- package/dist/scrape/index.js +3 -0
- package/dist/scrape/types.d.ts +108 -0
- package/dist/scrape/types.d.ts.map +1 -0
- package/dist/scrape/types.js +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +1 -0
- package/dist/testing/mock.d.ts +58 -0
- package/dist/testing/mock.d.ts.map +1 -0
- package/dist/testing/mock.js +252 -0
- package/dist/transport/fetch.d.ts.map +1 -1
- package/dist/transport/fetch.js +12 -4
- package/dist/transport/undici.d.ts +17 -1
- package/dist/transport/undici.d.ts.map +1 -1
- package/dist/transport/undici.js +708 -47
- package/dist/types/index.d.ts +111 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/logger.d.ts +17 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +66 -0
- package/dist/utils/agent-manager.d.ts.map +1 -1
- package/dist/utils/agent-manager.js +20 -4
- package/dist/utils/body.d.ts.map +1 -1
- package/dist/utils/body.js +14 -2
- package/dist/utils/charset.d.ts +16 -0
- package/dist/utils/charset.d.ts.map +1 -0
- package/dist/utils/charset.js +169 -0
- package/dist/utils/client-pool.d.ts +21 -0
- package/dist/utils/client-pool.d.ts.map +1 -0
- package/dist/utils/client-pool.js +49 -0
- package/dist/utils/concurrency.d.ts.map +1 -1
- package/dist/utils/concurrency.js +8 -4
- package/dist/utils/dns-toolkit.d.ts +13 -0
- package/dist/utils/dns-toolkit.d.ts.map +1 -0
- package/dist/utils/dns-toolkit.js +48 -0
- package/dist/utils/doh.d.ts.map +1 -1
- package/dist/utils/doh.js +16 -3
- package/dist/utils/download.d.ts +15 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +44 -0
- package/dist/utils/env-proxy.d.ts +13 -0
- package/dist/utils/env-proxy.d.ts.map +1 -0
- package/dist/utils/env-proxy.js +105 -0
- package/dist/utils/header-parser.d.ts +15 -1
- package/dist/utils/header-parser.d.ts.map +1 -1
- package/dist/utils/header-parser.js +161 -1
- package/dist/utils/link-header.d.ts +70 -0
- package/dist/utils/link-header.d.ts.map +1 -0
- package/dist/utils/link-header.js +190 -0
- package/dist/utils/progress.d.ts +7 -2
- package/dist/utils/progress.d.ts.map +1 -1
- package/dist/utils/progress.js +48 -15
- package/dist/utils/rdap.d.ts +17 -0
- package/dist/utils/rdap.d.ts.map +1 -0
- package/dist/utils/rdap.js +32 -0
- package/dist/utils/request-pool.d.ts.map +1 -1
- package/dist/utils/request-pool.js +4 -3
- package/dist/utils/sse.d.ts.map +1 -1
- package/dist/utils/sse.js +8 -2
- package/dist/utils/status-codes.d.ts +84 -0
- package/dist/utils/status-codes.d.ts.map +1 -0
- package/dist/utils/status-codes.js +204 -0
- package/dist/utils/streaming.d.ts.map +1 -1
- package/dist/utils/streaming.js +1 -0
- package/dist/utils/tls-inspector.d.ts +21 -0
- package/dist/utils/tls-inspector.d.ts.map +1 -0
- package/dist/utils/tls-inspector.js +39 -0
- package/dist/utils/try-fn.d.ts.map +1 -1
- package/dist/utils/try-fn.js +11 -5
- package/dist/utils/upload.d.ts +1 -0
- package/dist/utils/upload.d.ts.map +1 -1
- package/dist/utils/upload.js +20 -3
- package/dist/utils/user-agent.d.ts +9 -9
- package/dist/utils/user-agent.js +9 -9
- package/dist/utils/whois.d.ts.map +1 -1
- package/dist/utils/whois.js +11 -2
- package/dist/websocket/client.d.ts +29 -1
- package/dist/websocket/client.d.ts.map +1 -1
- package/dist/websocket/client.js +145 -13
- package/package.json +45 -8
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
export var StatusCode;
|
|
2
|
+
(function (StatusCode) {
|
|
3
|
+
StatusCode[StatusCode["CONTINUE"] = 100] = "CONTINUE";
|
|
4
|
+
StatusCode[StatusCode["SWITCHING_PROTOCOLS"] = 101] = "SWITCHING_PROTOCOLS";
|
|
5
|
+
StatusCode[StatusCode["PROCESSING"] = 102] = "PROCESSING";
|
|
6
|
+
StatusCode[StatusCode["EARLY_HINTS"] = 103] = "EARLY_HINTS";
|
|
7
|
+
StatusCode[StatusCode["OK"] = 200] = "OK";
|
|
8
|
+
StatusCode[StatusCode["CREATED"] = 201] = "CREATED";
|
|
9
|
+
StatusCode[StatusCode["ACCEPTED"] = 202] = "ACCEPTED";
|
|
10
|
+
StatusCode[StatusCode["NON_AUTHORITATIVE_INFORMATION"] = 203] = "NON_AUTHORITATIVE_INFORMATION";
|
|
11
|
+
StatusCode[StatusCode["NO_CONTENT"] = 204] = "NO_CONTENT";
|
|
12
|
+
StatusCode[StatusCode["RESET_CONTENT"] = 205] = "RESET_CONTENT";
|
|
13
|
+
StatusCode[StatusCode["PARTIAL_CONTENT"] = 206] = "PARTIAL_CONTENT";
|
|
14
|
+
StatusCode[StatusCode["MULTI_STATUS"] = 207] = "MULTI_STATUS";
|
|
15
|
+
StatusCode[StatusCode["ALREADY_REPORTED"] = 208] = "ALREADY_REPORTED";
|
|
16
|
+
StatusCode[StatusCode["IM_USED"] = 226] = "IM_USED";
|
|
17
|
+
StatusCode[StatusCode["MULTIPLE_CHOICES"] = 300] = "MULTIPLE_CHOICES";
|
|
18
|
+
StatusCode[StatusCode["MOVED_PERMANENTLY"] = 301] = "MOVED_PERMANENTLY";
|
|
19
|
+
StatusCode[StatusCode["FOUND"] = 302] = "FOUND";
|
|
20
|
+
StatusCode[StatusCode["SEE_OTHER"] = 303] = "SEE_OTHER";
|
|
21
|
+
StatusCode[StatusCode["NOT_MODIFIED"] = 304] = "NOT_MODIFIED";
|
|
22
|
+
StatusCode[StatusCode["USE_PROXY"] = 305] = "USE_PROXY";
|
|
23
|
+
StatusCode[StatusCode["TEMPORARY_REDIRECT"] = 307] = "TEMPORARY_REDIRECT";
|
|
24
|
+
StatusCode[StatusCode["PERMANENT_REDIRECT"] = 308] = "PERMANENT_REDIRECT";
|
|
25
|
+
StatusCode[StatusCode["BAD_REQUEST"] = 400] = "BAD_REQUEST";
|
|
26
|
+
StatusCode[StatusCode["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
|
|
27
|
+
StatusCode[StatusCode["PAYMENT_REQUIRED"] = 402] = "PAYMENT_REQUIRED";
|
|
28
|
+
StatusCode[StatusCode["FORBIDDEN"] = 403] = "FORBIDDEN";
|
|
29
|
+
StatusCode[StatusCode["NOT_FOUND"] = 404] = "NOT_FOUND";
|
|
30
|
+
StatusCode[StatusCode["METHOD_NOT_ALLOWED"] = 405] = "METHOD_NOT_ALLOWED";
|
|
31
|
+
StatusCode[StatusCode["NOT_ACCEPTABLE"] = 406] = "NOT_ACCEPTABLE";
|
|
32
|
+
StatusCode[StatusCode["PROXY_AUTHENTICATION_REQUIRED"] = 407] = "PROXY_AUTHENTICATION_REQUIRED";
|
|
33
|
+
StatusCode[StatusCode["REQUEST_TIMEOUT"] = 408] = "REQUEST_TIMEOUT";
|
|
34
|
+
StatusCode[StatusCode["CONFLICT"] = 409] = "CONFLICT";
|
|
35
|
+
StatusCode[StatusCode["GONE"] = 410] = "GONE";
|
|
36
|
+
StatusCode[StatusCode["LENGTH_REQUIRED"] = 411] = "LENGTH_REQUIRED";
|
|
37
|
+
StatusCode[StatusCode["PRECONDITION_FAILED"] = 412] = "PRECONDITION_FAILED";
|
|
38
|
+
StatusCode[StatusCode["PAYLOAD_TOO_LARGE"] = 413] = "PAYLOAD_TOO_LARGE";
|
|
39
|
+
StatusCode[StatusCode["URI_TOO_LONG"] = 414] = "URI_TOO_LONG";
|
|
40
|
+
StatusCode[StatusCode["UNSUPPORTED_MEDIA_TYPE"] = 415] = "UNSUPPORTED_MEDIA_TYPE";
|
|
41
|
+
StatusCode[StatusCode["RANGE_NOT_SATISFIABLE"] = 416] = "RANGE_NOT_SATISFIABLE";
|
|
42
|
+
StatusCode[StatusCode["EXPECTATION_FAILED"] = 417] = "EXPECTATION_FAILED";
|
|
43
|
+
StatusCode[StatusCode["IM_A_TEAPOT"] = 418] = "IM_A_TEAPOT";
|
|
44
|
+
StatusCode[StatusCode["MISDIRECTED_REQUEST"] = 421] = "MISDIRECTED_REQUEST";
|
|
45
|
+
StatusCode[StatusCode["UNPROCESSABLE_ENTITY"] = 422] = "UNPROCESSABLE_ENTITY";
|
|
46
|
+
StatusCode[StatusCode["LOCKED"] = 423] = "LOCKED";
|
|
47
|
+
StatusCode[StatusCode["FAILED_DEPENDENCY"] = 424] = "FAILED_DEPENDENCY";
|
|
48
|
+
StatusCode[StatusCode["TOO_EARLY"] = 425] = "TOO_EARLY";
|
|
49
|
+
StatusCode[StatusCode["UPGRADE_REQUIRED"] = 426] = "UPGRADE_REQUIRED";
|
|
50
|
+
StatusCode[StatusCode["PRECONDITION_REQUIRED"] = 428] = "PRECONDITION_REQUIRED";
|
|
51
|
+
StatusCode[StatusCode["TOO_MANY_REQUESTS"] = 429] = "TOO_MANY_REQUESTS";
|
|
52
|
+
StatusCode[StatusCode["REQUEST_HEADER_FIELDS_TOO_LARGE"] = 431] = "REQUEST_HEADER_FIELDS_TOO_LARGE";
|
|
53
|
+
StatusCode[StatusCode["UNAVAILABLE_FOR_LEGAL_REASONS"] = 451] = "UNAVAILABLE_FOR_LEGAL_REASONS";
|
|
54
|
+
StatusCode[StatusCode["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
|
|
55
|
+
StatusCode[StatusCode["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED";
|
|
56
|
+
StatusCode[StatusCode["BAD_GATEWAY"] = 502] = "BAD_GATEWAY";
|
|
57
|
+
StatusCode[StatusCode["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE";
|
|
58
|
+
StatusCode[StatusCode["GATEWAY_TIMEOUT"] = 504] = "GATEWAY_TIMEOUT";
|
|
59
|
+
StatusCode[StatusCode["HTTP_VERSION_NOT_SUPPORTED"] = 505] = "HTTP_VERSION_NOT_SUPPORTED";
|
|
60
|
+
StatusCode[StatusCode["VARIANT_ALSO_NEGOTIATES"] = 506] = "VARIANT_ALSO_NEGOTIATES";
|
|
61
|
+
StatusCode[StatusCode["INSUFFICIENT_STORAGE"] = 507] = "INSUFFICIENT_STORAGE";
|
|
62
|
+
StatusCode[StatusCode["LOOP_DETECTED"] = 508] = "LOOP_DETECTED";
|
|
63
|
+
StatusCode[StatusCode["NOT_EXTENDED"] = 510] = "NOT_EXTENDED";
|
|
64
|
+
StatusCode[StatusCode["NETWORK_AUTHENTICATION_REQUIRED"] = 511] = "NETWORK_AUTHENTICATION_REQUIRED";
|
|
65
|
+
})(StatusCode || (StatusCode = {}));
|
|
66
|
+
export const STATUS_TEXT = {
|
|
67
|
+
[StatusCode.CONTINUE]: 'Continue',
|
|
68
|
+
[StatusCode.SWITCHING_PROTOCOLS]: 'Switching Protocols',
|
|
69
|
+
[StatusCode.PROCESSING]: 'Processing',
|
|
70
|
+
[StatusCode.EARLY_HINTS]: 'Early Hints',
|
|
71
|
+
[StatusCode.OK]: 'OK',
|
|
72
|
+
[StatusCode.CREATED]: 'Created',
|
|
73
|
+
[StatusCode.ACCEPTED]: 'Accepted',
|
|
74
|
+
[StatusCode.NON_AUTHORITATIVE_INFORMATION]: 'Non-Authoritative Information',
|
|
75
|
+
[StatusCode.NO_CONTENT]: 'No Content',
|
|
76
|
+
[StatusCode.RESET_CONTENT]: 'Reset Content',
|
|
77
|
+
[StatusCode.PARTIAL_CONTENT]: 'Partial Content',
|
|
78
|
+
[StatusCode.MULTI_STATUS]: 'Multi-Status',
|
|
79
|
+
[StatusCode.ALREADY_REPORTED]: 'Already Reported',
|
|
80
|
+
[StatusCode.IM_USED]: 'IM Used',
|
|
81
|
+
[StatusCode.MULTIPLE_CHOICES]: 'Multiple Choices',
|
|
82
|
+
[StatusCode.MOVED_PERMANENTLY]: 'Moved Permanently',
|
|
83
|
+
[StatusCode.FOUND]: 'Found',
|
|
84
|
+
[StatusCode.SEE_OTHER]: 'See Other',
|
|
85
|
+
[StatusCode.NOT_MODIFIED]: 'Not Modified',
|
|
86
|
+
[StatusCode.USE_PROXY]: 'Use Proxy',
|
|
87
|
+
[StatusCode.TEMPORARY_REDIRECT]: 'Temporary Redirect',
|
|
88
|
+
[StatusCode.PERMANENT_REDIRECT]: 'Permanent Redirect',
|
|
89
|
+
[StatusCode.BAD_REQUEST]: 'Bad Request',
|
|
90
|
+
[StatusCode.UNAUTHORIZED]: 'Unauthorized',
|
|
91
|
+
[StatusCode.PAYMENT_REQUIRED]: 'Payment Required',
|
|
92
|
+
[StatusCode.FORBIDDEN]: 'Forbidden',
|
|
93
|
+
[StatusCode.NOT_FOUND]: 'Not Found',
|
|
94
|
+
[StatusCode.METHOD_NOT_ALLOWED]: 'Method Not Allowed',
|
|
95
|
+
[StatusCode.NOT_ACCEPTABLE]: 'Not Acceptable',
|
|
96
|
+
[StatusCode.PROXY_AUTHENTICATION_REQUIRED]: 'Proxy Authentication Required',
|
|
97
|
+
[StatusCode.REQUEST_TIMEOUT]: 'Request Timeout',
|
|
98
|
+
[StatusCode.CONFLICT]: 'Conflict',
|
|
99
|
+
[StatusCode.GONE]: 'Gone',
|
|
100
|
+
[StatusCode.LENGTH_REQUIRED]: 'Length Required',
|
|
101
|
+
[StatusCode.PRECONDITION_FAILED]: 'Precondition Failed',
|
|
102
|
+
[StatusCode.PAYLOAD_TOO_LARGE]: 'Payload Too Large',
|
|
103
|
+
[StatusCode.URI_TOO_LONG]: 'URI Too Long',
|
|
104
|
+
[StatusCode.UNSUPPORTED_MEDIA_TYPE]: 'Unsupported Media Type',
|
|
105
|
+
[StatusCode.RANGE_NOT_SATISFIABLE]: 'Range Not Satisfiable',
|
|
106
|
+
[StatusCode.EXPECTATION_FAILED]: 'Expectation Failed',
|
|
107
|
+
[StatusCode.IM_A_TEAPOT]: "I'm a teapot",
|
|
108
|
+
[StatusCode.MISDIRECTED_REQUEST]: 'Misdirected Request',
|
|
109
|
+
[StatusCode.UNPROCESSABLE_ENTITY]: 'Unprocessable Entity',
|
|
110
|
+
[StatusCode.LOCKED]: 'Locked',
|
|
111
|
+
[StatusCode.FAILED_DEPENDENCY]: 'Failed Dependency',
|
|
112
|
+
[StatusCode.TOO_EARLY]: 'Too Early',
|
|
113
|
+
[StatusCode.UPGRADE_REQUIRED]: 'Upgrade Required',
|
|
114
|
+
[StatusCode.PRECONDITION_REQUIRED]: 'Precondition Required',
|
|
115
|
+
[StatusCode.TOO_MANY_REQUESTS]: 'Too Many Requests',
|
|
116
|
+
[StatusCode.REQUEST_HEADER_FIELDS_TOO_LARGE]: 'Request Header Fields Too Large',
|
|
117
|
+
[StatusCode.UNAVAILABLE_FOR_LEGAL_REASONS]: 'Unavailable For Legal Reasons',
|
|
118
|
+
[StatusCode.INTERNAL_SERVER_ERROR]: 'Internal Server Error',
|
|
119
|
+
[StatusCode.NOT_IMPLEMENTED]: 'Not Implemented',
|
|
120
|
+
[StatusCode.BAD_GATEWAY]: 'Bad Gateway',
|
|
121
|
+
[StatusCode.SERVICE_UNAVAILABLE]: 'Service Unavailable',
|
|
122
|
+
[StatusCode.GATEWAY_TIMEOUT]: 'Gateway Timeout',
|
|
123
|
+
[StatusCode.HTTP_VERSION_NOT_SUPPORTED]: 'HTTP Version Not Supported',
|
|
124
|
+
[StatusCode.VARIANT_ALSO_NEGOTIATES]: 'Variant Also Negotiates',
|
|
125
|
+
[StatusCode.INSUFFICIENT_STORAGE]: 'Insufficient Storage',
|
|
126
|
+
[StatusCode.LOOP_DETECTED]: 'Loop Detected',
|
|
127
|
+
[StatusCode.NOT_EXTENDED]: 'Not Extended',
|
|
128
|
+
[StatusCode.NETWORK_AUTHENTICATION_REQUIRED]: 'Network Authentication Required',
|
|
129
|
+
};
|
|
130
|
+
export const status = {
|
|
131
|
+
isInformational(code) {
|
|
132
|
+
return code >= 100 && code < 200;
|
|
133
|
+
},
|
|
134
|
+
isSuccess(code) {
|
|
135
|
+
return code >= 200 && code < 300;
|
|
136
|
+
},
|
|
137
|
+
isRedirect(code) {
|
|
138
|
+
return code >= 300 && code < 400;
|
|
139
|
+
},
|
|
140
|
+
isClientError(code) {
|
|
141
|
+
return code >= 400 && code < 500;
|
|
142
|
+
},
|
|
143
|
+
isServerError(code) {
|
|
144
|
+
return code >= 500 && code < 600;
|
|
145
|
+
},
|
|
146
|
+
isError(code) {
|
|
147
|
+
return code >= 400 && code < 600;
|
|
148
|
+
},
|
|
149
|
+
isOk(code) {
|
|
150
|
+
return this.isSuccess(code);
|
|
151
|
+
},
|
|
152
|
+
getText(code) {
|
|
153
|
+
return STATUS_TEXT[code];
|
|
154
|
+
},
|
|
155
|
+
getCategory(code) {
|
|
156
|
+
if (this.isInformational(code))
|
|
157
|
+
return 'Informational';
|
|
158
|
+
if (this.isSuccess(code))
|
|
159
|
+
return 'Success';
|
|
160
|
+
if (this.isRedirect(code))
|
|
161
|
+
return 'Redirection';
|
|
162
|
+
if (this.isClientError(code))
|
|
163
|
+
return 'Client Error';
|
|
164
|
+
if (this.isServerError(code))
|
|
165
|
+
return 'Server Error';
|
|
166
|
+
return 'Unknown';
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
export const statusGroups = {
|
|
170
|
+
success: [
|
|
171
|
+
StatusCode.OK,
|
|
172
|
+
StatusCode.CREATED,
|
|
173
|
+
StatusCode.ACCEPTED,
|
|
174
|
+
StatusCode.NO_CONTENT,
|
|
175
|
+
],
|
|
176
|
+
redirect: [
|
|
177
|
+
StatusCode.MOVED_PERMANENTLY,
|
|
178
|
+
StatusCode.FOUND,
|
|
179
|
+
StatusCode.SEE_OTHER,
|
|
180
|
+
StatusCode.TEMPORARY_REDIRECT,
|
|
181
|
+
StatusCode.PERMANENT_REDIRECT,
|
|
182
|
+
],
|
|
183
|
+
clientError: [
|
|
184
|
+
StatusCode.BAD_REQUEST,
|
|
185
|
+
StatusCode.UNAUTHORIZED,
|
|
186
|
+
StatusCode.FORBIDDEN,
|
|
187
|
+
StatusCode.NOT_FOUND,
|
|
188
|
+
StatusCode.METHOD_NOT_ALLOWED,
|
|
189
|
+
StatusCode.CONFLICT,
|
|
190
|
+
StatusCode.TOO_MANY_REQUESTS,
|
|
191
|
+
],
|
|
192
|
+
serverError: [
|
|
193
|
+
StatusCode.INTERNAL_SERVER_ERROR,
|
|
194
|
+
StatusCode.BAD_GATEWAY,
|
|
195
|
+
StatusCode.SERVICE_UNAVAILABLE,
|
|
196
|
+
StatusCode.GATEWAY_TIMEOUT,
|
|
197
|
+
],
|
|
198
|
+
retryable: [
|
|
199
|
+
StatusCode.TOO_MANY_REQUESTS,
|
|
200
|
+
StatusCode.BAD_GATEWAY,
|
|
201
|
+
StatusCode.SERVICE_UNAVAILABLE,
|
|
202
|
+
StatusCode.GATEWAY_TIMEOUT,
|
|
203
|
+
],
|
|
204
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/utils/streaming.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AAOpD,wBAAgB,eAAe,CAAC,SAAS,EAAE,cAAc,GAAG,QAAQ,CAsBnE;AAMD,wBAAgB,eAAe,CAAC,UAAU,EAAE,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAoBhF;AAMD,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,EAChB,OAAO,GAAE,qBAA0B,GAClC,QAAQ,CA6BV;AAMD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,MAAM,CAAC,cAAc,EAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAMf;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ;;;
|
|
1
|
+
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/utils/streaming.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AAOpD,wBAAgB,eAAe,CAAC,SAAS,EAAE,cAAc,GAAG,QAAQ,CAsBnE;AAMD,wBAAgB,eAAe,CAAC,UAAU,EAAE,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAoBhF;AAMD,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,EAChB,OAAO,GAAE,qBAA0B,GAClC,QAAQ,CA6BV;AAMD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,MAAM,CAAC,cAAc,EAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAMf;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ;;;EAclD"}
|
package/dist/utils/streaming.js
CHANGED
|
@@ -73,6 +73,7 @@ export async function pipeStream(source, destination, options = {}) {
|
|
|
73
73
|
export function createUploadStream(source) {
|
|
74
74
|
const passThrough = new PassThrough();
|
|
75
75
|
source.pipe(passThrough);
|
|
76
|
+
source.on('error', (err) => passThrough.destroy(err));
|
|
76
77
|
return {
|
|
77
78
|
stream: nodeToWebStream(passThrough),
|
|
78
79
|
promise: new Promise((resolve, reject) => {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ConnectionOptions } from 'node:tls';
|
|
2
|
+
export interface TLSInfo {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
validFrom: Date;
|
|
5
|
+
validTo: Date;
|
|
6
|
+
daysRemaining: number;
|
|
7
|
+
issuer: Record<string, string>;
|
|
8
|
+
subject: Record<string, string>;
|
|
9
|
+
fingerprint: string;
|
|
10
|
+
fingerprint256: string;
|
|
11
|
+
serialNumber: string;
|
|
12
|
+
protocol: string | null;
|
|
13
|
+
cipher: {
|
|
14
|
+
name: string;
|
|
15
|
+
version: string;
|
|
16
|
+
} | null;
|
|
17
|
+
authorized: boolean;
|
|
18
|
+
authorizationError?: Error;
|
|
19
|
+
}
|
|
20
|
+
export declare function inspectTLS(host: string, port?: number, options?: ConnectionOptions): Promise<TLSInfo>;
|
|
21
|
+
//# sourceMappingURL=tls-inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tls-inspector.d.ts","sourceRoot":"","sources":["../../src/utils/tls-inspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEjE,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;IACT,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAY,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CA4C9G"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { connect } from 'node:tls';
|
|
2
|
+
export function inspectTLS(host, port = 443, options = {}) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const socket = connect(port, host, { ...options, servername: host }, () => {
|
|
5
|
+
const cert = socket.getPeerCertificate();
|
|
6
|
+
if (!cert || Object.keys(cert).length === 0) {
|
|
7
|
+
socket.end();
|
|
8
|
+
return reject(new Error('No certificate provided by peer'));
|
|
9
|
+
}
|
|
10
|
+
const validFrom = new Date(cert.valid_from);
|
|
11
|
+
const validTo = new Date(cert.valid_to);
|
|
12
|
+
const now = new Date();
|
|
13
|
+
const daysRemaining = Math.floor((validTo.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
|
|
14
|
+
const info = {
|
|
15
|
+
valid: now >= validFrom && now <= validTo,
|
|
16
|
+
validFrom,
|
|
17
|
+
validTo,
|
|
18
|
+
daysRemaining,
|
|
19
|
+
issuer: cert.issuer,
|
|
20
|
+
subject: cert.subject,
|
|
21
|
+
fingerprint: cert.fingerprint,
|
|
22
|
+
fingerprint256: cert.fingerprint256,
|
|
23
|
+
serialNumber: cert.serialNumber,
|
|
24
|
+
protocol: socket.getProtocol(),
|
|
25
|
+
cipher: socket.getCipher(),
|
|
26
|
+
authorized: socket.authorized,
|
|
27
|
+
authorizationError: socket.authorizationError
|
|
28
|
+
};
|
|
29
|
+
socket.end();
|
|
30
|
+
resolve(info);
|
|
31
|
+
});
|
|
32
|
+
socket.on('error', (err) => {
|
|
33
|
+
reject(err);
|
|
34
|
+
});
|
|
35
|
+
socket.setTimeout(5000, () => {
|
|
36
|
+
socket.destroy(new Error('TLS connection timed out'));
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"try-fn.d.ts","sourceRoot":"","sources":["../../src/utils/try-fn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"try-fn.d.ts","sourceRoot":"","sources":["../../src/utils/try-fn.ts"],"names":[],"mappings":"AAuBA,wBAAgB,KAAK,CAAC,CAAC,EACrB,WAAW,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAC3D,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CA6D1F;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAOhF;AAED,eAAe,KAAK,CAAC"}
|
package/dist/utils/try-fn.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { ReckerError } from '../core/errors.js';
|
|
1
2
|
export function tryFn(fnOrPromise) {
|
|
2
3
|
if (fnOrPromise == null) {
|
|
3
|
-
const err = new
|
|
4
|
+
const err = new ReckerError('fnOrPromise cannot be null or undefined', undefined, undefined, ['Pass a valid function or promise to tryFn.', 'Check the caller to ensure an undefined value is not passed.']);
|
|
4
5
|
err.stack = new Error().stack;
|
|
5
6
|
return [false, err, undefined];
|
|
6
7
|
}
|
|
@@ -23,20 +24,20 @@ export function tryFn(fnOrPromise) {
|
|
|
23
24
|
catch (_) { }
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
|
-
return [false, error
|
|
27
|
+
return [false, wrapUnknownError(error, 'Function threw an error'), undefined];
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
30
|
return [true, null, result];
|
|
30
31
|
}
|
|
31
32
|
catch (error) {
|
|
32
|
-
return [false, error
|
|
33
|
+
return [false, wrapUnknownError(error, 'Function threw an error'), undefined];
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
if (typeof fnOrPromise.then === 'function') {
|
|
36
37
|
return Promise.resolve(fnOrPromise)
|
|
37
38
|
.then((data) => [true, null, data])
|
|
38
39
|
.catch((error) => {
|
|
39
|
-
return [false, error
|
|
40
|
+
return [false, wrapUnknownError(error, 'Promise rejected'), undefined];
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
43
|
return [true, null, fnOrPromise];
|
|
@@ -47,7 +48,12 @@ export function tryFnSync(fn) {
|
|
|
47
48
|
return [true, null, result];
|
|
48
49
|
}
|
|
49
50
|
catch (err) {
|
|
50
|
-
return [false, err
|
|
51
|
+
return [false, wrapUnknownError(err, 'Synchronous function threw an error'), undefined];
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
export default tryFn;
|
|
55
|
+
function wrapUnknownError(err, context) {
|
|
56
|
+
if (err instanceof Error)
|
|
57
|
+
return err;
|
|
58
|
+
return new ReckerError(`${context}: ${String(err)}`, undefined, undefined, ['Inspect the original value being thrown.', 'Ensure errors are instances of Error or ReckerError.', 'Add contextual information when throwing custom errors.']);
|
|
59
|
+
}
|
package/dist/utils/upload.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface UploadOptions {
|
|
|
5
5
|
concurrency?: number;
|
|
6
6
|
uploadChunk: (chunk: Buffer, index: number, total: number) => Promise<void>;
|
|
7
7
|
onProgress?: (loaded: number, total: number) => void;
|
|
8
|
+
resumeFromChunk?: number;
|
|
8
9
|
}
|
|
9
10
|
export declare function uploadParallel(options: UploadOptions): Promise<void>;
|
|
10
11
|
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/utils/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/utils/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAKrD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,iBAiF1D"}
|
package/dist/utils/upload.js
CHANGED
|
@@ -2,7 +2,7 @@ export async function uploadParallel(options) {
|
|
|
2
2
|
const chunkSize = options.chunkSize || 5 * 1024 * 1024;
|
|
3
3
|
const concurrency = options.concurrency || 3;
|
|
4
4
|
let buffer = Buffer.alloc(0);
|
|
5
|
-
let chunkIndex = 0;
|
|
5
|
+
let chunkIndex = options.resumeFromChunk || 0;
|
|
6
6
|
let loaded = 0;
|
|
7
7
|
const queue = [];
|
|
8
8
|
const processChunk = async (chunk, idx) => {
|
|
@@ -13,7 +13,10 @@ export async function uploadParallel(options) {
|
|
|
13
13
|
};
|
|
14
14
|
if (Buffer.isBuffer(options.file)) {
|
|
15
15
|
const total = options.file.length;
|
|
16
|
-
|
|
16
|
+
let start = (options.resumeFromChunk ?? 0) * chunkSize;
|
|
17
|
+
if (start > total)
|
|
18
|
+
start = total;
|
|
19
|
+
for (let i = start; i < total; i += chunkSize) {
|
|
17
20
|
const chunk = options.file.slice(i, i + chunkSize);
|
|
18
21
|
const p = processChunk(chunk, chunkIndex++);
|
|
19
22
|
queue.push(p);
|
|
@@ -24,8 +27,22 @@ export async function uploadParallel(options) {
|
|
|
24
27
|
await Promise.all(queue);
|
|
25
28
|
return;
|
|
26
29
|
}
|
|
30
|
+
let bytesToSkip = (options.resumeFromChunk ?? 0) * chunkSize;
|
|
27
31
|
for await (const chunk of options.file) {
|
|
28
|
-
|
|
32
|
+
if (bytesToSkip > 0) {
|
|
33
|
+
const slice = chunk;
|
|
34
|
+
if (bytesToSkip >= slice.length) {
|
|
35
|
+
bytesToSkip -= slice.length;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
buffer = Buffer.concat([buffer, slice.slice(bytesToSkip)]);
|
|
40
|
+
bytesToSkip = 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
buffer = Buffer.concat([buffer, chunk]);
|
|
45
|
+
}
|
|
29
46
|
while (buffer.length >= chunkSize) {
|
|
30
47
|
const chunkToUpload = buffer.slice(0, chunkSize);
|
|
31
48
|
buffer = buffer.slice(chunkSize);
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
export declare function getDefaultUserAgent(): string;
|
|
2
2
|
export declare const USER_AGENT_PRESETS: {
|
|
3
3
|
readonly chrome_windows: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
|
|
4
|
-
readonly chrome_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X
|
|
5
|
-
readonly chrome_linux: "Mozilla/5.0 (X11; Linux
|
|
4
|
+
readonly chrome_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
|
|
5
|
+
readonly chrome_linux: "Mozilla/5.0 (X11; Linux x8664) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
|
|
6
6
|
readonly firefox_windows: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0";
|
|
7
7
|
readonly firefox_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0";
|
|
8
|
-
readonly firefox_linux: "Mozilla/5.0 (X11; Linux
|
|
9
|
-
readonly safari_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X
|
|
8
|
+
readonly firefox_linux: "Mozilla/5.0 (X11; Linux x8664; rv:121.0) Gecko/20100101 Firefox/121.0";
|
|
9
|
+
readonly safari_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15";
|
|
10
10
|
readonly edge_windows: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0";
|
|
11
|
-
readonly edge_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X
|
|
11
|
+
readonly edge_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0";
|
|
12
12
|
readonly opera_windows: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/105.0.0.0";
|
|
13
|
-
readonly opera_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X
|
|
14
|
-
readonly safari_iphone: "Mozilla/5.0 (iPhone; CPU iPhone OS
|
|
15
|
-
readonly safari_ipad: "Mozilla/5.0 (iPad; CPU OS
|
|
16
|
-
readonly chrome_ios: "Mozilla/5.0 (iPhone; CPU iPhone OS
|
|
13
|
+
readonly opera_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/105.0.0.0";
|
|
14
|
+
readonly safari_iphone: "Mozilla/5.0 (iPhone; CPU iPhone OS 170 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
|
|
15
|
+
readonly safari_ipad: "Mozilla/5.0 (iPad; CPU OS 170 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
|
|
16
|
+
readonly chrome_ios: "Mozilla/5.0 (iPhone; CPU iPhone OS 170 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/120.0.6099.119 Mobile/15E148 Safari/604.1";
|
|
17
17
|
readonly chrome_android: "Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.144 Mobile Safari/537.36";
|
|
18
18
|
readonly chrome_android_tablet: "Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.144 Safari/537.36";
|
|
19
19
|
readonly firefox_android: "Mozilla/5.0 (Android 14; Mobile; rv:121.0) Gecko/121.0 Firefox/121.0";
|
package/dist/utils/user-agent.js
CHANGED
|
@@ -15,19 +15,19 @@ export function getDefaultUserAgent() {
|
|
|
15
15
|
}
|
|
16
16
|
export const USER_AGENT_PRESETS = {
|
|
17
17
|
chrome_windows: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
18
|
-
chrome_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X
|
|
19
|
-
chrome_linux: 'Mozilla/5.0 (X11; Linux
|
|
18
|
+
chrome_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
19
|
+
chrome_linux: 'Mozilla/5.0 (X11; Linux x8664) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
20
20
|
firefox_windows: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0',
|
|
21
21
|
firefox_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0',
|
|
22
|
-
firefox_linux: 'Mozilla/5.0 (X11; Linux
|
|
23
|
-
safari_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X
|
|
22
|
+
firefox_linux: 'Mozilla/5.0 (X11; Linux x8664; rv:121.0) Gecko/20100101 Firefox/121.0',
|
|
23
|
+
safari_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15',
|
|
24
24
|
edge_windows: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
|
|
25
|
-
edge_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X
|
|
25
|
+
edge_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
|
|
26
26
|
opera_windows: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/105.0.0.0',
|
|
27
|
-
opera_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X
|
|
28
|
-
safari_iphone: 'Mozilla/5.0 (iPhone; CPU iPhone OS
|
|
29
|
-
safari_ipad: 'Mozilla/5.0 (iPad; CPU OS
|
|
30
|
-
chrome_ios: 'Mozilla/5.0 (iPhone; CPU iPhone OS
|
|
27
|
+
opera_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/105.0.0.0',
|
|
28
|
+
safari_iphone: 'Mozilla/5.0 (iPhone; CPU iPhone OS 170 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
|
|
29
|
+
safari_ipad: 'Mozilla/5.0 (iPad; CPU OS 170 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
|
|
30
|
+
chrome_ios: 'Mozilla/5.0 (iPhone; CPU iPhone OS 170 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/120.0.6099.119 Mobile/15E148 Safari/604.1',
|
|
31
31
|
chrome_android: 'Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.144 Mobile Safari/537.36',
|
|
32
32
|
chrome_android_tablet: 'Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.144 Safari/537.36',
|
|
33
33
|
firefox_android: 'Mozilla/5.0 (Android 14; Mobile; rv:121.0) Gecko/121.0 Firefox/121.0',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whois.d.ts","sourceRoot":"","sources":["../../src/utils/whois.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"whois.d.ts","sourceRoot":"","sources":["../../src/utils/whois.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAK3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAKhB,IAAI,CAAC,EAAE,MAAM,CAAC;IAMd,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAI1B,GAAG,EAAE,MAAM,CAAC;IAKZ,KAAK,EAAE,MAAM,CAAC;IAKd,MAAM,EAAE,MAAM,CAAC;IAKf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CACzC;AA8LD,wBAAsB,KAAK,CACzB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAMD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC,CAoBlB"}
|
package/dist/utils/whois.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createConnection } from 'net';
|
|
2
|
+
import { ReckerError } from '../core/errors.js';
|
|
2
3
|
const DEFAULT_SERVERS = {
|
|
3
4
|
'com': 'whois.verisign-grs.com',
|
|
4
5
|
'net': 'whois.verisign-grs.com',
|
|
@@ -101,7 +102,11 @@ async function queryWhoisServer(server, query, port, timeout) {
|
|
|
101
102
|
let socket = null;
|
|
102
103
|
const timeoutId = setTimeout(() => {
|
|
103
104
|
socket?.destroy();
|
|
104
|
-
reject(new
|
|
105
|
+
reject(new ReckerError(`WHOIS query timed out after ${timeout}ms`, undefined, undefined, [
|
|
106
|
+
'Increase the WHOIS timeout for slower registries.',
|
|
107
|
+
'Check network connectivity to the WHOIS server.',
|
|
108
|
+
'Retry the query; some registries respond slowly under load.'
|
|
109
|
+
]));
|
|
105
110
|
}, timeout);
|
|
106
111
|
socket = createConnection({ host: server, port }, () => {
|
|
107
112
|
socket.write(query + '\r\n');
|
|
@@ -115,7 +120,11 @@ async function queryWhoisServer(server, query, port, timeout) {
|
|
|
115
120
|
});
|
|
116
121
|
socket.on('error', (error) => {
|
|
117
122
|
clearTimeout(timeoutId);
|
|
118
|
-
reject(new
|
|
123
|
+
reject(new ReckerError(`WHOIS query failed: ${error.message}`, undefined, undefined, [
|
|
124
|
+
'Verify the WHOIS server is reachable and correct.',
|
|
125
|
+
'Check network/firewall settings blocking WHOIS port 43.',
|
|
126
|
+
'Retry the query; transient network issues can occur.'
|
|
127
|
+
]));
|
|
119
128
|
});
|
|
120
129
|
});
|
|
121
130
|
}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
+
import type { TLSOptions, ProxyOptions } from '../types/index.js';
|
|
3
|
+
import type { Dispatcher } from 'undici';
|
|
4
|
+
import { Readable } from 'node:stream';
|
|
2
5
|
export interface WebSocketOptions {
|
|
3
6
|
protocols?: string | string[];
|
|
4
7
|
headers?: Record<string, string>;
|
|
8
|
+
dispatcher?: Dispatcher;
|
|
9
|
+
proxy?: ProxyOptions | string;
|
|
10
|
+
tls?: TLSOptions;
|
|
11
|
+
perMessageDeflate?: boolean;
|
|
5
12
|
reconnect?: boolean;
|
|
6
13
|
reconnectDelay?: number;
|
|
7
14
|
maxReconnectAttempts?: number;
|
|
8
15
|
heartbeatInterval?: number;
|
|
16
|
+
heartbeatTimeout?: number;
|
|
9
17
|
}
|
|
10
18
|
export interface WebSocketMessage {
|
|
11
19
|
data: string | Buffer;
|
|
@@ -20,19 +28,39 @@ export declare class ReckerWebSocket extends EventEmitter {
|
|
|
20
28
|
private heartbeatTimer?;
|
|
21
29
|
private isClosed;
|
|
22
30
|
private isReconnecting;
|
|
31
|
+
private pongWatchdog?;
|
|
32
|
+
private backoff;
|
|
33
|
+
private closedByUser;
|
|
23
34
|
constructor(url: string, options?: WebSocketOptions);
|
|
24
35
|
connect(): Promise<void>;
|
|
25
|
-
send(data: string | Buffer | ArrayBuffer
|
|
36
|
+
send(data: string | Buffer | ArrayBuffer | ArrayBufferView, options?: {
|
|
37
|
+
awaitDrain?: boolean;
|
|
38
|
+
highWaterMark?: number;
|
|
39
|
+
}): Promise<void>;
|
|
40
|
+
sendStream(stream: Readable, options?: {
|
|
41
|
+
awaitDrain?: boolean;
|
|
42
|
+
highWaterMark?: number;
|
|
43
|
+
}): Promise<void>;
|
|
26
44
|
sendJSON(data: any): void;
|
|
27
45
|
close(code?: number, reason?: string): void;
|
|
28
46
|
ping(): void;
|
|
29
47
|
get readyState(): number;
|
|
30
48
|
get isConnected(): boolean;
|
|
49
|
+
toReadable(): Readable | null;
|
|
50
|
+
pipeFrom(source: Readable, options?: {
|
|
51
|
+
awaitDrain?: boolean;
|
|
52
|
+
highWaterMark?: number;
|
|
53
|
+
}): Promise<void>;
|
|
54
|
+
pipeTo(destination: NodeJS.WritableStream): Promise<void>;
|
|
31
55
|
[Symbol.asyncIterator](): AsyncGenerator<WebSocketMessage>;
|
|
32
56
|
private attemptReconnect;
|
|
33
57
|
private clearReconnectTimer;
|
|
34
58
|
private startHeartbeat;
|
|
35
59
|
private stopHeartbeat;
|
|
60
|
+
private startPongWatchdog;
|
|
61
|
+
private stopPongWatchdog;
|
|
62
|
+
private getBufferedAmount;
|
|
63
|
+
private waitForDrain;
|
|
36
64
|
}
|
|
37
65
|
export declare function websocket(url: string, options?: WebSocketOptions): ReckerWebSocket;
|
|
38
66
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/websocket/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/websocket/client.ts"],"names":[],"mappings":"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"}
|