rezo 1.0.77 → 1.0.78

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.78";
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.78";
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.78";
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.78";
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.78";
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.78";
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_qvllzl = require('./picker.cjs');
2
+ exports.detectRuntime = _mod_qvllzl.detectRuntime;
3
+ exports.getAdapterCapabilities = _mod_qvllzl.getAdapterCapabilities;
4
+ exports.buildAdapterContext = _mod_qvllzl.buildAdapterContext;
5
+ exports.getAvailableAdapters = _mod_qvllzl.getAvailableAdapters;
6
+ exports.selectAdapter = _mod_qvllzl.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_g8wjr4 = require('./lru-cache.cjs');
2
+ exports.LRUCache = _mod_g8wjr4.LRUCache;;
3
+ const _mod_m9iqi3 = require('./dns-cache.cjs');
4
+ exports.DNSCache = _mod_m9iqi3.DNSCache;
5
+ exports.getGlobalDNSCache = _mod_m9iqi3.getGlobalDNSCache;
6
+ exports.resetGlobalDNSCache = _mod_m9iqi3.resetGlobalDNSCache;;
7
+ const _mod_2mwone = require('./response-cache.cjs');
8
+ exports.ResponseCache = _mod_2mwone.ResponseCache;
9
+ exports.normalizeResponseCacheConfig = _mod_2mwone.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_yqtvmc = require('./crawler.cjs');
2
+ exports.Crawler = _mod_yqtvmc.Crawler;;
3
+ const _mod_iokp0e = require('./crawler-options.cjs');
4
+ exports.CrawlerOptions = _mod_iokp0e.CrawlerOptions;;
5
+ const _mod_eu2nlx = require('./plugin/robots-txt.cjs');
6
+ exports.RobotsTxt = _mod_eu2nlx.RobotsTxt;;
7
+ const _mod_pdez3o = require('./plugin/file-cacher.cjs');
8
+ exports.FileCacher = _mod_pdez3o.FileCacher;;
9
+ const _mod_q7ukwr = require('./plugin/url-store.cjs');
10
+ exports.UrlStore = _mod_q7ukwr.UrlStore;;
11
+ const _mod_bzuoem = require('./plugin/navigation-history.cjs');
12
+ exports.NavigationHistory = _mod_bzuoem.NavigationHistory;;
13
+ const _mod_ayoad0 = require('./addon/oxylabs/index.cjs');
14
+ exports.Oxylabs = _mod_ayoad0.Oxylabs;;
15
+ const _mod_6bfl5x = require('./addon/oxylabs/options.cjs');
16
+ exports.OXYLABS_BROWSER_TYPES = _mod_6bfl5x.OXYLABS_BROWSER_TYPES;
17
+ exports.OXYLABS_COMMON_LOCALES = _mod_6bfl5x.OXYLABS_COMMON_LOCALES;
18
+ exports.OXYLABS_COMMON_GEO_LOCATIONS = _mod_6bfl5x.OXYLABS_COMMON_GEO_LOCATIONS;
19
+ exports.OXYLABS_US_STATES = _mod_6bfl5x.OXYLABS_US_STATES;
20
+ exports.OXYLABS_EUROPEAN_COUNTRIES = _mod_6bfl5x.OXYLABS_EUROPEAN_COUNTRIES;
21
+ exports.OXYLABS_ASIAN_COUNTRIES = _mod_6bfl5x.OXYLABS_ASIAN_COUNTRIES;
22
+ exports.getRandomOxylabsBrowserType = _mod_6bfl5x.getRandomBrowserType;
23
+ exports.getRandomOxylabsLocale = _mod_6bfl5x.getRandomLocale;
24
+ exports.getRandomOxylabsGeoLocation = _mod_6bfl5x.getRandomGeoLocation;;
25
+ const _mod_2z2x6m = require('./scraper.cjs');
26
+ exports.isRestrictedDomain = _mod_2z2x6m.isRestrictedDomain;;
27
+ const _mod_1mya5t = require('./addon/decodo/index.cjs');
28
+ exports.Decodo = _mod_1mya5t.Decodo;;
29
+ const _mod_ila1ru = require('./addon/decodo/options.cjs');
30
+ exports.DECODO_DEVICE_TYPES = _mod_ila1ru.DECODO_DEVICE_TYPES;
31
+ exports.DECODO_HEADLESS_MODES = _mod_ila1ru.DECODO_HEADLESS_MODES;
32
+ exports.DECODO_COMMON_LOCALES = _mod_ila1ru.DECODO_COMMON_LOCALES;
33
+ exports.DECODO_COMMON_COUNTRIES = _mod_ila1ru.DECODO_COMMON_COUNTRIES;
34
+ exports.DECODO_EUROPEAN_COUNTRIES = _mod_ila1ru.DECODO_EUROPEAN_COUNTRIES;
35
+ exports.DECODO_ASIAN_COUNTRIES = _mod_ila1ru.DECODO_ASIAN_COUNTRIES;
36
+ exports.DECODO_US_STATES = _mod_ila1ru.DECODO_US_STATES;
37
+ exports.DECODO_COMMON_CITIES = _mod_ila1ru.DECODO_COMMON_CITIES;
38
+ exports.getRandomDecodoDeviceType = _mod_ila1ru.getRandomDeviceType;
39
+ exports.getRandomDecodoLocale = _mod_ila1ru.getRandomLocale;
40
+ exports.getRandomDecodoCountry = _mod_ila1ru.getRandomCountry;
41
+ exports.getRandomDecodoCity = _mod_ila1ru.getRandomCity;
42
+ exports.generateDecodoSessionId = _mod_ila1ru.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 d=require("./capped-map.cjs");exports.CappedMap=d.CappedMap;var i=require("./capped-array.cjs");exports.CappedArray=i.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_qcl1xk = require('../crawler/crawler.cjs');
2
+ exports.Crawler = _mod_qcl1xk.Crawler;;
3
+ const _mod_m4i5gz = require('../crawler/crawler-options.cjs');
4
+ exports.CrawlerOptions = _mod_m4i5gz.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_vfaphs = require('./core/rezo.cjs');
2
+ exports.Rezo = _mod_vfaphs.Rezo;
3
+ exports.createRezoInstance = _mod_vfaphs.createRezoInstance;
4
+ exports.createDefaultInstance = _mod_vfaphs.createDefaultInstance;;
5
+ const _mod_of2frn = require('./errors/rezo-error.cjs');
6
+ exports.RezoError = _mod_of2frn.RezoError;
7
+ exports.RezoErrorCode = _mod_of2frn.RezoErrorCode;;
8
+ const _mod_340nsi = require('./utils/headers.cjs');
9
+ exports.RezoHeaders = _mod_340nsi.RezoHeaders;;
10
+ const _mod_h8tc2h = require('./utils/form-data.cjs');
11
+ exports.RezoFormData = _mod_h8tc2h.RezoFormData;;
12
+ const _mod_nogecb = require('./utils/cookies.cjs');
13
+ exports.RezoCookieJar = _mod_nogecb.RezoCookieJar;
14
+ exports.Cookie = _mod_nogecb.Cookie;;
15
+ const _mod_dem7ed = require('./utils/curl.cjs');
16
+ exports.toCurl = _mod_dem7ed.toCurl;
17
+ exports.fromCurl = _mod_dem7ed.fromCurl;;
18
+ const _mod_ajli2g = require('./core/hooks.cjs');
19
+ exports.createDefaultHooks = _mod_ajli2g.createDefaultHooks;
20
+ exports.mergeHooks = _mod_ajli2g.mergeHooks;;
21
+ const _mod_n46ifj = require('./proxy/manager.cjs');
22
+ exports.ProxyManager = _mod_n46ifj.ProxyManager;;
23
+ const _mod_c88szv = require('./queue/index.cjs');
24
+ exports.RezoQueue = _mod_c88szv.RezoQueue;
25
+ exports.HttpQueue = _mod_c88szv.HttpQueue;
26
+ exports.Priority = _mod_c88szv.Priority;
27
+ exports.HttpMethodPriority = _mod_c88szv.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_rw2too = require('./version.cjs');
38
+ exports.VERSION = _mod_rw2too.VERSION;
39
+ exports.PACKAGE_NAME = _mod_rw2too.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.78";
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_w3wpi5 = require('./base.cjs');
2
+ exports.Agent = _mod_w3wpi5.Agent;;
3
+ const _mod_tkhiqu = require('./http-proxy.cjs');
4
+ exports.HttpProxyAgent = _mod_tkhiqu.HttpProxyAgent;;
5
+ const _mod_9x6z7a = require('./https-proxy.cjs');
6
+ exports.HttpsProxyAgent = _mod_9x6z7a.HttpsProxyAgent;;
7
+ const _mod_qt4do7 = require('./socks-proxy.cjs');
8
+ exports.SocksProxyAgent = _mod_qt4do7.SocksProxyAgent;;
9
+ const _mod_k5s6py = require('./socks-client.cjs');
10
+ exports.SocksClient = _mod_k5s6py.SocksClient;;
11
+ const _mod_6uihcw = require('./bun-socks-http.cjs');
12
+ exports.bunHttp = _mod_6uihcw.bunHttp;
13
+ exports.isBunRuntime = _mod_6uihcw.isBunRuntime;
14
+ exports.isBunSocksRequest = _mod_6uihcw.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.78";
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.78";
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.78";
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.78";
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.78";
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.78";
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_vkqfol = require('./manager.cjs');
4
+ exports.ProxyManager = _mod_vkqfol.ProxyManager;;
5
+ const _mod_9fbcpj = require('./parse.cjs');
6
+ exports.parseProxyString = _mod_9fbcpj.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_fq49yc = require('./queue.cjs');
2
+ exports.RezoQueue = _mod_fq49yc.RezoQueue;;
3
+ const _mod_l43il2 = require('./http-queue.cjs');
4
+ exports.HttpQueue = _mod_l43il2.HttpQueue;
5
+ exports.extractDomain = _mod_l43il2.extractDomain;;
6
+ const _mod_brf3na = require('./types.cjs');
7
+ exports.Priority = _mod_brf3na.Priority;
8
+ exports.HttpMethodPriority = _mod_brf3na.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_jimq7c = require('./event-emitter.cjs');
2
+ exports.UniversalEventEmitter = _mod_jimq7c.UniversalEventEmitter;;
3
+ const _mod_m88wcs = require('./stream.cjs');
4
+ exports.UniversalStreamResponse = _mod_m88wcs.UniversalStreamResponse;
5
+ exports.StreamResponse = _mod_m88wcs.StreamResponse;;
6
+ const _mod_u873ev = require('./download.cjs');
7
+ exports.UniversalDownloadResponse = _mod_u873ev.UniversalDownloadResponse;
8
+ exports.DownloadResponse = _mod_u873ev.DownloadResponse;;
9
+ const _mod_x1pelx = require('./upload.cjs');
10
+ exports.UniversalUploadResponse = _mod_x1pelx.UniversalUploadResponse;
11
+ exports.UploadResponse = _mod_x1pelx.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.78";
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.78";
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_zyus1m = require('./types.cjs');
2
+ exports.WgetError = _mod_zyus1m.WgetError;;
3
+ const _mod_wv8msk = require('./asset-extractor.cjs');
4
+ exports.AssetExtractor = _mod_wv8msk.AssetExtractor;;
5
+ const _mod_bphj0k = require('./url-filter.cjs');
6
+ exports.UrlFilter = _mod_bphj0k.UrlFilter;;
7
+ const _mod_ht925z = require('./file-writer.cjs');
8
+ exports.FileWriter = _mod_ht925z.FileWriter;;
9
+ const _mod_ldwidd = require('./robots.cjs');
10
+ exports.RobotsHandler = _mod_ldwidd.RobotsHandler;;
11
+ const _mod_8v1w99 = require('./resume.cjs');
12
+ exports.ResumeHandler = _mod_8v1w99.ResumeHandler;;
13
+ const _mod_pzzxi6 = require('./progress.cjs');
14
+ exports.ProgressReporter = _mod_pzzxi6.ProgressReporter;
15
+ exports.ProgressTracker = _mod_pzzxi6.ProgressTracker;
16
+ exports.parseSize = _mod_pzzxi6.parseSize;;
17
+ const _mod_xb50un = require('./link-converter.cjs');
18
+ exports.LinkConverter = _mod_xb50un.LinkConverter;;
19
+ const _mod_wqutce = require('./downloader.cjs');
20
+ exports.Downloader = _mod_wqutce.Downloader;;
21
+ const _mod_7xd59t = require('./asset-organizer.cjs');
22
+ exports.AssetOrganizer = _mod_7xd59t.AssetOrganizer;
23
+ exports.DEFAULT_ASSET_FOLDERS = _mod_7xd59t.DEFAULT_ASSET_FOLDERS;;
24
+ const _mod_obq3yt = require('./download-cache.cjs');
25
+ exports.DownloadCache = _mod_obq3yt.DownloadCache;;
26
+ const _mod_svuqx6 = require('./filter-lists.cjs');
27
+ exports.EXECUTABLE_EXTENSIONS = _mod_svuqx6.EXECUTABLE_EXTENSIONS;
28
+ exports.ARCHIVE_EXTENSIONS = _mod_svuqx6.ARCHIVE_EXTENSIONS;
29
+ exports.DOCUMENT_EXTENSIONS = _mod_svuqx6.DOCUMENT_EXTENSIONS;
30
+ exports.IMAGE_EXTENSIONS = _mod_svuqx6.IMAGE_EXTENSIONS;
31
+ exports.VIDEO_EXTENSIONS = _mod_svuqx6.VIDEO_EXTENSIONS;
32
+ exports.AUDIO_EXTENSIONS = _mod_svuqx6.AUDIO_EXTENSIONS;
33
+ exports.FONT_EXTENSIONS = _mod_svuqx6.FONT_EXTENSIONS;
34
+ exports.WEB_ASSET_EXTENSIONS = _mod_svuqx6.WEB_ASSET_EXTENSIONS;
35
+ exports.DATA_EXTENSIONS = _mod_svuqx6.DATA_EXTENSIONS;
36
+ exports.EXECUTABLE_MIME_TYPES = _mod_svuqx6.EXECUTABLE_MIME_TYPES;
37
+ exports.ARCHIVE_MIME_TYPES = _mod_svuqx6.ARCHIVE_MIME_TYPES;
38
+ exports.DOCUMENT_MIME_TYPES = _mod_svuqx6.DOCUMENT_MIME_TYPES;
39
+ exports.IMAGE_MIME_TYPES = _mod_svuqx6.IMAGE_MIME_TYPES;
40
+ exports.VIDEO_MIME_TYPES = _mod_svuqx6.VIDEO_MIME_TYPES;
41
+ exports.AUDIO_MIME_TYPES = _mod_svuqx6.AUDIO_MIME_TYPES;
42
+ exports.FONT_MIME_TYPES = _mod_svuqx6.FONT_MIME_TYPES;
43
+ exports.WEB_ASSET_MIME_TYPES = _mod_svuqx6.WEB_ASSET_MIME_TYPES;
44
+ exports.DATA_MIME_TYPES = _mod_svuqx6.DATA_MIME_TYPES;
45
+ exports.SAFE_WEB_PRESET = _mod_svuqx6.SAFE_WEB_PRESET;
46
+ exports.DOCUMENTS_ONLY_PRESET = _mod_svuqx6.DOCUMENTS_ONLY_PRESET;
47
+ exports.NO_MEDIA_PRESET = _mod_svuqx6.NO_MEDIA_PRESET;
48
+ exports.MINIMAL_MIRROR_PRESET = _mod_svuqx6.MINIMAL_MIRROR_PRESET;
49
+ exports.TEXT_ONLY_PRESET = _mod_svuqx6.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.78",
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",