@discordjs/rest
Advanced tools
Comparing version 0.3.0-dev.1644067354.5f4b44d to 0.3.0-dev.1644106030.d8184f9
@@ -5,5 +5,5 @@ var be=Object.create;var I=Object.defineProperty;var ye=Object.getOwnPropertyDescriptor;var ve=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty;var Le=(i,e,t)=>e in i?I(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var ie=i=>I(i,"__esModule",{value:!0}),c=(i,e)=>I(i,"name",{value:e,configurable:!0});var Se=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),xe=(i,e)=>{for(var t in e)I(i,t,{get:e[t],enumerable:!0})},re=(i,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ve(e))!Ee.call(i,r)&&(t||r!=="default")&&I(i,r,{get:()=>e[r],enumerable:!(s=ye(e,r))||s.enumerable});return i},F=(i,e)=>re(ie(I(i!=null?be(we(i)):{},"default",!e&&i&&i.__esModule?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i),De=(i=>(e,t)=>i&&i.get(e)||(t=re(ie({}),e,1),i&&i.set(e,t),t))(typeof WeakMap!="undefined"?new WeakMap:0);var l=(i,e,t)=>(Le(i,typeof e!="symbol"?e+"":e,t),t),ne=(i,e,t)=>{if(!e.has(i))throw TypeError("Cannot "+t)};var u=(i,e,t)=>(ne(i,e,"read from private field"),t?t.call(i):e.get(i)),S=(i,e,t)=>{if(e.has(i))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(i):e.set(i,t)},f=(i,e,t,s)=>(ne(i,e,"write to private field"),s?s.call(i,t):e.set(i,t),t);var ae=Se((Ae,ke)=>{ke.exports={name:"@discordjs/rest",version:"0.3.0-dev",description:"The REST API for discord.js",scripts:{build:"tsup && tsc --emitDeclarationOnly --incremental",test:"jest --pass-with-no-tests --collect-coverage",lint:"prettier --check . && eslint src __tests__ --ext mjs,js,ts",format:"prettier --write . && eslint src __tests__ --ext mjs,js,ts --fix",docs:"typedoc --json docs/typedoc-out.json src/index.ts && node scripts/docs.mjs",prepublishOnly:"yarn build && yarn lint && yarn test",changelog:"git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/rest/*'"},main:"./dist/index.js",module:"./dist/index.mjs",typings:"./dist/index.d.ts",exports:{import:"./dist/index.mjs",require:"./dist/index.js"},directories:{lib:"src",test:"__tests__"},files:["dist"],contributors:["Crawl <icrawltogo@gmail.com>","Amish Shah <amishshah.2k@gmail.com>","SpaceEEC <spaceeec@yahoo.com>","Vlad Frangu <kingdgrizzle@gmail.com>","Antonio Roman <kyradiscord@gmail.com>"],license:"Apache-2.0",keywords:["discord","api","rest","discordapp","discordjs"],repository:{type:"git",url:"git+https://github.com/discordjs/discord.js.git"},bugs:{url:"https://github.com/discordjs/discord.js/issues"},homepage:"https://discord.js.org",dependencies:{"@discordjs/collection":"workspace:^","@sapphire/async-queue":"^1.2.0","@sapphire/snowflake":"^3.1.0","@types/node-fetch":"^2.5.12","discord-api-types":"^0.26.1","form-data":"^4.0.0","node-fetch":"^2.6.7",tslib:"^2.3.1"},devDependencies:{"@babel/core":"^7.17.0","@babel/plugin-proposal-decorators":"^7.17.0","@babel/preset-env":"^7.16.11","@babel/preset-typescript":"^7.16.7","@discordjs/ts-docgen":"^0.3.4","@types/jest":"^27.4.0","@typescript-eslint/eslint-plugin":"^5.10.2","@typescript-eslint/parser":"^5.10.2","babel-plugin-const-enum":"^1.2.0","babel-plugin-transform-typescript-metadata":"^0.3.2",eslint:"^8.8.0","eslint-config-marine":"^9.3.2","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0",jest:"^27.4.7",nock:"^13.2.4",prettier:"^2.5.1",tsup:"^5.11.13",typedoc:"^0.22.11",typescript:"^4.5.5"},engines:{node:">=16.9.0"},publishConfig:{access:"public"}}});var qe={};xe(qe,{ALLOWED_EXTENSIONS:()=>X,ALLOWED_SIZES:()=>M,ALLOWED_STICKER_EXTENSIONS:()=>z,CDN:()=>T,DefaultRestOptions:()=>x,DefaultUserAgent:()=>G,DiscordAPIError:()=>w,HTTPError:()=>U,REST:()=>Y,RESTEvents:()=>P,RateLimitError:()=>D,RequestManager:()=>B,RequestMethod:()=>N});var oe=require("discord-api-types/v9"),le=ae(),G=`DiscordBot (${le.homepage}, ${le.version})`,x={agent:{},api:"https://discord.com/api",cdn:"https://cdn.discordapp.com",headers:{},invalidRequestWarningInterval:0,globalRequestsPerSecond:50,offset:50,rejectOnRateLimit:null,retries:3,timeout:15e3,userAgentAppendix:`Node.js ${process.version}`,version:oe.APIVersion,hashSweepInterval:144e5,hashLifetime:864e5,handlerSweepInterval:36e5},P=(m=>(m.Debug="restDebug",m.InvalidRequestWarning="invalidRequestWarning",m.RateLimited="rateLimited",m.Request="request",m.Response="response",m.HashSweep="hashSweep",m.HandlerSweep="handlerSweep",m))(P||{}),X=["webp","png","jpg","jpeg","gif"],z=["png","json"],M=[16,32,64,128,256,512,1024,2048,4096];var T=class{constructor(e=x.cdn){this.base=e}appAsset(e,t,s){return this.makeURL(`/app-assets/${e}/${t}`,s)}appIcon(e,t,s){return this.makeURL(`/app-icons/${e}/${t}`,s)}avatar(e,t,s){return this.dynamicMakeURL(`/avatars/${e}/${t}`,t,s)}banner(e,t,s){return this.dynamicMakeURL(`/banners/${e}/${t}`,t,s)}channelIcon(e,t,s){return this.makeURL(`/channel-icons/${e}/${t}`,s)}defaultAvatar(e){return this.makeURL(`/embed/avatars/${e}`)}discoverySplash(e,t,s){return this.makeURL(`/discovery-splashes/${e}/${t}`,s)}emoji(e,t){return this.makeURL(`/emojis/${e}`,{extension:t})}guildMemberAvatar(e,t,s,r){return this.dynamicMakeURL(`/guilds/${e}/users/${t}/avatars/${s}`,s,r)}icon(e,t,s){return this.dynamicMakeURL(`/icons/${e}/${t}`,t,s)}roleIcon(e,t,s){return this.makeURL(`/role-icons/${e}/${t}`,s)}splash(e,t,s){return this.makeURL(`/splashes/${e}/${t}`,s)}sticker(e,t){return this.makeURL(`/stickers/${e}`,{allowedExtensions:z,extension:t??"png"})}stickerPackBanner(e,t){return this.makeURL(`/app-assets/710982414301790216/store/${e}`,t)}teamIcon(e,t,s){return this.makeURL(`/team-icons/${e}/${t}`,s)}guildScheduledEventCover(e,t,s){return this.makeURL(`/guild-events/${e}/${t}`,s)}dynamicMakeURL(e,t,{forceStatic:s=!1,...r}={}){return this.makeURL(e,!s&&t.startsWith("a_")?{...r,extension:"gif"}:r)}makeURL(e,{allowedExtensions:t=X,extension:s="webp",size:r}={}){if(s=String(s).toLowerCase(),!t.includes(s))throw new RangeError(`Invalid extension provided: ${s} | ||
`)),e.message&&t?`${e.message} | ||
${t}`:e.message||t||"Unknown Error"):e.error_description??"No Description"}static*flattenDiscordError(e,t=""){if($e(e))return yield`${t.length?`${t}[${e.code}]`:`${e.code}`}: ${e.message}`.trim();for(let[s,r]of Object.entries(e)){let n=s.startsWith("_")?t:t?Number.isNaN(Number(s))?`${t}.${s}`:`${t}[${s}]`:s;if(typeof r=="string")yield r;else if(Ie(r))for(let a of r._errors)yield*this.flattenDiscordError(a,n);else yield*this.flattenDiscordError(r,n)}}};c(w,"DiscordAPIError");var U=class extends Error{constructor(e,t,s,r,n,a){super(e);this.name=t;this.status=s;this.method=r;this.url=n;l(this,"requestBody");this.requestBody={files:a.files,json:a.body}}};c(U,"HTTPError");var D=class extends Error{constructor({timeToReset:e,limit:t,method:s,hash:r,url:n,route:a,majorParameter:m,global:L}){super();l(this,"timeToReset");l(this,"limit");l(this,"method");l(this,"hash");l(this,"url");l(this,"route");l(this,"majorParameter");l(this,"global");this.timeToReset=e,this.limit=t,this.method=s,this.hash=r,this.url=n,this.route=a,this.majorParameter=m,this.global=L}get name(){return`${D.name}[${this.route}]`}};c(D,"RateLimitError");var _=F(require("@discordjs/collection")),me=F(require("form-data")),pe=require("@sapphire/snowflake"),ce=require("events"),de=require("https"),he=require("http");var H=require("timers/promises"),Z=require("@sapphire/async-queue"),ue=F(require("node-fetch"));function J(i){return i.headers.get("Content-Type")?.startsWith("application/json")?i.json():i.buffer()}c(J,"parseResponse");function Q(i,e,t){if(i==="/channels/:id"){if(typeof e!="object"||e===null||t!=="patch")return!1;let s=e;return["name","topic"].some(r=>Reflect.has(s,r))}return!1}c(Q,"hasSublimit");var K=0,W=null;var E,d,b,$,C=class{constructor(e,t,s){this.manager=e;this.hash=t;this.majorParameter=s;l(this,"id");l(this,"reset",-1);l(this,"remaining",1);l(this,"limit",1/0);S(this,E,new Z.AsyncQueue);S(this,d,null);S(this,b,null);S(this,$,!1);this.id=`${t}:${s}`}get inactive(){return u(this,E).remaining===0&&(u(this,d)===null||u(this,d).remaining===0)&&!this.limited}get globalLimited(){return this.manager.globalRemaining<=0&&Date.now()<this.manager.globalReset}get localLimited(){return this.remaining<=0&&Date.now()<this.reset}get limited(){return this.globalLimited||this.localLimited}get timeToReset(){return this.reset+this.manager.options.offset-Date.now()}debug(e){this.manager.emit("restDebug",`[REST ${this.id}] ${e}`)}async globalDelayFor(e){await(0,H.setTimeout)(e,void 0,{ref:!1}),this.manager.globalDelay=null}async onRateLimit(e){let{options:t}=this.manager;if(!t.rejectOnRateLimit)return;if(typeof t.rejectOnRateLimit=="function"?await t.rejectOnRateLimit(e):t.rejectOnRateLimit.some(r=>e.route.startsWith(r.toLowerCase())))throw new D(e)}async queueRequest(e,t,s,r){let n=u(this,E),a=0;if(u(this,d)&&Q(e.bucketRoute,r.body,s.method)&&(n=u(this,d),a=1),await n.wait(),a===0)if(u(this,d)&&Q(e.bucketRoute,r.body,s.method)){n=u(this,d);let m=n.wait();u(this,E).shift(),await m}else u(this,b)&&await u(this,b).promise;try{return await this.runRequest(e,t,s,r)}finally{n.shift(),u(this,$)&&(f(this,$,!1),u(this,d)?.shift()),u(this,d)?.remaining===0&&(u(this,b)?.resolve(),f(this,d,null))}}async runRequest(e,t,s,r,n=0){for(;this.limited;){let p=this.globalLimited,v,h,k;p?(v=this.manager.options.globalRequestsPerSecond,h=this.manager.globalReset+this.manager.options.offset-Date.now(),this.manager.globalDelay||(this.manager.globalDelay=this.globalDelayFor(h)),k=this.manager.globalDelay):(v=this.limit,h=this.timeToReset,k=(0,H.setTimeout)(h));let j={timeToReset:h,limit:v,method:s.method??"get",hash:this.hash,url:t,route:e.bucketRoute,majorParameter:this.majorParameter,global:p};this.manager.emit("rateLimited",j),await this.onRateLimit(j),p?this.debug(`Global rate limit hit, blocking all requests for ${h}ms`):this.debug(`Waiting ${h}ms for rate limit to pass`),await k}(!this.manager.globalReset||this.manager.globalReset<Date.now())&&(this.manager.globalReset=Date.now()+1e3,this.manager.globalRemaining=this.manager.options.globalRequestsPerSecond),this.manager.globalRemaining--;let a=s.method??"get";this.manager.listenerCount("request")&&this.manager.emit("request",{method:a,path:e.original,route:e.bucketRoute,options:s,data:r,retries:n});let m=new AbortController,L=setTimeout(()=>m.abort(),this.manager.options.timeout).unref(),o;try{o=await(0,ue.default)(t,{...s,signal:m.signal})}catch(p){if(p instanceof Error&&p.name==="AbortError"&&n!==this.manager.options.retries)return await this.runRequest(e,t,s,r,++n);throw p}finally{clearTimeout(L)}this.manager.listenerCount("response")&&this.manager.emit("response",{method:a,path:e.original,route:e.bucketRoute,options:s,data:r,retries:n},o.clone());let g=0,y=o.headers.get("X-RateLimit-Limit"),ee=o.headers.get("X-RateLimit-Remaining"),te=o.headers.get("X-RateLimit-Reset-After"),O=o.headers.get("X-RateLimit-Bucket"),se=o.headers.get("Retry-After");if(this.limit=y?Number(y):1/0,this.remaining=ee?Number(ee):1,this.reset=te?Number(te)*1e3+Date.now()+this.manager.options.offset:Date.now(),se&&(g=Number(se)*1e3+this.manager.options.offset),O&&O!==this.hash)this.debug(["Received bucket hash update",` Old Hash : ${this.hash}`,` New Hash : ${O}`].join(` | ||
${t}`:e.message||t||"Unknown Error"):e.error_description??"No Description"}static*flattenDiscordError(e,t=""){if($e(e))return yield`${t.length?`${t}[${e.code}]`:`${e.code}`}: ${e.message}`.trim();for(let[s,r]of Object.entries(e)){let n=s.startsWith("_")?t:t?Number.isNaN(Number(s))?`${t}.${s}`:`${t}[${s}]`:s;if(typeof r=="string")yield r;else if(Ie(r))for(let a of r._errors)yield*this.flattenDiscordError(a,n);else yield*this.flattenDiscordError(r,n)}}};c(w,"DiscordAPIError");var U=class extends Error{constructor(e,t,s,r,n,a){super(e);this.name=t;this.status=s;this.method=r;this.url=n;l(this,"requestBody");this.requestBody={files:a.files,json:a.body}}};c(U,"HTTPError");var D=class extends Error{constructor({timeToReset:e,limit:t,method:s,hash:r,url:n,route:a,majorParameter:m,global:L}){super();l(this,"timeToReset");l(this,"limit");l(this,"method");l(this,"hash");l(this,"url");l(this,"route");l(this,"majorParameter");l(this,"global");this.timeToReset=e,this.limit=t,this.method=s,this.hash=r,this.url=n,this.route=a,this.majorParameter=m,this.global=L}get name(){return`${D.name}[${this.route}]`}};c(D,"RateLimitError");var _=F(require("@discordjs/collection")),me=F(require("form-data")),pe=require("@sapphire/snowflake"),ce=require("events"),de=require("https"),he=require("http");var H=require("timers/promises"),Z=require("@sapphire/async-queue"),ue=F(require("node-fetch"));function J(i){return i.headers.get("Content-Type")?.startsWith("application/json")?i.json():i.buffer()}c(J,"parseResponse");function Q(i,e,t){if(i==="/channels/:id"){if(typeof e!="object"||e===null||t!=="patch")return!1;let s=e;return["name","topic"].some(r=>Reflect.has(s,r))}return!0}c(Q,"hasSublimit");var K=0,W=null;var E,d,b,$,C=class{constructor(e,t,s){this.manager=e;this.hash=t;this.majorParameter=s;l(this,"id");l(this,"reset",-1);l(this,"remaining",1);l(this,"limit",1/0);S(this,E,new Z.AsyncQueue);S(this,d,null);S(this,b,null);S(this,$,!1);this.id=`${t}:${s}`}get inactive(){return u(this,E).remaining===0&&(u(this,d)===null||u(this,d).remaining===0)&&!this.limited}get globalLimited(){return this.manager.globalRemaining<=0&&Date.now()<this.manager.globalReset}get localLimited(){return this.remaining<=0&&Date.now()<this.reset}get limited(){return this.globalLimited||this.localLimited}get timeToReset(){return this.reset+this.manager.options.offset-Date.now()}debug(e){this.manager.emit("restDebug",`[REST ${this.id}] ${e}`)}async globalDelayFor(e){await(0,H.setTimeout)(e,void 0,{ref:!1}),this.manager.globalDelay=null}async onRateLimit(e){let{options:t}=this.manager;if(!t.rejectOnRateLimit)return;if(typeof t.rejectOnRateLimit=="function"?await t.rejectOnRateLimit(e):t.rejectOnRateLimit.some(r=>e.route.startsWith(r.toLowerCase())))throw new D(e)}async queueRequest(e,t,s,r){let n=u(this,E),a=0;if(u(this,d)&&Q(e.bucketRoute,r.body,s.method)&&(n=u(this,d),a=1),await n.wait(),a===0)if(u(this,d)&&Q(e.bucketRoute,r.body,s.method)){n=u(this,d);let m=n.wait();u(this,E).shift(),await m}else u(this,b)&&await u(this,b).promise;try{return await this.runRequest(e,t,s,r)}finally{n.shift(),u(this,$)&&(f(this,$,!1),u(this,d)?.shift()),u(this,d)?.remaining===0&&(u(this,b)?.resolve(),f(this,d,null))}}async runRequest(e,t,s,r,n=0){for(;this.limited;){let p=this.globalLimited,v,h,k;p?(v=this.manager.options.globalRequestsPerSecond,h=this.manager.globalReset+this.manager.options.offset-Date.now(),this.manager.globalDelay||(this.manager.globalDelay=this.globalDelayFor(h)),k=this.manager.globalDelay):(v=this.limit,h=this.timeToReset,k=(0,H.setTimeout)(h));let j={timeToReset:h,limit:v,method:s.method??"get",hash:this.hash,url:t,route:e.bucketRoute,majorParameter:this.majorParameter,global:p};this.manager.emit("rateLimited",j),await this.onRateLimit(j),p?this.debug(`Global rate limit hit, blocking all requests for ${h}ms`):this.debug(`Waiting ${h}ms for rate limit to pass`),await k}(!this.manager.globalReset||this.manager.globalReset<Date.now())&&(this.manager.globalReset=Date.now()+1e3,this.manager.globalRemaining=this.manager.options.globalRequestsPerSecond),this.manager.globalRemaining--;let a=s.method??"get";this.manager.listenerCount("request")&&this.manager.emit("request",{method:a,path:e.original,route:e.bucketRoute,options:s,data:r,retries:n});let m=new AbortController,L=setTimeout(()=>m.abort(),this.manager.options.timeout).unref(),o;try{o=await(0,ue.default)(t,{...s,signal:m.signal})}catch(p){if(p instanceof Error&&p.name==="AbortError"&&n!==this.manager.options.retries)return await this.runRequest(e,t,s,r,++n);throw p}finally{clearTimeout(L)}this.manager.listenerCount("response")&&this.manager.emit("response",{method:a,path:e.original,route:e.bucketRoute,options:s,data:r,retries:n},o.clone());let g=0,y=o.headers.get("X-RateLimit-Limit"),ee=o.headers.get("X-RateLimit-Remaining"),te=o.headers.get("X-RateLimit-Reset-After"),O=o.headers.get("X-RateLimit-Bucket"),se=o.headers.get("Retry-After");if(this.limit=y?Number(y):1/0,this.remaining=ee?Number(ee):1,this.reset=te?Number(te)*1e3+Date.now()+this.manager.options.offset:Date.now(),se&&(g=Number(se)*1e3+this.manager.options.offset),O&&O!==this.hash)this.debug(["Received bucket hash update",` Old Hash : ${this.hash}`,` New Hash : ${O}`].join(` | ||
`)),this.manager.hashes.set(`${a}:${e.bucketRoute}`,{value:O,lastAccess:Date.now()});else if(O){let p=this.manager.hashes.get(`${a}:${e.bucketRoute}`);p&&(p.lastAccess=Date.now())}let A=null;if(g>0&&(o.headers.get("X-RateLimit-Global")?(this.manager.globalRemaining=0,this.manager.globalReset=Date.now()+g):this.localLimited||(A=g)),(o.status===401||o.status===403||o.status===429)&&((!W||W<Date.now())&&(W=Date.now()+1e3*60*10,K=0),K++,this.manager.options.invalidRequestWarningInterval>0&&K%this.manager.options.invalidRequestWarningInterval===0&&this.manager.emit("invalidRequestWarning",{count:K,remainingTime:W-Date.now()})),o.ok)return J(o);if(o.status===429){let p=this.globalLimited,v,h;if(p?(v=this.manager.options.globalRequestsPerSecond,h=this.manager.globalReset+this.manager.options.offset-Date.now()):(v=this.limit,h=this.timeToReset),await this.onRateLimit({timeToReset:h,limit:v,method:a,hash:this.hash,url:t,route:e.bucketRoute,majorParameter:this.majorParameter,global:p}),this.debug(["Encountered unexpected 429 rate limit",` Global : ${p.toString()}`,` Method : ${a}`,` URL : ${t}`,` Bucket : ${e.bucketRoute}`,` Major parameter: ${e.majorParameter}`,` Hash : ${this.hash}`,` Limit : ${v}`,` Retry After : ${g}ms`,` Sublimit : ${A?`${A}ms`:"None"}`].join(` | ||
`)),A){let k=!u(this,d);k&&(f(this,d,new Z.AsyncQueue),u(this,d).wait(),u(this,E).shift()),u(this,b)?.resolve(),f(this,b,null),await(0,H.setTimeout)(A,void 0,{ref:!1});let j,fe=new Promise(Re=>j=Re);f(this,b,{promise:fe,resolve:j}),k&&(await u(this,E).wait(),f(this,$,!0))}return this.runRequest(e,t,s,r,n)}else if(o.status>=500&&o.status<600){if(n!==this.manager.options.retries)return this.runRequest(e,t,s,r,++n);throw new U(o.statusText,o.constructor.name,o.status,a,t,r)}else{if(o.status>=400&&o.status<500){o.status===401&&this.manager.setToken(null);let p=await J(o);throw new w(p,"code"in p?p.code:p.error,o.status,a,t,r)}return null}}};c(C,"SequentialHandler"),E=new WeakMap,d=new WeakMap,b=new WeakMap,$=new WeakMap;var N=(n=>(n.Delete="delete",n.Get="get",n.Patch="patch",n.Post="post",n.Put="put",n))(N||{}),q,V=class extends ce.EventEmitter{constructor(e){super();l(this,"globalRemaining");l(this,"globalDelay",null);l(this,"globalReset",-1);l(this,"hashes",new _.default);l(this,"handlers",new _.default);S(this,q,null);l(this,"hashTimer");l(this,"handlerTimer");l(this,"agent",null);l(this,"options");this.options={...x,...e},this.options.offset=Math.max(0,this.options.offset),this.globalRemaining=this.options.globalRequestsPerSecond,this.setupSweepers()}setupSweepers(){let e=c(t=>{if(t>144e5)throw new Error("Cannot set an interval greater than 4 hours")},"validateMaxInterval");this.options.hashSweepInterval!==0&&this.options.hashSweepInterval!==1/0&&(e(this.options.hashSweepInterval),this.hashTimer=setInterval(()=>{let t=new _.default,s=Date.now();this.hashes.sweep((r,n)=>{if(r.lastAccess===-1)return!1;let a=Math.floor(s-r.lastAccess)>this.options.hashLifetime;return a&&t.set(n,r),this.emit("restDebug",`Hash ${r.value} for ${n} swept due to lifetime being exceeded`),a}),this.emit("hashSweep",t)},this.options.hashSweepInterval).unref()),this.options.handlerSweepInterval!==0&&this.options.handlerSweepInterval!==1/0&&(e(this.options.handlerSweepInterval),this.handlerTimer=setInterval(()=>{let t=new _.default;this.handlers.sweep((s,r)=>{let{inactive:n}=s;return n&&t.set(r,s),this.emit("restDebug",`Handler ${s.id} for ${r} swept due to being inactive`),n}),this.emit("handlerSweep",t)},this.options.handlerSweepInterval).unref())}setToken(e){return f(this,q,e),this}async queueRequest(e){let t=V.generateRouteData(e.fullRoute,e.method),s=this.hashes.get(`${e.method}:${t.bucketRoute}`)??{value:`Global(${e.method}:${t.bucketRoute})`,lastAccess:-1},r=this.handlers.get(`${s.value}:${t.majorParameter}`)??this.createHandler(s.value,t.majorParameter),{url:n,fetchOptions:a}=this.resolveRequest(e);return r.queueRequest(t,n,a,{body:e.body,files:e.files})}createHandler(e,t){let s=new C(this,e,t);return this.handlers.set(s.id,s),s}resolveRequest(e){let{options:t}=this;this.agent??=t.api.startsWith("https")?new de.Agent({...t.agent,keepAlive:!0}):new he.Agent({...t.agent,keepAlive:!0});let s="";if(e.query){let o=e.query.toString();o!==""&&(s=`?${o}`)}let r={...this.options.headers,"User-Agent":`${G} ${t.userAgentAppendix}`.trim()};if(e.auth!==!1){if(!u(this,q))throw new Error("Expected token to be set for this request, but none was present");r.Authorization=`${e.authPrefix??"Bot"} ${u(this,q)}`}e.reason?.length&&(r["X-Audit-Log-Reason"]=encodeURIComponent(e.reason));let n=`${t.api}${e.versioned===!1?"":`/v${t.version}`}${e.fullRoute}${s}`,a,m={};if(e.files?.length){let o=new me.default;for(let[g,y]of e.files.entries())o.append(y.key??`files[${g}]`,y.data,y.name);if(e.body!=null)if(e.appendToFormData)for(let[g,y]of Object.entries(e.body))o.append(g,y);else o.append("payload_json",JSON.stringify(e.body));a=o,m=o.getHeaders()}else e.body!=null&&(e.passThroughBody?a=e.body:(a=JSON.stringify(e.body),m={"Content-Type":"application/json"}));let L={agent:this.agent,body:a,headers:{...e.headers??{},...m,...r},method:e.method};return{url:n,fetchOptions:L}}clearHashSweeper(){clearInterval(this.hashTimer)}clearHandlerSweeper(){clearInterval(this.handlerTimer)}static generateRouteData(e,t){let r=/^\/(?:channels|guilds|webhooks)\/(\d{16,19})/.exec(e)?.[1]??"global",n=e.replace(/\d{16,19}/g,":id").replace(/\/reactions\/(.*)/,"/reactions/:reaction"),a="";if(t==="delete"&&n==="/channels/:id/messages/:id"){let m=/\d{16,19}$/.exec(e)[0],L=pe.DiscordSnowflake.deconstruct(m);Date.now()-Number(L.timestamp)>1e3*60*60*24*14&&(a+="/Delete Old Message")}return{majorParameter:r,bucketRoute:n+a,original:e}}},B=V;c(B,"RequestManager"),q=new WeakMap;var ge=require("events");var Y=class extends ge.EventEmitter{constructor(e={}){super();l(this,"cdn");l(this,"requestManager");this.cdn=new T(e.cdn??x.cdn),this.requestManager=new B(e).on("restDebug",this.emit.bind(this,"restDebug")).on("rateLimited",this.emit.bind(this,"rateLimited")).on("invalidRequestWarning",this.emit.bind(this,"invalidRequestWarning")).on("hashSweep",this.emit.bind(this,"hashSweep")),this.on("newListener",(t,s)=>{(t==="request"||t==="response")&&this.requestManager.on(t,s)}),this.on("removeListener",(t,s)=>{(t==="request"||t==="response")&&this.requestManager.off(t,s)})}setToken(e){return this.requestManager.setToken(e),this}get(e,t={}){return this.request({...t,fullRoute:e,method:"get"})}delete(e,t={}){return this.request({...t,fullRoute:e,method:"delete"})}post(e,t={}){return this.request({...t,fullRoute:e,method:"post"})}put(e,t={}){return this.request({...t,fullRoute:e,method:"put"})}patch(e,t={}){return this.request({...t,fullRoute:e,method:"patch"})}request(e){return this.requestManager.queueRequest(e)}};c(Y,"REST");module.exports=De(qe);0&&(module.exports={ALLOWED_EXTENSIONS,ALLOWED_SIZES,ALLOWED_STICKER_EXTENSIONS,CDN,DefaultRestOptions,DefaultUserAgent,DiscordAPIError,HTTPError,REST,RESTEvents,RateLimitError,RequestManager,RequestMethod}); | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@discordjs/rest", | ||
"version": "0.3.0-dev.1644067354.5f4b44d", | ||
"version": "0.3.0-dev.1644106030.d8184f9", | ||
"description": "The REST API for discord.js", | ||
@@ -5,0 +5,0 @@ "scripts": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
235875