recker 1.0.2-0 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/LICENSE +0 -2
  2. package/README.md +121 -72
  3. package/dist/cache/memory-storage.d.ts.map +1 -1
  4. package/dist/cache/memory-storage.js +7 -1
  5. package/dist/constants/http-status.d.ts +74 -0
  6. package/dist/constants/http-status.d.ts.map +1 -0
  7. package/dist/constants/http-status.js +156 -0
  8. package/dist/constants.d.ts.map +1 -1
  9. package/dist/constants.js +6 -6
  10. package/dist/cookies/memory-cookie-jar.d.ts +31 -0
  11. package/dist/cookies/memory-cookie-jar.d.ts.map +1 -0
  12. package/dist/cookies/memory-cookie-jar.js +210 -0
  13. package/dist/core/client.d.ts +9 -0
  14. package/dist/core/client.d.ts.map +1 -1
  15. package/dist/core/client.js +252 -53
  16. package/dist/core/errors.d.ts +18 -2
  17. package/dist/core/errors.d.ts.map +1 -1
  18. package/dist/core/errors.js +66 -5
  19. package/dist/core/index.d.ts +6 -0
  20. package/dist/core/index.d.ts.map +1 -0
  21. package/dist/core/index.js +5 -0
  22. package/dist/core/request-promise.d.ts.map +1 -1
  23. package/dist/core/request-promise.js +8 -2
  24. package/dist/core/request.d.ts +7 -1
  25. package/dist/core/request.d.ts.map +1 -1
  26. package/dist/core/request.js +32 -0
  27. package/dist/core/response.d.ts +2 -0
  28. package/dist/core/response.d.ts.map +1 -1
  29. package/dist/core/response.js +44 -19
  30. package/dist/events/request-events.d.ts +48 -0
  31. package/dist/events/request-events.d.ts.map +1 -0
  32. package/dist/events/request-events.js +85 -0
  33. package/dist/index.d.ts +28 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +28 -2
  36. package/dist/mcp/client.d.ts.map +1 -1
  37. package/dist/mcp/client.js +16 -5
  38. package/dist/mcp/contract.d.ts +77 -0
  39. package/dist/mcp/contract.d.ts.map +1 -0
  40. package/dist/mcp/contract.js +278 -0
  41. package/dist/mcp/types.d.ts +1 -0
  42. package/dist/mcp/types.d.ts.map +1 -1
  43. package/dist/plugins/auth.d.ts +45 -0
  44. package/dist/plugins/auth.d.ts.map +1 -0
  45. package/dist/plugins/auth.js +268 -0
  46. package/dist/plugins/cache.d.ts +7 -1
  47. package/dist/plugins/cache.d.ts.map +1 -1
  48. package/dist/plugins/cache.js +470 -49
  49. package/dist/plugins/circuit-breaker.js +1 -1
  50. package/dist/plugins/compression.d.ts.map +1 -1
  51. package/dist/plugins/compression.js +3 -3
  52. package/dist/plugins/dedup.d.ts.map +1 -1
  53. package/dist/plugins/dedup.js +2 -1
  54. package/dist/plugins/graphql.d.ts +4 -3
  55. package/dist/plugins/graphql.d.ts.map +1 -1
  56. package/dist/plugins/graphql.js +24 -5
  57. package/dist/plugins/grpc-web.d.ts +80 -0
  58. package/dist/plugins/grpc-web.d.ts.map +1 -0
  59. package/dist/plugins/grpc-web.js +261 -0
  60. package/dist/plugins/har-player.d.ts.map +1 -1
  61. package/dist/plugins/har-player.js +11 -2
  62. package/dist/plugins/hls.d.ts +33 -0
  63. package/dist/plugins/hls.d.ts.map +1 -0
  64. package/dist/plugins/hls.js +225 -0
  65. package/dist/plugins/http2-push.d.ts +64 -0
  66. package/dist/plugins/http2-push.d.ts.map +1 -0
  67. package/dist/plugins/http2-push.js +274 -0
  68. package/dist/plugins/http3.d.ts +76 -0
  69. package/dist/plugins/http3.d.ts.map +1 -0
  70. package/dist/plugins/http3.js +231 -0
  71. package/dist/plugins/interface-rotator.d.ts +10 -0
  72. package/dist/plugins/interface-rotator.d.ts.map +1 -0
  73. package/dist/plugins/interface-rotator.js +57 -0
  74. package/dist/plugins/jsonrpc.d.ts +76 -0
  75. package/dist/plugins/jsonrpc.d.ts.map +1 -0
  76. package/dist/plugins/jsonrpc.js +143 -0
  77. package/dist/plugins/logger.d.ts +8 -5
  78. package/dist/plugins/logger.d.ts.map +1 -1
  79. package/dist/plugins/logger.js +66 -30
  80. package/dist/plugins/odata.d.ts +182 -0
  81. package/dist/plugins/odata.d.ts.map +1 -0
  82. package/dist/plugins/odata.js +561 -0
  83. package/dist/plugins/retry.d.ts +1 -0
  84. package/dist/plugins/retry.d.ts.map +1 -1
  85. package/dist/plugins/retry.js +26 -2
  86. package/dist/plugins/scrape.d.ts +22 -0
  87. package/dist/plugins/scrape.d.ts.map +1 -0
  88. package/dist/plugins/scrape.js +87 -0
  89. package/dist/plugins/soap.d.ts +73 -0
  90. package/dist/plugins/soap.d.ts.map +1 -0
  91. package/dist/plugins/soap.js +347 -0
  92. package/dist/plugins/user-agent.d.ts +8 -0
  93. package/dist/plugins/user-agent.d.ts.map +1 -0
  94. package/dist/plugins/user-agent.js +46 -0
  95. package/dist/plugins/xml.d.ts +10 -0
  96. package/dist/plugins/xml.d.ts.map +1 -0
  97. package/dist/plugins/xml.js +194 -0
  98. package/dist/presets/anthropic.d.ts +7 -0
  99. package/dist/presets/anthropic.d.ts.map +1 -0
  100. package/dist/presets/anthropic.js +17 -0
  101. package/dist/presets/azure-openai.d.ts +9 -0
  102. package/dist/presets/azure-openai.d.ts.map +1 -0
  103. package/dist/presets/azure-openai.js +25 -0
  104. package/dist/presets/cloudflare.d.ts +13 -0
  105. package/dist/presets/cloudflare.d.ts.map +1 -0
  106. package/dist/presets/cloudflare.js +39 -0
  107. package/dist/presets/cohere.d.ts +6 -0
  108. package/dist/presets/cohere.d.ts.map +1 -0
  109. package/dist/presets/cohere.js +16 -0
  110. package/dist/presets/deepseek.d.ts +6 -0
  111. package/dist/presets/deepseek.d.ts.map +1 -0
  112. package/dist/presets/deepseek.js +16 -0
  113. package/dist/presets/digitalocean.d.ts +6 -0
  114. package/dist/presets/digitalocean.d.ts.map +1 -0
  115. package/dist/presets/digitalocean.js +16 -0
  116. package/dist/presets/discord.d.ts +7 -0
  117. package/dist/presets/discord.d.ts.map +1 -0
  118. package/dist/presets/discord.js +17 -0
  119. package/dist/presets/fireworks.d.ts +6 -0
  120. package/dist/presets/fireworks.d.ts.map +1 -0
  121. package/dist/presets/fireworks.js +16 -0
  122. package/dist/presets/gemini.d.ts +6 -0
  123. package/dist/presets/gemini.d.ts.map +1 -0
  124. package/dist/presets/gemini.js +16 -0
  125. package/dist/presets/github.d.ts +7 -0
  126. package/dist/presets/github.d.ts.map +1 -0
  127. package/dist/presets/github.js +17 -0
  128. package/dist/presets/gitlab.d.ts +7 -0
  129. package/dist/presets/gitlab.d.ts.map +1 -0
  130. package/dist/presets/gitlab.js +16 -0
  131. package/dist/presets/groq.d.ts +6 -0
  132. package/dist/presets/groq.d.ts.map +1 -0
  133. package/dist/presets/groq.js +16 -0
  134. package/dist/presets/huggingface.d.ts +6 -0
  135. package/dist/presets/huggingface.d.ts.map +1 -0
  136. package/dist/presets/huggingface.js +16 -0
  137. package/dist/presets/index.d.ts +28 -0
  138. package/dist/presets/index.d.ts.map +1 -0
  139. package/dist/presets/index.js +27 -0
  140. package/dist/presets/linear.d.ts +6 -0
  141. package/dist/presets/linear.d.ts.map +1 -0
  142. package/dist/presets/linear.js +16 -0
  143. package/dist/presets/mistral.d.ts +6 -0
  144. package/dist/presets/mistral.d.ts.map +1 -0
  145. package/dist/presets/mistral.js +16 -0
  146. package/dist/presets/notion.d.ts +7 -0
  147. package/dist/presets/notion.d.ts.map +1 -0
  148. package/dist/presets/notion.js +17 -0
  149. package/dist/presets/openai.d.ts +8 -0
  150. package/dist/presets/openai.d.ts.map +1 -0
  151. package/dist/presets/openai.js +23 -0
  152. package/dist/presets/perplexity.d.ts +6 -0
  153. package/dist/presets/perplexity.d.ts.map +1 -0
  154. package/dist/presets/perplexity.js +16 -0
  155. package/dist/presets/registry.d.ts +20 -0
  156. package/dist/presets/registry.d.ts.map +1 -0
  157. package/dist/presets/registry.js +311 -0
  158. package/dist/presets/replicate.d.ts +6 -0
  159. package/dist/presets/replicate.d.ts.map +1 -0
  160. package/dist/presets/replicate.js +16 -0
  161. package/dist/presets/slack.d.ts +6 -0
  162. package/dist/presets/slack.d.ts.map +1 -0
  163. package/dist/presets/slack.js +16 -0
  164. package/dist/presets/stripe.d.ts +8 -0
  165. package/dist/presets/stripe.d.ts.map +1 -0
  166. package/dist/presets/stripe.js +23 -0
  167. package/dist/presets/supabase.d.ts +7 -0
  168. package/dist/presets/supabase.d.ts.map +1 -0
  169. package/dist/presets/supabase.js +18 -0
  170. package/dist/presets/together.d.ts +6 -0
  171. package/dist/presets/together.d.ts.map +1 -0
  172. package/dist/presets/together.js +16 -0
  173. package/dist/presets/twilio.d.ts +7 -0
  174. package/dist/presets/twilio.d.ts.map +1 -0
  175. package/dist/presets/twilio.js +17 -0
  176. package/dist/presets/vercel.d.ts +7 -0
  177. package/dist/presets/vercel.d.ts.map +1 -0
  178. package/dist/presets/vercel.js +23 -0
  179. package/dist/presets/xai.d.ts +7 -0
  180. package/dist/presets/xai.d.ts.map +1 -0
  181. package/dist/presets/xai.js +17 -0
  182. package/dist/protocols/ftp.d.ts +63 -0
  183. package/dist/protocols/ftp.d.ts.map +1 -0
  184. package/dist/protocols/ftp.js +388 -0
  185. package/dist/protocols/index.d.ts +4 -0
  186. package/dist/protocols/index.d.ts.map +1 -0
  187. package/dist/protocols/index.js +3 -0
  188. package/dist/protocols/sftp.d.ts +65 -0
  189. package/dist/protocols/sftp.d.ts.map +1 -0
  190. package/dist/protocols/sftp.js +346 -0
  191. package/dist/protocols/telnet.d.ts +50 -0
  192. package/dist/protocols/telnet.d.ts.map +1 -0
  193. package/dist/protocols/telnet.js +139 -0
  194. package/dist/runner/request-runner.d.ts.map +1 -1
  195. package/dist/runner/request-runner.js +1 -0
  196. package/dist/scrape/document.d.ts +44 -0
  197. package/dist/scrape/document.d.ts.map +1 -0
  198. package/dist/scrape/document.js +198 -0
  199. package/dist/scrape/element.d.ts +50 -0
  200. package/dist/scrape/element.d.ts.map +1 -0
  201. package/dist/scrape/element.js +176 -0
  202. package/dist/scrape/extractors.d.ts +17 -0
  203. package/dist/scrape/extractors.d.ts.map +1 -0
  204. package/dist/scrape/extractors.js +356 -0
  205. package/dist/scrape/index.d.ts +5 -0
  206. package/dist/scrape/index.d.ts.map +1 -0
  207. package/dist/scrape/index.js +3 -0
  208. package/dist/scrape/types.d.ts +108 -0
  209. package/dist/scrape/types.d.ts.map +1 -0
  210. package/dist/scrape/types.js +1 -0
  211. package/dist/testing/index.d.ts +3 -0
  212. package/dist/testing/index.d.ts.map +1 -0
  213. package/dist/testing/index.js +1 -0
  214. package/dist/testing/mock.d.ts +58 -0
  215. package/dist/testing/mock.d.ts.map +1 -0
  216. package/dist/testing/mock.js +252 -0
  217. package/dist/transport/fetch.d.ts.map +1 -1
  218. package/dist/transport/fetch.js +12 -4
  219. package/dist/transport/undici.d.ts +17 -1
  220. package/dist/transport/undici.d.ts.map +1 -1
  221. package/dist/transport/undici.js +708 -47
  222. package/dist/types/index.d.ts +111 -10
  223. package/dist/types/index.d.ts.map +1 -1
  224. package/dist/types/index.js +1 -1
  225. package/dist/types/logger.d.ts +17 -0
  226. package/dist/types/logger.d.ts.map +1 -0
  227. package/dist/types/logger.js +66 -0
  228. package/dist/utils/agent-manager.d.ts.map +1 -1
  229. package/dist/utils/agent-manager.js +20 -4
  230. package/dist/utils/body.d.ts.map +1 -1
  231. package/dist/utils/body.js +14 -2
  232. package/dist/utils/charset.d.ts +16 -0
  233. package/dist/utils/charset.d.ts.map +1 -0
  234. package/dist/utils/charset.js +169 -0
  235. package/dist/utils/client-pool.d.ts +21 -0
  236. package/dist/utils/client-pool.d.ts.map +1 -0
  237. package/dist/utils/client-pool.js +49 -0
  238. package/dist/utils/concurrency.d.ts.map +1 -1
  239. package/dist/utils/concurrency.js +8 -4
  240. package/dist/utils/dns-toolkit.d.ts +13 -0
  241. package/dist/utils/dns-toolkit.d.ts.map +1 -0
  242. package/dist/utils/dns-toolkit.js +48 -0
  243. package/dist/utils/doh.d.ts.map +1 -1
  244. package/dist/utils/doh.js +16 -3
  245. package/dist/utils/download.d.ts +15 -0
  246. package/dist/utils/download.d.ts.map +1 -0
  247. package/dist/utils/download.js +44 -0
  248. package/dist/utils/env-proxy.d.ts +13 -0
  249. package/dist/utils/env-proxy.d.ts.map +1 -0
  250. package/dist/utils/env-proxy.js +105 -0
  251. package/dist/utils/header-parser.d.ts +15 -1
  252. package/dist/utils/header-parser.d.ts.map +1 -1
  253. package/dist/utils/header-parser.js +161 -1
  254. package/dist/utils/link-header.d.ts +70 -0
  255. package/dist/utils/link-header.d.ts.map +1 -0
  256. package/dist/utils/link-header.js +190 -0
  257. package/dist/utils/progress.d.ts +7 -2
  258. package/dist/utils/progress.d.ts.map +1 -1
  259. package/dist/utils/progress.js +48 -15
  260. package/dist/utils/rdap.d.ts +17 -0
  261. package/dist/utils/rdap.d.ts.map +1 -0
  262. package/dist/utils/rdap.js +32 -0
  263. package/dist/utils/request-pool.d.ts.map +1 -1
  264. package/dist/utils/request-pool.js +4 -3
  265. package/dist/utils/sse.d.ts.map +1 -1
  266. package/dist/utils/sse.js +8 -2
  267. package/dist/utils/status-codes.d.ts +84 -0
  268. package/dist/utils/status-codes.d.ts.map +1 -0
  269. package/dist/utils/status-codes.js +204 -0
  270. package/dist/utils/streaming.d.ts.map +1 -1
  271. package/dist/utils/streaming.js +1 -0
  272. package/dist/utils/tls-inspector.d.ts +21 -0
  273. package/dist/utils/tls-inspector.d.ts.map +1 -0
  274. package/dist/utils/tls-inspector.js +39 -0
  275. package/dist/utils/try-fn.d.ts.map +1 -1
  276. package/dist/utils/try-fn.js +11 -5
  277. package/dist/utils/upload.d.ts +1 -0
  278. package/dist/utils/upload.d.ts.map +1 -1
  279. package/dist/utils/upload.js +20 -3
  280. package/dist/utils/user-agent.d.ts +9 -9
  281. package/dist/utils/user-agent.js +9 -9
  282. package/dist/utils/whois.d.ts.map +1 -1
  283. package/dist/utils/whois.js +11 -2
  284. package/dist/websocket/client.d.ts +29 -1
  285. package/dist/websocket/client.d.ts.map +1 -1
  286. package/dist/websocket/client.js +145 -13
  287. 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;;;EAYlD"}
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"}
@@ -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":"AAqBA,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,CAwD1F;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"}
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"}
@@ -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 Error('fnOrPromise cannot be null or undefined');
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 instanceof Error ? error : new Error(String(error)), undefined];
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 instanceof Error ? error : new Error(String(error)), undefined];
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 instanceof Error ? error : new Error(String(error)), undefined];
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 instanceof Error ? err : new Error(String(err)), undefined];
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
+ }
@@ -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;CACtD;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,iBAiE1D"}
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"}
@@ -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
- for (let i = 0; i < total; i += chunkSize) {
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
- buffer = Buffer.concat([buffer, chunk]);
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 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
5
- readonly chrome_linux: "Mozilla/5.0 (X11; Linux x86_64) 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 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 x86_64; rv:121.0) Gecko/20100101 Firefox/121.0";
9
- readonly safari_mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15";
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 10_15_7) 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 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 10_15_7) 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 17_0 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 17_0 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 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/120.0.6099.119 Mobile/15E148 Safari/604.1";
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";
@@ -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 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
19
- chrome_linux: 'Mozilla/5.0 (X11; Linux x86_64) 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 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 x86_64; rv:121.0) Gecko/20100101 Firefox/121.0',
23
- safari_mac: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15',
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 10_15_7) 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 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 10_15_7) 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 17_0 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 17_0 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 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/120.0.6099.119 Mobile/15E148 Safari/604.1',
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":"AAOA,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;AA4KD,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"}
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"}
@@ -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 Error(`WHOIS query timed out after ${timeout}ms`));
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 Error(`WHOIS query failed: ${error.message}`));
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): void;
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;AAEtC,MAAM,WAAW,gBAAgB;IAI/B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAK9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAMjC,SAAS,CAAC,EAAE,OAAO,CAAC;IAMpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAMxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAO9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAS;gBAEnB,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAgBjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI;IAU/C,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAOzB,KAAK,CAAC,IAAI,SAAO,EAAE,MAAM,SAAK,GAAG,IAAI;IAerC,IAAI,IAAI,IAAI;IAeZ,IAAI,UAAU,IAAI,MAAM,CAEvB;IAKD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAKM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,gBAAgB,CAAC;IAoDjE,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;CAMtB;AAKD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAMlF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/websocket/client.ts"],"names":[],"mappings":"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"}