rezo 1.0.73 → 1.0.74

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 (38) hide show
  1. package/dist/adapters/entries/curl.d.ts +1 -1
  2. package/dist/adapters/entries/fetch.d.ts +1 -1
  3. package/dist/adapters/entries/http.d.ts +1 -1
  4. package/dist/adapters/entries/http2.d.ts +1 -1
  5. package/dist/adapters/entries/react-native.d.ts +1 -1
  6. package/dist/adapters/entries/xhr.d.ts +1 -1
  7. package/dist/adapters/index.cjs +6 -6
  8. package/dist/cache/index.cjs +9 -9
  9. package/dist/crawler/crawler-options.cjs +1 -1
  10. package/dist/crawler/crawler-options.js +1 -1
  11. package/dist/crawler/crawler.cjs +20 -10
  12. package/dist/crawler/crawler.js +20 -10
  13. package/dist/crawler/index.cjs +40 -40
  14. package/dist/crawler/plugin/index.cjs +1 -1
  15. package/dist/crawler.d.ts +4 -0
  16. package/dist/entries/crawler.cjs +4 -4
  17. package/dist/errors/rezo-error.cjs +3 -72
  18. package/dist/errors/rezo-error.js +3 -72
  19. package/dist/index.cjs +30 -30
  20. package/dist/index.d.ts +1 -1
  21. package/dist/internal/agents/index.cjs +10 -10
  22. package/dist/platform/browser.d.ts +1 -1
  23. package/dist/platform/bun.d.ts +1 -1
  24. package/dist/platform/deno.d.ts +1 -1
  25. package/dist/platform/node.d.ts +1 -1
  26. package/dist/platform/react-native.d.ts +1 -1
  27. package/dist/platform/worker.d.ts +1 -1
  28. package/dist/proxy/index.cjs +4 -4
  29. package/dist/queue/index.cjs +8 -8
  30. package/dist/queue/queue.cjs +1 -1
  31. package/dist/queue/queue.js +1 -1
  32. package/dist/responses/universal/index.cjs +11 -11
  33. package/dist/utils/agent-pool.cjs +35 -0
  34. package/dist/utils/agent-pool.js +35 -0
  35. package/dist/version.cjs +1 -1
  36. package/dist/version.js +1 -1
  37. package/dist/wget/index.cjs +49 -49
  38. package/package.json +1 -1
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  /**
4584
4584
  * cURL Options Configuration
4585
4585
  *
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  /**
4584
4584
  * Type guard to check if an error is a RezoError instance.
4585
4585
  */
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -1,6 +1,6 @@
1
- const _mod_vstjof = require('./picker.cjs');
2
- exports.detectRuntime = _mod_vstjof.detectRuntime;
3
- exports.getAdapterCapabilities = _mod_vstjof.getAdapterCapabilities;
4
- exports.buildAdapterContext = _mod_vstjof.buildAdapterContext;
5
- exports.getAvailableAdapters = _mod_vstjof.getAvailableAdapters;
6
- exports.selectAdapter = _mod_vstjof.selectAdapter;;
1
+ const _mod_pls1zs = require('./picker.cjs');
2
+ exports.detectRuntime = _mod_pls1zs.detectRuntime;
3
+ exports.getAdapterCapabilities = _mod_pls1zs.getAdapterCapabilities;
4
+ exports.buildAdapterContext = _mod_pls1zs.buildAdapterContext;
5
+ exports.getAvailableAdapters = _mod_pls1zs.getAvailableAdapters;
6
+ exports.selectAdapter = _mod_pls1zs.selectAdapter;;
@@ -1,9 +1,9 @@
1
- const _mod_4yb0ry = require('./lru-cache.cjs');
2
- exports.LRUCache = _mod_4yb0ry.LRUCache;;
3
- const _mod_lb3zhr = require('./dns-cache.cjs');
4
- exports.DNSCache = _mod_lb3zhr.DNSCache;
5
- exports.getGlobalDNSCache = _mod_lb3zhr.getGlobalDNSCache;
6
- exports.resetGlobalDNSCache = _mod_lb3zhr.resetGlobalDNSCache;;
7
- const _mod_ogn45d = require('./response-cache.cjs');
8
- exports.ResponseCache = _mod_ogn45d.ResponseCache;
9
- exports.normalizeResponseCacheConfig = _mod_ogn45d.normalizeResponseCacheConfig;;
1
+ const _mod_121cas = require('./lru-cache.cjs');
2
+ exports.LRUCache = _mod_121cas.LRUCache;;
3
+ const _mod_9vbe4h = require('./dns-cache.cjs');
4
+ exports.DNSCache = _mod_9vbe4h.DNSCache;
5
+ exports.getGlobalDNSCache = _mod_9vbe4h.getGlobalDNSCache;
6
+ exports.resetGlobalDNSCache = _mod_9vbe4h.resetGlobalDNSCache;;
7
+ const _mod_to71v9 = require('./response-cache.cjs');
8
+ exports.ResponseCache = _mod_to71v9.ResponseCache;
9
+ exports.normalizeResponseCacheConfig = _mod_to71v9.normalizeResponseCacheConfig;;
@@ -1 +1 @@
1
- var{RezoQueue:m}=require("../queue/queue.cjs"),{Oxylabs:x}=require("./addon/oxylabs/index.cjs"),b=require("node:path"),g=require("node:os"),{Decodo:y}=require("./addon/decodo/index.cjs");class f{baseUrl;adapter;enableNavigationHistory;sessionId;rejectUnauthorized;userAgent;useRndUserAgent;timeout;maxRedirects;maxRetryAttempts;retryDelay;retryOnStatusCode;forceRevisit;retryWithoutProxyOnStatusCode;retryOnProxyError;maxRetryOnProxyError;allowRevisiting;enableCache;cacheTTL;cacheDir;throwFatalError;debug;concurrency;scraperConcurrency;maxDepth;maxUrls;maxResponseSize;respectRobotsTxt;followNofollow;autoThrottle;autoThrottleTargetDelay;autoThrottleMinDelay;autoThrottleMaxDelay;maxWaitOn429;alwaysWaitOn429;oxylabs=[];decodo=[];proxies=[];limiters=[];requestHeaders=[];userAgents=A();constructor(e={}){this.baseUrl=e.baseUrl||"",this.adapter=e.adapter??"http",this.enableNavigationHistory=e.enableNavigationHistory??!1,this.sessionId=e.sessionId??`session_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.rejectUnauthorized=e.rejectUnauthorized??!0,this.userAgent=e.userAgent,this.useRndUserAgent=e.useRndUserAgent??!1,this.timeout=e.timeout??30000,this.maxRedirects=e.maxRedirects??10,this.maxRetryAttempts=e.maxRetryAttempts??3,this.retryDelay=e.retryDelay??0,this.retryOnStatusCode=e.retryOnStatusCode??[408,429,500,502,503,504],this.forceRevisit=e.forceRevisit??!1,this.retryWithoutProxyOnStatusCode=e.retryWithoutProxyOnStatusCode??[407,403],this.retryOnProxyError=e.retryOnProxyError??!0,this.maxRetryOnProxyError=e.maxRetryOnProxyError??3,this.allowRevisiting=e.allowRevisiting??!1,this.enableCache=e.enableCache??!0,this.cacheTTL=e.cacheTTL??604800000,this.cacheDir=e.cacheDir??b.join(g.tmpdir(),"uiniqhtt_cache"),this.throwFatalError=e.throwFatalError??!1,this.debug=e.debug??!1,this.concurrency=e.concurrency??100,this.scraperConcurrency=e.scraperConcurrency??this.concurrency,this.maxDepth=e.maxDepth??0,this.maxUrls=e.maxUrls??0,this.maxResponseSize=e.maxResponseSize??0,this.respectRobotsTxt=e.respectRobotsTxt??!1,this.followNofollow=e.followNofollow??!1,this.autoThrottle=e.autoThrottle??!0,this.autoThrottleTargetDelay=e.autoThrottleTargetDelay??1000,this.autoThrottleMinDelay=e.autoThrottleMinDelay??100,this.autoThrottleMaxDelay=e.autoThrottleMaxDelay??60000,this.maxWaitOn429=e.maxWaitOn429??1800000,this.alwaysWaitOn429=e.alwaysWaitOn429??!1,this._addHeaders(e.headers),this._addOxylabs(e.oxylabs),this._addDecodo(e.decodo),this._addProxies(e.proxy),this._addLimiters(e.limiter)}getConfiguredDomains(e){return(e==="headers"?this.requestHeaders:e==="limiters"?this.limiters:e==="oxylabs"?this.oxylabs:this.proxies).filter((i)=>i.domain).map((i)=>i.domain).filter((i,a,r)=>r.indexOf(i)===a)}removeDomain(e){return this.requestHeaders=this.requestHeaders.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.proxies=this.proxies.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.limiters=this.limiters.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.oxylabs=this.oxylabs.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this}_domainsEqual(e,t){if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((i,a)=>i===t[a]);return e===t}getConfigurationSummary(){let e=(t)=>({total:t.length,global:t.filter((i)=>i.isGlobal).length,domainSpecific:t.filter((i)=>!i.isGlobal&&i.domain).length});return{headers:e(this.requestHeaders),proxies:e(this.proxies),limiters:e(this.limiters),oxylabs:e(this.oxylabs)}}_addHeaders(e){if(!e||!e.enable)return;for(let t of e.httpHeaders){let{domain:i,isGlobal:a,headers:r}=t;if(!i&&!a)continue;if(r instanceof Headers){let s=Object.fromEntries(r.entries());if(Object.keys(s).length<1)continue;r=s}else if(!r||Object.keys(r).length<1)continue;this.requestHeaders.push({domain:i,isGlobal:a,headers:r})}}_addProxies(e){if(!e||!e.enable)return;for(let t of e.proxies){let{domain:i,isGlobal:a,proxy:r}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.proxies.push({domain:i,isGlobal:a,proxy:r})}}_addLimiters(e){if(!e||!e.enable)return;for(let t of e.limiters){let{domain:i,isGlobal:a,options:r}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.limiters.push({domain:i,isGlobal:a,pqueue:new m(r)})}}_addOxylabs(e){if(!e||!e.enable)return;for(let t of e.labs){let{domain:i,isGlobal:a,options:r,queueOptions:s}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.oxylabs.push({domain:i,isGlobal:a,adaptar:new x(r)})}}_addDecodo(e){if(!e||!e.enable)return;for(let t of e.labs){let{domain:i,isGlobal:a,options:r,queueOptions:s}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.decodo.push({domain:i,isGlobal:a,adaptar:new y(r)})}}addHeaders(e){return this._addHeaders({enable:!0,httpHeaders:[e]}),this}addProxy(e){return this._addProxies({enable:!0,proxies:[e]}),this}addLimiter(e){return this._addLimiters({enable:!0,limiters:[e]}),this}addOxylabs(e){return this._addOxylabs({enable:!0,labs:[e]}),this}addDecodo(e){return this._addDecodo({enable:!0,labs:[e]}),this}destroyLimiters(){for(let e of this.limiters)if(e.pqueue&&typeof e.pqueue.destroy==="function")e.pqueue.destroy();this.limiters=[]}clearGlobalConfigs(){if(Array.isArray(this.requestHeaders))this.requestHeaders=this.requestHeaders.filter((e)=>!e.isGlobal);if(Array.isArray(this.oxylabs))this.oxylabs=this.oxylabs.filter((e)=>!e.isGlobal);if(Array.isArray(this.limiters))this.limiters=this.limiters.filter((e)=>!e.isGlobal);if(Array.isArray(this.proxies))this.proxies=this.proxies.filter((e)=>!e.isGlobal);return this}getAdapter(e,t,i,a){if(!this.getDomainName(e))return null;let s=[],o=t==="headers"?this.requestHeaders:t==="limiters"?this.limiters:t==="oxylabs"?this.oxylabs:t==="decodo"?this.decodo:this.proxies;for(let n=0;n<o.length;n++)if(this._hasDomain(e,o[n].domain))s.push(n);if(s.length){let n=a?s[this.rnd(0,s.length-1)]:s[0];return t==="headers"?this.requestHeaders[n].headers:t==="limiters"?this.limiters[n].pqueue:t==="oxylabs"?this.oxylabs[n].adaptar:t==="decodo"?this.decodo[n].adaptar:this.proxies[n].proxy}s.length=0;for(let n=0;n<o.length;n++)s.push(n);if(s.length){let n=a?s[this.rnd(0,s.length-1)]:s[0];if(o[n].isGlobal&&i)return t==="headers"?this.requestHeaders[n].headers:t==="limiters"?this.limiters[n].pqueue:t==="oxylabs"?this.oxylabs[n].adaptar:t==="decodo"?this.decodo[n].adaptar:this.proxies[n].proxy}return null}rnd(e=0,t=Number.MAX_VALUE){return Math.floor(Math.random()*(t-e+1))+e}hasDomain(e,t,i){if(!this.getDomainName(e))return!1;let r=t==="headers"?this.requestHeaders:t==="limiters"?this.limiters:t==="oxylabs"?this.oxylabs:t==="decodo"?this.decodo:this.proxies;for(let s=0;s<r.length;s++)if(this._hasDomain(e,r[s].domain))return!0;if(i){for(let s=0;s<r.length;s++)if(r[s].isGlobal)return!0}return!1}pickHeaders(e,t,i,a){let r=this.getAdapter(e,"headers",t),s=new Headers(r??{}),o=s.count;if(i&&i instanceof Headers)for(let[n,l]of Object.entries(i.entries()))s.set(n,l);else if(i&&typeof i==="object"){for(let[n,l]of Object.entries(i))if(typeof l==="string")s.set(n,l)}if(a&&o===0)s.set("user-agent",this.getRandomUserAgent());return Object.fromEntries(s.entries())}_hasDomain(e,t){if(!t)return!1;let i=this.getDomainName(e);if(!i)return!1;let a=(s)=>{return/[\^\$\*\+\?\{\}\[\]\(\)\|\\]/.test(s)||s.startsWith("/")||s.includes(".*")||s.includes(".+")},r=(s)=>{if(s instanceof RegExp)return s.test(i)||s.test(e);let o=s.toString().trim();if(i.toLowerCase()===o.toLowerCase())return!0;if(o.includes("*")){let h=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,".*"),c=new RegExp(`^${h}$`,"i");return c.test(i)||c.test(e)}if(a(o))try{let h=o,c="i",u=o.match(/^\/(.*)\/(\w*)$/);if(u)h=u[1],c=u[2]||"i";let d=new RegExp(h,c);return d.test(i)||d.test(e)}catch(h){return i.toLowerCase().includes(o.toLowerCase())}let n=i.toLowerCase(),l=o.toLowerCase();return n===l||n.endsWith("."+l)||l.endsWith("."+n)};if(Array.isArray(t)){for(let s of t)if(r(s))return!0;return!1}return r(t)}getDomainName(e){if(this.isValidUrl(e))return new URL(e).hostname;else if(this.isHostName(e))return e;return null}isHostName(e){if(!e)return!1;if(e.length>255)return!1;let t=/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+ [a-zA-Z]{2,})$/;return e=e.trim().toLowerCase(),t.test(e)&&!e.startsWith("-")&&!e.endsWith("-")}isValidUrl(e){if(!e)return!1;e=e.trim();try{let t=new URL(e);if(!t.protocol||!["http:","https:"].includes(t.protocol.toLowerCase()))return!1;if(!t.hostname)return!1;if(!/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,})$/.test(t.hostname))return!1;return!0}catch{return!1}}getRandomUserAgent(){return this.userAgents[Math.floor(Math.random()*this.userAgents.length)]}}function A(){let e=[{name:"Chrome",version:"91.0.4472.124",engine:"AppleWebKit/537.36"},{name:"Firefox",version:"89.0",engine:"Gecko/20100101"},{name:"Safari",version:"14.1.1",engine:"AppleWebKit/605.1.15"},{name:"Edge",version:"91.0.864.59",engine:"AppleWebKit/537.36"},{name:"Opera",version:"77.0.4054.277",engine:"AppleWebKit/537.36"},{name:"Vivaldi",version:"3.8.2259.42",engine:"AppleWebKit/537.36"},{name:"Brave",version:"1.26.74",engine:"AppleWebKit/537.36"},{name:"Chromium",version:"91.0.4472.101",engine:"AppleWebKit/537.36"},{name:"Yandex",version:"21.5.3.742",engine:"AppleWebKit/537.36"},{name:"Maxthon",version:"5.3.8.2000",engine:"AppleWebKit/537.36"}],t=["Windows NT 10.0","Windows NT 6.1","Macintosh; Intel Mac OS X 10_15_7","Macintosh; Intel Mac OS X 11_4_0","X11; Linux x86_64","X11; Ubuntu; Linux x86_64"],i=[];for(let a=0;a<200;a++){let r=e[Math.floor(Math.random()*e.length)],s=t[Math.floor(Math.random()*t.length)],o="";switch(r.name){case"Chrome":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36`;break;case"Firefox":o=`Mozilla/5.0 (${s}; rv:${r.version}) ${r.engine} Firefox/${r.version}`;break;case"Safari":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Version/${r.version} Safari/605.1.15`;break;case"Edge":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Edg/${r.version}`;break;case"Opera":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 OPR/${r.version}`;break;case"Vivaldi":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Vivaldi/${r.version}`;break;case"Brave":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Brave/${r.version}`;break;case"Chromium":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chromium/${r.version} Chrome/${r.version} Safari/537.36`;break;case"Yandex":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} YaBrowser/${r.version} Safari/537.36`;break;case"Maxthon":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Maxthon/${r.version}`;break}i.push(o)}return i}exports.CrawlerOptions=f;
1
+ var{RezoQueue:m}=require("../queue/queue.cjs"),{Oxylabs:x}=require("./addon/oxylabs/index.cjs"),b=require("node:path"),g=require("node:os"),{Decodo:y}=require("./addon/decodo/index.cjs");class f{baseUrl;adapter;enableNavigationHistory;sessionId;rejectUnauthorized;userAgent;useRndUserAgent;timeout;maxRedirects;maxRetryAttempts;retryDelay;retryOnStatusCode;forceRevisit;retryWithoutProxyOnStatusCode;retryOnProxyError;maxRetryOnProxyError;allowRevisiting;enableCache;cacheTTL;cacheDir;throwFatalError;debug;enableSignalHandlers;concurrency;scraperConcurrency;maxDepth;maxUrls;maxResponseSize;respectRobotsTxt;followNofollow;autoThrottle;autoThrottleTargetDelay;autoThrottleMinDelay;autoThrottleMaxDelay;maxWaitOn429;alwaysWaitOn429;oxylabs=[];decodo=[];proxies=[];limiters=[];requestHeaders=[];userAgents=A();constructor(e={}){this.baseUrl=e.baseUrl||"",this.adapter=e.adapter??"http",this.enableNavigationHistory=e.enableNavigationHistory??!1,this.sessionId=e.sessionId??`session_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.rejectUnauthorized=e.rejectUnauthorized??!0,this.userAgent=e.userAgent,this.useRndUserAgent=e.useRndUserAgent??!1,this.timeout=e.timeout??30000,this.maxRedirects=e.maxRedirects??10,this.maxRetryAttempts=e.maxRetryAttempts??3,this.retryDelay=e.retryDelay??0,this.retryOnStatusCode=e.retryOnStatusCode??[408,429,500,502,503,504],this.forceRevisit=e.forceRevisit??!1,this.retryWithoutProxyOnStatusCode=e.retryWithoutProxyOnStatusCode??[407,403],this.retryOnProxyError=e.retryOnProxyError??!0,this.maxRetryOnProxyError=e.maxRetryOnProxyError??3,this.allowRevisiting=e.allowRevisiting??!1,this.enableCache=e.enableCache??!0,this.cacheTTL=e.cacheTTL??604800000,this.cacheDir=e.cacheDir??b.join(g.tmpdir(),"uiniqhtt_cache"),this.throwFatalError=e.throwFatalError??!1,this.debug=e.debug??!1,this.enableSignalHandlers=e.enableSignalHandlers??!1,this.concurrency=e.concurrency??100,this.scraperConcurrency=e.scraperConcurrency??this.concurrency,this.maxDepth=e.maxDepth??0,this.maxUrls=e.maxUrls??0,this.maxResponseSize=e.maxResponseSize??0,this.respectRobotsTxt=e.respectRobotsTxt??!1,this.followNofollow=e.followNofollow??!1,this.autoThrottle=e.autoThrottle??!0,this.autoThrottleTargetDelay=e.autoThrottleTargetDelay??1000,this.autoThrottleMinDelay=e.autoThrottleMinDelay??100,this.autoThrottleMaxDelay=e.autoThrottleMaxDelay??60000,this.maxWaitOn429=e.maxWaitOn429??1800000,this.alwaysWaitOn429=e.alwaysWaitOn429??!1,this._addHeaders(e.headers),this._addOxylabs(e.oxylabs),this._addDecodo(e.decodo),this._addProxies(e.proxy),this._addLimiters(e.limiter)}getConfiguredDomains(e){return(e==="headers"?this.requestHeaders:e==="limiters"?this.limiters:e==="oxylabs"?this.oxylabs:this.proxies).filter((i)=>i.domain).map((i)=>i.domain).filter((i,a,r)=>r.indexOf(i)===a)}removeDomain(e){return this.requestHeaders=this.requestHeaders.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.proxies=this.proxies.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.limiters=this.limiters.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.oxylabs=this.oxylabs.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this}_domainsEqual(e,t){if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((i,a)=>i===t[a]);return e===t}getConfigurationSummary(){let e=(t)=>({total:t.length,global:t.filter((i)=>i.isGlobal).length,domainSpecific:t.filter((i)=>!i.isGlobal&&i.domain).length});return{headers:e(this.requestHeaders),proxies:e(this.proxies),limiters:e(this.limiters),oxylabs:e(this.oxylabs)}}_addHeaders(e){if(!e||!e.enable)return;for(let t of e.httpHeaders){let{domain:i,isGlobal:a,headers:r}=t;if(!i&&!a)continue;if(r instanceof Headers){let s=Object.fromEntries(r.entries());if(Object.keys(s).length<1)continue;r=s}else if(!r||Object.keys(r).length<1)continue;this.requestHeaders.push({domain:i,isGlobal:a,headers:r})}}_addProxies(e){if(!e||!e.enable)return;for(let t of e.proxies){let{domain:i,isGlobal:a,proxy:r}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.proxies.push({domain:i,isGlobal:a,proxy:r})}}_addLimiters(e){if(!e||!e.enable)return;for(let t of e.limiters){let{domain:i,isGlobal:a,options:r}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.limiters.push({domain:i,isGlobal:a,pqueue:new m(r)})}}_addOxylabs(e){if(!e||!e.enable)return;for(let t of e.labs){let{domain:i,isGlobal:a,options:r,queueOptions:s}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.oxylabs.push({domain:i,isGlobal:a,adaptar:new x(r)})}}_addDecodo(e){if(!e||!e.enable)return;for(let t of e.labs){let{domain:i,isGlobal:a,options:r,queueOptions:s}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.decodo.push({domain:i,isGlobal:a,adaptar:new y(r)})}}addHeaders(e){return this._addHeaders({enable:!0,httpHeaders:[e]}),this}addProxy(e){return this._addProxies({enable:!0,proxies:[e]}),this}addLimiter(e){return this._addLimiters({enable:!0,limiters:[e]}),this}addOxylabs(e){return this._addOxylabs({enable:!0,labs:[e]}),this}addDecodo(e){return this._addDecodo({enable:!0,labs:[e]}),this}destroyLimiters(){for(let e of this.limiters)if(e.pqueue&&typeof e.pqueue.destroy==="function")e.pqueue.destroy();this.limiters=[]}clearGlobalConfigs(){if(Array.isArray(this.requestHeaders))this.requestHeaders=this.requestHeaders.filter((e)=>!e.isGlobal);if(Array.isArray(this.oxylabs))this.oxylabs=this.oxylabs.filter((e)=>!e.isGlobal);if(Array.isArray(this.limiters))this.limiters=this.limiters.filter((e)=>!e.isGlobal);if(Array.isArray(this.proxies))this.proxies=this.proxies.filter((e)=>!e.isGlobal);return this}getAdapter(e,t,i,a){if(!this.getDomainName(e))return null;let s=[],o=t==="headers"?this.requestHeaders:t==="limiters"?this.limiters:t==="oxylabs"?this.oxylabs:t==="decodo"?this.decodo:this.proxies;for(let n=0;n<o.length;n++)if(this._hasDomain(e,o[n].domain))s.push(n);if(s.length){let n=a?s[this.rnd(0,s.length-1)]:s[0];return t==="headers"?this.requestHeaders[n].headers:t==="limiters"?this.limiters[n].pqueue:t==="oxylabs"?this.oxylabs[n].adaptar:t==="decodo"?this.decodo[n].adaptar:this.proxies[n].proxy}s.length=0;for(let n=0;n<o.length;n++)s.push(n);if(s.length){let n=a?s[this.rnd(0,s.length-1)]:s[0];if(o[n].isGlobal&&i)return t==="headers"?this.requestHeaders[n].headers:t==="limiters"?this.limiters[n].pqueue:t==="oxylabs"?this.oxylabs[n].adaptar:t==="decodo"?this.decodo[n].adaptar:this.proxies[n].proxy}return null}rnd(e=0,t=Number.MAX_VALUE){return Math.floor(Math.random()*(t-e+1))+e}hasDomain(e,t,i){if(!this.getDomainName(e))return!1;let r=t==="headers"?this.requestHeaders:t==="limiters"?this.limiters:t==="oxylabs"?this.oxylabs:t==="decodo"?this.decodo:this.proxies;for(let s=0;s<r.length;s++)if(this._hasDomain(e,r[s].domain))return!0;if(i){for(let s=0;s<r.length;s++)if(r[s].isGlobal)return!0}return!1}pickHeaders(e,t,i,a){let r=this.getAdapter(e,"headers",t),s=new Headers(r??{}),o=s.count;if(i&&i instanceof Headers)for(let[n,l]of Object.entries(i.entries()))s.set(n,l);else if(i&&typeof i==="object"){for(let[n,l]of Object.entries(i))if(typeof l==="string")s.set(n,l)}if(a&&o===0)s.set("user-agent",this.getRandomUserAgent());return Object.fromEntries(s.entries())}_hasDomain(e,t){if(!t)return!1;let i=this.getDomainName(e);if(!i)return!1;let a=(s)=>{return/[\^\$\*\+\?\{\}\[\]\(\)\|\\]/.test(s)||s.startsWith("/")||s.includes(".*")||s.includes(".+")},r=(s)=>{if(s instanceof RegExp)return s.test(i)||s.test(e);let o=s.toString().trim();if(i.toLowerCase()===o.toLowerCase())return!0;if(o.includes("*")){let h=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,".*"),c=new RegExp(`^${h}$`,"i");return c.test(i)||c.test(e)}if(a(o))try{let h=o,c="i",u=o.match(/^\/(.*)\/(\w*)$/);if(u)h=u[1],c=u[2]||"i";let d=new RegExp(h,c);return d.test(i)||d.test(e)}catch(h){return i.toLowerCase().includes(o.toLowerCase())}let n=i.toLowerCase(),l=o.toLowerCase();return n===l||n.endsWith("."+l)||l.endsWith("."+n)};if(Array.isArray(t)){for(let s of t)if(r(s))return!0;return!1}return r(t)}getDomainName(e){if(this.isValidUrl(e))return new URL(e).hostname;else if(this.isHostName(e))return e;return null}isHostName(e){if(!e)return!1;if(e.length>255)return!1;let t=/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+ [a-zA-Z]{2,})$/;return e=e.trim().toLowerCase(),t.test(e)&&!e.startsWith("-")&&!e.endsWith("-")}isValidUrl(e){if(!e)return!1;e=e.trim();try{let t=new URL(e);if(!t.protocol||!["http:","https:"].includes(t.protocol.toLowerCase()))return!1;if(!t.hostname)return!1;if(!/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,})$/.test(t.hostname))return!1;return!0}catch{return!1}}getRandomUserAgent(){return this.userAgents[Math.floor(Math.random()*this.userAgents.length)]}}function A(){let e=[{name:"Chrome",version:"91.0.4472.124",engine:"AppleWebKit/537.36"},{name:"Firefox",version:"89.0",engine:"Gecko/20100101"},{name:"Safari",version:"14.1.1",engine:"AppleWebKit/605.1.15"},{name:"Edge",version:"91.0.864.59",engine:"AppleWebKit/537.36"},{name:"Opera",version:"77.0.4054.277",engine:"AppleWebKit/537.36"},{name:"Vivaldi",version:"3.8.2259.42",engine:"AppleWebKit/537.36"},{name:"Brave",version:"1.26.74",engine:"AppleWebKit/537.36"},{name:"Chromium",version:"91.0.4472.101",engine:"AppleWebKit/537.36"},{name:"Yandex",version:"21.5.3.742",engine:"AppleWebKit/537.36"},{name:"Maxthon",version:"5.3.8.2000",engine:"AppleWebKit/537.36"}],t=["Windows NT 10.0","Windows NT 6.1","Macintosh; Intel Mac OS X 10_15_7","Macintosh; Intel Mac OS X 11_4_0","X11; Linux x86_64","X11; Ubuntu; Linux x86_64"],i=[];for(let a=0;a<200;a++){let r=e[Math.floor(Math.random()*e.length)],s=t[Math.floor(Math.random()*t.length)],o="";switch(r.name){case"Chrome":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36`;break;case"Firefox":o=`Mozilla/5.0 (${s}; rv:${r.version}) ${r.engine} Firefox/${r.version}`;break;case"Safari":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Version/${r.version} Safari/605.1.15`;break;case"Edge":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Edg/${r.version}`;break;case"Opera":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 OPR/${r.version}`;break;case"Vivaldi":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Vivaldi/${r.version}`;break;case"Brave":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Brave/${r.version}`;break;case"Chromium":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chromium/${r.version} Chrome/${r.version} Safari/537.36`;break;case"Yandex":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} YaBrowser/${r.version} Safari/537.36`;break;case"Maxthon":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Maxthon/${r.version}`;break}i.push(o)}return i}exports.CrawlerOptions=f;
@@ -1 +1 @@
1
- import{RezoQueue as m}from"../queue/queue.js";import{Oxylabs as f}from"./addon/oxylabs/index.js";import x from"node:path";import b from"node:os";import{Decodo as g}from"./addon/decodo/index.js";class y{baseUrl;adapter;enableNavigationHistory;sessionId;rejectUnauthorized;userAgent;useRndUserAgent;timeout;maxRedirects;maxRetryAttempts;retryDelay;retryOnStatusCode;forceRevisit;retryWithoutProxyOnStatusCode;retryOnProxyError;maxRetryOnProxyError;allowRevisiting;enableCache;cacheTTL;cacheDir;throwFatalError;debug;concurrency;scraperConcurrency;maxDepth;maxUrls;maxResponseSize;respectRobotsTxt;followNofollow;autoThrottle;autoThrottleTargetDelay;autoThrottleMinDelay;autoThrottleMaxDelay;maxWaitOn429;alwaysWaitOn429;oxylabs=[];decodo=[];proxies=[];limiters=[];requestHeaders=[];userAgents=A();constructor(e={}){this.baseUrl=e.baseUrl||"",this.adapter=e.adapter??"http",this.enableNavigationHistory=e.enableNavigationHistory??!1,this.sessionId=e.sessionId??`session_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.rejectUnauthorized=e.rejectUnauthorized??!0,this.userAgent=e.userAgent,this.useRndUserAgent=e.useRndUserAgent??!1,this.timeout=e.timeout??30000,this.maxRedirects=e.maxRedirects??10,this.maxRetryAttempts=e.maxRetryAttempts??3,this.retryDelay=e.retryDelay??0,this.retryOnStatusCode=e.retryOnStatusCode??[408,429,500,502,503,504],this.forceRevisit=e.forceRevisit??!1,this.retryWithoutProxyOnStatusCode=e.retryWithoutProxyOnStatusCode??[407,403],this.retryOnProxyError=e.retryOnProxyError??!0,this.maxRetryOnProxyError=e.maxRetryOnProxyError??3,this.allowRevisiting=e.allowRevisiting??!1,this.enableCache=e.enableCache??!0,this.cacheTTL=e.cacheTTL??604800000,this.cacheDir=e.cacheDir??x.join(b.tmpdir(),"uiniqhtt_cache"),this.throwFatalError=e.throwFatalError??!1,this.debug=e.debug??!1,this.concurrency=e.concurrency??100,this.scraperConcurrency=e.scraperConcurrency??this.concurrency,this.maxDepth=e.maxDepth??0,this.maxUrls=e.maxUrls??0,this.maxResponseSize=e.maxResponseSize??0,this.respectRobotsTxt=e.respectRobotsTxt??!1,this.followNofollow=e.followNofollow??!1,this.autoThrottle=e.autoThrottle??!0,this.autoThrottleTargetDelay=e.autoThrottleTargetDelay??1000,this.autoThrottleMinDelay=e.autoThrottleMinDelay??100,this.autoThrottleMaxDelay=e.autoThrottleMaxDelay??60000,this.maxWaitOn429=e.maxWaitOn429??1800000,this.alwaysWaitOn429=e.alwaysWaitOn429??!1,this._addHeaders(e.headers),this._addOxylabs(e.oxylabs),this._addDecodo(e.decodo),this._addProxies(e.proxy),this._addLimiters(e.limiter)}getConfiguredDomains(e){return(e==="headers"?this.requestHeaders:e==="limiters"?this.limiters:e==="oxylabs"?this.oxylabs:this.proxies).filter((i)=>i.domain).map((i)=>i.domain).filter((i,a,r)=>r.indexOf(i)===a)}removeDomain(e){return this.requestHeaders=this.requestHeaders.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.proxies=this.proxies.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.limiters=this.limiters.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.oxylabs=this.oxylabs.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this}_domainsEqual(e,t){if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((i,a)=>i===t[a]);return e===t}getConfigurationSummary(){let e=(t)=>({total:t.length,global:t.filter((i)=>i.isGlobal).length,domainSpecific:t.filter((i)=>!i.isGlobal&&i.domain).length});return{headers:e(this.requestHeaders),proxies:e(this.proxies),limiters:e(this.limiters),oxylabs:e(this.oxylabs)}}_addHeaders(e){if(!e||!e.enable)return;for(let t of e.httpHeaders){let{domain:i,isGlobal:a,headers:r}=t;if(!i&&!a)continue;if(r instanceof Headers){let s=Object.fromEntries(r.entries());if(Object.keys(s).length<1)continue;r=s}else if(!r||Object.keys(r).length<1)continue;this.requestHeaders.push({domain:i,isGlobal:a,headers:r})}}_addProxies(e){if(!e||!e.enable)return;for(let t of e.proxies){let{domain:i,isGlobal:a,proxy:r}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.proxies.push({domain:i,isGlobal:a,proxy:r})}}_addLimiters(e){if(!e||!e.enable)return;for(let t of e.limiters){let{domain:i,isGlobal:a,options:r}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.limiters.push({domain:i,isGlobal:a,pqueue:new m(r)})}}_addOxylabs(e){if(!e||!e.enable)return;for(let t of e.labs){let{domain:i,isGlobal:a,options:r,queueOptions:s}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.oxylabs.push({domain:i,isGlobal:a,adaptar:new f(r)})}}_addDecodo(e){if(!e||!e.enable)return;for(let t of e.labs){let{domain:i,isGlobal:a,options:r,queueOptions:s}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.decodo.push({domain:i,isGlobal:a,adaptar:new g(r)})}}addHeaders(e){return this._addHeaders({enable:!0,httpHeaders:[e]}),this}addProxy(e){return this._addProxies({enable:!0,proxies:[e]}),this}addLimiter(e){return this._addLimiters({enable:!0,limiters:[e]}),this}addOxylabs(e){return this._addOxylabs({enable:!0,labs:[e]}),this}addDecodo(e){return this._addDecodo({enable:!0,labs:[e]}),this}destroyLimiters(){for(let e of this.limiters)if(e.pqueue&&typeof e.pqueue.destroy==="function")e.pqueue.destroy();this.limiters=[]}clearGlobalConfigs(){if(Array.isArray(this.requestHeaders))this.requestHeaders=this.requestHeaders.filter((e)=>!e.isGlobal);if(Array.isArray(this.oxylabs))this.oxylabs=this.oxylabs.filter((e)=>!e.isGlobal);if(Array.isArray(this.limiters))this.limiters=this.limiters.filter((e)=>!e.isGlobal);if(Array.isArray(this.proxies))this.proxies=this.proxies.filter((e)=>!e.isGlobal);return this}getAdapter(e,t,i,a){if(!this.getDomainName(e))return null;let s=[],n=t==="headers"?this.requestHeaders:t==="limiters"?this.limiters:t==="oxylabs"?this.oxylabs:t==="decodo"?this.decodo:this.proxies;for(let o=0;o<n.length;o++)if(this._hasDomain(e,n[o].domain))s.push(o);if(s.length){let o=a?s[this.rnd(0,s.length-1)]:s[0];return t==="headers"?this.requestHeaders[o].headers:t==="limiters"?this.limiters[o].pqueue:t==="oxylabs"?this.oxylabs[o].adaptar:t==="decodo"?this.decodo[o].adaptar:this.proxies[o].proxy}s.length=0;for(let o=0;o<n.length;o++)s.push(o);if(s.length){let o=a?s[this.rnd(0,s.length-1)]:s[0];if(n[o].isGlobal&&i)return t==="headers"?this.requestHeaders[o].headers:t==="limiters"?this.limiters[o].pqueue:t==="oxylabs"?this.oxylabs[o].adaptar:t==="decodo"?this.decodo[o].adaptar:this.proxies[o].proxy}return null}rnd(e=0,t=Number.MAX_VALUE){return Math.floor(Math.random()*(t-e+1))+e}hasDomain(e,t,i){if(!this.getDomainName(e))return!1;let r=t==="headers"?this.requestHeaders:t==="limiters"?this.limiters:t==="oxylabs"?this.oxylabs:t==="decodo"?this.decodo:this.proxies;for(let s=0;s<r.length;s++)if(this._hasDomain(e,r[s].domain))return!0;if(i){for(let s=0;s<r.length;s++)if(r[s].isGlobal)return!0}return!1}pickHeaders(e,t,i,a){let r=this.getAdapter(e,"headers",t),s=new Headers(r??{}),n=s.count;if(i&&i instanceof Headers)for(let[o,l]of Object.entries(i.entries()))s.set(o,l);else if(i&&typeof i==="object"){for(let[o,l]of Object.entries(i))if(typeof l==="string")s.set(o,l)}if(a&&n===0)s.set("user-agent",this.getRandomUserAgent());return Object.fromEntries(s.entries())}_hasDomain(e,t){if(!t)return!1;let i=this.getDomainName(e);if(!i)return!1;let a=(s)=>{return/[\^\$\*\+\?\{\}\[\]\(\)\|\\]/.test(s)||s.startsWith("/")||s.includes(".*")||s.includes(".+")},r=(s)=>{if(s instanceof RegExp)return s.test(i)||s.test(e);let n=s.toString().trim();if(i.toLowerCase()===n.toLowerCase())return!0;if(n.includes("*")){let h=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,".*"),c=new RegExp(`^${h}$`,"i");return c.test(i)||c.test(e)}if(a(n))try{let h=n,c="i",u=n.match(/^\/(.*)\/(\w*)$/);if(u)h=u[1],c=u[2]||"i";let d=new RegExp(h,c);return d.test(i)||d.test(e)}catch(h){return i.toLowerCase().includes(n.toLowerCase())}let o=i.toLowerCase(),l=n.toLowerCase();return o===l||o.endsWith("."+l)||l.endsWith("."+o)};if(Array.isArray(t)){for(let s of t)if(r(s))return!0;return!1}return r(t)}getDomainName(e){if(this.isValidUrl(e))return new URL(e).hostname;else if(this.isHostName(e))return e;return null}isHostName(e){if(!e)return!1;if(e.length>255)return!1;let t=/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+ [a-zA-Z]{2,})$/;return e=e.trim().toLowerCase(),t.test(e)&&!e.startsWith("-")&&!e.endsWith("-")}isValidUrl(e){if(!e)return!1;e=e.trim();try{let t=new URL(e);if(!t.protocol||!["http:","https:"].includes(t.protocol.toLowerCase()))return!1;if(!t.hostname)return!1;if(!/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,})$/.test(t.hostname))return!1;return!0}catch{return!1}}getRandomUserAgent(){return this.userAgents[Math.floor(Math.random()*this.userAgents.length)]}}function A(){let e=[{name:"Chrome",version:"91.0.4472.124",engine:"AppleWebKit/537.36"},{name:"Firefox",version:"89.0",engine:"Gecko/20100101"},{name:"Safari",version:"14.1.1",engine:"AppleWebKit/605.1.15"},{name:"Edge",version:"91.0.864.59",engine:"AppleWebKit/537.36"},{name:"Opera",version:"77.0.4054.277",engine:"AppleWebKit/537.36"},{name:"Vivaldi",version:"3.8.2259.42",engine:"AppleWebKit/537.36"},{name:"Brave",version:"1.26.74",engine:"AppleWebKit/537.36"},{name:"Chromium",version:"91.0.4472.101",engine:"AppleWebKit/537.36"},{name:"Yandex",version:"21.5.3.742",engine:"AppleWebKit/537.36"},{name:"Maxthon",version:"5.3.8.2000",engine:"AppleWebKit/537.36"}],t=["Windows NT 10.0","Windows NT 6.1","Macintosh; Intel Mac OS X 10_15_7","Macintosh; Intel Mac OS X 11_4_0","X11; Linux x86_64","X11; Ubuntu; Linux x86_64"],i=[];for(let a=0;a<200;a++){let r=e[Math.floor(Math.random()*e.length)],s=t[Math.floor(Math.random()*t.length)],n="";switch(r.name){case"Chrome":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36`;break;case"Firefox":n=`Mozilla/5.0 (${s}; rv:${r.version}) ${r.engine} Firefox/${r.version}`;break;case"Safari":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Version/${r.version} Safari/605.1.15`;break;case"Edge":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Edg/${r.version}`;break;case"Opera":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 OPR/${r.version}`;break;case"Vivaldi":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Vivaldi/${r.version}`;break;case"Brave":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Brave/${r.version}`;break;case"Chromium":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chromium/${r.version} Chrome/${r.version} Safari/537.36`;break;case"Yandex":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} YaBrowser/${r.version} Safari/537.36`;break;case"Maxthon":n=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Maxthon/${r.version}`;break}i.push(n)}return i}export{y as CrawlerOptions};
1
+ import{RezoQueue as f}from"../queue/queue.js";import{Oxylabs as m}from"./addon/oxylabs/index.js";import x from"node:path";import b from"node:os";import{Decodo as g}from"./addon/decodo/index.js";class y{baseUrl;adapter;enableNavigationHistory;sessionId;rejectUnauthorized;userAgent;useRndUserAgent;timeout;maxRedirects;maxRetryAttempts;retryDelay;retryOnStatusCode;forceRevisit;retryWithoutProxyOnStatusCode;retryOnProxyError;maxRetryOnProxyError;allowRevisiting;enableCache;cacheTTL;cacheDir;throwFatalError;debug;enableSignalHandlers;concurrency;scraperConcurrency;maxDepth;maxUrls;maxResponseSize;respectRobotsTxt;followNofollow;autoThrottle;autoThrottleTargetDelay;autoThrottleMinDelay;autoThrottleMaxDelay;maxWaitOn429;alwaysWaitOn429;oxylabs=[];decodo=[];proxies=[];limiters=[];requestHeaders=[];userAgents=A();constructor(e={}){this.baseUrl=e.baseUrl||"",this.adapter=e.adapter??"http",this.enableNavigationHistory=e.enableNavigationHistory??!1,this.sessionId=e.sessionId??`session_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.rejectUnauthorized=e.rejectUnauthorized??!0,this.userAgent=e.userAgent,this.useRndUserAgent=e.useRndUserAgent??!1,this.timeout=e.timeout??30000,this.maxRedirects=e.maxRedirects??10,this.maxRetryAttempts=e.maxRetryAttempts??3,this.retryDelay=e.retryDelay??0,this.retryOnStatusCode=e.retryOnStatusCode??[408,429,500,502,503,504],this.forceRevisit=e.forceRevisit??!1,this.retryWithoutProxyOnStatusCode=e.retryWithoutProxyOnStatusCode??[407,403],this.retryOnProxyError=e.retryOnProxyError??!0,this.maxRetryOnProxyError=e.maxRetryOnProxyError??3,this.allowRevisiting=e.allowRevisiting??!1,this.enableCache=e.enableCache??!0,this.cacheTTL=e.cacheTTL??604800000,this.cacheDir=e.cacheDir??x.join(b.tmpdir(),"uiniqhtt_cache"),this.throwFatalError=e.throwFatalError??!1,this.debug=e.debug??!1,this.enableSignalHandlers=e.enableSignalHandlers??!1,this.concurrency=e.concurrency??100,this.scraperConcurrency=e.scraperConcurrency??this.concurrency,this.maxDepth=e.maxDepth??0,this.maxUrls=e.maxUrls??0,this.maxResponseSize=e.maxResponseSize??0,this.respectRobotsTxt=e.respectRobotsTxt??!1,this.followNofollow=e.followNofollow??!1,this.autoThrottle=e.autoThrottle??!0,this.autoThrottleTargetDelay=e.autoThrottleTargetDelay??1000,this.autoThrottleMinDelay=e.autoThrottleMinDelay??100,this.autoThrottleMaxDelay=e.autoThrottleMaxDelay??60000,this.maxWaitOn429=e.maxWaitOn429??1800000,this.alwaysWaitOn429=e.alwaysWaitOn429??!1,this._addHeaders(e.headers),this._addOxylabs(e.oxylabs),this._addDecodo(e.decodo),this._addProxies(e.proxy),this._addLimiters(e.limiter)}getConfiguredDomains(e){return(e==="headers"?this.requestHeaders:e==="limiters"?this.limiters:e==="oxylabs"?this.oxylabs:this.proxies).filter((i)=>i.domain).map((i)=>i.domain).filter((i,a,r)=>r.indexOf(i)===a)}removeDomain(e){return this.requestHeaders=this.requestHeaders.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.proxies=this.proxies.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.limiters=this.limiters.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this.oxylabs=this.oxylabs.filter((t)=>!t.domain||!this._domainsEqual(t.domain,e)),this}_domainsEqual(e,t){if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((i,a)=>i===t[a]);return e===t}getConfigurationSummary(){let e=(t)=>({total:t.length,global:t.filter((i)=>i.isGlobal).length,domainSpecific:t.filter((i)=>!i.isGlobal&&i.domain).length});return{headers:e(this.requestHeaders),proxies:e(this.proxies),limiters:e(this.limiters),oxylabs:e(this.oxylabs)}}_addHeaders(e){if(!e||!e.enable)return;for(let t of e.httpHeaders){let{domain:i,isGlobal:a,headers:r}=t;if(!i&&!a)continue;if(r instanceof Headers){let s=Object.fromEntries(r.entries());if(Object.keys(s).length<1)continue;r=s}else if(!r||Object.keys(r).length<1)continue;this.requestHeaders.push({domain:i,isGlobal:a,headers:r})}}_addProxies(e){if(!e||!e.enable)return;for(let t of e.proxies){let{domain:i,isGlobal:a,proxy:r}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.proxies.push({domain:i,isGlobal:a,proxy:r})}}_addLimiters(e){if(!e||!e.enable)return;for(let t of e.limiters){let{domain:i,isGlobal:a,options:r}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.limiters.push({domain:i,isGlobal:a,pqueue:new f(r)})}}_addOxylabs(e){if(!e||!e.enable)return;for(let t of e.labs){let{domain:i,isGlobal:a,options:r,queueOptions:s}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.oxylabs.push({domain:i,isGlobal:a,adaptar:new m(r)})}}_addDecodo(e){if(!e||!e.enable)return;for(let t of e.labs){let{domain:i,isGlobal:a,options:r,queueOptions:s}=t;if(!i&&!a)continue;if(!r||Object.keys(r).length<1)continue;this.decodo.push({domain:i,isGlobal:a,adaptar:new g(r)})}}addHeaders(e){return this._addHeaders({enable:!0,httpHeaders:[e]}),this}addProxy(e){return this._addProxies({enable:!0,proxies:[e]}),this}addLimiter(e){return this._addLimiters({enable:!0,limiters:[e]}),this}addOxylabs(e){return this._addOxylabs({enable:!0,labs:[e]}),this}addDecodo(e){return this._addDecodo({enable:!0,labs:[e]}),this}destroyLimiters(){for(let e of this.limiters)if(e.pqueue&&typeof e.pqueue.destroy==="function")e.pqueue.destroy();this.limiters=[]}clearGlobalConfigs(){if(Array.isArray(this.requestHeaders))this.requestHeaders=this.requestHeaders.filter((e)=>!e.isGlobal);if(Array.isArray(this.oxylabs))this.oxylabs=this.oxylabs.filter((e)=>!e.isGlobal);if(Array.isArray(this.limiters))this.limiters=this.limiters.filter((e)=>!e.isGlobal);if(Array.isArray(this.proxies))this.proxies=this.proxies.filter((e)=>!e.isGlobal);return this}getAdapter(e,t,i,a){if(!this.getDomainName(e))return null;let s=[],o=t==="headers"?this.requestHeaders:t==="limiters"?this.limiters:t==="oxylabs"?this.oxylabs:t==="decodo"?this.decodo:this.proxies;for(let n=0;n<o.length;n++)if(this._hasDomain(e,o[n].domain))s.push(n);if(s.length){let n=a?s[this.rnd(0,s.length-1)]:s[0];return t==="headers"?this.requestHeaders[n].headers:t==="limiters"?this.limiters[n].pqueue:t==="oxylabs"?this.oxylabs[n].adaptar:t==="decodo"?this.decodo[n].adaptar:this.proxies[n].proxy}s.length=0;for(let n=0;n<o.length;n++)s.push(n);if(s.length){let n=a?s[this.rnd(0,s.length-1)]:s[0];if(o[n].isGlobal&&i)return t==="headers"?this.requestHeaders[n].headers:t==="limiters"?this.limiters[n].pqueue:t==="oxylabs"?this.oxylabs[n].adaptar:t==="decodo"?this.decodo[n].adaptar:this.proxies[n].proxy}return null}rnd(e=0,t=Number.MAX_VALUE){return Math.floor(Math.random()*(t-e+1))+e}hasDomain(e,t,i){if(!this.getDomainName(e))return!1;let r=t==="headers"?this.requestHeaders:t==="limiters"?this.limiters:t==="oxylabs"?this.oxylabs:t==="decodo"?this.decodo:this.proxies;for(let s=0;s<r.length;s++)if(this._hasDomain(e,r[s].domain))return!0;if(i){for(let s=0;s<r.length;s++)if(r[s].isGlobal)return!0}return!1}pickHeaders(e,t,i,a){let r=this.getAdapter(e,"headers",t),s=new Headers(r??{}),o=s.count;if(i&&i instanceof Headers)for(let[n,l]of Object.entries(i.entries()))s.set(n,l);else if(i&&typeof i==="object"){for(let[n,l]of Object.entries(i))if(typeof l==="string")s.set(n,l)}if(a&&o===0)s.set("user-agent",this.getRandomUserAgent());return Object.fromEntries(s.entries())}_hasDomain(e,t){if(!t)return!1;let i=this.getDomainName(e);if(!i)return!1;let a=(s)=>{return/[\^\$\*\+\?\{\}\[\]\(\)\|\\]/.test(s)||s.startsWith("/")||s.includes(".*")||s.includes(".+")},r=(s)=>{if(s instanceof RegExp)return s.test(i)||s.test(e);let o=s.toString().trim();if(i.toLowerCase()===o.toLowerCase())return!0;if(o.includes("*")){let h=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,".*"),c=new RegExp(`^${h}$`,"i");return c.test(i)||c.test(e)}if(a(o))try{let h=o,c="i",d=o.match(/^\/(.*)\/(\w*)$/);if(d)h=d[1],c=d[2]||"i";let u=new RegExp(h,c);return u.test(i)||u.test(e)}catch(h){return i.toLowerCase().includes(o.toLowerCase())}let n=i.toLowerCase(),l=o.toLowerCase();return n===l||n.endsWith("."+l)||l.endsWith("."+n)};if(Array.isArray(t)){for(let s of t)if(r(s))return!0;return!1}return r(t)}getDomainName(e){if(this.isValidUrl(e))return new URL(e).hostname;else if(this.isHostName(e))return e;return null}isHostName(e){if(!e)return!1;if(e.length>255)return!1;let t=/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+ [a-zA-Z]{2,})$/;return e=e.trim().toLowerCase(),t.test(e)&&!e.startsWith("-")&&!e.endsWith("-")}isValidUrl(e){if(!e)return!1;e=e.trim();try{let t=new URL(e);if(!t.protocol||!["http:","https:"].includes(t.protocol.toLowerCase()))return!1;if(!t.hostname)return!1;if(!/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,})$/.test(t.hostname))return!1;return!0}catch{return!1}}getRandomUserAgent(){return this.userAgents[Math.floor(Math.random()*this.userAgents.length)]}}function A(){let e=[{name:"Chrome",version:"91.0.4472.124",engine:"AppleWebKit/537.36"},{name:"Firefox",version:"89.0",engine:"Gecko/20100101"},{name:"Safari",version:"14.1.1",engine:"AppleWebKit/605.1.15"},{name:"Edge",version:"91.0.864.59",engine:"AppleWebKit/537.36"},{name:"Opera",version:"77.0.4054.277",engine:"AppleWebKit/537.36"},{name:"Vivaldi",version:"3.8.2259.42",engine:"AppleWebKit/537.36"},{name:"Brave",version:"1.26.74",engine:"AppleWebKit/537.36"},{name:"Chromium",version:"91.0.4472.101",engine:"AppleWebKit/537.36"},{name:"Yandex",version:"21.5.3.742",engine:"AppleWebKit/537.36"},{name:"Maxthon",version:"5.3.8.2000",engine:"AppleWebKit/537.36"}],t=["Windows NT 10.0","Windows NT 6.1","Macintosh; Intel Mac OS X 10_15_7","Macintosh; Intel Mac OS X 11_4_0","X11; Linux x86_64","X11; Ubuntu; Linux x86_64"],i=[];for(let a=0;a<200;a++){let r=e[Math.floor(Math.random()*e.length)],s=t[Math.floor(Math.random()*t.length)],o="";switch(r.name){case"Chrome":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36`;break;case"Firefox":o=`Mozilla/5.0 (${s}; rv:${r.version}) ${r.engine} Firefox/${r.version}`;break;case"Safari":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Version/${r.version} Safari/605.1.15`;break;case"Edge":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Edg/${r.version}`;break;case"Opera":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 OPR/${r.version}`;break;case"Vivaldi":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Vivaldi/${r.version}`;break;case"Brave":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Brave/${r.version}`;break;case"Chromium":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chromium/${r.version} Chrome/${r.version} Safari/537.36`;break;case"Yandex":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} YaBrowser/${r.version} Safari/537.36`;break;case"Maxthon":o=`Mozilla/5.0 (${s}) ${r.engine} (KHTML, like Gecko) Chrome/${r.version} Safari/537.36 Maxthon/${r.version}`;break}i.push(o)}return i}export{y as CrawlerOptions};
@@ -9,7 +9,7 @@ const { CappedMap } = require('./plugin/capped-map.cjs');
9
9
  const { CappedArray } = require('./plugin/capped-array.cjs');
10
10
  const { parseHTML } = require("linkedom");
11
11
  const path = require("node:path");
12
- const { Rezo } = require('../adapters/entries/http.cjs');
12
+ const rezo = require('../adapters/entries/http.cjs');
13
13
  const { RezoQueue } = require('../queue/queue.cjs');
14
14
  const { Scraper } = require('./scraper.cjs');
15
15
  const { CrawlerOptions } = require('./crawler-options.cjs');
@@ -94,19 +94,17 @@ class Crawler {
94
94
  });
95
95
  crawlStarted = false;
96
96
  startHandlersPromise = null;
97
- constructor(crawlerOptions, http = new Rezo) {
97
+ constructor(crawlerOptions, http = rezo.create()) {
98
98
  this.http = http;
99
99
  this.config = new CrawlerOptions(crawlerOptions);
100
100
  this.adapterType = this.config.adapter;
101
101
  const concurrency = this.config.concurrency;
102
102
  this.queue = new RezoQueue({
103
- concurrency,
104
- timeout: 60000
103
+ concurrency
105
104
  });
106
105
  this.originalConcurrency = concurrency;
107
106
  this.scraperQueue = new RezoQueue({
108
- concurrency: this.config.scraperConcurrency,
109
- timeout: 60000
107
+ concurrency: this.config.scraperConcurrency
110
108
  });
111
109
  this.memoryMonitor = new MemoryMonitor({ warningRatio: 0.7, criticalRatio: 0.85 });
112
110
  this.healthMetrics = new HealthMetrics({ windowSize: 60000 });
@@ -178,7 +176,9 @@ class Crawler {
178
176
  if (this.config.baseUrl) {
179
177
  this.urlDepthMap.set(this.config.baseUrl, 0);
180
178
  }
181
- this.registerShutdownHandlers();
179
+ if (this.config.enableSignalHandlers) {
180
+ this.registerShutdownHandlers();
181
+ }
182
182
  }
183
183
  registerShutdownHandlers() {
184
184
  if (this.shutdownHandler)
@@ -227,6 +227,7 @@ class Crawler {
227
227
  }
228
228
  await this.destroy();
229
229
  console.log("[Crawler] Graceful shutdown complete");
230
+ process.exit(0);
230
231
  }
231
232
  async initializeAdapter() {
232
233
  try {
@@ -1056,8 +1057,6 @@ class Crawler {
1056
1057
  const headersObj = headers instanceof Headers ? Object.fromEntries(headers.entries()) : headers;
1057
1058
  this.addToNavigationQueue(url, method, body, headersObj);
1058
1059
  }
1059
- if (url.includes(`/www.yellowpages.com/search?`))
1060
- console.log("Visiting: ", url);
1061
1060
  this.crawlStarted = true;
1062
1061
  if (deepEmailFinder) {
1063
1062
  this.execute2(method, url, body, _options, forceRevisit, emailMetadata);
@@ -1133,7 +1132,7 @@ class Crawler {
1133
1132
  return;
1134
1133
  }
1135
1134
  const requestStartTime = Date.now();
1136
- const response = cache && method === "GET" && !skipCache ? cache : oxylabsInstanse && oxylabsOptions ? await oxylabsInstanse.scrape(url) : decodoInstanse && decodoOptions ? await decodoInstanse.scrape(url) : await (method === "GET" ? this.http.get(url, options) : method === "PATCH" ? this.http.patch(url, body, options) : method === "POST" ? this.http.post(url, body, options) : this.http.put(url, body, options));
1135
+ const response = cache && method === "GET" && !skipCache ? cache : oxylabsInstanse && oxylabsOptions ? await oxylabsInstanse.scrape(url) : decodoInstanse && decodoOptions ? await decodoInstanse.scrape(url) : method === "GET" ? await this.http.get(url, options) : method === "PATCH" ? await this.http.patch(url, body, options) : method === "POST" ? await this.http.post(url, body, options) : await this.http.put(url, body, options);
1137
1136
  if (!response) {
1138
1137
  this.crawlStats.urlsFailed++;
1139
1138
  this.healthMetrics.recordRequest(Date.now() - requestStartTime, false);
@@ -1268,6 +1267,17 @@ class Crawler {
1268
1267
  }
1269
1268
  }
1270
1269
  async waitForAll() {
1270
+ if (!this.crawlStarted) {
1271
+ await new Promise((resolve) => setImmediate(resolve));
1272
+ const maxWaitForStart = 1000;
1273
+ const startWait = Date.now();
1274
+ while (!this.crawlStarted && Date.now() - startWait < maxWaitForStart) {
1275
+ await new Promise((resolve) => setTimeout(resolve, 10));
1276
+ }
1277
+ if (!this.crawlStarted) {
1278
+ return;
1279
+ }
1280
+ }
1271
1281
  const MIN_DELAY = 50;
1272
1282
  const MAX_DELAY = 500;
1273
1283
  let currentDelay = MIN_DELAY;
@@ -9,7 +9,7 @@ import { CappedMap } from './plugin/capped-map.js';
9
9
  import { CappedArray } from './plugin/capped-array.js';
10
10
  import { parseHTML } from "linkedom";
11
11
  import path from "node:path";
12
- import { Rezo } from '../adapters/entries/http.js';
12
+ import rezo from '../adapters/entries/http.js';
13
13
  import { RezoQueue } from '../queue/queue.js';
14
14
  import { Scraper } from './scraper.js';
15
15
  import { CrawlerOptions } from './crawler-options.js';
@@ -94,19 +94,17 @@ export class Crawler {
94
94
  });
95
95
  crawlStarted = false;
96
96
  startHandlersPromise = null;
97
- constructor(crawlerOptions, http = new Rezo) {
97
+ constructor(crawlerOptions, http = rezo.create()) {
98
98
  this.http = http;
99
99
  this.config = new CrawlerOptions(crawlerOptions);
100
100
  this.adapterType = this.config.adapter;
101
101
  const concurrency = this.config.concurrency;
102
102
  this.queue = new RezoQueue({
103
- concurrency,
104
- timeout: 60000
103
+ concurrency
105
104
  });
106
105
  this.originalConcurrency = concurrency;
107
106
  this.scraperQueue = new RezoQueue({
108
- concurrency: this.config.scraperConcurrency,
109
- timeout: 60000
107
+ concurrency: this.config.scraperConcurrency
110
108
  });
111
109
  this.memoryMonitor = new MemoryMonitor({ warningRatio: 0.7, criticalRatio: 0.85 });
112
110
  this.healthMetrics = new HealthMetrics({ windowSize: 60000 });
@@ -178,7 +176,9 @@ export class Crawler {
178
176
  if (this.config.baseUrl) {
179
177
  this.urlDepthMap.set(this.config.baseUrl, 0);
180
178
  }
181
- this.registerShutdownHandlers();
179
+ if (this.config.enableSignalHandlers) {
180
+ this.registerShutdownHandlers();
181
+ }
182
182
  }
183
183
  registerShutdownHandlers() {
184
184
  if (this.shutdownHandler)
@@ -227,6 +227,7 @@ export class Crawler {
227
227
  }
228
228
  await this.destroy();
229
229
  console.log("[Crawler] Graceful shutdown complete");
230
+ process.exit(0);
230
231
  }
231
232
  async initializeAdapter() {
232
233
  try {
@@ -1056,8 +1057,6 @@ export class Crawler {
1056
1057
  const headersObj = headers instanceof Headers ? Object.fromEntries(headers.entries()) : headers;
1057
1058
  this.addToNavigationQueue(url, method, body, headersObj);
1058
1059
  }
1059
- if (url.includes(`/www.yellowpages.com/search?`))
1060
- console.log("Visiting: ", url);
1061
1060
  this.crawlStarted = true;
1062
1061
  if (deepEmailFinder) {
1063
1062
  this.execute2(method, url, body, _options, forceRevisit, emailMetadata);
@@ -1133,7 +1132,7 @@ export class Crawler {
1133
1132
  return;
1134
1133
  }
1135
1134
  const requestStartTime = Date.now();
1136
- const response = cache && method === "GET" && !skipCache ? cache : oxylabsInstanse && oxylabsOptions ? await oxylabsInstanse.scrape(url) : decodoInstanse && decodoOptions ? await decodoInstanse.scrape(url) : await (method === "GET" ? this.http.get(url, options) : method === "PATCH" ? this.http.patch(url, body, options) : method === "POST" ? this.http.post(url, body, options) : this.http.put(url, body, options));
1135
+ const response = cache && method === "GET" && !skipCache ? cache : oxylabsInstanse && oxylabsOptions ? await oxylabsInstanse.scrape(url) : decodoInstanse && decodoOptions ? await decodoInstanse.scrape(url) : method === "GET" ? await this.http.get(url, options) : method === "PATCH" ? await this.http.patch(url, body, options) : method === "POST" ? await this.http.post(url, body, options) : await this.http.put(url, body, options);
1137
1136
  if (!response) {
1138
1137
  this.crawlStats.urlsFailed++;
1139
1138
  this.healthMetrics.recordRequest(Date.now() - requestStartTime, false);
@@ -1268,6 +1267,17 @@ export class Crawler {
1268
1267
  }
1269
1268
  }
1270
1269
  async waitForAll() {
1270
+ if (!this.crawlStarted) {
1271
+ await new Promise((resolve) => setImmediate(resolve));
1272
+ const maxWaitForStart = 1000;
1273
+ const startWait = Date.now();
1274
+ while (!this.crawlStarted && Date.now() - startWait < maxWaitForStart) {
1275
+ await new Promise((resolve) => setTimeout(resolve, 10));
1276
+ }
1277
+ if (!this.crawlStarted) {
1278
+ return;
1279
+ }
1280
+ }
1271
1281
  const MIN_DELAY = 50;
1272
1282
  const MAX_DELAY = 500;
1273
1283
  let currentDelay = MIN_DELAY;
@@ -1,40 +1,40 @@
1
- const _mod_7qsaj1 = require('./crawler.cjs');
2
- exports.Crawler = _mod_7qsaj1.Crawler;;
3
- const _mod_5rlu0e = require('./crawler-options.cjs');
4
- exports.CrawlerOptions = _mod_5rlu0e.CrawlerOptions;;
5
- const _mod_skia2o = require('./plugin/robots-txt.cjs');
6
- exports.RobotsTxt = _mod_skia2o.RobotsTxt;;
7
- const _mod_w2aaxb = require('./plugin/file-cacher.cjs');
8
- exports.FileCacher = _mod_w2aaxb.FileCacher;;
9
- const _mod_f9de8f = require('./plugin/url-store.cjs');
10
- exports.UrlStore = _mod_f9de8f.UrlStore;;
11
- const _mod_wqtwlm = require('./plugin/navigation-history.cjs');
12
- exports.NavigationHistory = _mod_wqtwlm.NavigationHistory;;
13
- const _mod_hj9vi3 = require('./addon/oxylabs/index.cjs');
14
- exports.Oxylabs = _mod_hj9vi3.Oxylabs;;
15
- const _mod_7kzws5 = require('./addon/oxylabs/options.cjs');
16
- exports.OXYLABS_BROWSER_TYPES = _mod_7kzws5.OXYLABS_BROWSER_TYPES;
17
- exports.OXYLABS_COMMON_LOCALES = _mod_7kzws5.OXYLABS_COMMON_LOCALES;
18
- exports.OXYLABS_COMMON_GEO_LOCATIONS = _mod_7kzws5.OXYLABS_COMMON_GEO_LOCATIONS;
19
- exports.OXYLABS_US_STATES = _mod_7kzws5.OXYLABS_US_STATES;
20
- exports.OXYLABS_EUROPEAN_COUNTRIES = _mod_7kzws5.OXYLABS_EUROPEAN_COUNTRIES;
21
- exports.OXYLABS_ASIAN_COUNTRIES = _mod_7kzws5.OXYLABS_ASIAN_COUNTRIES;
22
- exports.getRandomOxylabsBrowserType = _mod_7kzws5.getRandomBrowserType;
23
- exports.getRandomOxylabsLocale = _mod_7kzws5.getRandomLocale;
24
- exports.getRandomOxylabsGeoLocation = _mod_7kzws5.getRandomGeoLocation;;
25
- const _mod_gdeyg9 = require('./addon/decodo/index.cjs');
26
- exports.Decodo = _mod_gdeyg9.Decodo;;
27
- const _mod_jbu0zi = require('./addon/decodo/options.cjs');
28
- exports.DECODO_DEVICE_TYPES = _mod_jbu0zi.DECODO_DEVICE_TYPES;
29
- exports.DECODO_HEADLESS_MODES = _mod_jbu0zi.DECODO_HEADLESS_MODES;
30
- exports.DECODO_COMMON_LOCALES = _mod_jbu0zi.DECODO_COMMON_LOCALES;
31
- exports.DECODO_COMMON_COUNTRIES = _mod_jbu0zi.DECODO_COMMON_COUNTRIES;
32
- exports.DECODO_EUROPEAN_COUNTRIES = _mod_jbu0zi.DECODO_EUROPEAN_COUNTRIES;
33
- exports.DECODO_ASIAN_COUNTRIES = _mod_jbu0zi.DECODO_ASIAN_COUNTRIES;
34
- exports.DECODO_US_STATES = _mod_jbu0zi.DECODO_US_STATES;
35
- exports.DECODO_COMMON_CITIES = _mod_jbu0zi.DECODO_COMMON_CITIES;
36
- exports.getRandomDecodoDeviceType = _mod_jbu0zi.getRandomDeviceType;
37
- exports.getRandomDecodoLocale = _mod_jbu0zi.getRandomLocale;
38
- exports.getRandomDecodoCountry = _mod_jbu0zi.getRandomCountry;
39
- exports.getRandomDecodoCity = _mod_jbu0zi.getRandomCity;
40
- exports.generateDecodoSessionId = _mod_jbu0zi.generateSessionId;;
1
+ const _mod_6mpp6d = require('./crawler.cjs');
2
+ exports.Crawler = _mod_6mpp6d.Crawler;;
3
+ const _mod_eyxxn5 = require('./crawler-options.cjs');
4
+ exports.CrawlerOptions = _mod_eyxxn5.CrawlerOptions;;
5
+ const _mod_dzyzre = require('./plugin/robots-txt.cjs');
6
+ exports.RobotsTxt = _mod_dzyzre.RobotsTxt;;
7
+ const _mod_8zpwd3 = require('./plugin/file-cacher.cjs');
8
+ exports.FileCacher = _mod_8zpwd3.FileCacher;;
9
+ const _mod_ebtdn9 = require('./plugin/url-store.cjs');
10
+ exports.UrlStore = _mod_ebtdn9.UrlStore;;
11
+ const _mod_heyy3y = require('./plugin/navigation-history.cjs');
12
+ exports.NavigationHistory = _mod_heyy3y.NavigationHistory;;
13
+ const _mod_rv4zsw = require('./addon/oxylabs/index.cjs');
14
+ exports.Oxylabs = _mod_rv4zsw.Oxylabs;;
15
+ const _mod_jj4yar = require('./addon/oxylabs/options.cjs');
16
+ exports.OXYLABS_BROWSER_TYPES = _mod_jj4yar.OXYLABS_BROWSER_TYPES;
17
+ exports.OXYLABS_COMMON_LOCALES = _mod_jj4yar.OXYLABS_COMMON_LOCALES;
18
+ exports.OXYLABS_COMMON_GEO_LOCATIONS = _mod_jj4yar.OXYLABS_COMMON_GEO_LOCATIONS;
19
+ exports.OXYLABS_US_STATES = _mod_jj4yar.OXYLABS_US_STATES;
20
+ exports.OXYLABS_EUROPEAN_COUNTRIES = _mod_jj4yar.OXYLABS_EUROPEAN_COUNTRIES;
21
+ exports.OXYLABS_ASIAN_COUNTRIES = _mod_jj4yar.OXYLABS_ASIAN_COUNTRIES;
22
+ exports.getRandomOxylabsBrowserType = _mod_jj4yar.getRandomBrowserType;
23
+ exports.getRandomOxylabsLocale = _mod_jj4yar.getRandomLocale;
24
+ exports.getRandomOxylabsGeoLocation = _mod_jj4yar.getRandomGeoLocation;;
25
+ const _mod_7fmx1b = require('./addon/decodo/index.cjs');
26
+ exports.Decodo = _mod_7fmx1b.Decodo;;
27
+ const _mod_4dxktf = require('./addon/decodo/options.cjs');
28
+ exports.DECODO_DEVICE_TYPES = _mod_4dxktf.DECODO_DEVICE_TYPES;
29
+ exports.DECODO_HEADLESS_MODES = _mod_4dxktf.DECODO_HEADLESS_MODES;
30
+ exports.DECODO_COMMON_LOCALES = _mod_4dxktf.DECODO_COMMON_LOCALES;
31
+ exports.DECODO_COMMON_COUNTRIES = _mod_4dxktf.DECODO_COMMON_COUNTRIES;
32
+ exports.DECODO_EUROPEAN_COUNTRIES = _mod_4dxktf.DECODO_EUROPEAN_COUNTRIES;
33
+ exports.DECODO_ASIAN_COUNTRIES = _mod_4dxktf.DECODO_ASIAN_COUNTRIES;
34
+ exports.DECODO_US_STATES = _mod_4dxktf.DECODO_US_STATES;
35
+ exports.DECODO_COMMON_CITIES = _mod_4dxktf.DECODO_COMMON_CITIES;
36
+ exports.getRandomDecodoDeviceType = _mod_4dxktf.getRandomDeviceType;
37
+ exports.getRandomDecodoLocale = _mod_4dxktf.getRandomLocale;
38
+ exports.getRandomDecodoCountry = _mod_4dxktf.getRandomCountry;
39
+ exports.getRandomDecodoCity = _mod_4dxktf.getRandomCity;
40
+ exports.generateDecodoSessionId = _mod_4dxktf.generateSessionId;;
@@ -1 +1 @@
1
- var e=require("./file-cacher.cjs");exports.FileCacher=e.FileCacher;var r=require("./url-store.cjs");exports.UrlStore=r.UrlStore;var o=require("./result-stream.cjs");exports.ResultStream=o.ResultStream;var t=require("./memory-monitor.cjs");exports.MemoryMonitor=t.MemoryMonitor;var a=require("./health-metrics.cjs");exports.HealthMetrics=a.HealthMetrics;var i=require("./capped-map.cjs");exports.CappedMap=i.CappedMap;var m=require("./capped-array.cjs");exports.CappedArray=m.CappedArray;
1
+ var e=require("./file-cacher.cjs");exports.FileCacher=e.FileCacher;var r=require("./url-store.cjs");exports.UrlStore=r.UrlStore;var o=require("./result-stream.cjs");exports.ResultStream=o.ResultStream;var t=require("./memory-monitor.cjs");exports.MemoryMonitor=t.MemoryMonitor;var a=require("./health-metrics.cjs");exports.HealthMetrics=a.HealthMetrics;var i=require("./capped-map.cjs");exports.CappedMap=i.CappedMap;var d=require("./capped-array.cjs");exports.CappedArray=d.CappedArray;
package/dist/crawler.d.ts CHANGED
@@ -6504,6 +6504,8 @@ export interface ICrawlerOptions {
6504
6504
  } | {
6505
6505
  enable: false;
6506
6506
  } | undefined | false;
6507
+ /** Enable graceful shutdown handlers for SIGINT/SIGTERM - saves session state (default: false) */
6508
+ enableSignalHandlers?: boolean;
6507
6509
  /** Maximum concurrent requests for crawler (default: 100) */
6508
6510
  concurrency?: number;
6509
6511
  /** Maximum concurrent requests for scraper - separate queue (default: same as concurrency) */
@@ -6606,6 +6608,8 @@ export declare class CrawlerOptions {
6606
6608
  throwFatalError?: boolean;
6607
6609
  /** Enable debug logging */
6608
6610
  debug?: boolean;
6611
+ /** Enable graceful shutdown handlers for SIGINT/SIGTERM - saves session state */
6612
+ enableSignalHandlers: boolean;
6609
6613
  /** Maximum concurrent requests for crawler (default: 100) */
6610
6614
  concurrency: number;
6611
6615
  /** Maximum concurrent requests for scraper (default: same as concurrency) */
@@ -1,4 +1,4 @@
1
- const _mod_lzlskh = require('../crawler/crawler.cjs');
2
- exports.Crawler = _mod_lzlskh.Crawler;;
3
- const _mod_vbox0l = require('../crawler/crawler-options.cjs');
4
- exports.CrawlerOptions = _mod_vbox0l.CrawlerOptions;;
1
+ const _mod_yduaec = require('../crawler/crawler.cjs');
2
+ exports.Crawler = _mod_yduaec.Crawler;;
3
+ const _mod_58t9fo = require('../crawler/crawler-options.cjs');
4
+ exports.CrawlerOptions = _mod_58t9fo.CrawlerOptions;;
@@ -553,9 +553,9 @@ function cleanStackTrace(stack) {
553
553
  class RezoError extends Error {
554
554
  constructor(message, config, code, request, response) {
555
555
  super();
556
- Object.defineProperty(this, "config", { value: config, enumerable: false });
557
- Object.defineProperty(this, "request", { value: request, enumerable: false });
558
- Object.defineProperty(this, "response", { value: response, enumerable: false });
556
+ Object.defineProperty(this, "config", { value: config, enumerable: !!config });
557
+ Object.defineProperty(this, "request", { value: request, enumerable: !!request });
558
+ Object.defineProperty(this, "response", { value: response, enumerable: !!response });
559
559
  Object.defineProperty(this, "isRezoError", { value: true, enumerable: false });
560
560
  if (code) {
561
561
  Object.defineProperty(this, "code", { value: code, enumerable: true });
@@ -600,75 +600,6 @@ class RezoError extends Error {
600
600
  }
601
601
  }
602
602
  }
603
- [Symbol.for("nodejs.util.inspect.custom")](_depth, options) {
604
- const parts = [];
605
- const isDebug = this.config?.debug === true;
606
- const inspect = options?.stylize ? (v) => require("util").inspect(v, { depth: 3, colors: true }) : JSON.stringify;
607
- parts.push(`${this.name}: ${this.message}`);
608
- if (this.code)
609
- parts.push(` code: '${this.code}'`);
610
- if (this.method)
611
- parts.push(` method: '${this.method}'`);
612
- if (this.url)
613
- parts.push(` url: '${this.url}'`);
614
- if (this.finalUrl && this.finalUrl !== this.url) {
615
- parts.push(` finalUrl: '${this.finalUrl}'`);
616
- }
617
- if (this.status)
618
- parts.push(` status: ${this.status}`);
619
- if (this.statusText)
620
- parts.push(` statusText: '${this.statusText}'`);
621
- if (this.urls && this.urls.length > 1) {
622
- parts.push(` urls: [${this.urls.map((u) => `'${u}'`).join(", ")}]`);
623
- }
624
- if (this.suggestion)
625
- parts.push(` suggestion: ${this.suggestion}`);
626
- if (isDebug) {
627
- parts.push("");
628
- parts.push(" --- Debug Info ---");
629
- if (this.cause) {
630
- const causeMsg = typeof this.cause === "string" ? this.cause : this.cause?.message || String(this.cause);
631
- parts.push(` cause: ${causeMsg}`);
632
- }
633
- if (this.errno)
634
- parts.push(` errno: ${this.errno}`);
635
- if (this.hostname)
636
- parts.push(` hostname: '${this.hostname}'`);
637
- if (this.port)
638
- parts.push(` port: ${this.port}`);
639
- if (this.address)
640
- parts.push(` address: '${this.address}'`);
641
- if (this.syscall)
642
- parts.push(` syscall: '${this.syscall}'`);
643
- if (this.response) {
644
- parts.push("");
645
- parts.push(" --- Response ---");
646
- parts.push(` response.status: ${this.response.status}`);
647
- parts.push(` response.statusText: '${this.response.statusText || ""}'`);
648
- parts.push(` response.finalUrl: '${this.response.finalUrl || ""}'`);
649
- if (this.response.headers) {
650
- parts.push(` response.headers: ${inspect(this.response.headers)}`);
651
- }
652
- if (this.response.data !== undefined) {
653
- const dataStr = typeof this.response.data === "string" ? this.response.data.substring(0, 500) + (this.response.data.length > 500 ? "..." : "") : inspect(this.response.data);
654
- parts.push(` response.data: ${dataStr}`);
655
- }
656
- }
657
- if (this.response?.config) {
658
- parts.push("");
659
- parts.push(" --- Request Config ---");
660
- const { cookieJar, ...configWithoutJar } = this.response.config;
661
- parts.push(` config: ${inspect(configWithoutJar)}`);
662
- }
663
- if (this.stack) {
664
- parts.push("");
665
- parts.push(" --- Stack Trace ---");
666
- parts.push(this.stack);
667
- }
668
- }
669
- return parts.join(`
670
- `);
671
- }
672
603
  static isRezoError(error) {
673
604
  return error instanceof RezoError || error !== null && typeof error === "object" && error.isRezoError === true;
674
605
  }
@@ -553,9 +553,9 @@ function cleanStackTrace(stack) {
553
553
  export class RezoError extends Error {
554
554
  constructor(message, config, code, request, response) {
555
555
  super();
556
- Object.defineProperty(this, "config", { value: config, enumerable: false });
557
- Object.defineProperty(this, "request", { value: request, enumerable: false });
558
- Object.defineProperty(this, "response", { value: response, enumerable: false });
556
+ Object.defineProperty(this, "config", { value: config, enumerable: !!config });
557
+ Object.defineProperty(this, "request", { value: request, enumerable: !!request });
558
+ Object.defineProperty(this, "response", { value: response, enumerable: !!response });
559
559
  Object.defineProperty(this, "isRezoError", { value: true, enumerable: false });
560
560
  if (code) {
561
561
  Object.defineProperty(this, "code", { value: code, enumerable: true });
@@ -600,75 +600,6 @@ export class RezoError extends Error {
600
600
  }
601
601
  }
602
602
  }
603
- [Symbol.for("nodejs.util.inspect.custom")](_depth, options) {
604
- const parts = [];
605
- const isDebug = this.config?.debug === true;
606
- const inspect = options?.stylize ? (v) => require("util").inspect(v, { depth: 3, colors: true }) : JSON.stringify;
607
- parts.push(`${this.name}: ${this.message}`);
608
- if (this.code)
609
- parts.push(` code: '${this.code}'`);
610
- if (this.method)
611
- parts.push(` method: '${this.method}'`);
612
- if (this.url)
613
- parts.push(` url: '${this.url}'`);
614
- if (this.finalUrl && this.finalUrl !== this.url) {
615
- parts.push(` finalUrl: '${this.finalUrl}'`);
616
- }
617
- if (this.status)
618
- parts.push(` status: ${this.status}`);
619
- if (this.statusText)
620
- parts.push(` statusText: '${this.statusText}'`);
621
- if (this.urls && this.urls.length > 1) {
622
- parts.push(` urls: [${this.urls.map((u) => `'${u}'`).join(", ")}]`);
623
- }
624
- if (this.suggestion)
625
- parts.push(` suggestion: ${this.suggestion}`);
626
- if (isDebug) {
627
- parts.push("");
628
- parts.push(" --- Debug Info ---");
629
- if (this.cause) {
630
- const causeMsg = typeof this.cause === "string" ? this.cause : this.cause?.message || String(this.cause);
631
- parts.push(` cause: ${causeMsg}`);
632
- }
633
- if (this.errno)
634
- parts.push(` errno: ${this.errno}`);
635
- if (this.hostname)
636
- parts.push(` hostname: '${this.hostname}'`);
637
- if (this.port)
638
- parts.push(` port: ${this.port}`);
639
- if (this.address)
640
- parts.push(` address: '${this.address}'`);
641
- if (this.syscall)
642
- parts.push(` syscall: '${this.syscall}'`);
643
- if (this.response) {
644
- parts.push("");
645
- parts.push(" --- Response ---");
646
- parts.push(` response.status: ${this.response.status}`);
647
- parts.push(` response.statusText: '${this.response.statusText || ""}'`);
648
- parts.push(` response.finalUrl: '${this.response.finalUrl || ""}'`);
649
- if (this.response.headers) {
650
- parts.push(` response.headers: ${inspect(this.response.headers)}`);
651
- }
652
- if (this.response.data !== undefined) {
653
- const dataStr = typeof this.response.data === "string" ? this.response.data.substring(0, 500) + (this.response.data.length > 500 ? "..." : "") : inspect(this.response.data);
654
- parts.push(` response.data: ${dataStr}`);
655
- }
656
- }
657
- if (this.response?.config) {
658
- parts.push("");
659
- parts.push(" --- Request Config ---");
660
- const { cookieJar, ...configWithoutJar } = this.response.config;
661
- parts.push(` config: ${inspect(configWithoutJar)}`);
662
- }
663
- if (this.stack) {
664
- parts.push("");
665
- parts.push(" --- Stack Trace ---");
666
- parts.push(this.stack);
667
- }
668
- }
669
- return parts.join(`
670
- `);
671
- }
672
603
  static isRezoError(error) {
673
604
  return error instanceof RezoError || error !== null && typeof error === "object" && error.isRezoError === true;
674
605
  }
package/dist/index.cjs CHANGED
@@ -1,30 +1,30 @@
1
- const _mod_nof5gk = require('./core/rezo.cjs');
2
- exports.Rezo = _mod_nof5gk.Rezo;
3
- exports.createRezoInstance = _mod_nof5gk.createRezoInstance;
4
- exports.createDefaultInstance = _mod_nof5gk.createDefaultInstance;;
5
- const _mod_4m1kqu = require('./errors/rezo-error.cjs');
6
- exports.RezoError = _mod_4m1kqu.RezoError;
7
- exports.RezoErrorCode = _mod_4m1kqu.RezoErrorCode;;
8
- const _mod_p9wchx = require('./utils/headers.cjs');
9
- exports.RezoHeaders = _mod_p9wchx.RezoHeaders;;
10
- const _mod_ib1mep = require('./utils/form-data.cjs');
11
- exports.RezoFormData = _mod_ib1mep.RezoFormData;;
12
- const _mod_fkghv0 = require('./utils/cookies.cjs');
13
- exports.RezoCookieJar = _mod_fkghv0.RezoCookieJar;
14
- exports.Cookie = _mod_fkghv0.Cookie;;
15
- const _mod_qucbgi = require('./utils/curl.cjs');
16
- exports.toCurl = _mod_qucbgi.toCurl;
17
- exports.fromCurl = _mod_qucbgi.fromCurl;;
18
- const _mod_6whv41 = require('./core/hooks.cjs');
19
- exports.createDefaultHooks = _mod_6whv41.createDefaultHooks;
20
- exports.mergeHooks = _mod_6whv41.mergeHooks;;
21
- const _mod_urv2c9 = require('./proxy/manager.cjs');
22
- exports.ProxyManager = _mod_urv2c9.ProxyManager;;
23
- const _mod_hfcxva = require('./queue/index.cjs');
24
- exports.RezoQueue = _mod_hfcxva.RezoQueue;
25
- exports.HttpQueue = _mod_hfcxva.HttpQueue;
26
- exports.Priority = _mod_hfcxva.Priority;
27
- exports.HttpMethodPriority = _mod_hfcxva.HttpMethodPriority;;
1
+ const _mod_f5e2x4 = require('./core/rezo.cjs');
2
+ exports.Rezo = _mod_f5e2x4.Rezo;
3
+ exports.createRezoInstance = _mod_f5e2x4.createRezoInstance;
4
+ exports.createDefaultInstance = _mod_f5e2x4.createDefaultInstance;;
5
+ const _mod_l2n0t8 = require('./errors/rezo-error.cjs');
6
+ exports.RezoError = _mod_l2n0t8.RezoError;
7
+ exports.RezoErrorCode = _mod_l2n0t8.RezoErrorCode;;
8
+ const _mod_pgi4on = require('./utils/headers.cjs');
9
+ exports.RezoHeaders = _mod_pgi4on.RezoHeaders;;
10
+ const _mod_k82fb8 = require('./utils/form-data.cjs');
11
+ exports.RezoFormData = _mod_k82fb8.RezoFormData;;
12
+ const _mod_u8f16d = require('./utils/cookies.cjs');
13
+ exports.RezoCookieJar = _mod_u8f16d.RezoCookieJar;
14
+ exports.Cookie = _mod_u8f16d.Cookie;;
15
+ const _mod_5km04t = require('./utils/curl.cjs');
16
+ exports.toCurl = _mod_5km04t.toCurl;
17
+ exports.fromCurl = _mod_5km04t.fromCurl;;
18
+ const _mod_c99qva = require('./core/hooks.cjs');
19
+ exports.createDefaultHooks = _mod_c99qva.createDefaultHooks;
20
+ exports.mergeHooks = _mod_c99qva.mergeHooks;;
21
+ const _mod_nlh20q = require('./proxy/manager.cjs');
22
+ exports.ProxyManager = _mod_nlh20q.ProxyManager;;
23
+ const _mod_2j9uz9 = require('./queue/index.cjs');
24
+ exports.RezoQueue = _mod_2j9uz9.RezoQueue;
25
+ exports.HttpQueue = _mod_2j9uz9.HttpQueue;
26
+ exports.Priority = _mod_2j9uz9.Priority;
27
+ exports.HttpMethodPriority = _mod_2j9uz9.HttpMethodPriority;;
28
28
  const { RezoError } = require('./errors/rezo-error.cjs');
29
29
  const isRezoError = exports.isRezoError = RezoError.isRezoError;
30
30
  const Cancel = exports.Cancel = RezoError;
@@ -34,9 +34,9 @@ const isCancel = exports.isCancel = (error) => {
34
34
  };
35
35
  const all = exports.all = Promise.all.bind(Promise);
36
36
  const spread = exports.spread = (callback) => (array) => callback(...array);
37
- const _mod_wqlmnp = require('./version.cjs');
38
- exports.VERSION = _mod_wqlmnp.VERSION;
39
- exports.PACKAGE_NAME = _mod_wqlmnp.PACKAGE_NAME;;
37
+ const _mod_xznh6j = require('./version.cjs');
38
+ exports.VERSION = _mod_xznh6j.VERSION;
39
+ exports.PACKAGE_NAME = _mod_xznh6j.PACKAGE_NAME;;
40
40
  const { executeRequest } = require('./adapters/http.cjs');
41
41
  const { setGlobalAdapter, createRezoInstance } = require('./core/rezo.cjs');
42
42
  setGlobalAdapter(executeRequest);
package/dist/index.d.ts CHANGED
@@ -4883,7 +4883,7 @@ export declare class HttpQueue extends RezoQueue<any> {
4883
4883
  *
4884
4884
  * IMPORTANT: Update these values when bumping package version.
4885
4885
  */
4886
- export declare const VERSION = "1.0.73";
4886
+ export declare const VERSION = "1.0.74";
4887
4887
  export declare const PACKAGE_NAME = "rezo";
4888
4888
  export declare const isRezoError: typeof RezoError.isRezoError;
4889
4889
  export declare const Cancel: typeof RezoError;
@@ -1,10 +1,10 @@
1
- const _mod_z9dkod = require('./base.cjs');
2
- exports.Agent = _mod_z9dkod.Agent;;
3
- const _mod_sd66wk = require('./http-proxy.cjs');
4
- exports.HttpProxyAgent = _mod_sd66wk.HttpProxyAgent;;
5
- const _mod_pwlo59 = require('./https-proxy.cjs');
6
- exports.HttpsProxyAgent = _mod_pwlo59.HttpsProxyAgent;;
7
- const _mod_a4lzyf = require('./socks-proxy.cjs');
8
- exports.SocksProxyAgent = _mod_a4lzyf.SocksProxyAgent;;
9
- const _mod_6yne7d = require('./socks-client.cjs');
10
- exports.SocksClient = _mod_6yne7d.SocksClient;;
1
+ const _mod_0a73ie = require('./base.cjs');
2
+ exports.Agent = _mod_0a73ie.Agent;;
3
+ const _mod_rs317e = require('./http-proxy.cjs');
4
+ exports.HttpProxyAgent = _mod_rs317e.HttpProxyAgent;;
5
+ const _mod_syy64b = require('./https-proxy.cjs');
6
+ exports.HttpsProxyAgent = _mod_syy64b.HttpsProxyAgent;;
7
+ const _mod_rciw1o = require('./socks-proxy.cjs');
8
+ exports.SocksProxyAgent = _mod_rciw1o.SocksProxyAgent;;
9
+ const _mod_w9tiwm = require('./socks-client.cjs');
10
+ exports.SocksClient = _mod_w9tiwm.SocksClient;;
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -4579,7 +4579,7 @@ export interface RezoInstance extends Rezo {
4579
4579
  *
4580
4580
  * IMPORTANT: Update these values when bumping package version.
4581
4581
  */
4582
- export declare const VERSION = "1.0.73";
4582
+ export declare const VERSION = "1.0.74";
4583
4583
  export declare const isRezoError: typeof RezoError.isRezoError;
4584
4584
  export declare const Cancel: typeof RezoError;
4585
4585
  export declare const CancelToken: {
@@ -1,9 +1,9 @@
1
1
  const { Agent, HttpProxyAgent, HttpsProxyAgent, SocksProxyAgent } = require('../internal/agents/index.cjs');
2
2
  const { parseProxyString } = require('./parse.cjs');
3
- const _mod_822tv1 = require('./manager.cjs');
4
- exports.ProxyManager = _mod_822tv1.ProxyManager;;
5
- const _mod_nv2yd4 = require('./parse.cjs');
6
- exports.parseProxyString = _mod_nv2yd4.parseProxyString;;
3
+ const _mod_dkmwz9 = require('./manager.cjs');
4
+ exports.ProxyManager = _mod_dkmwz9.ProxyManager;;
5
+ const _mod_0ibmjj = require('./parse.cjs');
6
+ exports.parseProxyString = _mod_0ibmjj.parseProxyString;;
7
7
  function createOptions(uri, opts) {
8
8
  if (uri instanceof URL || typeof uri === "string") {
9
9
  return {
@@ -1,8 +1,8 @@
1
- const _mod_sdhfnz = require('./queue.cjs');
2
- exports.RezoQueue = _mod_sdhfnz.RezoQueue;;
3
- const _mod_7ea16t = require('./http-queue.cjs');
4
- exports.HttpQueue = _mod_7ea16t.HttpQueue;
5
- exports.extractDomain = _mod_7ea16t.extractDomain;;
6
- const _mod_juhwej = require('./types.cjs');
7
- exports.Priority = _mod_juhwej.Priority;
8
- exports.HttpMethodPriority = _mod_juhwej.HttpMethodPriority;;
1
+ const _mod_rllkog = require('./queue.cjs');
2
+ exports.RezoQueue = _mod_rllkog.RezoQueue;;
3
+ const _mod_2glpb0 = require('./http-queue.cjs');
4
+ exports.HttpQueue = _mod_2glpb0.HttpQueue;
5
+ exports.extractDomain = _mod_2glpb0.extractDomain;;
6
+ const _mod_rpdaro = require('./types.cjs');
7
+ exports.Priority = _mod_rpdaro.Priority;
8
+ exports.HttpMethodPriority = _mod_rpdaro.HttpMethodPriority;;
@@ -36,7 +36,7 @@ class RezoQueue {
36
36
  interval: config.interval ?? 0,
37
37
  intervalCap: config.intervalCap ?? 1 / 0,
38
38
  carryoverConcurrencyCount: config.carryoverConcurrencyCount ?? false,
39
- rejectOnError: config.rejectOnError ?? false
39
+ rejectOnError: config.rejectOnError ?? true
40
40
  };
41
41
  if (!this.config.autoStart) {
42
42
  this.isPausedFlag = true;
@@ -36,7 +36,7 @@ export class RezoQueue {
36
36
  interval: config.interval ?? 0,
37
37
  intervalCap: config.intervalCap ?? 1 / 0,
38
38
  carryoverConcurrencyCount: config.carryoverConcurrencyCount ?? false,
39
- rejectOnError: config.rejectOnError ?? false
39
+ rejectOnError: config.rejectOnError ?? true
40
40
  };
41
41
  if (!this.config.autoStart) {
42
42
  this.isPausedFlag = true;
@@ -1,11 +1,11 @@
1
- const _mod_inkbi3 = require('./event-emitter.cjs');
2
- exports.UniversalEventEmitter = _mod_inkbi3.UniversalEventEmitter;;
3
- const _mod_mpsc08 = require('./stream.cjs');
4
- exports.UniversalStreamResponse = _mod_mpsc08.UniversalStreamResponse;
5
- exports.StreamResponse = _mod_mpsc08.StreamResponse;;
6
- const _mod_c99n0a = require('./download.cjs');
7
- exports.UniversalDownloadResponse = _mod_c99n0a.UniversalDownloadResponse;
8
- exports.DownloadResponse = _mod_c99n0a.DownloadResponse;;
9
- const _mod_c0t3t8 = require('./upload.cjs');
10
- exports.UniversalUploadResponse = _mod_c0t3t8.UniversalUploadResponse;
11
- exports.UploadResponse = _mod_c0t3t8.UploadResponse;;
1
+ const _mod_1hy9oe = require('./event-emitter.cjs');
2
+ exports.UniversalEventEmitter = _mod_1hy9oe.UniversalEventEmitter;;
3
+ const _mod_zi59hf = require('./stream.cjs');
4
+ exports.UniversalStreamResponse = _mod_zi59hf.UniversalStreamResponse;
5
+ exports.StreamResponse = _mod_zi59hf.StreamResponse;;
6
+ const _mod_vm1o39 = require('./download.cjs');
7
+ exports.UniversalDownloadResponse = _mod_vm1o39.UniversalDownloadResponse;
8
+ exports.DownloadResponse = _mod_vm1o39.DownloadResponse;;
9
+ const _mod_zh9h9e = require('./upload.cjs');
10
+ exports.UniversalUploadResponse = _mod_zh9h9e.UniversalUploadResponse;
11
+ exports.UploadResponse = _mod_zh9h9e.UploadResponse;;
@@ -1,5 +1,6 @@
1
1
  const http = require("node:http");
2
2
  const https = require("node:https");
3
+ const tls = require("node:tls");
3
4
  const { getGlobalDNSCache } = require('../cache/dns-cache.cjs');
4
5
  const DEFAULT_CONFIG = {
5
6
  keepAlive: true,
@@ -79,6 +80,39 @@ class AgentPool {
79
80
  });
80
81
  }
81
82
  createHttpsAgent(key, tlsOptions) {
83
+ const secureContext = tls.createSecureContext({
84
+ ecdhCurve: "X25519:prime256v1:secp384r1",
85
+ ciphers: [
86
+ "TLS_AES_128_GCM_SHA256",
87
+ "TLS_AES_256_GCM_SHA384",
88
+ "TLS_CHACHA20_POLY1305_SHA256",
89
+ "ECDHE-ECDSA-AES128-GCM-SHA256",
90
+ "ECDHE-RSA-AES128-GCM-SHA256",
91
+ "ECDHE-ECDSA-AES256-GCM-SHA384",
92
+ "ECDHE-RSA-AES256-GCM-SHA384",
93
+ "ECDHE-ECDSA-CHACHA20-POLY1305",
94
+ "ECDHE-RSA-CHACHA20-POLY1305",
95
+ "ECDHE-RSA-AES128-SHA",
96
+ "ECDHE-RSA-AES256-SHA",
97
+ "AES128-GCM-SHA256",
98
+ "AES256-GCM-SHA384",
99
+ "AES128-SHA",
100
+ "AES256-SHA"
101
+ ].join(":"),
102
+ sigalgs: [
103
+ "ecdsa_secp256r1_sha256",
104
+ "ecdsa_secp384r1_sha384",
105
+ "rsa_pss_rsae_sha256",
106
+ "rsa_pss_rsae_sha384",
107
+ "rsa_pss_rsae_sha512",
108
+ "rsa_pkcs1_sha256",
109
+ "rsa_pkcs1_sha384",
110
+ "rsa_pkcs1_sha512"
111
+ ].join(":"),
112
+ minVersion: "TLSv1.2",
113
+ maxVersion: "TLSv1.3",
114
+ sessionTimeout: 3600
115
+ });
82
116
  const agentOptions = {
83
117
  keepAlive: this.config.keepAlive,
84
118
  keepAliveMsecs: this.config.keepAliveMsecs,
@@ -86,6 +120,7 @@ class AgentPool {
86
120
  maxFreeSockets: this.config.maxFreeSockets,
87
121
  timeout: this.config.timeout,
88
122
  scheduling: this.config.scheduling,
123
+ secureContext,
89
124
  ...tlsOptions
90
125
  };
91
126
  const lookup = this.createLookupFunction();
@@ -1,5 +1,6 @@
1
1
  import * as http from "node:http";
2
2
  import * as https from "node:https";
3
+ import * as tls from "node:tls";
3
4
  import { getGlobalDNSCache } from '../cache/dns-cache.js';
4
5
  const DEFAULT_CONFIG = {
5
6
  keepAlive: true,
@@ -79,6 +80,39 @@ class AgentPool {
79
80
  });
80
81
  }
81
82
  createHttpsAgent(key, tlsOptions) {
83
+ const secureContext = tls.createSecureContext({
84
+ ecdhCurve: "X25519:prime256v1:secp384r1",
85
+ ciphers: [
86
+ "TLS_AES_128_GCM_SHA256",
87
+ "TLS_AES_256_GCM_SHA384",
88
+ "TLS_CHACHA20_POLY1305_SHA256",
89
+ "ECDHE-ECDSA-AES128-GCM-SHA256",
90
+ "ECDHE-RSA-AES128-GCM-SHA256",
91
+ "ECDHE-ECDSA-AES256-GCM-SHA384",
92
+ "ECDHE-RSA-AES256-GCM-SHA384",
93
+ "ECDHE-ECDSA-CHACHA20-POLY1305",
94
+ "ECDHE-RSA-CHACHA20-POLY1305",
95
+ "ECDHE-RSA-AES128-SHA",
96
+ "ECDHE-RSA-AES256-SHA",
97
+ "AES128-GCM-SHA256",
98
+ "AES256-GCM-SHA384",
99
+ "AES128-SHA",
100
+ "AES256-SHA"
101
+ ].join(":"),
102
+ sigalgs: [
103
+ "ecdsa_secp256r1_sha256",
104
+ "ecdsa_secp384r1_sha384",
105
+ "rsa_pss_rsae_sha256",
106
+ "rsa_pss_rsae_sha384",
107
+ "rsa_pss_rsae_sha512",
108
+ "rsa_pkcs1_sha256",
109
+ "rsa_pkcs1_sha384",
110
+ "rsa_pkcs1_sha512"
111
+ ].join(":"),
112
+ minVersion: "TLSv1.2",
113
+ maxVersion: "TLSv1.3",
114
+ sessionTimeout: 3600
115
+ });
82
116
  const agentOptions = {
83
117
  keepAlive: this.config.keepAlive,
84
118
  keepAliveMsecs: this.config.keepAliveMsecs,
@@ -86,6 +120,7 @@ class AgentPool {
86
120
  maxFreeSockets: this.config.maxFreeSockets,
87
121
  timeout: this.config.timeout,
88
122
  scheduling: this.config.scheduling,
123
+ secureContext,
89
124
  ...tlsOptions
90
125
  };
91
126
  const lookup = this.createLookupFunction();
package/dist/version.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const VERSION = exports.VERSION = "1.0.73";
1
+ const VERSION = exports.VERSION = "1.0.74";
2
2
  const PACKAGE_NAME = exports.PACKAGE_NAME = "rezo";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = "1.0.73";
1
+ export const VERSION = "1.0.74";
2
2
  export const PACKAGE_NAME = "rezo";
@@ -1,52 +1,52 @@
1
- const _mod_5ei63p = require('./types.cjs');
2
- exports.WgetError = _mod_5ei63p.WgetError;;
3
- const _mod_tutikq = require('./asset-extractor.cjs');
4
- exports.AssetExtractor = _mod_tutikq.AssetExtractor;;
5
- const _mod_o2ssmt = require('./url-filter.cjs');
6
- exports.UrlFilter = _mod_o2ssmt.UrlFilter;;
7
- const _mod_8pdoow = require('./file-writer.cjs');
8
- exports.FileWriter = _mod_8pdoow.FileWriter;;
9
- const _mod_hb8okl = require('./robots.cjs');
10
- exports.RobotsHandler = _mod_hb8okl.RobotsHandler;;
11
- const _mod_6w54ca = require('./resume.cjs');
12
- exports.ResumeHandler = _mod_6w54ca.ResumeHandler;;
13
- const _mod_ivqayl = require('./progress.cjs');
14
- exports.ProgressReporter = _mod_ivqayl.ProgressReporter;
15
- exports.ProgressTracker = _mod_ivqayl.ProgressTracker;
16
- exports.parseSize = _mod_ivqayl.parseSize;;
17
- const _mod_75fsyq = require('./link-converter.cjs');
18
- exports.LinkConverter = _mod_75fsyq.LinkConverter;;
19
- const _mod_bfrkpp = require('./downloader.cjs');
20
- exports.Downloader = _mod_bfrkpp.Downloader;;
21
- const _mod_ym1dyu = require('./asset-organizer.cjs');
22
- exports.AssetOrganizer = _mod_ym1dyu.AssetOrganizer;
23
- exports.DEFAULT_ASSET_FOLDERS = _mod_ym1dyu.DEFAULT_ASSET_FOLDERS;;
24
- const _mod_hwajgz = require('./download-cache.cjs');
25
- exports.DownloadCache = _mod_hwajgz.DownloadCache;;
26
- const _mod_kb7vuw = require('./filter-lists.cjs');
27
- exports.EXECUTABLE_EXTENSIONS = _mod_kb7vuw.EXECUTABLE_EXTENSIONS;
28
- exports.ARCHIVE_EXTENSIONS = _mod_kb7vuw.ARCHIVE_EXTENSIONS;
29
- exports.DOCUMENT_EXTENSIONS = _mod_kb7vuw.DOCUMENT_EXTENSIONS;
30
- exports.IMAGE_EXTENSIONS = _mod_kb7vuw.IMAGE_EXTENSIONS;
31
- exports.VIDEO_EXTENSIONS = _mod_kb7vuw.VIDEO_EXTENSIONS;
32
- exports.AUDIO_EXTENSIONS = _mod_kb7vuw.AUDIO_EXTENSIONS;
33
- exports.FONT_EXTENSIONS = _mod_kb7vuw.FONT_EXTENSIONS;
34
- exports.WEB_ASSET_EXTENSIONS = _mod_kb7vuw.WEB_ASSET_EXTENSIONS;
35
- exports.DATA_EXTENSIONS = _mod_kb7vuw.DATA_EXTENSIONS;
36
- exports.EXECUTABLE_MIME_TYPES = _mod_kb7vuw.EXECUTABLE_MIME_TYPES;
37
- exports.ARCHIVE_MIME_TYPES = _mod_kb7vuw.ARCHIVE_MIME_TYPES;
38
- exports.DOCUMENT_MIME_TYPES = _mod_kb7vuw.DOCUMENT_MIME_TYPES;
39
- exports.IMAGE_MIME_TYPES = _mod_kb7vuw.IMAGE_MIME_TYPES;
40
- exports.VIDEO_MIME_TYPES = _mod_kb7vuw.VIDEO_MIME_TYPES;
41
- exports.AUDIO_MIME_TYPES = _mod_kb7vuw.AUDIO_MIME_TYPES;
42
- exports.FONT_MIME_TYPES = _mod_kb7vuw.FONT_MIME_TYPES;
43
- exports.WEB_ASSET_MIME_TYPES = _mod_kb7vuw.WEB_ASSET_MIME_TYPES;
44
- exports.DATA_MIME_TYPES = _mod_kb7vuw.DATA_MIME_TYPES;
45
- exports.SAFE_WEB_PRESET = _mod_kb7vuw.SAFE_WEB_PRESET;
46
- exports.DOCUMENTS_ONLY_PRESET = _mod_kb7vuw.DOCUMENTS_ONLY_PRESET;
47
- exports.NO_MEDIA_PRESET = _mod_kb7vuw.NO_MEDIA_PRESET;
48
- exports.MINIMAL_MIRROR_PRESET = _mod_kb7vuw.MINIMAL_MIRROR_PRESET;
49
- exports.TEXT_ONLY_PRESET = _mod_kb7vuw.TEXT_ONLY_PRESET;;
1
+ const _mod_8lpt1q = require('./types.cjs');
2
+ exports.WgetError = _mod_8lpt1q.WgetError;;
3
+ const _mod_3knsix = require('./asset-extractor.cjs');
4
+ exports.AssetExtractor = _mod_3knsix.AssetExtractor;;
5
+ const _mod_hmciaa = require('./url-filter.cjs');
6
+ exports.UrlFilter = _mod_hmciaa.UrlFilter;;
7
+ const _mod_25damj = require('./file-writer.cjs');
8
+ exports.FileWriter = _mod_25damj.FileWriter;;
9
+ const _mod_cp8z2y = require('./robots.cjs');
10
+ exports.RobotsHandler = _mod_cp8z2y.RobotsHandler;;
11
+ const _mod_xx31k2 = require('./resume.cjs');
12
+ exports.ResumeHandler = _mod_xx31k2.ResumeHandler;;
13
+ const _mod_xe7f9y = require('./progress.cjs');
14
+ exports.ProgressReporter = _mod_xe7f9y.ProgressReporter;
15
+ exports.ProgressTracker = _mod_xe7f9y.ProgressTracker;
16
+ exports.parseSize = _mod_xe7f9y.parseSize;;
17
+ const _mod_ju89ay = require('./link-converter.cjs');
18
+ exports.LinkConverter = _mod_ju89ay.LinkConverter;;
19
+ const _mod_hypiea = require('./downloader.cjs');
20
+ exports.Downloader = _mod_hypiea.Downloader;;
21
+ const _mod_haffqa = require('./asset-organizer.cjs');
22
+ exports.AssetOrganizer = _mod_haffqa.AssetOrganizer;
23
+ exports.DEFAULT_ASSET_FOLDERS = _mod_haffqa.DEFAULT_ASSET_FOLDERS;;
24
+ const _mod_ej979a = require('./download-cache.cjs');
25
+ exports.DownloadCache = _mod_ej979a.DownloadCache;;
26
+ const _mod_4n02yz = require('./filter-lists.cjs');
27
+ exports.EXECUTABLE_EXTENSIONS = _mod_4n02yz.EXECUTABLE_EXTENSIONS;
28
+ exports.ARCHIVE_EXTENSIONS = _mod_4n02yz.ARCHIVE_EXTENSIONS;
29
+ exports.DOCUMENT_EXTENSIONS = _mod_4n02yz.DOCUMENT_EXTENSIONS;
30
+ exports.IMAGE_EXTENSIONS = _mod_4n02yz.IMAGE_EXTENSIONS;
31
+ exports.VIDEO_EXTENSIONS = _mod_4n02yz.VIDEO_EXTENSIONS;
32
+ exports.AUDIO_EXTENSIONS = _mod_4n02yz.AUDIO_EXTENSIONS;
33
+ exports.FONT_EXTENSIONS = _mod_4n02yz.FONT_EXTENSIONS;
34
+ exports.WEB_ASSET_EXTENSIONS = _mod_4n02yz.WEB_ASSET_EXTENSIONS;
35
+ exports.DATA_EXTENSIONS = _mod_4n02yz.DATA_EXTENSIONS;
36
+ exports.EXECUTABLE_MIME_TYPES = _mod_4n02yz.EXECUTABLE_MIME_TYPES;
37
+ exports.ARCHIVE_MIME_TYPES = _mod_4n02yz.ARCHIVE_MIME_TYPES;
38
+ exports.DOCUMENT_MIME_TYPES = _mod_4n02yz.DOCUMENT_MIME_TYPES;
39
+ exports.IMAGE_MIME_TYPES = _mod_4n02yz.IMAGE_MIME_TYPES;
40
+ exports.VIDEO_MIME_TYPES = _mod_4n02yz.VIDEO_MIME_TYPES;
41
+ exports.AUDIO_MIME_TYPES = _mod_4n02yz.AUDIO_MIME_TYPES;
42
+ exports.FONT_MIME_TYPES = _mod_4n02yz.FONT_MIME_TYPES;
43
+ exports.WEB_ASSET_MIME_TYPES = _mod_4n02yz.WEB_ASSET_MIME_TYPES;
44
+ exports.DATA_MIME_TYPES = _mod_4n02yz.DATA_MIME_TYPES;
45
+ exports.SAFE_WEB_PRESET = _mod_4n02yz.SAFE_WEB_PRESET;
46
+ exports.DOCUMENTS_ONLY_PRESET = _mod_4n02yz.DOCUMENTS_ONLY_PRESET;
47
+ exports.NO_MEDIA_PRESET = _mod_4n02yz.NO_MEDIA_PRESET;
48
+ exports.MINIMAL_MIRROR_PRESET = _mod_4n02yz.MINIMAL_MIRROR_PRESET;
49
+ exports.TEXT_ONLY_PRESET = _mod_4n02yz.TEXT_ONLY_PRESET;;
50
50
  const { Downloader } = require('./downloader.cjs');
51
51
  const rezo = require('../index.cjs');
52
52
  const { promises: fs } = require("node:fs");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rezo",
3
- "version": "1.0.73",
3
+ "version": "1.0.74",
4
4
  "description": "Lightning-fast, enterprise-grade HTTP client for modern JavaScript. Full HTTP/2 support, intelligent cookie management, multiple adapters (HTTP, Fetch, cURL, XHR), streaming, proxy support (HTTP/HTTPS/SOCKS), and cross-environment compatibility.",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",