New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@discordjs/rest

Package Overview
Dependencies
Maintainers
2
Versions
1252
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@discordjs/rest - npm Package Compare versions

Comparing version 0.3.0-dev.1644106030.d8184f9 to 0.3.0-dev.1644235835.b936103

6

dist/index.js

@@ -1,8 +0,8 @@

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}
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 xe=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),Se=(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)),x=(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=xe((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={};Se(qe,{ALLOWED_EXTENSIONS:()=>X,ALLOWED_SIZES:()=>M,ALLOWED_STICKER_EXTENSIONS:()=>z,CDN:()=>T,DefaultRestOptions:()=>S,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})`,S={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=S.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}`,{extension:"png"})}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}
Must be one of: ${t.join(", ")}`);if(r&&!M.includes(r))throw new RangeError(`Invalid size provided: ${r}
Must be one of: ${M.join(", ")}`);let n=new URL(`${this.base}${e}.${s}`);return r&&n.searchParams.set("size",String(r)),n.toString()}};c(T,"CDN");function Ie(i){return Reflect.has(i,"_errors")}c(Ie,"isErrorGroupWrapper");function $e(i){return typeof Reflect.get(i,"message")=="string"}c($e,"isErrorResponse");var w=class extends Error{constructor(e,t,s,r,n,a){super(w.getMessage(e));this.rawError=e;this.code=t;this.status=s;this.method=r;this.url=n;l(this,"requestBody");this.requestBody={files:a.files,json:a.body}}get name(){return`${w.name}[${this.code}]`}static getMessage(e){let t="";return"code"in e?(e.errors&&(t=[...this.flattenDiscordError(e.errors)].join(`
`)),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!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(`
${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);x(this,E,new Z.AsyncQueue);x(this,d,null);x(this,b,null);x(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});
`)),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);x(this,q,null);l(this,"hashTimer");l(this,"handlerTimer");l(this,"agent",null);l(this,"options");this.options={...S,...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??S.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.1644106030.d8184f9",
"version": "0.3.0-dev.1644235835.b936103",
"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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc