rezo 1.0.77 → 1.0.79

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.
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  /**
4587
4587
  * cURL Options Configuration
4588
4588
  *
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  /**
4587
4587
  * Type guard to check if an error is a RezoError instance.
4588
4588
  */
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -1,6 +1,6 @@
1
- const _mod_r5y4ts = require('./picker.cjs');
2
- exports.detectRuntime = _mod_r5y4ts.detectRuntime;
3
- exports.getAdapterCapabilities = _mod_r5y4ts.getAdapterCapabilities;
4
- exports.buildAdapterContext = _mod_r5y4ts.buildAdapterContext;
5
- exports.getAvailableAdapters = _mod_r5y4ts.getAvailableAdapters;
6
- exports.selectAdapter = _mod_r5y4ts.selectAdapter;;
1
+ const _mod_pzgwu9 = require('./picker.cjs');
2
+ exports.detectRuntime = _mod_pzgwu9.detectRuntime;
3
+ exports.getAdapterCapabilities = _mod_pzgwu9.getAdapterCapabilities;
4
+ exports.buildAdapterContext = _mod_pzgwu9.buildAdapterContext;
5
+ exports.getAvailableAdapters = _mod_pzgwu9.getAvailableAdapters;
6
+ exports.selectAdapter = _mod_pzgwu9.selectAdapter;;
@@ -1,9 +1,9 @@
1
- const _mod_51htpc = require('./lru-cache.cjs');
2
- exports.LRUCache = _mod_51htpc.LRUCache;;
3
- const _mod_uwmuk0 = require('./dns-cache.cjs');
4
- exports.DNSCache = _mod_uwmuk0.DNSCache;
5
- exports.getGlobalDNSCache = _mod_uwmuk0.getGlobalDNSCache;
6
- exports.resetGlobalDNSCache = _mod_uwmuk0.resetGlobalDNSCache;;
7
- const _mod_r0farf = require('./response-cache.cjs');
8
- exports.ResponseCache = _mod_r0farf.ResponseCache;
9
- exports.normalizeResponseCacheConfig = _mod_r0farf.normalizeResponseCacheConfig;;
1
+ const _mod_d0gax9 = require('./lru-cache.cjs');
2
+ exports.LRUCache = _mod_d0gax9.LRUCache;;
3
+ const _mod_3v67fd = require('./dns-cache.cjs');
4
+ exports.DNSCache = _mod_3v67fd.DNSCache;
5
+ exports.getGlobalDNSCache = _mod_3v67fd.getGlobalDNSCache;
6
+ exports.resetGlobalDNSCache = _mod_3v67fd.resetGlobalDNSCache;;
7
+ const _mod_mm2n4n = require('./response-cache.cjs');
8
+ exports.ResponseCache = _mod_mm2n4n.ResponseCache;
9
+ exports.normalizeResponseCacheConfig = _mod_mm2n4n.normalizeResponseCacheConfig;;
@@ -1,40 +1,42 @@
1
- const _mod_830eza = require('./crawler.cjs');
2
- exports.Crawler = _mod_830eza.Crawler;;
3
- const _mod_lxjhdi = require('./crawler-options.cjs');
4
- exports.CrawlerOptions = _mod_lxjhdi.CrawlerOptions;;
5
- const _mod_dtyti5 = require('./plugin/robots-txt.cjs');
6
- exports.RobotsTxt = _mod_dtyti5.RobotsTxt;;
7
- const _mod_d775ku = require('./plugin/file-cacher.cjs');
8
- exports.FileCacher = _mod_d775ku.FileCacher;;
9
- const _mod_auits6 = require('./plugin/url-store.cjs');
10
- exports.UrlStore = _mod_auits6.UrlStore;;
11
- const _mod_5qv1tt = require('./plugin/navigation-history.cjs');
12
- exports.NavigationHistory = _mod_5qv1tt.NavigationHistory;;
13
- const _mod_7gxdja = require('./addon/oxylabs/index.cjs');
14
- exports.Oxylabs = _mod_7gxdja.Oxylabs;;
15
- const _mod_st70b4 = require('./addon/oxylabs/options.cjs');
16
- exports.OXYLABS_BROWSER_TYPES = _mod_st70b4.OXYLABS_BROWSER_TYPES;
17
- exports.OXYLABS_COMMON_LOCALES = _mod_st70b4.OXYLABS_COMMON_LOCALES;
18
- exports.OXYLABS_COMMON_GEO_LOCATIONS = _mod_st70b4.OXYLABS_COMMON_GEO_LOCATIONS;
19
- exports.OXYLABS_US_STATES = _mod_st70b4.OXYLABS_US_STATES;
20
- exports.OXYLABS_EUROPEAN_COUNTRIES = _mod_st70b4.OXYLABS_EUROPEAN_COUNTRIES;
21
- exports.OXYLABS_ASIAN_COUNTRIES = _mod_st70b4.OXYLABS_ASIAN_COUNTRIES;
22
- exports.getRandomOxylabsBrowserType = _mod_st70b4.getRandomBrowserType;
23
- exports.getRandomOxylabsLocale = _mod_st70b4.getRandomLocale;
24
- exports.getRandomOxylabsGeoLocation = _mod_st70b4.getRandomGeoLocation;;
25
- const _mod_1btns4 = require('./addon/decodo/index.cjs');
26
- exports.Decodo = _mod_1btns4.Decodo;;
27
- const _mod_b145ak = require('./addon/decodo/options.cjs');
28
- exports.DECODO_DEVICE_TYPES = _mod_b145ak.DECODO_DEVICE_TYPES;
29
- exports.DECODO_HEADLESS_MODES = _mod_b145ak.DECODO_HEADLESS_MODES;
30
- exports.DECODO_COMMON_LOCALES = _mod_b145ak.DECODO_COMMON_LOCALES;
31
- exports.DECODO_COMMON_COUNTRIES = _mod_b145ak.DECODO_COMMON_COUNTRIES;
32
- exports.DECODO_EUROPEAN_COUNTRIES = _mod_b145ak.DECODO_EUROPEAN_COUNTRIES;
33
- exports.DECODO_ASIAN_COUNTRIES = _mod_b145ak.DECODO_ASIAN_COUNTRIES;
34
- exports.DECODO_US_STATES = _mod_b145ak.DECODO_US_STATES;
35
- exports.DECODO_COMMON_CITIES = _mod_b145ak.DECODO_COMMON_CITIES;
36
- exports.getRandomDecodoDeviceType = _mod_b145ak.getRandomDeviceType;
37
- exports.getRandomDecodoLocale = _mod_b145ak.getRandomLocale;
38
- exports.getRandomDecodoCountry = _mod_b145ak.getRandomCountry;
39
- exports.getRandomDecodoCity = _mod_b145ak.getRandomCity;
40
- exports.generateDecodoSessionId = _mod_b145ak.generateSessionId;;
1
+ const _mod_314xm1 = require('./crawler.cjs');
2
+ exports.Crawler = _mod_314xm1.Crawler;;
3
+ const _mod_750otx = require('./crawler-options.cjs');
4
+ exports.CrawlerOptions = _mod_750otx.CrawlerOptions;;
5
+ const _mod_kg8a0i = require('./plugin/robots-txt.cjs');
6
+ exports.RobotsTxt = _mod_kg8a0i.RobotsTxt;;
7
+ const _mod_jj0ohk = require('./plugin/file-cacher.cjs');
8
+ exports.FileCacher = _mod_jj0ohk.FileCacher;;
9
+ const _mod_phkn3b = require('./plugin/url-store.cjs');
10
+ exports.UrlStore = _mod_phkn3b.UrlStore;;
11
+ const _mod_s3fhs0 = require('./plugin/navigation-history.cjs');
12
+ exports.NavigationHistory = _mod_s3fhs0.NavigationHistory;;
13
+ const _mod_bggz1w = require('./addon/oxylabs/index.cjs');
14
+ exports.Oxylabs = _mod_bggz1w.Oxylabs;;
15
+ const _mod_xxsg7e = require('./addon/oxylabs/options.cjs');
16
+ exports.OXYLABS_BROWSER_TYPES = _mod_xxsg7e.OXYLABS_BROWSER_TYPES;
17
+ exports.OXYLABS_COMMON_LOCALES = _mod_xxsg7e.OXYLABS_COMMON_LOCALES;
18
+ exports.OXYLABS_COMMON_GEO_LOCATIONS = _mod_xxsg7e.OXYLABS_COMMON_GEO_LOCATIONS;
19
+ exports.OXYLABS_US_STATES = _mod_xxsg7e.OXYLABS_US_STATES;
20
+ exports.OXYLABS_EUROPEAN_COUNTRIES = _mod_xxsg7e.OXYLABS_EUROPEAN_COUNTRIES;
21
+ exports.OXYLABS_ASIAN_COUNTRIES = _mod_xxsg7e.OXYLABS_ASIAN_COUNTRIES;
22
+ exports.getRandomOxylabsBrowserType = _mod_xxsg7e.getRandomBrowserType;
23
+ exports.getRandomOxylabsLocale = _mod_xxsg7e.getRandomLocale;
24
+ exports.getRandomOxylabsGeoLocation = _mod_xxsg7e.getRandomGeoLocation;;
25
+ const _mod_7vc1en = require('./scraper.cjs');
26
+ exports.isRestrictedDomain = _mod_7vc1en.isRestrictedDomain;;
27
+ const _mod_dv4gv9 = require('./addon/decodo/index.cjs');
28
+ exports.Decodo = _mod_dv4gv9.Decodo;;
29
+ const _mod_wbuovp = require('./addon/decodo/options.cjs');
30
+ exports.DECODO_DEVICE_TYPES = _mod_wbuovp.DECODO_DEVICE_TYPES;
31
+ exports.DECODO_HEADLESS_MODES = _mod_wbuovp.DECODO_HEADLESS_MODES;
32
+ exports.DECODO_COMMON_LOCALES = _mod_wbuovp.DECODO_COMMON_LOCALES;
33
+ exports.DECODO_COMMON_COUNTRIES = _mod_wbuovp.DECODO_COMMON_COUNTRIES;
34
+ exports.DECODO_EUROPEAN_COUNTRIES = _mod_wbuovp.DECODO_EUROPEAN_COUNTRIES;
35
+ exports.DECODO_ASIAN_COUNTRIES = _mod_wbuovp.DECODO_ASIAN_COUNTRIES;
36
+ exports.DECODO_US_STATES = _mod_wbuovp.DECODO_US_STATES;
37
+ exports.DECODO_COMMON_CITIES = _mod_wbuovp.DECODO_COMMON_CITIES;
38
+ exports.getRandomDecodoDeviceType = _mod_wbuovp.getRandomDeviceType;
39
+ exports.getRandomDecodoLocale = _mod_wbuovp.getRandomLocale;
40
+ exports.getRandomDecodoCountry = _mod_wbuovp.getRandomCountry;
41
+ exports.getRandomDecodoCity = _mod_wbuovp.getRandomCity;
42
+ exports.generateDecodoSessionId = _mod_wbuovp.generateSessionId;;
@@ -16,6 +16,7 @@ export {
16
16
  getRandomLocale as getRandomOxylabsLocale,
17
17
  getRandomGeoLocation as getRandomOxylabsGeoLocation
18
18
  } from './addon/oxylabs/options.js';
19
+ export { isRestrictedDomain } from './scraper.js';
19
20
  export { Decodo } from './addon/decodo/index.js';
