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.
- package/dist/adapters/entries/curl.d.ts +1 -1
- package/dist/adapters/entries/fetch.d.ts +1 -1
- package/dist/adapters/entries/http.d.ts +1 -1
- package/dist/adapters/entries/http2.d.ts +1 -1
- package/dist/adapters/entries/react-native.d.ts +1 -1
- package/dist/adapters/entries/xhr.d.ts +1 -1
- package/dist/adapters/index.cjs +6 -6
- package/dist/cache/index.cjs +9 -9
- package/dist/crawler/crawler-options.cjs +1 -1
- package/dist/crawler/crawler-options.js +1 -1
- package/dist/crawler/crawler.cjs +20 -10
- package/dist/crawler/crawler.js +20 -10
- package/dist/crawler/index.cjs +40 -40
- package/dist/crawler/plugin/index.cjs +1 -1
- package/dist/crawler.d.ts +4 -0
- package/dist/entries/crawler.cjs +4 -4
- package/dist/errors/rezo-error.cjs +3 -72
- package/dist/errors/rezo-error.js +3 -72
- package/dist/index.cjs +30 -30
- package/dist/index.d.ts +1 -1
- package/dist/internal/agents/index.cjs +10 -10
- package/dist/platform/browser.d.ts +1 -1
- package/dist/platform/bun.d.ts +1 -1
- package/dist/platform/deno.d.ts +1 -1
- package/dist/platform/node.d.ts +1 -1
- package/dist/platform/react-native.d.ts +1 -1
- package/dist/platform/worker.d.ts +1 -1
- package/dist/proxy/index.cjs +4 -4
- package/dist/queue/index.cjs +8 -8
- package/dist/queue/queue.cjs +1 -1
- package/dist/queue/queue.js +1 -1
- package/dist/responses/universal/index.cjs +11 -11
- package/dist/utils/agent-pool.cjs +35 -0
- package/dist/utils/agent-pool.js +35 -0
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/wget/index.cjs +49 -49
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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: {
|
package/dist/adapters/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const
|
|
2
|
-
exports.detectRuntime =
|
|
3
|
-
exports.getAdapterCapabilities =
|
|
4
|
-
exports.buildAdapterContext =
|
|
5
|
-
exports.getAvailableAdapters =
|
|
6
|
-
exports.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;;
|
package/dist/cache/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const
|
|
2
|
-
exports.LRUCache =
|
|
3
|
-
const
|
|
4
|
-
exports.DNSCache =
|
|
5
|
-
exports.getGlobalDNSCache =
|
|
6
|
-
exports.resetGlobalDNSCache =
|
|
7
|
-
const
|
|
8
|
-
exports.ResponseCache =
|
|
9
|
-
exports.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};
|
package/dist/crawler/crawler.cjs
CHANGED
|
@@ -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
|
|
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 =
|
|
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.
|
|
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) :
|
|
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;
|
package/dist/crawler/crawler.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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.
|
|
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) :
|
|
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;
|
package/dist/crawler/index.cjs
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
const
|
|
2
|
-
exports.Crawler =
|
|
3
|
-
const
|
|
4
|
-
exports.CrawlerOptions =
|
|
5
|
-
const
|
|
6
|
-
exports.RobotsTxt =
|
|
7
|
-
const
|
|
8
|
-
exports.FileCacher =
|
|
9
|
-
const
|
|
10
|
-
exports.UrlStore =
|
|
11
|
-
const
|
|
12
|
-
exports.NavigationHistory =
|
|
13
|
-
const
|
|
14
|
-
exports.Oxylabs =
|
|
15
|
-
const
|
|
16
|
-
exports.OXYLABS_BROWSER_TYPES =
|
|
17
|
-
exports.OXYLABS_COMMON_LOCALES =
|
|
18
|
-
exports.OXYLABS_COMMON_GEO_LOCATIONS =
|
|
19
|
-
exports.OXYLABS_US_STATES =
|
|
20
|
-
exports.OXYLABS_EUROPEAN_COUNTRIES =
|
|
21
|
-
exports.OXYLABS_ASIAN_COUNTRIES =
|
|
22
|
-
exports.getRandomOxylabsBrowserType =
|
|
23
|
-
exports.getRandomOxylabsLocale =
|
|
24
|
-
exports.getRandomOxylabsGeoLocation =
|
|
25
|
-
const
|
|
26
|
-
exports.Decodo =
|
|
27
|
-
const
|
|
28
|
-
exports.DECODO_DEVICE_TYPES =
|
|
29
|
-
exports.DECODO_HEADLESS_MODES =
|
|
30
|
-
exports.DECODO_COMMON_LOCALES =
|
|
31
|
-
exports.DECODO_COMMON_COUNTRIES =
|
|
32
|
-
exports.DECODO_EUROPEAN_COUNTRIES =
|
|
33
|
-
exports.DECODO_ASIAN_COUNTRIES =
|
|
34
|
-
exports.DECODO_US_STATES =
|
|
35
|
-
exports.DECODO_COMMON_CITIES =
|
|
36
|
-
exports.getRandomDecodoDeviceType =
|
|
37
|
-
exports.getRandomDecodoLocale =
|
|
38
|
-
exports.getRandomDecodoCountry =
|
|
39
|
-
exports.getRandomDecodoCity =
|
|
40
|
-
exports.generateDecodoSessionId =
|
|
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
|
|
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) */
|
package/dist/entries/crawler.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
2
|
-
exports.Crawler =
|
|
3
|
-
const
|
|
4
|
-
exports.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:
|
|
557
|
-
Object.defineProperty(this, "request", { value: request, enumerable:
|
|
558
|
-
Object.defineProperty(this, "response", { value: response, enumerable:
|
|
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:
|
|
557
|
-
Object.defineProperty(this, "request", { value: request, enumerable:
|
|
558
|
-
Object.defineProperty(this, "response", { value: response, enumerable:
|
|
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
|
|
2
|
-
exports.Rezo =
|
|
3
|
-
exports.createRezoInstance =
|
|
4
|
-
exports.createDefaultInstance =
|
|
5
|
-
const
|
|
6
|
-
exports.RezoError =
|
|
7
|
-
exports.RezoErrorCode =
|
|
8
|
-
const
|
|
9
|
-
exports.RezoHeaders =
|
|
10
|
-
const
|
|
11
|
-
exports.RezoFormData =
|
|
12
|
-
const
|
|
13
|
-
exports.RezoCookieJar =
|
|
14
|
-
exports.Cookie =
|
|
15
|
-
const
|
|
16
|
-
exports.toCurl =
|
|
17
|
-
exports.fromCurl =
|
|
18
|
-
const
|
|
19
|
-
exports.createDefaultHooks =
|
|
20
|
-
exports.mergeHooks =
|
|
21
|
-
const
|
|
22
|
-
exports.ProxyManager =
|
|
23
|
-
const
|
|
24
|
-
exports.RezoQueue =
|
|
25
|
-
exports.HttpQueue =
|
|
26
|
-
exports.Priority =
|
|
27
|
-
exports.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
|
|
38
|
-
exports.VERSION =
|
|
39
|
-
exports.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.
|
|
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
|
|
2
|
-
exports.Agent =
|
|
3
|
-
const
|
|
4
|
-
exports.HttpProxyAgent =
|
|
5
|
-
const
|
|
6
|
-
exports.HttpsProxyAgent =
|
|
7
|
-
const
|
|
8
|
-
exports.SocksProxyAgent =
|
|
9
|
-
const
|
|
10
|
-
exports.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.
|
|
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: {
|
package/dist/platform/bun.d.ts
CHANGED
|
@@ -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.
|
|
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: {
|
package/dist/platform/deno.d.ts
CHANGED
|
@@ -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.
|
|
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: {
|
package/dist/platform/node.d.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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: {
|
package/dist/proxy/index.cjs
CHANGED
|
@@ -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
|
|
4
|
-
exports.ProxyManager =
|
|
5
|
-
const
|
|
6
|
-
exports.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 {
|
package/dist/queue/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const
|
|
2
|
-
exports.RezoQueue =
|
|
3
|
-
const
|
|
4
|
-
exports.HttpQueue =
|
|
5
|
-
exports.extractDomain =
|
|
6
|
-
const
|
|
7
|
-
exports.Priority =
|
|
8
|
-
exports.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;;
|
package/dist/queue/queue.cjs
CHANGED
|
@@ -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 ??
|
|
39
|
+
rejectOnError: config.rejectOnError ?? true
|
|
40
40
|
};
|
|
41
41
|
if (!this.config.autoStart) {
|
|
42
42
|
this.isPausedFlag = true;
|
package/dist/queue/queue.js
CHANGED
|
@@ -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 ??
|
|
39
|
+
rejectOnError: config.rejectOnError ?? true
|
|
40
40
|
};
|
|
41
41
|
if (!this.config.autoStart) {
|
|
42
42
|
this.isPausedFlag = true;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const
|
|
2
|
-
exports.UniversalEventEmitter =
|
|
3
|
-
const
|
|
4
|
-
exports.UniversalStreamResponse =
|
|
5
|
-
exports.StreamResponse =
|
|
6
|
-
const
|
|
7
|
-
exports.UniversalDownloadResponse =
|
|
8
|
-
exports.DownloadResponse =
|
|
9
|
-
const
|
|
10
|
-
exports.UniversalUploadResponse =
|
|
11
|
-
exports.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();
|
package/dist/utils/agent-pool.js
CHANGED
|
@@ -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.
|
|
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.
|
|
1
|
+
export const VERSION = "1.0.74";
|
|
2
2
|
export const PACKAGE_NAME = "rezo";
|
package/dist/wget/index.cjs
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
const
|
|
2
|
-
exports.WgetError =
|
|
3
|
-
const
|
|
4
|
-
exports.AssetExtractor =
|
|
5
|
-
const
|
|
6
|
-
exports.UrlFilter =
|
|
7
|
-
const
|
|
8
|
-
exports.FileWriter =
|
|
9
|
-
const
|
|
10
|
-
exports.RobotsHandler =
|
|
11
|
-
const
|
|
12
|
-
exports.ResumeHandler =
|
|
13
|
-
const
|
|
14
|
-
exports.ProgressReporter =
|
|
15
|
-
exports.ProgressTracker =
|
|
16
|
-
exports.parseSize =
|
|
17
|
-
const
|
|
18
|
-
exports.LinkConverter =
|
|
19
|
-
const
|
|
20
|
-
exports.Downloader =
|
|
21
|
-
const
|
|
22
|
-
exports.AssetOrganizer =
|
|
23
|
-
exports.DEFAULT_ASSET_FOLDERS =
|
|
24
|
-
const
|
|
25
|
-
exports.DownloadCache =
|
|
26
|
-
const
|
|
27
|
-
exports.EXECUTABLE_EXTENSIONS =
|
|
28
|
-
exports.ARCHIVE_EXTENSIONS =
|
|
29
|
-
exports.DOCUMENT_EXTENSIONS =
|
|
30
|
-
exports.IMAGE_EXTENSIONS =
|
|
31
|
-
exports.VIDEO_EXTENSIONS =
|
|
32
|
-
exports.AUDIO_EXTENSIONS =
|
|
33
|
-
exports.FONT_EXTENSIONS =
|
|
34
|
-
exports.WEB_ASSET_EXTENSIONS =
|
|
35
|
-
exports.DATA_EXTENSIONS =
|
|
36
|
-
exports.EXECUTABLE_MIME_TYPES =
|
|
37
|
-
exports.ARCHIVE_MIME_TYPES =
|
|
38
|
-
exports.DOCUMENT_MIME_TYPES =
|
|
39
|
-
exports.IMAGE_MIME_TYPES =
|
|
40
|
-
exports.VIDEO_MIME_TYPES =
|
|
41
|
-
exports.AUDIO_MIME_TYPES =
|
|
42
|
-
exports.FONT_MIME_TYPES =
|
|
43
|
-
exports.WEB_ASSET_MIME_TYPES =
|
|
44
|
-
exports.DATA_MIME_TYPES =
|
|
45
|
-
exports.SAFE_WEB_PRESET =
|
|
46
|
-
exports.DOCUMENTS_ONLY_PRESET =
|
|
47
|
-
exports.NO_MEDIA_PRESET =
|
|
48
|
-
exports.MINIMAL_MIRROR_PRESET =
|
|
49
|
-
exports.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.
|
|
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",
|