ranux-fetcher 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import {got as got$1}from'got';export*from'got';import v,{OutgoingMessage}from'http';import ue from'https';import R from'zlib';import {PassThrough,Transform,Readable}from'stream';import ve from'mimic-response';import m from'ow';import {CookieJar}from'tough-cookie';import fe from'quick-lru';import ct,{createHash}from'crypto';import {isIPv6}from'net';import Te from'tls';import {URL as URL$1}from'url';import le from'http2-wrapper';import*as oe from'cheerio';var $=null,U=class extends Transform{zstdStream;constructor(){super(),this.zstdStream=new $.DecompressStream,this.zstdStream.onData=e=>{this.push(Buffer.from(e));};}_transform(e,t,s){try{this.zstdStream.push(e),s();}catch(o){s(o);}}},we=(r,e)=>{let t=r.headers["content-encoding"]?.toLowerCase(),s={flush:R.constants.Z_SYNC_FLUSH,finishFlush:R.constants.Z_SYNC_FLUSH},o=n=>{delete r.headers["content-encoding"];let a=new PassThrough({autoDestroy:false,destroy(i,c){r.destroy(),c(i);}});n.once("error",i=>{a.destroy(i);}),r.pipe(n).pipe(a),e(ve(r,a));};if(t==="gzip"||t==="x-gzip")o(R.createGunzip(s));else if(t==="deflate"||t==="x-deflate"){let n=false;r.once("data",a=>{n=true,r.unshift(a);let i=(a[0]&15)===8?R.createInflate():R.createInflateRaw();o(i);}),r.once("end",()=>{n||e(r);});}else if(t==="br"){let n=false;r.once("data",a=>{n=true,r.unshift(a);let i=R.createBrotliDecompress();o(i);}),r.once("end",()=>{n||e(r);});}else if(t==="zstd"){let n=false;r.once("data",a=>{if(n=true,r.unshift(a),typeof R.createZstdDecompress=="function"){o(R.createZstdDecompress());return}r.pause(),(async()=>{try{$||($=await import('fzstd'));let i=new U;o(i),r.resume();}catch{let c=new Error("Zstd decompression failed: 'fzstd' package is missing. Please run 'npm i fzstd'.");r.destroy(c);}})();}),r.once("end",()=>{n||e(r);});}else e(r);},j=(r,e)=>{let t=e(r);return t.on("request",s=>{let o=s.emit.bind(s);s.emit=(n,...a)=>{if(n==="response"&&r.decompress){let i=a[0],c=s.listenerCount("response")!==0;return we(i,f=>{o("response",f);}),c}return o(n,...a)};}),t};var N=class{weakStorage;stringStorage;constructor(){this.weakStorage=new WeakMap,this.stringStorage=new fe({maxSize:1e3,maxAge:36e5});}get(e){if(e){if(typeof e=="string")return this.stringStorage.has(e)||this.stringStorage.set(e,{cookieJar:new CookieJar}),this.stringStorage.get(e);if(typeof e=="object")return this.weakStorage.has(e)||this.weakStorage.set(e,{cookieJar:new CookieJar}),this.weakStorage.get(e)}}},ie=new N,z=r=>{let e=r.context||{};e.sessionToken&&(e.sessionData=ie.get(e.sessionToken));};function W(r){let e=r.context;e&&e.insecureHTTPParser!==void 0&&(r._unixOptions={...r._unixOptions,insecureHTTPParser:e.insecureHTTPParser});}function F(r,e){let t=r,s=["proxyUrl","proxyList","headerGeneratorOptions","useHeaderGenerator","insecureHTTPParser","sessionToken","stealth","browser","os","zstd","smartRetry","cookies","cookieJar"];for(let a of s)a in t&&(e.context[a]=t[a]);let o=e.context,n=o.cookieJar;if(n===true||o.sessionToken){let a=o.sessionData||ie.get(o.sessionToken);a?n=a.cookieJar:n=new CookieJar,e.cookieJar=n;}if(o.cookies){let a=e.url?new URL(e.url.toString()):null,i=a?`${a.protocol}//${a.hostname}`:"",c=typeof o.cookies=="object",f=c?Object.entries(o.cookies).map(([u,l])=>`${u}=${l}`).join("; "):o.cookies;if(n&&n.setCookieSync&&i)if(c)for(let[u,l]of Object.entries(o.cookies))n.setCookieSync(`${u}=${l}`,i);else {let u=f.split(";").map(l=>l.trim());for(let l of u)l&&n.setCookieSync(l,i);}else {e.headers||(e.headers={});let u=e.headers.cookie||e.headers.Cookie;e.headers.cookie=u?`${u}; ${f}`:f;}}}var Oe={proxyUrl:m.optional.string.url,proxyList:m.optional.array.ofType(m.string.url),useHeaderGenerator:m.optional.boolean,headerGeneratorOptions:m.optional.object,insecureHTTPParser:m.optional.boolean,sessionToken:m.any(m.optional.string,m.optional.object),cookies:m.any(m.optional.string,m.optional.object),stealth:m.optional.boolean,browser:m.optional.string,os:m.optional.string,zstd:m.optional.boolean,smartRetry:m.optional.boolean,cookieJar:m.any(m.optional.boolean,m.optional.object)};function K(r){m(r,m.object.partialShape(Oe));}var k=class{agent;constructor(e){this.agent=e;}addRequest(e,t){this.agent.addRequest(e,t);}get keepAlive(){return this.agent.keepAlive}get maxSockets(){return this.agent.maxSockets}get options(){return this.agent.options}get defaultPort(){return this.agent.defaultPort}get protocol(){return this.agent.protocol}destroy(){this.agent.destroy();}get maxFreeSockets(){return this.agent.maxFreeSockets}get maxTotalSockets(){return this.agent.maxTotalSockets}get freeSockets(){return this.agent.freeSockets}get sockets(){return this.agent.sockets}get requests(){return this.agent.requests}on(e,t){return this.agent.on(e,t),this}once(e,t){return this.agent.once(e,t),this}off(e,t){return this.agent.off(e,t),this}addListener(e,t){return this.agent.addListener(e,t),this}removeListener(e,t){return this.agent.removeListener(e,t),this}removeAllListeners(e){return this.agent.removeAllListeners(e),this}setMaxListeners(e){return this.agent.setMaxListeners(e),this}getMaxListeners(){return this.agent.getMaxListeners()}listeners(e){return this.agent.listeners(e)}rawListeners(e){return this.agent.rawListeners(e)}emit(e,...t){return this.agent.emit(e,...t)}eventNames(){return this.agent.eventNames()}listenerCount(e){return this.agent.listenerCount(e)}prependListener(e,t){return this.agent.prependListener(e,t),this}prependOnceListener(e,t){return this.agent.prependOnceListener(e,t),this}createConnection(e,t){return this.agent.createConnection(e,t)}keepSocketAlive(e){this.agent.keepSocketAlive(e);}reuseSocket(e,t){this.agent.reuseSocket(e,t);}getName(e){return this.agent.getName(e)}};var {_storeHeader:Pe}=OutgoingMessage.prototype,ce=["host","connection","content-length","sec-ch-ua","sec-ch-ua-mobile","sec-ch-ua-platform","sec-ch-ua-platform-version","upgrade-insecure-requests","user-agent","accept","sec-fetch-site","sec-fetch-mode","sec-fetch-user","sec-fetch-dest","referer","accept-encoding","accept-language","cookie","priority"],A=class extends k{transformRequest(e,t=false){let s={},o=e.getHeaderNames(),n=e.hasHeader("connection"),a=e.hasHeader("content-length"),i=e.hasHeader("transfer-encoding");for(let u of o)s[u.toLowerCase()]=e.getHeader(u),e.removeHeader(u);let c=e;if(!t&&!n){let u=e.shouldKeepAlive&&(a||e.useChunkedEncodingByDefault||c.agent);s.connection=u?"keep-alive":"close";}!a&&!i&&!c._removedContLen&&typeof c._contentLength=="number"&&(s["content-length"]=c._contentLength);let f=Object.keys(s).sort((u,l)=>{let d=ce.indexOf(u),p=ce.indexOf(l);return d===-1&&p===-1?0:d===-1?1:p===-1?-1:d-p});for(let u of f){let l=t?u.toLowerCase():this.toPascalCase(u);e.setHeader(l,s[u]);}}addRequest(e,t){let s=e,n=(s.agent?.constructor?.name||"").includes("Http2")||s.agent?.protocol==="h2:"||s.isH2===true;return s._storeHeader=(...a)=>(this.transformRequest(e,n),Pe.call(e,...a)),t.secureEndpoint=t.protocol==="https:",super.addRequest(e,t)}toPascalCase(e){return e.toLowerCase().startsWith("sec-ch-ua")?e.split("-").map(t=>t==="ua"?"UA":t==="sec"?"Sec":t==="ch"?"CH":t[0].toUpperCase()+t.slice(1).toLowerCase()).join("-"):e.split("-").map(t=>t[0].toUpperCase()+t.slice(1).toLowerCase()).join("-")}};function L(r){if(!r.username&&!r.password)return null;let e=decodeURIComponent(r.username??""),t=decodeURIComponent(r.password??"");return `Basic ${Buffer.from(`${e}:${t}`).toString("base64")}`}function X(r,e){r.proxy=typeof e.proxy=="string"?new URL$1(e.proxy):e.proxy;}function De(r){if(r.port!=="")return Number(r.port);if(r.protocol==="http:")return 80;if(r.protocol==="https:")return 443;throw new Error(`Unexpected protocol: ${r.protocol}`)}var Y=class extends v.Agent{proxy;constructor(e){super(e),X(this,e);}addRequest(e,t){if(t.socketPath){v.Agent.prototype.addRequest.call(this,e,t);return}let s=`${t.host}:${t.port}`;isIPv6(t.host)&&(s=`[${t.host}]:${t.port}`);let o=new URL$1(`${e.protocol}//${s}${e.path}`);t={...t,host:this.proxy.hostname,port:De(this.proxy)},e.path=o.href;let n=L(this.proxy);n&&e.setHeader("proxy-authorization",n),v.Agent.prototype.addRequest.call(this,e,t);}},P=class extends v.Agent{proxy;constructor(e){super(e),X(this,e);}createConnection(e,t){if(e.path)return v.Agent.prototype.createConnection.call(this,e,t);let s=this.proxy.protocol==="https:"?ue.request:v.request,o=`${e.host}:${e.port}`;isIPv6(e.host)&&(o=`[${e.host}]:${e.port}`);let n={host:o},a=L(this.proxy);a&&(n["proxy-authorization"]=a,n.authorization=a);let i=s(this.proxy,{method:"CONNECT",headers:n,path:o,agent:false,rejectUnauthorized:false});i.once("connect",(c,f,u)=>{if(u.length>0||c.statusCode!==200){f.destroy();let l=new Error(`The proxy responded with ${c.statusCode} ${c.statusMessage}: ${u.toString()}`);t&&t(l,null);return}if(e.protocol==="https:"){if(t){let l={...e,socket:f};t(null,Te.connect(l));}return}t&&t(null,f);}),i.once("error",c=>{t&&t(c,null);}),i.end();}},T=class extends ue.Agent{proxy;constructor(e){super(e),X(this,e);}createConnection(e,t){return P.prototype.createConnection.call(this,e,t)}},{auto:Me}=le,{HttpOverHttp2:qe,HttpsOverHttp2:Ge,Http2OverHttp2:$e,Http2OverHttps:Ue,Http2OverHttp:je}=le.proxies,w=class extends Error{};function Be(r){if(!(r==="http:"||r==="https:"))throw new w(`Proxy URL protocol "${r}" is not supported. Please use HTTP or HTTPS.`)}async function de(r,e){let t={},s=L(r);s&&(t.authorization=s,t["proxy-authorization"]=s);let o={proxyOptions:{url:r,headers:t,rejectUnauthorized:e},maxFreeSockets:0,maxEmptySessions:0},n={proxy:r,maxFreeSockets:0},a;if(r.protocol==="https:"){let i="http/1.1";try{i=(await Me.resolveProtocol({host:r.hostname,port:r.port,rejectUnauthorized:e,ALPNProtocols:["h2","http/1.1"],servername:r.hostname})).alpnProtocol;}catch{}i==="h2"?a={http:new A(new qe(o)),https:new A(new Ge(o)),http2:new $e(o)}:a={http:new A(new P(n)),https:new A(new T(n)),http2:new Ue(o)};}else a={http:new A(new Y(n)),https:new A(new T(n)),http2:new je(o)};return a}async function V(r){let{context:{proxyUrl:e}}=r;if(e){let t=new URL$1(e);Be(t.protocol),r.agent=await de(t,r.https.rejectUnauthorized);}}var{auto:Q}=le,me={headerTableSize:65536,enablePush:false,initialWindowSize:6291456,maxHeaderListSize:262144,maxConcurrentStreams:1e3},Ye=async(r,e,t)=>new Promise((s,o)=>{let n=`${e.host}:${e.port}`;isIPv6(e.host)&&(n=`[${e.host}]:${e.port}`),(async()=>{try{let a={host:n},i=new URL$1(r),c=L(i);c&&(a.authorization=c,a["proxy-authorization"]=c);let f=await Q(i,{method:"CONNECT",headers:a,path:n,pathname:n,rejectUnauthorized:!1,settings:me});f.end(),f.once("error",o),f.once("connect",(u,l,d)=>{if(u.statusCode!==200||d.length>0){let g=`Proxy responded with ${u.statusCode} ${u.statusMessage}: ${d.length} bytes.
1
+ import {got as got$1}from'got';export*from'got';import v,{OutgoingMessage}from'http';import pe from'https';import R from'zlib';import {PassThrough,Transform,Readable}from'stream';import Le from'mimic-response';import m from'ow';import {CookieJar}from'tough-cookie';import me from'quick-lru';import ct,{createHash}from'crypto';import {isIPv6}from'net';import De from'tls';import {URL as URL$1}from'url';import D from'http2-wrapper';import*as oe from'cheerio';var U=null,j=class extends Transform{zstdStream;constructor(){super(),this.zstdStream=new U.DecompressStream,this.zstdStream.onData=e=>{this.push(Buffer.from(e));};}_transform(e,t,s){try{this.zstdStream.push(e),s();}catch(n){s(n);}}},Oe=(r,e)=>{let t=r.headers["content-encoding"]?.toLowerCase(),s={flush:R.constants.Z_SYNC_FLUSH,finishFlush:R.constants.Z_SYNC_FLUSH},n=o=>{delete r.headers["content-encoding"];let a=new PassThrough({autoDestroy:false,destroy(i,c){r.destroy(),c(i);}});o.once("error",i=>{a.destroy(i);}),r.pipe(o).pipe(a),e(Le(r,a));};if(t==="gzip"||t==="x-gzip")n(R.createGunzip(s));else if(t==="deflate"||t==="x-deflate"){let o=false;r.once("data",a=>{o=true,r.unshift(a);let i=(a[0]&15)===8?R.createInflate():R.createInflateRaw();n(i);}),r.once("end",()=>{o||e(r);});}else if(t==="br"){let o=false;r.once("data",a=>{o=true,r.unshift(a);let i=R.createBrotliDecompress();n(i);}),r.once("end",()=>{o||e(r);});}else if(t==="zstd"){let o=false;r.once("data",a=>{if(o=true,r.unshift(a),typeof R.createZstdDecompress=="function"){n(R.createZstdDecompress());return}r.pause(),(async()=>{try{U||(U=await import('fzstd'));let i=new j;n(i),r.resume();}catch{let c=new Error("Zstd decompression failed: 'fzstd' package is missing. Please run 'npm i fzstd'.");r.destroy(c);}})();}),r.once("end",()=>{o||e(r);});}else e(r);},B=(r,e)=>{let t=e(r);return t.on("request",s=>{let n=s.emit.bind(s);s.emit=(o,...a)=>{if(o==="response"&&r.decompress){let i=a[0],c=s.listenerCount("response")!==0;return Oe(i,f=>{n("response",f);}),c}return n(o,...a)};}),t};var z=class{weakStorage;stringStorage;constructor(){this.weakStorage=new WeakMap,this.stringStorage=new me({maxSize:1e3,maxAge:36e5});}get(e){if(e){if(typeof e=="string")return this.stringStorage.has(e)||this.stringStorage.set(e,{cookieJar:new CookieJar}),this.stringStorage.get(e);if(typeof e=="object")return this.weakStorage.has(e)||this.weakStorage.set(e,{cookieJar:new CookieJar}),this.weakStorage.get(e)}}},ie=new z,W=r=>{let e=r.context||{};e.sessionToken&&(e.sessionData=ie.get(e.sessionToken));};function F(r){let e=r.context;e&&e.insecureHTTPParser!==void 0&&(r._unixOptions={...r._unixOptions,insecureHTTPParser:e.insecureHTTPParser});}function K(r,e){let t=r,s=["proxyUrl","proxyList","headerGeneratorOptions","useHeaderGenerator","insecureHTTPParser","sessionToken","stealth","browser","os","zstd","smartRetry","cookies","cookieJar"];for(let a of s)a in t&&(e.context[a]=t[a]);let n=e.context,o=n.cookieJar;if(o===true||n.sessionToken){let a=n.sessionData||ie.get(n.sessionToken);a?o=a.cookieJar:o=new CookieJar,e.cookieJar=o;}if(n.cookies){let a=e.url?new URL(e.url.toString()):null,i=a?`${a.protocol}//${a.hostname}`:"",c=typeof n.cookies=="object",f=c?Object.entries(n.cookies).map(([u,l])=>`${u}=${l}`).join("; "):n.cookies;if(o&&o.setCookieSync&&i)if(c)for(let[u,l]of Object.entries(n.cookies))o.setCookieSync(`${u}=${l}`,i);else {let u=f.split(";").map(l=>l.trim());for(let l of u)l&&o.setCookieSync(l,i);}else {e.headers||(e.headers={});let u=e.headers.cookie||e.headers.Cookie;e.headers.cookie=u?`${u}; ${f}`:f;}}}var Pe={proxyUrl:m.optional.string.url,proxyList:m.optional.array.ofType(m.string.url),useHeaderGenerator:m.optional.boolean,headerGeneratorOptions:m.optional.object,insecureHTTPParser:m.optional.boolean,sessionToken:m.any(m.optional.string,m.optional.object),cookies:m.any(m.optional.string,m.optional.object),stealth:m.optional.boolean,browser:m.optional.string,os:m.optional.string,zstd:m.optional.boolean,smartRetry:m.optional.boolean,cookieJar:m.any(m.optional.boolean,m.optional.object)};function Y(r){m(r,m.object.partialShape(Pe));}var k=class{agent;constructor(e){this.agent=e;}addRequest(e,t){this.agent.addRequest(e,t);}get keepAlive(){return this.agent.keepAlive}get maxSockets(){return this.agent.maxSockets}get options(){return this.agent.options}get defaultPort(){return this.agent.defaultPort}get protocol(){return this.agent.protocol}destroy(){this.agent.destroy();}get maxFreeSockets(){return this.agent.maxFreeSockets}get maxTotalSockets(){return this.agent.maxTotalSockets}get freeSockets(){return this.agent.freeSockets}get sockets(){return this.agent.sockets}get requests(){return this.agent.requests}on(e,t){return this.agent.on(e,t),this}once(e,t){return this.agent.once(e,t),this}off(e,t){return this.agent.off(e,t),this}addListener(e,t){return this.agent.addListener(e,t),this}removeListener(e,t){return this.agent.removeListener(e,t),this}removeAllListeners(e){return this.agent.removeAllListeners(e),this}setMaxListeners(e){return this.agent.setMaxListeners(e),this}getMaxListeners(){return this.agent.getMaxListeners()}listeners(e){return this.agent.listeners(e)}rawListeners(e){return this.agent.rawListeners(e)}emit(e,...t){return this.agent.emit(e,...t)}eventNames(){return this.agent.eventNames()}listenerCount(e){return this.agent.listenerCount(e)}prependListener(e,t){return this.agent.prependListener(e,t),this}prependOnceListener(e,t){return this.agent.prependOnceListener(e,t),this}createConnection(e,t){return this.agent.createConnection(e,t)}keepSocketAlive(e){this.agent.keepSocketAlive(e);}reuseSocket(e,t){this.agent.reuseSocket(e,t);}getName(e){return this.agent.getName(e)}};var {_storeHeader:ce}=OutgoingMessage.prototype,ue=["host","connection","content-length","sec-ch-ua","sec-ch-ua-mobile","sec-ch-ua-platform","sec-ch-ua-platform-version","upgrade-insecure-requests","user-agent","accept","sec-fetch-site","sec-fetch-mode","sec-fetch-user","sec-fetch-dest","referer","accept-encoding","accept-language","cookie","priority"],A=class extends k{transformRequest(e,t=false){let s={},n=typeof e.getHeaderNames=="function"?e.getHeaderNames():Object.keys(e.getHeaders?e.getHeaders():{}),o=e.hasHeader?e.hasHeader("connection"):false,a=e.hasHeader?e.hasHeader("content-length"):false,i=e.hasHeader?e.hasHeader("transfer-encoding"):false;for(let u of n)s[u.toLowerCase()]=e.getHeader(u),e.removeHeader(u);let c=e;if(!t&&!o){let u=e.shouldKeepAlive&&(a||e.useChunkedEncodingByDefault||c.agent);s.connection=u?"keep-alive":"close";}!a&&!i&&!c._removedContLen&&typeof c._contentLength=="number"&&(s["content-length"]=c._contentLength);let f=Object.keys(s).sort((u,l)=>{let d=ue.indexOf(u),p=ue.indexOf(l);return d===-1&&p===-1?0:d===-1?1:p===-1?-1:d-p});for(let u of f){let l=t?u.toLowerCase():this.toPascalCase(u);s[u]!==void 0&&e.setHeader(l,s[u]);}}addRequest(e,t){let s=e,o=(s.agent?.constructor?.name||"").includes("Http2")||s.agent?.protocol==="h2:"||s.isH2===true;if(typeof ce=="function")s._storeHeader=(...a)=>{try{this.transformRequest(e,o);}catch{}return ce.call(e,...a)};else try{this.transformRequest(e,o);}catch{}return t.secureEndpoint=t.protocol==="https:",super.addRequest(e,t)}toPascalCase(e){return e.toLowerCase().startsWith("sec-ch-ua")?e.split("-").map(t=>t==="ua"?"UA":t==="sec"?"Sec":t==="ch"?"CH":t[0].toUpperCase()+t.slice(1).toLowerCase()).join("-"):e.split("-").map(t=>t[0].toUpperCase()+t.slice(1).toLowerCase()).join("-")}};function L(r){if(!r.username&&!r.password)return null;let e=decodeURIComponent(r.username??""),t=decodeURIComponent(r.password??"");return `Basic ${Buffer.from(`${e}:${t}`).toString("base64")}`}function V(r,e){r.proxy=typeof e.proxy=="string"?new URL$1(e.proxy):e.proxy;}function Me(r){if(r.port!=="")return Number(r.port);if(r.protocol==="http:")return 80;if(r.protocol==="https:")return 443;throw new Error(`Unexpected protocol: ${r.protocol}`)}var I=class extends v.Agent{proxy;constructor(e){super(e),V(this,e);}addRequest(e,t){if(t.socketPath){v.Agent.prototype.addRequest.call(this,e,t);return}let s=`${t.host}:${t.port}`;isIPv6(t.host)&&(s=`[${t.host}]:${t.port}`);let n=new URL$1(`${e.protocol}//${s}${e.path}`);t={...t,host:this.proxy.hostname,port:Me(this.proxy)},e.path=n.href;let o=L(this.proxy);o&&e.setHeader("proxy-authorization",o),v.Agent.prototype.addRequest.call(this,e,t);}},P=class extends v.Agent{proxy;constructor(e){super(e),V(this,e);}createConnection(e,t){if(e.path)return v.Agent.prototype.createConnection.call(this,e,t);let s=this.proxy.protocol==="https:"?pe.request:v.request,n=`${e.host}:${e.port}`;isIPv6(e.host)&&(n=`[${e.host}]:${e.port}`);let o={host:n},a=L(this.proxy);a&&(o["proxy-authorization"]=a,o.authorization=a);let i=s(this.proxy,{method:"CONNECT",headers:o,path:n,agent:false,rejectUnauthorized:false});i.once("connect",(c,f,u)=>{if(u.length>0||c.statusCode!==200){f.destroy();let l=new Error(`The proxy responded with ${c.statusCode} ${c.statusMessage}: ${u.toString()}`);t&&t(l,null);return}if(e.protocol==="https:"){if(t){let l={...e,socket:f};t(null,De.connect(l));}return}t&&t(null,f);}),i.once("error",c=>{t&&t(c,null);}),i.end();}},T=class extends pe.Agent{proxy;constructor(e){super(e),V(this,e);}createConnection(e,t){return P.prototype.createConnection.call(this,e,t)}},{auto:$e}=D,{HttpOverHttp2:Ge,HttpsOverHttp2:qe,Http2OverHttp2:Ue,Http2OverHttps:je,Http2OverHttp:Be}=D.proxies,w=class extends Error{};function Ne(r){if(!(r==="http:"||r==="https:"))throw new w(`Proxy URL protocol "${r}" is not supported. Please use HTTP or HTTPS.`)}async function he(r,e){let t={},s=L(r);s&&(t.authorization=s,t["proxy-authorization"]=s);let n={proxyOptions:{url:r,headers:t,rejectUnauthorized:e},maxFreeSockets:0,maxEmptySessions:0},o={proxy:r,maxFreeSockets:0},a;if(r.protocol==="https:"){let i="http/1.1";try{i=(await $e.resolveProtocol({host:r.hostname,port:r.port,rejectUnauthorized:e,ALPNProtocols:["h2","http/1.1"],servername:r.hostname})).alpnProtocol;}catch{}i==="h2"?a={http:new A(new Ge(n)),https:new A(new qe(n)),http2:new Ue(n)}:a={http:new A(new P(o)),https:new A(new T(o)),http2:new je(n)};}else a={http:new A(new I(o)),https:new A(new T(o)),http2:new Be(n)};return a}async function J(r){let{context:{proxyUrl:e}}=r;if(e){let t=new URL$1(e);Ne(t.protocol),r.agent=await he(t,r.https.rejectUnauthorized);}}var ye=D.auto||D.default?.auto,ge={headerTableSize:65536,enablePush:false,initialWindowSize:6291456,maxHeaderListSize:262144,maxConcurrentStreams:1e3},Ye=async(r,e,t)=>new Promise((s,n)=>{let o=`${e.host}:${e.port}`;isIPv6(e.host)&&(o=`[${e.host}]:${e.port}`),(async()=>{try{let a={host:o},i=new URL$1(r),c=L(i);c&&(a.authorization=c,a["proxy-authorization"]=c);let f=await ye(i,{method:"CONNECT",headers:a,path:o,pathname:o,rejectUnauthorized:!1,settings:ge});f.end(),f.once("error",n),f.once("connect",(u,l,d)=>{if(u.statusCode!==200||d.length>0){let g=`Proxy responded with ${u.statusCode} ${u.statusMessage}: ${d.length} bytes.
2
2
 
3
3
  Below is the first 100 bytes of the proxy response body:
4
- ${d.toString("utf8",0,100)}`;o(new w(g,{cause:d.toString("utf8")})),l.destroy();return}let p=Te.connect({...e,socket:l},t);s(p);});}catch(a){o(a);}})();}),J=()=>({protocolCache:new fe({maxSize:1e3}),resolveAlpnQueue:new Map}),he=new fe({maxSize:100}),Ie=J(),Z=(r,e,t)=>{let{protocolCache:s,resolveAlpnQueue:o}=Ie;if(e)(!e.protocolCache||!e.resolveAlpnQueue)&&Object.assign(e,J()),s=e.protocolCache,o=e.resolveAlpnQueue;else {let i=createHash("sha256").update(r).digest("hex"),c=he.get(i)??J();he.set(i,c),s=c.protocolCache,o=c.resolveAlpnQueue;}let n=async(i,c)=>Ye(r,i,c),a=Q.createResolveProtocol(s,o,n);return async(...i)=>a({...i[0],timeout:t})};function ee(r){let e=r.context||{},{proxyUrl:t,sessionData:s,stealth:o}=e;r.http2&&r.url.protocol!=="http:"?r.request=(n,a,i)=>{let c=a;return t&&(c.resolveProtocol=Z(t,s,Math.min(r?.timeout?.connect??6e4,r?.timeout?.request??6e4))),o!==false&&(c.settings=me),Q(n,c,i)}:r.request=void 0;}var y={chrome:"151.0.0.0",chrome_ch:"151",edge_ch:"151",brave_ch:"151",arc_ch:"151",opera_ch:"134",samsung_ch:"26",samsung_ua:"26.0",firefox:"154.0",safari:"605.1.15",safari_version:"19.0"},ye={windows:{ua:"Windows NT 10.0; Win64; x64",ch:'"Windows"',ch_ver:'"15.0.0"'},mac:{ua:"Macintosh; Intel Mac OS X 10_15_7",ch:'"macOS"',ch_ver:'"26.0.0"'},linux:{ua:"X11; Linux x86_64",ch:'"Linux"',ch_ver:'"6.5.0"'},android:{ua:"Linux; Android 14; SM-S928B",ch:'"Android"',ch_ver:'"14.0.0"'},ios:{ua:"iPhone; CPU iPhone OS 17_5_1 like Mac OS X",ch:'"iOS"',ch_ver:'"17.5.1"'}};function Ve(r,e){let t=e==="android"||e==="ios"?"?1":"?0",s=ye[e]||ye.windows,o="",n="",a={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","Accept-Language":"en-US,en;q=0.9","Upgrade-Insecure-Requests":"1","Sec-Fetch-Site":"none","Sec-Fetch-Mode":"navigate","Sec-Fetch-User":"?1","Sec-Fetch-Dest":"document",Priority:"u=0, i"};return r==="samsung"?(o=`Mozilla/5.0 (${s.ua}) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/${y.samsung_ua} Chrome/${y.chrome} Mobile Safari/537.36`,n=`"Samsung Internet";v="${y.samsung_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`,Object.assign(a,{"Sec-CH-UA":n,"Sec-CH-UA-Mobile":"?1","Sec-CH-UA-Platform":'"Android"',"Sec-CH-UA-Platform-Version":s.ch_ver})):["chrome","brave","edge","arc","opera"].includes(r)?(o=`Mozilla/5.0 (${s.ua}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${y.chrome} Safari/537.36`,r==="brave"?n=`"Brave";v="${y.brave_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`:r==="edge"?(n=`"Microsoft Edge";v="${y.edge_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`,o=`${o} Edg/${y.edge_ch}.0.0.0`):r==="opera"?(n=`"Opera";v="${y.opera_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`,o=`${o} OPR/${y.opera_ch}.0.0.0`):r==="arc"?n=`"Arc";v="${y.arc_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`:n=`"Chromium";v="${y.chrome_ch}", "Google Chrome";v="${y.chrome_ch}", "Not_A Brand";v="24"`,Object.assign(a,{"Sec-CH-UA":n,"Sec-CH-UA-Mobile":t,"Sec-CH-UA-Platform":s.ch,"Sec-CH-UA-Platform-Version":s.ch_ver})):r==="firefox"?(o=`Mozilla/5.0 (${s.ua}; rv:${y.firefox}) Gecko/20100101 Firefox/${y.firefox}`,a.Accept="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",a.Priority="u=1"):(o=`Mozilla/5.0 (${s.ua}) AppleWebKit/${y.safari} (KHTML, like Gecko) Version/${y.safari_version} Safari/${y.safari}`,a.Accept="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),a["User-Agent"]=o,a}function Je(r,e){let t=new Map;for(let[s,o]of Object.entries(r))t.set(s.toLowerCase(),o);for(let[s,o]of Object.entries(e))o!==void 0&&t.set(s.toLowerCase(),o);return Object.fromEntries(t.entries())}var Qe=(r,e,t)=>{let{resolveProtocol:s}=r.context||{};if(s)return s;let o=r?.timeout?.connect??6e4,n=r?.timeout?.request??6e4,a=Math.min(o,n);return e?Z(e,t,a):(...i)=>le.auto.resolveProtocol({...i[0],timeout:a})};async function te(r){let e=r.context;if(!e)return;let{stealth:t,browser:s,os:o,zstd:n,proxyUrl:a,sessionData:i}=e,c=s||"chrome",f=o||"windows";if(c==="random"){let g=["chrome","brave","edge","arc","opera","firefox","safari"];c=g[Math.floor(Math.random()*g.length)];}if(f==="random"){let g=["windows","mac","linux","android"];f=g[Math.floor(Math.random()*g.length)];}let u=r.url,l=Qe(r,a,i),d;if(u.protocol==="https:")try{d=(await l({host:u.hostname,port:u.port||443,rejectUnauthorized:!1,ALPNProtocols:["h2","http/1.1"],servername:u.hostname})).alpnProtocol;}catch{d="http/1.1";}e.negotiatedProtocol=d;let p;t!==false?i&&i.cachedHeaders?p=i.cachedHeaders:(p=Ve(c,f),i&&(i.cachedHeaders=p)):p={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36"},r.decompress?p["Accept-Encoding"]=n!==false?"gzip, deflate, br, zstd":"gzip, deflate, br":delete p["Accept-Encoding"],r.headers=Je(p,r.headers);}var Ze=16,et=1<<19,tt={chrome:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),brave:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),edge:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),arc:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),opera:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),samsung:["X25519","prime256v1","secp384r1"].join(":"),firefox:["X25519","prime256v1","secp384r1","secp521r1","ffdhe2048","ffdhe3072"].join(":"),safari:["X25519","prime256v1","secp384r1","secp521r1"].join(":")},rt={chrome:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),brave:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),edge:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),arc:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),opera:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),samsung:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),firefox:["ecdsa_secp256r1_sha256","ecdsa_secp384r1_sha384","ecdsa_secp521r1_sha512","rsa_pss_rsae_sha256","rsa_pss_rsae_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha256","rsa_pkcs1_sha384","rsa_pkcs1_sha512"].join(":"),safari:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":")},ge={chrome:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),brave:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),edge:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),arc:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),opera:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),samsung:["TLS_AES_128_GCM_SHA256","TLS_CHACHA20_POLY1305_SHA256","TLS_AES_256_GCM_SHA384","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),firefox:["TLS_AES_128_GCM_SHA256","TLS_CHACHA20_POLY1305_SHA256","TLS_AES_256_GCM_SHA384","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384"].join(":"),safari:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-RSA-CHACHA20-POLY1305"].join(":")},st=r=>{for(let[e,t]of Object.entries(r))if(e.toLowerCase()==="user-agent")return t},ot=r=>r?r.includes("Edg/")?"edge":r.includes("OPR/")?"opera":r.includes("SamsungBrowser")?"samsung":r.includes("Firefox")?"firefox":r.includes("Chrome")?"chrome":r.includes("Safari")&&!r.includes("Chrome")?"safari":"chrome":"chrome";function re(r){let{https:e,context:t}=r;if(e.ciphers||e.signatureAlgorithms||e.minVersion)return;let s=t?.browser;(!s||s==="random")&&(s=ot(st(r.headers))),s in ge||(s="chrome"),e.ciphers=ge[s],e.signatureAlgorithms=rt[s],e.ecdhCurve=tt[s],e.minVersion="TLSv1.2",e.maxVersion="TLSv1.3",r._unixOptions={...r._unixOptions,secureOptions:Ze|et,requestOCSP:true};}var se=(r,e)=>{let t=r.url,s=new URL$1(e.url),o=e.headers["referer-policy"]||"strict-origin-when-cross-origin",n=r.headers;o==="no-referrer"?delete n.referer:o==="no-referrer-when-downgrade"?s.protocol==="https:"&&t.protocol==="http:"?delete n.referer:n.referer=`${s.origin}${s.pathname}${s.search}`:o==="origin"?n.referer=s.origin:o==="origin-when-cross-origin"?t.origin===s.origin?n.referer=`${s.origin}${s.pathname}${s.search}`:n.referer=s.origin:o==="same-origin"?t.origin===s.origin?n.referer=`${s.origin}${s.pathname}${s.search}`:delete n.referer:o==="strict-origin"?s.protocol==="https:"&&t.protocol==="http:"?delete n.referer:n.referer=s.origin:o==="strict-origin-when-cross-origin"?t.origin===s.origin?n.referer=`${s.origin}${s.pathname}${s.search}`:s.protocol==="https:"&&t.protocol==="http:"?delete n.referer:n.referer=s.origin:o==="unsafe-url"&&(n.referer=`${s.origin}${s.pathname}${s.search}`);};var C=class r extends Error{status;code;config;hint;response;constructor(e,t,s,o,n,a,i){let c=n?`${e}
5
- \u{1F4A1} Hint: ${n}`:e;super(c),this.name="RanuxError",this.status=t,this.code=s,this.config=o,this.hint=n,t&&(this.response={status:t,data:a||c,headers:i||{}}),Object.setPrototypeOf(this,r.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,r);}};var _e=r=>String.fromCharCode(...r),ut=()=>_e([82,97,110,117,120,95,85,108,116,114,97,95,83,101,99,117,114,101,95,69,100,103,101,95,50,48,50,54,95,88,57]),pt=[[104,116,116,112,115,58,47,47,114,97,110,117,120,46,114,97,110,115,97,114,97,100,101,118,110,97,116,104,46,119,111,114,107,101,114,115,46,100,101,118,47],[104,116,116,112,115,58,47,47,114,97,110,117,120,50,46,97,109,114,97,110,115,97,114,97,109,97,120,46,119,111,114,107,101,114,115,46,100,101,118,47],[104,116,116,112,115,58,47,47,114,97,110,117,120,51,46,114,97,110,117,120,114,97,110,115,97,114,97,46,119,111,114,107,101,114,115,46,100,101,118,47],[104,116,116,112,115,58,47,47,114,97,110,117,120,52,46,114,97,110,117,120,110,101,119,46,119,111,114,107,101,114,115,46,100,101,118,47]],lt=()=>pt.map(_e);function O(r){return new Promise((e,t)=>{let s=[];r.on("data",o=>s.push(Buffer.from(o))),r.on("end",()=>e(Buffer.concat(s))),r.on("error",t);})}function dt(r,e){return !!([403,429,503].includes(r)||(e.server||"").toLowerCase().includes("cloudflare")&&e["cf-mitigated"])}function ht(r,e){let t=new URL(r),s=Object.keys(e).map(o=>o.toLowerCase());if(s.includes("referer")||(e.Referer=t.origin+"/"),!s.includes("sec-fetch-dest")){let o=t.pathname.includes("/api/")||t.pathname.endsWith(".json");e["Sec-Fetch-Dest"]=o?"empty":"document",e["Sec-Fetch-Mode"]=o?"cors":"navigate",e["Sec-Fetch-Site"]="cross-site",e["Sec-Fetch-User"]="?1";}}function ft(r,e,t,s){return new Promise((o,n)=>{let a={...t.headers||{}};ht(e,a);let i=e,c=t.proxyUrl;if(s.type==="proxy"&&s.url)c=s.url;else if(s.type==="edge"&&s.url){i=s.url;let p=Date.now().toString(),g=ct.createHash("sha256").update(e+p+ut()).digest("hex");a["X-Amz-Cf-Id"]=Buffer.from(e).toString("base64"),a["X-Amz-Request-Id"]=`${p}-${g}`;}let f=typeof t.timeout=="number"?t.timeout:t.timeout?.request||6e4,u={method:t.method||"GET",headers:a,timeout:{request:f},throwHttpErrors:false,retry:{limit:0},followRedirect:true,isStream:true,proxyUrl:c,sessionToken:t.sessionToken,headerGeneratorOptions:t.headerGeneratorOptions,useHeaderGenerator:t.useHeaderGenerator,insecureHTTPParser:t.insecureHTTPParser,cookieJar:t.cookieJar,http2:t.http2,https:t.https,decompress:t.decompress,context:t.context,...Object.fromEntries(Object.entries(t).filter(([p])=>!["method","headers","timeout","data","json","params","searchParams","signal","relayMode","responseType","baseURL","prefixUrl","proxyUrl","proxyList","onDownloadProgress","onUploadProgress","cookies","httpAgent","httpsAgent","transformRequest","transformResponse","sessionToken","headerGeneratorOptions","useHeaderGenerator","insecureHTTPParser","cookieJar","http2","https","decompress","context"].includes(p)))};for(let p in u)u[p]===void 0&&delete u[p];t.data?typeof t.data=="string"||Buffer.isBuffer(t.data)?u.body=t.data:t.data instanceof Uint8Array?u.body=Buffer.from(t.data):u.json=t.data:t.json&&(u.json=t.json);let l=t.params||t.searchParams;l&&(u.searchParams=l),(t.httpAgent||t.httpsAgent)&&(u.agent={http:t.httpAgent?t.stealth!==false?new A(t.httpAgent):t.httpAgent:void 0,https:t.httpsAgent?t.stealth!==false?new A(t.httpsAgent):t.httpsAgent:void 0});let d=r.stream(i,u);t.onDownloadProgress&&d.on("downloadProgress",p=>t.onDownloadProgress(p)),t.onUploadProgress&&d.on("uploadProgress",p=>t.onUploadProgress(p)),t.signal&&t.signal.addEventListener("abort",()=>{d.destroy(),n(new C("Request aborted by user signal",0,"ERR_ABORTED",t));}),d.on("response",async p=>{let g=p.statusCode,H=p.headers;if(s.type==="edge"&&[502,504,524].includes(g))return d.destroy(),n(new C("Worker Node Exhausted",g,"ERR_EDGE_OOM",t,void 0,"Edge Timeout",H));if(dt(g,H))return d.destroy(),n(new C("WAF Block Detected or Rate Limited",g,"ERR_WAF_BLOCK",t,void 0,"WAF Execution Blocked",H));let _=null,x=null,ne=(H["content-type"]||"").toLowerCase(),He=parseInt(H["content-length"]||"0",10),ae=ne.match(/(audio|video|image|application\/(zip|octet-stream|x-rar))/i)||He>5*1024*1024;if(ne.includes("text/html")&&!ae&&g===200)try{_=await O(d);let h=_.toString("utf-8",0,8e3);if(h.includes("_cf_chl_opt")||h.includes("Just a moment...")||h.includes("cf-please-wait")||h.includes("DataDome"))return n(new C("WAF Challenge (Status 200) Detected",200,"ERR_WAF_BLOCK",t,void 0,h,H))}catch{return n(new C("Failed to read response stream",g,"ERR_NETWORK",t))}let b=_?Readable.from(_):d.pipe(new PassThrough),S={status:g,statusCode:g,headers:H,stream:b,data:null,body:null,async buffer(){return _||(_=await O(b),_)},async text(){return (await this.buffer()).toString("utf-8")},async json(){let h=await this.text();try{return JSON.parse(h)}catch{return h}},$(){if(!_&&!x&&t.responseType!=="cheerio")throw new C("Data not loaded. Set { responseType: 'cheerio' } or wait for text() resolution.");let h=_?_.toString("utf-8"):typeof x=="string"?x:"";return oe.load(h)}};if(t.responseType==="stream"||ae)S.data=b,S.body=S.data,o(S);else if(t.responseType==="buffer"||t.responseType==="arraybuffer")try{let h=_||await O(b);_=h,S.data=h,S.body=S.data,o(S);}catch(h){n(h);}else if(t.responseType==="cheerio")try{let h=_||await O(b);_=h,S.data=oe.load(h.toString("utf-8")),S.body=S.data,o(S);}catch(h){n(h);}else try{let h=_||await O(b);_=h;let G=h.toString("utf-8");try{x=JSON.parse(G);}catch{x=G;}S.data=x,S.body=x,o(S);}catch(h){n(h);}}),d.on("error",p=>{n(new C(p.message,0,"ERR_NETWORK",t));});})}var mt=r=>new Promise(e=>setTimeout(e,r));async function Se(r,e,t={}){let s=lt(),o=[],n=t.responseType==="stream"||t.responseType==="buffer"||t.responseType==="arraybuffer";t.relayMode!=="always"&&o.push({type:"local"}),t.proxyList&&Array.isArray(t.proxyList)&&t.proxyList.forEach(l=>o.push({type:"proxy",url:l})),t.relayMode!=="never"&&(!n||t.relayMode==="always")&&s.forEach(l=>o.push({type:"edge",url:l}));let a,i,c=t.smartRetry===false?1:3,f=typeof t.timeout=="number"?t.timeout:t.timeout?.request||12e4,u=Date.now();for(let l of o)for(let d=1;d<=c;d++){if(Date.now()-u>f)throw new C("Global request timeout exceeded during failover retries.",408,"ERR_GLOBAL_TIMEOUT",t);try{return await ft(r,e,t,l)}catch(p){if(i=p,p instanceof C){if(p.code==="ERR_WAF_BLOCK"){a||(a=p);break}if(p.code==="ERR_EDGE_OOM")throw a?(a.hint="The requested file seems too large to buffer via Edge Nodes. Try `{ responseType: 'stream' }` to download it successfully.",a):p;if((p.code==="ERR_NETWORK"||[502,503,504].includes(p.status||0))&&d<c){await mt(1e3*Math.pow(2,d));continue}if(p.code!=="ERR_WAF_BLOCK"&&p.code!=="ERR_NETWORK")throw p}break}}throw a||new C("All execution nodes and proxies exhausted. Target is unreachable or heavily shielded.",i?.status||500,"ERR_EXHAUSTED",t,void 0,i?.response?.data,i?.response?.headers)}var Ae=[K,F],Ce=[W,z,ee,V,te,re],Ee=[se],D=got$1.extend({handlers:[j],mutableDefaults:true,http2:true,https:{rejectUnauthorized:false},throwHttpErrors:false,timeout:{request:6e4},retry:{limit:0},headers:{"user-agent":void 0},context:{insecureHTTPParser:true,stealth:true},agent:{http:new A(v.globalAgent),https:new A(ue.globalAgent)},hooks:{init:Ae,beforeRequest:Ce,beforeRedirect:Ee}}),Hr={init:Ae,beforeRequest:Ce,beforeRedirect:Ee,fixDecompress:j,insecureParserHook:W,sessionDataHook:z,http2Hook:ee,proxyHook:V,browserHeadersHook:te,tlsHook:re,optionsValidationHandler:K,customOptionsHook:F,refererHook:se},M=class{handlers=new Map;idCounter=0;use(e,t){let s=this.idCounter++;return this.handlers.set(s,{fulfilled:e,rejected:t}),s}eject(e){this.handlers.delete(e);}clear(){this.handlers.clear();}forEach(e){this.handlers.forEach(e);}},q={request:new M,response:new M};async function E(r,e={}){e.transformRequest&&(Array.isArray(e.transformRequest)?e.transformRequest:[e.transformRequest]).forEach(o=>{e.data=o(e.data,e.headers||{});});let t=Promise.resolve(e);return q.request.forEach(s=>{s&&(t=t.then(s.fulfilled,s.rejected));}),t=t.then(s=>Se(D,r,s)),q.response.forEach(s=>{s&&(t=t.then(s.fulfilled,s.rejected));}),t=t.then(s=>(e.transformResponse&&s&&s.data&&typeof s.data!="string"&&(!s.stream||typeof s.data=="object"&&!Buffer.isBuffer(s.data))&&(Array.isArray(e.transformResponse)?e.transformResponse:[e.transformResponse]).forEach(n=>{s.data=n(s.data,s.headers||{}),s.body=s.data;}),s)),t}var Re=Object.assign((r,e)=>E(r,e),{get:(r,e)=>E(r,{...e,method:"GET"}),post:(r,e,t)=>E(r,{...t,data:e,method:"POST"}),put:(r,e,t)=>E(r,{...t,data:e,method:"PUT"}),delete:(r,e)=>E(r,{...e,method:"DELETE"}),patch:(r,e,t)=>E(r,{...t,data:e,method:"PATCH"}),head:(r,e)=>E(r,{...e,method:"HEAD"}),interceptors:q,native:D,paginate:D.paginate,stream:D.stream,create:r=>({get:(e,t)=>E((r.baseURL||"")+e,{...r,...t,method:"GET"}),post:(e,t,s)=>E((r.baseURL||"")+e,{...r,...s,data:t,method:"POST"}),put:(e,t,s)=>E((r.baseURL||"")+e,{...r,...s,data:t,method:"PUT"}),delete:(e,t)=>E((r.baseURL||"")+e,{...r,...t,method:"DELETE"}),patch:(e,t,s)=>E((r.baseURL||"")+e,{...r,...s,data:t,method:"PATCH"}),head:(e,t)=>E((r.baseURL||"")+e,{...r,...t,method:"HEAD"}),interceptors:q}),extend:r=>Re.create({baseURL:r.prefixUrl,...r})});var xr=Re;export{w as ProxyError,C as RanuxError,A as TransformHeadersAgent,xr as default,de as getAgents,D as gotScraping,Hr as hooks,Re as ranux};
4
+ ${d.toString("utf8",0,100)}`;n(new w(g,{cause:d.toString("utf8")})),l.destroy();return}let p=De.connect({...e,socket:l},t);s(p);});}catch(a){n(a);}})();}),Q=()=>({protocolCache:new me({maxSize:1e3}),resolveAlpnQueue:new Map}),fe=new me({maxSize:100}),Ie=Q(),Z=(r,e,t)=>{let{protocolCache:s,resolveAlpnQueue:n}=Ie;if(e)(!e.protocolCache||!e.resolveAlpnQueue)&&Object.assign(e,Q()),s=e.protocolCache,n=e.resolveAlpnQueue;else {let i=createHash("sha256").update(r).digest("hex"),c=fe.get(i)??Q();fe.set(i,c),s=c.protocolCache,n=c.resolveAlpnQueue;}let o=async(i,c)=>Ye(r,i,c),a=(D.auto||D.default?.auto).createResolveProtocol(s,n,o);return async(...i)=>a({...i[0],timeout:t})};function ee(r){let e=r.context||{},{proxyUrl:t,sessionData:s,stealth:n}=e;r.http2&&r.url.protocol!=="http:"?r.request=(o,a,i)=>{let c=a;return t&&(c.resolveProtocol=Z(t,s,Math.min(r?.timeout?.connect??6e4,r?.timeout?.request??6e4))),n!==false&&(c.settings=ge),ye(o,c,i)}:r.request=void 0;}var y={chrome:"151.0.0.0",chrome_ch:"151",edge_ch:"151",brave_ch:"151",arc_ch:"151",opera_ch:"134",samsung_ch:"26",samsung_ua:"26.0",firefox:"154.0",safari:"605.1.15",safari_version:"19.0"},_e={windows:{ua:"Windows NT 10.0; Win64; x64",ch:'"Windows"',ch_ver:'"15.0.0"'},mac:{ua:"Macintosh; Intel Mac OS X 10_15_7",ch:'"macOS"',ch_ver:'"26.0.0"'},linux:{ua:"X11; Linux x86_64",ch:'"Linux"',ch_ver:'"6.5.0"'},android:{ua:"Linux; Android 14; SM-S928B",ch:'"Android"',ch_ver:'"14.0.0"'},ios:{ua:"iPhone; CPU iPhone OS 17_5_1 like Mac OS X",ch:'"iOS"',ch_ver:'"17.5.1"'}};function Ve(r,e){let t=e==="android"||e==="ios"?"?1":"?0",s=_e[e]||_e.windows,n="",o="",a={Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","Accept-Language":"en-US,en;q=0.9","Upgrade-Insecure-Requests":"1","Sec-Fetch-Site":"none","Sec-Fetch-Mode":"navigate","Sec-Fetch-User":"?1","Sec-Fetch-Dest":"document",Priority:"u=0, i"};return r==="samsung"?(n=`Mozilla/5.0 (${s.ua}) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/${y.samsung_ua} Chrome/${y.chrome} Mobile Safari/537.36`,o=`"Samsung Internet";v="${y.samsung_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`,Object.assign(a,{"Sec-CH-UA":o,"Sec-CH-UA-Mobile":"?1","Sec-CH-UA-Platform":'"Android"',"Sec-CH-UA-Platform-Version":s.ch_ver})):["chrome","brave","edge","arc","opera"].includes(r)?(n=`Mozilla/5.0 (${s.ua}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${y.chrome} Safari/537.36`,r==="brave"?o=`"Brave";v="${y.brave_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`:r==="edge"?(o=`"Microsoft Edge";v="${y.edge_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`,n=`${n} Edg/${y.edge_ch}.0.0.0`):r==="opera"?(o=`"Opera";v="${y.opera_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`,n=`${n} OPR/${y.opera_ch}.0.0.0`):r==="arc"?o=`"Arc";v="${y.arc_ch}", "Chromium";v="${y.chrome_ch}", "Not_A Brand";v="24"`:o=`"Chromium";v="${y.chrome_ch}", "Google Chrome";v="${y.chrome_ch}", "Not_A Brand";v="24"`,Object.assign(a,{"Sec-CH-UA":o,"Sec-CH-UA-Mobile":t,"Sec-CH-UA-Platform":s.ch,"Sec-CH-UA-Platform-Version":s.ch_ver})):r==="firefox"?(n=`Mozilla/5.0 (${s.ua}; rv:${y.firefox}) Gecko/20100101 Firefox/${y.firefox}`,a.Accept="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",a.Priority="u=1"):(n=`Mozilla/5.0 (${s.ua}) AppleWebKit/${y.safari} (KHTML, like Gecko) Version/${y.safari_version} Safari/${y.safari}`,a.Accept="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),a["User-Agent"]=n,a}function Je(r,e){let t=new Map;for(let[s,n]of Object.entries(r))t.set(s.toLowerCase(),n);for(let[s,n]of Object.entries(e))n!==void 0&&t.set(s.toLowerCase(),n);return Object.fromEntries(t.entries())}var Qe=(r,e,t)=>{let{resolveProtocol:s}=r.context||{};if(s)return s;let n=r?.timeout?.connect??6e4,o=r?.timeout?.request??6e4,a=Math.min(n,o);return e?Z(e,t,a):(...i)=>D.auto.resolveProtocol({...i[0],timeout:a})};async function te(r){let e=r.context;if(!e)return;let{stealth:t,browser:s,os:n,zstd:o,proxyUrl:a,sessionData:i}=e,c=s||"chrome",f=n||"windows";if(c==="random"){let g=["chrome","brave","edge","arc","opera","firefox","safari"];c=g[Math.floor(Math.random()*g.length)];}if(f==="random"){let g=["windows","mac","linux","android"];f=g[Math.floor(Math.random()*g.length)];}let u=r.url,l=Qe(r,a,i),d;if(u.protocol==="https:")try{d=(await l({host:u.hostname,port:u.port||443,rejectUnauthorized:!1,ALPNProtocols:["h2","http/1.1"],servername:u.hostname})).alpnProtocol;}catch{d="http/1.1";}e.negotiatedProtocol=d;let p;t!==false?i&&i.cachedHeaders?p=i.cachedHeaders:(p=Ve(c,f),i&&(i.cachedHeaders=p)):p={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36"},r.decompress?p["Accept-Encoding"]=o!==false?"gzip, deflate, br, zstd":"gzip, deflate, br":delete p["Accept-Encoding"],r.headers=Je(p,r.headers);}var Ze=16,et=1<<19,tt={chrome:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),brave:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),edge:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),arc:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),opera:["X25519MLKEM768","X25519Kyber768","X25519","prime256v1","secp384r1"].join(":"),samsung:["X25519","prime256v1","secp384r1"].join(":"),firefox:["X25519","prime256v1","secp384r1","secp521r1","ffdhe2048","ffdhe3072"].join(":"),safari:["X25519","prime256v1","secp384r1","secp521r1"].join(":")},rt={chrome:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),brave:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),edge:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),arc:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),opera:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),samsung:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":"),firefox:["ecdsa_secp256r1_sha256","ecdsa_secp384r1_sha384","ecdsa_secp521r1_sha512","rsa_pss_rsae_sha256","rsa_pss_rsae_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha256","rsa_pkcs1_sha384","rsa_pkcs1_sha512"].join(":"),safari:["ecdsa_secp256r1_sha256","rsa_pss_rsae_sha256","rsa_pkcs1_sha256","ecdsa_secp384r1_sha384","rsa_pss_rsae_sha384","rsa_pkcs1_sha384","rsa_pss_rsae_sha512","rsa_pkcs1_sha512"].join(":")},Se={chrome:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),brave:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),edge:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),arc:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),opera:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),samsung:["TLS_AES_128_GCM_SHA256","TLS_CHACHA20_POLY1305_SHA256","TLS_AES_256_GCM_SHA384","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305"].join(":"),firefox:["TLS_AES_128_GCM_SHA256","TLS_CHACHA20_POLY1305_SHA256","TLS_AES_256_GCM_SHA384","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-CHACHA20-POLY1305","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384"].join(":"),safari:["TLS_AES_128_GCM_SHA256","TLS_AES_256_GCM_SHA384","TLS_CHACHA20_POLY1305_SHA256","ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-ECDSA-AES128-GCM-SHA256","ECDHE-ECDSA-CHACHA20-POLY1305","ECDHE-RSA-AES256-GCM-SHA384","ECDHE-RSA-AES128-GCM-SHA256","ECDHE-RSA-CHACHA20-POLY1305"].join(":")},st=r=>{for(let[e,t]of Object.entries(r))if(e.toLowerCase()==="user-agent")return t},ot=r=>r?r.includes("Edg/")?"edge":r.includes("OPR/")?"opera":r.includes("SamsungBrowser")?"samsung":r.includes("Firefox")?"firefox":r.includes("Chrome")?"chrome":r.includes("Safari")&&!r.includes("Chrome")?"safari":"chrome":"chrome";function re(r){let{https:e,context:t}=r;if(e.ciphers||e.signatureAlgorithms||e.minVersion)return;let s=t?.browser;(!s||s==="random")&&(s=ot(st(r.headers))),s in Se||(s="chrome"),e.ciphers=Se[s],e.signatureAlgorithms=rt[s],e.ecdhCurve=tt[s],e.minVersion="TLSv1.2",e.maxVersion="TLSv1.3",r._unixOptions={...r._unixOptions,secureOptions:Ze|et,requestOCSP:true};}var se=(r,e)=>{let t=r.url,s=new URL$1(e.url),n=e.headers["referer-policy"]||"strict-origin-when-cross-origin",o=r.headers;n==="no-referrer"?delete o.referer:n==="no-referrer-when-downgrade"?s.protocol==="https:"&&t.protocol==="http:"?delete o.referer:o.referer=`${s.origin}${s.pathname}${s.search}`:n==="origin"?o.referer=s.origin:n==="origin-when-cross-origin"?t.origin===s.origin?o.referer=`${s.origin}${s.pathname}${s.search}`:o.referer=s.origin:n==="same-origin"?t.origin===s.origin?o.referer=`${s.origin}${s.pathname}${s.search}`:delete o.referer:n==="strict-origin"?s.protocol==="https:"&&t.protocol==="http:"?delete o.referer:o.referer=s.origin:n==="strict-origin-when-cross-origin"?t.origin===s.origin?o.referer=`${s.origin}${s.pathname}${s.search}`:s.protocol==="https:"&&t.protocol==="http:"?delete o.referer:o.referer=s.origin:n==="unsafe-url"&&(o.referer=`${s.origin}${s.pathname}${s.search}`);};var C=class r extends Error{status;code;config;hint;response;constructor(e,t,s,n,o,a,i){let c=o?`${e}
5
+ \u{1F4A1} Hint: ${o}`:e;super(c),this.name="RanuxError",this.status=t,this.code=s,this.config=n,this.hint=o,t&&(this.response={status:t,data:a||c,headers:i||{}}),Object.setPrototypeOf(this,r.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,r);}};var Ae=r=>String.fromCharCode(...r),ut=()=>Ae([82,97,110,117,120,95,85,108,116,114,97,95,83,101,99,117,114,101,95,69,100,103,101,95,50,48,50,54,95,88,57]),pt=[[104,116,116,112,115,58,47,47,114,97,110,117,120,46,114,97,110,115,97,114,97,100,101,118,110,97,116,104,46,119,111,114,107,101,114,115,46,100,101,118,47],[104,116,116,112,115,58,47,47,114,97,110,117,120,50,46,97,109,114,97,110,115,97,114,97,109,97,120,46,119,111,114,107,101,114,115,46,100,101,118,47],[104,116,116,112,115,58,47,47,114,97,110,117,120,51,46,114,97,110,117,120,114,97,110,115,97,114,97,46,119,111,114,107,101,114,115,46,100,101,118,47],[104,116,116,112,115,58,47,47,114,97,110,117,120,52,46,114,97,110,117,120,110,101,119,46,119,111,114,107,101,114,115,46,100,101,118,47]],lt=()=>pt.map(Ae);function O(r){return new Promise((e,t)=>{let s=[];r.on("data",n=>s.push(Buffer.from(n))),r.on("end",()=>e(Buffer.concat(s))),r.on("error",t);})}function dt(r,e){return !!([403,429,503].includes(r)||(e.server||"").toLowerCase().includes("cloudflare")&&e["cf-mitigated"])}function ht(r,e){let t=new URL(r),s=Object.keys(e).map(n=>n.toLowerCase());if(s.includes("referer")||(e.Referer=t.origin+"/"),!s.includes("sec-fetch-dest")){let n=t.pathname.includes("/api/")||t.pathname.endsWith(".json");e["Sec-Fetch-Dest"]=n?"empty":"document",e["Sec-Fetch-Mode"]=n?"cors":"navigate",e["Sec-Fetch-Site"]="cross-site",e["Sec-Fetch-User"]="?1";}}function ft(r,e,t,s){return new Promise((n,o)=>{let a={...t.headers||{}};ht(e,a);let i=e,c=t.proxyUrl;if(s.type==="proxy"&&s.url)c=s.url;else if(s.type==="edge"&&s.url){i=s.url;let p=Date.now().toString(),g=ct.createHash("sha256").update(e+p+ut()).digest("hex");a["X-Amz-Cf-Id"]=Buffer.from(e).toString("base64"),a["X-Amz-Request-Id"]=`${p}-${g}`;}let f=typeof t.timeout=="number"?t.timeout:t.timeout?.request||6e4,u={method:t.method||"GET",headers:a,timeout:{request:f},throwHttpErrors:false,retry:{limit:0},followRedirect:true,isStream:true,proxyUrl:c,sessionToken:t.sessionToken,headerGeneratorOptions:t.headerGeneratorOptions,useHeaderGenerator:t.useHeaderGenerator,insecureHTTPParser:t.insecureHTTPParser,cookieJar:t.cookieJar,http2:t.http2,https:t.https,decompress:t.decompress,context:t.context,...Object.fromEntries(Object.entries(t).filter(([p])=>!["method","headers","timeout","data","json","params","searchParams","signal","relayMode","responseType","baseURL","prefixUrl","proxyUrl","proxyList","onDownloadProgress","onUploadProgress","cookies","httpAgent","httpsAgent","transformRequest","transformResponse","sessionToken","headerGeneratorOptions","useHeaderGenerator","insecureHTTPParser","cookieJar","http2","https","decompress","context"].includes(p)))};for(let p in u)u[p]===void 0&&delete u[p];t.data?typeof t.data=="string"||Buffer.isBuffer(t.data)?u.body=t.data:t.data instanceof Uint8Array?u.body=Buffer.from(t.data):u.json=t.data:t.json&&(u.json=t.json);let l=t.params||t.searchParams;l&&(u.searchParams=l),(t.httpAgent||t.httpsAgent)&&(u.agent={http:t.httpAgent?t.stealth!==false?new A(t.httpAgent):t.httpAgent:void 0,https:t.httpsAgent?t.stealth!==false?new A(t.httpsAgent):t.httpsAgent:void 0});let d;try{d=r.stream(i,u);}catch(p){return o(p)}t.onDownloadProgress&&d.on("downloadProgress",p=>t.onDownloadProgress(p)),t.onUploadProgress&&d.on("uploadProgress",p=>t.onUploadProgress(p)),t.signal&&t.signal.addEventListener("abort",()=>{d.destroy(),o(new C("Request aborted by user signal",0,"ERR_ABORTED",t));}),d.on("response",async p=>{let g=p.statusCode,H=p.headers;if(s.type==="edge"&&[502,504,524].includes(g))return d.destroy(),o(new C("Worker Node Exhausted",g,"ERR_EDGE_OOM",t,void 0,"Edge Timeout",H));if(dt(g,H))return d.destroy(),o(new C("WAF Block Detected or Rate Limited",g,"ERR_WAF_BLOCK",t,void 0,"WAF Execution Blocked",H));let _=null,x=null,ne=(H["content-type"]||"").toLowerCase(),be=parseInt(H["content-length"]||"0",10),ae=ne.match(/(audio|video|image|application\/(zip|octet-stream|x-rar))/i)||be>5*1024*1024;if(ne.includes("text/html")&&!ae&&g===200)try{_=await O(d);let h=_.toString("utf-8",0,8e3);if(h.includes("_cf_chl_opt")||h.includes("Just a moment...")||h.includes("cf-please-wait")||h.includes("DataDome"))return o(new C("WAF Challenge (Status 200) Detected",200,"ERR_WAF_BLOCK",t,void 0,h,H))}catch{return o(new C("Failed to read response stream",g,"ERR_NETWORK",t))}let b=_?Readable.from(_):d.pipe(new PassThrough),S={status:g,statusCode:g,headers:H,stream:b,data:null,body:null,async buffer(){return _||(_=await O(b),_)},async text(){return (await this.buffer()).toString("utf-8")},async json(){let h=await this.text();try{return JSON.parse(h)}catch{return h}},$(){if(!_&&!x&&t.responseType!=="cheerio")throw new C("Data not loaded. Set { responseType: 'cheerio' } or wait for text() resolution.");let h=_?_.toString("utf-8"):typeof x=="string"?x:"";return oe.load(h)}};if(t.responseType==="stream"||ae)S.data=b,S.body=S.data,n(S);else if(t.responseType==="buffer"||t.responseType==="arraybuffer")try{let h=_||await O(b);_=h,S.data=h,S.body=S.data,n(S);}catch(h){o(h);}else if(t.responseType==="cheerio")try{let h=_||await O(b);_=h,S.data=oe.load(h.toString("utf-8")),S.body=S.data,n(S);}catch(h){o(h);}else try{let h=_||await O(b);_=h;let q=h.toString("utf-8");try{x=JSON.parse(q);}catch{x=q;}S.data=x,S.body=x,n(S);}catch(h){o(h);}}),d.on("error",p=>{o(new C(p.message,0,"ERR_NETWORK",t));});})}var mt=r=>new Promise(e=>setTimeout(e,r));async function Ce(r,e,t={}){let s=lt(),n=[],o=t.responseType==="stream"||t.responseType==="buffer"||t.responseType==="arraybuffer";t.relayMode!=="always"&&n.push({type:"local"}),t.proxyList&&Array.isArray(t.proxyList)&&t.proxyList.forEach(l=>n.push({type:"proxy",url:l})),t.relayMode!=="never"&&(!o||t.relayMode==="always")&&s.forEach(l=>n.push({type:"edge",url:l}));let a,i,c=t.smartRetry===false?1:3,f=typeof t.timeout=="number"?t.timeout:t.timeout?.request||12e4,u=Date.now();for(let l of n)for(let d=1;d<=c;d++){if(Date.now()-u>f)throw new C("Global request timeout exceeded during failover retries.",408,"ERR_GLOBAL_TIMEOUT",t);try{return await ft(r,e,t,l)}catch(p){if(i=p,p instanceof C){if(p.code==="ERR_WAF_BLOCK"){a||(a=p);break}if(p.code==="ERR_EDGE_OOM")throw a?(a.hint="The requested file seems too large to buffer via Edge Nodes. Try `{ responseType: 'stream' }` to download it successfully.",a):p;if((p.code==="ERR_NETWORK"||[502,503,504].includes(p.status||0))&&d<c){await mt(1e3*Math.pow(2,d));continue}if(p.code!=="ERR_WAF_BLOCK"&&p.code!=="ERR_NETWORK")throw p}else throw p;break}}throw a||new C(`All execution nodes and proxies exhausted. Last error: ${i?.message||"Unreachable or Blocked"}`,i?.status||500,"ERR_EXHAUSTED",t,void 0,i?.response?.data,i?.response?.headers)}var Ee=[Y,K],Re=[F,W,ee,J,te,re],He=[se],M=got$1.extend({handlers:[B],mutableDefaults:true,http2:true,https:{rejectUnauthorized:false},throwHttpErrors:false,timeout:{request:6e4},retry:{limit:0},headers:{"user-agent":void 0},context:{insecureHTTPParser:true,stealth:true},agent:{http:new A(v.globalAgent),https:new A(pe.globalAgent)},hooks:{init:Ee,beforeRequest:Re,beforeRedirect:He}}),Hr={init:Ee,beforeRequest:Re,beforeRedirect:He,fixDecompress:B,insecureParserHook:F,sessionDataHook:W,http2Hook:ee,proxyHook:J,browserHeadersHook:te,tlsHook:re,optionsValidationHandler:Y,customOptionsHook:K,refererHook:se},$=class{handlers=new Map;idCounter=0;use(e,t){let s=this.idCounter++;return this.handlers.set(s,{fulfilled:e,rejected:t}),s}eject(e){this.handlers.delete(e);}clear(){this.handlers.clear();}forEach(e){this.handlers.forEach(e);}},G={request:new $,response:new $};async function E(r,e={}){e.transformRequest&&(Array.isArray(e.transformRequest)?e.transformRequest:[e.transformRequest]).forEach(n=>{e.data=n(e.data,e.headers||{});});let t=Promise.resolve(e);return G.request.forEach(s=>{s&&(t=t.then(s.fulfilled,s.rejected));}),t=t.then(s=>Ce(M,r,s)),G.response.forEach(s=>{s&&(t=t.then(s.fulfilled,s.rejected));}),t=t.then(s=>(e.transformResponse&&s&&s.data&&typeof s.data!="string"&&(!s.stream||typeof s.data=="object"&&!Buffer.isBuffer(s.data))&&(Array.isArray(e.transformResponse)?e.transformResponse:[e.transformResponse]).forEach(o=>{s.data=o(s.data,s.headers||{}),s.body=s.data;}),s)),t}var xe=Object.assign((r,e)=>E(r,e),{get:(r,e)=>E(r,{...e,method:"GET"}),post:(r,e,t)=>E(r,{...t,data:e,method:"POST"}),put:(r,e,t)=>E(r,{...t,data:e,method:"PUT"}),delete:(r,e)=>E(r,{...e,method:"DELETE"}),patch:(r,e,t)=>E(r,{...t,data:e,method:"PATCH"}),head:(r,e)=>E(r,{...e,method:"HEAD"}),interceptors:G,native:M,paginate:M.paginate,stream:M.stream,create:r=>({get:(e,t)=>E((r.baseURL||"")+e,{...r,...t,method:"GET"}),post:(e,t,s)=>E((r.baseURL||"")+e,{...r,...s,data:t,method:"POST"}),put:(e,t,s)=>E((r.baseURL||"")+e,{...r,...s,data:t,method:"PUT"}),delete:(e,t)=>E((r.baseURL||"")+e,{...r,...t,method:"DELETE"}),patch:(e,t,s)=>E((r.baseURL||"")+e,{...r,...s,data:t,method:"PATCH"}),head:(e,t)=>E((r.baseURL||"")+e,{...r,...t,method:"HEAD"}),interceptors:G}),extend:r=>xe.create({baseURL:r.prefixUrl,...r})});var xr=xe;export{w as ProxyError,C as RanuxError,A as TransformHeadersAgent,xr as default,he as getAgents,M as gotScraping,Hr as hooks,xe as ranux};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ranux-fetcher",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Universal Advanced HTTP & Scraping Client with Smart Proxy Pool Rotation, Chrome 151 JA4/Kyber768 Stealth Engine, Zstd Decompression, and 4-Node Cloudflare Edge Fallback. Drop-in replacement for Axios and got-scraping.",
5
5
  "keywords": [
6
6
  "scraping",
@@ -58,4 +58,4 @@
58
58
  "tsup": "^8.5.1",
59
59
  "typescript": "^5.5.0"
60
60
  }
61
- }
61
+ }