yq-dns 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var xe=Object.create;var H=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Ae=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var ke=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),Ne=(a,e)=>{for(var r in e)H(a,r,{get:e[r],enumerable:!0})},ne=(a,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ce(e))!Te.call(a,n)&&n!==r&&H(a,n,{get:()=>e[n],enumerable:!(t=Pe(e,n))||t.enumerable});return a};var oe=(a,e,r)=>(r=a!=null?xe(Ae(a)):{},ne(e||!a||!a.__esModule?H(r,"default",{value:a,enumerable:!0}):r,a)),Se=a=>ne(H({},"__esModule",{value:!0}),a);var ae=ke((rr,Z)=>{"use strict";var Ie=Object.prototype.hasOwnProperty,f="~";function L(){}Object.create&&(L.prototype=Object.create(null),new L().__proto__||(f=!1));function Ee(a,e,r){this.fn=a,this.context=e,this.once=r||!1}function ie(a,e,r,t,n){if(typeof r!="function")throw new TypeError("The listener must be a function");var o=new Ee(r,t||a,n),s=f?f+e:e;return a._events[s]?a._events[s].fn?a._events[s]=[a._events[s],o]:a._events[s].push(o):(a._events[s]=o,a._eventsCount++),a}function W(a,e){--a._eventsCount===0?a._events=new L:delete a._events[e]}function y(){this._events=new L,this._eventsCount=0}y.prototype.eventNames=function(){var e=[],r,t;if(this._eventsCount===0)return e;for(t in r=this._events)Ie.call(r,t)&&e.push(f?t.slice(1):t);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};y.prototype.listeners=function(e){var r=f?f+e:e,t=this._events[r];if(!t)return[];if(t.fn)return[t.fn];for(var n=0,o=t.length,s=new Array(o);n<o;n++)s[n]=t[n].fn;return s};y.prototype.listenerCount=function(e){var r=f?f+e:e,t=this._events[r];return t?t.fn?1:t.length:0};y.prototype.emit=function(e,r,t,n,o,s){var i=f?f+e:e;if(!this._events[i])return!1;var c=this._events[i],u=arguments.length,m,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,t),!0;case 4:return c.fn.call(c.context,r,t,n),!0;case 5:return c.fn.call(c.context,r,t,n,o),!0;case 6:return c.fn.call(c.context,r,t,n,o,s),!0}for(l=1,m=new Array(u-1);l<u;l++)m[l-1]=arguments[l];c.fn.apply(c.context,m)}else{var d=c.length,p;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),u){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,r);break;case 3:c[l].fn.call(c[l].context,r,t);break;case 4:c[l].fn.call(c[l].context,r,t,n);break;default:if(!m)for(p=1,m=new Array(u-1);p<u;p++)m[p-1]=arguments[p];c[l].fn.apply(c[l].context,m)}}return!0};y.prototype.on=function(e,r,t){return ie(this,e,r,t,!1)};y.prototype.once=function(e,r,t){return ie(this,e,r,t,!0)};y.prototype.removeListener=function(e,r,t,n){var o=f?f+e:e;if(!this._events[o])return this;if(!r)return W(this,o),this;var s=this._events[o];if(s.fn)s.fn===r&&(!n||s.once)&&(!t||s.context===t)&&W(this,o);else{for(var i=0,c=[],u=s.length;i<u;i++)(s[i].fn!==r||n&&!s[i].once||t&&s[i].context!==t)&&c.push(s[i]);c.length?this._events[o]=c.length===1?c[0]:c:W(this,o)}return this};y.prototype.removeAllListeners=function(e){var r;return e?(r=f?f+e:e,this._events[r]&&W(this,r)):(this._events=new L,this._eventsCount=0),this};y.prototype.off=y.prototype.removeListener;y.prototype.addListener=y.prototype.on;y.prefixed=f;y.EventEmitter=y;typeof Z<"u"&&(Z.exports=y)});var Ke={};Ne(Ke,{EmailValidator:()=>S,InvalidHostnameError:()=>k,InvalidProviderError:()=>C,NoEnabledProvidersError:()=>T,ProviderNotEnabledError:()=>N,YqDns:()=>x,default:()=>Je,resetDefaultResolver:()=>Oe,resolve:()=>Ze,resolve4:()=>Me,resolve6:()=>_e,resolveAny:()=>je,resolveCaa:()=>He,resolveCname:()=>We,resolveMx:()=>Ve,resolveNaptr:()=>Ue,resolveNs:()=>$e,resolvePtr:()=>Be,resolveSoa:()=>Ye,resolveSrv:()=>Xe,resolveTlsa:()=>Fe,resolveTxt:()=>Qe,reverse:()=>Ge,setDefaultResolver:()=>De});module.exports=Se(Ke);var h=oe(require("node:dns/promises"),1);var J=oe(ae(),1);var z=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},K=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},ce=a=>globalThis.DOMException===void 0?new K(a):new DOMException(a),le=a=>{let e=a.reason===void 0?ce("This operation was aborted."):a.reason;return e instanceof Error?e:ce(e)};function ee(a,e){let{milliseconds:r,fallback:t,message:n,customTimers:o={setTimeout,clearTimeout}}=e,s,i,u=new Promise((m,l)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(e.signal){let{signal:p}=e;p.aborted&&l(le(p)),i=()=>{l(le(p))},p.addEventListener("abort",i,{once:!0})}if(r===Number.POSITIVE_INFINITY){a.then(m,l);return}let d=new z;s=o.setTimeout.call(void 0,()=>{if(t){try{m(t())}catch(p){l(p)}return}typeof a.cancel=="function"&&a.cancel(),n===!1?m():n instanceof Error?l(n):(d.message=n??`Promise timed out after ${r} milliseconds`,l(d))},r),(async()=>{try{m(await a)}catch(p){l(p)}})()}).finally(()=>{u.clear(),i&&e.signal&&e.signal.removeEventListener("abort",i)});return u.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},u}function re(a,e,r){let t=0,n=a.length;for(;n>0;){let o=Math.trunc(n/2),s=t+o;r(a[s],e)<=0?(t=++s,n-=o+1):n=o}return t}var O=class{#e=[];enqueue(e,r){r={priority:0,...r};let t={priority:r.priority,id:r.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=r.priority){this.#e.push(t);return}let n=re(this.#e,t,(o,s)=>s.priority-o.priority);this.#e.splice(n,0,t)}setPriority(e,r){let t=this.#e.findIndex(o=>o.id===e);if(t===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[n]=this.#e.splice(t,1);this.enqueue(n.run,{priority:r,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return this.#e.length}};var R=class extends J.default{#e;#i;#o=0;#p;#a;#h=0;#t;#c;#r;#g;#s=0;#l;#n;#v;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:O,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#i=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#p=e.intervalCap,this.#a=e.interval,this.#r=new e.queueClass,this.#g=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#v=e.throwOnTimeout===!0,this.#n=e.autoStart===!1}get#w(){return this.#i||this.#o<this.#p}get#R(){return this.#s<this.#l}#x(){this.#s--,this.#u(),this.emit("next")}#P(){this.#f(),this.#y(),this.#c=void 0}get#C(){let e=Date.now();if(this.#t===void 0){let r=this.#h-e;if(r<0)this.#o=this.#e?this.#s:0;else return this.#c===void 0&&(this.#c=setTimeout(()=>{this.#P()},r)),!0}return!1}#u(){if(this.#r.size===0)return this.#t&&clearInterval(this.#t),this.#t=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#n){let e=!this.#C;if(this.#w&&this.#R){let r=this.#r.dequeue();return r?(this.emit("active"),r(),e&&this.#y(),!0):!1}}return!1}#y(){this.#i||this.#t!==void 0||(this.#t=setInterval(()=>{this.#f()},this.#a),this.#h=Date.now()+this.#a)}#f(){this.#o===0&&this.#s===0&&this.#t&&(clearInterval(this.#t),this.#t=void 0),this.#o=this.#e?this.#s:0,this.#m()}#m(){for(;this.#u(););}get concurrency(){return this.#l}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#l=e,this.#m()}async#A(e){return new Promise((r,t)=>{e.addEventListener("abort",()=>{t(e.reason)},{once:!0})})}setPriority(e,r){this.#r.setPriority(e,r)}async add(e,r={}){return r.id??=(this.#b++).toString(),r={timeout:this.timeout,throwOnTimeout:this.#v,...r},new Promise((t,n)=>{this.#r.enqueue(async()=>{this.#s++,this.#o++;try{r.signal?.throwIfAborted();let o=e({signal:r.signal});r.timeout&&(o=ee(Promise.resolve(o),{milliseconds:r.timeout})),r.signal&&(o=Promise.race([o,this.#A(r.signal)]));let s=await o;t(s),this.emit("completed",s)}catch(o){if(o instanceof z&&!r.throwOnTimeout){t();return}n(o),this.emit("error",o)}finally{this.#x()}},r),this.emit("add"),this.#u()})}async addAll(e,r){return Promise.all(e.map(async t=>this.add(t,r)))}start(){return this.#n?(this.#n=!1,this.#m(),this):this}pause(){this.#n=!0}clear(){this.#r=new this.#g}async onEmpty(){this.#r.size!==0&&await this.#d("empty")}async onSizeLessThan(e){this.#r.size<e||await this.#d("next",()=>this.#r.size<e)}async onIdle(){this.#s===0&&this.#r.size===0||await this.#d("idle")}async#d(e,r){return new Promise(t=>{let n=()=>{r&&!r()||(this.off(e,n),t())};this.on(e,n)})}get size(){return this.#r.size}sizeBy(e){return this.#r.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#n}};var V=class{queue;config;constructor(e={}){this.config={enabled:e.enabled??!0,limit:e.limit&&e.limit.concurrency>0?e.limit:{concurrency:10,interval:1e3,intervalCap:750,carryoverConcurrencyCount:!0}};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval,r.intervalCap=this.config.limit.intervalCap,r.carryoverConcurrencyCount=typeof r.carryoverConcurrencyCount=="boolean"?r.carryoverConcurrencyCount:!0),this.queue=new R(r)}updateConfig(e){this.config={enabled:e.enabled??this.config.enabled,limit:e.limit??this.config.limit};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval,r.intervalCap=this.config.limit.intervalCap),this.queue=new R(r)}get enabled(){return this.config.enabled}get queueSize(){return this.queue.size}get isFull(){let e=this.queue.pending+this.queue.size,r=this.config.limit.concurrency;return e>=r}async resolve4(e,r){return r?this.queue.add(async()=>h.resolve4(e,r)):this.queue.add(async()=>h.resolve4(e))}async resolve6(e,r){return r?this.queue.add(async()=>h.resolve6(e,r)):this.queue.add(async()=>h.resolve6(e))}async resolveAny(e){return this.queue.add(async()=>h.resolveAny(e))}async resolveCaa(e){return this.queue.add(async()=>h.resolveCaa(e))}async resolveCname(e){return this.queue.add(async()=>h.resolveCname(e))}async resolveMx(e){return this.queue.add(async()=>h.resolveMx(e))}async resolveNaptr(e){return this.queue.add(async()=>h.resolveNaptr(e))}async resolveNs(e){return this.queue.add(async()=>h.resolveNs(e))}async resolvePtr(e){return this.queue.add(async()=>h.resolvePtr(e))}async resolveSoa(e){return this.queue.add(async()=>h.resolveSoa(e))}async resolveSrv(e){return this.queue.add(async()=>h.resolveSrv(e))}async resolveTlsa(e){return this.queue.add(async()=>h.resolveTlsa(e))}async resolveTxt(e){return this.queue.add(async()=>h.resolveTxt(e))}async reverse(e){return this.queue.add(async()=>h.reverse(e))}async resolve(e,r){return this.queue.add(async()=>h.resolve(e,r))}};var qe={FORMERR:"DNS server claims query was misformatted",SERVFAIL:"DNS server returned general failure",ENOTFOUND:"Domain name not found",NOTIMP:"DNS server does not implement requested operation",REFUSED:"DNS server refused query",YXDOMAIN:"Name exists when it should not",YXRRSET:"RR set exists when it should not",NXRRSET:"RR set that should exist does not",NOTAUTH:"Server not authoritative for zone",NOTZONE:"Name not contained in zone"},Le={1:"FORMERR",2:"SERVFAIL",3:"ENOTFOUND",4:"NOTIMP",5:"REFUSED",6:"YXDOMAIN",7:"YXRRSET",8:"NXRRSET",9:"NOTAUTH",10:"NOTZONE"};function U(a,e,r){let t=Le[e]||`DNSSTATUS_${e}`,n=`query${r}`,o=`${n} ${a} ${t}: ${qe[t]||"Unrecognized DNS error code"}`,s=new Error(o);return s.code=t,s.errno=e,s.syscall=n,s.hostname=a,s}var P=class{queue;config;dohRequest=null;constructor(e={},r){e.limit=e&&e.limit&&e.limit.concurrency>0?e.limit:r,this.config={enabled:e.enabled??!0,limit:e.limit??{concurrency:5}};let t={concurrency:this.config.limit?.concurrency||10};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(t.interval=this.config.limit.interval||1e3,t.intervalCap=this.config.limit.intervalCap||100),this.queue=new R(t)}updateConfig(e){this.config={enabled:e.enabled??this.config.enabled,limit:e.limit&&e.limit.concurrency>0?e.limit:this.config.limit};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval||1e3,r.intervalCap=this.config.limit.intervalCap||5),this.queue=new R(r)}get enabled(){return this.config.enabled}get queueSize(){return this.queue.size}get isFull(){let e=this.queue.pending+this.queue.size,r=this.config.limit.concurrency;return e>=r}parseDoHResponse(e,r,t=!1){if(!e.Answer||e.Answer.length===0)return[];let n=i=>i.endsWith(".")?i.substring(0,i.length-1):i,o=i=>{let c=l=>typeof l=="object"&&l!==null&&!Array.isArray(l),u=l=>typeof l=="string"&&/^".*"$/.test(l)?l.slice(1,-1):l,m=l=>{let d={};for(let[p,g]of Object.entries(l))g!==void 0&&(d[p]=u(g));return d};return Array.isArray(i)&&i.every(c)?i.map(m):c(i)?m(i):i},s=e.Answer.filter(i=>{let c={A:1,AAAA:28,ANY:255,CAA:257,CNAME:5,MX:15,NAPTR:35,NS:2,PTR:12,SOA:6,SRV:33,TLSA:52,TXT:16};return i.type===c[r]||r==="ANY"});switch(r){case"A":case"AAAA":case"CNAME":case"NS":case"PTR":return t?s.map(i=>({address:i.data,ttl:i.TTL})):s.map(i=>i.data);case"MX":return o(s.map(i=>{let[c,u]=i.data.split(" "),m={exchange:n(u||""),priority:parseInt(c||"0",10)};return t?{...m,ttl:i.TTL}:m}));case"SRV":return o(s.map(i=>{let[c,u,m,l]=i.data.split(" "),d={priority:parseInt(c||"0",10),weight:parseInt(u||"0",10),port:parseInt(m||"0",10),name:l||""};return t?{...d,ttl:i.TTL}:d}));case"SOA":if(s.length>0){let[i,c,u,m,l,d,p]=s[0].data.split(" "),g={nsname:i,hostmaster:c,serial:parseInt(u,10),refresh:parseInt(m,10),retry:parseInt(l,10),expire:parseInt(d,10),minttl:parseInt(p,10)};return o(t?{...g,ttl:s[0].TTL}:g)}throw new Error("No SOA record found");case"TXT":return o(s.map(i=>i.data.split('" "').map(c=>c.replace(/^"|"$/g,""))));case"CAA":return o(s.map(i=>{let[c,u,m]=i.data.split(" "),l={critical:parseInt(c,10),issue:u==="issue"?m:void 0,issuewild:u==="issuewild"?m:void 0,iodef:u==="iodef"?m:void 0};return t?{...l,ttl:i.TTL}:l}));case"NAPTR":return o(s.map(i=>{let[c,u,m,l,d,p]=i.data.split(" "),g={order:parseInt(c||"0",10),preference:parseInt(u||"0",10),flags:m||"",service:l||"",regexp:d||"",replacement:p||""};return t?{...g,ttl:i.TTL}:g}));case"TLSA":return o(s.map(i=>{let[c,u,m]=i.data.split(" "),l={certUsage:parseInt(c||"0",10),selector:parseInt(u||"0",10),match:parseInt(m||"0",10),data:new ArrayBuffer(0)};return t?{...l,ttl:i.TTL}:l}));case"ANY":return o(s.map(i=>({type:i.type,data:i.data,ttl:i.TTL})));default:return s.map(i=>i.data)}}async resolve4(e,r){return this.queue.add(async()=>{let t=await this.dohRequest(e,"A");return this.parseDoHResponse(t,"A",r?.ttl)})}async resolve6(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"AAAA");return this.parseDoHResponse(n,"AAAA",r?.ttl)})||[]}async resolveAny(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"ANY");return this.parseDoHResponse(t,"ANY")})||[]}async resolveCaa(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"CAA");return this.parseDoHResponse(t,"CAA")})||[]}async resolveCname(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"CNAME");return this.parseDoHResponse(t,"CNAME")})||[]}async resolveMx(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"MX");return this.parseDoHResponse(t,"MX")})||[]}async resolveNaptr(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"NAPTR");return this.parseDoHResponse(t,"NAPTR")})||[]}async resolveNs(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"NS");return this.parseDoHResponse(t,"NS")})||[]}async resolvePtr(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"PTR");return this.parseDoHResponse(t,"PTR")})||[]}async resolveSoa(e){return this.queue.add(async()=>{let r=await this.dohRequest(e,"SOA");return this.parseDoHResponse(r,"SOA")})}async resolveSrv(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"SRV");return this.parseDoHResponse(t,"SRV")})||[]}async resolveTlsa(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"TLSA");return this.parseDoHResponse(n,"TLSA",r?.ttl)})||[]}async resolveTxt(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"TXT");return this.parseDoHResponse(n,"TXT",r?.ttl)})||[]}async reverse(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"PTR");return this.parseDoHResponse(n,"PTR",r?.ttl)})||[]}async resolve(e,r="A",t){return await this.queue.add(async()=>{let o=await this.dohRequest(e,r);return this.parseDoHResponse(o,r,t?.ttl)})||(r==="SOA"?{}:[])}};var $=class extends P{baseUrl="https://dns.google/resolve";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:500,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}async request(e,r){let t=new URL(this.baseUrl);t.searchParams.set("name",e),t.searchParams.set("type",r);let n=await fetch(t.toString(),{headers:{Accept:"application/dns-json"}});if(!n.ok)throw new Error(`Google DoH request failed: ${n.status} ${n.statusText}`);let o=await n.json();if(o.Status!==0)throw U(e,o.Status,r);return o}};var B=class extends P{baseUrl="https://cloudflare-dns.com/dns-query";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:650,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}async request(e,r){let t=new URL(this.baseUrl);t.searchParams.set("name",e),t.searchParams.set("type",r);let n=await fetch(t.toString(),{headers:{Accept:"application/dns-json"}});if(!n.ok)throw new Error(`Cloudflare DoH request failed: ${n.status} ${n.statusText}`);let o=await n.json();if(o.Status!==0)throw U(e,o.Status,r);return o}};var ze={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,NAPTR:35,CAA:257,TLSA:52,ANY:255},Y=class extends P{baseUrl="https://dns.quad9.net/dns-query";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:500,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}encodeDNSQuery(e,r){let t=ze[r.toUpperCase()];if(!t)throw new Error(`Unsupported DNS type: ${r}`);let n=e.split("."),o=Buffer.concat([...n.map(u=>{let m=Buffer.alloc(u.length+1);return m.writeUInt8(u.length,0),m.write(u,1),m}),Buffer.from([0])]),s=Buffer.alloc(12);s.writeUInt16BE(Math.floor(Math.random()*65535),0),s.writeUInt16BE(256,2),s.writeUInt16BE(1,4);let i=Buffer.alloc(2);i.writeUInt16BE(t,0);let c=Buffer.alloc(2);return c.writeUInt16BE(1,0),Buffer.concat([s,o,i,c])}readName(e,r){let t=[],n=!1,o=0;for(;;){let s=e[r];if((s&192)===192){let i=e.readUInt16BE(r)&16383;n||(o=r+2),r=i,n=!0}else if(s===0){r++;break}else t.push(e.toString("utf8",r+1,r+1+s)),r+=s+1}return[t.join("."),n?o:r]}decodeRData(e,r,t,n){switch(t){case 1:return[Array.from(e.slice(r,r+4)).join("."),r+4];case 28:{let o=[];for(let s=0;s<8;s++)o.push(e.readUInt16BE(r+s*2).toString(16));return[o.join(":"),r+16]}case 2:case 5:case 12:{let[o,s]=this.readName(e,r);return[o,s]}case 15:{let o=e.readUInt16BE(r),[s,i]=this.readName(e,r+2);return[`${o} ${s}`,i]}case 16:{let o=e.readUInt8(r);return[e.toString("utf8",r+1,r+1+o),r+1+o]}case 6:{let[o,s]=this.readName(e,r),[i,c]=this.readName(e,s),u=e.readUInt32BE(c),m=e.readUInt32BE(c+4),l=e.readUInt32BE(c+8),d=e.readUInt32BE(c+12),p=e.readUInt32BE(c+16);return[`${o} ${i} ${u} ${m} ${l} ${d} ${p}`,c+20]}default:return[e.slice(r,r+n).toString("hex"),r+n]}}async request(e,r){let t=this.encodeDNSQuery(e,r),n=await fetch(this.baseUrl,{method:"POST",headers:{"Content-Type":"application/dns-message",Accept:"application/dns-message"},body:t}),o=Buffer.from(await n.arrayBuffer()),s=o.readUInt16BE(2),i=o.readUInt16BE(4),c=o.readUInt16BE(6),u=o.readUInt16BE(8),m=o.readUInt16BE(10),l=(s&256)>0,d=(s&512)>0,p=(s&128)>0,g=(s&32)>0,v=(s&16)>0,A=s&15,w=12,te=[];for(let M=0;M<i;M++){let[_,q]=this.readName(o,w),G=o.readUInt16BE(q);te.push({name:_,type:G}),w=q+4}let Q=M=>{let _=[];for(let q=0;q<M;q++){let[G,j]=this.readName(o,w),se=o.readUInt16BE(j),fe=o.readUInt32BE(j+4),be=o.readUInt16BE(j+8),[we,Re]=this.decodeRData(o,j+10,se,be);_.push({name:G,type:se,TTL:fe,data:we}),w=Re}return _},ge=Q(c),ve=Q(u),ye=Q(m);return{Status:A,TC:d,RD:l,RA:p,AD:g,CD:v,Question:te,Answer:ge,Authority:ve,Additional:ye}}};var T=class extends Error{constructor(){super("No DNS providers are enabled"),this.name="NoEnabledProvidersError"}},k=class extends Error{constructor(e){super(`Invalid hostname: ${e}`),this.name="InvalidHostnameError"}},N=class extends Error{constructor(e){super(`Provider '${e}' is not enabled`),this.name="ProviderNotEnabledError"}},C=class extends Error{constructor(e){super(`Invalid provider: ${e}`),this.name="InvalidProviderError"}};var ue=[".aaa",".aarp",".abarth",".abb",".abbott",".abbvie",".abc",".able",".abogado",".abudhabi",".ac",".academy",".accenture",".accountant",".accountants",".aco",".active",".actor",".ad",".adac",".ads",".adult",".ae",".aeg",".aero",".aetna",".af",".afamilycompany",".afl",".africa",".ag",".agakhan",".agency",".ai",".aig",".aigo",".airbus",".airforce",".airtel",".akdn",".al",".alfaromeo",".alibaba",".alipay",".allfinanz",".allstate",".ally",".alsace",".alstom",".am",".amazon",".americanexpress",".americanfamily",".amex",".amfam",".amica",".amsterdam",".an",".analytics",".android",".anquan",".anz",".ao",".aol",".apartments",".app",".apple",".aq",".aquarelle",".ar",".arab",".aramco",".archi",".army",".arpa",".art",".arte",".as",".asda",".asia",".associates",".at",".athleta",".attorney",".au",".auction",".audi",".audible",".audio",".auspost",".author",".auto",".autos",".avianca",".aw",".aws",".ax",".axa",".az",".azure",".ba",".baby",".baidu",".banamex",".bananarepublic",".band",".bank",".bar",".barcelona",".barclaycard",".barclays",".barefoot",".bargains",".baseball",".basketball",".bauhaus",".bayern",".bb",".bbc",".bbt",".bbva",".bcg",".bcn",".bd",".be",".beats",".beauty",".beer",".bentley",".berlin",".best",".bestbuy",".bet",".bf",".bg",".bh",".bharti",".bi",".bible",".bid",".bike",".bing",".bingo",".bio",".biz",".bj",".bl",".black",".blackfriday",".blanco",".blockbuster",".blog",".bloomberg",".blue",".bm",".bms",".bmw",".bn",".bnl",".bnpparibas",".bo",".boats",".boehringer",".bofa",".bom",".bond",".boo",".book",".booking",".boots",".bosch",".bostik",".boston",".bot",".boutique",".box",".bq",".br",".bradesco",".bridgestone",".broadway",".broker",".brother",".brussels",".bs",".bt",".budapest",".bugatti",".build",".builders",".business",".buy",".buzz",".bv",".bw",".by",".bz",".bzh",".ca",".cab",".cafe",".cal",".call",".calvinklein",".cam",".camera",".camp",".cancerresearch",".canon",".capetown",".capital",".capitalone",".car",".caravan",".cards",".care",".career",".careers",".cars",".cartier",".casa",".case",".caseih",".cash",".casino",".cat",".catering",".catholic",".cba",".cbn",".cbre",".cbs",".cc",".cd",".ceb",".center",".ceo",".cern",".cf",".cfa",".cfd",".cg",".ch",".chanel",".channel",".charity",".chase",".chat",".cheap",".chintai",".chloe",".christmas",".chrome",".chrysler",".church",".ci",".cipriani",".circle",".cisco",".citadel",".citi",".citic",".city",".cityeats",".ck",".cl",".claims",".cleaning",".click",".clinic",".clinique",".clothing",".cloud",".club",".clubmed",".cm",".cn",".co",".coach",".codes",".coffee",".college",".cologne",".com",".comcast",".commbank",".community",".company",".compare",".computer",".comsec",".condos",".construction",".consulting",".contact",".contractors",".cooking",".cookingchannel",".cool",".coop",".corsica",".country",".coupon",".coupons",".courses",".cpa",".cr",".credit",".creditcard",".creditunion",".cricket",".crown",".crs",".cruise",".cruises",".csc",".cu",".cuisinella",".cv",".cw",".cx",".cy",".cymru",".cyou",".cz",".dabur",".dad",".dance",".data",".date",".dating",".datsun",".day",".dclk",".dds",".de",".deal",".dealer",".deals",".degree",".delivery",".dell",".deloitte",".delta",".democrat",".dental",".dentist",".desi",".design",".dev",".dhl",".diamonds",".diet",".digital",".direct",".directory",".discount",".discover",".dish",".diy",".dj",".dk",".dm",".dnp",".do",".docs",".doctor",".dodge",".dog",".doha",".domains",".doosan",".dot",".download",".drive",".dtv",".dubai",".duck",".dunlop",".duns",".dupont",".durban",".dvag",".dvr",".dz",".earth",".eat",".ec",".eco",".edeka",".edu",".education",".ee",".eg",".eh",".email",".emerck",".energy",".engineer",".engineering",".enterprises",".epost",".epson",".equipment",".er",".ericsson",".erni",".es",".esq",".estate",".esurance",".et",".etisalat",".eu",".eurovision",".eus",".events",".everbank",".exchange",".expert",".exposed",".express",".extraspace",".fage",".fail",".fairwinds",".faith",".family",".fan",".fans",".farm",".farmers",".fashion",".fast",".fedex",".feedback",".ferrari",".ferrero",".fi",".fiat",".fidelity",".fido",".film",".final",".finance",".financial",".fire",".firestone",".firmdale",".fish",".fishing",".fit",".fitness",".fj",".fk",".flickr",".flights",".flir",".florist",".flowers",".flsmidth",".fly",".fm",".fo",".foo",".food",".foodnetwork",".football",".ford",".forex",".forsale",".forum",".foundation",".fox",".fr",".free",".fresenius",".frl",".frogans",".frontdoor",".frontier",".ftr",".fujitsu",".fujixerox",".fun",".fund",".furniture",".futbol",".fyi",".ga",".gal",".gallery",".gallo",".gallup",".game",".games",".gap",".garden",".gay",".gb",".gbiz",".gd",".gdn",".ge",".gea",".gent",".genting",".george",".gf",".gg",".ggee",".gh",".gi",".gift",".gifts",".gives",".giving",".gl",".glade",".glass",".gle",".global",".globo",".gm",".gmail",".gmbh",".gmo",".gmx",".gn",".godaddy",".gold",".goldpoint",".golf",".goo",".goodhands",".goodyear",".goog",".google",".gop",".got",".gov",".gp",".gq",".gr",".grainger",".graphics",".gratis",".green",".gripe",".grocery",".group",".gs",".gt",".gu",".guardian",".gucci",".guge",".guide",".guitars",".guru",".gw",".gy",".hair",".hamburg",".hangout",".haus",".hbo",".hdfc",".hdfcbank",".health",".healthcare",".help",".helsinki",".here",".hermes",".hgtv",".hiphop",".hisamitsu",".hitachi",".hiv",".hk",".hkt",".hm",".hn",".hockey",".holdings",".holiday",".homedepot",".homegoods",".homes",".homesense",".honda",".honeywell",".horse",".hospital",".host",".hosting",".hot",".hoteles",".hotels",".hotmail",".house",".how",".hr",".hsbc",".ht",".htc",".hu",".hughes",".hyatt",".hyundai",".ibm",".icbc",".ice",".icu",".id",".ie",".ieee",".ifm",".iinet",".ikano",".il",".im",".imamat",".imdb",".immo",".immobilien",".in",".inc",".industries",".infiniti",".info",".ing",".ink",".institute",".insurance",".insure",".int",".intel",".international",".intuit",".investments",".io",".ipiranga",".iq",".ir",".irish",".is",".iselect",".ismaili",".ist",".istanbul",".it",".itau",".itv",".iveco",".iwc",".jaguar",".java",".jcb",".jcp",".je",".jeep",".jetzt",".jewelry",".jio",".jlc",".jll",".jm",".jmp",".jnj",".jo",".jobs",".joburg",".jot",".joy",".jp",".jpmorgan",".jprs",".juegos",".juniper",".kaufen",".kddi",".ke",".kerryhotels",".kerrylogistics",".kerryproperties",".kfh",".kg",".kh",".ki",".kia",".kids",".kim",".kinder",".kindle",".kitchen",".kiwi",".km",".kn",".koeln",".komatsu",".kosher",".kp",".kpmg",".kpn",".kr",".krd",".kred",".kuokgroup",".kw",".ky",".kyoto",".kz",".la",".lacaixa",".ladbrokes",".lamborghini",".lamer",".lancaster",".lancia",".lancome",".land",".landrover",".lanxess",".lasalle",".lat",".latino",".latrobe",".law",".lawyer",".lb",".lc",".lds",".lease",".leclerc",".lefrak",".legal",".lego",".lexus",".lgbt",".li",".liaison",".lidl",".life",".lifeinsurance",".lifestyle",".lighting",".like",".lilly",".limited",".limo",".lincoln",".linde",".link",".lipsy",".live",".living",".lixil",".lk",".llc",".llp",".loan",".loans",".locker",".locus",".loft",".lol",".london",".lotte",".lotto",".love",".lpl",".lplfinancial",".lr",".ls",".lt",".ltd",".ltda",".lu",".lundbeck",".lupin",".luxe",".luxury",".lv",".ly",".ma",".macys",".madrid",".maif",".maison",".makeup",".man",".management",".mango",".map",".market",".marketing",".markets",".marriott",".marshalls",".maserati",".mattel",".mba",".mc",".mcd",".mcdonalds",".mckinsey",".md",".me",".med",".media",".meet",".melbourne",".meme",".memorial",".men",".menu",".meo",".merckmsd",".metlife",".mf",".mg",".mh",".miami",".microsoft",".mil",".mini",".mint",".mit",".mitsubishi",".mk",".ml",".mlb",".mls",".mm",".mma",".mn",".mo",".mobi",".mobile",".mobily",".moda",".moe",".moi",".mom",".monash",".money",".monster",".montblanc",".mopar",".mormon",".mortgage",".moscow",".moto",".motorcycles",".mov",".movie",".movistar",".mp",".mq",".mr",".ms",".msd",".mt",".mtn",".mtpc",".mtr",".mu",".museum",".music",".mutual",".mutuelle",".mv",".mw",".mx",".my",".mz",".na",".nab",".nadex",".nagoya",".name",".nationwide",".natura",".navy",".nba",".nc",".ne",".nec",".net",".netbank",".netflix",".network",".neustar",".new",".newholland",".news",".next",".nextdirect",".nexus",".nf",".nfl",".ng",".ngo",".nhk",".ni",".nico",".nike",".nikon",".ninja",".nissan",".nissay",".nl",".no",".nokia",".northwesternmutual",".norton",".now",".nowruz",".nowtv",".np",".nr",".nra",".nrw",".ntt",".nu",".nyc",".nz",".obi",".observer",".off",".office",".okinawa",".olayan",".olayangroup",".oldnavy",".ollo",".om",".omega",".one",".ong",".onl",".online",".onyourside",".ooo",".open",".oracle",".orange",".org",".organic",".orientexpress",".origins",".osaka",".otsuka",".ott",".ovh",".pa",".page",".pamperedchef",".panasonic",".panerai",".paris",".pars",".partners",".parts",".party",".passagens",".pay",".pccw",".pe",".pet",".pf",".pfizer",".pg",".ph",".pharmacy",".phd",".philips",".phone",".photo",".photography",".photos",".physio",".piaget",".pics",".pictet",".pictures",".pid",".pin",".ping",".pink",".pioneer",".pizza",".pk",".pl",".place",".play",".playstation",".plumbing",".plus",".pm",".pn",".pnc",".pohl",".poker",".politie",".porn",".post",".pr",".pramerica",".praxi",".press",".prime",".pro",".prod",".productions",".prof",".progressive",".promo",".properties",".property",".protection",".pru",".prudential",".ps",".pt",".pub",".pw",".pwc",".py",".qa",".qpon",".quebec",".quest",".qvc",".racing",".radio",".raid",".re",".read",".realestate",".realtor",".realty",".recipes",".red",".redstone",".redumbrella",".rehab",".reise",".reisen",".reit",".reliance",".ren",".rent",".rentals",".repair",".report",".republican",".rest",".restaurant",".review",".reviews",".rexroth",".rich",".richardli",".ricoh",".rightathome",".ril",".rio",".rip",".rmit",".ro",".rocher",".rocks",".rodeo",".rogers",".room",".rs",".rsvp",".ru",".rugby",".ruhr",".run",".rw",".rwe",".ryukyu",".sa",".saarland",".safe",".safety",".sakura",".sale",".salon",".samsclub",".samsung",".sandvik",".sandvikcoromant",".sanofi",".sap",".sapo",".sarl",".sas",".save",".saxo",".sb",".sbi",".sbs",".sc",".sca",".scb",".schaeffler",".schmidt",".scholarships",".school",".schule",".schwarz",".science",".scjohnson",".scor",".scot",".sd",".se",".search",".seat",".secure",".security",".seek",".select",".sener",".services",".ses",".seven",".sew",".sex",".sexy",".sfr",".sg",".sh",".shangrila",".sharp",".shaw",".shell",".shia",".shiksha",".shoes",".shop",".shopping",".shouji",".show",".showtime",".shriram",".si",".silk",".sina",".singles",".site",".sj",".sk",".ski",".skin",".sky",".skype",".sl",".sling",".sm",".smart",".smile",".sn",".sncf",".so",".soccer",".social",".softbank",".software",".sohu",".solar",".solutions",".song",".sony",".soy",".spa",".space",".spiegel",".sport",".spot",".spreadbetting",".sr",".srl",".srt",".ss",".st",".stada",".staples",".star",".starhub",".statebank",".statefarm",".statoil",".stc",".stcgroup",".stockholm",".storage",".store",".stream",".studio",".study",".style",".su",".sucks",".supplies",".supply",".support",".surf",".surgery",".suzuki",".sv",".swatch",".swiftcover",".swiss",".sx",".sy",".sydney",".symantec",".systems",".sz",".tab",".taipei",".talk",".taobao",".target",".tatamotors",".tatar",".tattoo",".tax",".taxi",".tc",".tci",".td",".tdk",".team",".tech",".technology",".tel",".telecity",".telefonica",".temasek",".tennis",".teva",".tf",".tg",".th",".thd",".theater",".theatre",".tiaa",".tickets",".tienda",".tiffany",".tips",".tires",".tirol",".tj",".tjmaxx",".tjx",".tk",".tkmaxx",".tl",".tm",".tmall",".tn",".to",".today",".tokyo",".tools",".top",".toray",".toshiba",".total",".tours",".town",".toyota",".toys",".tp",".tr",".trade",".trading",".training",".travel",".travelchannel",".travelers",".travelersinsurance",".trust",".trv",".tt",".tube",".tui",".tunes",".tushu",".tv",".tvs",".tw",".tz",".ua",".ubank",".ubs",".uconnect",".ug",".uk",".um",".unicom",".university",".uno",".uol",".ups",".us",".uy",".uz",".va",".vacations",".vana",".vanguard",".vc",".ve",".vegas",".ventures",".verisign",".versicherung",".vet",".vg",".vi",".viajes",".video",".vig",".viking",".villas",".vin",".vip",".virgin",".visa",".vision",".vista",".vistaprint",".viva",".vivo",".vlaanderen",".vn",".vodka",".volkswagen",".volvo",".vote",".voting",".voto",".voyage",".vu",".vuelos",".wales",".walmart",".walter",".wang",".wanggou",".warman",".watch",".watches",".weather",".weatherchannel",".webcam",".weber",".website",".wed",".wedding",".weibo",".weir",".wf",".whoswho",".wien",".wiki",".williamhill",".win",".windows",".wine",".winners",".wme",".wolterskluwer",".woodside",".work",".works",".world",".wow",".ws",".wtc",".wtf",".xbox",".xerox",".xfinity",".xihuan",".xin",".\u6D4B\u8BD5",".\u0915\u0949\u092E",".\u092A\u0930\u0940\u0915\u094D\u0937\u093E",".\u30BB\u30FC\u30EB",".\u4F5B\u5C71",".\u0CAD\u0CBE\u0CB0\u0CA4",".\u6148\u5584",".\u96C6\u56E2",".\u5728\u7EBF",".\uD55C\uAD6D",".\u0B2D\u0B3E\u0B30\u0B24",".\u5927\u4F17\u6C7D\u8F66",".\u70B9\u770B",".\u0E04\u0E2D\u0E21",".\u09AD\u09BE\u09F0\u09A4",".\u09AD\u09BE\u09B0\u09A4",".\u516B\u5366","\u200F.\u05D9\u05E9\u05E8\u05D0\u05DC\u200E","\u200F.\u0645\u0648\u0642\u0639\u200E",".\u09AC\u09BE\u0982\u09B2\u09BE",".\u516C\u76CA",".\u516C\u53F8",".\u9999\u683C\u91CC\u62C9",".\u7F51\u7AD9",".\u79FB\u52A8",".\u6211\u7231\u4F60",".\u043C\u043E\u0441\u043A\u0432\u0430",".\u0438\u0441\u043F\u044B\u0442\u0430\u043D\u0438\u0435",".\u049B\u0430\u0437",".\u043A\u0430\u0442\u043E\u043B\u0438\u043A",".\u043E\u043D\u043B\u0430\u0439\u043D",".\u0441\u0430\u0439\u0442",".\u8054\u901A",".\u0441\u0440\u0431",".\u0431\u0433",".\u0431\u0435\u043B","\u200F.\u05E7\u05D5\u05DD\u200E",".\u65F6\u5C1A",".\u5FAE\u535A",".\uD14C\uC2A4\uD2B8",".\u6DE1\u9A6C\u9521",".\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3",".\u043E\u0440\u0433",".\u0928\u0947\u091F",".\u30B9\u30C8\u30A2",".\u30A2\u30DE\u30BE\u30F3",".\uC0BC\uC131",".\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD",".\u5546\u6807",".\u5546\u5E97",".\u5546\u57CE",".\u0434\u0435\u0442\u0438",".\u043C\u043A\u0434","\u200F.\u05D8\u05E2\u05E1\u05D8\u200E",".\u0435\u044E",".\u30DD\u30A4\u30F3\u30C8",".\u65B0\u95FB",".\u5DE5\u884C",".\u5BB6\u96FB","\u200F.\u0643\u0648\u0645\u200E",".\u4E2D\u6587\u7F51",".\u4E2D\u4FE1",".\u4E2D\u56FD",".\u4E2D\u570B",".\u5A31\u4E50",".\u8C37\u6B4C",".\u0C2D\u0C3E\u0C30\u0C24\u0C4D",".\u0DBD\u0D82\u0D9A\u0DCF",".\u96FB\u8A0A\u76C8\u79D1",".\u8D2D\u7269",".\u6E2C\u8A66",".\u30AF\u30E9\u30A6\u30C9",".\u0AAD\u0ABE\u0AB0\u0AA4",".\u901A\u8CA9",".\u092D\u093E\u0930\u0924\u092E\u094D",".\u092D\u093E\u0930\u0924",".\u092D\u093E\u0930\u094B\u0924","\u200F.\u0622\u0632\u0645\u0627\u06CC\u0634\u06CC\u200E",".\u0BAA\u0BB0\u0BBF\u0B9F\u0BCD\u0B9A\u0BC8",".\u7F51\u5E97",".\u0938\u0902\u0917\u0920\u0928",".\u9910\u5385",".\u7F51\u7EDC",".\u043A\u043E\u043C",".\u0443\u043A\u0440",".\u9999\u6E2F",".\u4E9A\u9A6C\u900A",".\u8BFA\u57FA\u4E9A",".\u98DF\u54C1",".\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE",".\u98DE\u5229\u6D66","\u200F.\u0625\u062E\u062A\u0628\u0627\u0631\u200E",".\u53F0\u6E7E",".\u53F0\u7063",".\u624B\u8868",".\u624B\u673A",".\u043C\u043E\u043D","\u200F.\u0627\u0644\u062C\u0632\u0627\u0626\u0631\u200E","\u200F.\u0639\u0645\u0627\u0646\u200E","\u200F.\u0627\u0631\u0627\u0645\u0643\u0648\u200E","\u200F.\u0627\u06CC\u0631\u0627\u0646\u200E","\u200F.\u0627\u0644\u0639\u0644\u064A\u0627\u0646\u200E","\u200F.\u0627\u062A\u0635\u0627\u0644\u0627\u062A\u200E","\u200F.\u0627\u0645\u0627\u0631\u0627\u062A\u200E","\u200F.\u0628\u0627\u0632\u0627\u0631\u200E","\u200F.\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627\u200E","\u200F.\u067E\u0627\u06A9\u0633\u062A\u0627\u0646\u200E","\u200F.\u0627\u0644\u0627\u0631\u062F\u0646\u200E","\u200F.\u0645\u0648\u0628\u0627\u064A\u0644\u064A\u200E","\u200F.\u0628\u0627\u0631\u062A\u200E","\u200F.\u0628\u06BE\u0627\u0631\u062A\u200E","\u200F.\u0627\u0644\u0645\u063A\u0631\u0628\u200E","\u200F.\u0627\u0628\u0648\u0638\u0628\u064A\u200E","\u200F.\u0627\u0644\u0628\u062D\u0631\u064A\u0646\u200E","\u200F.\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629\u200E","\u200F.\u0680\u0627\u0631\u062A\u200E","\u200F.\u0643\u0627\u062B\u0648\u0644\u064A\u0643\u200E","\u200F.\u0633\u0648\u062F\u0627\u0646\u200E","\u200F.\u0647\u0645\u0631\u0627\u0647\u200E","\u200F.\u0639\u0631\u0627\u0642\u200E","\u200F.\u0645\u0644\u064A\u0633\u064A\u0627\u200E",".\u6FB3\u9580",".\uB2F7\uCEF4",".\u653F\u5E9C","\u200F.\u0634\u0628\u0643\u0629\u200E","\u200F.\u0628\u064A\u062A\u0643\u200E","\u200F.\u0639\u0631\u0628\u200E",".\u10D2\u10D4",".\u673A\u6784",".\u7EC4\u7EC7\u673A\u6784",".\u5065\u5EB7",".\u0E44\u0E17\u0E22","\u200F.\u0633\u0648\u0631\u064A\u0629\u200E",".\u62DB\u8058",".\u0440\u0443\u0441",".\u0440\u0444",".\u73E0\u5B9D","\u200F.\u062A\u0648\u0646\u0633\u200E",".\u5927\u62FF",".\u0EA5\u0EB2\u0EA7",".\u307F\u3093\u306A",".\u30B0\u30FC\u30B0\u30EB",".\u03B5\u03C5",".\u03B5\u03BB",".\u4E16\u754C",".\u66F8\u7C4D",".\u0D2D\u0D3E\u0D30\u0D24\u0D02",".\u0A2D\u0A3E\u0A30\u0A24",".\u7F51\u5740",".\uB2F7\uB137",".\u30B3\u30E0",".\u5929\u4E3B\u6559",".\u6E38\u620F",".verm\xF6gensberater",".verm\xF6gensberatung",".\u4F01\u4E1A",".\u4FE1\u606F",".\u5609\u91CC\u5927\u9152\u5E97",".\u5609\u91CC","\u200F.\u0645\u0635\u0631\u200E","\u200F.\u0642\u0637\u0631\u200E",".\u5E7F\u4E1C",".\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8",".\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE",".\u0570\u0561\u0575",".\u65B0\u52A0\u5761","\u200F.\u0641\u0644\u0633\u0637\u064A\u0646\u200E",".\u30C6\u30B9\u30C8",".\u653F\u52A1",".xperia",".xxx",".xyz",".yachts",".yahoo",".yamaxun",".yandex",".ye",".yodobashi",".yoga",".yokohama",".you",".youtube",".yt",".yun",".za",".zappos",".zara",".zero",".zip",".zippo",".zm",".zone",".zuerich",".zw",".ac.vn",".ae.org",".biz.fj",".biz.pl",".biz.tr",".biz.tt",".biz.vn",".br.com",".cn.com",".co.ag",".co.at",".co.ci",".co.cm",".co.com",".co.cr",".co.de",".co.ee",".co.gg",".co.gy",".co.hu",".co.id",".co.il",".co.im",".co.in",".co.ir",".co.it",".co.je",".co.ke",".co.kr",".co.lc",".co.ls",".co.na",".co.ni",".co.nl",".co.no",".co.nu",".co.nz",".co.om",".co.rs",".co.th",".co.tt",".co.tz",".co.ug",".co.uk",".co.uz",".co.ve",".co.vi",".co.za",".com.ag",".com.ai",".com.ar",".com.au",".com.bb",".com.bd",".com.bm",".com.bo",".com.br",".com.bs",".com.bz",".com.cm",".com.cn",".com.co",".com.cu",".com.cy",".com.de",".com.do",".com.ec",".com.ee",".com.es",".com.fj",".com.gi",".com.gp",".com.gr",".com.gt",".com.gy",".com.hk",".com.hn",".com.hr",".com.ht",".com.kn",".com.lb",".com.lc",".com.lv",".com.mk",".com.mt",".com.mx",".com.my",".com.na",".com.ng",".com.ni",".com.om",".com.pa",".com.pe",".com.ph",".com.pk",".com.pl",".com.pr",".com.pt",".com.py",".com.ro",".com.ru",".com.sb",".com.se",".com.sg",".com.so",".com.sv",".com.tr",".com.tt",".com.tw",".com.ua",".com.uy",".com.uz",".com.vc",".com.ve",".com.vi",".com.vn",".de.com",".edu.vn",".eu.com",".firm.in",".gb.net",".gen.in",".gen.tr",".gr.com",".health.vn",".ind.in",".info.ec",".info.fj",".info.pl",".info.tt",".info.vn",".int.vn",".jpn.com",".ltd.uk",".me.uk",".msk.ru",".name.fj",".name.tr",".name.tt",".name.vn",".net.ag",".net.ai",".net.ar",".net.au",".net.bb",".net.bm",".net.bo",".net.br",".net.bz",".net.cm",".net.cn",".net.co",".net.fj",".net.gg",".net.gp",".net.gt",".net.gy",".net.hn",".net.in",".net.je",".net.lc",".net.lv",".net.my",".net.ni",".net.nz",".net.pl",".net.pr",".net.ru",".net.so",".net.tt",".net.vc",".net.vi",".net.vn",".nom.ag",".nom.es",".nom.ni",".off.ai",".or.at",".or.kr",".org.ag",".org.ai",".org.bb",".org.bm",".org.bo",".org.bz",".org.cn",".org.es",".org.fj",".org.gg",".org.gt",".org.hn",".org.il",".org.in",".org.je",".org.lc",".org.ls",".org.lv",".org.na",".org.ni",".org.nz",".org.pl",".org.pr",".org.ru",".org.so",".org.tt",".org.uk",".org.vc",".org.ve",".org.vi",".org.vn",".plc.uk",".pro.fj",".pro.tt",".pro.vn",".radio.am",".radio.fm",".ru.com",".sa.com",".se.net",".tv.br",".uk.com",".uk.net",".us.com",".us.org",".waw.pl",".web.id",".web.tr",".za.com"];var X=class{validDomainExtensions;constructor(){this.validDomainExtensions=ue}isDomainExtension(e){let r=e.substring(e.lastIndexOf("."));return this.isValidExtension(r)}domain(e){if(!this.isValidInput(e))return"";let r=this.extractAndCleanDomain(e);return this.parseMainDomain(r)}isValidInput(e){return e!=null&&e.length>=7}extractAndCleanDomain(e){let r;return e.startsWith("http://")||e.startsWith("https://")?r=new URL(e).hostname:e.startsWith("//")?r=new URL(`https:${e}`).hostname:r="~"+e,r.includes("~")&&(r=this.removeUrlFragments(r),r=r.replace("~","")),r}removeUrlFragments(e){return e.includes("@")?e.split("@")[1]:e.includes("/")?e.split("/")[0]:e.includes("?")?e.split("?")[0]:e.includes("#")?e.split("#")[0]:e}parseMainDomain(e){let r=e.split("."),t=r.length;if(t===2){let n=e.substring(e.lastIndexOf("."));return this.isValidExtension(n)?e:""}return t>=3?this.handleComplexDomain(r):""}handleComplexDomain(e){let r=this.getLastThreeParts(e),[,t,n]=r.split("."),o="."+t,s="."+n;return this.isValidExtension(o)&&this.isValidExtension(s)?r:this.isValidExtension(s)?t+"."+n:""}getLastThreeParts(e){return e.length===3?e.join("."):e.slice(-3).join(".")}isValidExtension(e){return this.validDomainExtensions.includes(e.toLowerCase().trim())}};var me=[{name:"Sohu",mx:"a.sohu.com"},{name:"Sohu",mx:"sohu.com"},{name:"Strato",mx:".rzone.de"},{name:"Strato",mx:".strato.de"},{name:"21cn",mx:".21cn.com"},{name:"163",mx:".netease.com"},{name:"Netvigator",mx:".netvigator.com"},{name:"139",mx:".mail.139.com"},{name:"Nate",mx:".nate.com"},{name:"Naver",mx:".naver.com"},{name:"Daum",mx:".daum.kgslb.com"},{name:"Daum",mx:".hanmail.net"},{name:"Ziggo",mx:".ziggo.nl"},{name:"QQ",mx:".qq.com"},{name:"263.net",mx:"263.net"},{name:"Sina",mx:".vip.sina.com"},{name:"Sina",mx:".sina.com.cn"},{name:"Aruba",mx:".aruba.it"},{name:"Aliyun",mx:".mxhichina.com"},{name:"Plala Webmail",mx:".plala.or.jp"},{name:"AOL",mx:"mx-aol.mail"},{name:"Turbify",mx:"mx-biz.mail.am0.yahoodns.net"},{name:"Turbify",mx:"mx-biz.mail.am.yahoodns.net"},{name:"Turbify",mx:"mx-biz.mail.am1.yahoodns.net"},{name:"Turbify",mx:"mx1.biz.mail.yahoo.com"},{name:"Turbify",mx:"mx5.biz.mail.yahoo.com"},{name:"Turbify",mx:".biz.mail.yahoo.com"},{name:"AT&T",mx:".prodigy.net"},{name:"Yahoo",mx:".yahoo."},{name:"Zoho",mx:".zoho.com"},{name:"Sitestar Webmail",mx:".sitestar.everyone.net",webmail:"https://webmail.sitestar.net"},{name:"Outlook Web App (OWA)",mx:".serverdata.net",webmail:"https://owa.serverdata.net"},{name:"1and1",mx:".1and1."},{name:"Outlook",mx:"olc.protection.outlook.com"},{name:"Outlook",mx:".mail.outlook.com"},{name:"Outlook",mx:".hotmail."},{name:"Office 365",mx:"mail.protection.outlook.com"},{name:"Office 365",mx:".outlook.com"},{name:"Office 365",mx:".office365.com"},{name:"Gmail",mx:".google.com"},{name:"Mail.ru",mx:".mail.ru"},{name:"Mail.com",mx:".mail.com"},{name:"Earthlink",mx:".earthlink.net"},{name:"Earthlink",mx:".oxsus-vadesecure.net"},{name:"Rackspace",mx:".emailsrvr.com"},{name:"Mimecast",mx:".mimecast.com"},{name:"Godaddy",mx:".secureserver.net"},{name:"Comcast",mx:".comcast.net"},{name:"Office 365",mx:".ppe-hosted.com"},{name:"Office 365",mx:".gslb.pphosted.com"},{name:"Office 365",mx:".arsmtp.com"},{name:"Zoho",mx:".zoho.com"},{name:"ProtonMail",mx:"mail.protonmail.ch"},{name:"Facebook",mx:".facebook.com"},{name:"163",mx:".netease.com"},{name:"163",mx:".163.com"},{name:"263",mx:".263.net"},{name:"Aliyun",mx:".alibaba.com"},{name:"Aliyun",mx:".aliyun.com"},{name:"Amazon",mx:".amazon.com"},{name:"Amazon",mx:".amazonaws.com"},{name:"Anazana",mx:".anazana.com"},{name:"CoreMail",mx:".icoremail.net"},{name:"GMX",mx:".gmx.net"},{name:"GMX",mx:".gmx.com"},{name:"Hinet",mx:".hinet."},{name:"iCloud",mx:".icloud.com"},{name:"Iinet",mx:".iinet.net.au"},{name:"Namecheap",mx:".registrar-servers.com"},{name:"Network Solutions",mx:".myregisteredsite.com"},{name:"Orange",mx:".orange."},{name:"QQ",mx:".qq.com"},{name:"Synaq",mx:".synaq."},{name:"Web.de",mx:".web.de"},{name:"Yandex",mx:".yandex."},{name:"Zmail",mx:".zmail."},{name:"Strato",mx:".strato.de"},{name:"Apple",mx:".apple.com"},{name:"Cox Webmail",mx:".cloudfilter.net"},{name:"Fastmail",mx:".messagingengine.com"},{name:"Mailgun",mx:".mailgun.org"},{name:"Postmark",mx:".pmta.postmarkapp.com"},{name:"SendGrid",mx:".sendgrid.net"},{name:"Elastic Email",mx:".elasticemail.com"},{name:"Zendesk",mx:".zendesk.com"},{name:"Intermedia",mx:".intermedia.net"},{name:"Mailjet",mx:".mailjet.com"},{name:"Front",mx:".frontapp.com"},{name:"Unknown",mx:".................."},{name:"Webmail",mx:".................."},{name:"Zimbra",mx:".................."},{name:"Others",mx:".................."},{name:"Aruba",mx:".................."},{name:"Alibaba",mx:".................."},{name:"IBM",mx:".................."},{name:"Digitalocean",mx:".................."},{name:"AWS Partner",mx:".................."},{name:"Microsoft Exchange",mx:".................."},{name:"Oracle Cloud",mx:".................."},{name:"Roundcube Webmail",mx:".................."},{name:"cPanel Webmail",mx:".................."},{name:"Yahoo (External Provider)",mx:".................."}],de=["automation","products","product","product.info","product-info","productinfo","alert","alerts","automated","rewards","clientpayments","invites","page-notification","page-notification-noreply","friendupdates","groupupdates","messages","advertise","advertise-noreply","advertise-no.reply","advertise-no-reply","advertise-no_reply","reminders","reminder","notification","paymentnotification","payment-notification","payment.notification","payment_notification","registration","registrations","signup","sign-up","signin","sign-in","email","e-mail","no_reply","whatsinstore","ship","nobody","no-body","publishers","whatsinstore","hosting-security","hosting","accountstatus","account-status","account_status","hosting-service","billing","hostingsecurity","robot","hosting-services","hostingservices","hostingservice","no.reply","paypal","no-reply","feedback","example","donotreply","noreply","do-not-reply","bot","do_not_reply","market.news","clientservices","list","client-services","client.services","abuse","accessibilty","accessibility","accounting","account","accounts.payable","adm","admin","admissions","ads","advertise","advisor","agency","agent","all","api","ask","attorneys","award","bills","bizdev","biz-dev","board","booking","bookings","buzz","callcenter","career","careers","ceo","cfa","chat","chief","comments","contact","contacts","copyright","corporate","courses","customer.services","customercare","customer-care","customerservice","customer-service","customerservicecenter","customer-service-center","custserv","data","design","development","director","directory","domains","editor","editorial","emails","engineering","enquiries","enquiry","event","events","everyone","feedback","finance","foundation","frontdesk","ftp","general","global","grouplegal","group-legal","groups","help","helpdesk","home","hotel","hr","human.resources","humanresources","human-resources","info","information","inquiries","inquiry","instructor","insurance","internet","interoperability","invest","investor","investorrelations","investor-relations","job","jobs","lawoffice","law-office","leasing","legal","library","listing","logistics","mail","mailbox","mailroom","main","manager","marketing","mayor","media","medicalqueries","medical-queries","meetings","members","membership","membersupport","member-support","merchant","misc","news","newsroom","noc","offers","office","online","operations","organiser","organizer","pastor","pharma","photos","politics","postmaster","pr","president","prime","privacy","projects","promos","publicaffairs","public-affairs","publisher","quality","query","questions","radio","realestate","real-estate","realtor","receptionist","redaction","register","remove","repairs","request","research","reservation","reservations","reserve","reserveroom","reserve-room","root","sale","sales","school","schools","secretary","security","service","shopping","spam","staff","subscribe","suggest","support","survey","talent","tourism","tours","trading","training","transfer","travel","travels","unsubscribe","usa","usenet","user","username","users","uucp","verify","volunteer","web","webinfo","webmaster","website","wwinfo","www","www-validator"],pe=["yahoo.com","ameritech.net","att.net","bellsouth.net","currently.com","flash.net","nvbell.net","pacbell.net","prodigy.net","sbcglobal.net","snet.net","swbell.net","wans.net","worldnet.att.net","ymail.com","y7mail.com","yahoo.at","yahoo.be","yahoo.bg","yahoo.ca","yahoo.cl","yahoo.co.hu","yahoo.co.id","yahoo.co.il","yahoo.co.in","yahoo.co.kr","yahoo.co.nz","yahoo.co.th","yahoo.co.uk","yahoo.co.za","yahoo.com.ar","yahoo.com.au","yahoo.com.br","yahoo.com.co","yahoo.com.hk","yahoo.com.hr","yahoo.com.mx","yahoo.com.my","yahoo.com.pe","yahoo.com.ph","yahoo.com.sg","yahoo.com.tr","yahoo.com.tw","yahoo.com.ua","yahoo.com.ve","yahoo.com.vn","yahoo.cz","yahoo.de","yahoo.dk","yahoo.ee","yahoo.es","yahoo.fi","yahoo.fr","yahoo.gr","yahoo.hr","yahoo.hu","yahoo.ie","yahoo.in","yahoo.it","yahoo.lt","yahoo.lv","yahoo.nl","yahoo.no","yahoo.pl","yahoo.pt","yahoo.ro","yahoo.rs","yahoo.se","yahoo.si","yahoo.sk","yahoogroups.co.kr","yahoogroups.com.cn","yahoogroups.com.sg","yahoogroups.com.tw","yahoogrupper.dk","yahoogruppi.it","yahooxtra.co.nz"],he=["fuck","shit","scam","hack","crack","spam","phishing","test","testing","fake","null","undefined"];async function F(a,e={}){let{params:r,timeout:t=3e4,maxRetries:n=3,retryDelay:o=1e3,maxRedirects:s=5,validateStatus:i=d=>d>=200&&d<300,onRetry:c,...u}=e,m=a;if(r){let d=new URLSearchParams;Object.entries(r).forEach(([p,g])=>{d.append(p,typeof g=="boolean"?g?"1":"0":String(g))}),m+=(m.includes("?")?"&":"?")+d.toString()}let l=null;for(let d=1;d<=n+1;d++){let p=new AbortController,g=t>0?setTimeout(()=>p.abort(),t):null;try{let v=await fetch(m,{...u,signal:p.signal,redirect:s===0?"error":"follow"});if(g&&clearTimeout(g),!i(v.status))throw new Error(`HTTP ${v.status}: ${v.statusText}`);let A=v.headers.get("content-type")||"",w;return A.includes("application/json")?w=await v.json():A.includes("text/")?w=await v.text():w=await v.arrayBuffer(),{data:w,status:v.status,statusText:v.statusText,finalUrl:v.url,headers:v.headers,retryCount:d-1}}catch(v){if(g&&clearTimeout(g),l=v,d>n||v.name==="AbortError"&&d===1||v.message.includes("HTTP")&&!v.message.includes("5"))break;c&&c(v,d),d<=n&&await new Promise(A=>setTimeout(A,o*d))}}throw l}var S=class a{resolver;findIpKeys=[];rejectList=["page-notification-noreply","reply.craigslist.org",".craigslist.org",".paypal.","@paypal.","advertise-noreply",".intuit.com","advertise-no.reply","advertise-no-reply","advertise-no_reply"];roles=de;records=me;yahooList=pe;domain;IpInfo=null;static instance=null;dns;validationConfig={enableDeepValidation:!1,ipResolver:{findip:{enabled:!1,apiKey:[]},ipApi:!1}};constructor(e,r){let{enableDeepValidation:t=!1,ipResolver:n={findip:{enabled:!1,apiKey:[]},ipApi:!1}}=e||{};this.validationConfig={enableDeepValidation:t,ipResolver:{...this.validationConfig.ipResolver,...n}},this.dns=new x(r),this.resolver={resolve:this.dns.resolve},this.domain=new X}static create(e,r){return a.instance||(a.instance=new a(e,r)),a.instance}async getMxRecords(e){if(this.is_email(e)&&!e.includes("@")||!e.includes("."))throw new Error("Invalid email address or domain name");let r=e.includes("@")&&e.split("@")[1]||e;try{let t=await this.resolver.resolve(r,"MX");if(t&&Array.isArray(t)&&t.length>0)return t.map(n=>n.exchange);throw new Error(`Failed to resolve MX records for ${r}`)}catch(t){throw t}}async validate(e,r=!1){if(!this.isEmail(e))return{success:!1,type:"Syntanx",email:e.toLowerCase()};if(he.some(o=>e.toLowerCase().split("@")[1].includes(o)))return{success:!1,type:"Rejected",email:e.toLowerCase()};if(this.rejectList.some(o=>e.includes(o)))return{success:!1,type:"Rejected",email:e.toLowerCase()};let n=e.includes("@")&&e.split("@")[1]||e;try{let o=await this.getMxRecords(n),s=[];if(o&&o.length>0){for(let c of o){let u=c.endsWith(".")&&c.startsWith(".")?c.substring(1,c.length-1):c.startsWith(".")?c.substring(1):c.endsWith(".")?c.substring(0,c.length-1):c;if(u.includes(" ")&&u.split(" ").length===2){let m=u.split(" ")[1];m&&s.push(m)}else u.includes(" ")||s.push(u);for(let m of this.records)if(u.includes(m.mx))return m.name==="Yahoo"?this.yahooList.includes(n)?{success:!0,data:{provider:m.name,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}}:u.includes("mx-biz.mail")?{success:!0,data:{provider:"Turbify",email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l))}}:{success:!0,data:{provider:"Yahoo (External Provider)",email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l))}}:{success:!0,data:{provider:m.name,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}}}if(!r||!this.validationConfig.enableDeepValidation)return{success:!0,data:{provider:"Unknown",email:e.toLowerCase(),role:!!this.roles.find(c=>e.toLowerCase().startsWith(c))}};let i=await this.domain_check(n);if(i=i.status?i:await this.domain_check(n,!0),i.status)return{success:!0,data:{provider:i.type,email:e.toLowerCase(),role:!!this.roles.find(c=>e.toLowerCase().startsWith(c)),...i.webmail&&{webmail:i.webmail}}};{let c=!1;for(let u of s){if(c)break;let m=await this.domain_check(u,!0);if(m.status)return{success:!0,data:{provider:m.type,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}};if(typeof u<"u"&&u.length>0)for(u=u.substring(u.indexOf(".")+1);this.domain.domain(u).length>3;){if(m=await this.domain_check(u,!0),m.status)return{success:!0,data:{provider:m.type,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}};u=u.includes(".")?u.substring(u.indexOf(".")+1):""}}return i=await this.dnsLookup(s),i.status?{success:!0,data:{provider:i.type,email:e.toLowerCase(),role:!!this.roles.find(u=>e.toLowerCase().startsWith(u)),...i.webmail&&{webmail:i.webmail}}}:{success:!0,data:{provider:"Unknown",email:e.toLowerCase(),role:!!this.roles.find(u=>e.toLowerCase().startsWith(u))}}}}else return{success:!1,type:"Invalid",email:e.toLowerCase()}}catch(o){return{success:!1,type:"Error",email:e.toLowerCase(),message:o.message}}}is_wale4r_zimbra(e){try{let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(t&&t[1]&&t[1].includes("zimbra web client"))return!0;let n=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,o;for(;(o=n.exec(e))!==null;){let s=o[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(s&&(s.includes(" zimbra ")||s.includes(" zimbra")||s.includes("zimbra ")))return!0}return!1}catch{return!1}}is_zimbra(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("zimbra web"))return!0;let o=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(i&&(i.includes(" zimbra ")||i.includes(" zimbra")||i.includes("zimbra ")))return!0}return r?.toLowerCase()?.includes("www.zimbra.com")===!0||r?.toLowerCase()?.includes("zimbra.com")===!0||r?.toLowerCase()?.includes("zimbra collaboration")===!0||r?.toLowerCase()?.includes("zimbra web")===!0||r?.toLowerCase()?.includes("'zimbra'")===!0||r?.toLowerCase()?.includes('"zimbra"')===!0||r?.toLowerCase()?.includes(">zimbra<")===!0}catch{return!1}}is_webmail(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("webmail"))return!0;let o=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(i&&(i.includes(" webmail ")||i.includes(" webmail")||i.includes("webmail ")))return!0}return r?.toLowerCase()?.includes("web.mail")===!0||r?.toLowerCase()?.includes("web-mail")===!0||r?.toLowerCase()?.includes("web mail")===!0||r?.toLowerCase()?.includes("zimbra web")===!0||r?.toLowerCase()?.includes("'webmail'")===!0||r?.toLowerCase()?.includes('"webmail"')===!0||r?.toLowerCase()?.includes(">webmail<")===!0}catch{return!1}}is_owa(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("outlook"))return!0;let o=/<div[^>]*class=["'][^"']*(?:signInHeader|signInExpl)[^"']*["'][^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/div>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"");if(i&&(i.includes(" Outlook ")||i.includes(" Outlook")||i.includes("Outlook")))return!0}return r?.toLowerCase()?.includes("/owa/auth/")===!0||r?.toLowerCase()?.includes("/owa/auth.owa")===!0}catch{return!1}}is_cPanel(e){try{let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(t&&t[1]&&t[1].includes("cpanel redirect"))return!0;let n=/<[^>]*class=["'][^"']*copyright[^"']*["'][^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/[^>]*>/gi,o;for(;(o=n.exec(e))!==null;){let c=o[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(c&&t&&t[1]&&t[1].includes("webmail")&&c.includes("cpanel"))return!0}let s=/<[^>]*class=["'][^"']*main-logo[^"']*["'][^>]*src=["']([^"']*)["'][^>]*>/gi,i;for(;(i=s.exec(e))!==null;){let c=i[1]?.toLowerCase();if(c&&t&&t[1]&&t[1].includes("webmail")&&c.includes("cpanel"))return!0}return this.parseJSCpanel(e)}catch{return!1}}toToken(e){let r=n(e,"west"),t=n(e,"east");if(r&&t){let s=o(r),i=o(t);return s+i}return null;function n(s,i){let c=s.indexOf(i+"=");if(c===-1)return null;let u=s.indexOf("+",c);if(u===-1)return null;let m=s.indexOf("(",u);if(m===-1)return null;let l=0,d=m;for(;d<s.length;d++){let p=s[d];if(p==="(")l++;else if(p===")"&&(l--,l===0))break}return s.substring(m,d+1)}function o(s){let i=s.startsWith("(")&&s.endsWith(")")?s.slice(1,-1):s,c=/\([^()]+\)/g,u=i.match(c);if(u){let m=u.map(l=>1+(l.slice(1,-1).match(/!!\[\]/g)||[]).length);return Number(m.join(""))}else return console.error("No groups found."),0}}parseJSCpanel(e){let t=/<form[^>]*id=["']wsidchk-form["'][^>]*action=["']([^"']*)["'][^>]*>/i.exec(e);return!!(this.toToken(e)&&t&&t[1])}is_Roundcube(e,r){let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);return t&&t[1]&&t[1].includes("roundcube")&&t[1].includes("webmail")?!0:r?.toLowerCase()?.includes("roundcube")===!0}async domain_check(e,r=!1,t=0){if(typeof e!="string")return{status:!1,type:""};e=e.includes("@")?e.split("@")[1]:e;let n=[`https://mail.${e}`,`https://webmail.${e}`,`https://mail1.${e}`,`https://mailhost.${e}`,`https://${e}/webmail`,`https://${e}/zimbra`,`https://${e}/mail`],o=r?e.includes("/")?`https://${e.substring(e.lastIndexOf("/"),e.length).replaceAll("/","")}`:`https://${e}`:n[t];try{if(!o)return{status:!1,type:""};let s=await F(o,{timeout:2500,maxRetries:2}),i=s.data,c=s.finalUrl;if(typeof i=="string"&&i.length>500){if(this.is_wale4r_zimbra(i))return{status:!0,type:"Zimbra",webmail:c};if(this.is_owa(i,i))return{status:!0,type:c.includes("login.microsoftonline.com")?"Office (OWA)":c.includes("login.live.com")?"Outlook":"Outlook Web App (OWA)",webmail:c};if(this.is_zimbra(i,i))return{status:!0,type:"Zimbra",webmail:c};if(this.is_cPanel(i))return{status:!0,type:"cPanel Webmail",webmail:c};if(this.is_Roundcube(i,i))return{status:!0,type:"Roundcube Webmail",webmail:c};if(this.is_webmail(i,i))return{status:!0,type:"Webmail",webmail:c}}return t<6&&!r?(t++,await this.domain_check(e,r,t)):{status:!1,type:""}}catch{return{status:!1,type:""}}}async resolveA(e){try{return await this.resolver.resolve(e,"A")}catch{return[]}}async dnsLookup(e){if(e&&Array.isArray(e)&&e.length>0)for(let r of e)try{let t=await this.resolveA(r);if(t&&Array.isArray(t))for(let n of t){if(this.IpInfo=await this.ipApi(n),this.IpInfo!==null)return this.returnDNS(this.IpInfo.isp,this.IpInfo.org);if(this.IpInfo=await this.findIp(n),this.IpInfo!==null)return this.returnDNS(this.IpInfo.traits.isp,this.IpInfo.traits.autonomous_system_organization)}break}catch{}return{status:!1,type:"Others"}}returnDNS(e,r){return e.toLowerCase().includes("amazon")||r.toLowerCase().includes("amazon")?{status:!0,type:"AWS Partner"}:e.toLowerCase().includes("microsoft")||r.toLowerCase().includes("microsoft")?{status:!0,type:"Microsoft Exchange"}:e.toLowerCase().replaceAll(" ","").includes("digitalocean")||r.toLowerCase().replaceAll(" ","").includes("digitalocean")?{status:!0,type:"Digitalocean"}:e.toLowerCase().includes("oracle")||r.toLowerCase().includes("oracle")?{status:!0,type:"Oracle Cloud"}:e.toLowerCase().includes("ibm")||r.toLowerCase().includes("ibm")?{status:!0,type:"IBM"}:e.toLowerCase().includes("alibaba")||r.toLowerCase().includes("alibaba")?{status:!0,type:"Alibaba"}:e.toLowerCase().includes("aruba")||r.toLowerCase().includes("aruba")?{status:!0,type:"Aruba"}:{status:!1,type:"Others"}}async ipApi(e){try{if(!this.validationConfig?.ipResolver?.findip?.enabled||!this.validationConfig.enableDeepValidation)return null;let r=await F(`http://ip-api.com/json/${e}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,zip,lat,lon,timezone,currency,isp,org,as,reverse,mobile,proxy,hosting,query`);return JSON.parse(r.data)}catch{return null}}async findIp(e){if(!this.validationConfig?.ipResolver?.findip?.enabled||!this.validationConfig.enableDeepValidation||!this.validationConfig?.ipResolver?.findip?.apiKey?.length)return null;let r=this.findIpKeys[Math.floor(Math.random()*this.findIpKeys.length)];try{let t=await F(`https://api.findip.net/${e}/?token=${r}`);return JSON.parse(t.data)}catch{return null}}isEmail(e){if(!this.is_email(e))return!1;let[r,t]=e.split("@");if(!r||!t||r.length<2||t.length<5)return!1;let n=35,o=3,s=3,i=3,c=2,u=55;return!(r.length>=n||r.split("-").length>o||r.split(".").length>s||t.split(".").length>i||t.split("-").length>c||!this.domain.isDomainExtension(e)||e.length>=u)}is_email(e){return!e.includes("@")||!e.includes(".")||e.split("@").length>2||e.lastIndexOf("@")>e.lastIndexOf(".")?!1:/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,9})+$/.test(e)}};var I=["native","google","cloudflare","quad9"],x=class a{providers;static __emailValidator=null;constructor(e={}){this.providers=new Map,this.initializeProviders(e)}static createEmailValidator(e,r){return a.__emailValidator||(a.__emailValidator=S.create(e,r)),a.__emailValidator}static get emailValidator(){return a.__emailValidator?a.__emailValidator:a.createEmailValidator()}initializeProviders(e){this.providers.set("native",new V(e.native)),this.providers.set("google",new $(e.google)),this.providers.set("cloudflare",new B(e.cloudflare)),this.providers.set("quad9",new Y(e.quad9))}setConfig(e,r){if(!this.isValidProvider(e))throw new C(e);let t=this.providers.get(e);t&&t.updateConfig(r)}setConfigs(e){e.native&&this.setConfig("native",e.native),e.google&&this.setConfig("google",e.google),e.cloudflare&&this.setConfig("cloudflare",e.cloudflare),e.quad9&&this.setConfig("quad9",e.quad9)}isValidProvider(e){return["native","google","cloudflare","quad9"].includes(e)}validateHostname(e){if(!e||typeof e!="string"||e.trim().length===0)throw new k(e)}getEnabledProviders(){let e=[];for(let[r,t]of this.providers)t.enabled&&e.push(r);return e}selectProvider(e){if(e){if(!this.isValidProvider(e))throw new C(e);if(!this.providers.get(e)?.enabled)throw new N(e);return e}let r=this.getEnabledProviders();if(r.length===0)throw new T;let t=r.filter(o=>{let s=this.providers.get(o);return s&&!s.isFull}),n=t.length>0?t:r;return n[this.rnd(0,n.length-1)]}rnd=(e=0,r=Number.MAX_VALUE)=>Math.floor(Math.random()*(r-e+1))+e;getProvider(e){return this.providers.get(e)}resolve4=async(e,r,t)=>{this.validateHostname(e),t=I.includes(r||"")?r:t;let n=this.selectProvider(t);return r=I.includes(r||"")?void 0:r,this.getProvider(n).resolve4(e,r)};resolve6=async(e,r,t)=>{this.validateHostname(e),t=I.includes(r||"")?r:t;let n=this.selectProvider(t);return r=I.includes(r||"")?void 0:r,this.getProvider(n).resolve6(e,r)};resolveAny=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveAny(e)};async resolveCaa(e,r){this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveCaa(e)}resolveCname=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveCname(e)};resolveMx=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveMx(e)};resolveNaptr=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveNaptr(e)};resolveNs=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveNs(e)};resolvePtr=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolvePtr(e)};resolveSoa=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveSoa(e)};resolveSrv=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveSrv(e)};resolveTlsa=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveTlsa(e)};resolveTxt=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveTxt(e)};reverse=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).reverse(e)};resolve=async(e,r,t)=>{this.validateHostname(e),t=I.includes(r||"")?r:t;let n=this.selectProvider(t);return r=I.includes(r||"")?"A":r,this.getProvider(n).resolve(e,r)}};var D=null,E=["native","google","cloudflare","quad9"],b=()=>(D||(D=new x),D),Oe=()=>{D=null},De=a=>{D=a},Me=async(a,e,r)=>(r=E.includes(e||"")?e:r,e=E.includes(e||"")?void 0:e,b().resolve4(a,e,r)),_e=async(a,e,r)=>(r=E.includes(e||"")?e:r,e=E.includes(e||"")?void 0:e,b().resolve6(a,e,r)),je=async(a,e)=>b().resolveAny(a,e),He=async(a,e)=>b().resolveCaa(a,e),We=async(a,e)=>b().resolveCname(a,e),Ve=async(a,e)=>b().resolveMx(a,e),Ue=async(a,e)=>b().resolveNaptr(a,e),$e=async(a,e)=>b().resolveNs(a,e),Be=async(a,e)=>b().resolvePtr(a,e),Ye=async(a,e)=>b().resolveSoa(a,e),Xe=async(a,e)=>b().resolveSrv(a,e),Fe=async(a,e)=>b().resolveTlsa(a,e),Qe=async(a,e)=>b().resolveTxt(a,e),Ge=async(a,e)=>b().reverse(a,e),Ze=(a,e,r)=>b().resolve(a,E.includes(e||"")?"A":e,E.includes(e||"")?e:r),Je=x;0&&(module.exports={EmailValidator,InvalidHostnameError,InvalidProviderError,NoEnabledProvidersError,ProviderNotEnabledError,YqDns,resetDefaultResolver,resolve,resolve4,resolve6,resolveAny,resolveCaa,resolveCname,resolveMx,resolveNaptr,resolveNs,resolvePtr,resolveSoa,resolveSrv,resolveTlsa,resolveTxt,reverse,setDefaultResolver});
1
+ "use strict";var xe=Object.create;var H=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Ae=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var ke=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),Ne=(a,e)=>{for(var r in e)H(a,r,{get:e[r],enumerable:!0})},ne=(a,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ce(e))!Te.call(a,n)&&n!==r&&H(a,n,{get:()=>e[n],enumerable:!(t=Pe(e,n))||t.enumerable});return a};var oe=(a,e,r)=>(r=a!=null?xe(Ae(a)):{},ne(e||!a||!a.__esModule?H(r,"default",{value:a,enumerable:!0}):r,a)),Se=a=>ne(H({},"__esModule",{value:!0}),a);var ae=ke((rr,Z)=>{"use strict";var Ie=Object.prototype.hasOwnProperty,f="~";function L(){}Object.create&&(L.prototype=Object.create(null),new L().__proto__||(f=!1));function Ee(a,e,r){this.fn=a,this.context=e,this.once=r||!1}function ie(a,e,r,t,n){if(typeof r!="function")throw new TypeError("The listener must be a function");var o=new Ee(r,t||a,n),s=f?f+e:e;return a._events[s]?a._events[s].fn?a._events[s]=[a._events[s],o]:a._events[s].push(o):(a._events[s]=o,a._eventsCount++),a}function W(a,e){--a._eventsCount===0?a._events=new L:delete a._events[e]}function y(){this._events=new L,this._eventsCount=0}y.prototype.eventNames=function(){var e=[],r,t;if(this._eventsCount===0)return e;for(t in r=this._events)Ie.call(r,t)&&e.push(f?t.slice(1):t);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};y.prototype.listeners=function(e){var r=f?f+e:e,t=this._events[r];if(!t)return[];if(t.fn)return[t.fn];for(var n=0,o=t.length,s=new Array(o);n<o;n++)s[n]=t[n].fn;return s};y.prototype.listenerCount=function(e){var r=f?f+e:e,t=this._events[r];return t?t.fn?1:t.length:0};y.prototype.emit=function(e,r,t,n,o,s){var i=f?f+e:e;if(!this._events[i])return!1;var c=this._events[i],u=arguments.length,m,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,t),!0;case 4:return c.fn.call(c.context,r,t,n),!0;case 5:return c.fn.call(c.context,r,t,n,o),!0;case 6:return c.fn.call(c.context,r,t,n,o,s),!0}for(l=1,m=new Array(u-1);l<u;l++)m[l-1]=arguments[l];c.fn.apply(c.context,m)}else{var d=c.length,p;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),u){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,r);break;case 3:c[l].fn.call(c[l].context,r,t);break;case 4:c[l].fn.call(c[l].context,r,t,n);break;default:if(!m)for(p=1,m=new Array(u-1);p<u;p++)m[p-1]=arguments[p];c[l].fn.apply(c[l].context,m)}}return!0};y.prototype.on=function(e,r,t){return ie(this,e,r,t,!1)};y.prototype.once=function(e,r,t){return ie(this,e,r,t,!0)};y.prototype.removeListener=function(e,r,t,n){var o=f?f+e:e;if(!this._events[o])return this;if(!r)return W(this,o),this;var s=this._events[o];if(s.fn)s.fn===r&&(!n||s.once)&&(!t||s.context===t)&&W(this,o);else{for(var i=0,c=[],u=s.length;i<u;i++)(s[i].fn!==r||n&&!s[i].once||t&&s[i].context!==t)&&c.push(s[i]);c.length?this._events[o]=c.length===1?c[0]:c:W(this,o)}return this};y.prototype.removeAllListeners=function(e){var r;return e?(r=f?f+e:e,this._events[r]&&W(this,r)):(this._events=new L,this._eventsCount=0),this};y.prototype.off=y.prototype.removeListener;y.prototype.addListener=y.prototype.on;y.prefixed=f;y.EventEmitter=y;typeof Z<"u"&&(Z.exports=y)});var Ke={};Ne(Ke,{EmailValidator:()=>S,InvalidHostnameError:()=>k,InvalidProviderError:()=>C,NoEnabledProvidersError:()=>T,ProviderNotEnabledError:()=>N,YqDns:()=>x,default:()=>Je,resetDefaultResolver:()=>Oe,resolve:()=>Ze,resolve4:()=>Me,resolve6:()=>_e,resolveAny:()=>je,resolveCaa:()=>He,resolveCname:()=>We,resolveMx:()=>Ve,resolveNaptr:()=>Ue,resolveNs:()=>$e,resolvePtr:()=>Be,resolveSoa:()=>Ye,resolveSrv:()=>Xe,resolveTlsa:()=>Fe,resolveTxt:()=>Qe,reverse:()=>Ge,setDefaultResolver:()=>De});module.exports=Se(Ke);var h=oe(require("node:dns/promises"),1);var J=oe(ae(),1);var z=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},K=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},ce=a=>globalThis.DOMException===void 0?new K(a):new DOMException(a),le=a=>{let e=a.reason===void 0?ce("This operation was aborted."):a.reason;return e instanceof Error?e:ce(e)};function ee(a,e){let{milliseconds:r,fallback:t,message:n,customTimers:o={setTimeout,clearTimeout}}=e,s,i,u=new Promise((m,l)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(e.signal){let{signal:p}=e;p.aborted&&l(le(p)),i=()=>{l(le(p))},p.addEventListener("abort",i,{once:!0})}if(r===Number.POSITIVE_INFINITY){a.then(m,l);return}let d=new z;s=o.setTimeout.call(void 0,()=>{if(t){try{m(t())}catch(p){l(p)}return}typeof a.cancel=="function"&&a.cancel(),n===!1?m():n instanceof Error?l(n):(d.message=n??`Promise timed out after ${r} milliseconds`,l(d))},r),(async()=>{try{m(await a)}catch(p){l(p)}})()}).finally(()=>{u.clear(),i&&e.signal&&e.signal.removeEventListener("abort",i)});return u.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},u}function re(a,e,r){let t=0,n=a.length;for(;n>0;){let o=Math.trunc(n/2),s=t+o;r(a[s],e)<=0?(t=++s,n-=o+1):n=o}return t}var O=class{#e=[];enqueue(e,r){r={priority:0,...r};let t={priority:r.priority,id:r.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=r.priority){this.#e.push(t);return}let n=re(this.#e,t,(o,s)=>s.priority-o.priority);this.#e.splice(n,0,t)}setPriority(e,r){let t=this.#e.findIndex(o=>o.id===e);if(t===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[n]=this.#e.splice(t,1);this.enqueue(n.run,{priority:r,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return this.#e.length}};var R=class extends J.default{#e;#i;#o=0;#p;#a;#h=0;#t;#c;#r;#g;#s=0;#l;#n;#v;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:O,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#i=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#p=e.intervalCap,this.#a=e.interval,this.#r=new e.queueClass,this.#g=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#v=e.throwOnTimeout===!0,this.#n=e.autoStart===!1}get#w(){return this.#i||this.#o<this.#p}get#R(){return this.#s<this.#l}#x(){this.#s--,this.#u(),this.emit("next")}#P(){this.#f(),this.#y(),this.#c=void 0}get#C(){let e=Date.now();if(this.#t===void 0){let r=this.#h-e;if(r<0)this.#o=this.#e?this.#s:0;else return this.#c===void 0&&(this.#c=setTimeout(()=>{this.#P()},r)),!0}return!1}#u(){if(this.#r.size===0)return this.#t&&clearInterval(this.#t),this.#t=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#n){let e=!this.#C;if(this.#w&&this.#R){let r=this.#r.dequeue();return r?(this.emit("active"),r(),e&&this.#y(),!0):!1}}return!1}#y(){this.#i||this.#t!==void 0||(this.#t=setInterval(()=>{this.#f()},this.#a),this.#h=Date.now()+this.#a)}#f(){this.#o===0&&this.#s===0&&this.#t&&(clearInterval(this.#t),this.#t=void 0),this.#o=this.#e?this.#s:0,this.#m()}#m(){for(;this.#u(););}get concurrency(){return this.#l}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#l=e,this.#m()}async#A(e){return new Promise((r,t)=>{e.addEventListener("abort",()=>{t(e.reason)},{once:!0})})}setPriority(e,r){this.#r.setPriority(e,r)}async add(e,r={}){return r.id??=(this.#b++).toString(),r={timeout:this.timeout,throwOnTimeout:this.#v,...r},new Promise((t,n)=>{this.#r.enqueue(async()=>{this.#s++,this.#o++;try{r.signal?.throwIfAborted();let o=e({signal:r.signal});r.timeout&&(o=ee(Promise.resolve(o),{milliseconds:r.timeout})),r.signal&&(o=Promise.race([o,this.#A(r.signal)]));let s=await o;t(s),this.emit("completed",s)}catch(o){if(o instanceof z&&!r.throwOnTimeout){t();return}n(o),this.emit("error",o)}finally{this.#x()}},r),this.emit("add"),this.#u()})}async addAll(e,r){return Promise.all(e.map(async t=>this.add(t,r)))}start(){return this.#n?(this.#n=!1,this.#m(),this):this}pause(){this.#n=!0}clear(){this.#r=new this.#g}async onEmpty(){this.#r.size!==0&&await this.#d("empty")}async onSizeLessThan(e){this.#r.size<e||await this.#d("next",()=>this.#r.size<e)}async onIdle(){this.#s===0&&this.#r.size===0||await this.#d("idle")}async#d(e,r){return new Promise(t=>{let n=()=>{r&&!r()||(this.off(e,n),t())};this.on(e,n)})}get size(){return this.#r.size}sizeBy(e){return this.#r.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#n}};var V=class{queue;config;constructor(e={}){this.config={enabled:e.enabled??!0,limit:e.limit&&e.limit.concurrency>0?e.limit:{concurrency:10,interval:1e3,intervalCap:750,carryoverConcurrencyCount:!0}};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval,r.intervalCap=this.config.limit.intervalCap,r.carryoverConcurrencyCount=typeof r.carryoverConcurrencyCount=="boolean"?r.carryoverConcurrencyCount:!0),this.queue=new R(r)}updateConfig(e){this.config={enabled:e.enabled??this.config.enabled,limit:e.limit??this.config.limit};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval,r.intervalCap=this.config.limit.intervalCap),this.queue=new R(r)}get enabled(){return this.config.enabled}get queueSize(){return this.queue.size}get isFull(){let e=this.queue.pending+this.queue.size,r=this.config.limit.concurrency;return e>=r}async resolve4(e,r){return r?this.queue.add(async()=>h.resolve4(e,r)):this.queue.add(async()=>h.resolve4(e))}async resolve6(e,r){return r?this.queue.add(async()=>h.resolve6(e,r)):this.queue.add(async()=>h.resolve6(e))}async resolveAny(e){return this.queue.add(async()=>h.resolveAny(e))}async resolveCaa(e){return this.queue.add(async()=>h.resolveCaa(e))}async resolveCname(e){return this.queue.add(async()=>h.resolveCname(e))}async resolveMx(e){return this.queue.add(async()=>h.resolveMx(e))}async resolveNaptr(e){return this.queue.add(async()=>h.resolveNaptr(e))}async resolveNs(e){return this.queue.add(async()=>h.resolveNs(e))}async resolvePtr(e){return this.queue.add(async()=>h.resolvePtr(e))}async resolveSoa(e){return this.queue.add(async()=>h.resolveSoa(e))}async resolveSrv(e){return this.queue.add(async()=>h.resolveSrv(e))}async resolveTlsa(e){return this.queue.add(async()=>h.resolveTlsa(e))}async resolveTxt(e){return this.queue.add(async()=>h.resolveTxt(e))}async reverse(e){return this.queue.add(async()=>h.reverse(e))}async resolve(e,r){return this.queue.add(async()=>h.resolve(e,r))}};var qe={FORMERR:"DNS server claims query was misformatted",SERVFAIL:"DNS server returned general failure",ENOTFOUND:"Domain name not found",NOTIMP:"DNS server does not implement requested operation",REFUSED:"DNS server refused query",YXDOMAIN:"Name exists when it should not",YXRRSET:"RR set exists when it should not",NXRRSET:"RR set that should exist does not",NOTAUTH:"Server not authoritative for zone",NOTZONE:"Name not contained in zone"},Le={1:"FORMERR",2:"SERVFAIL",3:"ENOTFOUND",4:"NOTIMP",5:"REFUSED",6:"YXDOMAIN",7:"YXRRSET",8:"NXRRSET",9:"NOTAUTH",10:"NOTZONE"};function U(a,e,r){let t=Le[e]||`DNSSTATUS_${e}`,n=`query${r}`,o=`${n} ${a} ${t}: ${qe[t]||"Unrecognized DNS error code"}`,s=new Error(o);return s.code=t,s.errno=e,s.syscall=n,s.hostname=a,s}var P=class{queue;config;dohRequest=null;constructor(e={},r){e.limit=e&&e.limit&&e.limit.concurrency>0?e.limit:r,this.config={enabled:e.enabled??!0,limit:e.limit??{concurrency:5}};let t={concurrency:this.config.limit?.concurrency||10};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(t.interval=this.config.limit.interval||1e3,t.intervalCap=this.config.limit.intervalCap||100),this.queue=new R(t)}updateConfig(e){this.config={enabled:e.enabled??this.config.enabled,limit:e.limit&&e.limit.concurrency>0?e.limit:this.config.limit};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval||1e3,r.intervalCap=this.config.limit.intervalCap||5),this.queue=new R(r)}get enabled(){return this.config.enabled}get queueSize(){return this.queue.size}get isFull(){let e=this.queue.pending+this.queue.size,r=this.config.limit.concurrency;return e>=r}parseDoHResponse(e,r,t=!1){if(!e.Answer||e.Answer.length===0)return[];let n=i=>i.endsWith(".")?i.substring(0,i.length-1):i,o=i=>{let c=l=>typeof l=="object"&&l!==null&&!Array.isArray(l),u=l=>typeof l=="string"&&/^".*"$/.test(l)?l.slice(1,-1):l,m=l=>{let d={};for(let[p,g]of Object.entries(l))g!==void 0&&(d[p]=u(g));return d};return Array.isArray(i)&&i.every(c)?i.map(m):c(i)?m(i):i},s=e.Answer.filter(i=>{let c={A:1,AAAA:28,ANY:255,CAA:257,CNAME:5,MX:15,NAPTR:35,NS:2,PTR:12,SOA:6,SRV:33,TLSA:52,TXT:16};return i.type===c[r]||r==="ANY"});switch(r){case"A":case"AAAA":case"CNAME":case"NS":case"PTR":return t?s.map(i=>({address:i.data,ttl:i.TTL})):s.map(i=>i.data);case"MX":return o(s.map(i=>{let[c,u]=i.data.split(" "),m={exchange:n(u||""),priority:parseInt(c||"0",10)};return t?{...m,ttl:i.TTL}:m}));case"SRV":return o(s.map(i=>{let[c,u,m,l]=i.data.split(" "),d={priority:parseInt(c||"0",10),weight:parseInt(u||"0",10),port:parseInt(m||"0",10),name:l||""};return t?{...d,ttl:i.TTL}:d}));case"SOA":if(s.length>0){let[i,c,u,m,l,d,p]=s[0].data.split(" "),g={nsname:i,hostmaster:c,serial:parseInt(u,10),refresh:parseInt(m,10),retry:parseInt(l,10),expire:parseInt(d,10),minttl:parseInt(p,10)};return o(t?{...g,ttl:s[0].TTL}:g)}throw new Error("No SOA record found");case"TXT":return o(s.map(i=>i.data.split('" "').map(c=>c.replace(/^"|"$/g,""))));case"CAA":return o(s.map(i=>{let[c,u,m]=i.data.split(" "),l={critical:parseInt(c,10),issue:u==="issue"?m:void 0,issuewild:u==="issuewild"?m:void 0,iodef:u==="iodef"?m:void 0};return t?{...l,ttl:i.TTL}:l}));case"NAPTR":return o(s.map(i=>{let[c,u,m,l,d,p]=i.data.split(" "),g={order:parseInt(c||"0",10),preference:parseInt(u||"0",10),flags:m||"",service:l||"",regexp:d||"",replacement:p||""};return t?{...g,ttl:i.TTL}:g}));case"TLSA":return o(s.map(i=>{let[c,u,m]=i.data.split(" "),l={certUsage:parseInt(c||"0",10),selector:parseInt(u||"0",10),match:parseInt(m||"0",10),data:new ArrayBuffer(0)};return t?{...l,ttl:i.TTL}:l}));case"ANY":return o(s.map(i=>({type:i.type,data:i.data,ttl:i.TTL})));default:return s.map(i=>i.data)}}async resolve4(e,r){return this.queue.add(async()=>{let t=await this.dohRequest(e,"A");return this.parseDoHResponse(t,"A",r?.ttl)})}async resolve6(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"AAAA");return this.parseDoHResponse(n,"AAAA",r?.ttl)})||[]}async resolveAny(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"ANY");return this.parseDoHResponse(t,"ANY")})||[]}async resolveCaa(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"CAA");return this.parseDoHResponse(t,"CAA")})||[]}async resolveCname(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"CNAME");return this.parseDoHResponse(t,"CNAME")})||[]}async resolveMx(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"MX");return this.parseDoHResponse(t,"MX")})||[]}async resolveNaptr(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"NAPTR");return this.parseDoHResponse(t,"NAPTR")})||[]}async resolveNs(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"NS");return this.parseDoHResponse(t,"NS")})||[]}async resolvePtr(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"PTR");return this.parseDoHResponse(t,"PTR")})||[]}async resolveSoa(e){return this.queue.add(async()=>{let r=await this.dohRequest(e,"SOA");return this.parseDoHResponse(r,"SOA")})}async resolveSrv(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"SRV");return this.parseDoHResponse(t,"SRV")})||[]}async resolveTlsa(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"TLSA");return this.parseDoHResponse(n,"TLSA",r?.ttl)})||[]}async resolveTxt(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"TXT");return this.parseDoHResponse(n,"TXT",r?.ttl)})||[]}async reverse(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"PTR");return this.parseDoHResponse(n,"PTR",r?.ttl)})||[]}async resolve(e,r="A",t){return await this.queue.add(async()=>{let o=await this.dohRequest(e,r);return this.parseDoHResponse(o,r,t?.ttl)})||(r==="SOA"?{}:[])}};var $=class extends P{baseUrl="https://dns.google/resolve";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:500,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}async request(e,r){let t=new URL(this.baseUrl);t.searchParams.set("name",e),t.searchParams.set("type",r);let n=await fetch(t.toString(),{headers:{Accept:"application/dns-json"}});if(!n.ok)throw new Error(`Google DoH request failed: ${n.status} ${n.statusText}`);let o=await n.json();if(o.Status!==0)throw U(e,o.Status,r);return o}};var B=class extends P{baseUrl="https://cloudflare-dns.com/dns-query";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:650,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}async request(e,r){let t=new URL(this.baseUrl);t.searchParams.set("name",e),t.searchParams.set("type",r);let n=await fetch(t.toString(),{headers:{Accept:"application/dns-json"}});if(!n.ok)throw new Error(`Cloudflare DoH request failed: ${n.status} ${n.statusText}`);let o=await n.json();if(o.Status!==0)throw U(e,o.Status,r);return o}};var ze={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,NAPTR:35,CAA:257,TLSA:52,ANY:255},Y=class extends P{baseUrl="https://dns.quad9.net/dns-query";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:500,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}encodeDNSQuery(e,r){let t=ze[r.toUpperCase()];if(!t)throw new Error(`Unsupported DNS type: ${r}`);let n=e.split("."),o=Buffer.concat([...n.map(u=>{let m=Buffer.alloc(u.length+1);return m.writeUInt8(u.length,0),m.write(u,1),m}),Buffer.from([0])]),s=Buffer.alloc(12);s.writeUInt16BE(Math.floor(Math.random()*65535),0),s.writeUInt16BE(256,2),s.writeUInt16BE(1,4);let i=Buffer.alloc(2);i.writeUInt16BE(t,0);let c=Buffer.alloc(2);return c.writeUInt16BE(1,0),Buffer.concat([s,o,i,c])}readName(e,r){let t=[],n=!1,o=0;for(;;){let s=e[r];if((s&192)===192){let i=e.readUInt16BE(r)&16383;n||(o=r+2),r=i,n=!0}else if(s===0){r++;break}else t.push(e.toString("utf8",r+1,r+1+s)),r+=s+1}return[t.join("."),n?o:r]}decodeRData(e,r,t,n){switch(t){case 1:return[Array.from(e.slice(r,r+4)).join("."),r+4];case 28:{let o=[];for(let s=0;s<8;s++)o.push(e.readUInt16BE(r+s*2).toString(16));return[o.join(":"),r+16]}case 2:case 5:case 12:{let[o,s]=this.readName(e,r);return[o,s]}case 15:{let o=e.readUInt16BE(r),[s,i]=this.readName(e,r+2);return[`${o} ${s}`,i]}case 16:{let o=e.readUInt8(r);return[e.toString("utf8",r+1,r+1+o),r+1+o]}case 6:{let[o,s]=this.readName(e,r),[i,c]=this.readName(e,s),u=e.readUInt32BE(c),m=e.readUInt32BE(c+4),l=e.readUInt32BE(c+8),d=e.readUInt32BE(c+12),p=e.readUInt32BE(c+16);return[`${o} ${i} ${u} ${m} ${l} ${d} ${p}`,c+20]}default:return[e.slice(r,r+n).toString("hex"),r+n]}}async request(e,r){let t=this.encodeDNSQuery(e,r),n=await fetch(this.baseUrl,{method:"POST",headers:{"Content-Type":"application/dns-message",Accept:"application/dns-message"},body:t}),o=Buffer.from(await n.arrayBuffer()),s=o.readUInt16BE(2),i=o.readUInt16BE(4),c=o.readUInt16BE(6),u=o.readUInt16BE(8),m=o.readUInt16BE(10),l=(s&256)>0,d=(s&512)>0,p=(s&128)>0,g=(s&32)>0,v=(s&16)>0,A=s&15,w=12,te=[];for(let M=0;M<i;M++){let[_,q]=this.readName(o,w),G=o.readUInt16BE(q);te.push({name:_,type:G}),w=q+4}let Q=M=>{let _=[];for(let q=0;q<M;q++){let[G,j]=this.readName(o,w),se=o.readUInt16BE(j),fe=o.readUInt32BE(j+4),be=o.readUInt16BE(j+8),[we,Re]=this.decodeRData(o,j+10,se,be);_.push({name:G,type:se,TTL:fe,data:we}),w=Re}return _},ge=Q(c),ve=Q(u),ye=Q(m);return{Status:A,TC:d,RD:l,RA:p,AD:g,CD:v,Question:te,Answer:ge,Authority:ve,Additional:ye}}};var T=class extends Error{constructor(){super("No DNS providers are enabled"),this.name="NoEnabledProvidersError"}},k=class extends Error{constructor(e){super(`Invalid hostname: ${e}`),this.name="InvalidHostnameError"}},N=class extends Error{constructor(e){super(`Provider '${e}' is not enabled`),this.name="ProviderNotEnabledError"}},C=class extends Error{constructor(e){super(`Invalid provider: ${e}`),this.name="InvalidProviderError"}};var ue=[".aaa",".aarp",".abarth",".abb",".abbott",".abbvie",".abc",".able",".abogado",".abudhabi",".ac",".academy",".accenture",".accountant",".accountants",".aco",".active",".actor",".ad",".adac",".ads",".adult",".ae",".aeg",".aero",".aetna",".af",".afamilycompany",".afl",".africa",".ag",".agakhan",".agency",".ai",".aig",".aigo",".airbus",".airforce",".airtel",".akdn",".al",".alfaromeo",".alibaba",".alipay",".allfinanz",".allstate",".ally",".alsace",".alstom",".am",".amazon",".americanexpress",".americanfamily",".amex",".amfam",".amica",".amsterdam",".an",".analytics",".android",".anquan",".anz",".ao",".aol",".apartments",".app",".apple",".aq",".aquarelle",".ar",".arab",".aramco",".archi",".army",".arpa",".art",".arte",".as",".asda",".asia",".associates",".at",".athleta",".attorney",".au",".auction",".audi",".audible",".audio",".auspost",".author",".auto",".autos",".avianca",".aw",".aws",".ax",".axa",".az",".azure",".ba",".baby",".baidu",".banamex",".bananarepublic",".band",".bank",".bar",".barcelona",".barclaycard",".barclays",".barefoot",".bargains",".baseball",".basketball",".bauhaus",".bayern",".bb",".bbc",".bbt",".bbva",".bcg",".bcn",".bd",".be",".beats",".beauty",".beer",".bentley",".berlin",".best",".bestbuy",".bet",".bf",".bg",".bh",".bharti",".bi",".bible",".bid",".bike",".bing",".bingo",".bio",".biz",".bj",".bl",".black",".blackfriday",".blanco",".blockbuster",".blog",".bloomberg",".blue",".bm",".bms",".bmw",".bn",".bnl",".bnpparibas",".bo",".boats",".boehringer",".bofa",".bom",".bond",".boo",".book",".booking",".boots",".bosch",".bostik",".boston",".bot",".boutique",".box",".bq",".br",".bradesco",".bridgestone",".broadway",".broker",".brother",".brussels",".bs",".bt",".budapest",".bugatti",".build",".builders",".business",".buy",".buzz",".bv",".bw",".by",".bz",".bzh",".ca",".cab",".cafe",".cal",".call",".calvinklein",".cam",".camera",".camp",".cancerresearch",".canon",".capetown",".capital",".capitalone",".car",".caravan",".cards",".care",".career",".careers",".cars",".cartier",".casa",".case",".caseih",".cash",".casino",".cat",".catering",".catholic",".cba",".cbn",".cbre",".cbs",".cc",".cd",".ceb",".center",".ceo",".cern",".cf",".cfa",".cfd",".cg",".ch",".chanel",".channel",".charity",".chase",".chat",".cheap",".chintai",".chloe",".christmas",".chrome",".chrysler",".church",".ci",".cipriani",".circle",".cisco",".citadel",".citi",".citic",".city",".cityeats",".ck",".cl",".claims",".cleaning",".click",".clinic",".clinique",".clothing",".cloud",".club",".clubmed",".cm",".cn",".co",".coach",".codes",".coffee",".college",".cologne",".com",".comcast",".commbank",".community",".company",".compare",".computer",".comsec",".condos",".construction",".consulting",".contact",".contractors",".cooking",".cookingchannel",".cool",".coop",".corsica",".country",".coupon",".coupons",".courses",".cpa",".cr",".credit",".creditcard",".creditunion",".cricket",".crown",".crs",".cruise",".cruises",".csc",".cu",".cuisinella",".cv",".cw",".cx",".cy",".cymru",".cyou",".cz",".dabur",".dad",".dance",".data",".date",".dating",".datsun",".day",".dclk",".dds",".de",".deal",".dealer",".deals",".degree",".delivery",".dell",".deloitte",".delta",".democrat",".dental",".dentist",".desi",".design",".dev",".dhl",".diamonds",".diet",".digital",".direct",".directory",".discount",".discover",".dish",".diy",".dj",".dk",".dm",".dnp",".do",".docs",".doctor",".dodge",".dog",".doha",".domains",".doosan",".dot",".download",".drive",".dtv",".dubai",".duck",".dunlop",".duns",".dupont",".durban",".dvag",".dvr",".dz",".earth",".eat",".ec",".eco",".edeka",".edu",".education",".ee",".eg",".eh",".email",".emerck",".energy",".engineer",".engineering",".enterprises",".epost",".epson",".equipment",".er",".ericsson",".erni",".es",".esq",".estate",".esurance",".et",".etisalat",".eu",".eurovision",".eus",".events",".everbank",".exchange",".expert",".exposed",".express",".extraspace",".fage",".fail",".fairwinds",".faith",".family",".fan",".fans",".farm",".farmers",".fashion",".fast",".fedex",".feedback",".ferrari",".ferrero",".fi",".fiat",".fidelity",".fido",".film",".final",".finance",".financial",".fire",".firestone",".firmdale",".fish",".fishing",".fit",".fitness",".fj",".fk",".flickr",".flights",".flir",".florist",".flowers",".flsmidth",".fly",".fm",".fo",".foo",".food",".foodnetwork",".football",".ford",".forex",".forsale",".forum",".foundation",".fox",".fr",".free",".fresenius",".frl",".frogans",".frontdoor",".frontier",".ftr",".fujitsu",".fujixerox",".fun",".fund",".furniture",".futbol",".fyi",".ga",".gal",".gallery",".gallo",".gallup",".game",".games",".gap",".garden",".gay",".gb",".gbiz",".gd",".gdn",".ge",".gea",".gent",".genting",".george",".gf",".gg",".ggee",".gh",".gi",".gift",".gifts",".gives",".giving",".gl",".glade",".glass",".gle",".global",".globo",".gm",".gmail",".gmbh",".gmo",".gmx",".gn",".godaddy",".gold",".goldpoint",".golf",".goo",".goodhands",".goodyear",".goog",".google",".gop",".got",".gov",".gp",".gq",".gr",".grainger",".graphics",".gratis",".green",".gripe",".grocery",".group",".gs",".gt",".gu",".guardian",".gucci",".guge",".guide",".guitars",".guru",".gw",".gy",".hair",".hamburg",".hangout",".haus",".hbo",".hdfc",".hdfcbank",".health",".healthcare",".help",".helsinki",".here",".hermes",".hgtv",".hiphop",".hisamitsu",".hitachi",".hiv",".hk",".hkt",".hm",".hn",".hockey",".holdings",".holiday",".homedepot",".homegoods",".homes",".homesense",".honda",".honeywell",".horse",".hospital",".host",".hosting",".hot",".hoteles",".hotels",".hotmail",".house",".how",".hr",".hsbc",".ht",".htc",".hu",".hughes",".hyatt",".hyundai",".ibm",".icbc",".ice",".icu",".id",".ie",".ieee",".ifm",".iinet",".ikano",".il",".im",".imamat",".imdb",".immo",".immobilien",".in",".inc",".industries",".infiniti",".info",".ing",".ink",".institute",".insurance",".insure",".int",".intel",".international",".intuit",".investments",".io",".ipiranga",".iq",".ir",".irish",".is",".iselect",".ismaili",".ist",".istanbul",".it",".itau",".itv",".iveco",".iwc",".jaguar",".java",".jcb",".jcp",".je",".jeep",".jetzt",".jewelry",".jio",".jlc",".jll",".jm",".jmp",".jnj",".jo",".jobs",".joburg",".jot",".joy",".jp",".jpmorgan",".jprs",".juegos",".juniper",".kaufen",".kddi",".ke",".kerryhotels",".kerrylogistics",".kerryproperties",".kfh",".kg",".kh",".ki",".kia",".kids",".kim",".kinder",".kindle",".kitchen",".kiwi",".km",".kn",".koeln",".komatsu",".kosher",".kp",".kpmg",".kpn",".kr",".krd",".kred",".kuokgroup",".kw",".ky",".kyoto",".kz",".la",".lacaixa",".ladbrokes",".lamborghini",".lamer",".lancaster",".lancia",".lancome",".land",".landrover",".lanxess",".lasalle",".lat",".latino",".latrobe",".law",".lawyer",".lb",".lc",".lds",".lease",".leclerc",".lefrak",".legal",".lego",".lexus",".lgbt",".li",".liaison",".lidl",".life",".lifeinsurance",".lifestyle",".lighting",".like",".lilly",".limited",".limo",".lincoln",".linde",".link",".lipsy",".live",".living",".lixil",".lk",".llc",".llp",".loan",".loans",".locker",".locus",".loft",".lol",".london",".lotte",".lotto",".love",".lpl",".lplfinancial",".lr",".ls",".lt",".ltd",".ltda",".lu",".lundbeck",".lupin",".luxe",".luxury",".lv",".ly",".ma",".macys",".madrid",".maif",".maison",".makeup",".man",".management",".mango",".map",".market",".marketing",".markets",".marriott",".marshalls",".maserati",".mattel",".mba",".mc",".mcd",".mcdonalds",".mckinsey",".md",".me",".med",".media",".meet",".melbourne",".meme",".memorial",".men",".menu",".meo",".merckmsd",".metlife",".mf",".mg",".mh",".miami",".microsoft",".mil",".mini",".mint",".mit",".mitsubishi",".mk",".ml",".mlb",".mls",".mm",".mma",".mn",".mo",".mobi",".mobile",".mobily",".moda",".moe",".moi",".mom",".monash",".money",".monster",".montblanc",".mopar",".mormon",".mortgage",".moscow",".moto",".motorcycles",".mov",".movie",".movistar",".mp",".mq",".mr",".ms",".msd",".mt",".mtn",".mtpc",".mtr",".mu",".museum",".music",".mutual",".mutuelle",".mv",".mw",".mx",".my",".mz",".na",".nab",".nadex",".nagoya",".name",".nationwide",".natura",".navy",".nba",".nc",".ne",".nec",".net",".netbank",".netflix",".network",".neustar",".new",".newholland",".news",".next",".nextdirect",".nexus",".nf",".nfl",".ng",".ngo",".nhk",".ni",".nico",".nike",".nikon",".ninja",".nissan",".nissay",".nl",".no",".nokia",".northwesternmutual",".norton",".now",".nowruz",".nowtv",".np",".nr",".nra",".nrw",".ntt",".nu",".nyc",".nz",".obi",".observer",".off",".office",".okinawa",".olayan",".olayangroup",".oldnavy",".ollo",".om",".omega",".one",".ong",".onl",".online",".onyourside",".ooo",".open",".oracle",".orange",".org",".organic",".orientexpress",".origins",".osaka",".otsuka",".ott",".ovh",".pa",".page",".pamperedchef",".panasonic",".panerai",".paris",".pars",".partners",".parts",".party",".passagens",".pay",".pccw",".pe",".pet",".pf",".pfizer",".pg",".ph",".pharmacy",".phd",".philips",".phone",".photo",".photography",".photos",".physio",".piaget",".pics",".pictet",".pictures",".pid",".pin",".ping",".pink",".pioneer",".pizza",".pk",".pl",".place",".play",".playstation",".plumbing",".plus",".pm",".pn",".pnc",".pohl",".poker",".politie",".porn",".post",".pr",".pramerica",".praxi",".press",".prime",".pro",".prod",".productions",".prof",".progressive",".promo",".properties",".property",".protection",".pru",".prudential",".ps",".pt",".pub",".pw",".pwc",".py",".qa",".qpon",".quebec",".quest",".qvc",".racing",".radio",".raid",".re",".read",".realestate",".realtor",".realty",".recipes",".red",".redstone",".redumbrella",".rehab",".reise",".reisen",".reit",".reliance",".ren",".rent",".rentals",".repair",".report",".republican",".rest",".restaurant",".review",".reviews",".rexroth",".rich",".richardli",".ricoh",".rightathome",".ril",".rio",".rip",".rmit",".ro",".rocher",".rocks",".rodeo",".rogers",".room",".rs",".rsvp",".ru",".rugby",".ruhr",".run",".rw",".rwe",".ryukyu",".sa",".saarland",".safe",".safety",".sakura",".sale",".salon",".samsclub",".samsung",".sandvik",".sandvikcoromant",".sanofi",".sap",".sapo",".sarl",".sas",".save",".saxo",".sb",".sbi",".sbs",".sc",".sca",".scb",".schaeffler",".schmidt",".scholarships",".school",".schule",".schwarz",".science",".scjohnson",".scor",".scot",".sd",".se",".search",".seat",".secure",".security",".seek",".select",".sener",".services",".ses",".seven",".sew",".sex",".sexy",".sfr",".sg",".sh",".shangrila",".sharp",".shaw",".shell",".shia",".shiksha",".shoes",".shop",".shopping",".shouji",".show",".showtime",".shriram",".si",".silk",".sina",".singles",".site",".sj",".sk",".ski",".skin",".sky",".skype",".sl",".sling",".sm",".smart",".smile",".sn",".sncf",".so",".soccer",".social",".softbank",".software",".sohu",".solar",".solutions",".song",".sony",".soy",".spa",".space",".spiegel",".sport",".spot",".spreadbetting",".sr",".srl",".srt",".ss",".st",".stada",".staples",".star",".starhub",".statebank",".statefarm",".statoil",".stc",".stcgroup",".stockholm",".storage",".store",".stream",".studio",".study",".style",".su",".sucks",".supplies",".supply",".support",".surf",".surgery",".suzuki",".sv",".swatch",".swiftcover",".swiss",".sx",".sy",".sydney",".symantec",".systems",".sz",".tab",".taipei",".talk",".taobao",".target",".tatamotors",".tatar",".tattoo",".tax",".taxi",".tc",".tci",".td",".tdk",".team",".tech",".technology",".tel",".telecity",".telefonica",".temasek",".tennis",".teva",".tf",".tg",".th",".thd",".theater",".theatre",".tiaa",".tickets",".tienda",".tiffany",".tips",".tires",".tirol",".tj",".tjmaxx",".tjx",".tk",".tkmaxx",".tl",".tm",".tmall",".tn",".to",".today",".tokyo",".tools",".top",".toray",".toshiba",".total",".tours",".town",".toyota",".toys",".tp",".tr",".trade",".trading",".training",".travel",".travelchannel",".travelers",".travelersinsurance",".trust",".trv",".tt",".tube",".tui",".tunes",".tushu",".tv",".tvs",".tw",".tz",".ua",".ubank",".ubs",".uconnect",".ug",".uk",".um",".unicom",".university",".uno",".uol",".ups",".us",".uy",".uz",".va",".vacations",".vana",".vanguard",".vc",".ve",".vegas",".ventures",".verisign",".versicherung",".vet",".vg",".vi",".viajes",".video",".vig",".viking",".villas",".vin",".vip",".virgin",".visa",".vision",".vista",".vistaprint",".viva",".vivo",".vlaanderen",".vn",".vodka",".volkswagen",".volvo",".vote",".voting",".voto",".voyage",".vu",".vuelos",".wales",".walmart",".walter",".wang",".wanggou",".warman",".watch",".watches",".weather",".weatherchannel",".webcam",".weber",".website",".wed",".wedding",".weibo",".weir",".wf",".whoswho",".wien",".wiki",".williamhill",".win",".windows",".wine",".winners",".wme",".wolterskluwer",".woodside",".work",".works",".world",".wow",".ws",".wtc",".wtf",".xbox",".xerox",".xfinity",".xihuan",".xin",".\u6D4B\u8BD5",".\u0915\u0949\u092E",".\u092A\u0930\u0940\u0915\u094D\u0937\u093E",".\u30BB\u30FC\u30EB",".\u4F5B\u5C71",".\u0CAD\u0CBE\u0CB0\u0CA4",".\u6148\u5584",".\u96C6\u56E2",".\u5728\u7EBF",".\uD55C\uAD6D",".\u0B2D\u0B3E\u0B30\u0B24",".\u5927\u4F17\u6C7D\u8F66",".\u70B9\u770B",".\u0E04\u0E2D\u0E21",".\u09AD\u09BE\u09F0\u09A4",".\u09AD\u09BE\u09B0\u09A4",".\u516B\u5366","\u200F.\u05D9\u05E9\u05E8\u05D0\u05DC\u200E","\u200F.\u0645\u0648\u0642\u0639\u200E",".\u09AC\u09BE\u0982\u09B2\u09BE",".\u516C\u76CA",".\u516C\u53F8",".\u9999\u683C\u91CC\u62C9",".\u7F51\u7AD9",".\u79FB\u52A8",".\u6211\u7231\u4F60",".\u043C\u043E\u0441\u043A\u0432\u0430",".\u0438\u0441\u043F\u044B\u0442\u0430\u043D\u0438\u0435",".\u049B\u0430\u0437",".\u043A\u0430\u0442\u043E\u043B\u0438\u043A",".\u043E\u043D\u043B\u0430\u0439\u043D",".\u0441\u0430\u0439\u0442",".\u8054\u901A",".\u0441\u0440\u0431",".\u0431\u0433",".\u0431\u0435\u043B","\u200F.\u05E7\u05D5\u05DD\u200E",".\u65F6\u5C1A",".\u5FAE\u535A",".\uD14C\uC2A4\uD2B8",".\u6DE1\u9A6C\u9521",".\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3",".\u043E\u0440\u0433",".\u0928\u0947\u091F",".\u30B9\u30C8\u30A2",".\u30A2\u30DE\u30BE\u30F3",".\uC0BC\uC131",".\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD",".\u5546\u6807",".\u5546\u5E97",".\u5546\u57CE",".\u0434\u0435\u0442\u0438",".\u043C\u043A\u0434","\u200F.\u05D8\u05E2\u05E1\u05D8\u200E",".\u0435\u044E",".\u30DD\u30A4\u30F3\u30C8",".\u65B0\u95FB",".\u5DE5\u884C",".\u5BB6\u96FB","\u200F.\u0643\u0648\u0645\u200E",".\u4E2D\u6587\u7F51",".\u4E2D\u4FE1",".\u4E2D\u56FD",".\u4E2D\u570B",".\u5A31\u4E50",".\u8C37\u6B4C",".\u0C2D\u0C3E\u0C30\u0C24\u0C4D",".\u0DBD\u0D82\u0D9A\u0DCF",".\u96FB\u8A0A\u76C8\u79D1",".\u8D2D\u7269",".\u6E2C\u8A66",".\u30AF\u30E9\u30A6\u30C9",".\u0AAD\u0ABE\u0AB0\u0AA4",".\u901A\u8CA9",".\u092D\u093E\u0930\u0924\u092E\u094D",".\u092D\u093E\u0930\u0924",".\u092D\u093E\u0930\u094B\u0924","\u200F.\u0622\u0632\u0645\u0627\u06CC\u0634\u06CC\u200E",".\u0BAA\u0BB0\u0BBF\u0B9F\u0BCD\u0B9A\u0BC8",".\u7F51\u5E97",".\u0938\u0902\u0917\u0920\u0928",".\u9910\u5385",".\u7F51\u7EDC",".\u043A\u043E\u043C",".\u0443\u043A\u0440",".\u9999\u6E2F",".\u4E9A\u9A6C\u900A",".\u8BFA\u57FA\u4E9A",".\u98DF\u54C1",".\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE",".\u98DE\u5229\u6D66","\u200F.\u0625\u062E\u062A\u0628\u0627\u0631\u200E",".\u53F0\u6E7E",".\u53F0\u7063",".\u624B\u8868",".\u624B\u673A",".\u043C\u043E\u043D","\u200F.\u0627\u0644\u062C\u0632\u0627\u0626\u0631\u200E","\u200F.\u0639\u0645\u0627\u0646\u200E","\u200F.\u0627\u0631\u0627\u0645\u0643\u0648\u200E","\u200F.\u0627\u06CC\u0631\u0627\u0646\u200E","\u200F.\u0627\u0644\u0639\u0644\u064A\u0627\u0646\u200E","\u200F.\u0627\u062A\u0635\u0627\u0644\u0627\u062A\u200E","\u200F.\u0627\u0645\u0627\u0631\u0627\u062A\u200E","\u200F.\u0628\u0627\u0632\u0627\u0631\u200E","\u200F.\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627\u200E","\u200F.\u067E\u0627\u06A9\u0633\u062A\u0627\u0646\u200E","\u200F.\u0627\u0644\u0627\u0631\u062F\u0646\u200E","\u200F.\u0645\u0648\u0628\u0627\u064A\u0644\u064A\u200E","\u200F.\u0628\u0627\u0631\u062A\u200E","\u200F.\u0628\u06BE\u0627\u0631\u062A\u200E","\u200F.\u0627\u0644\u0645\u063A\u0631\u0628\u200E","\u200F.\u0627\u0628\u0648\u0638\u0628\u064A\u200E","\u200F.\u0627\u0644\u0628\u062D\u0631\u064A\u0646\u200E","\u200F.\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629\u200E","\u200F.\u0680\u0627\u0631\u062A\u200E","\u200F.\u0643\u0627\u062B\u0648\u0644\u064A\u0643\u200E","\u200F.\u0633\u0648\u062F\u0627\u0646\u200E","\u200F.\u0647\u0645\u0631\u0627\u0647\u200E","\u200F.\u0639\u0631\u0627\u0642\u200E","\u200F.\u0645\u0644\u064A\u0633\u064A\u0627\u200E",".\u6FB3\u9580",".\uB2F7\uCEF4",".\u653F\u5E9C","\u200F.\u0634\u0628\u0643\u0629\u200E","\u200F.\u0628\u064A\u062A\u0643\u200E","\u200F.\u0639\u0631\u0628\u200E",".\u10D2\u10D4",".\u673A\u6784",".\u7EC4\u7EC7\u673A\u6784",".\u5065\u5EB7",".\u0E44\u0E17\u0E22","\u200F.\u0633\u0648\u0631\u064A\u0629\u200E",".\u62DB\u8058",".\u0440\u0443\u0441",".\u0440\u0444",".\u73E0\u5B9D","\u200F.\u062A\u0648\u0646\u0633\u200E",".\u5927\u62FF",".\u0EA5\u0EB2\u0EA7",".\u307F\u3093\u306A",".\u30B0\u30FC\u30B0\u30EB",".\u03B5\u03C5",".\u03B5\u03BB",".\u4E16\u754C",".\u66F8\u7C4D",".\u0D2D\u0D3E\u0D30\u0D24\u0D02",".\u0A2D\u0A3E\u0A30\u0A24",".\u7F51\u5740",".\uB2F7\uB137",".\u30B3\u30E0",".\u5929\u4E3B\u6559",".\u6E38\u620F",".verm\xF6gensberater",".verm\xF6gensberatung",".\u4F01\u4E1A",".\u4FE1\u606F",".\u5609\u91CC\u5927\u9152\u5E97",".\u5609\u91CC","\u200F.\u0645\u0635\u0631\u200E","\u200F.\u0642\u0637\u0631\u200E",".\u5E7F\u4E1C",".\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8",".\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE",".\u0570\u0561\u0575",".\u65B0\u52A0\u5761","\u200F.\u0641\u0644\u0633\u0637\u064A\u0646\u200E",".\u30C6\u30B9\u30C8",".\u653F\u52A1",".xperia",".xxx",".xyz",".yachts",".yahoo",".yamaxun",".yandex",".ye",".yodobashi",".yoga",".yokohama",".you",".youtube",".yt",".yun",".za",".zappos",".zara",".zero",".zip",".zippo",".zm",".zone",".zuerich",".zw",".ac.vn",".ae.org",".biz.fj",".biz.pl",".biz.tr",".biz.tt",".biz.vn",".br.com",".cn.com",".co.ag",".co.at",".co.ci",".co.cm",".co.com",".co.cr",".co.de",".co.ee",".co.gg",".co.gy",".co.hu",".co.id",".co.il",".co.im",".co.in",".co.ir",".co.it",".co.je",".co.ke",".co.kr",".co.lc",".co.ls",".co.na",".co.ni",".co.nl",".co.no",".co.nu",".co.nz",".co.om",".co.rs",".co.th",".co.tt",".co.tz",".co.ug",".co.uk",".co.uz",".co.ve",".co.vi",".co.za",".com.ag",".com.ai",".com.ar",".com.au",".com.bb",".com.bd",".com.bm",".com.bo",".com.br",".com.bs",".com.bz",".com.cm",".com.cn",".com.co",".com.cu",".com.cy",".com.de",".com.do",".com.ec",".com.ee",".com.es",".com.fj",".com.gi",".com.gp",".com.gr",".com.gt",".com.gy",".com.hk",".com.hn",".com.hr",".com.ht",".com.kn",".com.lb",".com.lc",".com.lv",".com.mk",".com.mt",".com.mx",".com.my",".com.na",".com.ng",".com.ni",".com.om",".com.pa",".com.pe",".com.ph",".com.pk",".com.pl",".com.pr",".com.pt",".com.py",".com.ro",".com.ru",".com.sb",".com.se",".com.sg",".com.so",".com.sv",".com.tr",".com.tt",".com.tw",".com.ua",".com.uy",".com.uz",".com.vc",".com.ve",".com.vi",".com.vn",".de.com",".edu.vn",".eu.com",".firm.in",".gb.net",".gen.in",".gen.tr",".gr.com",".health.vn",".ind.in",".info.ec",".info.fj",".info.pl",".info.tt",".info.vn",".int.vn",".jpn.com",".ltd.uk",".me.uk",".msk.ru",".name.fj",".name.tr",".name.tt",".name.vn",".net.ag",".net.ai",".net.ar",".net.au",".net.bb",".net.bm",".net.bo",".net.br",".net.bz",".net.cm",".net.cn",".net.co",".net.fj",".net.gg",".net.gp",".net.gt",".net.gy",".net.hn",".net.in",".net.je",".net.lc",".net.lv",".net.my",".net.ni",".net.nz",".net.pl",".net.pr",".net.ru",".net.so",".net.tt",".net.vc",".net.vi",".net.vn",".nom.ag",".nom.es",".nom.ni",".off.ai",".or.at",".or.kr",".org.ag",".org.ai",".org.bb",".org.bm",".org.bo",".org.bz",".org.cn",".org.es",".org.fj",".org.gg",".org.gt",".org.hn",".org.il",".org.in",".org.je",".org.lc",".org.ls",".org.lv",".org.na",".org.ni",".org.nz",".org.pl",".org.pr",".org.ru",".org.so",".org.tt",".org.uk",".org.vc",".org.ve",".org.vi",".org.vn",".plc.uk",".pro.fj",".pro.tt",".pro.vn",".radio.am",".radio.fm",".ru.com",".sa.com",".se.net",".tv.br",".uk.com",".uk.net",".us.com",".us.org",".waw.pl",".web.id",".web.tr",".za.com"];var X=class{validDomainExtensions;constructor(){this.validDomainExtensions=ue}isDomainExtension(e){let r=e.substring(e.lastIndexOf("."));return this.isValidExtension(r)}domain(e){if(!this.isValidInput(e))return"";let r=this.extractAndCleanDomain(e);return this.parseMainDomain(r)}isValidInput(e){return e!=null&&e.length>=7}extractAndCleanDomain(e){let r;return e.startsWith("http://")||e.startsWith("https://")?r=new URL(e).hostname:e.startsWith("//")?r=new URL(`https:${e}`).hostname:r="~"+e,r.includes("~")&&(r=this.removeUrlFragments(r),r=r.replace("~","")),r}removeUrlFragments(e){return e.includes("@")?e.split("@")[1]:e.includes("/")?e.split("/")[0]:e.includes("?")?e.split("?")[0]:e.includes("#")?e.split("#")[0]:e}parseMainDomain(e){let r=e.split("."),t=r.length;if(t===2){let n=e.substring(e.lastIndexOf("."));return this.isValidExtension(n)?e:""}return t>=3?this.handleComplexDomain(r):""}handleComplexDomain(e){let r=this.getLastThreeParts(e),[,t,n]=r.split("."),o="."+t,s="."+n;return this.isValidExtension(o)&&this.isValidExtension(s)?r:this.isValidExtension(s)?t+"."+n:""}getLastThreeParts(e){return e.length===3?e.join("."):e.slice(-3).join(".")}isValidExtension(e){return this.validDomainExtensions.includes(e.toLowerCase().trim())}};var me=[{name:"Sohu",mx:"a.sohu.com"},{name:"Sohu",mx:"sohu.com"},{name:"Strato",mx:".rzone.de"},{name:"Strato",mx:".strato.de"},{name:"21cn",mx:".21cn.com"},{name:"163",mx:".netease.com"},{name:"Netvigator",mx:".netvigator.com"},{name:"139",mx:".mail.139.com"},{name:"Nate",mx:".nate.com"},{name:"Naver",mx:".naver.com"},{name:"Daum",mx:".daum.kgslb.com"},{name:"Daum",mx:".hanmail.net"},{name:"Ziggo",mx:".ziggo.nl"},{name:"QQ",mx:".qq.com"},{name:"263.net",mx:"263.net"},{name:"Sina",mx:".vip.sina.com"},{name:"Sina",mx:".sina.com.cn"},{name:"Aruba",mx:".aruba.it"},{name:"Aliyun",mx:".mxhichina.com"},{name:"Plala Webmail",mx:".plala.or.jp"},{name:"AOL",mx:"mx-aol.mail"},{name:"Turbify",mx:"mx-biz.mail.am0.yahoodns.net"},{name:"Turbify",mx:"mx-biz.mail.am.yahoodns.net"},{name:"Turbify",mx:"mx-biz.mail.am1.yahoodns.net"},{name:"Turbify",mx:"mx1.biz.mail.yahoo.com"},{name:"Turbify",mx:"mx5.biz.mail.yahoo.com"},{name:"Turbify",mx:".biz.mail.yahoo.com"},{name:"AT&T",mx:".prodigy.net"},{name:"Yahoo",mx:".yahoo."},{name:"Yahoo",mx:".yahoodns.net"},{name:"Zoho",mx:".zoho.com"},{name:"Sitestar Webmail",mx:".sitestar.everyone.net",webmail:"https://webmail.sitestar.net"},{name:"Outlook Web App (OWA)",mx:".serverdata.net",webmail:"https://owa.serverdata.net"},{name:"1and1",mx:".1and1."},{name:"Outlook",mx:"olc.protection.outlook.com"},{name:"Outlook",mx:".mail.outlook.com"},{name:"Outlook",mx:".hotmail."},{name:"Office 365",mx:"mail.protection.outlook.com"},{name:"Office 365",mx:".outlook.com"},{name:"Office 365",mx:".office365.com"},{name:"Gmail",mx:".google.com"},{name:"Mail.ru",mx:".mail.ru"},{name:"Mail.com",mx:".mail.com"},{name:"Earthlink",mx:".earthlink.net"},{name:"Earthlink",mx:".oxsus-vadesecure.net"},{name:"Rackspace",mx:".emailsrvr.com"},{name:"Mimecast",mx:".mimecast.com"},{name:"Godaddy",mx:".secureserver.net"},{name:"Comcast",mx:".comcast.net"},{name:"Office 365",mx:".ppe-hosted.com"},{name:"Office 365",mx:".gslb.pphosted.com"},{name:"Office 365",mx:".arsmtp.com"},{name:"Zoho",mx:".zoho.com"},{name:"ProtonMail",mx:"mail.protonmail.ch"},{name:"Facebook",mx:".facebook.com"},{name:"163",mx:".netease.com"},{name:"163",mx:".163.com"},{name:"263",mx:".263.net"},{name:"Aliyun",mx:".alibaba.com"},{name:"Aliyun",mx:".aliyun.com"},{name:"Amazon",mx:".amazon.com"},{name:"Amazon",mx:".amazonaws.com"},{name:"Anazana",mx:".anazana.com"},{name:"CoreMail",mx:".icoremail.net"},{name:"GMX",mx:".gmx.net"},{name:"GMX",mx:".gmx.com"},{name:"Hinet",mx:".hinet."},{name:"iCloud",mx:".icloud.com"},{name:"Iinet",mx:".iinet.net.au"},{name:"Namecheap",mx:".registrar-servers.com"},{name:"Network Solutions",mx:".myregisteredsite.com"},{name:"Orange",mx:".orange."},{name:"QQ",mx:".qq.com"},{name:"Synaq",mx:".synaq."},{name:"Web.de",mx:".web.de"},{name:"Yandex",mx:".yandex."},{name:"Zmail",mx:".zmail."},{name:"Strato",mx:".strato.de"},{name:"Apple",mx:".apple.com"},{name:"Cox Webmail",mx:".cloudfilter.net"},{name:"Fastmail",mx:".messagingengine.com"},{name:"Mailgun",mx:".mailgun.org"},{name:"Postmark",mx:".pmta.postmarkapp.com"},{name:"SendGrid",mx:".sendgrid.net"},{name:"Elastic Email",mx:".elasticemail.com"},{name:"Zendesk",mx:".zendesk.com"},{name:"Intermedia",mx:".intermedia.net"},{name:"Mailjet",mx:".mailjet.com"},{name:"Front",mx:".frontapp.com"},{name:"Unknown",mx:".................."},{name:"Webmail",mx:".................."},{name:"Zimbra",mx:".................."},{name:"Others",mx:".................."},{name:"Aruba",mx:".................."},{name:"Alibaba",mx:".................."},{name:"IBM",mx:".................."},{name:"Digitalocean",mx:".................."},{name:"AWS Partner",mx:".................."},{name:"Microsoft Exchange",mx:".................."},{name:"Oracle Cloud",mx:".................."},{name:"Roundcube Webmail",mx:".................."},{name:"cPanel Webmail",mx:".................."},{name:"Yahoo (External Provider)",mx:".................."}],de=["automation","products","product","product.info","product-info","productinfo","alert","alerts","automated","rewards","clientpayments","invites","page-notification","page-notification-noreply","friendupdates","groupupdates","messages","advertise","advertise-noreply","advertise-no.reply","advertise-no-reply","advertise-no_reply","reminders","reminder","notification","paymentnotification","payment-notification","payment.notification","payment_notification","registration","registrations","signup","sign-up","signin","sign-in","email","e-mail","no_reply","whatsinstore","ship","nobody","no-body","publishers","whatsinstore","hosting-security","hosting","accountstatus","account-status","account_status","hosting-service","billing","hostingsecurity","robot","hosting-services","hostingservices","hostingservice","no.reply","paypal","no-reply","feedback","example","donotreply","noreply","do-not-reply","bot","do_not_reply","market.news","clientservices","list","client-services","client.services","abuse","accessibilty","accessibility","accounting","account","accounts.payable","adm","admin","admissions","ads","advertise","advisor","agency","agent","all","api","ask","attorneys","award","bills","bizdev","biz-dev","board","booking","bookings","buzz","callcenter","career","careers","ceo","cfa","chat","chief","comments","contact","contacts","copyright","corporate","courses","customer.services","customercare","customer-care","customerservice","customer-service","customerservicecenter","customer-service-center","custserv","data","design","development","director","directory","domains","editor","editorial","emails","engineering","enquiries","enquiry","event","events","everyone","feedback","finance","foundation","frontdesk","ftp","general","global","grouplegal","group-legal","groups","help","helpdesk","home","hotel","hr","human.resources","humanresources","human-resources","info","information","inquiries","inquiry","instructor","insurance","internet","interoperability","invest","investor","investorrelations","investor-relations","job","jobs","lawoffice","law-office","leasing","legal","library","listing","logistics","mail","mailbox","mailroom","main","manager","marketing","mayor","media","medicalqueries","medical-queries","meetings","members","membership","membersupport","member-support","merchant","misc","news","newsroom","noc","offers","office","online","operations","organiser","organizer","pastor","pharma","photos","politics","postmaster","pr","president","prime","privacy","projects","promos","publicaffairs","public-affairs","publisher","quality","query","questions","radio","realestate","real-estate","realtor","receptionist","redaction","register","remove","repairs","request","research","reservation","reservations","reserve","reserveroom","reserve-room","root","sale","sales","school","schools","secretary","security","service","shopping","spam","staff","subscribe","suggest","support","survey","talent","tourism","tours","trading","training","transfer","travel","travels","unsubscribe","usa","usenet","user","username","users","uucp","verify","volunteer","web","webinfo","webmaster","website","wwinfo","www","www-validator"],pe=["yahoo.com","ameritech.net","att.net","bellsouth.net","currently.com","flash.net","nvbell.net","pacbell.net","prodigy.net","sbcglobal.net","snet.net","swbell.net","wans.net","worldnet.att.net","ymail.com","y7mail.com","yahoo.at","yahoo.be","yahoo.bg","yahoo.ca","yahoo.cl","yahoo.co.hu","yahoo.co.id","yahoo.co.il","yahoo.co.in","yahoo.co.kr","yahoo.co.nz","yahoo.co.th","yahoo.co.uk","yahoo.co.za","yahoo.com.ar","yahoo.com.au","yahoo.com.br","yahoo.com.co","yahoo.com.hk","yahoo.com.hr","yahoo.com.mx","yahoo.com.my","yahoo.com.pe","yahoo.com.ph","yahoo.com.sg","yahoo.com.tr","yahoo.com.tw","yahoo.com.ua","yahoo.com.ve","yahoo.com.vn","yahoo.cz","yahoo.de","yahoo.dk","yahoo.ee","yahoo.es","yahoo.fi","yahoo.fr","yahoo.gr","yahoo.hr","yahoo.hu","yahoo.ie","yahoo.in","yahoo.it","yahoo.lt","yahoo.lv","yahoo.nl","yahoo.no","yahoo.pl","yahoo.pt","yahoo.ro","yahoo.rs","yahoo.se","yahoo.si","yahoo.sk","yahoogroups.co.kr","yahoogroups.com.cn","yahoogroups.com.sg","yahoogroups.com.tw","yahoogrupper.dk","yahoogruppi.it","yahooxtra.co.nz"],he=["fuck","shit","scam","hack","crack","spam","phishing","test","testing","fake","null","undefined"];async function F(a,e={}){let{params:r,timeout:t=3e4,maxRetries:n=3,retryDelay:o=1e3,maxRedirects:s=5,validateStatus:i=d=>d>=200&&d<300,onRetry:c,...u}=e,m=a;if(r){let d=new URLSearchParams;Object.entries(r).forEach(([p,g])=>{d.append(p,typeof g=="boolean"?g?"1":"0":String(g))}),m+=(m.includes("?")?"&":"?")+d.toString()}let l=null;for(let d=1;d<=n+1;d++){let p=new AbortController,g=t>0?setTimeout(()=>p.abort(),t):null;try{let v=await fetch(m,{...u,signal:p.signal,redirect:s===0?"error":"follow"});if(g&&clearTimeout(g),!i(v.status))throw new Error(`HTTP ${v.status}: ${v.statusText}`);let A=v.headers.get("content-type")||"",w;return A.includes("application/json")?w=await v.json():A.includes("text/")?w=await v.text():w=await v.arrayBuffer(),{data:w,status:v.status,statusText:v.statusText,finalUrl:v.url,headers:v.headers,retryCount:d-1}}catch(v){if(g&&clearTimeout(g),l=v,d>n||v.name==="AbortError"&&d===1||v.message.includes("HTTP")&&!v.message.includes("5"))break;c&&c(v,d),d<=n&&await new Promise(A=>setTimeout(A,o*d))}}throw l}var S=class a{resolver;findIpKeys=[];rejectList=["page-notification-noreply","reply.craigslist.org",".craigslist.org",".paypal.","@paypal.","advertise-noreply",".intuit.com","advertise-no.reply","advertise-no-reply","advertise-no_reply"];roles=de;records=me;yahooList=pe;domain;IpInfo=null;static instance=null;dns;validationConfig={enableDeepValidation:!1,ipResolver:{findip:{enabled:!1,apiKey:[]},ipApi:!1}};constructor(e){let{options:r,dns:t}=e||{},{enableDeepValidation:n=!1,ipResolver:o={findip:{enabled:!1,apiKey:[]},ipApi:!1}}=r||{};this.validationConfig={enableDeepValidation:n,ipResolver:{...this.validationConfig.ipResolver,...o}},this.dns=new x(t),this.resolver={resolve:this.dns.resolve},this.domain=new X}static create(e){return a.instance||(a.instance=new a(e)),a.instance}async getMxRecords(e){if(this.is_email(e)&&!e.includes("@")||!e.includes("."))throw new Error("Invalid email address or domain name");let r=e.includes("@")&&e.split("@")[1]||e;try{let t=await this.resolver.resolve(r,"MX");if(t&&Array.isArray(t)&&t.length>0)return t.map(n=>n.exchange);throw new Error(`Failed to resolve MX records for ${r}`)}catch(t){throw t}}async validate(e,r=!1){if(!this.isEmail(e))return{success:!1,type:"Syntanx",email:e.toLowerCase()};if(he.some(o=>e.toLowerCase().split("@")[1].includes(o)))return{success:!1,type:"Rejected",email:e.toLowerCase()};if(this.rejectList.some(o=>e.includes(o)))return{success:!1,type:"Rejected",email:e.toLowerCase()};let n=e.includes("@")&&e.split("@")[1]||e;try{let o=await this.getMxRecords(n),s=[];if(o&&o.length>0){for(let c of o){let u=c.endsWith(".")&&c.startsWith(".")?c.substring(1,c.length-1):c.startsWith(".")?c.substring(1):c.endsWith(".")?c.substring(0,c.length-1):c;if(u.includes(" ")&&u.split(" ").length===2){let m=u.split(" ")[1];m&&s.push(m)}else u.includes(" ")||s.push(u);for(let m of this.records)if(u.includes(m.mx))return m.name==="Yahoo"?this.yahooList.includes(n)?{success:!0,data:{provider:m.name,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}}:u.includes("mx-biz.mail")?{success:!0,data:{provider:"Turbify",email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l))}}:{success:!0,data:{provider:"Yahoo (External Provider)",email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l))}}:{success:!0,data:{provider:m.name,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}}}if(!r||!this.validationConfig.enableDeepValidation)return{success:!0,data:{provider:"Unknown",email:e.toLowerCase(),role:!!this.roles.find(c=>e.toLowerCase().startsWith(c))}};let i=await this.domain_check(n);if(i=i.status?i:await this.domain_check(n,!0),i.status)return{success:!0,data:{provider:i.type,email:e.toLowerCase(),role:!!this.roles.find(c=>e.toLowerCase().startsWith(c)),...i.webmail&&{webmail:i.webmail}}};{let c=!1;for(let u of s){if(c)break;let m=await this.domain_check(u,!0);if(m.status)return{success:!0,data:{provider:m.type,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}};if(typeof u<"u"&&u.length>0)for(u=u.substring(u.indexOf(".")+1);this.domain.domain(u).length>3;){if(m=await this.domain_check(u,!0),m.status)return{success:!0,data:{provider:m.type,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}};u=u.includes(".")?u.substring(u.indexOf(".")+1):""}}return i=await this.dnsLookup(s),i.status?{success:!0,data:{provider:i.type,email:e.toLowerCase(),role:!!this.roles.find(u=>e.toLowerCase().startsWith(u)),...i.webmail&&{webmail:i.webmail}}}:{success:!0,data:{provider:"Unknown",email:e.toLowerCase(),role:!!this.roles.find(u=>e.toLowerCase().startsWith(u))}}}}else return{success:!1,type:"Invalid",email:e.toLowerCase()}}catch(o){return{success:!1,type:"Error",email:e.toLowerCase(),message:o.message}}}is_wale4r_zimbra(e){try{let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(t&&t[1]&&t[1].includes("zimbra web client"))return!0;let n=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,o;for(;(o=n.exec(e))!==null;){let s=o[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(s&&(s.includes(" zimbra ")||s.includes(" zimbra")||s.includes("zimbra ")))return!0}return!1}catch{return!1}}is_zimbra(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("zimbra web"))return!0;let o=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(i&&(i.includes(" zimbra ")||i.includes(" zimbra")||i.includes("zimbra ")))return!0}return r?.toLowerCase()?.includes("www.zimbra.com")===!0||r?.toLowerCase()?.includes("zimbra.com")===!0||r?.toLowerCase()?.includes("zimbra collaboration")===!0||r?.toLowerCase()?.includes("zimbra web")===!0||r?.toLowerCase()?.includes("'zimbra'")===!0||r?.toLowerCase()?.includes('"zimbra"')===!0||r?.toLowerCase()?.includes(">zimbra<")===!0}catch{return!1}}is_webmail(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("webmail"))return!0;let o=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(i&&(i.includes(" webmail ")||i.includes(" webmail")||i.includes("webmail ")))return!0}return r?.toLowerCase()?.includes("web.mail")===!0||r?.toLowerCase()?.includes("web-mail")===!0||r?.toLowerCase()?.includes("web mail")===!0||r?.toLowerCase()?.includes("zimbra web")===!0||r?.toLowerCase()?.includes("'webmail'")===!0||r?.toLowerCase()?.includes('"webmail"')===!0||r?.toLowerCase()?.includes(">webmail<")===!0}catch{return!1}}is_owa(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("outlook"))return!0;let o=/<div[^>]*class=["'][^"']*(?:signInHeader|signInExpl)[^"']*["'][^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/div>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"");if(i&&(i.includes(" Outlook ")||i.includes(" Outlook")||i.includes("Outlook")))return!0}return r?.toLowerCase()?.includes("/owa/auth/")===!0||r?.toLowerCase()?.includes("/owa/auth.owa")===!0}catch{return!1}}is_cPanel(e){try{let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(t&&t[1]&&t[1].includes("cpanel redirect"))return!0;let n=/<[^>]*class=["'][^"']*copyright[^"']*["'][^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/[^>]*>/gi,o;for(;(o=n.exec(e))!==null;){let c=o[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(c&&t&&t[1]&&t[1].includes("webmail")&&c.includes("cpanel"))return!0}let s=/<[^>]*class=["'][^"']*main-logo[^"']*["'][^>]*src=["']([^"']*)["'][^>]*>/gi,i;for(;(i=s.exec(e))!==null;){let c=i[1]?.toLowerCase();if(c&&t&&t[1]&&t[1].includes("webmail")&&c.includes("cpanel"))return!0}return this.parseJSCpanel(e)}catch{return!1}}toToken(e){let r=n(e,"west"),t=n(e,"east");if(r&&t){let s=o(r),i=o(t);return s+i}return null;function n(s,i){let c=s.indexOf(i+"=");if(c===-1)return null;let u=s.indexOf("+",c);if(u===-1)return null;let m=s.indexOf("(",u);if(m===-1)return null;let l=0,d=m;for(;d<s.length;d++){let p=s[d];if(p==="(")l++;else if(p===")"&&(l--,l===0))break}return s.substring(m,d+1)}function o(s){let i=s.startsWith("(")&&s.endsWith(")")?s.slice(1,-1):s,c=/\([^()]+\)/g,u=i.match(c);if(u){let m=u.map(l=>1+(l.slice(1,-1).match(/!!\[\]/g)||[]).length);return Number(m.join(""))}else return 0}}parseJSCpanel(e){let t=/<form[^>]*id=["']wsidchk-form["'][^>]*action=["']([^"']*)["'][^>]*>/i.exec(e);return!!(this.toToken(e)&&t&&t[1])}is_Roundcube(e,r){let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);return t&&t[1]&&t[1].includes("roundcube")&&t[1].includes("webmail")?!0:r?.toLowerCase()?.includes("roundcube")===!0}async domain_check(e,r=!1,t=0){if(typeof e!="string")return{status:!1,type:""};e=e.includes("@")?e.split("@")[1]:e;let n=[`https://mail.${e}`,`https://webmail.${e}`,`https://mail1.${e}`,`https://mailhost.${e}`,`https://${e}/webmail`,`https://${e}/zimbra`,`https://${e}/mail`],o=r?e.includes("/")?`https://${e.substring(e.lastIndexOf("/"),e.length).replaceAll("/","")}`:`https://${e}`:n[t];try{if(!o)return{status:!1,type:""};let s=await F(o,{timeout:2500,maxRetries:2}),i=s.data,c=s.finalUrl;if(typeof i=="string"&&i.length>500){if(this.is_wale4r_zimbra(i))return{status:!0,type:"Zimbra",webmail:c};if(this.is_owa(i,i))return{status:!0,type:c.includes("login.microsoftonline.com")?"Office (OWA)":c.includes("login.live.com")?"Outlook":"Outlook Web App (OWA)",webmail:c};if(this.is_zimbra(i,i))return{status:!0,type:"Zimbra",webmail:c};if(this.is_cPanel(i))return{status:!0,type:"cPanel Webmail",webmail:c};if(this.is_Roundcube(i,i))return{status:!0,type:"Roundcube Webmail",webmail:c};if(this.is_webmail(i,i))return{status:!0,type:"Webmail",webmail:c}}return t<6&&!r?(t++,await this.domain_check(e,r,t)):{status:!1,type:""}}catch{return{status:!1,type:""}}}async resolveA(e){try{return await this.resolver.resolve(e,"A")}catch{return[]}}async dnsLookup(e){if(e&&Array.isArray(e)&&e.length>0)for(let r of e)try{let t=await this.resolveA(r);if(t&&Array.isArray(t))for(let n of t){if(this.IpInfo=await this.ipApi(n),this.IpInfo!==null)return this.returnDNS(this.IpInfo.isp,this.IpInfo.org);if(this.IpInfo=await this.findIp(n),this.IpInfo!==null)return this.returnDNS(this.IpInfo.traits.isp,this.IpInfo.traits.autonomous_system_organization)}break}catch{}return{status:!1,type:"Others"}}returnDNS(e,r){return e.toLowerCase().includes("amazon")||r.toLowerCase().includes("amazon")?{status:!0,type:"AWS Partner"}:e.toLowerCase().includes("microsoft")||r.toLowerCase().includes("microsoft")?{status:!0,type:"Microsoft Exchange"}:e.toLowerCase().replaceAll(" ","").includes("digitalocean")||r.toLowerCase().replaceAll(" ","").includes("digitalocean")?{status:!0,type:"Digitalocean"}:e.toLowerCase().includes("oracle")||r.toLowerCase().includes("oracle")?{status:!0,type:"Oracle Cloud"}:e.toLowerCase().includes("ibm")||r.toLowerCase().includes("ibm")?{status:!0,type:"IBM"}:e.toLowerCase().includes("alibaba")||r.toLowerCase().includes("alibaba")?{status:!0,type:"Alibaba"}:e.toLowerCase().includes("aruba")||r.toLowerCase().includes("aruba")?{status:!0,type:"Aruba"}:{status:!1,type:"Others"}}async ipApi(e){try{if(!this.validationConfig?.ipResolver?.findip?.enabled||!this.validationConfig.enableDeepValidation)return null;let r=await F(`http://ip-api.com/json/${e}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,zip,lat,lon,timezone,currency,isp,org,as,reverse,mobile,proxy,hosting,query`);return JSON.parse(r.data)}catch{return null}}async findIp(e){if(!this.validationConfig?.ipResolver?.findip?.enabled||!this.validationConfig.enableDeepValidation||!this.validationConfig?.ipResolver?.findip?.apiKey?.length)return null;let r=this.findIpKeys[Math.floor(Math.random()*this.findIpKeys.length)];try{let t=await F(`https://api.findip.net/${e}/?token=${r}`);return JSON.parse(t.data)}catch{return null}}isEmail(e){if(!this.is_email(e))return!1;let[r,t]=e.split("@");if(!r||!t||r.length<2||t.length<5)return!1;let n=35,o=3,s=3,i=3,c=2,u=55;return!(r.length>=n||r.split("-").length>o||r.split(".").length>s||t.split(".").length>i||t.split("-").length>c||!this.domain.isDomainExtension(e)||e.length>=u)}is_email(e){return!e.includes("@")||!e.includes(".")||e.split("@").length>2||e.lastIndexOf("@")>e.lastIndexOf(".")?!1:/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,9})+$/.test(e)}};var I=["native","google","cloudflare","quad9"],x=class a{providers;static __emailValidator=null;constructor(e={}){this.providers=new Map,this.initializeProviders(e)}static createEmailValidator(e){return a.__emailValidator||(a.__emailValidator=S.create(e)),a.__emailValidator}static get emailValidator(){return a.__emailValidator?a.__emailValidator:a.createEmailValidator()}initializeProviders(e){this.providers.set("native",new V(e.native)),this.providers.set("google",new $(e.google)),this.providers.set("cloudflare",new B(e.cloudflare)),this.providers.set("quad9",new Y(e.quad9))}setConfig(e,r){if(!this.isValidProvider(e))throw new C(e);let t=this.providers.get(e);t&&t.updateConfig(r)}setConfigs(e){e.native&&this.setConfig("native",e.native),e.google&&this.setConfig("google",e.google),e.cloudflare&&this.setConfig("cloudflare",e.cloudflare),e.quad9&&this.setConfig("quad9",e.quad9)}isValidProvider(e){return["native","google","cloudflare","quad9"].includes(e)}validateHostname(e){if(!e||typeof e!="string"||e.trim().length===0)throw new k(e)}getEnabledProviders(){let e=[];for(let[r,t]of this.providers)t.enabled&&e.push(r);return e}selectProvider(e){if(e){if(!this.isValidProvider(e))throw new C(e);if(!this.providers.get(e)?.enabled)throw new N(e);return e}let r=this.getEnabledProviders();if(r.length===0)throw new T;let t=r.filter(o=>{let s=this.providers.get(o);return s&&!s.isFull}),n=t.length>0?t:r;return n[this.rnd(0,n.length-1)]}rnd=(e=0,r=Number.MAX_VALUE)=>Math.floor(Math.random()*(r-e+1))+e;getProvider(e){return this.providers.get(e)}resolve4=async(e,r,t)=>{this.validateHostname(e),t=I.includes(r||"")?r:t;let n=this.selectProvider(t);return r=I.includes(r||"")?void 0:r,this.getProvider(n).resolve4(e,r)};resolve6=async(e,r,t)=>{this.validateHostname(e),t=I.includes(r||"")?r:t;let n=this.selectProvider(t);return r=I.includes(r||"")?void 0:r,this.getProvider(n).resolve6(e,r)};resolveAny=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveAny(e)};async resolveCaa(e,r){this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveCaa(e)}resolveCname=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveCname(e)};resolveMx=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveMx(e)};resolveNaptr=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveNaptr(e)};resolveNs=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveNs(e)};resolvePtr=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolvePtr(e)};resolveSoa=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveSoa(e)};resolveSrv=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveSrv(e)};resolveTlsa=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveTlsa(e)};resolveTxt=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveTxt(e)};reverse=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).reverse(e)};resolve=async(e,r,t)=>{this.validateHostname(e),t=I.includes(r||"")?r:t;let n=this.selectProvider(t);return r=I.includes(r||"")?"A":r,this.getProvider(n).resolve(e,r)}};var D=null,E=["native","google","cloudflare","quad9"],b=()=>(D||(D=new x),D),Oe=()=>{D=null},De=a=>{D=a},Me=async(a,e,r)=>(r=E.includes(e||"")?e:r,e=E.includes(e||"")?void 0:e,b().resolve4(a,e,r)),_e=async(a,e,r)=>(r=E.includes(e||"")?e:r,e=E.includes(e||"")?void 0:e,b().resolve6(a,e,r)),je=async(a,e)=>b().resolveAny(a,e),He=async(a,e)=>b().resolveCaa(a,e),We=async(a,e)=>b().resolveCname(a,e),Ve=async(a,e)=>b().resolveMx(a,e),Ue=async(a,e)=>b().resolveNaptr(a,e),$e=async(a,e)=>b().resolveNs(a,e),Be=async(a,e)=>b().resolvePtr(a,e),Ye=async(a,e)=>b().resolveSoa(a,e),Xe=async(a,e)=>b().resolveSrv(a,e),Fe=async(a,e)=>b().resolveTlsa(a,e),Qe=async(a,e)=>b().resolveTxt(a,e),Ge=async(a,e)=>b().reverse(a,e),Ze=(a,e,r)=>b().resolve(a,E.includes(e||"")?"A":e,E.includes(e||"")?e:r),Je=x;0&&(module.exports={EmailValidator,InvalidHostnameError,InvalidProviderError,NoEnabledProvidersError,ProviderNotEnabledError,YqDns,resetDefaultResolver,resolve,resolve4,resolve6,resolveAny,resolveCaa,resolveCname,resolveMx,resolveNaptr,resolveNs,resolvePtr,resolveSoa,resolveSrv,resolveTlsa,resolveTxt,reverse,setDefaultResolver});
2
2
  /**
3
3
  * yq-dns - A promise-based DNS resolver with multiple DoH providers
4
4
  *
package/dist/index.d.ts CHANGED
@@ -703,6 +703,10 @@ declare const records: readonly [
703
703
  readonly name: "Yahoo";
704
704
  readonly mx: ".yahoo.";
705
705
  },
706
+ {
707
+ readonly name: "Yahoo";
708
+ readonly mx: ".yahoodns.net";
709
+ },
706
710
  {
707
711
  readonly name: "Zoho";
708
712
  readonly mx: ".zoho.com";
@@ -1040,7 +1044,37 @@ export declare class EmailValidator {
1040
1044
  private dns;
1041
1045
  private validationConfig;
1042
1046
  private constructor();
1043
- static create(config?: ValidationConfig, dnsConfig?: YqConfig): EmailValidator;
1047
+ /**
1048
+ * Creates or returns an existing instance of the EmailValidator (Singleton pattern)
1049
+ * @param config - Configuration object for the EmailValidator
1050
+ * @param config.options - Optional validation configuration settings
1051
+ * @param config.options.enableDeepValidation - Enable deep validation with additional DNS lookups
1052
+ * @param config.options.ipResolver - Configure IP resolution settings
1053
+ * @param config.options.ipResolver.findip - Settings for findip.net API
1054
+ * @param config.options.ipResolver.ipApi - Enable/disable ipApi service
1055
+ * @param config.dns - Optional DNS configuration settings
1056
+ * @returns The singleton instance of EmailValidator
1057
+ * @example
1058
+ * // Create with default settings
1059
+ * const validator = EmailValidator.create();
1060
+ *
1061
+ * // Create with custom configuration
1062
+ * const validator = EmailValidator.create({
1063
+ * options: {
1064
+ * enableDeepValidation: true,
1065
+ * ipResolver: {
1066
+ * findip: {
1067
+ * enabled: true,
1068
+ * apiKey: ['your-api-key']
1069
+ * }
1070
+ * }
1071
+ * }
1072
+ * });
1073
+ */
1074
+ static create(config?: {
1075
+ options?: ValidationConfig;
1076
+ dns?: YqConfig;
1077
+ }): EmailValidator;
1044
1078
  private getMxRecords;
1045
1079
  /**
1046
1080
  * Validates an email address and determines its provider/service
@@ -1227,7 +1261,40 @@ export declare class YqDns {
1227
1261
  * ```
1228
1262
  */
1229
1263
  constructor(config?: YqConfig);
1230
- static createEmailValidator(config?: ValidationConfig, dnsConfig?: YqConfig): EmailValidator;
1264
+ /**
1265
+ * Creates or returns a singleton instance of EmailValidator.
1266
+ * If an instance already exists, returns the existing instance.
1267
+ * If no instance exists, creates a new one with the provided configuration.
1268
+ *
1269
+ * @param config - Configuration object for the EmailValidator
1270
+ * @param config.options - Optional validation configuration settings
1271
+ * @param config.options.allowIPv6 - Whether to allow IPv6 addresses in email domains
1272
+ * @param config.options.allowInternational - Whether to allow international email addresses
1273
+ * @param config.options.checkDNS - Whether to perform DNS lookups during validation
1274
+ * @param config.dns - Optional DNS configuration for the validator's DNS resolver
1275
+ * @returns An EmailValidator instance
1276
+ *
1277
+ * @example
1278
+ * ```typescript
1279
+ * // Create with default configuration
1280
+ * const validator = YqDns.createEmailValidator();
1281
+ *
1282
+ * // Create with custom configuration
1283
+ * const validator = YqDns.createEmailValidator({
1284
+ * options: {
1285
+ * allowIPv6: true,
1286
+ * checkDNS: true
1287
+ * },
1288
+ * dns: {
1289
+ * google: { enabled: true }
1290
+ * }
1291
+ * });
1292
+ * ```
1293
+ */
1294
+ static createEmailValidator(config?: {
1295
+ options?: ValidationConfig;
1296
+ dns?: YqConfig;
1297
+ }): EmailValidator;
1231
1298
  static get emailValidator(): EmailValidator;
1232
1299
  /**
1233
1300
  * Initializes all DNS providers with their configurations.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var we=Object.create;var se=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var Pe=Object.getPrototypeOf,Ce=Object.prototype.hasOwnProperty;var Ae=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports);var Te=(a,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of xe(e))!Ce.call(a,n)&&n!==r&&se(a,n,{get:()=>e[n],enumerable:!(t=Re(e,n))||t.enumerable});return a};var ke=(a,e,r)=>(r=a!=null?we(Pe(a)):{},Te(e||!a||!a.__esModule?se(r,"default",{value:a,enumerable:!0}):r,a));var oe=Ae((ze,G)=>{"use strict";var Ne=Object.prototype.hasOwnProperty,f="~";function S(){}Object.create&&(S.prototype=Object.create(null),new S().__proto__||(f=!1));function Se(a,e,r){this.fn=a,this.context=e,this.once=r||!1}function ne(a,e,r,t,n){if(typeof r!="function")throw new TypeError("The listener must be a function");var o=new Se(r,t||a,n),s=f?f+e:e;return a._events[s]?a._events[s].fn?a._events[s]=[a._events[s],o]:a._events[s].push(o):(a._events[s]=o,a._eventsCount++),a}function H(a,e){--a._eventsCount===0?a._events=new S:delete a._events[e]}function y(){this._events=new S,this._eventsCount=0}y.prototype.eventNames=function(){var e=[],r,t;if(this._eventsCount===0)return e;for(t in r=this._events)Ne.call(r,t)&&e.push(f?t.slice(1):t);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};y.prototype.listeners=function(e){var r=f?f+e:e,t=this._events[r];if(!t)return[];if(t.fn)return[t.fn];for(var n=0,o=t.length,s=new Array(o);n<o;n++)s[n]=t[n].fn;return s};y.prototype.listenerCount=function(e){var r=f?f+e:e,t=this._events[r];return t?t.fn?1:t.length:0};y.prototype.emit=function(e,r,t,n,o,s){var i=f?f+e:e;if(!this._events[i])return!1;var c=this._events[i],u=arguments.length,m,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,t),!0;case 4:return c.fn.call(c.context,r,t,n),!0;case 5:return c.fn.call(c.context,r,t,n,o),!0;case 6:return c.fn.call(c.context,r,t,n,o,s),!0}for(l=1,m=new Array(u-1);l<u;l++)m[l-1]=arguments[l];c.fn.apply(c.context,m)}else{var d=c.length,p;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),u){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,r);break;case 3:c[l].fn.call(c[l].context,r,t);break;case 4:c[l].fn.call(c[l].context,r,t,n);break;default:if(!m)for(p=1,m=new Array(u-1);p<u;p++)m[p-1]=arguments[p];c[l].fn.apply(c[l].context,m)}}return!0};y.prototype.on=function(e,r,t){return ne(this,e,r,t,!1)};y.prototype.once=function(e,r,t){return ne(this,e,r,t,!0)};y.prototype.removeListener=function(e,r,t,n){var o=f?f+e:e;if(!this._events[o])return this;if(!r)return H(this,o),this;var s=this._events[o];if(s.fn)s.fn===r&&(!n||s.once)&&(!t||s.context===t)&&H(this,o);else{for(var i=0,c=[],u=s.length;i<u;i++)(s[i].fn!==r||n&&!s[i].once||t&&s[i].context!==t)&&c.push(s[i]);c.length?this._events[o]=c.length===1?c[0]:c:H(this,o)}return this};y.prototype.removeAllListeners=function(e){var r;return e?(r=f?f+e:e,this._events[r]&&H(this,r)):(this._events=new S,this._eventsCount=0),this};y.prototype.off=y.prototype.removeListener;y.prototype.addListener=y.prototype.on;y.prefixed=f;y.EventEmitter=y;typeof G<"u"&&(G.exports=y)});import*as h from"node:dns/promises";var Z=ke(oe(),1);var I=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},J=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},ie=a=>globalThis.DOMException===void 0?new J(a):new DOMException(a),ae=a=>{let e=a.reason===void 0?ie("This operation was aborted."):a.reason;return e instanceof Error?e:ie(e)};function K(a,e){let{milliseconds:r,fallback:t,message:n,customTimers:o={setTimeout,clearTimeout}}=e,s,i,u=new Promise((m,l)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(e.signal){let{signal:p}=e;p.aborted&&l(ae(p)),i=()=>{l(ae(p))},p.addEventListener("abort",i,{once:!0})}if(r===Number.POSITIVE_INFINITY){a.then(m,l);return}let d=new I;s=o.setTimeout.call(void 0,()=>{if(t){try{m(t())}catch(p){l(p)}return}typeof a.cancel=="function"&&a.cancel(),n===!1?m():n instanceof Error?l(n):(d.message=n??`Promise timed out after ${r} milliseconds`,l(d))},r),(async()=>{try{m(await a)}catch(p){l(p)}})()}).finally(()=>{u.clear(),i&&e.signal&&e.signal.removeEventListener("abort",i)});return u.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},u}function ee(a,e,r){let t=0,n=a.length;for(;n>0;){let o=Math.trunc(n/2),s=t+o;r(a[s],e)<=0?(t=++s,n-=o+1):n=o}return t}var E=class{#e=[];enqueue(e,r){r={priority:0,...r};let t={priority:r.priority,id:r.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=r.priority){this.#e.push(t);return}let n=ee(this.#e,t,(o,s)=>s.priority-o.priority);this.#e.splice(n,0,t)}setPriority(e,r){let t=this.#e.findIndex(o=>o.id===e);if(t===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[n]=this.#e.splice(t,1);this.enqueue(n.run,{priority:r,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return this.#e.length}};var R=class extends Z.default{#e;#i;#o=0;#p;#a;#h=0;#t;#c;#r;#g;#s=0;#l;#n;#v;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:E,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#i=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#p=e.intervalCap,this.#a=e.interval,this.#r=new e.queueClass,this.#g=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#v=e.throwOnTimeout===!0,this.#n=e.autoStart===!1}get#w(){return this.#i||this.#o<this.#p}get#R(){return this.#s<this.#l}#x(){this.#s--,this.#u(),this.emit("next")}#P(){this.#f(),this.#y(),this.#c=void 0}get#C(){let e=Date.now();if(this.#t===void 0){let r=this.#h-e;if(r<0)this.#o=this.#e?this.#s:0;else return this.#c===void 0&&(this.#c=setTimeout(()=>{this.#P()},r)),!0}return!1}#u(){if(this.#r.size===0)return this.#t&&clearInterval(this.#t),this.#t=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#n){let e=!this.#C;if(this.#w&&this.#R){let r=this.#r.dequeue();return r?(this.emit("active"),r(),e&&this.#y(),!0):!1}}return!1}#y(){this.#i||this.#t!==void 0||(this.#t=setInterval(()=>{this.#f()},this.#a),this.#h=Date.now()+this.#a)}#f(){this.#o===0&&this.#s===0&&this.#t&&(clearInterval(this.#t),this.#t=void 0),this.#o=this.#e?this.#s:0,this.#m()}#m(){for(;this.#u(););}get concurrency(){return this.#l}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#l=e,this.#m()}async#A(e){return new Promise((r,t)=>{e.addEventListener("abort",()=>{t(e.reason)},{once:!0})})}setPriority(e,r){this.#r.setPriority(e,r)}async add(e,r={}){return r.id??=(this.#b++).toString(),r={timeout:this.timeout,throwOnTimeout:this.#v,...r},new Promise((t,n)=>{this.#r.enqueue(async()=>{this.#s++,this.#o++;try{r.signal?.throwIfAborted();let o=e({signal:r.signal});r.timeout&&(o=K(Promise.resolve(o),{milliseconds:r.timeout})),r.signal&&(o=Promise.race([o,this.#A(r.signal)]));let s=await o;t(s),this.emit("completed",s)}catch(o){if(o instanceof I&&!r.throwOnTimeout){t();return}n(o),this.emit("error",o)}finally{this.#x()}},r),this.emit("add"),this.#u()})}async addAll(e,r){return Promise.all(e.map(async t=>this.add(t,r)))}start(){return this.#n?(this.#n=!1,this.#m(),this):this}pause(){this.#n=!0}clear(){this.#r=new this.#g}async onEmpty(){this.#r.size!==0&&await this.#d("empty")}async onSizeLessThan(e){this.#r.size<e||await this.#d("next",()=>this.#r.size<e)}async onIdle(){this.#s===0&&this.#r.size===0||await this.#d("idle")}async#d(e,r){return new Promise(t=>{let n=()=>{r&&!r()||(this.off(e,n),t())};this.on(e,n)})}get size(){return this.#r.size}sizeBy(e){return this.#r.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#n}};var W=class{queue;config;constructor(e={}){this.config={enabled:e.enabled??!0,limit:e.limit&&e.limit.concurrency>0?e.limit:{concurrency:10,interval:1e3,intervalCap:750,carryoverConcurrencyCount:!0}};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval,r.intervalCap=this.config.limit.intervalCap,r.carryoverConcurrencyCount=typeof r.carryoverConcurrencyCount=="boolean"?r.carryoverConcurrencyCount:!0),this.queue=new R(r)}updateConfig(e){this.config={enabled:e.enabled??this.config.enabled,limit:e.limit??this.config.limit};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval,r.intervalCap=this.config.limit.intervalCap),this.queue=new R(r)}get enabled(){return this.config.enabled}get queueSize(){return this.queue.size}get isFull(){let e=this.queue.pending+this.queue.size,r=this.config.limit.concurrency;return e>=r}async resolve4(e,r){return r?this.queue.add(async()=>h.resolve4(e,r)):this.queue.add(async()=>h.resolve4(e))}async resolve6(e,r){return r?this.queue.add(async()=>h.resolve6(e,r)):this.queue.add(async()=>h.resolve6(e))}async resolveAny(e){return this.queue.add(async()=>h.resolveAny(e))}async resolveCaa(e){return this.queue.add(async()=>h.resolveCaa(e))}async resolveCname(e){return this.queue.add(async()=>h.resolveCname(e))}async resolveMx(e){return this.queue.add(async()=>h.resolveMx(e))}async resolveNaptr(e){return this.queue.add(async()=>h.resolveNaptr(e))}async resolveNs(e){return this.queue.add(async()=>h.resolveNs(e))}async resolvePtr(e){return this.queue.add(async()=>h.resolvePtr(e))}async resolveSoa(e){return this.queue.add(async()=>h.resolveSoa(e))}async resolveSrv(e){return this.queue.add(async()=>h.resolveSrv(e))}async resolveTlsa(e){return this.queue.add(async()=>h.resolveTlsa(e))}async resolveTxt(e){return this.queue.add(async()=>h.resolveTxt(e))}async reverse(e){return this.queue.add(async()=>h.reverse(e))}async resolve(e,r){return this.queue.add(async()=>h.resolve(e,r))}};var Ie={FORMERR:"DNS server claims query was misformatted",SERVFAIL:"DNS server returned general failure",ENOTFOUND:"Domain name not found",NOTIMP:"DNS server does not implement requested operation",REFUSED:"DNS server refused query",YXDOMAIN:"Name exists when it should not",YXRRSET:"RR set exists when it should not",NXRRSET:"RR set that should exist does not",NOTAUTH:"Server not authoritative for zone",NOTZONE:"Name not contained in zone"},Ee={1:"FORMERR",2:"SERVFAIL",3:"ENOTFOUND",4:"NOTIMP",5:"REFUSED",6:"YXDOMAIN",7:"YXRRSET",8:"NXRRSET",9:"NOTAUTH",10:"NOTZONE"};function V(a,e,r){let t=Ee[e]||`DNSSTATUS_${e}`,n=`query${r}`,o=`${n} ${a} ${t}: ${Ie[t]||"Unrecognized DNS error code"}`,s=new Error(o);return s.code=t,s.errno=e,s.syscall=n,s.hostname=a,s}var x=class{queue;config;dohRequest=null;constructor(e={},r){e.limit=e&&e.limit&&e.limit.concurrency>0?e.limit:r,this.config={enabled:e.enabled??!0,limit:e.limit??{concurrency:5}};let t={concurrency:this.config.limit?.concurrency||10};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(t.interval=this.config.limit.interval||1e3,t.intervalCap=this.config.limit.intervalCap||100),this.queue=new R(t)}updateConfig(e){this.config={enabled:e.enabled??this.config.enabled,limit:e.limit&&e.limit.concurrency>0?e.limit:this.config.limit};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval||1e3,r.intervalCap=this.config.limit.intervalCap||5),this.queue=new R(r)}get enabled(){return this.config.enabled}get queueSize(){return this.queue.size}get isFull(){let e=this.queue.pending+this.queue.size,r=this.config.limit.concurrency;return e>=r}parseDoHResponse(e,r,t=!1){if(!e.Answer||e.Answer.length===0)return[];let n=i=>i.endsWith(".")?i.substring(0,i.length-1):i,o=i=>{let c=l=>typeof l=="object"&&l!==null&&!Array.isArray(l),u=l=>typeof l=="string"&&/^".*"$/.test(l)?l.slice(1,-1):l,m=l=>{let d={};for(let[p,g]of Object.entries(l))g!==void 0&&(d[p]=u(g));return d};return Array.isArray(i)&&i.every(c)?i.map(m):c(i)?m(i):i},s=e.Answer.filter(i=>{let c={A:1,AAAA:28,ANY:255,CAA:257,CNAME:5,MX:15,NAPTR:35,NS:2,PTR:12,SOA:6,SRV:33,TLSA:52,TXT:16};return i.type===c[r]||r==="ANY"});switch(r){case"A":case"AAAA":case"CNAME":case"NS":case"PTR":return t?s.map(i=>({address:i.data,ttl:i.TTL})):s.map(i=>i.data);case"MX":return o(s.map(i=>{let[c,u]=i.data.split(" "),m={exchange:n(u||""),priority:parseInt(c||"0",10)};return t?{...m,ttl:i.TTL}:m}));case"SRV":return o(s.map(i=>{let[c,u,m,l]=i.data.split(" "),d={priority:parseInt(c||"0",10),weight:parseInt(u||"0",10),port:parseInt(m||"0",10),name:l||""};return t?{...d,ttl:i.TTL}:d}));case"SOA":if(s.length>0){let[i,c,u,m,l,d,p]=s[0].data.split(" "),g={nsname:i,hostmaster:c,serial:parseInt(u,10),refresh:parseInt(m,10),retry:parseInt(l,10),expire:parseInt(d,10),minttl:parseInt(p,10)};return o(t?{...g,ttl:s[0].TTL}:g)}throw new Error("No SOA record found");case"TXT":return o(s.map(i=>i.data.split('" "').map(c=>c.replace(/^"|"$/g,""))));case"CAA":return o(s.map(i=>{let[c,u,m]=i.data.split(" "),l={critical:parseInt(c,10),issue:u==="issue"?m:void 0,issuewild:u==="issuewild"?m:void 0,iodef:u==="iodef"?m:void 0};return t?{...l,ttl:i.TTL}:l}));case"NAPTR":return o(s.map(i=>{let[c,u,m,l,d,p]=i.data.split(" "),g={order:parseInt(c||"0",10),preference:parseInt(u||"0",10),flags:m||"",service:l||"",regexp:d||"",replacement:p||""};return t?{...g,ttl:i.TTL}:g}));case"TLSA":return o(s.map(i=>{let[c,u,m]=i.data.split(" "),l={certUsage:parseInt(c||"0",10),selector:parseInt(u||"0",10),match:parseInt(m||"0",10),data:new ArrayBuffer(0)};return t?{...l,ttl:i.TTL}:l}));case"ANY":return o(s.map(i=>({type:i.type,data:i.data,ttl:i.TTL})));default:return s.map(i=>i.data)}}async resolve4(e,r){return this.queue.add(async()=>{let t=await this.dohRequest(e,"A");return this.parseDoHResponse(t,"A",r?.ttl)})}async resolve6(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"AAAA");return this.parseDoHResponse(n,"AAAA",r?.ttl)})||[]}async resolveAny(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"ANY");return this.parseDoHResponse(t,"ANY")})||[]}async resolveCaa(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"CAA");return this.parseDoHResponse(t,"CAA")})||[]}async resolveCname(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"CNAME");return this.parseDoHResponse(t,"CNAME")})||[]}async resolveMx(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"MX");return this.parseDoHResponse(t,"MX")})||[]}async resolveNaptr(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"NAPTR");return this.parseDoHResponse(t,"NAPTR")})||[]}async resolveNs(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"NS");return this.parseDoHResponse(t,"NS")})||[]}async resolvePtr(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"PTR");return this.parseDoHResponse(t,"PTR")})||[]}async resolveSoa(e){return this.queue.add(async()=>{let r=await this.dohRequest(e,"SOA");return this.parseDoHResponse(r,"SOA")})}async resolveSrv(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"SRV");return this.parseDoHResponse(t,"SRV")})||[]}async resolveTlsa(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"TLSA");return this.parseDoHResponse(n,"TLSA",r?.ttl)})||[]}async resolveTxt(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"TXT");return this.parseDoHResponse(n,"TXT",r?.ttl)})||[]}async reverse(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"PTR");return this.parseDoHResponse(n,"PTR",r?.ttl)})||[]}async resolve(e,r="A",t){return await this.queue.add(async()=>{let o=await this.dohRequest(e,r);return this.parseDoHResponse(o,r,t?.ttl)})||(r==="SOA"?{}:[])}};var U=class extends x{baseUrl="https://dns.google/resolve";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:500,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}async request(e,r){let t=new URL(this.baseUrl);t.searchParams.set("name",e),t.searchParams.set("type",r);let n=await fetch(t.toString(),{headers:{Accept:"application/dns-json"}});if(!n.ok)throw new Error(`Google DoH request failed: ${n.status} ${n.statusText}`);let o=await n.json();if(o.Status!==0)throw V(e,o.Status,r);return o}};var $=class extends x{baseUrl="https://cloudflare-dns.com/dns-query";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:650,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}async request(e,r){let t=new URL(this.baseUrl);t.searchParams.set("name",e),t.searchParams.set("type",r);let n=await fetch(t.toString(),{headers:{Accept:"application/dns-json"}});if(!n.ok)throw new Error(`Cloudflare DoH request failed: ${n.status} ${n.statusText}`);let o=await n.json();if(o.Status!==0)throw V(e,o.Status,r);return o}};var qe={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,NAPTR:35,CAA:257,TLSA:52,ANY:255},B=class extends x{baseUrl="https://dns.quad9.net/dns-query";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:500,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}encodeDNSQuery(e,r){let t=qe[r.toUpperCase()];if(!t)throw new Error(`Unsupported DNS type: ${r}`);let n=e.split("."),o=Buffer.concat([...n.map(u=>{let m=Buffer.alloc(u.length+1);return m.writeUInt8(u.length,0),m.write(u,1),m}),Buffer.from([0])]),s=Buffer.alloc(12);s.writeUInt16BE(Math.floor(Math.random()*65535),0),s.writeUInt16BE(256,2),s.writeUInt16BE(1,4);let i=Buffer.alloc(2);i.writeUInt16BE(t,0);let c=Buffer.alloc(2);return c.writeUInt16BE(1,0),Buffer.concat([s,o,i,c])}readName(e,r){let t=[],n=!1,o=0;for(;;){let s=e[r];if((s&192)===192){let i=e.readUInt16BE(r)&16383;n||(o=r+2),r=i,n=!0}else if(s===0){r++;break}else t.push(e.toString("utf8",r+1,r+1+s)),r+=s+1}return[t.join("."),n?o:r]}decodeRData(e,r,t,n){switch(t){case 1:return[Array.from(e.slice(r,r+4)).join("."),r+4];case 28:{let o=[];for(let s=0;s<8;s++)o.push(e.readUInt16BE(r+s*2).toString(16));return[o.join(":"),r+16]}case 2:case 5:case 12:{let[o,s]=this.readName(e,r);return[o,s]}case 15:{let o=e.readUInt16BE(r),[s,i]=this.readName(e,r+2);return[`${o} ${s}`,i]}case 16:{let o=e.readUInt8(r);return[e.toString("utf8",r+1,r+1+o),r+1+o]}case 6:{let[o,s]=this.readName(e,r),[i,c]=this.readName(e,s),u=e.readUInt32BE(c),m=e.readUInt32BE(c+4),l=e.readUInt32BE(c+8),d=e.readUInt32BE(c+12),p=e.readUInt32BE(c+16);return[`${o} ${i} ${u} ${m} ${l} ${d} ${p}`,c+20]}default:return[e.slice(r,r+n).toString("hex"),r+n]}}async request(e,r){let t=this.encodeDNSQuery(e,r),n=await fetch(this.baseUrl,{method:"POST",headers:{"Content-Type":"application/dns-message",Accept:"application/dns-message"},body:t}),o=Buffer.from(await n.arrayBuffer()),s=o.readUInt16BE(2),i=o.readUInt16BE(4),c=o.readUInt16BE(6),u=o.readUInt16BE(8),m=o.readUInt16BE(10),l=(s&256)>0,d=(s&512)>0,p=(s&128)>0,g=(s&32)>0,v=(s&16)>0,C=s&15,w=12,re=[];for(let M=0;M<i;M++){let[_,N]=this.readName(o,w),Q=o.readUInt16BE(N);re.push({name:_,type:Q}),w=N+4}let F=M=>{let _=[];for(let N=0;N<M;N++){let[Q,j]=this.readName(o,w),te=o.readUInt16BE(j),ve=o.readUInt32BE(j+4),ye=o.readUInt16BE(j+8),[fe,be]=this.decodeRData(o,j+10,te,ye);_.push({name:Q,type:te,TTL:ve,data:fe}),w=be}return _},pe=F(c),he=F(u),ge=F(m);return{Status:C,TC:d,RD:l,RA:p,AD:g,CD:v,Question:re,Answer:pe,Authority:he,Additional:ge}}};var q=class extends Error{constructor(){super("No DNS providers are enabled"),this.name="NoEnabledProvidersError"}},L=class extends Error{constructor(e){super(`Invalid hostname: ${e}`),this.name="InvalidHostnameError"}},z=class extends Error{constructor(e){super(`Provider '${e}' is not enabled`),this.name="ProviderNotEnabledError"}},A=class extends Error{constructor(e){super(`Invalid provider: ${e}`),this.name="InvalidProviderError"}};var ce=[".aaa",".aarp",".abarth",".abb",".abbott",".abbvie",".abc",".able",".abogado",".abudhabi",".ac",".academy",".accenture",".accountant",".accountants",".aco",".active",".actor",".ad",".adac",".ads",".adult",".ae",".aeg",".aero",".aetna",".af",".afamilycompany",".afl",".africa",".ag",".agakhan",".agency",".ai",".aig",".aigo",".airbus",".airforce",".airtel",".akdn",".al",".alfaromeo",".alibaba",".alipay",".allfinanz",".allstate",".ally",".alsace",".alstom",".am",".amazon",".americanexpress",".americanfamily",".amex",".amfam",".amica",".amsterdam",".an",".analytics",".android",".anquan",".anz",".ao",".aol",".apartments",".app",".apple",".aq",".aquarelle",".ar",".arab",".aramco",".archi",".army",".arpa",".art",".arte",".as",".asda",".asia",".associates",".at",".athleta",".attorney",".au",".auction",".audi",".audible",".audio",".auspost",".author",".auto",".autos",".avianca",".aw",".aws",".ax",".axa",".az",".azure",".ba",".baby",".baidu",".banamex",".bananarepublic",".band",".bank",".bar",".barcelona",".barclaycard",".barclays",".barefoot",".bargains",".baseball",".basketball",".bauhaus",".bayern",".bb",".bbc",".bbt",".bbva",".bcg",".bcn",".bd",".be",".beats",".beauty",".beer",".bentley",".berlin",".best",".bestbuy",".bet",".bf",".bg",".bh",".bharti",".bi",".bible",".bid",".bike",".bing",".bingo",".bio",".biz",".bj",".bl",".black",".blackfriday",".blanco",".blockbuster",".blog",".bloomberg",".blue",".bm",".bms",".bmw",".bn",".bnl",".bnpparibas",".bo",".boats",".boehringer",".bofa",".bom",".bond",".boo",".book",".booking",".boots",".bosch",".bostik",".boston",".bot",".boutique",".box",".bq",".br",".bradesco",".bridgestone",".broadway",".broker",".brother",".brussels",".bs",".bt",".budapest",".bugatti",".build",".builders",".business",".buy",".buzz",".bv",".bw",".by",".bz",".bzh",".ca",".cab",".cafe",".cal",".call",".calvinklein",".cam",".camera",".camp",".cancerresearch",".canon",".capetown",".capital",".capitalone",".car",".caravan",".cards",".care",".career",".careers",".cars",".cartier",".casa",".case",".caseih",".cash",".casino",".cat",".catering",".catholic",".cba",".cbn",".cbre",".cbs",".cc",".cd",".ceb",".center",".ceo",".cern",".cf",".cfa",".cfd",".cg",".ch",".chanel",".channel",".charity",".chase",".chat",".cheap",".chintai",".chloe",".christmas",".chrome",".chrysler",".church",".ci",".cipriani",".circle",".cisco",".citadel",".citi",".citic",".city",".cityeats",".ck",".cl",".claims",".cleaning",".click",".clinic",".clinique",".clothing",".cloud",".club",".clubmed",".cm",".cn",".co",".coach",".codes",".coffee",".college",".cologne",".com",".comcast",".commbank",".community",".company",".compare",".computer",".comsec",".condos",".construction",".consulting",".contact",".contractors",".cooking",".cookingchannel",".cool",".coop",".corsica",".country",".coupon",".coupons",".courses",".cpa",".cr",".credit",".creditcard",".creditunion",".cricket",".crown",".crs",".cruise",".cruises",".csc",".cu",".cuisinella",".cv",".cw",".cx",".cy",".cymru",".cyou",".cz",".dabur",".dad",".dance",".data",".date",".dating",".datsun",".day",".dclk",".dds",".de",".deal",".dealer",".deals",".degree",".delivery",".dell",".deloitte",".delta",".democrat",".dental",".dentist",".desi",".design",".dev",".dhl",".diamonds",".diet",".digital",".direct",".directory",".discount",".discover",".dish",".diy",".dj",".dk",".dm",".dnp",".do",".docs",".doctor",".dodge",".dog",".doha",".domains",".doosan",".dot",".download",".drive",".dtv",".dubai",".duck",".dunlop",".duns",".dupont",".durban",".dvag",".dvr",".dz",".earth",".eat",".ec",".eco",".edeka",".edu",".education",".ee",".eg",".eh",".email",".emerck",".energy",".engineer",".engineering",".enterprises",".epost",".epson",".equipment",".er",".ericsson",".erni",".es",".esq",".estate",".esurance",".et",".etisalat",".eu",".eurovision",".eus",".events",".everbank",".exchange",".expert",".exposed",".express",".extraspace",".fage",".fail",".fairwinds",".faith",".family",".fan",".fans",".farm",".farmers",".fashion",".fast",".fedex",".feedback",".ferrari",".ferrero",".fi",".fiat",".fidelity",".fido",".film",".final",".finance",".financial",".fire",".firestone",".firmdale",".fish",".fishing",".fit",".fitness",".fj",".fk",".flickr",".flights",".flir",".florist",".flowers",".flsmidth",".fly",".fm",".fo",".foo",".food",".foodnetwork",".football",".ford",".forex",".forsale",".forum",".foundation",".fox",".fr",".free",".fresenius",".frl",".frogans",".frontdoor",".frontier",".ftr",".fujitsu",".fujixerox",".fun",".fund",".furniture",".futbol",".fyi",".ga",".gal",".gallery",".gallo",".gallup",".game",".games",".gap",".garden",".gay",".gb",".gbiz",".gd",".gdn",".ge",".gea",".gent",".genting",".george",".gf",".gg",".ggee",".gh",".gi",".gift",".gifts",".gives",".giving",".gl",".glade",".glass",".gle",".global",".globo",".gm",".gmail",".gmbh",".gmo",".gmx",".gn",".godaddy",".gold",".goldpoint",".golf",".goo",".goodhands",".goodyear",".goog",".google",".gop",".got",".gov",".gp",".gq",".gr",".grainger",".graphics",".gratis",".green",".gripe",".grocery",".group",".gs",".gt",".gu",".guardian",".gucci",".guge",".guide",".guitars",".guru",".gw",".gy",".hair",".hamburg",".hangout",".haus",".hbo",".hdfc",".hdfcbank",".health",".healthcare",".help",".helsinki",".here",".hermes",".hgtv",".hiphop",".hisamitsu",".hitachi",".hiv",".hk",".hkt",".hm",".hn",".hockey",".holdings",".holiday",".homedepot",".homegoods",".homes",".homesense",".honda",".honeywell",".horse",".hospital",".host",".hosting",".hot",".hoteles",".hotels",".hotmail",".house",".how",".hr",".hsbc",".ht",".htc",".hu",".hughes",".hyatt",".hyundai",".ibm",".icbc",".ice",".icu",".id",".ie",".ieee",".ifm",".iinet",".ikano",".il",".im",".imamat",".imdb",".immo",".immobilien",".in",".inc",".industries",".infiniti",".info",".ing",".ink",".institute",".insurance",".insure",".int",".intel",".international",".intuit",".investments",".io",".ipiranga",".iq",".ir",".irish",".is",".iselect",".ismaili",".ist",".istanbul",".it",".itau",".itv",".iveco",".iwc",".jaguar",".java",".jcb",".jcp",".je",".jeep",".jetzt",".jewelry",".jio",".jlc",".jll",".jm",".jmp",".jnj",".jo",".jobs",".joburg",".jot",".joy",".jp",".jpmorgan",".jprs",".juegos",".juniper",".kaufen",".kddi",".ke",".kerryhotels",".kerrylogistics",".kerryproperties",".kfh",".kg",".kh",".ki",".kia",".kids",".kim",".kinder",".kindle",".kitchen",".kiwi",".km",".kn",".koeln",".komatsu",".kosher",".kp",".kpmg",".kpn",".kr",".krd",".kred",".kuokgroup",".kw",".ky",".kyoto",".kz",".la",".lacaixa",".ladbrokes",".lamborghini",".lamer",".lancaster",".lancia",".lancome",".land",".landrover",".lanxess",".lasalle",".lat",".latino",".latrobe",".law",".lawyer",".lb",".lc",".lds",".lease",".leclerc",".lefrak",".legal",".lego",".lexus",".lgbt",".li",".liaison",".lidl",".life",".lifeinsurance",".lifestyle",".lighting",".like",".lilly",".limited",".limo",".lincoln",".linde",".link",".lipsy",".live",".living",".lixil",".lk",".llc",".llp",".loan",".loans",".locker",".locus",".loft",".lol",".london",".lotte",".lotto",".love",".lpl",".lplfinancial",".lr",".ls",".lt",".ltd",".ltda",".lu",".lundbeck",".lupin",".luxe",".luxury",".lv",".ly",".ma",".macys",".madrid",".maif",".maison",".makeup",".man",".management",".mango",".map",".market",".marketing",".markets",".marriott",".marshalls",".maserati",".mattel",".mba",".mc",".mcd",".mcdonalds",".mckinsey",".md",".me",".med",".media",".meet",".melbourne",".meme",".memorial",".men",".menu",".meo",".merckmsd",".metlife",".mf",".mg",".mh",".miami",".microsoft",".mil",".mini",".mint",".mit",".mitsubishi",".mk",".ml",".mlb",".mls",".mm",".mma",".mn",".mo",".mobi",".mobile",".mobily",".moda",".moe",".moi",".mom",".monash",".money",".monster",".montblanc",".mopar",".mormon",".mortgage",".moscow",".moto",".motorcycles",".mov",".movie",".movistar",".mp",".mq",".mr",".ms",".msd",".mt",".mtn",".mtpc",".mtr",".mu",".museum",".music",".mutual",".mutuelle",".mv",".mw",".mx",".my",".mz",".na",".nab",".nadex",".nagoya",".name",".nationwide",".natura",".navy",".nba",".nc",".ne",".nec",".net",".netbank",".netflix",".network",".neustar",".new",".newholland",".news",".next",".nextdirect",".nexus",".nf",".nfl",".ng",".ngo",".nhk",".ni",".nico",".nike",".nikon",".ninja",".nissan",".nissay",".nl",".no",".nokia",".northwesternmutual",".norton",".now",".nowruz",".nowtv",".np",".nr",".nra",".nrw",".ntt",".nu",".nyc",".nz",".obi",".observer",".off",".office",".okinawa",".olayan",".olayangroup",".oldnavy",".ollo",".om",".omega",".one",".ong",".onl",".online",".onyourside",".ooo",".open",".oracle",".orange",".org",".organic",".orientexpress",".origins",".osaka",".otsuka",".ott",".ovh",".pa",".page",".pamperedchef",".panasonic",".panerai",".paris",".pars",".partners",".parts",".party",".passagens",".pay",".pccw",".pe",".pet",".pf",".pfizer",".pg",".ph",".pharmacy",".phd",".philips",".phone",".photo",".photography",".photos",".physio",".piaget",".pics",".pictet",".pictures",".pid",".pin",".ping",".pink",".pioneer",".pizza",".pk",".pl",".place",".play",".playstation",".plumbing",".plus",".pm",".pn",".pnc",".pohl",".poker",".politie",".porn",".post",".pr",".pramerica",".praxi",".press",".prime",".pro",".prod",".productions",".prof",".progressive",".promo",".properties",".property",".protection",".pru",".prudential",".ps",".pt",".pub",".pw",".pwc",".py",".qa",".qpon",".quebec",".quest",".qvc",".racing",".radio",".raid",".re",".read",".realestate",".realtor",".realty",".recipes",".red",".redstone",".redumbrella",".rehab",".reise",".reisen",".reit",".reliance",".ren",".rent",".rentals",".repair",".report",".republican",".rest",".restaurant",".review",".reviews",".rexroth",".rich",".richardli",".ricoh",".rightathome",".ril",".rio",".rip",".rmit",".ro",".rocher",".rocks",".rodeo",".rogers",".room",".rs",".rsvp",".ru",".rugby",".ruhr",".run",".rw",".rwe",".ryukyu",".sa",".saarland",".safe",".safety",".sakura",".sale",".salon",".samsclub",".samsung",".sandvik",".sandvikcoromant",".sanofi",".sap",".sapo",".sarl",".sas",".save",".saxo",".sb",".sbi",".sbs",".sc",".sca",".scb",".schaeffler",".schmidt",".scholarships",".school",".schule",".schwarz",".science",".scjohnson",".scor",".scot",".sd",".se",".search",".seat",".secure",".security",".seek",".select",".sener",".services",".ses",".seven",".sew",".sex",".sexy",".sfr",".sg",".sh",".shangrila",".sharp",".shaw",".shell",".shia",".shiksha",".shoes",".shop",".shopping",".shouji",".show",".showtime",".shriram",".si",".silk",".sina",".singles",".site",".sj",".sk",".ski",".skin",".sky",".skype",".sl",".sling",".sm",".smart",".smile",".sn",".sncf",".so",".soccer",".social",".softbank",".software",".sohu",".solar",".solutions",".song",".sony",".soy",".spa",".space",".spiegel",".sport",".spot",".spreadbetting",".sr",".srl",".srt",".ss",".st",".stada",".staples",".star",".starhub",".statebank",".statefarm",".statoil",".stc",".stcgroup",".stockholm",".storage",".store",".stream",".studio",".study",".style",".su",".sucks",".supplies",".supply",".support",".surf",".surgery",".suzuki",".sv",".swatch",".swiftcover",".swiss",".sx",".sy",".sydney",".symantec",".systems",".sz",".tab",".taipei",".talk",".taobao",".target",".tatamotors",".tatar",".tattoo",".tax",".taxi",".tc",".tci",".td",".tdk",".team",".tech",".technology",".tel",".telecity",".telefonica",".temasek",".tennis",".teva",".tf",".tg",".th",".thd",".theater",".theatre",".tiaa",".tickets",".tienda",".tiffany",".tips",".tires",".tirol",".tj",".tjmaxx",".tjx",".tk",".tkmaxx",".tl",".tm",".tmall",".tn",".to",".today",".tokyo",".tools",".top",".toray",".toshiba",".total",".tours",".town",".toyota",".toys",".tp",".tr",".trade",".trading",".training",".travel",".travelchannel",".travelers",".travelersinsurance",".trust",".trv",".tt",".tube",".tui",".tunes",".tushu",".tv",".tvs",".tw",".tz",".ua",".ubank",".ubs",".uconnect",".ug",".uk",".um",".unicom",".university",".uno",".uol",".ups",".us",".uy",".uz",".va",".vacations",".vana",".vanguard",".vc",".ve",".vegas",".ventures",".verisign",".versicherung",".vet",".vg",".vi",".viajes",".video",".vig",".viking",".villas",".vin",".vip",".virgin",".visa",".vision",".vista",".vistaprint",".viva",".vivo",".vlaanderen",".vn",".vodka",".volkswagen",".volvo",".vote",".voting",".voto",".voyage",".vu",".vuelos",".wales",".walmart",".walter",".wang",".wanggou",".warman",".watch",".watches",".weather",".weatherchannel",".webcam",".weber",".website",".wed",".wedding",".weibo",".weir",".wf",".whoswho",".wien",".wiki",".williamhill",".win",".windows",".wine",".winners",".wme",".wolterskluwer",".woodside",".work",".works",".world",".wow",".ws",".wtc",".wtf",".xbox",".xerox",".xfinity",".xihuan",".xin",".\u6D4B\u8BD5",".\u0915\u0949\u092E",".\u092A\u0930\u0940\u0915\u094D\u0937\u093E",".\u30BB\u30FC\u30EB",".\u4F5B\u5C71",".\u0CAD\u0CBE\u0CB0\u0CA4",".\u6148\u5584",".\u96C6\u56E2",".\u5728\u7EBF",".\uD55C\uAD6D",".\u0B2D\u0B3E\u0B30\u0B24",".\u5927\u4F17\u6C7D\u8F66",".\u70B9\u770B",".\u0E04\u0E2D\u0E21",".\u09AD\u09BE\u09F0\u09A4",".\u09AD\u09BE\u09B0\u09A4",".\u516B\u5366","\u200F.\u05D9\u05E9\u05E8\u05D0\u05DC\u200E","\u200F.\u0645\u0648\u0642\u0639\u200E",".\u09AC\u09BE\u0982\u09B2\u09BE",".\u516C\u76CA",".\u516C\u53F8",".\u9999\u683C\u91CC\u62C9",".\u7F51\u7AD9",".\u79FB\u52A8",".\u6211\u7231\u4F60",".\u043C\u043E\u0441\u043A\u0432\u0430",".\u0438\u0441\u043F\u044B\u0442\u0430\u043D\u0438\u0435",".\u049B\u0430\u0437",".\u043A\u0430\u0442\u043E\u043B\u0438\u043A",".\u043E\u043D\u043B\u0430\u0439\u043D",".\u0441\u0430\u0439\u0442",".\u8054\u901A",".\u0441\u0440\u0431",".\u0431\u0433",".\u0431\u0435\u043B","\u200F.\u05E7\u05D5\u05DD\u200E",".\u65F6\u5C1A",".\u5FAE\u535A",".\uD14C\uC2A4\uD2B8",".\u6DE1\u9A6C\u9521",".\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3",".\u043E\u0440\u0433",".\u0928\u0947\u091F",".\u30B9\u30C8\u30A2",".\u30A2\u30DE\u30BE\u30F3",".\uC0BC\uC131",".\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD",".\u5546\u6807",".\u5546\u5E97",".\u5546\u57CE",".\u0434\u0435\u0442\u0438",".\u043C\u043A\u0434","\u200F.\u05D8\u05E2\u05E1\u05D8\u200E",".\u0435\u044E",".\u30DD\u30A4\u30F3\u30C8",".\u65B0\u95FB",".\u5DE5\u884C",".\u5BB6\u96FB","\u200F.\u0643\u0648\u0645\u200E",".\u4E2D\u6587\u7F51",".\u4E2D\u4FE1",".\u4E2D\u56FD",".\u4E2D\u570B",".\u5A31\u4E50",".\u8C37\u6B4C",".\u0C2D\u0C3E\u0C30\u0C24\u0C4D",".\u0DBD\u0D82\u0D9A\u0DCF",".\u96FB\u8A0A\u76C8\u79D1",".\u8D2D\u7269",".\u6E2C\u8A66",".\u30AF\u30E9\u30A6\u30C9",".\u0AAD\u0ABE\u0AB0\u0AA4",".\u901A\u8CA9",".\u092D\u093E\u0930\u0924\u092E\u094D",".\u092D\u093E\u0930\u0924",".\u092D\u093E\u0930\u094B\u0924","\u200F.\u0622\u0632\u0645\u0627\u06CC\u0634\u06CC\u200E",".\u0BAA\u0BB0\u0BBF\u0B9F\u0BCD\u0B9A\u0BC8",".\u7F51\u5E97",".\u0938\u0902\u0917\u0920\u0928",".\u9910\u5385",".\u7F51\u7EDC",".\u043A\u043E\u043C",".\u0443\u043A\u0440",".\u9999\u6E2F",".\u4E9A\u9A6C\u900A",".\u8BFA\u57FA\u4E9A",".\u98DF\u54C1",".\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE",".\u98DE\u5229\u6D66","\u200F.\u0625\u062E\u062A\u0628\u0627\u0631\u200E",".\u53F0\u6E7E",".\u53F0\u7063",".\u624B\u8868",".\u624B\u673A",".\u043C\u043E\u043D","\u200F.\u0627\u0644\u062C\u0632\u0627\u0626\u0631\u200E","\u200F.\u0639\u0645\u0627\u0646\u200E","\u200F.\u0627\u0631\u0627\u0645\u0643\u0648\u200E","\u200F.\u0627\u06CC\u0631\u0627\u0646\u200E","\u200F.\u0627\u0644\u0639\u0644\u064A\u0627\u0646\u200E","\u200F.\u0627\u062A\u0635\u0627\u0644\u0627\u062A\u200E","\u200F.\u0627\u0645\u0627\u0631\u0627\u062A\u200E","\u200F.\u0628\u0627\u0632\u0627\u0631\u200E","\u200F.\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627\u200E","\u200F.\u067E\u0627\u06A9\u0633\u062A\u0627\u0646\u200E","\u200F.\u0627\u0644\u0627\u0631\u062F\u0646\u200E","\u200F.\u0645\u0648\u0628\u0627\u064A\u0644\u064A\u200E","\u200F.\u0628\u0627\u0631\u062A\u200E","\u200F.\u0628\u06BE\u0627\u0631\u062A\u200E","\u200F.\u0627\u0644\u0645\u063A\u0631\u0628\u200E","\u200F.\u0627\u0628\u0648\u0638\u0628\u064A\u200E","\u200F.\u0627\u0644\u0628\u062D\u0631\u064A\u0646\u200E","\u200F.\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629\u200E","\u200F.\u0680\u0627\u0631\u062A\u200E","\u200F.\u0643\u0627\u062B\u0648\u0644\u064A\u0643\u200E","\u200F.\u0633\u0648\u062F\u0627\u0646\u200E","\u200F.\u0647\u0645\u0631\u0627\u0647\u200E","\u200F.\u0639\u0631\u0627\u0642\u200E","\u200F.\u0645\u0644\u064A\u0633\u064A\u0627\u200E",".\u6FB3\u9580",".\uB2F7\uCEF4",".\u653F\u5E9C","\u200F.\u0634\u0628\u0643\u0629\u200E","\u200F.\u0628\u064A\u062A\u0643\u200E","\u200F.\u0639\u0631\u0628\u200E",".\u10D2\u10D4",".\u673A\u6784",".\u7EC4\u7EC7\u673A\u6784",".\u5065\u5EB7",".\u0E44\u0E17\u0E22","\u200F.\u0633\u0648\u0631\u064A\u0629\u200E",".\u62DB\u8058",".\u0440\u0443\u0441",".\u0440\u0444",".\u73E0\u5B9D","\u200F.\u062A\u0648\u0646\u0633\u200E",".\u5927\u62FF",".\u0EA5\u0EB2\u0EA7",".\u307F\u3093\u306A",".\u30B0\u30FC\u30B0\u30EB",".\u03B5\u03C5",".\u03B5\u03BB",".\u4E16\u754C",".\u66F8\u7C4D",".\u0D2D\u0D3E\u0D30\u0D24\u0D02",".\u0A2D\u0A3E\u0A30\u0A24",".\u7F51\u5740",".\uB2F7\uB137",".\u30B3\u30E0",".\u5929\u4E3B\u6559",".\u6E38\u620F",".verm\xF6gensberater",".verm\xF6gensberatung",".\u4F01\u4E1A",".\u4FE1\u606F",".\u5609\u91CC\u5927\u9152\u5E97",".\u5609\u91CC","\u200F.\u0645\u0635\u0631\u200E","\u200F.\u0642\u0637\u0631\u200E",".\u5E7F\u4E1C",".\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8",".\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE",".\u0570\u0561\u0575",".\u65B0\u52A0\u5761","\u200F.\u0641\u0644\u0633\u0637\u064A\u0646\u200E",".\u30C6\u30B9\u30C8",".\u653F\u52A1",".xperia",".xxx",".xyz",".yachts",".yahoo",".yamaxun",".yandex",".ye",".yodobashi",".yoga",".yokohama",".you",".youtube",".yt",".yun",".za",".zappos",".zara",".zero",".zip",".zippo",".zm",".zone",".zuerich",".zw",".ac.vn",".ae.org",".biz.fj",".biz.pl",".biz.tr",".biz.tt",".biz.vn",".br.com",".cn.com",".co.ag",".co.at",".co.ci",".co.cm",".co.com",".co.cr",".co.de",".co.ee",".co.gg",".co.gy",".co.hu",".co.id",".co.il",".co.im",".co.in",".co.ir",".co.it",".co.je",".co.ke",".co.kr",".co.lc",".co.ls",".co.na",".co.ni",".co.nl",".co.no",".co.nu",".co.nz",".co.om",".co.rs",".co.th",".co.tt",".co.tz",".co.ug",".co.uk",".co.uz",".co.ve",".co.vi",".co.za",".com.ag",".com.ai",".com.ar",".com.au",".com.bb",".com.bd",".com.bm",".com.bo",".com.br",".com.bs",".com.bz",".com.cm",".com.cn",".com.co",".com.cu",".com.cy",".com.de",".com.do",".com.ec",".com.ee",".com.es",".com.fj",".com.gi",".com.gp",".com.gr",".com.gt",".com.gy",".com.hk",".com.hn",".com.hr",".com.ht",".com.kn",".com.lb",".com.lc",".com.lv",".com.mk",".com.mt",".com.mx",".com.my",".com.na",".com.ng",".com.ni",".com.om",".com.pa",".com.pe",".com.ph",".com.pk",".com.pl",".com.pr",".com.pt",".com.py",".com.ro",".com.ru",".com.sb",".com.se",".com.sg",".com.so",".com.sv",".com.tr",".com.tt",".com.tw",".com.ua",".com.uy",".com.uz",".com.vc",".com.ve",".com.vi",".com.vn",".de.com",".edu.vn",".eu.com",".firm.in",".gb.net",".gen.in",".gen.tr",".gr.com",".health.vn",".ind.in",".info.ec",".info.fj",".info.pl",".info.tt",".info.vn",".int.vn",".jpn.com",".ltd.uk",".me.uk",".msk.ru",".name.fj",".name.tr",".name.tt",".name.vn",".net.ag",".net.ai",".net.ar",".net.au",".net.bb",".net.bm",".net.bo",".net.br",".net.bz",".net.cm",".net.cn",".net.co",".net.fj",".net.gg",".net.gp",".net.gt",".net.gy",".net.hn",".net.in",".net.je",".net.lc",".net.lv",".net.my",".net.ni",".net.nz",".net.pl",".net.pr",".net.ru",".net.so",".net.tt",".net.vc",".net.vi",".net.vn",".nom.ag",".nom.es",".nom.ni",".off.ai",".or.at",".or.kr",".org.ag",".org.ai",".org.bb",".org.bm",".org.bo",".org.bz",".org.cn",".org.es",".org.fj",".org.gg",".org.gt",".org.hn",".org.il",".org.in",".org.je",".org.lc",".org.ls",".org.lv",".org.na",".org.ni",".org.nz",".org.pl",".org.pr",".org.ru",".org.so",".org.tt",".org.uk",".org.vc",".org.ve",".org.vi",".org.vn",".plc.uk",".pro.fj",".pro.tt",".pro.vn",".radio.am",".radio.fm",".ru.com",".sa.com",".se.net",".tv.br",".uk.com",".uk.net",".us.com",".us.org",".waw.pl",".web.id",".web.tr",".za.com"];var Y=class{validDomainExtensions;constructor(){this.validDomainExtensions=ce}isDomainExtension(e){let r=e.substring(e.lastIndexOf("."));return this.isValidExtension(r)}domain(e){if(!this.isValidInput(e))return"";let r=this.extractAndCleanDomain(e);return this.parseMainDomain(r)}isValidInput(e){return e!=null&&e.length>=7}extractAndCleanDomain(e){let r;return e.startsWith("http://")||e.startsWith("https://")?r=new URL(e).hostname:e.startsWith("//")?r=new URL(`https:${e}`).hostname:r="~"+e,r.includes("~")&&(r=this.removeUrlFragments(r),r=r.replace("~","")),r}removeUrlFragments(e){return e.includes("@")?e.split("@")[1]:e.includes("/")?e.split("/")[0]:e.includes("?")?e.split("?")[0]:e.includes("#")?e.split("#")[0]:e}parseMainDomain(e){let r=e.split("."),t=r.length;if(t===2){let n=e.substring(e.lastIndexOf("."));return this.isValidExtension(n)?e:""}return t>=3?this.handleComplexDomain(r):""}handleComplexDomain(e){let r=this.getLastThreeParts(e),[,t,n]=r.split("."),o="."+t,s="."+n;return this.isValidExtension(o)&&this.isValidExtension(s)?r:this.isValidExtension(s)?t+"."+n:""}getLastThreeParts(e){return e.length===3?e.join("."):e.slice(-3).join(".")}isValidExtension(e){return this.validDomainExtensions.includes(e.toLowerCase().trim())}};var le=[{name:"Sohu",mx:"a.sohu.com"},{name:"Sohu",mx:"sohu.com"},{name:"Strato",mx:".rzone.de"},{name:"Strato",mx:".strato.de"},{name:"21cn",mx:".21cn.com"},{name:"163",mx:".netease.com"},{name:"Netvigator",mx:".netvigator.com"},{name:"139",mx:".mail.139.com"},{name:"Nate",mx:".nate.com"},{name:"Naver",mx:".naver.com"},{name:"Daum",mx:".daum.kgslb.com"},{name:"Daum",mx:".hanmail.net"},{name:"Ziggo",mx:".ziggo.nl"},{name:"QQ",mx:".qq.com"},{name:"263.net",mx:"263.net"},{name:"Sina",mx:".vip.sina.com"},{name:"Sina",mx:".sina.com.cn"},{name:"Aruba",mx:".aruba.it"},{name:"Aliyun",mx:".mxhichina.com"},{name:"Plala Webmail",mx:".plala.or.jp"},{name:"AOL",mx:"mx-aol.mail"},{name:"Turbify",mx:"mx-biz.mail.am0.yahoodns.net"},{name:"Turbify",mx:"mx-biz.mail.am.yahoodns.net"},{name:"Turbify",mx:"mx-biz.mail.am1.yahoodns.net"},{name:"Turbify",mx:"mx1.biz.mail.yahoo.com"},{name:"Turbify",mx:"mx5.biz.mail.yahoo.com"},{name:"Turbify",mx:".biz.mail.yahoo.com"},{name:"AT&T",mx:".prodigy.net"},{name:"Yahoo",mx:".yahoo."},{name:"Zoho",mx:".zoho.com"},{name:"Sitestar Webmail",mx:".sitestar.everyone.net",webmail:"https://webmail.sitestar.net"},{name:"Outlook Web App (OWA)",mx:".serverdata.net",webmail:"https://owa.serverdata.net"},{name:"1and1",mx:".1and1."},{name:"Outlook",mx:"olc.protection.outlook.com"},{name:"Outlook",mx:".mail.outlook.com"},{name:"Outlook",mx:".hotmail."},{name:"Office 365",mx:"mail.protection.outlook.com"},{name:"Office 365",mx:".outlook.com"},{name:"Office 365",mx:".office365.com"},{name:"Gmail",mx:".google.com"},{name:"Mail.ru",mx:".mail.ru"},{name:"Mail.com",mx:".mail.com"},{name:"Earthlink",mx:".earthlink.net"},{name:"Earthlink",mx:".oxsus-vadesecure.net"},{name:"Rackspace",mx:".emailsrvr.com"},{name:"Mimecast",mx:".mimecast.com"},{name:"Godaddy",mx:".secureserver.net"},{name:"Comcast",mx:".comcast.net"},{name:"Office 365",mx:".ppe-hosted.com"},{name:"Office 365",mx:".gslb.pphosted.com"},{name:"Office 365",mx:".arsmtp.com"},{name:"Zoho",mx:".zoho.com"},{name:"ProtonMail",mx:"mail.protonmail.ch"},{name:"Facebook",mx:".facebook.com"},{name:"163",mx:".netease.com"},{name:"163",mx:".163.com"},{name:"263",mx:".263.net"},{name:"Aliyun",mx:".alibaba.com"},{name:"Aliyun",mx:".aliyun.com"},{name:"Amazon",mx:".amazon.com"},{name:"Amazon",mx:".amazonaws.com"},{name:"Anazana",mx:".anazana.com"},{name:"CoreMail",mx:".icoremail.net"},{name:"GMX",mx:".gmx.net"},{name:"GMX",mx:".gmx.com"},{name:"Hinet",mx:".hinet."},{name:"iCloud",mx:".icloud.com"},{name:"Iinet",mx:".iinet.net.au"},{name:"Namecheap",mx:".registrar-servers.com"},{name:"Network Solutions",mx:".myregisteredsite.com"},{name:"Orange",mx:".orange."},{name:"QQ",mx:".qq.com"},{name:"Synaq",mx:".synaq."},{name:"Web.de",mx:".web.de"},{name:"Yandex",mx:".yandex."},{name:"Zmail",mx:".zmail."},{name:"Strato",mx:".strato.de"},{name:"Apple",mx:".apple.com"},{name:"Cox Webmail",mx:".cloudfilter.net"},{name:"Fastmail",mx:".messagingengine.com"},{name:"Mailgun",mx:".mailgun.org"},{name:"Postmark",mx:".pmta.postmarkapp.com"},{name:"SendGrid",mx:".sendgrid.net"},{name:"Elastic Email",mx:".elasticemail.com"},{name:"Zendesk",mx:".zendesk.com"},{name:"Intermedia",mx:".intermedia.net"},{name:"Mailjet",mx:".mailjet.com"},{name:"Front",mx:".frontapp.com"},{name:"Unknown",mx:".................."},{name:"Webmail",mx:".................."},{name:"Zimbra",mx:".................."},{name:"Others",mx:".................."},{name:"Aruba",mx:".................."},{name:"Alibaba",mx:".................."},{name:"IBM",mx:".................."},{name:"Digitalocean",mx:".................."},{name:"AWS Partner",mx:".................."},{name:"Microsoft Exchange",mx:".................."},{name:"Oracle Cloud",mx:".................."},{name:"Roundcube Webmail",mx:".................."},{name:"cPanel Webmail",mx:".................."},{name:"Yahoo (External Provider)",mx:".................."}],ue=["automation","products","product","product.info","product-info","productinfo","alert","alerts","automated","rewards","clientpayments","invites","page-notification","page-notification-noreply","friendupdates","groupupdates","messages","advertise","advertise-noreply","advertise-no.reply","advertise-no-reply","advertise-no_reply","reminders","reminder","notification","paymentnotification","payment-notification","payment.notification","payment_notification","registration","registrations","signup","sign-up","signin","sign-in","email","e-mail","no_reply","whatsinstore","ship","nobody","no-body","publishers","whatsinstore","hosting-security","hosting","accountstatus","account-status","account_status","hosting-service","billing","hostingsecurity","robot","hosting-services","hostingservices","hostingservice","no.reply","paypal","no-reply","feedback","example","donotreply","noreply","do-not-reply","bot","do_not_reply","market.news","clientservices","list","client-services","client.services","abuse","accessibilty","accessibility","accounting","account","accounts.payable","adm","admin","admissions","ads","advertise","advisor","agency","agent","all","api","ask","attorneys","award","bills","bizdev","biz-dev","board","booking","bookings","buzz","callcenter","career","careers","ceo","cfa","chat","chief","comments","contact","contacts","copyright","corporate","courses","customer.services","customercare","customer-care","customerservice","customer-service","customerservicecenter","customer-service-center","custserv","data","design","development","director","directory","domains","editor","editorial","emails","engineering","enquiries","enquiry","event","events","everyone","feedback","finance","foundation","frontdesk","ftp","general","global","grouplegal","group-legal","groups","help","helpdesk","home","hotel","hr","human.resources","humanresources","human-resources","info","information","inquiries","inquiry","instructor","insurance","internet","interoperability","invest","investor","investorrelations","investor-relations","job","jobs","lawoffice","law-office","leasing","legal","library","listing","logistics","mail","mailbox","mailroom","main","manager","marketing","mayor","media","medicalqueries","medical-queries","meetings","members","membership","membersupport","member-support","merchant","misc","news","newsroom","noc","offers","office","online","operations","organiser","organizer","pastor","pharma","photos","politics","postmaster","pr","president","prime","privacy","projects","promos","publicaffairs","public-affairs","publisher","quality","query","questions","radio","realestate","real-estate","realtor","receptionist","redaction","register","remove","repairs","request","research","reservation","reservations","reserve","reserveroom","reserve-room","root","sale","sales","school","schools","secretary","security","service","shopping","spam","staff","subscribe","suggest","support","survey","talent","tourism","tours","trading","training","transfer","travel","travels","unsubscribe","usa","usenet","user","username","users","uucp","verify","volunteer","web","webinfo","webmaster","website","wwinfo","www","www-validator"],me=["yahoo.com","ameritech.net","att.net","bellsouth.net","currently.com","flash.net","nvbell.net","pacbell.net","prodigy.net","sbcglobal.net","snet.net","swbell.net","wans.net","worldnet.att.net","ymail.com","y7mail.com","yahoo.at","yahoo.be","yahoo.bg","yahoo.ca","yahoo.cl","yahoo.co.hu","yahoo.co.id","yahoo.co.il","yahoo.co.in","yahoo.co.kr","yahoo.co.nz","yahoo.co.th","yahoo.co.uk","yahoo.co.za","yahoo.com.ar","yahoo.com.au","yahoo.com.br","yahoo.com.co","yahoo.com.hk","yahoo.com.hr","yahoo.com.mx","yahoo.com.my","yahoo.com.pe","yahoo.com.ph","yahoo.com.sg","yahoo.com.tr","yahoo.com.tw","yahoo.com.ua","yahoo.com.ve","yahoo.com.vn","yahoo.cz","yahoo.de","yahoo.dk","yahoo.ee","yahoo.es","yahoo.fi","yahoo.fr","yahoo.gr","yahoo.hr","yahoo.hu","yahoo.ie","yahoo.in","yahoo.it","yahoo.lt","yahoo.lv","yahoo.nl","yahoo.no","yahoo.pl","yahoo.pt","yahoo.ro","yahoo.rs","yahoo.se","yahoo.si","yahoo.sk","yahoogroups.co.kr","yahoogroups.com.cn","yahoogroups.com.sg","yahoogroups.com.tw","yahoogrupper.dk","yahoogruppi.it","yahooxtra.co.nz"],de=["fuck","shit","scam","hack","crack","spam","phishing","test","testing","fake","null","undefined"];async function X(a,e={}){let{params:r,timeout:t=3e4,maxRetries:n=3,retryDelay:o=1e3,maxRedirects:s=5,validateStatus:i=d=>d>=200&&d<300,onRetry:c,...u}=e,m=a;if(r){let d=new URLSearchParams;Object.entries(r).forEach(([p,g])=>{d.append(p,typeof g=="boolean"?g?"1":"0":String(g))}),m+=(m.includes("?")?"&":"?")+d.toString()}let l=null;for(let d=1;d<=n+1;d++){let p=new AbortController,g=t>0?setTimeout(()=>p.abort(),t):null;try{let v=await fetch(m,{...u,signal:p.signal,redirect:s===0?"error":"follow"});if(g&&clearTimeout(g),!i(v.status))throw new Error(`HTTP ${v.status}: ${v.statusText}`);let C=v.headers.get("content-type")||"",w;return C.includes("application/json")?w=await v.json():C.includes("text/")?w=await v.text():w=await v.arrayBuffer(),{data:w,status:v.status,statusText:v.statusText,finalUrl:v.url,headers:v.headers,retryCount:d-1}}catch(v){if(g&&clearTimeout(g),l=v,d>n||v.name==="AbortError"&&d===1||v.message.includes("HTTP")&&!v.message.includes("5"))break;c&&c(v,d),d<=n&&await new Promise(C=>setTimeout(C,o*d))}}throw l}var O=class a{resolver;findIpKeys=[];rejectList=["page-notification-noreply","reply.craigslist.org",".craigslist.org",".paypal.","@paypal.","advertise-noreply",".intuit.com","advertise-no.reply","advertise-no-reply","advertise-no_reply"];roles=ue;records=le;yahooList=me;domain;IpInfo=null;static instance=null;dns;validationConfig={enableDeepValidation:!1,ipResolver:{findip:{enabled:!1,apiKey:[]},ipApi:!1}};constructor(e,r){let{enableDeepValidation:t=!1,ipResolver:n={findip:{enabled:!1,apiKey:[]},ipApi:!1}}=e||{};this.validationConfig={enableDeepValidation:t,ipResolver:{...this.validationConfig.ipResolver,...n}},this.dns=new P(r),this.resolver={resolve:this.dns.resolve},this.domain=new Y}static create(e,r){return a.instance||(a.instance=new a(e,r)),a.instance}async getMxRecords(e){if(this.is_email(e)&&!e.includes("@")||!e.includes("."))throw new Error("Invalid email address or domain name");let r=e.includes("@")&&e.split("@")[1]||e;try{let t=await this.resolver.resolve(r,"MX");if(t&&Array.isArray(t)&&t.length>0)return t.map(n=>n.exchange);throw new Error(`Failed to resolve MX records for ${r}`)}catch(t){throw t}}async validate(e,r=!1){if(!this.isEmail(e))return{success:!1,type:"Syntanx",email:e.toLowerCase()};if(de.some(o=>e.toLowerCase().split("@")[1].includes(o)))return{success:!1,type:"Rejected",email:e.toLowerCase()};if(this.rejectList.some(o=>e.includes(o)))return{success:!1,type:"Rejected",email:e.toLowerCase()};let n=e.includes("@")&&e.split("@")[1]||e;try{let o=await this.getMxRecords(n),s=[];if(o&&o.length>0){for(let c of o){let u=c.endsWith(".")&&c.startsWith(".")?c.substring(1,c.length-1):c.startsWith(".")?c.substring(1):c.endsWith(".")?c.substring(0,c.length-1):c;if(u.includes(" ")&&u.split(" ").length===2){let m=u.split(" ")[1];m&&s.push(m)}else u.includes(" ")||s.push(u);for(let m of this.records)if(u.includes(m.mx))return m.name==="Yahoo"?this.yahooList.includes(n)?{success:!0,data:{provider:m.name,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}}:u.includes("mx-biz.mail")?{success:!0,data:{provider:"Turbify",email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l))}}:{success:!0,data:{provider:"Yahoo (External Provider)",email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l))}}:{success:!0,data:{provider:m.name,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}}}if(!r||!this.validationConfig.enableDeepValidation)return{success:!0,data:{provider:"Unknown",email:e.toLowerCase(),role:!!this.roles.find(c=>e.toLowerCase().startsWith(c))}};let i=await this.domain_check(n);if(i=i.status?i:await this.domain_check(n,!0),i.status)return{success:!0,data:{provider:i.type,email:e.toLowerCase(),role:!!this.roles.find(c=>e.toLowerCase().startsWith(c)),...i.webmail&&{webmail:i.webmail}}};{let c=!1;for(let u of s){if(c)break;let m=await this.domain_check(u,!0);if(m.status)return{success:!0,data:{provider:m.type,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}};if(typeof u<"u"&&u.length>0)for(u=u.substring(u.indexOf(".")+1);this.domain.domain(u).length>3;){if(m=await this.domain_check(u,!0),m.status)return{success:!0,data:{provider:m.type,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}};u=u.includes(".")?u.substring(u.indexOf(".")+1):""}}return i=await this.dnsLookup(s),i.status?{success:!0,data:{provider:i.type,email:e.toLowerCase(),role:!!this.roles.find(u=>e.toLowerCase().startsWith(u)),...i.webmail&&{webmail:i.webmail}}}:{success:!0,data:{provider:"Unknown",email:e.toLowerCase(),role:!!this.roles.find(u=>e.toLowerCase().startsWith(u))}}}}else return{success:!1,type:"Invalid",email:e.toLowerCase()}}catch(o){return{success:!1,type:"Error",email:e.toLowerCase(),message:o.message}}}is_wale4r_zimbra(e){try{let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(t&&t[1]&&t[1].includes("zimbra web client"))return!0;let n=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,o;for(;(o=n.exec(e))!==null;){let s=o[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(s&&(s.includes(" zimbra ")||s.includes(" zimbra")||s.includes("zimbra ")))return!0}return!1}catch{return!1}}is_zimbra(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("zimbra web"))return!0;let o=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(i&&(i.includes(" zimbra ")||i.includes(" zimbra")||i.includes("zimbra ")))return!0}return r?.toLowerCase()?.includes("www.zimbra.com")===!0||r?.toLowerCase()?.includes("zimbra.com")===!0||r?.toLowerCase()?.includes("zimbra collaboration")===!0||r?.toLowerCase()?.includes("zimbra web")===!0||r?.toLowerCase()?.includes("'zimbra'")===!0||r?.toLowerCase()?.includes('"zimbra"')===!0||r?.toLowerCase()?.includes(">zimbra<")===!0}catch{return!1}}is_webmail(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("webmail"))return!0;let o=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(i&&(i.includes(" webmail ")||i.includes(" webmail")||i.includes("webmail ")))return!0}return r?.toLowerCase()?.includes("web.mail")===!0||r?.toLowerCase()?.includes("web-mail")===!0||r?.toLowerCase()?.includes("web mail")===!0||r?.toLowerCase()?.includes("zimbra web")===!0||r?.toLowerCase()?.includes("'webmail'")===!0||r?.toLowerCase()?.includes('"webmail"')===!0||r?.toLowerCase()?.includes(">webmail<")===!0}catch{return!1}}is_owa(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("outlook"))return!0;let o=/<div[^>]*class=["'][^"']*(?:signInHeader|signInExpl)[^"']*["'][^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/div>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"");if(i&&(i.includes(" Outlook ")||i.includes(" Outlook")||i.includes("Outlook")))return!0}return r?.toLowerCase()?.includes("/owa/auth/")===!0||r?.toLowerCase()?.includes("/owa/auth.owa")===!0}catch{return!1}}is_cPanel(e){try{let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(t&&t[1]&&t[1].includes("cpanel redirect"))return!0;let n=/<[^>]*class=["'][^"']*copyright[^"']*["'][^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/[^>]*>/gi,o;for(;(o=n.exec(e))!==null;){let c=o[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(c&&t&&t[1]&&t[1].includes("webmail")&&c.includes("cpanel"))return!0}let s=/<[^>]*class=["'][^"']*main-logo[^"']*["'][^>]*src=["']([^"']*)["'][^>]*>/gi,i;for(;(i=s.exec(e))!==null;){let c=i[1]?.toLowerCase();if(c&&t&&t[1]&&t[1].includes("webmail")&&c.includes("cpanel"))return!0}return this.parseJSCpanel(e)}catch{return!1}}toToken(e){let r=n(e,"west"),t=n(e,"east");if(r&&t){let s=o(r),i=o(t);return s+i}return null;function n(s,i){let c=s.indexOf(i+"=");if(c===-1)return null;let u=s.indexOf("+",c);if(u===-1)return null;let m=s.indexOf("(",u);if(m===-1)return null;let l=0,d=m;for(;d<s.length;d++){let p=s[d];if(p==="(")l++;else if(p===")"&&(l--,l===0))break}return s.substring(m,d+1)}function o(s){let i=s.startsWith("(")&&s.endsWith(")")?s.slice(1,-1):s,c=/\([^()]+\)/g,u=i.match(c);if(u){let m=u.map(l=>1+(l.slice(1,-1).match(/!!\[\]/g)||[]).length);return Number(m.join(""))}else return console.error("No groups found."),0}}parseJSCpanel(e){let t=/<form[^>]*id=["']wsidchk-form["'][^>]*action=["']([^"']*)["'][^>]*>/i.exec(e);return!!(this.toToken(e)&&t&&t[1])}is_Roundcube(e,r){let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);return t&&t[1]&&t[1].includes("roundcube")&&t[1].includes("webmail")?!0:r?.toLowerCase()?.includes("roundcube")===!0}async domain_check(e,r=!1,t=0){if(typeof e!="string")return{status:!1,type:""};e=e.includes("@")?e.split("@")[1]:e;let n=[`https://mail.${e}`,`https://webmail.${e}`,`https://mail1.${e}`,`https://mailhost.${e}`,`https://${e}/webmail`,`https://${e}/zimbra`,`https://${e}/mail`],o=r?e.includes("/")?`https://${e.substring(e.lastIndexOf("/"),e.length).replaceAll("/","")}`:`https://${e}`:n[t];try{if(!o)return{status:!1,type:""};let s=await X(o,{timeout:2500,maxRetries:2}),i=s.data,c=s.finalUrl;if(typeof i=="string"&&i.length>500){if(this.is_wale4r_zimbra(i))return{status:!0,type:"Zimbra",webmail:c};if(this.is_owa(i,i))return{status:!0,type:c.includes("login.microsoftonline.com")?"Office (OWA)":c.includes("login.live.com")?"Outlook":"Outlook Web App (OWA)",webmail:c};if(this.is_zimbra(i,i))return{status:!0,type:"Zimbra",webmail:c};if(this.is_cPanel(i))return{status:!0,type:"cPanel Webmail",webmail:c};if(this.is_Roundcube(i,i))return{status:!0,type:"Roundcube Webmail",webmail:c};if(this.is_webmail(i,i))return{status:!0,type:"Webmail",webmail:c}}return t<6&&!r?(t++,await this.domain_check(e,r,t)):{status:!1,type:""}}catch{return{status:!1,type:""}}}async resolveA(e){try{return await this.resolver.resolve(e,"A")}catch{return[]}}async dnsLookup(e){if(e&&Array.isArray(e)&&e.length>0)for(let r of e)try{let t=await this.resolveA(r);if(t&&Array.isArray(t))for(let n of t){if(this.IpInfo=await this.ipApi(n),this.IpInfo!==null)return this.returnDNS(this.IpInfo.isp,this.IpInfo.org);if(this.IpInfo=await this.findIp(n),this.IpInfo!==null)return this.returnDNS(this.IpInfo.traits.isp,this.IpInfo.traits.autonomous_system_organization)}break}catch{}return{status:!1,type:"Others"}}returnDNS(e,r){return e.toLowerCase().includes("amazon")||r.toLowerCase().includes("amazon")?{status:!0,type:"AWS Partner"}:e.toLowerCase().includes("microsoft")||r.toLowerCase().includes("microsoft")?{status:!0,type:"Microsoft Exchange"}:e.toLowerCase().replaceAll(" ","").includes("digitalocean")||r.toLowerCase().replaceAll(" ","").includes("digitalocean")?{status:!0,type:"Digitalocean"}:e.toLowerCase().includes("oracle")||r.toLowerCase().includes("oracle")?{status:!0,type:"Oracle Cloud"}:e.toLowerCase().includes("ibm")||r.toLowerCase().includes("ibm")?{status:!0,type:"IBM"}:e.toLowerCase().includes("alibaba")||r.toLowerCase().includes("alibaba")?{status:!0,type:"Alibaba"}:e.toLowerCase().includes("aruba")||r.toLowerCase().includes("aruba")?{status:!0,type:"Aruba"}:{status:!1,type:"Others"}}async ipApi(e){try{if(!this.validationConfig?.ipResolver?.findip?.enabled||!this.validationConfig.enableDeepValidation)return null;let r=await X(`http://ip-api.com/json/${e}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,zip,lat,lon,timezone,currency,isp,org,as,reverse,mobile,proxy,hosting,query`);return JSON.parse(r.data)}catch{return null}}async findIp(e){if(!this.validationConfig?.ipResolver?.findip?.enabled||!this.validationConfig.enableDeepValidation||!this.validationConfig?.ipResolver?.findip?.apiKey?.length)return null;let r=this.findIpKeys[Math.floor(Math.random()*this.findIpKeys.length)];try{let t=await X(`https://api.findip.net/${e}/?token=${r}`);return JSON.parse(t.data)}catch{return null}}isEmail(e){if(!this.is_email(e))return!1;let[r,t]=e.split("@");if(!r||!t||r.length<2||t.length<5)return!1;let n=35,o=3,s=3,i=3,c=2,u=55;return!(r.length>=n||r.split("-").length>o||r.split(".").length>s||t.split(".").length>i||t.split("-").length>c||!this.domain.isDomainExtension(e)||e.length>=u)}is_email(e){return!e.includes("@")||!e.includes(".")||e.split("@").length>2||e.lastIndexOf("@")>e.lastIndexOf(".")?!1:/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,9})+$/.test(e)}};var T=["native","google","cloudflare","quad9"],P=class a{providers;static __emailValidator=null;constructor(e={}){this.providers=new Map,this.initializeProviders(e)}static createEmailValidator(e,r){return a.__emailValidator||(a.__emailValidator=O.create(e,r)),a.__emailValidator}static get emailValidator(){return a.__emailValidator?a.__emailValidator:a.createEmailValidator()}initializeProviders(e){this.providers.set("native",new W(e.native)),this.providers.set("google",new U(e.google)),this.providers.set("cloudflare",new $(e.cloudflare)),this.providers.set("quad9",new B(e.quad9))}setConfig(e,r){if(!this.isValidProvider(e))throw new A(e);let t=this.providers.get(e);t&&t.updateConfig(r)}setConfigs(e){e.native&&this.setConfig("native",e.native),e.google&&this.setConfig("google",e.google),e.cloudflare&&this.setConfig("cloudflare",e.cloudflare),e.quad9&&this.setConfig("quad9",e.quad9)}isValidProvider(e){return["native","google","cloudflare","quad9"].includes(e)}validateHostname(e){if(!e||typeof e!="string"||e.trim().length===0)throw new L(e)}getEnabledProviders(){let e=[];for(let[r,t]of this.providers)t.enabled&&e.push(r);return e}selectProvider(e){if(e){if(!this.isValidProvider(e))throw new A(e);if(!this.providers.get(e)?.enabled)throw new z(e);return e}let r=this.getEnabledProviders();if(r.length===0)throw new q;let t=r.filter(o=>{let s=this.providers.get(o);return s&&!s.isFull}),n=t.length>0?t:r;return n[this.rnd(0,n.length-1)]}rnd=(e=0,r=Number.MAX_VALUE)=>Math.floor(Math.random()*(r-e+1))+e;getProvider(e){return this.providers.get(e)}resolve4=async(e,r,t)=>{this.validateHostname(e),t=T.includes(r||"")?r:t;let n=this.selectProvider(t);return r=T.includes(r||"")?void 0:r,this.getProvider(n).resolve4(e,r)};resolve6=async(e,r,t)=>{this.validateHostname(e),t=T.includes(r||"")?r:t;let n=this.selectProvider(t);return r=T.includes(r||"")?void 0:r,this.getProvider(n).resolve6(e,r)};resolveAny=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveAny(e)};async resolveCaa(e,r){this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveCaa(e)}resolveCname=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveCname(e)};resolveMx=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveMx(e)};resolveNaptr=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveNaptr(e)};resolveNs=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveNs(e)};resolvePtr=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolvePtr(e)};resolveSoa=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveSoa(e)};resolveSrv=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveSrv(e)};resolveTlsa=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveTlsa(e)};resolveTxt=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveTxt(e)};reverse=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).reverse(e)};resolve=async(e,r,t)=>{this.validateHostname(e),t=T.includes(r||"")?r:t;let n=this.selectProvider(t);return r=T.includes(r||"")?"A":r,this.getProvider(n).resolve(e,r)}};var D=null,k=["native","google","cloudflare","quad9"],b=()=>(D||(D=new P),D),Tr=()=>{D=null},kr=a=>{D=a},Nr=async(a,e,r)=>(r=k.includes(e||"")?e:r,e=k.includes(e||"")?void 0:e,b().resolve4(a,e,r)),Sr=async(a,e,r)=>(r=k.includes(e||"")?e:r,e=k.includes(e||"")?void 0:e,b().resolve6(a,e,r)),Ir=async(a,e)=>b().resolveAny(a,e),Er=async(a,e)=>b().resolveCaa(a,e),qr=async(a,e)=>b().resolveCname(a,e),Lr=async(a,e)=>b().resolveMx(a,e),zr=async(a,e)=>b().resolveNaptr(a,e),Or=async(a,e)=>b().resolveNs(a,e),Dr=async(a,e)=>b().resolvePtr(a,e),Mr=async(a,e)=>b().resolveSoa(a,e),_r=async(a,e)=>b().resolveSrv(a,e),jr=async(a,e)=>b().resolveTlsa(a,e),Hr=async(a,e)=>b().resolveTxt(a,e),Wr=async(a,e)=>b().reverse(a,e),Vr=(a,e,r)=>b().resolve(a,k.includes(e||"")?"A":e,k.includes(e||"")?e:r),Ur=P;export{O as EmailValidator,L as InvalidHostnameError,A as InvalidProviderError,q as NoEnabledProvidersError,z as ProviderNotEnabledError,P as YqDns,Ur as default,Tr as resetDefaultResolver,Vr as resolve,Nr as resolve4,Sr as resolve6,Ir as resolveAny,Er as resolveCaa,qr as resolveCname,Lr as resolveMx,zr as resolveNaptr,Or as resolveNs,Dr as resolvePtr,Mr as resolveSoa,_r as resolveSrv,jr as resolveTlsa,Hr as resolveTxt,Wr as reverse,kr as setDefaultResolver};
1
+ var we=Object.create;var se=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var Pe=Object.getPrototypeOf,Ce=Object.prototype.hasOwnProperty;var Ae=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports);var Te=(a,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of xe(e))!Ce.call(a,n)&&n!==r&&se(a,n,{get:()=>e[n],enumerable:!(t=Re(e,n))||t.enumerable});return a};var ke=(a,e,r)=>(r=a!=null?we(Pe(a)):{},Te(e||!a||!a.__esModule?se(r,"default",{value:a,enumerable:!0}):r,a));var oe=Ae((ze,G)=>{"use strict";var Ne=Object.prototype.hasOwnProperty,f="~";function S(){}Object.create&&(S.prototype=Object.create(null),new S().__proto__||(f=!1));function Se(a,e,r){this.fn=a,this.context=e,this.once=r||!1}function ne(a,e,r,t,n){if(typeof r!="function")throw new TypeError("The listener must be a function");var o=new Se(r,t||a,n),s=f?f+e:e;return a._events[s]?a._events[s].fn?a._events[s]=[a._events[s],o]:a._events[s].push(o):(a._events[s]=o,a._eventsCount++),a}function H(a,e){--a._eventsCount===0?a._events=new S:delete a._events[e]}function y(){this._events=new S,this._eventsCount=0}y.prototype.eventNames=function(){var e=[],r,t;if(this._eventsCount===0)return e;for(t in r=this._events)Ne.call(r,t)&&e.push(f?t.slice(1):t);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};y.prototype.listeners=function(e){var r=f?f+e:e,t=this._events[r];if(!t)return[];if(t.fn)return[t.fn];for(var n=0,o=t.length,s=new Array(o);n<o;n++)s[n]=t[n].fn;return s};y.prototype.listenerCount=function(e){var r=f?f+e:e,t=this._events[r];return t?t.fn?1:t.length:0};y.prototype.emit=function(e,r,t,n,o,s){var i=f?f+e:e;if(!this._events[i])return!1;var c=this._events[i],u=arguments.length,m,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,t),!0;case 4:return c.fn.call(c.context,r,t,n),!0;case 5:return c.fn.call(c.context,r,t,n,o),!0;case 6:return c.fn.call(c.context,r,t,n,o,s),!0}for(l=1,m=new Array(u-1);l<u;l++)m[l-1]=arguments[l];c.fn.apply(c.context,m)}else{var d=c.length,p;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),u){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,r);break;case 3:c[l].fn.call(c[l].context,r,t);break;case 4:c[l].fn.call(c[l].context,r,t,n);break;default:if(!m)for(p=1,m=new Array(u-1);p<u;p++)m[p-1]=arguments[p];c[l].fn.apply(c[l].context,m)}}return!0};y.prototype.on=function(e,r,t){return ne(this,e,r,t,!1)};y.prototype.once=function(e,r,t){return ne(this,e,r,t,!0)};y.prototype.removeListener=function(e,r,t,n){var o=f?f+e:e;if(!this._events[o])return this;if(!r)return H(this,o),this;var s=this._events[o];if(s.fn)s.fn===r&&(!n||s.once)&&(!t||s.context===t)&&H(this,o);else{for(var i=0,c=[],u=s.length;i<u;i++)(s[i].fn!==r||n&&!s[i].once||t&&s[i].context!==t)&&c.push(s[i]);c.length?this._events[o]=c.length===1?c[0]:c:H(this,o)}return this};y.prototype.removeAllListeners=function(e){var r;return e?(r=f?f+e:e,this._events[r]&&H(this,r)):(this._events=new S,this._eventsCount=0),this};y.prototype.off=y.prototype.removeListener;y.prototype.addListener=y.prototype.on;y.prefixed=f;y.EventEmitter=y;typeof G<"u"&&(G.exports=y)});import*as h from"node:dns/promises";var Z=ke(oe(),1);var I=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},J=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},ie=a=>globalThis.DOMException===void 0?new J(a):new DOMException(a),ae=a=>{let e=a.reason===void 0?ie("This operation was aborted."):a.reason;return e instanceof Error?e:ie(e)};function K(a,e){let{milliseconds:r,fallback:t,message:n,customTimers:o={setTimeout,clearTimeout}}=e,s,i,u=new Promise((m,l)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(e.signal){let{signal:p}=e;p.aborted&&l(ae(p)),i=()=>{l(ae(p))},p.addEventListener("abort",i,{once:!0})}if(r===Number.POSITIVE_INFINITY){a.then(m,l);return}let d=new I;s=o.setTimeout.call(void 0,()=>{if(t){try{m(t())}catch(p){l(p)}return}typeof a.cancel=="function"&&a.cancel(),n===!1?m():n instanceof Error?l(n):(d.message=n??`Promise timed out after ${r} milliseconds`,l(d))},r),(async()=>{try{m(await a)}catch(p){l(p)}})()}).finally(()=>{u.clear(),i&&e.signal&&e.signal.removeEventListener("abort",i)});return u.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},u}function ee(a,e,r){let t=0,n=a.length;for(;n>0;){let o=Math.trunc(n/2),s=t+o;r(a[s],e)<=0?(t=++s,n-=o+1):n=o}return t}var E=class{#e=[];enqueue(e,r){r={priority:0,...r};let t={priority:r.priority,id:r.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=r.priority){this.#e.push(t);return}let n=ee(this.#e,t,(o,s)=>s.priority-o.priority);this.#e.splice(n,0,t)}setPriority(e,r){let t=this.#e.findIndex(o=>o.id===e);if(t===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[n]=this.#e.splice(t,1);this.enqueue(n.run,{priority:r,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return this.#e.length}};var R=class extends Z.default{#e;#i;#o=0;#p;#a;#h=0;#t;#c;#r;#g;#s=0;#l;#n;#v;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:E,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#i=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#p=e.intervalCap,this.#a=e.interval,this.#r=new e.queueClass,this.#g=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#v=e.throwOnTimeout===!0,this.#n=e.autoStart===!1}get#w(){return this.#i||this.#o<this.#p}get#R(){return this.#s<this.#l}#x(){this.#s--,this.#u(),this.emit("next")}#P(){this.#f(),this.#y(),this.#c=void 0}get#C(){let e=Date.now();if(this.#t===void 0){let r=this.#h-e;if(r<0)this.#o=this.#e?this.#s:0;else return this.#c===void 0&&(this.#c=setTimeout(()=>{this.#P()},r)),!0}return!1}#u(){if(this.#r.size===0)return this.#t&&clearInterval(this.#t),this.#t=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#n){let e=!this.#C;if(this.#w&&this.#R){let r=this.#r.dequeue();return r?(this.emit("active"),r(),e&&this.#y(),!0):!1}}return!1}#y(){this.#i||this.#t!==void 0||(this.#t=setInterval(()=>{this.#f()},this.#a),this.#h=Date.now()+this.#a)}#f(){this.#o===0&&this.#s===0&&this.#t&&(clearInterval(this.#t),this.#t=void 0),this.#o=this.#e?this.#s:0,this.#m()}#m(){for(;this.#u(););}get concurrency(){return this.#l}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#l=e,this.#m()}async#A(e){return new Promise((r,t)=>{e.addEventListener("abort",()=>{t(e.reason)},{once:!0})})}setPriority(e,r){this.#r.setPriority(e,r)}async add(e,r={}){return r.id??=(this.#b++).toString(),r={timeout:this.timeout,throwOnTimeout:this.#v,...r},new Promise((t,n)=>{this.#r.enqueue(async()=>{this.#s++,this.#o++;try{r.signal?.throwIfAborted();let o=e({signal:r.signal});r.timeout&&(o=K(Promise.resolve(o),{milliseconds:r.timeout})),r.signal&&(o=Promise.race([o,this.#A(r.signal)]));let s=await o;t(s),this.emit("completed",s)}catch(o){if(o instanceof I&&!r.throwOnTimeout){t();return}n(o),this.emit("error",o)}finally{this.#x()}},r),this.emit("add"),this.#u()})}async addAll(e,r){return Promise.all(e.map(async t=>this.add(t,r)))}start(){return this.#n?(this.#n=!1,this.#m(),this):this}pause(){this.#n=!0}clear(){this.#r=new this.#g}async onEmpty(){this.#r.size!==0&&await this.#d("empty")}async onSizeLessThan(e){this.#r.size<e||await this.#d("next",()=>this.#r.size<e)}async onIdle(){this.#s===0&&this.#r.size===0||await this.#d("idle")}async#d(e,r){return new Promise(t=>{let n=()=>{r&&!r()||(this.off(e,n),t())};this.on(e,n)})}get size(){return this.#r.size}sizeBy(e){return this.#r.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#n}};var W=class{queue;config;constructor(e={}){this.config={enabled:e.enabled??!0,limit:e.limit&&e.limit.concurrency>0?e.limit:{concurrency:10,interval:1e3,intervalCap:750,carryoverConcurrencyCount:!0}};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval,r.intervalCap=this.config.limit.intervalCap,r.carryoverConcurrencyCount=typeof r.carryoverConcurrencyCount=="boolean"?r.carryoverConcurrencyCount:!0),this.queue=new R(r)}updateConfig(e){this.config={enabled:e.enabled??this.config.enabled,limit:e.limit??this.config.limit};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval,r.intervalCap=this.config.limit.intervalCap),this.queue=new R(r)}get enabled(){return this.config.enabled}get queueSize(){return this.queue.size}get isFull(){let e=this.queue.pending+this.queue.size,r=this.config.limit.concurrency;return e>=r}async resolve4(e,r){return r?this.queue.add(async()=>h.resolve4(e,r)):this.queue.add(async()=>h.resolve4(e))}async resolve6(e,r){return r?this.queue.add(async()=>h.resolve6(e,r)):this.queue.add(async()=>h.resolve6(e))}async resolveAny(e){return this.queue.add(async()=>h.resolveAny(e))}async resolveCaa(e){return this.queue.add(async()=>h.resolveCaa(e))}async resolveCname(e){return this.queue.add(async()=>h.resolveCname(e))}async resolveMx(e){return this.queue.add(async()=>h.resolveMx(e))}async resolveNaptr(e){return this.queue.add(async()=>h.resolveNaptr(e))}async resolveNs(e){return this.queue.add(async()=>h.resolveNs(e))}async resolvePtr(e){return this.queue.add(async()=>h.resolvePtr(e))}async resolveSoa(e){return this.queue.add(async()=>h.resolveSoa(e))}async resolveSrv(e){return this.queue.add(async()=>h.resolveSrv(e))}async resolveTlsa(e){return this.queue.add(async()=>h.resolveTlsa(e))}async resolveTxt(e){return this.queue.add(async()=>h.resolveTxt(e))}async reverse(e){return this.queue.add(async()=>h.reverse(e))}async resolve(e,r){return this.queue.add(async()=>h.resolve(e,r))}};var Ie={FORMERR:"DNS server claims query was misformatted",SERVFAIL:"DNS server returned general failure",ENOTFOUND:"Domain name not found",NOTIMP:"DNS server does not implement requested operation",REFUSED:"DNS server refused query",YXDOMAIN:"Name exists when it should not",YXRRSET:"RR set exists when it should not",NXRRSET:"RR set that should exist does not",NOTAUTH:"Server not authoritative for zone",NOTZONE:"Name not contained in zone"},Ee={1:"FORMERR",2:"SERVFAIL",3:"ENOTFOUND",4:"NOTIMP",5:"REFUSED",6:"YXDOMAIN",7:"YXRRSET",8:"NXRRSET",9:"NOTAUTH",10:"NOTZONE"};function V(a,e,r){let t=Ee[e]||`DNSSTATUS_${e}`,n=`query${r}`,o=`${n} ${a} ${t}: ${Ie[t]||"Unrecognized DNS error code"}`,s=new Error(o);return s.code=t,s.errno=e,s.syscall=n,s.hostname=a,s}var x=class{queue;config;dohRequest=null;constructor(e={},r){e.limit=e&&e.limit&&e.limit.concurrency>0?e.limit:r,this.config={enabled:e.enabled??!0,limit:e.limit??{concurrency:5}};let t={concurrency:this.config.limit?.concurrency||10};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(t.interval=this.config.limit.interval||1e3,t.intervalCap=this.config.limit.intervalCap||100),this.queue=new R(t)}updateConfig(e){this.config={enabled:e.enabled??this.config.enabled,limit:e.limit&&e.limit.concurrency>0?e.limit:this.config.limit};let r={concurrency:this.config.limit?.concurrency||5};this.config.limit&&"interval"in this.config.limit&&"intervalCap"in this.config.limit&&(r.interval=this.config.limit.interval||1e3,r.intervalCap=this.config.limit.intervalCap||5),this.queue=new R(r)}get enabled(){return this.config.enabled}get queueSize(){return this.queue.size}get isFull(){let e=this.queue.pending+this.queue.size,r=this.config.limit.concurrency;return e>=r}parseDoHResponse(e,r,t=!1){if(!e.Answer||e.Answer.length===0)return[];let n=i=>i.endsWith(".")?i.substring(0,i.length-1):i,o=i=>{let c=l=>typeof l=="object"&&l!==null&&!Array.isArray(l),u=l=>typeof l=="string"&&/^".*"$/.test(l)?l.slice(1,-1):l,m=l=>{let d={};for(let[p,g]of Object.entries(l))g!==void 0&&(d[p]=u(g));return d};return Array.isArray(i)&&i.every(c)?i.map(m):c(i)?m(i):i},s=e.Answer.filter(i=>{let c={A:1,AAAA:28,ANY:255,CAA:257,CNAME:5,MX:15,NAPTR:35,NS:2,PTR:12,SOA:6,SRV:33,TLSA:52,TXT:16};return i.type===c[r]||r==="ANY"});switch(r){case"A":case"AAAA":case"CNAME":case"NS":case"PTR":return t?s.map(i=>({address:i.data,ttl:i.TTL})):s.map(i=>i.data);case"MX":return o(s.map(i=>{let[c,u]=i.data.split(" "),m={exchange:n(u||""),priority:parseInt(c||"0",10)};return t?{...m,ttl:i.TTL}:m}));case"SRV":return o(s.map(i=>{let[c,u,m,l]=i.data.split(" "),d={priority:parseInt(c||"0",10),weight:parseInt(u||"0",10),port:parseInt(m||"0",10),name:l||""};return t?{...d,ttl:i.TTL}:d}));case"SOA":if(s.length>0){let[i,c,u,m,l,d,p]=s[0].data.split(" "),g={nsname:i,hostmaster:c,serial:parseInt(u,10),refresh:parseInt(m,10),retry:parseInt(l,10),expire:parseInt(d,10),minttl:parseInt(p,10)};return o(t?{...g,ttl:s[0].TTL}:g)}throw new Error("No SOA record found");case"TXT":return o(s.map(i=>i.data.split('" "').map(c=>c.replace(/^"|"$/g,""))));case"CAA":return o(s.map(i=>{let[c,u,m]=i.data.split(" "),l={critical:parseInt(c,10),issue:u==="issue"?m:void 0,issuewild:u==="issuewild"?m:void 0,iodef:u==="iodef"?m:void 0};return t?{...l,ttl:i.TTL}:l}));case"NAPTR":return o(s.map(i=>{let[c,u,m,l,d,p]=i.data.split(" "),g={order:parseInt(c||"0",10),preference:parseInt(u||"0",10),flags:m||"",service:l||"",regexp:d||"",replacement:p||""};return t?{...g,ttl:i.TTL}:g}));case"TLSA":return o(s.map(i=>{let[c,u,m]=i.data.split(" "),l={certUsage:parseInt(c||"0",10),selector:parseInt(u||"0",10),match:parseInt(m||"0",10),data:new ArrayBuffer(0)};return t?{...l,ttl:i.TTL}:l}));case"ANY":return o(s.map(i=>({type:i.type,data:i.data,ttl:i.TTL})));default:return s.map(i=>i.data)}}async resolve4(e,r){return this.queue.add(async()=>{let t=await this.dohRequest(e,"A");return this.parseDoHResponse(t,"A",r?.ttl)})}async resolve6(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"AAAA");return this.parseDoHResponse(n,"AAAA",r?.ttl)})||[]}async resolveAny(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"ANY");return this.parseDoHResponse(t,"ANY")})||[]}async resolveCaa(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"CAA");return this.parseDoHResponse(t,"CAA")})||[]}async resolveCname(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"CNAME");return this.parseDoHResponse(t,"CNAME")})||[]}async resolveMx(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"MX");return this.parseDoHResponse(t,"MX")})||[]}async resolveNaptr(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"NAPTR");return this.parseDoHResponse(t,"NAPTR")})||[]}async resolveNs(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"NS");return this.parseDoHResponse(t,"NS")})||[]}async resolvePtr(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"PTR");return this.parseDoHResponse(t,"PTR")})||[]}async resolveSoa(e){return this.queue.add(async()=>{let r=await this.dohRequest(e,"SOA");return this.parseDoHResponse(r,"SOA")})}async resolveSrv(e){return await this.queue.add(async()=>{let t=await this.dohRequest(e,"SRV");return this.parseDoHResponse(t,"SRV")})||[]}async resolveTlsa(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"TLSA");return this.parseDoHResponse(n,"TLSA",r?.ttl)})||[]}async resolveTxt(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"TXT");return this.parseDoHResponse(n,"TXT",r?.ttl)})||[]}async reverse(e,r){return await this.queue.add(async()=>{let n=await this.dohRequest(e,"PTR");return this.parseDoHResponse(n,"PTR",r?.ttl)})||[]}async resolve(e,r="A",t){return await this.queue.add(async()=>{let o=await this.dohRequest(e,r);return this.parseDoHResponse(o,r,t?.ttl)})||(r==="SOA"?{}:[])}};var U=class extends x{baseUrl="https://dns.google/resolve";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:500,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}async request(e,r){let t=new URL(this.baseUrl);t.searchParams.set("name",e),t.searchParams.set("type",r);let n=await fetch(t.toString(),{headers:{Accept:"application/dns-json"}});if(!n.ok)throw new Error(`Google DoH request failed: ${n.status} ${n.statusText}`);let o=await n.json();if(o.Status!==0)throw V(e,o.Status,r);return o}};var $=class extends x{baseUrl="https://cloudflare-dns.com/dns-query";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:650,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}async request(e,r){let t=new URL(this.baseUrl);t.searchParams.set("name",e),t.searchParams.set("type",r);let n=await fetch(t.toString(),{headers:{Accept:"application/dns-json"}});if(!n.ok)throw new Error(`Cloudflare DoH request failed: ${n.status} ${n.statusText}`);let o=await n.json();if(o.Status!==0)throw V(e,o.Status,r);return o}};var qe={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,NAPTR:35,CAA:257,TLSA:52,ANY:255},B=class extends x{baseUrl="https://dns.quad9.net/dns-query";constructor(e={}){super(e,{concurrency:10,interval:1e3,intervalCap:500,carryoverConcurrencyCount:!0}),this.dohRequest=this.request.bind(this)}encodeDNSQuery(e,r){let t=qe[r.toUpperCase()];if(!t)throw new Error(`Unsupported DNS type: ${r}`);let n=e.split("."),o=Buffer.concat([...n.map(u=>{let m=Buffer.alloc(u.length+1);return m.writeUInt8(u.length,0),m.write(u,1),m}),Buffer.from([0])]),s=Buffer.alloc(12);s.writeUInt16BE(Math.floor(Math.random()*65535),0),s.writeUInt16BE(256,2),s.writeUInt16BE(1,4);let i=Buffer.alloc(2);i.writeUInt16BE(t,0);let c=Buffer.alloc(2);return c.writeUInt16BE(1,0),Buffer.concat([s,o,i,c])}readName(e,r){let t=[],n=!1,o=0;for(;;){let s=e[r];if((s&192)===192){let i=e.readUInt16BE(r)&16383;n||(o=r+2),r=i,n=!0}else if(s===0){r++;break}else t.push(e.toString("utf8",r+1,r+1+s)),r+=s+1}return[t.join("."),n?o:r]}decodeRData(e,r,t,n){switch(t){case 1:return[Array.from(e.slice(r,r+4)).join("."),r+4];case 28:{let o=[];for(let s=0;s<8;s++)o.push(e.readUInt16BE(r+s*2).toString(16));return[o.join(":"),r+16]}case 2:case 5:case 12:{let[o,s]=this.readName(e,r);return[o,s]}case 15:{let o=e.readUInt16BE(r),[s,i]=this.readName(e,r+2);return[`${o} ${s}`,i]}case 16:{let o=e.readUInt8(r);return[e.toString("utf8",r+1,r+1+o),r+1+o]}case 6:{let[o,s]=this.readName(e,r),[i,c]=this.readName(e,s),u=e.readUInt32BE(c),m=e.readUInt32BE(c+4),l=e.readUInt32BE(c+8),d=e.readUInt32BE(c+12),p=e.readUInt32BE(c+16);return[`${o} ${i} ${u} ${m} ${l} ${d} ${p}`,c+20]}default:return[e.slice(r,r+n).toString("hex"),r+n]}}async request(e,r){let t=this.encodeDNSQuery(e,r),n=await fetch(this.baseUrl,{method:"POST",headers:{"Content-Type":"application/dns-message",Accept:"application/dns-message"},body:t}),o=Buffer.from(await n.arrayBuffer()),s=o.readUInt16BE(2),i=o.readUInt16BE(4),c=o.readUInt16BE(6),u=o.readUInt16BE(8),m=o.readUInt16BE(10),l=(s&256)>0,d=(s&512)>0,p=(s&128)>0,g=(s&32)>0,v=(s&16)>0,C=s&15,w=12,re=[];for(let M=0;M<i;M++){let[_,N]=this.readName(o,w),Q=o.readUInt16BE(N);re.push({name:_,type:Q}),w=N+4}let F=M=>{let _=[];for(let N=0;N<M;N++){let[Q,j]=this.readName(o,w),te=o.readUInt16BE(j),ve=o.readUInt32BE(j+4),ye=o.readUInt16BE(j+8),[fe,be]=this.decodeRData(o,j+10,te,ye);_.push({name:Q,type:te,TTL:ve,data:fe}),w=be}return _},pe=F(c),he=F(u),ge=F(m);return{Status:C,TC:d,RD:l,RA:p,AD:g,CD:v,Question:re,Answer:pe,Authority:he,Additional:ge}}};var q=class extends Error{constructor(){super("No DNS providers are enabled"),this.name="NoEnabledProvidersError"}},L=class extends Error{constructor(e){super(`Invalid hostname: ${e}`),this.name="InvalidHostnameError"}},z=class extends Error{constructor(e){super(`Provider '${e}' is not enabled`),this.name="ProviderNotEnabledError"}},A=class extends Error{constructor(e){super(`Invalid provider: ${e}`),this.name="InvalidProviderError"}};var ce=[".aaa",".aarp",".abarth",".abb",".abbott",".abbvie",".abc",".able",".abogado",".abudhabi",".ac",".academy",".accenture",".accountant",".accountants",".aco",".active",".actor",".ad",".adac",".ads",".adult",".ae",".aeg",".aero",".aetna",".af",".afamilycompany",".afl",".africa",".ag",".agakhan",".agency",".ai",".aig",".aigo",".airbus",".airforce",".airtel",".akdn",".al",".alfaromeo",".alibaba",".alipay",".allfinanz",".allstate",".ally",".alsace",".alstom",".am",".amazon",".americanexpress",".americanfamily",".amex",".amfam",".amica",".amsterdam",".an",".analytics",".android",".anquan",".anz",".ao",".aol",".apartments",".app",".apple",".aq",".aquarelle",".ar",".arab",".aramco",".archi",".army",".arpa",".art",".arte",".as",".asda",".asia",".associates",".at",".athleta",".attorney",".au",".auction",".audi",".audible",".audio",".auspost",".author",".auto",".autos",".avianca",".aw",".aws",".ax",".axa",".az",".azure",".ba",".baby",".baidu",".banamex",".bananarepublic",".band",".bank",".bar",".barcelona",".barclaycard",".barclays",".barefoot",".bargains",".baseball",".basketball",".bauhaus",".bayern",".bb",".bbc",".bbt",".bbva",".bcg",".bcn",".bd",".be",".beats",".beauty",".beer",".bentley",".berlin",".best",".bestbuy",".bet",".bf",".bg",".bh",".bharti",".bi",".bible",".bid",".bike",".bing",".bingo",".bio",".biz",".bj",".bl",".black",".blackfriday",".blanco",".blockbuster",".blog",".bloomberg",".blue",".bm",".bms",".bmw",".bn",".bnl",".bnpparibas",".bo",".boats",".boehringer",".bofa",".bom",".bond",".boo",".book",".booking",".boots",".bosch",".bostik",".boston",".bot",".boutique",".box",".bq",".br",".bradesco",".bridgestone",".broadway",".broker",".brother",".brussels",".bs",".bt",".budapest",".bugatti",".build",".builders",".business",".buy",".buzz",".bv",".bw",".by",".bz",".bzh",".ca",".cab",".cafe",".cal",".call",".calvinklein",".cam",".camera",".camp",".cancerresearch",".canon",".capetown",".capital",".capitalone",".car",".caravan",".cards",".care",".career",".careers",".cars",".cartier",".casa",".case",".caseih",".cash",".casino",".cat",".catering",".catholic",".cba",".cbn",".cbre",".cbs",".cc",".cd",".ceb",".center",".ceo",".cern",".cf",".cfa",".cfd",".cg",".ch",".chanel",".channel",".charity",".chase",".chat",".cheap",".chintai",".chloe",".christmas",".chrome",".chrysler",".church",".ci",".cipriani",".circle",".cisco",".citadel",".citi",".citic",".city",".cityeats",".ck",".cl",".claims",".cleaning",".click",".clinic",".clinique",".clothing",".cloud",".club",".clubmed",".cm",".cn",".co",".coach",".codes",".coffee",".college",".cologne",".com",".comcast",".commbank",".community",".company",".compare",".computer",".comsec",".condos",".construction",".consulting",".contact",".contractors",".cooking",".cookingchannel",".cool",".coop",".corsica",".country",".coupon",".coupons",".courses",".cpa",".cr",".credit",".creditcard",".creditunion",".cricket",".crown",".crs",".cruise",".cruises",".csc",".cu",".cuisinella",".cv",".cw",".cx",".cy",".cymru",".cyou",".cz",".dabur",".dad",".dance",".data",".date",".dating",".datsun",".day",".dclk",".dds",".de",".deal",".dealer",".deals",".degree",".delivery",".dell",".deloitte",".delta",".democrat",".dental",".dentist",".desi",".design",".dev",".dhl",".diamonds",".diet",".digital",".direct",".directory",".discount",".discover",".dish",".diy",".dj",".dk",".dm",".dnp",".do",".docs",".doctor",".dodge",".dog",".doha",".domains",".doosan",".dot",".download",".drive",".dtv",".dubai",".duck",".dunlop",".duns",".dupont",".durban",".dvag",".dvr",".dz",".earth",".eat",".ec",".eco",".edeka",".edu",".education",".ee",".eg",".eh",".email",".emerck",".energy",".engineer",".engineering",".enterprises",".epost",".epson",".equipment",".er",".ericsson",".erni",".es",".esq",".estate",".esurance",".et",".etisalat",".eu",".eurovision",".eus",".events",".everbank",".exchange",".expert",".exposed",".express",".extraspace",".fage",".fail",".fairwinds",".faith",".family",".fan",".fans",".farm",".farmers",".fashion",".fast",".fedex",".feedback",".ferrari",".ferrero",".fi",".fiat",".fidelity",".fido",".film",".final",".finance",".financial",".fire",".firestone",".firmdale",".fish",".fishing",".fit",".fitness",".fj",".fk",".flickr",".flights",".flir",".florist",".flowers",".flsmidth",".fly",".fm",".fo",".foo",".food",".foodnetwork",".football",".ford",".forex",".forsale",".forum",".foundation",".fox",".fr",".free",".fresenius",".frl",".frogans",".frontdoor",".frontier",".ftr",".fujitsu",".fujixerox",".fun",".fund",".furniture",".futbol",".fyi",".ga",".gal",".gallery",".gallo",".gallup",".game",".games",".gap",".garden",".gay",".gb",".gbiz",".gd",".gdn",".ge",".gea",".gent",".genting",".george",".gf",".gg",".ggee",".gh",".gi",".gift",".gifts",".gives",".giving",".gl",".glade",".glass",".gle",".global",".globo",".gm",".gmail",".gmbh",".gmo",".gmx",".gn",".godaddy",".gold",".goldpoint",".golf",".goo",".goodhands",".goodyear",".goog",".google",".gop",".got",".gov",".gp",".gq",".gr",".grainger",".graphics",".gratis",".green",".gripe",".grocery",".group",".gs",".gt",".gu",".guardian",".gucci",".guge",".guide",".guitars",".guru",".gw",".gy",".hair",".hamburg",".hangout",".haus",".hbo",".hdfc",".hdfcbank",".health",".healthcare",".help",".helsinki",".here",".hermes",".hgtv",".hiphop",".hisamitsu",".hitachi",".hiv",".hk",".hkt",".hm",".hn",".hockey",".holdings",".holiday",".homedepot",".homegoods",".homes",".homesense",".honda",".honeywell",".horse",".hospital",".host",".hosting",".hot",".hoteles",".hotels",".hotmail",".house",".how",".hr",".hsbc",".ht",".htc",".hu",".hughes",".hyatt",".hyundai",".ibm",".icbc",".ice",".icu",".id",".ie",".ieee",".ifm",".iinet",".ikano",".il",".im",".imamat",".imdb",".immo",".immobilien",".in",".inc",".industries",".infiniti",".info",".ing",".ink",".institute",".insurance",".insure",".int",".intel",".international",".intuit",".investments",".io",".ipiranga",".iq",".ir",".irish",".is",".iselect",".ismaili",".ist",".istanbul",".it",".itau",".itv",".iveco",".iwc",".jaguar",".java",".jcb",".jcp",".je",".jeep",".jetzt",".jewelry",".jio",".jlc",".jll",".jm",".jmp",".jnj",".jo",".jobs",".joburg",".jot",".joy",".jp",".jpmorgan",".jprs",".juegos",".juniper",".kaufen",".kddi",".ke",".kerryhotels",".kerrylogistics",".kerryproperties",".kfh",".kg",".kh",".ki",".kia",".kids",".kim",".kinder",".kindle",".kitchen",".kiwi",".km",".kn",".koeln",".komatsu",".kosher",".kp",".kpmg",".kpn",".kr",".krd",".kred",".kuokgroup",".kw",".ky",".kyoto",".kz",".la",".lacaixa",".ladbrokes",".lamborghini",".lamer",".lancaster",".lancia",".lancome",".land",".landrover",".lanxess",".lasalle",".lat",".latino",".latrobe",".law",".lawyer",".lb",".lc",".lds",".lease",".leclerc",".lefrak",".legal",".lego",".lexus",".lgbt",".li",".liaison",".lidl",".life",".lifeinsurance",".lifestyle",".lighting",".like",".lilly",".limited",".limo",".lincoln",".linde",".link",".lipsy",".live",".living",".lixil",".lk",".llc",".llp",".loan",".loans",".locker",".locus",".loft",".lol",".london",".lotte",".lotto",".love",".lpl",".lplfinancial",".lr",".ls",".lt",".ltd",".ltda",".lu",".lundbeck",".lupin",".luxe",".luxury",".lv",".ly",".ma",".macys",".madrid",".maif",".maison",".makeup",".man",".management",".mango",".map",".market",".marketing",".markets",".marriott",".marshalls",".maserati",".mattel",".mba",".mc",".mcd",".mcdonalds",".mckinsey",".md",".me",".med",".media",".meet",".melbourne",".meme",".memorial",".men",".menu",".meo",".merckmsd",".metlife",".mf",".mg",".mh",".miami",".microsoft",".mil",".mini",".mint",".mit",".mitsubishi",".mk",".ml",".mlb",".mls",".mm",".mma",".mn",".mo",".mobi",".mobile",".mobily",".moda",".moe",".moi",".mom",".monash",".money",".monster",".montblanc",".mopar",".mormon",".mortgage",".moscow",".moto",".motorcycles",".mov",".movie",".movistar",".mp",".mq",".mr",".ms",".msd",".mt",".mtn",".mtpc",".mtr",".mu",".museum",".music",".mutual",".mutuelle",".mv",".mw",".mx",".my",".mz",".na",".nab",".nadex",".nagoya",".name",".nationwide",".natura",".navy",".nba",".nc",".ne",".nec",".net",".netbank",".netflix",".network",".neustar",".new",".newholland",".news",".next",".nextdirect",".nexus",".nf",".nfl",".ng",".ngo",".nhk",".ni",".nico",".nike",".nikon",".ninja",".nissan",".nissay",".nl",".no",".nokia",".northwesternmutual",".norton",".now",".nowruz",".nowtv",".np",".nr",".nra",".nrw",".ntt",".nu",".nyc",".nz",".obi",".observer",".off",".office",".okinawa",".olayan",".olayangroup",".oldnavy",".ollo",".om",".omega",".one",".ong",".onl",".online",".onyourside",".ooo",".open",".oracle",".orange",".org",".organic",".orientexpress",".origins",".osaka",".otsuka",".ott",".ovh",".pa",".page",".pamperedchef",".panasonic",".panerai",".paris",".pars",".partners",".parts",".party",".passagens",".pay",".pccw",".pe",".pet",".pf",".pfizer",".pg",".ph",".pharmacy",".phd",".philips",".phone",".photo",".photography",".photos",".physio",".piaget",".pics",".pictet",".pictures",".pid",".pin",".ping",".pink",".pioneer",".pizza",".pk",".pl",".place",".play",".playstation",".plumbing",".plus",".pm",".pn",".pnc",".pohl",".poker",".politie",".porn",".post",".pr",".pramerica",".praxi",".press",".prime",".pro",".prod",".productions",".prof",".progressive",".promo",".properties",".property",".protection",".pru",".prudential",".ps",".pt",".pub",".pw",".pwc",".py",".qa",".qpon",".quebec",".quest",".qvc",".racing",".radio",".raid",".re",".read",".realestate",".realtor",".realty",".recipes",".red",".redstone",".redumbrella",".rehab",".reise",".reisen",".reit",".reliance",".ren",".rent",".rentals",".repair",".report",".republican",".rest",".restaurant",".review",".reviews",".rexroth",".rich",".richardli",".ricoh",".rightathome",".ril",".rio",".rip",".rmit",".ro",".rocher",".rocks",".rodeo",".rogers",".room",".rs",".rsvp",".ru",".rugby",".ruhr",".run",".rw",".rwe",".ryukyu",".sa",".saarland",".safe",".safety",".sakura",".sale",".salon",".samsclub",".samsung",".sandvik",".sandvikcoromant",".sanofi",".sap",".sapo",".sarl",".sas",".save",".saxo",".sb",".sbi",".sbs",".sc",".sca",".scb",".schaeffler",".schmidt",".scholarships",".school",".schule",".schwarz",".science",".scjohnson",".scor",".scot",".sd",".se",".search",".seat",".secure",".security",".seek",".select",".sener",".services",".ses",".seven",".sew",".sex",".sexy",".sfr",".sg",".sh",".shangrila",".sharp",".shaw",".shell",".shia",".shiksha",".shoes",".shop",".shopping",".shouji",".show",".showtime",".shriram",".si",".silk",".sina",".singles",".site",".sj",".sk",".ski",".skin",".sky",".skype",".sl",".sling",".sm",".smart",".smile",".sn",".sncf",".so",".soccer",".social",".softbank",".software",".sohu",".solar",".solutions",".song",".sony",".soy",".spa",".space",".spiegel",".sport",".spot",".spreadbetting",".sr",".srl",".srt",".ss",".st",".stada",".staples",".star",".starhub",".statebank",".statefarm",".statoil",".stc",".stcgroup",".stockholm",".storage",".store",".stream",".studio",".study",".style",".su",".sucks",".supplies",".supply",".support",".surf",".surgery",".suzuki",".sv",".swatch",".swiftcover",".swiss",".sx",".sy",".sydney",".symantec",".systems",".sz",".tab",".taipei",".talk",".taobao",".target",".tatamotors",".tatar",".tattoo",".tax",".taxi",".tc",".tci",".td",".tdk",".team",".tech",".technology",".tel",".telecity",".telefonica",".temasek",".tennis",".teva",".tf",".tg",".th",".thd",".theater",".theatre",".tiaa",".tickets",".tienda",".tiffany",".tips",".tires",".tirol",".tj",".tjmaxx",".tjx",".tk",".tkmaxx",".tl",".tm",".tmall",".tn",".to",".today",".tokyo",".tools",".top",".toray",".toshiba",".total",".tours",".town",".toyota",".toys",".tp",".tr",".trade",".trading",".training",".travel",".travelchannel",".travelers",".travelersinsurance",".trust",".trv",".tt",".tube",".tui",".tunes",".tushu",".tv",".tvs",".tw",".tz",".ua",".ubank",".ubs",".uconnect",".ug",".uk",".um",".unicom",".university",".uno",".uol",".ups",".us",".uy",".uz",".va",".vacations",".vana",".vanguard",".vc",".ve",".vegas",".ventures",".verisign",".versicherung",".vet",".vg",".vi",".viajes",".video",".vig",".viking",".villas",".vin",".vip",".virgin",".visa",".vision",".vista",".vistaprint",".viva",".vivo",".vlaanderen",".vn",".vodka",".volkswagen",".volvo",".vote",".voting",".voto",".voyage",".vu",".vuelos",".wales",".walmart",".walter",".wang",".wanggou",".warman",".watch",".watches",".weather",".weatherchannel",".webcam",".weber",".website",".wed",".wedding",".weibo",".weir",".wf",".whoswho",".wien",".wiki",".williamhill",".win",".windows",".wine",".winners",".wme",".wolterskluwer",".woodside",".work",".works",".world",".wow",".ws",".wtc",".wtf",".xbox",".xerox",".xfinity",".xihuan",".xin",".\u6D4B\u8BD5",".\u0915\u0949\u092E",".\u092A\u0930\u0940\u0915\u094D\u0937\u093E",".\u30BB\u30FC\u30EB",".\u4F5B\u5C71",".\u0CAD\u0CBE\u0CB0\u0CA4",".\u6148\u5584",".\u96C6\u56E2",".\u5728\u7EBF",".\uD55C\uAD6D",".\u0B2D\u0B3E\u0B30\u0B24",".\u5927\u4F17\u6C7D\u8F66",".\u70B9\u770B",".\u0E04\u0E2D\u0E21",".\u09AD\u09BE\u09F0\u09A4",".\u09AD\u09BE\u09B0\u09A4",".\u516B\u5366","\u200F.\u05D9\u05E9\u05E8\u05D0\u05DC\u200E","\u200F.\u0645\u0648\u0642\u0639\u200E",".\u09AC\u09BE\u0982\u09B2\u09BE",".\u516C\u76CA",".\u516C\u53F8",".\u9999\u683C\u91CC\u62C9",".\u7F51\u7AD9",".\u79FB\u52A8",".\u6211\u7231\u4F60",".\u043C\u043E\u0441\u043A\u0432\u0430",".\u0438\u0441\u043F\u044B\u0442\u0430\u043D\u0438\u0435",".\u049B\u0430\u0437",".\u043A\u0430\u0442\u043E\u043B\u0438\u043A",".\u043E\u043D\u043B\u0430\u0439\u043D",".\u0441\u0430\u0439\u0442",".\u8054\u901A",".\u0441\u0440\u0431",".\u0431\u0433",".\u0431\u0435\u043B","\u200F.\u05E7\u05D5\u05DD\u200E",".\u65F6\u5C1A",".\u5FAE\u535A",".\uD14C\uC2A4\uD2B8",".\u6DE1\u9A6C\u9521",".\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3",".\u043E\u0440\u0433",".\u0928\u0947\u091F",".\u30B9\u30C8\u30A2",".\u30A2\u30DE\u30BE\u30F3",".\uC0BC\uC131",".\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD",".\u5546\u6807",".\u5546\u5E97",".\u5546\u57CE",".\u0434\u0435\u0442\u0438",".\u043C\u043A\u0434","\u200F.\u05D8\u05E2\u05E1\u05D8\u200E",".\u0435\u044E",".\u30DD\u30A4\u30F3\u30C8",".\u65B0\u95FB",".\u5DE5\u884C",".\u5BB6\u96FB","\u200F.\u0643\u0648\u0645\u200E",".\u4E2D\u6587\u7F51",".\u4E2D\u4FE1",".\u4E2D\u56FD",".\u4E2D\u570B",".\u5A31\u4E50",".\u8C37\u6B4C",".\u0C2D\u0C3E\u0C30\u0C24\u0C4D",".\u0DBD\u0D82\u0D9A\u0DCF",".\u96FB\u8A0A\u76C8\u79D1",".\u8D2D\u7269",".\u6E2C\u8A66",".\u30AF\u30E9\u30A6\u30C9",".\u0AAD\u0ABE\u0AB0\u0AA4",".\u901A\u8CA9",".\u092D\u093E\u0930\u0924\u092E\u094D",".\u092D\u093E\u0930\u0924",".\u092D\u093E\u0930\u094B\u0924","\u200F.\u0622\u0632\u0645\u0627\u06CC\u0634\u06CC\u200E",".\u0BAA\u0BB0\u0BBF\u0B9F\u0BCD\u0B9A\u0BC8",".\u7F51\u5E97",".\u0938\u0902\u0917\u0920\u0928",".\u9910\u5385",".\u7F51\u7EDC",".\u043A\u043E\u043C",".\u0443\u043A\u0440",".\u9999\u6E2F",".\u4E9A\u9A6C\u900A",".\u8BFA\u57FA\u4E9A",".\u98DF\u54C1",".\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE",".\u98DE\u5229\u6D66","\u200F.\u0625\u062E\u062A\u0628\u0627\u0631\u200E",".\u53F0\u6E7E",".\u53F0\u7063",".\u624B\u8868",".\u624B\u673A",".\u043C\u043E\u043D","\u200F.\u0627\u0644\u062C\u0632\u0627\u0626\u0631\u200E","\u200F.\u0639\u0645\u0627\u0646\u200E","\u200F.\u0627\u0631\u0627\u0645\u0643\u0648\u200E","\u200F.\u0627\u06CC\u0631\u0627\u0646\u200E","\u200F.\u0627\u0644\u0639\u0644\u064A\u0627\u0646\u200E","\u200F.\u0627\u062A\u0635\u0627\u0644\u0627\u062A\u200E","\u200F.\u0627\u0645\u0627\u0631\u0627\u062A\u200E","\u200F.\u0628\u0627\u0632\u0627\u0631\u200E","\u200F.\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627\u200E","\u200F.\u067E\u0627\u06A9\u0633\u062A\u0627\u0646\u200E","\u200F.\u0627\u0644\u0627\u0631\u062F\u0646\u200E","\u200F.\u0645\u0648\u0628\u0627\u064A\u0644\u064A\u200E","\u200F.\u0628\u0627\u0631\u062A\u200E","\u200F.\u0628\u06BE\u0627\u0631\u062A\u200E","\u200F.\u0627\u0644\u0645\u063A\u0631\u0628\u200E","\u200F.\u0627\u0628\u0648\u0638\u0628\u064A\u200E","\u200F.\u0627\u0644\u0628\u062D\u0631\u064A\u0646\u200E","\u200F.\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629\u200E","\u200F.\u0680\u0627\u0631\u062A\u200E","\u200F.\u0643\u0627\u062B\u0648\u0644\u064A\u0643\u200E","\u200F.\u0633\u0648\u062F\u0627\u0646\u200E","\u200F.\u0647\u0645\u0631\u0627\u0647\u200E","\u200F.\u0639\u0631\u0627\u0642\u200E","\u200F.\u0645\u0644\u064A\u0633\u064A\u0627\u200E",".\u6FB3\u9580",".\uB2F7\uCEF4",".\u653F\u5E9C","\u200F.\u0634\u0628\u0643\u0629\u200E","\u200F.\u0628\u064A\u062A\u0643\u200E","\u200F.\u0639\u0631\u0628\u200E",".\u10D2\u10D4",".\u673A\u6784",".\u7EC4\u7EC7\u673A\u6784",".\u5065\u5EB7",".\u0E44\u0E17\u0E22","\u200F.\u0633\u0648\u0631\u064A\u0629\u200E",".\u62DB\u8058",".\u0440\u0443\u0441",".\u0440\u0444",".\u73E0\u5B9D","\u200F.\u062A\u0648\u0646\u0633\u200E",".\u5927\u62FF",".\u0EA5\u0EB2\u0EA7",".\u307F\u3093\u306A",".\u30B0\u30FC\u30B0\u30EB",".\u03B5\u03C5",".\u03B5\u03BB",".\u4E16\u754C",".\u66F8\u7C4D",".\u0D2D\u0D3E\u0D30\u0D24\u0D02",".\u0A2D\u0A3E\u0A30\u0A24",".\u7F51\u5740",".\uB2F7\uB137",".\u30B3\u30E0",".\u5929\u4E3B\u6559",".\u6E38\u620F",".verm\xF6gensberater",".verm\xF6gensberatung",".\u4F01\u4E1A",".\u4FE1\u606F",".\u5609\u91CC\u5927\u9152\u5E97",".\u5609\u91CC","\u200F.\u0645\u0635\u0631\u200E","\u200F.\u0642\u0637\u0631\u200E",".\u5E7F\u4E1C",".\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8",".\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE",".\u0570\u0561\u0575",".\u65B0\u52A0\u5761","\u200F.\u0641\u0644\u0633\u0637\u064A\u0646\u200E",".\u30C6\u30B9\u30C8",".\u653F\u52A1",".xperia",".xxx",".xyz",".yachts",".yahoo",".yamaxun",".yandex",".ye",".yodobashi",".yoga",".yokohama",".you",".youtube",".yt",".yun",".za",".zappos",".zara",".zero",".zip",".zippo",".zm",".zone",".zuerich",".zw",".ac.vn",".ae.org",".biz.fj",".biz.pl",".biz.tr",".biz.tt",".biz.vn",".br.com",".cn.com",".co.ag",".co.at",".co.ci",".co.cm",".co.com",".co.cr",".co.de",".co.ee",".co.gg",".co.gy",".co.hu",".co.id",".co.il",".co.im",".co.in",".co.ir",".co.it",".co.je",".co.ke",".co.kr",".co.lc",".co.ls",".co.na",".co.ni",".co.nl",".co.no",".co.nu",".co.nz",".co.om",".co.rs",".co.th",".co.tt",".co.tz",".co.ug",".co.uk",".co.uz",".co.ve",".co.vi",".co.za",".com.ag",".com.ai",".com.ar",".com.au",".com.bb",".com.bd",".com.bm",".com.bo",".com.br",".com.bs",".com.bz",".com.cm",".com.cn",".com.co",".com.cu",".com.cy",".com.de",".com.do",".com.ec",".com.ee",".com.es",".com.fj",".com.gi",".com.gp",".com.gr",".com.gt",".com.gy",".com.hk",".com.hn",".com.hr",".com.ht",".com.kn",".com.lb",".com.lc",".com.lv",".com.mk",".com.mt",".com.mx",".com.my",".com.na",".com.ng",".com.ni",".com.om",".com.pa",".com.pe",".com.ph",".com.pk",".com.pl",".com.pr",".com.pt",".com.py",".com.ro",".com.ru",".com.sb",".com.se",".com.sg",".com.so",".com.sv",".com.tr",".com.tt",".com.tw",".com.ua",".com.uy",".com.uz",".com.vc",".com.ve",".com.vi",".com.vn",".de.com",".edu.vn",".eu.com",".firm.in",".gb.net",".gen.in",".gen.tr",".gr.com",".health.vn",".ind.in",".info.ec",".info.fj",".info.pl",".info.tt",".info.vn",".int.vn",".jpn.com",".ltd.uk",".me.uk",".msk.ru",".name.fj",".name.tr",".name.tt",".name.vn",".net.ag",".net.ai",".net.ar",".net.au",".net.bb",".net.bm",".net.bo",".net.br",".net.bz",".net.cm",".net.cn",".net.co",".net.fj",".net.gg",".net.gp",".net.gt",".net.gy",".net.hn",".net.in",".net.je",".net.lc",".net.lv",".net.my",".net.ni",".net.nz",".net.pl",".net.pr",".net.ru",".net.so",".net.tt",".net.vc",".net.vi",".net.vn",".nom.ag",".nom.es",".nom.ni",".off.ai",".or.at",".or.kr",".org.ag",".org.ai",".org.bb",".org.bm",".org.bo",".org.bz",".org.cn",".org.es",".org.fj",".org.gg",".org.gt",".org.hn",".org.il",".org.in",".org.je",".org.lc",".org.ls",".org.lv",".org.na",".org.ni",".org.nz",".org.pl",".org.pr",".org.ru",".org.so",".org.tt",".org.uk",".org.vc",".org.ve",".org.vi",".org.vn",".plc.uk",".pro.fj",".pro.tt",".pro.vn",".radio.am",".radio.fm",".ru.com",".sa.com",".se.net",".tv.br",".uk.com",".uk.net",".us.com",".us.org",".waw.pl",".web.id",".web.tr",".za.com"];var Y=class{validDomainExtensions;constructor(){this.validDomainExtensions=ce}isDomainExtension(e){let r=e.substring(e.lastIndexOf("."));return this.isValidExtension(r)}domain(e){if(!this.isValidInput(e))return"";let r=this.extractAndCleanDomain(e);return this.parseMainDomain(r)}isValidInput(e){return e!=null&&e.length>=7}extractAndCleanDomain(e){let r;return e.startsWith("http://")||e.startsWith("https://")?r=new URL(e).hostname:e.startsWith("//")?r=new URL(`https:${e}`).hostname:r="~"+e,r.includes("~")&&(r=this.removeUrlFragments(r),r=r.replace("~","")),r}removeUrlFragments(e){return e.includes("@")?e.split("@")[1]:e.includes("/")?e.split("/")[0]:e.includes("?")?e.split("?")[0]:e.includes("#")?e.split("#")[0]:e}parseMainDomain(e){let r=e.split("."),t=r.length;if(t===2){let n=e.substring(e.lastIndexOf("."));return this.isValidExtension(n)?e:""}return t>=3?this.handleComplexDomain(r):""}handleComplexDomain(e){let r=this.getLastThreeParts(e),[,t,n]=r.split("."),o="."+t,s="."+n;return this.isValidExtension(o)&&this.isValidExtension(s)?r:this.isValidExtension(s)?t+"."+n:""}getLastThreeParts(e){return e.length===3?e.join("."):e.slice(-3).join(".")}isValidExtension(e){return this.validDomainExtensions.includes(e.toLowerCase().trim())}};var le=[{name:"Sohu",mx:"a.sohu.com"},{name:"Sohu",mx:"sohu.com"},{name:"Strato",mx:".rzone.de"},{name:"Strato",mx:".strato.de"},{name:"21cn",mx:".21cn.com"},{name:"163",mx:".netease.com"},{name:"Netvigator",mx:".netvigator.com"},{name:"139",mx:".mail.139.com"},{name:"Nate",mx:".nate.com"},{name:"Naver",mx:".naver.com"},{name:"Daum",mx:".daum.kgslb.com"},{name:"Daum",mx:".hanmail.net"},{name:"Ziggo",mx:".ziggo.nl"},{name:"QQ",mx:".qq.com"},{name:"263.net",mx:"263.net"},{name:"Sina",mx:".vip.sina.com"},{name:"Sina",mx:".sina.com.cn"},{name:"Aruba",mx:".aruba.it"},{name:"Aliyun",mx:".mxhichina.com"},{name:"Plala Webmail",mx:".plala.or.jp"},{name:"AOL",mx:"mx-aol.mail"},{name:"Turbify",mx:"mx-biz.mail.am0.yahoodns.net"},{name:"Turbify",mx:"mx-biz.mail.am.yahoodns.net"},{name:"Turbify",mx:"mx-biz.mail.am1.yahoodns.net"},{name:"Turbify",mx:"mx1.biz.mail.yahoo.com"},{name:"Turbify",mx:"mx5.biz.mail.yahoo.com"},{name:"Turbify",mx:".biz.mail.yahoo.com"},{name:"AT&T",mx:".prodigy.net"},{name:"Yahoo",mx:".yahoo."},{name:"Yahoo",mx:".yahoodns.net"},{name:"Zoho",mx:".zoho.com"},{name:"Sitestar Webmail",mx:".sitestar.everyone.net",webmail:"https://webmail.sitestar.net"},{name:"Outlook Web App (OWA)",mx:".serverdata.net",webmail:"https://owa.serverdata.net"},{name:"1and1",mx:".1and1."},{name:"Outlook",mx:"olc.protection.outlook.com"},{name:"Outlook",mx:".mail.outlook.com"},{name:"Outlook",mx:".hotmail."},{name:"Office 365",mx:"mail.protection.outlook.com"},{name:"Office 365",mx:".outlook.com"},{name:"Office 365",mx:".office365.com"},{name:"Gmail",mx:".google.com"},{name:"Mail.ru",mx:".mail.ru"},{name:"Mail.com",mx:".mail.com"},{name:"Earthlink",mx:".earthlink.net"},{name:"Earthlink",mx:".oxsus-vadesecure.net"},{name:"Rackspace",mx:".emailsrvr.com"},{name:"Mimecast",mx:".mimecast.com"},{name:"Godaddy",mx:".secureserver.net"},{name:"Comcast",mx:".comcast.net"},{name:"Office 365",mx:".ppe-hosted.com"},{name:"Office 365",mx:".gslb.pphosted.com"},{name:"Office 365",mx:".arsmtp.com"},{name:"Zoho",mx:".zoho.com"},{name:"ProtonMail",mx:"mail.protonmail.ch"},{name:"Facebook",mx:".facebook.com"},{name:"163",mx:".netease.com"},{name:"163",mx:".163.com"},{name:"263",mx:".263.net"},{name:"Aliyun",mx:".alibaba.com"},{name:"Aliyun",mx:".aliyun.com"},{name:"Amazon",mx:".amazon.com"},{name:"Amazon",mx:".amazonaws.com"},{name:"Anazana",mx:".anazana.com"},{name:"CoreMail",mx:".icoremail.net"},{name:"GMX",mx:".gmx.net"},{name:"GMX",mx:".gmx.com"},{name:"Hinet",mx:".hinet."},{name:"iCloud",mx:".icloud.com"},{name:"Iinet",mx:".iinet.net.au"},{name:"Namecheap",mx:".registrar-servers.com"},{name:"Network Solutions",mx:".myregisteredsite.com"},{name:"Orange",mx:".orange."},{name:"QQ",mx:".qq.com"},{name:"Synaq",mx:".synaq."},{name:"Web.de",mx:".web.de"},{name:"Yandex",mx:".yandex."},{name:"Zmail",mx:".zmail."},{name:"Strato",mx:".strato.de"},{name:"Apple",mx:".apple.com"},{name:"Cox Webmail",mx:".cloudfilter.net"},{name:"Fastmail",mx:".messagingengine.com"},{name:"Mailgun",mx:".mailgun.org"},{name:"Postmark",mx:".pmta.postmarkapp.com"},{name:"SendGrid",mx:".sendgrid.net"},{name:"Elastic Email",mx:".elasticemail.com"},{name:"Zendesk",mx:".zendesk.com"},{name:"Intermedia",mx:".intermedia.net"},{name:"Mailjet",mx:".mailjet.com"},{name:"Front",mx:".frontapp.com"},{name:"Unknown",mx:".................."},{name:"Webmail",mx:".................."},{name:"Zimbra",mx:".................."},{name:"Others",mx:".................."},{name:"Aruba",mx:".................."},{name:"Alibaba",mx:".................."},{name:"IBM",mx:".................."},{name:"Digitalocean",mx:".................."},{name:"AWS Partner",mx:".................."},{name:"Microsoft Exchange",mx:".................."},{name:"Oracle Cloud",mx:".................."},{name:"Roundcube Webmail",mx:".................."},{name:"cPanel Webmail",mx:".................."},{name:"Yahoo (External Provider)",mx:".................."}],ue=["automation","products","product","product.info","product-info","productinfo","alert","alerts","automated","rewards","clientpayments","invites","page-notification","page-notification-noreply","friendupdates","groupupdates","messages","advertise","advertise-noreply","advertise-no.reply","advertise-no-reply","advertise-no_reply","reminders","reminder","notification","paymentnotification","payment-notification","payment.notification","payment_notification","registration","registrations","signup","sign-up","signin","sign-in","email","e-mail","no_reply","whatsinstore","ship","nobody","no-body","publishers","whatsinstore","hosting-security","hosting","accountstatus","account-status","account_status","hosting-service","billing","hostingsecurity","robot","hosting-services","hostingservices","hostingservice","no.reply","paypal","no-reply","feedback","example","donotreply","noreply","do-not-reply","bot","do_not_reply","market.news","clientservices","list","client-services","client.services","abuse","accessibilty","accessibility","accounting","account","accounts.payable","adm","admin","admissions","ads","advertise","advisor","agency","agent","all","api","ask","attorneys","award","bills","bizdev","biz-dev","board","booking","bookings","buzz","callcenter","career","careers","ceo","cfa","chat","chief","comments","contact","contacts","copyright","corporate","courses","customer.services","customercare","customer-care","customerservice","customer-service","customerservicecenter","customer-service-center","custserv","data","design","development","director","directory","domains","editor","editorial","emails","engineering","enquiries","enquiry","event","events","everyone","feedback","finance","foundation","frontdesk","ftp","general","global","grouplegal","group-legal","groups","help","helpdesk","home","hotel","hr","human.resources","humanresources","human-resources","info","information","inquiries","inquiry","instructor","insurance","internet","interoperability","invest","investor","investorrelations","investor-relations","job","jobs","lawoffice","law-office","leasing","legal","library","listing","logistics","mail","mailbox","mailroom","main","manager","marketing","mayor","media","medicalqueries","medical-queries","meetings","members","membership","membersupport","member-support","merchant","misc","news","newsroom","noc","offers","office","online","operations","organiser","organizer","pastor","pharma","photos","politics","postmaster","pr","president","prime","privacy","projects","promos","publicaffairs","public-affairs","publisher","quality","query","questions","radio","realestate","real-estate","realtor","receptionist","redaction","register","remove","repairs","request","research","reservation","reservations","reserve","reserveroom","reserve-room","root","sale","sales","school","schools","secretary","security","service","shopping","spam","staff","subscribe","suggest","support","survey","talent","tourism","tours","trading","training","transfer","travel","travels","unsubscribe","usa","usenet","user","username","users","uucp","verify","volunteer","web","webinfo","webmaster","website","wwinfo","www","www-validator"],me=["yahoo.com","ameritech.net","att.net","bellsouth.net","currently.com","flash.net","nvbell.net","pacbell.net","prodigy.net","sbcglobal.net","snet.net","swbell.net","wans.net","worldnet.att.net","ymail.com","y7mail.com","yahoo.at","yahoo.be","yahoo.bg","yahoo.ca","yahoo.cl","yahoo.co.hu","yahoo.co.id","yahoo.co.il","yahoo.co.in","yahoo.co.kr","yahoo.co.nz","yahoo.co.th","yahoo.co.uk","yahoo.co.za","yahoo.com.ar","yahoo.com.au","yahoo.com.br","yahoo.com.co","yahoo.com.hk","yahoo.com.hr","yahoo.com.mx","yahoo.com.my","yahoo.com.pe","yahoo.com.ph","yahoo.com.sg","yahoo.com.tr","yahoo.com.tw","yahoo.com.ua","yahoo.com.ve","yahoo.com.vn","yahoo.cz","yahoo.de","yahoo.dk","yahoo.ee","yahoo.es","yahoo.fi","yahoo.fr","yahoo.gr","yahoo.hr","yahoo.hu","yahoo.ie","yahoo.in","yahoo.it","yahoo.lt","yahoo.lv","yahoo.nl","yahoo.no","yahoo.pl","yahoo.pt","yahoo.ro","yahoo.rs","yahoo.se","yahoo.si","yahoo.sk","yahoogroups.co.kr","yahoogroups.com.cn","yahoogroups.com.sg","yahoogroups.com.tw","yahoogrupper.dk","yahoogruppi.it","yahooxtra.co.nz"],de=["fuck","shit","scam","hack","crack","spam","phishing","test","testing","fake","null","undefined"];async function X(a,e={}){let{params:r,timeout:t=3e4,maxRetries:n=3,retryDelay:o=1e3,maxRedirects:s=5,validateStatus:i=d=>d>=200&&d<300,onRetry:c,...u}=e,m=a;if(r){let d=new URLSearchParams;Object.entries(r).forEach(([p,g])=>{d.append(p,typeof g=="boolean"?g?"1":"0":String(g))}),m+=(m.includes("?")?"&":"?")+d.toString()}let l=null;for(let d=1;d<=n+1;d++){let p=new AbortController,g=t>0?setTimeout(()=>p.abort(),t):null;try{let v=await fetch(m,{...u,signal:p.signal,redirect:s===0?"error":"follow"});if(g&&clearTimeout(g),!i(v.status))throw new Error(`HTTP ${v.status}: ${v.statusText}`);let C=v.headers.get("content-type")||"",w;return C.includes("application/json")?w=await v.json():C.includes("text/")?w=await v.text():w=await v.arrayBuffer(),{data:w,status:v.status,statusText:v.statusText,finalUrl:v.url,headers:v.headers,retryCount:d-1}}catch(v){if(g&&clearTimeout(g),l=v,d>n||v.name==="AbortError"&&d===1||v.message.includes("HTTP")&&!v.message.includes("5"))break;c&&c(v,d),d<=n&&await new Promise(C=>setTimeout(C,o*d))}}throw l}var O=class a{resolver;findIpKeys=[];rejectList=["page-notification-noreply","reply.craigslist.org",".craigslist.org",".paypal.","@paypal.","advertise-noreply",".intuit.com","advertise-no.reply","advertise-no-reply","advertise-no_reply"];roles=ue;records=le;yahooList=me;domain;IpInfo=null;static instance=null;dns;validationConfig={enableDeepValidation:!1,ipResolver:{findip:{enabled:!1,apiKey:[]},ipApi:!1}};constructor(e){let{options:r,dns:t}=e||{},{enableDeepValidation:n=!1,ipResolver:o={findip:{enabled:!1,apiKey:[]},ipApi:!1}}=r||{};this.validationConfig={enableDeepValidation:n,ipResolver:{...this.validationConfig.ipResolver,...o}},this.dns=new P(t),this.resolver={resolve:this.dns.resolve},this.domain=new Y}static create(e){return a.instance||(a.instance=new a(e)),a.instance}async getMxRecords(e){if(this.is_email(e)&&!e.includes("@")||!e.includes("."))throw new Error("Invalid email address or domain name");let r=e.includes("@")&&e.split("@")[1]||e;try{let t=await this.resolver.resolve(r,"MX");if(t&&Array.isArray(t)&&t.length>0)return t.map(n=>n.exchange);throw new Error(`Failed to resolve MX records for ${r}`)}catch(t){throw t}}async validate(e,r=!1){if(!this.isEmail(e))return{success:!1,type:"Syntanx",email:e.toLowerCase()};if(de.some(o=>e.toLowerCase().split("@")[1].includes(o)))return{success:!1,type:"Rejected",email:e.toLowerCase()};if(this.rejectList.some(o=>e.includes(o)))return{success:!1,type:"Rejected",email:e.toLowerCase()};let n=e.includes("@")&&e.split("@")[1]||e;try{let o=await this.getMxRecords(n),s=[];if(o&&o.length>0){for(let c of o){let u=c.endsWith(".")&&c.startsWith(".")?c.substring(1,c.length-1):c.startsWith(".")?c.substring(1):c.endsWith(".")?c.substring(0,c.length-1):c;if(u.includes(" ")&&u.split(" ").length===2){let m=u.split(" ")[1];m&&s.push(m)}else u.includes(" ")||s.push(u);for(let m of this.records)if(u.includes(m.mx))return m.name==="Yahoo"?this.yahooList.includes(n)?{success:!0,data:{provider:m.name,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}}:u.includes("mx-biz.mail")?{success:!0,data:{provider:"Turbify",email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l))}}:{success:!0,data:{provider:"Yahoo (External Provider)",email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l))}}:{success:!0,data:{provider:m.name,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}}}if(!r||!this.validationConfig.enableDeepValidation)return{success:!0,data:{provider:"Unknown",email:e.toLowerCase(),role:!!this.roles.find(c=>e.toLowerCase().startsWith(c))}};let i=await this.domain_check(n);if(i=i.status?i:await this.domain_check(n,!0),i.status)return{success:!0,data:{provider:i.type,email:e.toLowerCase(),role:!!this.roles.find(c=>e.toLowerCase().startsWith(c)),...i.webmail&&{webmail:i.webmail}}};{let c=!1;for(let u of s){if(c)break;let m=await this.domain_check(u,!0);if(m.status)return{success:!0,data:{provider:m.type,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}};if(typeof u<"u"&&u.length>0)for(u=u.substring(u.indexOf(".")+1);this.domain.domain(u).length>3;){if(m=await this.domain_check(u,!0),m.status)return{success:!0,data:{provider:m.type,email:e.toLowerCase(),role:!!this.roles.find(l=>e.toLowerCase().startsWith(l)),...m.webmail&&{webmail:m.webmail}}};u=u.includes(".")?u.substring(u.indexOf(".")+1):""}}return i=await this.dnsLookup(s),i.status?{success:!0,data:{provider:i.type,email:e.toLowerCase(),role:!!this.roles.find(u=>e.toLowerCase().startsWith(u)),...i.webmail&&{webmail:i.webmail}}}:{success:!0,data:{provider:"Unknown",email:e.toLowerCase(),role:!!this.roles.find(u=>e.toLowerCase().startsWith(u))}}}}else return{success:!1,type:"Invalid",email:e.toLowerCase()}}catch(o){return{success:!1,type:"Error",email:e.toLowerCase(),message:o.message}}}is_wale4r_zimbra(e){try{let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(t&&t[1]&&t[1].includes("zimbra web client"))return!0;let n=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,o;for(;(o=n.exec(e))!==null;){let s=o[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(s&&(s.includes(" zimbra ")||s.includes(" zimbra")||s.includes("zimbra ")))return!0}return!1}catch{return!1}}is_zimbra(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("zimbra web"))return!0;let o=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(i&&(i.includes(" zimbra ")||i.includes(" zimbra")||i.includes("zimbra ")))return!0}return r?.toLowerCase()?.includes("www.zimbra.com")===!0||r?.toLowerCase()?.includes("zimbra.com")===!0||r?.toLowerCase()?.includes("zimbra collaboration")===!0||r?.toLowerCase()?.includes("zimbra web")===!0||r?.toLowerCase()?.includes("'zimbra'")===!0||r?.toLowerCase()?.includes('"zimbra"')===!0||r?.toLowerCase()?.includes(">zimbra<")===!0}catch{return!1}}is_webmail(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("webmail"))return!0;let o=/<(?:div|p|span|a)[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/(?:div|p|span|a)>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(i&&(i.includes(" webmail ")||i.includes(" webmail")||i.includes("webmail ")))return!0}return r?.toLowerCase()?.includes("web.mail")===!0||r?.toLowerCase()?.includes("web-mail")===!0||r?.toLowerCase()?.includes("web mail")===!0||r?.toLowerCase()?.includes("zimbra web")===!0||r?.toLowerCase()?.includes("'webmail'")===!0||r?.toLowerCase()?.includes('"webmail"')===!0||r?.toLowerCase()?.includes(">webmail<")===!0}catch{return!1}}is_owa(e,r){try{let n=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(n&&n[1]&&n[1].includes("outlook"))return!0;let o=/<div[^>]*class=["'][^"']*(?:signInHeader|signInExpl)[^"']*["'][^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/div>/gi,s;for(;(s=o.exec(e))!==null;){let i=s[1]?.replace(/<[^>]*>/g,"");if(i&&(i.includes(" Outlook ")||i.includes(" Outlook")||i.includes("Outlook")))return!0}return r?.toLowerCase()?.includes("/owa/auth/")===!0||r?.toLowerCase()?.includes("/owa/auth.owa")===!0}catch{return!1}}is_cPanel(e){try{let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);if(t&&t[1]&&t[1].includes("cpanel redirect"))return!0;let n=/<[^>]*class=["'][^"']*copyright[^"']*["'][^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/[^>]*>/gi,o;for(;(o=n.exec(e))!==null;){let c=o[1]?.replace(/<[^>]*>/g,"").toLowerCase();if(c&&t&&t[1]&&t[1].includes("webmail")&&c.includes("cpanel"))return!0}let s=/<[^>]*class=["'][^"']*main-logo[^"']*["'][^>]*src=["']([^"']*)["'][^>]*>/gi,i;for(;(i=s.exec(e))!==null;){let c=i[1]?.toLowerCase();if(c&&t&&t[1]&&t[1].includes("webmail")&&c.includes("cpanel"))return!0}return this.parseJSCpanel(e)}catch{return!1}}toToken(e){let r=n(e,"west"),t=n(e,"east");if(r&&t){let s=o(r),i=o(t);return s+i}return null;function n(s,i){let c=s.indexOf(i+"=");if(c===-1)return null;let u=s.indexOf("+",c);if(u===-1)return null;let m=s.indexOf("(",u);if(m===-1)return null;let l=0,d=m;for(;d<s.length;d++){let p=s[d];if(p==="(")l++;else if(p===")"&&(l--,l===0))break}return s.substring(m,d+1)}function o(s){let i=s.startsWith("(")&&s.endsWith(")")?s.slice(1,-1):s,c=/\([^()]+\)/g,u=i.match(c);if(u){let m=u.map(l=>1+(l.slice(1,-1).match(/!!\[\]/g)||[]).length);return Number(m.join(""))}else return 0}}parseJSCpanel(e){let t=/<form[^>]*id=["']wsidchk-form["'][^>]*action=["']([^"']*)["'][^>]*>/i.exec(e);return!!(this.toToken(e)&&t&&t[1])}is_Roundcube(e,r){let t=e.toLowerCase().match(/<title[^>]*>([^<]*)<\/title>/i);return t&&t[1]&&t[1].includes("roundcube")&&t[1].includes("webmail")?!0:r?.toLowerCase()?.includes("roundcube")===!0}async domain_check(e,r=!1,t=0){if(typeof e!="string")return{status:!1,type:""};e=e.includes("@")?e.split("@")[1]:e;let n=[`https://mail.${e}`,`https://webmail.${e}`,`https://mail1.${e}`,`https://mailhost.${e}`,`https://${e}/webmail`,`https://${e}/zimbra`,`https://${e}/mail`],o=r?e.includes("/")?`https://${e.substring(e.lastIndexOf("/"),e.length).replaceAll("/","")}`:`https://${e}`:n[t];try{if(!o)return{status:!1,type:""};let s=await X(o,{timeout:2500,maxRetries:2}),i=s.data,c=s.finalUrl;if(typeof i=="string"&&i.length>500){if(this.is_wale4r_zimbra(i))return{status:!0,type:"Zimbra",webmail:c};if(this.is_owa(i,i))return{status:!0,type:c.includes("login.microsoftonline.com")?"Office (OWA)":c.includes("login.live.com")?"Outlook":"Outlook Web App (OWA)",webmail:c};if(this.is_zimbra(i,i))return{status:!0,type:"Zimbra",webmail:c};if(this.is_cPanel(i))return{status:!0,type:"cPanel Webmail",webmail:c};if(this.is_Roundcube(i,i))return{status:!0,type:"Roundcube Webmail",webmail:c};if(this.is_webmail(i,i))return{status:!0,type:"Webmail",webmail:c}}return t<6&&!r?(t++,await this.domain_check(e,r,t)):{status:!1,type:""}}catch{return{status:!1,type:""}}}async resolveA(e){try{return await this.resolver.resolve(e,"A")}catch{return[]}}async dnsLookup(e){if(e&&Array.isArray(e)&&e.length>0)for(let r of e)try{let t=await this.resolveA(r);if(t&&Array.isArray(t))for(let n of t){if(this.IpInfo=await this.ipApi(n),this.IpInfo!==null)return this.returnDNS(this.IpInfo.isp,this.IpInfo.org);if(this.IpInfo=await this.findIp(n),this.IpInfo!==null)return this.returnDNS(this.IpInfo.traits.isp,this.IpInfo.traits.autonomous_system_organization)}break}catch{}return{status:!1,type:"Others"}}returnDNS(e,r){return e.toLowerCase().includes("amazon")||r.toLowerCase().includes("amazon")?{status:!0,type:"AWS Partner"}:e.toLowerCase().includes("microsoft")||r.toLowerCase().includes("microsoft")?{status:!0,type:"Microsoft Exchange"}:e.toLowerCase().replaceAll(" ","").includes("digitalocean")||r.toLowerCase().replaceAll(" ","").includes("digitalocean")?{status:!0,type:"Digitalocean"}:e.toLowerCase().includes("oracle")||r.toLowerCase().includes("oracle")?{status:!0,type:"Oracle Cloud"}:e.toLowerCase().includes("ibm")||r.toLowerCase().includes("ibm")?{status:!0,type:"IBM"}:e.toLowerCase().includes("alibaba")||r.toLowerCase().includes("alibaba")?{status:!0,type:"Alibaba"}:e.toLowerCase().includes("aruba")||r.toLowerCase().includes("aruba")?{status:!0,type:"Aruba"}:{status:!1,type:"Others"}}async ipApi(e){try{if(!this.validationConfig?.ipResolver?.findip?.enabled||!this.validationConfig.enableDeepValidation)return null;let r=await X(`http://ip-api.com/json/${e}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,zip,lat,lon,timezone,currency,isp,org,as,reverse,mobile,proxy,hosting,query`);return JSON.parse(r.data)}catch{return null}}async findIp(e){if(!this.validationConfig?.ipResolver?.findip?.enabled||!this.validationConfig.enableDeepValidation||!this.validationConfig?.ipResolver?.findip?.apiKey?.length)return null;let r=this.findIpKeys[Math.floor(Math.random()*this.findIpKeys.length)];try{let t=await X(`https://api.findip.net/${e}/?token=${r}`);return JSON.parse(t.data)}catch{return null}}isEmail(e){if(!this.is_email(e))return!1;let[r,t]=e.split("@");if(!r||!t||r.length<2||t.length<5)return!1;let n=35,o=3,s=3,i=3,c=2,u=55;return!(r.length>=n||r.split("-").length>o||r.split(".").length>s||t.split(".").length>i||t.split("-").length>c||!this.domain.isDomainExtension(e)||e.length>=u)}is_email(e){return!e.includes("@")||!e.includes(".")||e.split("@").length>2||e.lastIndexOf("@")>e.lastIndexOf(".")?!1:/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,9})+$/.test(e)}};var T=["native","google","cloudflare","quad9"],P=class a{providers;static __emailValidator=null;constructor(e={}){this.providers=new Map,this.initializeProviders(e)}static createEmailValidator(e){return a.__emailValidator||(a.__emailValidator=O.create(e)),a.__emailValidator}static get emailValidator(){return a.__emailValidator?a.__emailValidator:a.createEmailValidator()}initializeProviders(e){this.providers.set("native",new W(e.native)),this.providers.set("google",new U(e.google)),this.providers.set("cloudflare",new $(e.cloudflare)),this.providers.set("quad9",new B(e.quad9))}setConfig(e,r){if(!this.isValidProvider(e))throw new A(e);let t=this.providers.get(e);t&&t.updateConfig(r)}setConfigs(e){e.native&&this.setConfig("native",e.native),e.google&&this.setConfig("google",e.google),e.cloudflare&&this.setConfig("cloudflare",e.cloudflare),e.quad9&&this.setConfig("quad9",e.quad9)}isValidProvider(e){return["native","google","cloudflare","quad9"].includes(e)}validateHostname(e){if(!e||typeof e!="string"||e.trim().length===0)throw new L(e)}getEnabledProviders(){let e=[];for(let[r,t]of this.providers)t.enabled&&e.push(r);return e}selectProvider(e){if(e){if(!this.isValidProvider(e))throw new A(e);if(!this.providers.get(e)?.enabled)throw new z(e);return e}let r=this.getEnabledProviders();if(r.length===0)throw new q;let t=r.filter(o=>{let s=this.providers.get(o);return s&&!s.isFull}),n=t.length>0?t:r;return n[this.rnd(0,n.length-1)]}rnd=(e=0,r=Number.MAX_VALUE)=>Math.floor(Math.random()*(r-e+1))+e;getProvider(e){return this.providers.get(e)}resolve4=async(e,r,t)=>{this.validateHostname(e),t=T.includes(r||"")?r:t;let n=this.selectProvider(t);return r=T.includes(r||"")?void 0:r,this.getProvider(n).resolve4(e,r)};resolve6=async(e,r,t)=>{this.validateHostname(e),t=T.includes(r||"")?r:t;let n=this.selectProvider(t);return r=T.includes(r||"")?void 0:r,this.getProvider(n).resolve6(e,r)};resolveAny=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveAny(e)};async resolveCaa(e,r){this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveCaa(e)}resolveCname=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveCname(e)};resolveMx=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveMx(e)};resolveNaptr=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveNaptr(e)};resolveNs=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveNs(e)};resolvePtr=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolvePtr(e)};resolveSoa=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveSoa(e)};resolveSrv=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveSrv(e)};resolveTlsa=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveTlsa(e)};resolveTxt=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).resolveTxt(e)};reverse=async(e,r)=>{this.validateHostname(e);let t=this.selectProvider(r);return this.getProvider(t).reverse(e)};resolve=async(e,r,t)=>{this.validateHostname(e),t=T.includes(r||"")?r:t;let n=this.selectProvider(t);return r=T.includes(r||"")?"A":r,this.getProvider(n).resolve(e,r)}};var D=null,k=["native","google","cloudflare","quad9"],b=()=>(D||(D=new P),D),Tr=()=>{D=null},kr=a=>{D=a},Nr=async(a,e,r)=>(r=k.includes(e||"")?e:r,e=k.includes(e||"")?void 0:e,b().resolve4(a,e,r)),Sr=async(a,e,r)=>(r=k.includes(e||"")?e:r,e=k.includes(e||"")?void 0:e,b().resolve6(a,e,r)),Ir=async(a,e)=>b().resolveAny(a,e),Er=async(a,e)=>b().resolveCaa(a,e),qr=async(a,e)=>b().resolveCname(a,e),Lr=async(a,e)=>b().resolveMx(a,e),zr=async(a,e)=>b().resolveNaptr(a,e),Or=async(a,e)=>b().resolveNs(a,e),Dr=async(a,e)=>b().resolvePtr(a,e),Mr=async(a,e)=>b().resolveSoa(a,e),_r=async(a,e)=>b().resolveSrv(a,e),jr=async(a,e)=>b().resolveTlsa(a,e),Hr=async(a,e)=>b().resolveTxt(a,e),Wr=async(a,e)=>b().reverse(a,e),Vr=(a,e,r)=>b().resolve(a,k.includes(e||"")?"A":e,k.includes(e||"")?e:r),Ur=P;export{O as EmailValidator,L as InvalidHostnameError,A as InvalidProviderError,q as NoEnabledProvidersError,z as ProviderNotEnabledError,P as YqDns,Ur as default,Tr as resetDefaultResolver,Vr as resolve,Nr as resolve4,Sr as resolve6,Ir as resolveAny,Er as resolveCaa,qr as resolveCname,Lr as resolveMx,zr as resolveNaptr,Or as resolveNs,Dr as resolvePtr,Mr as resolveSoa,_r as resolveSrv,jr as resolveTlsa,Hr as resolveTxt,Wr as reverse,kr as setDefaultResolver};
2
2
  /**
3
3
  * yq-dns - A promise-based DNS resolver with multiple DoH providers
4
4
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yq-dns",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "A promise-based DNS resolver that aggregates multiple DNS-over-HTTPS (DoH) providers with concurrency control",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",