20
21
  export {
21
22
  DECODO_DEVICE_TYPES,
@@ -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 d=require("./capped-array.cjs");exports.CappedArray=d.CappedArray;
1
+ var e=require("./file-cacher.cjs");exports.FileCacher=e.FileCacher;var r=require("./url-store.cjs");exports.UrlStore=r.UrlStore;var o=require("./result-stream.cjs");exports.ResultStream=o.ResultStream;var t=require("./memory-monitor.cjs");exports.MemoryMonitor=t.MemoryMonitor;var a=require("./health-metrics.cjs");exports.HealthMetrics=a.HealthMetrics;var i=require("./capped-map.cjs");exports.CappedMap=i.CappedMap;var _=require("./capped-array.cjs");exports.CappedArray=_.CappedArray;
@@ -1 +1 @@
1
- var{parseHTML:k}=require("linkedom");class w extends Set{maxSize;evictionCount;constructor(e,a=0.1){super();this.maxSize=e,this.evictionCount=Math.max(1,Math.ceil(e*a))}add(e){if(this.has(e))return this;if(this.size>=this.maxSize){let a=this.values();for(let n=0;n<this.evictionCount;n++){let t=a.next();if(t.done)break;this.delete(t.value)}}return super.add(e)}}class b{http;httpOptions;onEmailLeads;onEmailDiscovered;debug;static CLEAN_CONTENT_REGEX=/[^\w@.-\s]/g;static EMAIL_REGEX=/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;static EMAIL_VALIDATION_REGEX=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;discoveredEmails=new w(1e4);userAgents=[];fileExtensions=[];restrictedDomains=C();forbiddenProtocols=["mailto:","tel:","javascript:","data:","sms:","ftp:","file:","irc:","blob:","chrome:","about:","intent:"];constructor(e,a,n,t,o=!1){this.http=e,this.httpOptions=a,this.onEmailLeads=n,this.onEmailDiscovered=t,this.debug=o,this.userAgents=$()}sleep(e){return new Promise((a)=>setTimeout(a,e))}async executeHttp(e,a,n,t,o,i=0){let{getCache:s,saveCache:r,hasUrlInCache:m,saveUrl:u,httpConfig:l={}}=t;if(!e||e.length<3||this.forbiddenProtocols.some((f)=>e.startsWith(f)))return;try{let f=o?!1:await m(e),h=await s(e);if(f&&!h)return!1;if(f&&a!=="GET")return!1;let c=h&&a==="GET"?h:await(a==="GET"?this.http.get(e,l):a==="PATCH"?this.http.patch(e,n,l):a==="POST"?this.http.post(e,n,l):this.http.put(e,n,l));if(!h)await r(e,{data:c.data,contentType:c.contentType,finalUrl:c.finalUrl});if(!f)await u(e);if(!c.contentType||!c.contentType.includes("/html")||!c.contentType.includes("text/")||typeof c.data!=="string")return null;return{data:c.data,contentType:c.contentType,finalUrl:c.finalUrl}}catch(f){let h=f,c=this.httpOptions;if(h&&h.response){let g=h.response.status,p=c.retryDelay||100,x=c.maxRetryAttempts||3,d=c.retryWithoutProxyOnStatusCode||void 0,v=c.maxRetryOnProxyError||3;if(d&&l.proxy&&d.includes(g)&&i<x)return await this.sleep(p),delete l.proxy,await this.executeHttp(e,a,n,t,o,i+1);else if(c.retryOnStatusCode&&l.proxy&&c.retryOnStatusCode.includes(g)&&i<x)return await this.sleep(p),await this.executeHttp(e,a,n,t,o,i+1);else if(c.retryOnProxyError&&l.proxy&&i<v)return await this.sleep(p),await this.executeHttp(e,a,n,t,o,i+1)}if(this.debug){if(this.debug)console.log(`Error: unable to ${a} ${e}: ${f.message}`)}return null}}extractEmails(e,a,n,t,o,i){let s=this.extractEmailsFromContent(e?.replaceAll("mailto:"," ")),r=[];for(let m of s)if(this.handleEmailDiscovery(m,a,n,o,i))r.push(m);if(t&&t.length>0&&r.length>0)o.add(async()=>Promise.all(t.map((m)=>m(r))));s.length=0,r.length=0}async parseExternalWebsite(e,a,n,t,o,i=!0,s,r){let m=t.httpConfig?.headers?t.httpConfig.headers instanceof Headers?Object.fromEntries(t.httpConfig.headers.entries()):t.httpConfig.headers:{};t.httpConfig=t.httpConfig||{},t.httpConfig.headers={"user-agent":this.getRandomUserAgent(),accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","accept-language":"en-US,en;q=0.9","cache-control":"no-cache",pragma:"no-cache",...m},t.httpConfig.timeout=t.httpConfig.timeout||15000,t.depth=t.depth||0,t.allowCrossDomainTravel=t.allowCrossDomainTravel||!1,o=o&&i;let u=[];try{let l=new URL(e),f=this.extractRootDomain(e);if(this.isLinktreeUrl(e))return await this.parseLinktreeProfile(e,t,o);if(this.isRestrictedDomain(e)){if(this.debug)console.warn(`⚠️ Skipped URL (restricted url): ${e}`);return u}let h=await this.executeHttp(e,a,n,t,o);if(!h){if(this.debug&&h===null)console.warn(`⚠️ Failed to fetch page content: ${e}`);if(this.debug&&h===!1)console.warn(`⚠️ Skipped URL (already visited): ${e}`);return u}let c=this.extractEmailsFromContent(h.data?.replaceAll("mailto:"," "));for(let g of c)if(this.handleEmailDiscovery(g,e,t.onEmailDiscovered,t.queue,t.emailMetadata))u.push(g);if(t.depth>0||!s){let g;{let{document:d}=k(h.data);g=this.extractRelevantLinks(d,l,f,t.depth,t.allowCrossDomainTravel)}t.depth--;let p=10,x=[];for(let d=0;d<g.length;d+=p){let v=g.slice(d,d+p),y=await Promise.allSettled(v.map((E)=>this.parseExternalWebsite(E,"GET",null,{...t,depth:t.depth},o,!1,!0)));x.push(...y)}for(let d of x)if(d.status==="fulfilled")u.push(...d.value);else if(this.debug)console.warn("⚠️ Failed to parse child URL:",d.reason?.message)}}catch(l){if(this.debug)console.error(`❌ Error parsing external website: ${e}`,l?.message)}if(i){if(t.onEmails&&t.onEmails.length>0)t.queue.add(async()=>Promise.all(t.onEmails.map((l)=>l(u))))}return u}async parseLinktreeProfile(e,a,n){let t=[];try{let o=await this.executeHttp(e,"GET",null,a,n);if(!o){if(this.debug)console.warn(`⚠️ Failed to fetch Linktree profile: ${e}`);return t}let i;{let{document:r}=k(o),m=r.getElementById("links-container");if(!m){if(this.debug)console.warn(`\uD83D\uDD0D No links container found in Linktree profile: ${e}`);return t}i=this.extractLinktreeExternalUrls(m,e)}if(i.length===0){if(this.debug)console.info("\uD83D\uDCED No valid external links found in Linktree profile");return t}if(this.debug)console.info(`\uD83C\uDFAF Found ${i.length} external links in Linktree profile`);let s=await Promise.allSettled(i.map((r)=>this.parseExternalWebsite(r,"GET",null,a,n,!1)));for(let r of s)if(r.status==="fulfilled")t.push(...r.value);else if(this.debug)console.warn("⚠️ Failed to parse Linktree external URL:",r.reason?.message)}catch(o){if(this.debug)console.error(`❌ Error parsing Linktree profile: ${e}`,o?.message)}return t}extractLinktreeExternalUrls(e,a){let n=new Set,t=e.querySelectorAll("a[href][target='_blank']");for(let o of t){let i=o.getAttribute("href");if(!i||i.length<3||this.forbiddenProtocols.some((s)=>i.startsWith(s)))continue;try{let s=new URL(i,a).href,r=this.extractRootDomain(s);if(r!=="linktr.ee"&&!this.isRestrictedDomain(s)&&r.length>3)n.add(s)}catch(s){if(this.debug)console.warn(`\uD83D\uDD17 Invalid URL in Linktree: ${i}`)}}return Array.from(n)}handleEmailDiscovery(e,a,n,t,o){if(!this.discoveredEmails.has(e)){this.discoveredEmails.add(e);let i={email:e,discoveredAt:a,timestamp:new Date,metadata:o||{}};if(n&&n.length>0)t.add(async()=>Promise.all(n.map((s)=>s(i))));if(this.debug)console.info(`\uD83D\uDCE7 New email discovered: ${e} at ${a}`);return!0}return!1}isDomainAccessAllowed(e,a,n,t){if(t)return!0;if(n===0)return e===a;return e===a||e.endsWith(`.${a}`)||a.endsWith(`.${e}`)}extractRelevantLinks(e,a,n,t,o){let i=[],s=["about","contact","help","support","reach","email","mail","message","company","team","staff","info","inquiry","feedback","service","assistance","connect","touch"],r=e.querySelectorAll("a[href]");for(let m of r){let u=m.getAttribute("href");if(!u||u.length<2)continue;try{let l=this.normalizeUrl(u,a),f=this.extractRootDomain(l);if(!this.isDomainAccessAllowed(f,n,t,o))continue;if(s.some((c)=>l.toLowerCase().includes(c))||this.isLinktreeUrl(l))i.push(l)}catch(l){if(this.debug)console.warn(`\uD83D\uDD17 Invalid link found: ${u}`,l?.message)}}return i}extractEmailsFromContent(e){let a=e.replace(b.CLEAN_CONTENT_REGEX," "),n=(s)=>{let r=s.split("@")[1]?.toLowerCase(),m=s.split(".").pop()?.toLowerCase();return b.EMAIL_VALIDATION_REGEX.test(s)&&r!==void 0&&m!==void 0&&!this.fileExtensions.includes(`.${m}`)&&!this.isRestrictedDomain(`https://${r}`)},t=(s)=>{return b.EMAIL_REGEX.lastIndex=0,(s.match(b.EMAIL_REGEX)||[]).filter(n)},o=e.replace(/<[^>]*>/g," "),i=[...t(o),...t(a)];return[...new Set(i)]}isRestrictedDomain(e){try{let a=new URL(e).host.toLowerCase();return this.restrictedDomains.some((n)=>a===n.toLowerCase()||a.endsWith(`.${n.toLowerCase()}`))}catch{return!0}}isLinktreeUrl(e){try{return this.extractRootDomain(e)==="linktr.ee"}catch{return!1}}extractRootDomain(e){try{let n=new URL(e).hostname.toLowerCase();return n.startsWith("www.")?n.slice(4):n}catch{return""}}normalizeUrl(e,a){if(e.startsWith("http://")||e.startsWith("https://"))return e;if(e.startsWith("//"))return`${a.protocol}${e}`;return new URL(e,a.href).href}getRandomUserAgent(){return this.userAgents[Math.floor(Math.random()*this.userAgents.length)]}}function $(){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"}],a=["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"],n=[];for(let t=0;t<200;t++){let o=e[Math.floor(Math.random()*e.length)],i=a[Math.floor(Math.random()*a.length)],s="";switch(o.name){case"Chrome":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36`;break;case"Firefox":s=`Mozilla/5.0 (${i}; rv:${o.version}) ${o.engine} Firefox/${o.version}`;break;case"Safari":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Version/${o.version} Safari/605.1.15`;break;case"Edge":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Edg/${o.version}`;break;case"Opera":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 OPR/${o.version}`;break;case"Vivaldi":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Vivaldi/${o.version}`;break;case"Brave":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Brave/${o.version}`;break;case"Chromium":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chromium/${o.version} Chrome/${o.version} Safari/537.36`;break;case"Yandex":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} YaBrowser/${o.version} Safari/537.36`;break;case"Maxthon":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Maxthon/${o.version}`;break}n.push(s)}return n}function C(){return["facebook.com","fb.com","messenger.com","instagram.com","threads.net","twitter.com","x.com","linkedin.com","pinterest.com","pin.it","reddit.com","tumblr.com","snapchat.com","tiktok.com","douyin.com","youtube.com","youtu.be","whatsapp.com","telegram.org","t.me","medium.com","quora.com","flickr.com","vimeo.com","vk.com","weibo.com","sina.com.cn","line.me","discord.com","discordapp.com","twitch.tv","meetup.com","nextdoor.com","xing.com","yelp.com","zalo.me","mastodon.social","clubhouse.com","patreon.com","onlyfans.com","douban.com","goodreads.com","soundcloud.com","spotify.com","last.fm","behance.net","dribbble.com","deviantart.com","pixiv.net","slideshare.net","tinder.com","bumble.com","etsy.com","indeed.com","glassdoor.com","monster.com","careerbuilder.com","dice.com","ziprecruiter.com","simplyhired.com","upwork.com","freelancer.com","fiverr.com","stackoverflow.com","stackoverflow.co","angel.co","wellfound.com","quora.com","stackexchange.com","yahoo.com","answers.microsoft.com","askubuntu.com","superuser.com","serverfault.com","mathoverflow.net","xda-developers.com","gamespot.com","ign.com","4chan.org","9gag.com","gizmodo.com","slashdot.org","hacker-news.news","ycombinator.com","producthunt.com","discourse.org","google.com","google.co.uk","google.de","google.fr","google.co.jp","bing.com","yahoo.com","search.yahoo.com","duckduckgo.com","baidu.com","yandex.com","yandex.ru","ask.com","wolframalpha.com","ecosia.org","startpage.com","qwant.com","searx.me","gibiru.com","swisscows.com","gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com","yahoo.com","ymail.com","aol.com","icloud.com","me.com","mac.com","protonmail.com","pm.me","zoho.com","mail.com","gmx.com","gmx.net","yandex.com","yandex.ru","tutanota.com","tutanota.de","fastmail.com","hushmail.com","mailbox.org","posteo.de","runbox.com","disroot.org","163.com","qq.com","rambler.ru","mail.ru","yelp.com","yelp.ca","yelp.co.uk","yelp.com.au","yellowpages.com","yellowpages.ca","yell.com","tripadvisor.com","tripadvisor.co.uk","tripadvisor.ca","foursquare.com","angieslist.com","bbb.org","manta.com","thumbtack.com","homeadvisor.com","superpages.com","whitepages.com","local.com","citysearch.com","merchantcircle.com","insiderpages.com","kudzu.com","hotfrog.com","buildzoom.com","houzz.com","porch.com","mapquest.com","zagat.com","zomato.com","opentable.com","viator.com","expedia.com","booking.com","airbnb.com","vrbo.com","homeaway.com","craigslist.org","nextdoor.com","patch.com","meetup.com","eventbrite.com","groupon.com","livingsocial.com","gumtree.com","gumtree.com.au","kijiji.ca","leboncoin.fr","finn.no","blocket.se","58.com","dianping.com","tabelog.com","ypcdn.com"]}exports.Scraper=b;exports.CappedSet=w;
1
+ var{parseHTML:k}=require("linkedom");class v extends Set{maxSize;evictionCount;constructor(e,n=0.1){super();this.maxSize=e,this.evictionCount=Math.max(1,Math.ceil(e*n))}add(e){if(this.has(e))return this;if(this.size>=this.maxSize){let n=this.values();for(let a=0;a<this.evictionCount;a++){let t=n.next();if(t.done)break;this.delete(t.value)}}return super.add(e)}}class b{http;httpOptions;onEmailLeads;onEmailDiscovered;debug;static CLEAN_CONTENT_REGEX=/[^\w@.-\s]/g;static EMAIL_REGEX=/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;static EMAIL_VALIDATION_REGEX=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;discoveredEmails=new v(1e4);userAgents=[];fileExtensions=[];restrictedDomains=y();forbiddenProtocols=["mailto:","tel:","javascript:","data:","sms:","ftp:","file:","irc:","blob:","chrome:","about:","intent:"];constructor(e,n,a,t,o=!1){this.http=e,this.httpOptions=n,this.onEmailLeads=a,this.onEmailDiscovered=t,this.debug=o,this.userAgents=C()}sleep(e){return new Promise((n)=>setTimeout(n,e))}async executeHttp(e,n,a,t,o,i=0){let{getCache:s,saveCache:r,hasUrlInCache:m,saveUrl:u,httpConfig:l={}}=t;if(!e||e.length<3||this.forbiddenProtocols.some((f)=>e.startsWith(f)))return;try{let f=o?!1:await m(e),h=await s(e);if(f&&!h)return!1;if(f&&n!=="GET")return!1;let c=h&&n==="GET"?h:await(n==="GET"?this.http.get(e,l):n==="PATCH"?this.http.patch(e,a,l):n==="POST"?this.http.post(e,a,l):this.http.put(e,a,l));if(!h)await r(e,{data:c.data,contentType:c.contentType,finalUrl:c.finalUrl});if(!f)await u(e);if(!c.contentType||!c.contentType.includes("/html")||!c.contentType.includes("text/")||typeof c.data!=="string")return null;return{data:c.data,contentType:c.contentType,finalUrl:c.finalUrl}}catch(f){let h=f,c=this.httpOptions;if(h&&h.response){let g=h.response.status,p=c.retryDelay||100,x=c.maxRetryAttempts||3,d=c.retryWithoutProxyOnStatusCode||void 0,w=c.maxRetryOnProxyError||3;if(d&&l.proxy&&d.includes(g)&&i<x)return await this.sleep(p),delete l.proxy,await this.executeHttp(e,n,a,t,o,i+1);else if(c.retryOnStatusCode&&l.proxy&&c.retryOnStatusCode.includes(g)&&i<x)return await this.sleep(p),await this.executeHttp(e,n,a,t,o,i+1);else if(c.retryOnProxyError&&l.proxy&&i<w)return await this.sleep(p),await this.executeHttp(e,n,a,t,o,i+1)}if(this.debug){if(this.debug)console.log(`Error: unable to ${n} ${e}: ${f.message}`)}return null}}extractEmails(e,n,a,t,o,i){let s=this.extractEmailsFromContent(e?.replaceAll("mailto:"," ")),r=[];for(let m of s)if(this.handleEmailDiscovery(m,n,a,o,i))r.push(m);if(t&&t.length>0&&r.length>0)o.add(async()=>Promise.all(t.map((m)=>m(r))));s.length=0,r.length=0}async parseExternalWebsite(e,n,a,t,o,i=!0,s,r){let m=t.httpConfig?.headers?t.httpConfig.headers instanceof Headers?Object.fromEntries(t.httpConfig.headers.entries()):t.httpConfig.headers:{};t.httpConfig=t.httpConfig||{},t.httpConfig.headers={"user-agent":this.getRandomUserAgent(),accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","accept-language":"en-US,en;q=0.9","cache-control":"no-cache",pragma:"no-cache",...m},t.httpConfig.timeout=t.httpConfig.timeout||15000,t.depth=t.depth||0,t.allowCrossDomainTravel=t.allowCrossDomainTravel||!1,o=o&&i;let u=[];try{let l=new URL(e),f=this.extractRootDomain(e);if(this.isLinktreeUrl(e))return await this.parseLinktreeProfile(e,t,o);if(this.isRestrictedDomain(e)){if(this.debug)console.warn(`⚠️ Skipped URL (restricted url): ${e}`);return u}let h=await this.executeHttp(e,n,a,t,o);if(!h){if(this.debug&&h===null)console.warn(`⚠️ Failed to fetch page content: ${e}`);if(this.debug&&h===!1)console.warn(`⚠️ Skipped URL (already visited): ${e}`);return u}let c=this.extractEmailsFromContent(h.data?.replaceAll("mailto:"," "));for(let g of c)if(this.handleEmailDiscovery(g,e,t.onEmailDiscovered,t.queue,t.emailMetadata))u.push(g);if(t.depth>0||!s){let g;{let{document:d}=k(h.data);g=this.extractRelevantLinks(d,l,f,t.depth,t.allowCrossDomainTravel)}t.depth--;let p=10,x=[];for(let d=0;d<g.length;d+=p){let w=g.slice(d,d+p),E=await Promise.allSettled(w.map((L)=>this.parseExternalWebsite(L,"GET",null,{...t,depth:t.depth},o,!1,!0)));x.push(...E)}for(let d of x)if(d.status==="fulfilled")u.push(...d.value);else if(this.debug)console.warn("⚠️ Failed to parse child URL:",d.reason?.message)}}catch(l){if(this.debug)console.error(`❌ Error parsing external website: ${e}`,l?.message)}if(i){if(t.onEmails&&t.onEmails.length>0)t.queue.add(async()=>Promise.all(t.onEmails.map((l)=>l(u))))}return u}async parseLinktreeProfile(e,n,a){let t=[];try{let o=await this.executeHttp(e,"GET",null,n,a);if(!o){if(this.debug)console.warn(`⚠️ Failed to fetch Linktree profile: ${e}`);return t}let i;{let{document:r}=k(o),m=r.getElementById("links-container");if(!m){if(this.debug)console.warn(`\uD83D\uDD0D No links container found in Linktree profile: ${e}`);return t}i=this.extractLinktreeExternalUrls(m,e)}if(i.length===0){if(this.debug)console.info("\uD83D\uDCED No valid external links found in Linktree profile");return t}if(this.debug)console.info(`\uD83C\uDFAF Found ${i.length} external links in Linktree profile`);let s=await Promise.allSettled(i.map((r)=>this.parseExternalWebsite(r,"GET",null,n,a,!1)));for(let r of s)if(r.status==="fulfilled")t.push(...r.value);else if(this.debug)console.warn("⚠️ Failed to parse Linktree external URL:",r.reason?.message)}catch(o){if(this.debug)console.error(`❌ Error parsing Linktree profile: ${e}`,o?.message)}return t}extractLinktreeExternalUrls(e,n){let a=new Set,t=e.querySelectorAll("a[href][target='_blank']");for(let o of t){let i=o.getAttribute("href");if(!i||i.length<3||this.forbiddenProtocols.some((s)=>i.startsWith(s)))continue;try{let s=new URL(i,n).href,r=this.extractRootDomain(s);if(r!=="linktr.ee"&&!this.isRestrictedDomain(s)&&r.length>3)a.add(s)}catch(s){if(this.debug)console.warn(`\uD83D\uDD17 Invalid URL in Linktree: ${i}`)}}return Array.from(a)}handleEmailDiscovery(e,n,a,t,o){if(!this.discoveredEmails.has(e)){this.discoveredEmails.add(e);let i={email:e,discoveredAt:n,timestamp:new Date,metadata:o||{}};if(a&&a.length>0)t.add(async()=>Promise.all(a.map((s)=>s(i))));if(this.debug)console.info(`\uD83D\uDCE7 New email discovered: ${e} at ${n}`);return!0}return!1}isDomainAccessAllowed(e,n,a,t){if(t)return!0;if(a===0)return e===n;return e===n||e.endsWith(`.${n}`)||n.endsWith(`.${e}`)}extractRelevantLinks(e,n,a,t,o){let i=[],s=["about","contact","help","support","reach","email","mail","message","company","team","staff","info","inquiry","feedback","service","assistance","connect","touch"],r=e.querySelectorAll("a[href]");for(let m of r){let u=m.getAttribute("href");if(!u||u.length<2)continue;try{let l=this.normalizeUrl(u,n),f=this.extractRootDomain(l);if(!this.isDomainAccessAllowed(f,a,t,o))continue;if(s.some((c)=>l.toLowerCase().includes(c))||this.isLinktreeUrl(l))i.push(l)}catch(l){if(this.debug)console.warn(`\uD83D\uDD17 Invalid link found: ${u}`,l?.message)}}return i}extractEmailsFromContent(e){let n=e.replace(b.CLEAN_CONTENT_REGEX," "),a=(s)=>{let r=s.split("@")[1]?.toLowerCase(),m=s.split(".").pop()?.toLowerCase();return b.EMAIL_VALIDATION_REGEX.test(s)&&r!==void 0&&m!==void 0&&!this.fileExtensions.includes(`.${m}`)&&!this.isRestrictedDomain(`https://${r}`)},t=(s)=>{return b.EMAIL_REGEX.lastIndex=0,(s.match(b.EMAIL_REGEX)||[]).filter(a)},o=e.replace(/<[^>]*>/g," "),i=[...t(o),...t(n)];return[...new Set(i)]}isRestrictedDomain(e){try{let n=new URL(e).host.toLowerCase();return this.restrictedDomains.some((a)=>n===a.toLowerCase()||n.endsWith(`.${a.toLowerCase()}`))}catch{return!0}}isLinktreeUrl(e){try{return this.extractRootDomain(e)==="linktr.ee"}catch{return!1}}extractRootDomain(e){try{let a=new URL(e).hostname.toLowerCase();return a.startsWith("www.")?a.slice(4):a}catch{return""}}normalizeUrl(e,n){if(e.startsWith("http://")||e.startsWith("https://"))return e;if(e.startsWith("//"))return`${n.protocol}${e}`;return new URL(e,n.href).href}getRandomUserAgent(){return this.userAgents[Math.floor(Math.random()*this.userAgents.length)]}}function C(){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"}],n=["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"],a=[];for(let t=0;t<200;t++){let o=e[Math.floor(Math.random()*e.length)],i=n[Math.floor(Math.random()*n.length)],s="";switch(o.name){case"Chrome":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36`;break;case"Firefox":s=`Mozilla/5.0 (${i}; rv:${o.version}) ${o.engine} Firefox/${o.version}`;break;case"Safari":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Version/${o.version} Safari/605.1.15`;break;case"Edge":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Edg/${o.version}`;break;case"Opera":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 OPR/${o.version}`;break;case"Vivaldi":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Vivaldi/${o.version}`;break;case"Brave":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Brave/${o.version}`;break;case"Chromium":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chromium/${o.version} Chrome/${o.version} Safari/537.36`;break;case"Yandex":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} YaBrowser/${o.version} Safari/537.36`;break;case"Maxthon":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Maxthon/${o.version}`;break}a.push(s)}return a}function y(){return["facebook.com","fb.com","messenger.com","instagram.com","threads.net","twitter.com","x.com","linkedin.com","pinterest.com","pin.it","reddit.com","tumblr.com","snapchat.com","tiktok.com","douyin.com","youtube.com","youtu.be","whatsapp.com","telegram.org","t.me","medium.com","quora.com","flickr.com","vimeo.com","vk.com","weibo.com","sina.com.cn","line.me","discord.com","discordapp.com","twitch.tv","meetup.com","nextdoor.com","xing.com","yelp.com","zalo.me","mastodon.social","clubhouse.com","patreon.com","onlyfans.com","douban.com","goodreads.com","soundcloud.com","spotify.com","last.fm","behance.net","dribbble.com","deviantart.com","pixiv.net","slideshare.net","tinder.com","bumble.com","etsy.com","indeed.com","glassdoor.com","monster.com","careerbuilder.com","dice.com","ziprecruiter.com","simplyhired.com","upwork.com","freelancer.com","fiverr.com","stackoverflow.com","stackoverflow.co","angel.co","wellfound.com","quora.com","stackexchange.com","yahoo.com","answers.microsoft.com","askubuntu.com","superuser.com","serverfault.com","mathoverflow.net","xda-developers.com","gamespot.com","ign.com","4chan.org","9gag.com","gizmodo.com","slashdot.org","hacker-news.news","ycombinator.com","producthunt.com","discourse.org","google.com","google.co.uk","google.de","google.fr","google.co.jp","bing.com","yahoo.com","search.yahoo.com","duckduckgo.com","baidu.com","yandex.com","yandex.ru","ask.com","wolframalpha.com","ecosia.org","startpage.com","qwant.com","searx.me","gibiru.com","swisscows.com","gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com","yahoo.com","ymail.com","aol.com","icloud.com","me.com","mac.com","protonmail.com","pm.me","zoho.com","mail.com","gmx.com","gmx.net","yandex.com","yandex.ru","tutanota.com","tutanota.de","fastmail.com","hushmail.com","mailbox.org","posteo.de","runbox.com","disroot.org","163.com","qq.com","rambler.ru","mail.ru","yelp.com","yelp.ca","yelp.co.uk","yelp.com.au","yellowpages.com","yellowpages.ca","yell.com","tripadvisor.com","tripadvisor.co.uk","tripadvisor.ca","foursquare.com","angieslist.com","bbb.org","manta.com","thumbtack.com","homeadvisor.com","superpages.com","whitepages.com","local.com","citysearch.com","merchantcircle.com","insiderpages.com","kudzu.com","hotfrog.com","buildzoom.com","houzz.com","porch.com","mapquest.com","zagat.com","zomato.com","opentable.com","viator.com","expedia.com","booking.com","airbnb.com","vrbo.com","homeaway.com","craigslist.org","nextdoor.com","patch.com","meetup.com","eventbrite.com","groupon.com","livingsocial.com","gumtree.com","gumtree.com.au","kijiji.ca","leboncoin.fr","finn.no","blocket.se","58.com","dianping.com","tabelog.com","ypcdn.com"]}function $(e){try{let n=new URL(e).host.toLowerCase();return y().some((a)=>n===a.toLowerCase()||n.endsWith(`.${a.toLowerCase()}`))}catch{return!0}}exports.Scraper=b;exports.CappedSet=v;exports.isRestrictedDomain=$;
@@ -1 +1 @@
1
- import{parseHTML as w}from"linkedom";class k extends Set{maxSize;evictionCount;constructor(e,a=0.1){super();this.maxSize=e,this.evictionCount=Math.max(1,Math.ceil(e*a))}add(e){if(this.has(e))return this;if(this.size>=this.maxSize){let a=this.values();for(let n=0;n<this.evictionCount;n++){let t=a.next();if(t.done)break;this.delete(t.value)}}return super.add(e)}}class x{http;httpOptions;onEmailLeads;onEmailDiscovered;debug;static CLEAN_CONTENT_REGEX=/[^\w@.-\s]/g;static EMAIL_REGEX=/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;static EMAIL_VALIDATION_REGEX=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;discoveredEmails=new k(1e4);userAgents=[];fileExtensions=[];restrictedDomains=L();forbiddenProtocols=["mailto:","tel:","javascript:","data:","sms:","ftp:","file:","irc:","blob:","chrome:","about:","intent:"];constructor(e,a,n,t,o=!1){this.http=e,this.httpOptions=a,this.onEmailLeads=n,this.onEmailDiscovered=t,this.debug=o,this.userAgents=$()}sleep(e){return new Promise((a)=>setTimeout(a,e))}async executeHttp(e,a,n,t,o,i=0){let{getCache:s,saveCache:r,hasUrlInCache:m,saveUrl:u,httpConfig:l={}}=t;if(!e||e.length<3||this.forbiddenProtocols.some((f)=>e.startsWith(f)))return;try{let f=o?!1:await m(e),h=await s(e);if(f&&!h)return!1;if(f&&a!=="GET")return!1;let c=h&&a==="GET"?h:await(a==="GET"?this.http.get(e,l):a==="PATCH"?this.http.patch(e,n,l):a==="POST"?this.http.post(e,n,l):this.http.put(e,n,l));if(!h)await r(e,{data:c.data,contentType:c.contentType,finalUrl:c.finalUrl});if(!f)await u(e);if(!c.contentType||!c.contentType.includes("/html")||!c.contentType.includes("text/")||typeof c.data!=="string")return null;return{data:c.data,contentType:c.contentType,finalUrl:c.finalUrl}}catch(f){let h=f,c=this.httpOptions;if(h&&h.response){let g=h.response.status,p=c.retryDelay||100,b=c.maxRetryAttempts||3,d=c.retryWithoutProxyOnStatusCode||void 0,v=c.maxRetryOnProxyError||3;if(d&&l.proxy&&d.includes(g)&&i<b)return await this.sleep(p),delete l.proxy,await this.executeHttp(e,a,n,t,o,i+1);else if(c.retryOnStatusCode&&l.proxy&&c.retryOnStatusCode.includes(g)&&i<b)return await this.sleep(p),await this.executeHttp(e,a,n,t,o,i+1);else if(c.retryOnProxyError&&l.proxy&&i<v)return await this.sleep(p),await this.executeHttp(e,a,n,t,o,i+1)}if(this.debug){if(this.debug)console.log(`Error: unable to ${a} ${e}: ${f.message}`)}return null}}extractEmails(e,a,n,t,o,i){let s=this.extractEmailsFromContent(e?.replaceAll("mailto:"," ")),r=[];for(let m of s)if(this.handleEmailDiscovery(m,a,n,o,i))r.push(m);if(t&&t.length>0&&r.length>0)o.add(async()=>Promise.all(t.map((m)=>m(r))));s.length=0,r.length=0}async parseExternalWebsite(e,a,n,t,o,i=!0,s,r){let m=t.httpConfig?.headers?t.httpConfig.headers instanceof Headers?Object.fromEntries(t.httpConfig.headers.entries()):t.httpConfig.headers:{};t.httpConfig=t.httpConfig||{},t.httpConfig.headers={"user-agent":this.getRandomUserAgent(),accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","accept-language":"en-US,en;q=0.9","cache-control":"no-cache",pragma:"no-cache",...m},t.httpConfig.timeout=t.httpConfig.timeout||15000,t.depth=t.depth||0,t.allowCrossDomainTravel=t.allowCrossDomainTravel||!1,o=o&&i;let u=[];try{let l=new URL(e),f=this.extractRootDomain(e);if(this.isLinktreeUrl(e))return await this.parseLinktreeProfile(e,t,o);if(this.isRestrictedDomain(e)){if(this.debug)console.warn(`⚠️ Skipped URL (restricted url): ${e}`);return u}let h=await this.executeHttp(e,a,n,t,o);if(!h){if(this.debug&&h===null)console.warn(`⚠️ Failed to fetch page content: ${e}`);if(this.debug&&h===!1)console.warn(`⚠️ Skipped URL (already visited): ${e}`);return u}let c=this.extractEmailsFromContent(h.data?.replaceAll("mailto:"," "));for(let g of c)if(this.handleEmailDiscovery(g,e,t.onEmailDiscovered,t.queue,t.emailMetadata))u.push(g);if(t.depth>0||!s){let g;{let{document:d}=w(h.data);g=this.extractRelevantLinks(d,l,f,t.depth,t.allowCrossDomainTravel)}t.depth--;let p=10,b=[];for(let d=0;d<g.length;d+=p){let v=g.slice(d,d+p),y=await Promise.allSettled(v.map((E)=>this.parseExternalWebsite(E,"GET",null,{...t,depth:t.depth},o,!1,!0)));b.push(...y)}for(let d of b)if(d.status==="fulfilled")u.push(...d.value);else if(this.debug)console.warn("⚠️ Failed to parse child URL:",d.reason?.message)}}catch(l){if(this.debug)console.error(`❌ Error parsing external website: ${e}`,l?.message)}if(i){if(t.onEmails&&t.onEmails.length>0)t.queue.add(async()=>Promise.all(t.onEmails.map((l)=>l(u))))}return u}async parseLinktreeProfile(e,a,n){let t=[];try{let o=await this.executeHttp(e,"GET",null,a,n);if(!o){if(this.debug)console.warn(`⚠️ Failed to fetch Linktree profile: ${e}`);return t}let i;{let{document:r}=w(o),m=r.getElementById("links-container");if(!m){if(this.debug)console.warn(`\uD83D\uDD0D No links container found in Linktree profile: ${e}`);return t}i=this.extractLinktreeExternalUrls(m,e)}if(i.length===0){if(this.debug)console.info("\uD83D\uDCED No valid external links found in Linktree profile");return t}if(this.debug)console.info(`\uD83C\uDFAF Found ${i.length} external links in Linktree profile`);let s=await Promise.allSettled(i.map((r)=>this.parseExternalWebsite(r,"GET",null,a,n,!1)));for(let r of s)if(r.status==="fulfilled")t.push(...r.value);else if(this.debug)console.warn("⚠️ Failed to parse Linktree external URL:",r.reason?.message)}catch(o){if(this.debug)console.error(`❌ Error parsing Linktree profile: ${e}`,o?.message)}return t}extractLinktreeExternalUrls(e,a){let n=new Set,t=e.querySelectorAll("a[href][target='_blank']");for(let o of t){let i=o.getAttribute("href");if(!i||i.length<3||this.forbiddenProtocols.some((s)=>i.startsWith(s)))continue;try{let s=new URL(i,a).href,r=this.extractRootDomain(s);if(r!=="linktr.ee"&&!this.isRestrictedDomain(s)&&r.length>3)n.add(s)}catch(s){if(this.debug)console.warn(`\uD83D\uDD17 Invalid URL in Linktree: ${i}`)}}return Array.from(n)}handleEmailDiscovery(e,a,n,t,o){if(!this.discoveredEmails.has(e)){this.discoveredEmails.add(e);let i={email:e,discoveredAt:a,timestamp:new Date,metadata:o||{}};if(n&&n.length>0)t.add(async()=>Promise.all(n.map((s)=>s(i))));if(this.debug)console.info(`\uD83D\uDCE7 New email discovered: ${e} at ${a}`);return!0}return!1}isDomainAccessAllowed(e,a,n,t){if(t)return!0;if(n===0)return e===a;return e===a||e.endsWith(`.${a}`)||a.endsWith(`.${e}`)}extractRelevantLinks(e,a,n,t,o){let i=[],s=["about","contact","help","support","reach","email","mail","message","company","team","staff","info","inquiry","feedback","service","assistance","connect","touch"],r=e.querySelectorAll("a[href]");for(let m of r){let u=m.getAttribute("href");if(!u||u.length<2)continue;try{let l=this.normalizeUrl(u,a),f=this.extractRootDomain(l);if(!this.isDomainAccessAllowed(f,n,t,o))continue;if(s.some((c)=>l.toLowerCase().includes(c))||this.isLinktreeUrl(l))i.push(l)}catch(l){if(this.debug)console.warn(`\uD83D\uDD17 Invalid link found: ${u}`,l?.message)}}return i}extractEmailsFromContent(e){let a=e.replace(x.CLEAN_CONTENT_REGEX," "),n=(s)=>{let r=s.split("@")[1]?.toLowerCase(),m=s.split(".").pop()?.toLowerCase();return x.EMAIL_VALIDATION_REGEX.test(s)&&r!==void 0&&m!==void 0&&!this.fileExtensions.includes(`.${m}`)&&!this.isRestrictedDomain(`https://${r}`)},t=(s)=>{return x.EMAIL_REGEX.lastIndex=0,(s.match(x.EMAIL_REGEX)||[]).filter(n)},o=e.replace(/<[^>]*>/g," "),i=[...t(o),...t(a)];return[...new Set(i)]}isRestrictedDomain(e){try{let a=new URL(e).host.toLowerCase();return this.restrictedDomains.some((n)=>a===n.toLowerCase()||a.endsWith(`.${n.toLowerCase()}`))}catch{return!0}}isLinktreeUrl(e){try{return this.extractRootDomain(e)==="linktr.ee"}catch{return!1}}extractRootDomain(e){try{let n=new URL(e).hostname.toLowerCase();return n.startsWith("www.")?n.slice(4):n}catch{return""}}normalizeUrl(e,a){if(e.startsWith("http://")||e.startsWith("https://"))return e;if(e.startsWith("//"))return`${a.protocol}${e}`;return new URL(e,a.href).href}getRandomUserAgent(){return this.userAgents[Math.floor(Math.random()*this.userAgents.length)]}}function $(){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"}],a=["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"],n=[];for(let t=0;t<200;t++){let o=e[Math.floor(Math.random()*e.length)],i=a[Math.floor(Math.random()*a.length)],s="";switch(o.name){case"Chrome":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36`;break;case"Firefox":s=`Mozilla/5.0 (${i}; rv:${o.version}) ${o.engine} Firefox/${o.version}`;break;case"Safari":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Version/${o.version} Safari/605.1.15`;break;case"Edge":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Edg/${o.version}`;break;case"Opera":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 OPR/${o.version}`;break;case"Vivaldi":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Vivaldi/${o.version}`;break;case"Brave":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Brave/${o.version}`;break;case"Chromium":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chromium/${o.version} Chrome/${o.version} Safari/537.36`;break;case"Yandex":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} YaBrowser/${o.version} Safari/537.36`;break;case"Maxthon":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Maxthon/${o.version}`;break}n.push(s)}return n}function L(){return["facebook.com","fb.com","messenger.com","instagram.com","threads.net","twitter.com","x.com","linkedin.com","pinterest.com","pin.it","reddit.com","tumblr.com","snapchat.com","tiktok.com","douyin.com","youtube.com","youtu.be","whatsapp.com","telegram.org","t.me","medium.com","quora.com","flickr.com","vimeo.com","vk.com","weibo.com","sina.com.cn","line.me","discord.com","discordapp.com","twitch.tv","meetup.com","nextdoor.com","xing.com","yelp.com","zalo.me","mastodon.social","clubhouse.com","patreon.com","onlyfans.com","douban.com","goodreads.com","soundcloud.com","spotify.com","last.fm","behance.net","dribbble.com","deviantart.com","pixiv.net","slideshare.net","tinder.com","bumble.com","etsy.com","indeed.com","glassdoor.com","monster.com","careerbuilder.com","dice.com","ziprecruiter.com","simplyhired.com","upwork.com","freelancer.com","fiverr.com","stackoverflow.com","stackoverflow.co","angel.co","wellfound.com","quora.com","stackexchange.com","yahoo.com","answers.microsoft.com","askubuntu.com","superuser.com","serverfault.com","mathoverflow.net","xda-developers.com","gamespot.com","ign.com","4chan.org","9gag.com","gizmodo.com","slashdot.org","hacker-news.news","ycombinator.com","producthunt.com","discourse.org","google.com","google.co.uk","google.de","google.fr","google.co.jp","bing.com","yahoo.com","search.yahoo.com","duckduckgo.com","baidu.com","yandex.com","yandex.ru","ask.com","wolframalpha.com","ecosia.org","startpage.com","qwant.com","searx.me","gibiru.com","swisscows.com","gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com","yahoo.com","ymail.com","aol.com","icloud.com","me.com","mac.com","protonmail.com","pm.me","zoho.com","mail.com","gmx.com","gmx.net","yandex.com","yandex.ru","tutanota.com","tutanota.de","fastmail.com","hushmail.com","mailbox.org","posteo.de","runbox.com","disroot.org","163.com","qq.com","rambler.ru","mail.ru","yelp.com","yelp.ca","yelp.co.uk","yelp.com.au","yellowpages.com","yellowpages.ca","yell.com","tripadvisor.com","tripadvisor.co.uk","tripadvisor.ca","foursquare.com","angieslist.com","bbb.org","manta.com","thumbtack.com","homeadvisor.com","superpages.com","whitepages.com","local.com","citysearch.com","merchantcircle.com","insiderpages.com","kudzu.com","hotfrog.com","buildzoom.com","houzz.com","porch.com","mapquest.com","zagat.com","zomato.com","opentable.com","viator.com","expedia.com","booking.com","airbnb.com","vrbo.com","homeaway.com","craigslist.org","nextdoor.com","patch.com","meetup.com","eventbrite.com","groupon.com","livingsocial.com","gumtree.com","gumtree.com.au","kijiji.ca","leboncoin.fr","finn.no","blocket.se","58.com","dianping.com","tabelog.com","ypcdn.com"]}export{x as Scraper,k as CappedSet};
1
+ import{parseHTML as v}from"linkedom";class k extends Set{maxSize;evictionCount;constructor(e,n=0.1){super();this.maxSize=e,this.evictionCount=Math.max(1,Math.ceil(e*n))}add(e){if(this.has(e))return this;if(this.size>=this.maxSize){let n=this.values();for(let a=0;a<this.evictionCount;a++){let t=n.next();if(t.done)break;this.delete(t.value)}}return super.add(e)}}class x{http;httpOptions;onEmailLeads;onEmailDiscovered;debug;static CLEAN_CONTENT_REGEX=/[^\w@.-\s]/g;static EMAIL_REGEX=/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;static EMAIL_VALIDATION_REGEX=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;discoveredEmails=new k(1e4);userAgents=[];fileExtensions=[];restrictedDomains=y();forbiddenProtocols=["mailto:","tel:","javascript:","data:","sms:","ftp:","file:","irc:","blob:","chrome:","about:","intent:"];constructor(e,n,a,t,o=!1){this.http=e,this.httpOptions=n,this.onEmailLeads=a,this.onEmailDiscovered=t,this.debug=o,this.userAgents=C()}sleep(e){return new Promise((n)=>setTimeout(n,e))}async executeHttp(e,n,a,t,o,i=0){let{getCache:s,saveCache:r,hasUrlInCache:m,saveUrl:u,httpConfig:l={}}=t;if(!e||e.length<3||this.forbiddenProtocols.some((f)=>e.startsWith(f)))return;try{let f=o?!1:await m(e),h=await s(e);if(f&&!h)return!1;if(f&&n!=="GET")return!1;let c=h&&n==="GET"?h:await(n==="GET"?this.http.get(e,l):n==="PATCH"?this.http.patch(e,a,l):n==="POST"?this.http.post(e,a,l):this.http.put(e,a,l));if(!h)await r(e,{data:c.data,contentType:c.contentType,finalUrl:c.finalUrl});if(!f)await u(e);if(!c.contentType||!c.contentType.includes("/html")||!c.contentType.includes("text/")||typeof c.data!=="string")return null;return{data:c.data,contentType:c.contentType,finalUrl:c.finalUrl}}catch(f){let h=f,c=this.httpOptions;if(h&&h.response){let g=h.response.status,p=c.retryDelay||100,b=c.maxRetryAttempts||3,d=c.retryWithoutProxyOnStatusCode||void 0,w=c.maxRetryOnProxyError||3;if(d&&l.proxy&&d.includes(g)&&i<b)return await this.sleep(p),delete l.proxy,await this.executeHttp(e,n,a,t,o,i+1);else if(c.retryOnStatusCode&&l.proxy&&c.retryOnStatusCode.includes(g)&&i<b)return await this.sleep(p),await this.executeHttp(e,n,a,t,o,i+1);else if(c.retryOnProxyError&&l.proxy&&i<w)return await this.sleep(p),await this.executeHttp(e,n,a,t,o,i+1)}if(this.debug){if(this.debug)console.log(`Error: unable to ${n} ${e}: ${f.message}`)}return null}}extractEmails(e,n,a,t,o,i){let s=this.extractEmailsFromContent(e?.replaceAll("mailto:"," ")),r=[];for(let m of s)if(this.handleEmailDiscovery(m,n,a,o,i))r.push(m);if(t&&t.length>0&&r.length>0)o.add(async()=>Promise.all(t.map((m)=>m(r))));s.length=0,r.length=0}async parseExternalWebsite(e,n,a,t,o,i=!0,s,r){let m=t.httpConfig?.headers?t.httpConfig.headers instanceof Headers?Object.fromEntries(t.httpConfig.headers.entries()):t.httpConfig.headers:{};t.httpConfig=t.httpConfig||{},t.httpConfig.headers={"user-agent":this.getRandomUserAgent(),accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","accept-language":"en-US,en;q=0.9","cache-control":"no-cache",pragma:"no-cache",...m},t.httpConfig.timeout=t.httpConfig.timeout||15000,t.depth=t.depth||0,t.allowCrossDomainTravel=t.allowCrossDomainTravel||!1,o=o&&i;let u=[];try{let l=new URL(e),f=this.extractRootDomain(e);if(this.isLinktreeUrl(e))return await this.parseLinktreeProfile(e,t,o);if(this.isRestrictedDomain(e)){if(this.debug)console.warn(`⚠️ Skipped URL (restricted url): ${e}`);return u}let h=await this.executeHttp(e,n,a,t,o);if(!h){if(this.debug&&h===null)console.warn(`⚠️ Failed to fetch page content: ${e}`);if(this.debug&&h===!1)console.warn(`⚠️ Skipped URL (already visited): ${e}`);return u}let c=this.extractEmailsFromContent(h.data?.replaceAll("mailto:"," "));for(let g of c)if(this.handleEmailDiscovery(g,e,t.onEmailDiscovered,t.queue,t.emailMetadata))u.push(g);if(t.depth>0||!s){let g;{let{document:d}=v(h.data);g=this.extractRelevantLinks(d,l,f,t.depth,t.allowCrossDomainTravel)}t.depth--;let p=10,b=[];for(let d=0;d<g.length;d+=p){let w=g.slice(d,d+p),E=await Promise.allSettled(w.map((L)=>this.parseExternalWebsite(L,"GET",null,{...t,depth:t.depth},o,!1,!0)));b.push(...E)}for(let d of b)if(d.status==="fulfilled")u.push(...d.value);else if(this.debug)console.warn("⚠️ Failed to parse child URL:",d.reason?.message)}}catch(l){if(this.debug)console.error(`❌ Error parsing external website: ${e}`,l?.message)}if(i){if(t.onEmails&&t.onEmails.length>0)t.queue.add(async()=>Promise.all(t.onEmails.map((l)=>l(u))))}return u}async parseLinktreeProfile(e,n,a){let t=[];try{let o=await this.executeHttp(e,"GET",null,n,a);if(!o){if(this.debug)console.warn(`⚠️ Failed to fetch Linktree profile: ${e}`);return t}let i;{let{document:r}=v(o),m=r.getElementById("links-container");if(!m){if(this.debug)console.warn(`\uD83D\uDD0D No links container found in Linktree profile: ${e}`);return t}i=this.extractLinktreeExternalUrls(m,e)}if(i.length===0){if(this.debug)console.info("\uD83D\uDCED No valid external links found in Linktree profile");return t}if(this.debug)console.info(`\uD83C\uDFAF Found ${i.length} external links in Linktree profile`);let s=await Promise.allSettled(i.map((r)=>this.parseExternalWebsite(r,"GET",null,n,a,!1)));for(let r of s)if(r.status==="fulfilled")t.push(...r.value);else if(this.debug)console.warn("⚠️ Failed to parse Linktree external URL:",r.reason?.message)}catch(o){if(this.debug)console.error(`❌ Error parsing Linktree profile: ${e}`,o?.message)}return t}extractLinktreeExternalUrls(e,n){let a=new Set,t=e.querySelectorAll("a[href][target='_blank']");for(let o of t){let i=o.getAttribute("href");if(!i||i.length<3||this.forbiddenProtocols.some((s)=>i.startsWith(s)))continue;try{let s=new URL(i,n).href,r=this.extractRootDomain(s);if(r!=="linktr.ee"&&!this.isRestrictedDomain(s)&&r.length>3)a.add(s)}catch(s){if(this.debug)console.warn(`\uD83D\uDD17 Invalid URL in Linktree: ${i}`)}}return Array.from(a)}handleEmailDiscovery(e,n,a,t,o){if(!this.discoveredEmails.has(e)){this.discoveredEmails.add(e);let i={email:e,discoveredAt:n,timestamp:new Date,metadata:o||{}};if(a&&a.length>0)t.add(async()=>Promise.all(a.map((s)=>s(i))));if(this.debug)console.info(`\uD83D\uDCE7 New email discovered: ${e} at ${n}`);return!0}return!1}isDomainAccessAllowed(e,n,a,t){if(t)return!0;if(a===0)return e===n;return e===n||e.endsWith(`.${n}`)||n.endsWith(`.${e}`)}extractRelevantLinks(e,n,a,t,o){let i=[],s=["about","contact","help","support","reach","email","mail","message","company","team","staff","info","inquiry","feedback","service","assistance","connect","touch"],r=e.querySelectorAll("a[href]");for(let m of r){let u=m.getAttribute("href");if(!u||u.length<2)continue;try{let l=this.normalizeUrl(u,n),f=this.extractRootDomain(l);if(!this.isDomainAccessAllowed(f,a,t,o))continue;if(s.some((c)=>l.toLowerCase().includes(c))||this.isLinktreeUrl(l))i.push(l)}catch(l){if(this.debug)console.warn(`\uD83D\uDD17 Invalid link found: ${u}`,l?.message)}}return i}extractEmailsFromContent(e){let n=e.replace(x.CLEAN_CONTENT_REGEX," "),a=(s)=>{let r=s.split("@")[1]?.toLowerCase(),m=s.split(".").pop()?.toLowerCase();return x.EMAIL_VALIDATION_REGEX.test(s)&&r!==void 0&&m!==void 0&&!this.fileExtensions.includes(`.${m}`)&&!this.isRestrictedDomain(`https://${r}`)},t=(s)=>{return x.EMAIL_REGEX.lastIndex=0,(s.match(x.EMAIL_REGEX)||[]).filter(a)},o=e.replace(/<[^>]*>/g," "),i=[...t(o),...t(n)];return[...new Set(i)]}isRestrictedDomain(e){try{let n=new URL(e).host.toLowerCase();return this.restrictedDomains.some((a)=>n===a.toLowerCase()||n.endsWith(`.${a.toLowerCase()}`))}catch{return!0}}isLinktreeUrl(e){try{return this.extractRootDomain(e)==="linktr.ee"}catch{return!1}}extractRootDomain(e){try{let a=new URL(e).hostname.toLowerCase();return a.startsWith("www.")?a.slice(4):a}catch{return""}}normalizeUrl(e,n){if(e.startsWith("http://")||e.startsWith("https://"))return e;if(e.startsWith("//"))return`${n.protocol}${e}`;return new URL(e,n.href).href}getRandomUserAgent(){return this.userAgents[Math.floor(Math.random()*this.userAgents.length)]}}function C(){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"}],n=["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"],a=[];for(let t=0;t<200;t++){let o=e[Math.floor(Math.random()*e.length)],i=n[Math.floor(Math.random()*n.length)],s="";switch(o.name){case"Chrome":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36`;break;case"Firefox":s=`Mozilla/5.0 (${i}; rv:${o.version}) ${o.engine} Firefox/${o.version}`;break;case"Safari":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Version/${o.version} Safari/605.1.15`;break;case"Edge":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Edg/${o.version}`;break;case"Opera":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 OPR/${o.version}`;break;case"Vivaldi":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Vivaldi/${o.version}`;break;case"Brave":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Brave/${o.version}`;break;case"Chromium":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chromium/${o.version} Chrome/${o.version} Safari/537.36`;break;case"Yandex":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} YaBrowser/${o.version} Safari/537.36`;break;case"Maxthon":s=`Mozilla/5.0 (${i}) ${o.engine} (KHTML, like Gecko) Chrome/${o.version} Safari/537.36 Maxthon/${o.version}`;break}a.push(s)}return a}function y(){return["facebook.com","fb.com","messenger.com","instagram.com","threads.net","twitter.com","x.com","linkedin.com","pinterest.com","pin.it","reddit.com","tumblr.com","snapchat.com","tiktok.com","douyin.com","youtube.com","youtu.be","whatsapp.com","telegram.org","t.me","medium.com","quora.com","flickr.com","vimeo.com","vk.com","weibo.com","sina.com.cn","line.me","discord.com","discordapp.com","twitch.tv","meetup.com","nextdoor.com","xing.com","yelp.com","zalo.me","mastodon.social","clubhouse.com","patreon.com","onlyfans.com","douban.com","goodreads.com","soundcloud.com","spotify.com","last.fm","behance.net","dribbble.com","deviantart.com","pixiv.net","slideshare.net","tinder.com","bumble.com","etsy.com","indeed.com","glassdoor.com","monster.com","careerbuilder.com","dice.com","ziprecruiter.com","simplyhired.com","upwork.com","freelancer.com","fiverr.com","stackoverflow.com","stackoverflow.co","angel.co","wellfound.com","quora.com","stackexchange.com","yahoo.com","answers.microsoft.com","askubuntu.com","superuser.com","serverfault.com","mathoverflow.net","xda-developers.com","gamespot.com","ign.com","4chan.org","9gag.com","gizmodo.com","slashdot.org","hacker-news.news","ycombinator.com","producthunt.com","discourse.org","google.com","google.co.uk","google.de","google.fr","google.co.jp","bing.com","yahoo.com","search.yahoo.com","duckduckgo.com","baidu.com","yandex.com","yandex.ru","ask.com","wolframalpha.com","ecosia.org","startpage.com","qwant.com","searx.me","gibiru.com","swisscows.com","gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com","yahoo.com","ymail.com","aol.com","icloud.com","me.com","mac.com","protonmail.com","pm.me","zoho.com","mail.com","gmx.com","gmx.net","yandex.com","yandex.ru","tutanota.com","tutanota.de","fastmail.com","hushmail.com","mailbox.org","posteo.de","runbox.com","disroot.org","163.com","qq.com","rambler.ru","mail.ru","yelp.com","yelp.ca","yelp.co.uk","yelp.com.au","yellowpages.com","yellowpages.ca","yell.com","tripadvisor.com","tripadvisor.co.uk","tripadvisor.ca","foursquare.com","angieslist.com","bbb.org","manta.com","thumbtack.com","homeadvisor.com","superpages.com","whitepages.com","local.com","citysearch.com","merchantcircle.com","insiderpages.com","kudzu.com","hotfrog.com","buildzoom.com","houzz.com","porch.com","mapquest.com","zagat.com","zomato.com","opentable.com","viator.com","expedia.com","booking.com","airbnb.com","vrbo.com","homeaway.com","craigslist.org","nextdoor.com","patch.com","meetup.com","eventbrite.com","groupon.com","livingsocial.com","gumtree.com","gumtree.com.au","kijiji.ca","leboncoin.fr","finn.no","blocket.se","58.com","dianping.com","tabelog.com","ypcdn.com"]}function A(e){try{let n=new URL(e).host.toLowerCase();return y().some((a)=>n===a.toLowerCase()||n.endsWith(`.${a.toLowerCase()}`))}catch{return!0}}export{A as isRestrictedDomain,x as Scraper,k as CappedSet};
@@ -1,4 +1,4 @@
1
- const _mod_ioqjf8 = require('../crawler/crawler.cjs');
2
- exports.Crawler = _mod_ioqjf8.Crawler;;
3
- const _mod_q43cpd = require('../crawler/crawler-options.cjs');
4
- exports.CrawlerOptions = _mod_q43cpd.CrawlerOptions;;
1
+ const _mod_qvnxhn = require('../crawler/crawler.cjs');
2
+ exports.Crawler = _mod_qvnxhn.Crawler;;
3
+ const _mod_wrstk4 = require('../crawler/crawler-options.cjs');
4
+ exports.CrawlerOptions = _mod_wrstk4.CrawlerOptions;;
package/dist/index.cjs CHANGED
@@ -1,30 +1,30 @@
1
- const _mod_z8hnjj = require('./core/rezo.cjs');
2
- exports.Rezo = _mod_z8hnjj.Rezo;
3
- exports.createRezoInstance = _mod_z8hnjj.createRezoInstance;
4
- exports.createDefaultInstance = _mod_z8hnjj.createDefaultInstance;;
5
- const _mod_xud1je = require('./errors/rezo-error.cjs');
6
- exports.RezoError = _mod_xud1je.RezoError;
7
- exports.RezoErrorCode = _mod_xud1je.RezoErrorCode;;
8
- const _mod_6560f8 = require('./utils/headers.cjs');
9
- exports.RezoHeaders = _mod_6560f8.RezoHeaders;;
10
- const _mod_lxkkq1 = require('./utils/form-data.cjs');
11
- exports.RezoFormData = _mod_lxkkq1.RezoFormData;;
12
- const _mod_i2hy45 = require('./utils/cookies.cjs');
13
- exports.RezoCookieJar = _mod_i2hy45.RezoCookieJar;
14
- exports.Cookie = _mod_i2hy45.Cookie;;
15
- const _mod_z2kao1 = require('./utils/curl.cjs');
16
- exports.toCurl = _mod_z2kao1.toCurl;
17
- exports.fromCurl = _mod_z2kao1.fromCurl;;
18
- const _mod_5yvopr = require('./core/hooks.cjs');
19
- exports.createDefaultHooks = _mod_5yvopr.createDefaultHooks;
20
- exports.mergeHooks = _mod_5yvopr.mergeHooks;;
21
- const _mod_fcvk6n = require('./proxy/manager.cjs');
22
- exports.ProxyManager = _mod_fcvk6n.ProxyManager;;
23
- const _mod_cugc0r = require('./queue/index.cjs');
24
- exports.RezoQueue = _mod_cugc0r.RezoQueue;
25
- exports.HttpQueue = _mod_cugc0r.HttpQueue;
26
- exports.Priority = _mod_cugc0r.Priority;
27
- exports.HttpMethodPriority = _mod_cugc0r.HttpMethodPriority;;
1
+ const _mod_h7oxdh = require('./core/rezo.cjs');
2
+ exports.Rezo = _mod_h7oxdh.Rezo;
3
+ exports.createRezoInstance = _mod_h7oxdh.createRezoInstance;
4
+ exports.createDefaultInstance = _mod_h7oxdh.createDefaultInstance;;
5
+ const _mod_r6tz9j = require('./errors/rezo-error.cjs');
6
+ exports.RezoError = _mod_r6tz9j.RezoError;
7
+ exports.RezoErrorCode = _mod_r6tz9j.RezoErrorCode;;
8
+ const _mod_wprbf8 = require('./utils/headers.cjs');
9
+ exports.RezoHeaders = _mod_wprbf8.RezoHeaders;;
10
+ const _mod_s0j7wy = require('./utils/form-data.cjs');
11
+ exports.RezoFormData = _mod_s0j7wy.RezoFormData;;
12
+ const _mod_mf8w5u = require('./utils/cookies.cjs');
13
+ exports.RezoCookieJar = _mod_mf8w5u.RezoCookieJar;
14
+ exports.Cookie = _mod_mf8w5u.Cookie;;
15
+ const _mod_9wmgqw = require('./utils/curl.cjs');
16
+ exports.toCurl = _mod_9wmgqw.toCurl;
17
+ exports.fromCurl = _mod_9wmgqw.fromCurl;;
18
+ const _mod_86df0t = require('./core/hooks.cjs');
19
+ exports.createDefaultHooks = _mod_86df0t.createDefaultHooks;
20
+ exports.mergeHooks = _mod_86df0t.mergeHooks;;
21
+ const _mod_8pl3gs = require('./proxy/manager.cjs');
22
+ exports.ProxyManager = _mod_8pl3gs.ProxyManager;;
23
+ const _mod_v5wvao = require('./queue/index.cjs');
24
+ exports.RezoQueue = _mod_v5wvao.RezoQueue;
25
+ exports.HttpQueue = _mod_v5wvao.HttpQueue;
26
+ exports.Priority = _mod_v5wvao.Priority;
27
+ exports.HttpMethodPriority = _mod_v5wvao.HttpMethodPriority;;
28
28
  const { RezoError } = require('./errors/rezo-error.cjs');
29
29
  const isRezoError = exports.isRezoError = RezoError.isRezoError;
30
30
  const Cancel = exports.Cancel = RezoError;
@@ -34,9 +34,9 @@ const isCancel = exports.isCancel = (error) => {
34
34
  };
35
35
  const all = exports.all = Promise.all.bind(Promise);
36
36
  const spread = exports.spread = (callback) => (array) => callback(...array);
37
- const _mod_7ix2oo = require('./version.cjs');
38
- exports.VERSION = _mod_7ix2oo.VERSION;
39
- exports.PACKAGE_NAME = _mod_7ix2oo.PACKAGE_NAME;;
37
+ const _mod_xyvzcu = require('./version.cjs');
38
+ exports.VERSION = _mod_xyvzcu.VERSION;
39
+ exports.PACKAGE_NAME = _mod_xyvzcu.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
@@ -4886,7 +4886,7 @@ export declare class HttpQueue extends RezoQueue<any> {
4886
4886
  *
4887
4887
  * IMPORTANT: Update these values when bumping package version.
4888
4888
  */
4889
- export declare const VERSION = "1.0.77";
4889
+ export declare const VERSION = "1.0.79";
4890
4890
  export declare const PACKAGE_NAME = "rezo";
4891
4891
  export declare const isRezoError: typeof RezoError.isRezoError;
4892
4892
  export declare const Cancel: typeof RezoError;
@@ -1,14 +1,14 @@
1
- const _mod_vl5xp9 = require('./base.cjs');
2
- exports.Agent = _mod_vl5xp9.Agent;;
3
- const _mod_888dt6 = require('./http-proxy.cjs');
4
- exports.HttpProxyAgent = _mod_888dt6.HttpProxyAgent;;
5
- const _mod_0s5ut8 = require('./https-proxy.cjs');
6
- exports.HttpsProxyAgent = _mod_0s5ut8.HttpsProxyAgent;;
7
- const _mod_syvwkb = require('./socks-proxy.cjs');
8
- exports.SocksProxyAgent = _mod_syvwkb.SocksProxyAgent;;
9
- const _mod_0q362j = require('./socks-client.cjs');
10
- exports.SocksClient = _mod_0q362j.SocksClient;;
11
- const _mod_gq08rk = require('./bun-socks-http.cjs');
12
- exports.bunHttp = _mod_gq08rk.bunHttp;
13
- exports.isBunRuntime = _mod_gq08rk.isBunRuntime;
14
- exports.isBunSocksRequest = _mod_gq08rk.isBunSocksRequest;;
1
+ const _mod_iwjq91 = require('./base.cjs');
2
+ exports.Agent = _mod_iwjq91.Agent;;
3
+ const _mod_gad5gs = require('./http-proxy.cjs');
4
+ exports.HttpProxyAgent = _mod_gad5gs.HttpProxyAgent;;
5
+ const _mod_b30vo8 = require('./https-proxy.cjs');
6
+ exports.HttpsProxyAgent = _mod_b30vo8.HttpsProxyAgent;;
7
+ const _mod_oq4ybm = require('./socks-proxy.cjs');
8
+ exports.SocksProxyAgent = _mod_oq4ybm.SocksProxyAgent;;
9
+ const _mod_g447a0 = require('./socks-client.cjs');
10
+ exports.SocksClient = _mod_g447a0.SocksClient;;
11
+ const _mod_omexpy = require('./bun-socks-http.cjs');
12
+ exports.bunHttp = _mod_omexpy.bunHttp;
13
+ exports.isBunRuntime = _mod_omexpy.isBunRuntime;
14
+ exports.isBunSocksRequest = _mod_omexpy.isBunSocksRequest;;
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -4582,7 +4582,7 @@ export interface RezoInstance extends Rezo {
4582
4582
  *
4583
4583
  * IMPORTANT: Update these values when bumping package version.
4584
4584
  */
4585
- export declare const VERSION = "1.0.77";
4585
+ export declare const VERSION = "1.0.79";
4586
4586
  export declare const isRezoError: typeof RezoError.isRezoError;
4587
4587
  export declare const Cancel: typeof RezoError;
4588
4588
  export declare const CancelToken: {
@@ -1,9 +1,9 @@
1
1
  const { Agent, HttpProxyAgent, HttpsProxyAgent, SocksProxyAgent } = require('../internal/agents/index.cjs');
2
2
  const { parseProxyString } = require('./parse.cjs');
3
- const _mod_es42to = require('./manager.cjs');
4
- exports.ProxyManager = _mod_es42to.ProxyManager;;
5
- const _mod_egiu3j = require('./parse.cjs');
6
- exports.parseProxyString = _mod_egiu3j.parseProxyString;;
3
+ const _mod_7e9b5x = require('./manager.cjs');
4
+ exports.ProxyManager = _mod_7e9b5x.ProxyManager;;
5
+ const _mod_da4m0k = require('./parse.cjs');
6
+ exports.parseProxyString = _mod_da4m0k.parseProxyString;;
7
7
  function createOptions(uri, opts) {
8
8
  if (uri instanceof URL || typeof uri === "string") {
9
9
  return {
@@ -1,8 +1,8 @@
1
- const _mod_982q2m = require('./queue.cjs');
2
- exports.RezoQueue = _mod_982q2m.RezoQueue;;
3
- const _mod_nbnghv = require('./http-queue.cjs');
4
- exports.HttpQueue = _mod_nbnghv.HttpQueue;
5
- exports.extractDomain = _mod_nbnghv.extractDomain;;
6
- const _mod_gy4d54 = require('./types.cjs');
7
- exports.Priority = _mod_gy4d54.Priority;
8
- exports.HttpMethodPriority = _mod_gy4d54.HttpMethodPriority;;
1
+ const _mod_zil95k = require('./queue.cjs');
2
+ exports.RezoQueue = _mod_zil95k.RezoQueue;;
3
+ const _mod_2xgk98 = require('./http-queue.cjs');
4
+ exports.HttpQueue = _mod_2xgk98.HttpQueue;
5
+ exports.extractDomain = _mod_2xgk98.extractDomain;;
6
+ const _mod_v2fumc = require('./types.cjs');
7
+ exports.Priority = _mod_v2fumc.Priority;
8
+ exports.HttpMethodPriority = _mod_v2fumc.HttpMethodPriority;;
@@ -1,11 +1,11 @@
1
- const _mod_ebx0f7 = require('./event-emitter.cjs');
2
- exports.UniversalEventEmitter = _mod_ebx0f7.UniversalEventEmitter;;
3
- const _mod_9ctp8o = require('./stream.cjs');
4
- exports.UniversalStreamResponse = _mod_9ctp8o.UniversalStreamResponse;
5
- exports.StreamResponse = _mod_9ctp8o.StreamResponse;;
6
- const _mod_edmpcs = require('./download.cjs');
7
- exports.UniversalDownloadResponse = _mod_edmpcs.UniversalDownloadResponse;
8
- exports.DownloadResponse = _mod_edmpcs.DownloadResponse;;
9
- const _mod_meacrz = require('./upload.cjs');
10
- exports.UniversalUploadResponse = _mod_meacrz.UniversalUploadResponse;
11
- exports.UploadResponse = _mod_meacrz.UploadResponse;;
1
+ const _mod_wn0a0f = require('./event-emitter.cjs');
2
+ exports.UniversalEventEmitter = _mod_wn0a0f.UniversalEventEmitter;;
3
+ const _mod_pl4u5t = require('./stream.cjs');
4
+ exports.UniversalStreamResponse = _mod_pl4u5t.UniversalStreamResponse;
5
+ exports.StreamResponse = _mod_pl4u5t.StreamResponse;;
6
+ const _mod_ee4xu8 = require('./download.cjs');
7
+ exports.UniversalDownloadResponse = _mod_ee4xu8.UniversalDownloadResponse;
8
+ exports.DownloadResponse = _mod_ee4xu8.DownloadResponse;;
9
+ const _mod_8vugw2 = require('./upload.cjs');
10
+ exports.UniversalUploadResponse = _mod_8vugw2.UniversalUploadResponse;
11
+ exports.UploadResponse = _mod_8vugw2.UploadResponse;;
package/dist/version.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const VERSION = exports.VERSION = "1.0.77";
1
+ const VERSION = exports.VERSION = "1.0.79";
2
2
  const PACKAGE_NAME = exports.PACKAGE_NAME = "rezo";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = "1.0.77";
1
+ export const VERSION = "1.0.79";
2
2
  export const PACKAGE_NAME = "rezo";
@@ -1,52 +1,52 @@
1
- const _mod_2ywfel = require('./types.cjs');
2
- exports.WgetError = _mod_2ywfel.WgetError;;
3
- const _mod_c0trhg = require('./asset-extractor.cjs');
4
- exports.AssetExtractor = _mod_c0trhg.AssetExtractor;;
5
- const _mod_gwrc5v = require('./url-filter.cjs');
6
- exports.UrlFilter = _mod_gwrc5v.UrlFilter;;
7
- const _mod_0vtg4c = require('./file-writer.cjs');
8
- exports.FileWriter = _mod_0vtg4c.FileWriter;;
9
- const _mod_ogodcn = require('./robots.cjs');
10
- exports.RobotsHandler = _mod_ogodcn.RobotsHandler;;
11
- const _mod_z2md6p = require('./resume.cjs');
12
- exports.ResumeHandler = _mod_z2md6p.ResumeHandler;;
13
- const _mod_z0gqsu = require('./progress.cjs');
14
- exports.ProgressReporter = _mod_z0gqsu.ProgressReporter;
15
- exports.ProgressTracker = _mod_z0gqsu.ProgressTracker;
16
- exports.parseSize = _mod_z0gqsu.parseSize;;
17
- const _mod_47n6vp = require('./link-converter.cjs');
18
- exports.LinkConverter = _mod_47n6vp.LinkConverter;;
19
- const _mod_xg400m = require('./downloader.cjs');
20
- exports.Downloader = _mod_xg400m.Downloader;;
21
- const _mod_gxrug3 = require('./asset-organizer.cjs');
22
- exports.AssetOrganizer = _mod_gxrug3.AssetOrganizer;
23
- exports.DEFAULT_ASSET_FOLDERS = _mod_gxrug3.DEFAULT_ASSET_FOLDERS;;
24
- const _mod_p3i8r6 = require('./download-cache.cjs');
25
- exports.DownloadCache = _mod_p3i8r6.DownloadCache;;
26
- const _mod_ufb6gl = require('./filter-lists.cjs');
27
- exports.EXECUTABLE_EXTENSIONS = _mod_ufb6gl.EXECUTABLE_EXTENSIONS;
28
- exports.ARCHIVE_EXTENSIONS = _mod_ufb6gl.ARCHIVE_EXTENSIONS;
29
- exports.DOCUMENT_EXTENSIONS = _mod_ufb6gl.DOCUMENT_EXTENSIONS;
30
- exports.IMAGE_EXTENSIONS = _mod_ufb6gl.IMAGE_EXTENSIONS;
31
- exports.VIDEO_EXTENSIONS = _mod_ufb6gl.VIDEO_EXTENSIONS;
32
- exports.AUDIO_EXTENSIONS = _mod_ufb6gl.AUDIO_EXTENSIONS;
33
- exports.FONT_EXTENSIONS = _mod_ufb6gl.FONT_EXTENSIONS;
34
- exports.WEB_ASSET_EXTENSIONS = _mod_ufb6gl.WEB_ASSET_EXTENSIONS;
35
- exports.DATA_EXTENSIONS = _mod_ufb6gl.DATA_EXTENSIONS;
36
- exports.EXECUTABLE_MIME_TYPES = _mod_ufb6gl.EXECUTABLE_MIME_TYPES;
37
- exports.ARCHIVE_MIME_TYPES = _mod_ufb6gl.ARCHIVE_MIME_TYPES;
38
- exports.DOCUMENT_MIME_TYPES = _mod_ufb6gl.DOCUMENT_MIME_TYPES;
39
- exports.IMAGE_MIME_TYPES = _mod_ufb6gl.IMAGE_MIME_TYPES;
40
- exports.VIDEO_MIME_TYPES = _mod_ufb6gl.VIDEO_MIME_TYPES;
41
- exports.AUDIO_MIME_TYPES = _mod_ufb6gl.AUDIO_MIME_TYPES;
42
- exports.FONT_MIME_TYPES = _mod_ufb6gl.FONT_MIME_TYPES;
43
- exports.WEB_ASSET_MIME_TYPES = _mod_ufb6gl.WEB_ASSET_MIME_TYPES;
44
- exports.DATA_MIME_TYPES = _mod_ufb6gl.DATA_MIME_TYPES;
45
- exports.SAFE_WEB_PRESET = _mod_ufb6gl.SAFE_WEB_PRESET;
46
- exports.DOCUMENTS_ONLY_PRESET = _mod_ufb6gl.DOCUMENTS_ONLY_PRESET;
47
- exports.NO_MEDIA_PRESET = _mod_ufb6gl.NO_MEDIA_PRESET;
48
- exports.MINIMAL_MIRROR_PRESET = _mod_ufb6gl.MINIMAL_MIRROR_PRESET;
49
- exports.TEXT_ONLY_PRESET = _mod_ufb6gl.TEXT_ONLY_PRESET;;
1
+ const _mod_c70gag = require('./types.cjs');
2
+ exports.WgetError = _mod_c70gag.WgetError;;
3
+ const _mod_u745vg = require('./asset-extractor.cjs');
4
+ exports.AssetExtractor = _mod_u745vg.AssetExtractor;;
5
+ const _mod_dq3vc5 = require('./url-filter.cjs');
6
+ exports.UrlFilter = _mod_dq3vc5.UrlFilter;;
7
+ const _mod_hzmiuu = require('./file-writer.cjs');
8
+ exports.FileWriter = _mod_hzmiuu.FileWriter;;
9
+ const _mod_p7r1dr = require('./robots.cjs');
10
+ exports.RobotsHandler = _mod_p7r1dr.RobotsHandler;;
11
+ const _mod_s3zjej = require('./resume.cjs');
12
+ exports.ResumeHandler = _mod_s3zjej.ResumeHandler;;
13
+ const _mod_l1mbnz = require('./progress.cjs');
14
+ exports.ProgressReporter = _mod_l1mbnz.ProgressReporter;
15
+ exports.ProgressTracker = _mod_l1mbnz.ProgressTracker;
16
+ exports.parseSize = _mod_l1mbnz.parseSize;;
17
+ const _mod_lhrk6i = require('./link-converter.cjs');
18
+ exports.LinkConverter = _mod_lhrk6i.LinkConverter;;
19
+ const _mod_61ksqg = require('./downloader.cjs');
20
+ exports.Downloader = _mod_61ksqg.Downloader;;
21
+ const _mod_61prva = require('./asset-organizer.cjs');
22
+ exports.AssetOrganizer = _mod_61prva.AssetOrganizer;
23
+ exports.DEFAULT_ASSET_FOLDERS = _mod_61prva.DEFAULT_ASSET_FOLDERS;;
24
+ const _mod_cygxso = require('./download-cache.cjs');
25
+ exports.DownloadCache = _mod_cygxso.DownloadCache;;
26
+ const _mod_tqh5r0 = require('./filter-lists.cjs');
27
+ exports.EXECUTABLE_EXTENSIONS = _mod_tqh5r0.EXECUTABLE_EXTENSIONS;
28
+ exports.ARCHIVE_EXTENSIONS = _mod_tqh5r0.ARCHIVE_EXTENSIONS;
29
+ exports.DOCUMENT_EXTENSIONS = _mod_tqh5r0.DOCUMENT_EXTENSIONS;
30
+ exports.IMAGE_EXTENSIONS = _mod_tqh5r0.IMAGE_EXTENSIONS;
31
+ exports.VIDEO_EXTENSIONS = _mod_tqh5r0.VIDEO_EXTENSIONS;
32
+ exports.AUDIO_EXTENSIONS = _mod_tqh5r0.AUDIO_EXTENSIONS;
33
+ exports.FONT_EXTENSIONS = _mod_tqh5r0.FONT_EXTENSIONS;
34
+ exports.WEB_ASSET_EXTENSIONS = _mod_tqh5r0.WEB_ASSET_EXTENSIONS;
35
+ exports.DATA_EXTENSIONS = _mod_tqh5r0.DATA_EXTENSIONS;
36
+ exports.EXECUTABLE_MIME_TYPES = _mod_tqh5r0.EXECUTABLE_MIME_TYPES;
37
+ exports.ARCHIVE_MIME_TYPES = _mod_tqh5r0.ARCHIVE_MIME_TYPES;
38
+ exports.DOCUMENT_MIME_TYPES = _mod_tqh5r0.DOCUMENT_MIME_TYPES;
39
+ exports.IMAGE_MIME_TYPES = _mod_tqh5r0.IMAGE_MIME_TYPES;
40
+ exports.VIDEO_MIME_TYPES = _mod_tqh5r0.VIDEO_MIME_TYPES;
41
+ exports.AUDIO_MIME_TYPES = _mod_tqh5r0.AUDIO_MIME_TYPES;
42
+ exports.FONT_MIME_TYPES = _mod_tqh5r0.FONT_MIME_TYPES;
43
+ exports.WEB_ASSET_MIME_TYPES = _mod_tqh5r0.WEB_ASSET_MIME_TYPES;
44
+ exports.DATA_MIME_TYPES = _mod_tqh5r0.DATA_MIME_TYPES;
45
+ exports.SAFE_WEB_PRESET = _mod_tqh5r0.SAFE_WEB_PRESET;
46
+ exports.DOCUMENTS_ONLY_PRESET = _mod_tqh5r0.DOCUMENTS_ONLY_PRESET;
47
+ exports.NO_MEDIA_PRESET = _mod_tqh5r0.NO_MEDIA_PRESET;
48
+ exports.MINIMAL_MIRROR_PRESET = _mod_tqh5r0.MINIMAL_MIRROR_PRESET;
49
+ exports.TEXT_ONLY_PRESET = _mod_tqh5r0.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.77",
3
+ "version": "1.0.79",
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",