UNPKG

@skybloxsystems/ticket-bot

Version:
9 lines (8 loc) 15.3 kB
var ae=Object.defineProperty;var le=(n,e,t)=>e in n?ae(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var ue=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var l=(n,e,t)=>(le(n,typeof e!="symbol"?e+"":e,t),t),Z=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var u=(n,e,t)=>(Z(n,e,"read from private field"),t?t.call(n):e.get(n)),D=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)},f=(n,e,t,s)=>(Z(n,e,"write to private field"),s?s.call(n,t):e.set(n,t),t);var V=ue((Le,me)=>{me.exports={name:"@discordjs/rest",version:"0.1.1-canary.0",description:"The REST API for discord.js",scripts:{test:'echo "Error: run tests from root" && exit 1',build:"tsup && tsc --emitDeclarationOnly"},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-modules.git"},bugs:{url:"https://github.com/discordjs/discord.js-modules/issues"},homepage:"https://github.com/discordjs/discord.js-modules/tree/main/packages/rest",dependencies:{"@discordjs/collection":"^0.3.2","@sapphire/async-queue":"^1.1.9","@sapphire/snowflake":"^3.0.0","discord-api-types":"^0.25.2","form-data":"^4.0.0","node-fetch":"^2.6.5",tslib:"^2.3.1"},devDependencies:{"@types/node-fetch":"^2.5.10"},engines:{node:">=16.0.0"},publishConfig:{access:"public"}}});import{APIVersion as ce}from"discord-api-types/v9";var Q=V(),Y=`DiscordBot (${Q.homepage}, ${Q.version})`,w={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:ce},m;(function(i){i.Debug="restDebug",i.InvalidRequestWarning="invalidRequestWarning",i.RateLimited="rateLimited",i.Request="request",i.Response="response"})(m||(m={}));var ee=["webp","png","jpg","jpeg","gif"],te=["png","json"],B=[16,32,64,128,256,512,1024,2048,4096];var K=class{constructor(e=w.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:te,extension:t})}stickerPackBanner(e,t){return this.makeURL(`/app-assets/710982414301790216/store/${e}`,t)}teamIcon(e,t,s){return this.makeURL(`/team-icons/${e}/${t}`,s)}dynamicMakeURL(e,t,{dynamic:s=!1,...r}={}){return this.makeURL(e,s&&t.startsWith("a_")?{...r,extension:"gif"}:r)}makeURL(e,{allowedExtensions:t=ee,extension:s="png",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&&!B.includes(r))throw new RangeError(`Invalid size provided: ${r} Must be one of: ${B.join(", ")}`);let i=new URL(`${this.base}${e}.${s}`);return r&&i.searchParams.set("size",String(r)),i.toString()}};function de(n){return Reflect.has(n,"_errors")}function ge(n){return typeof Reflect.get(n,"message")=="string"}var $=class extends Error{constructor(e,t,s,r,i,a){super($.getMessage(e));this.rawError=e;this.code=t;this.status=s;this.method=r;this.url=i;l(this,"requestBody");this.requestBody={attachments:a.attachments,json:a.body}}get name(){return`${$.name}[${this.code}]`}static getMessage(e){let t="";return e.errors&&(t=[...this.flattenDiscordError(e.errors)].join(` `)),e.message&&t?`${e.message} ${t}`:e.message||t||"Unknown Error"}static*flattenDiscordError(e,t=""){if(ge(e))return yield`${t.length?`${t}[${e.code}]`:`${e.code}`}: ${e.message}`.trim();for(let[s,r]of Object.entries(e)){let i=s.startsWith("_")?t:t?Number.isNaN(Number(s))?`${t}.${s}`:`${t}[${s}]`:s;if(typeof r=="string")yield r;else if(de(r))for(let a of r._errors)yield*this.flattenDiscordError(a,i);else yield*this.flattenDiscordError(r,i)}}};var W=class extends Error{constructor(e,t,s,r,i,a){super(e);this.name=t;this.status=s;this.method=r;this.url=i;l(this,"requestBody");this.requestBody={attachments:a.attachments,json:a.body}}};var A=class extends Error{constructor({timeToReset:e,limit:t,method:s,hash:r,url:i,route:a,majorParameter:g,global:x}){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=i,this.route=a,this.majorParameter=g,this.global=x}get name(){return`${A.name}[${this.route}]`}};import ie from"@discordjs/collection";import he from"form-data";import{DiscordSnowflake as Re}from"@sapphire/snowflake";import{EventEmitter as fe}from"node:events";import{Agent as be}from"node:https";import{setTimeout as _}from"node:timers/promises";import{AsyncQueue as se}from"@sapphire/async-queue";import pe from"node-fetch";function M(n){return n.headers.get("Content-Type")?.startsWith("application/json")?n.json():n.buffer()}function C(n,e,t){if(n==="/channels/:id"){if(typeof e!="object"||e===null||t!==h.Patch)return!1;let s=e;return["name","topic"].some(r=>Reflect.has(s,r))}return!1}var U=0,N=null,j;(function(t){t[t.Standard=0]="Standard",t[t.Sublimit=1]="Sublimit"})(j||(j={}));var k,d,v,I,H=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);D(this,k,new se);D(this,d,null);D(this,v,null);D(this,I,!1);this.id=`${t}:${s}`}get inactive(){return u(this,k).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(m.Debug,`[REST ${this.id}] ${e}`)}async globalDelayFor(e){await _(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 A(e)}async queueRequest(e,t,s,r){let i=u(this,k),a=0;if(u(this,d)&&C(e.bucketRoute,r.body,s.method)&&(i=u(this,d),a=1),await i.wait(),a===0)if(u(this,d)&&C(e.bucketRoute,r.body,s.method)){i=u(this,d);let g=i.wait();u(this,k).shift(),await g}else u(this,v)&&await u(this,v).promise;try{return await this.runRequest(e,t,s,r)}finally{i.shift(),u(this,I)&&(f(this,I,!1),u(this,d)?.shift()),u(this,d)?.remaining===0&&(u(this,v)?.resolve(),f(this,d,null))}}async runRequest(e,t,s,r,i=0){for(;this.limited;){let c=this.globalLimited,L,p,q;c?(L=this.manager.options.globalRequestsPerSecond,p=this.manager.globalReset+this.manager.options.offset-Date.now(),this.manager.globalDelay||(this.manager.globalDelay=this.globalDelayFor(p)),q=this.manager.globalDelay):(L=this.limit,p=this.timeToReset,q=_(p,void 0,{ref:!1}));let P={timeToReset:p,limit:L,method:s.method??"get",hash:this.hash,url:t,route:e.bucketRoute,majorParameter:this.majorParameter,global:c};this.manager.emit(m.RateLimited,P),await this.onRateLimit(P),c?this.debug(`Global rate limit hit, blocking all requests for ${p}ms`):this.debug(`Waiting ${p}ms for rate limit to pass`),await q}(!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(m.Request)&&this.manager.emit(m.Request,{method:a,path:e.original,route:e.bucketRoute,options:s,data:r,retries:i});let g=new AbortController,x=setTimeout(()=>g.abort(),this.manager.options.timeout).unref(),o;try{o=await pe(t,{...s,signal:g.signal})}catch(c){if(c instanceof Error&&c.name==="AbortError"&&i!==this.manager.options.retries)return this.runRequest(e,t,s,r,++i);throw c}finally{clearTimeout(x)}this.manager.listenerCount(m.Response)&&this.manager.emit(m.Response,{method:a,path:e.original,route:e.bucketRoute,options:s,data:r,retries:i},o.clone());let R=0,E=o.headers.get("X-RateLimit-Limit"),F=o.headers.get("X-RateLimit-Remaining"),z=o.headers.get("X-RateLimit-Reset-After"),T=o.headers.get("X-RateLimit-Bucket"),J=o.headers.get("Retry-After");this.limit=E?Number(E):1/0,this.remaining=F?Number(F):1,this.reset=z?Number(z)*1e3+Date.now()+this.manager.options.offset:Date.now(),J&&(R=Number(J)*1e3+this.manager.options.offset),T&&T!==this.hash&&(this.debug(["Received bucket hash update",` Old Hash : ${this.hash}`,` New Hash : ${T}`].join(` `)),this.manager.hashes.set(`${a}:${e.bucketRoute}`,T));let O=null;if(R>0&&(o.headers.get("X-RateLimit-Global")?(this.manager.globalRemaining=0,this.manager.globalReset=Date.now()+R):this.localLimited||(O=R)),(o.status===401||o.status===403||o.status===429)&&((!N||N<Date.now())&&(N=Date.now()+1e3*60*10,U=0),U++,this.manager.options.invalidRequestWarningInterval>0&&U%this.manager.options.invalidRequestWarningInterval==0&&this.manager.emit(m.InvalidRequestWarning,{count:U,remainingTime:N-Date.now()})),o.ok)return M(o);if(o.status===429){let c=this.globalLimited,L,p;if(c?(L=this.manager.options.globalRequestsPerSecond,p=this.manager.globalReset+this.manager.options.offset-Date.now()):(L=this.limit,p=this.timeToReset),await this.onRateLimit({timeToReset:p,limit:L,method:a,hash:this.hash,url:t,route:e.bucketRoute,majorParameter:this.majorParameter,global:c}),this.debug(["Encountered unexpected 429 rate limit",` Global : ${c.toString()}`,` Method : ${a}`,` URL : ${t}`,` Bucket : ${e.bucketRoute}`,` Major parameter: ${e.majorParameter}`,` Hash : ${this.hash}`,` Limit : ${L}`,` Retry After : ${R}ms`,` Sublimit : ${O?`${O}ms`:"None"}`].join(` `)),O){let q=!u(this,d);q&&(f(this,d,new se),u(this,d).wait(),u(this,k).shift()),u(this,v)?.resolve(),f(this,v,null),await _(O,void 0,{ref:!1});let P,ne=new Promise(oe=>P=oe);f(this,v,{promise:ne,resolve:P}),q&&(await u(this,k).wait(),f(this,I,!0))}return this.runRequest(e,t,s,r,i)}else if(o.status>=500&&o.status<600){if(i!==this.manager.options.retries)return this.runRequest(e,t,s,r,++i);throw new W(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 c=await M(o);throw new $(c,c.code,o.status,a,t,r)}return null}}};k=new WeakMap,d=new WeakMap,v=new WeakMap,I=new WeakMap;var re=null,h;(function(i){i.Delete="delete",i.Get="get",i.Patch="patch",i.Post="post",i.Put="put"})(h||(h={}));var S,G=class extends fe{constructor(e){super();l(this,"globalRemaining");l(this,"globalDelay",null);l(this,"globalReset",-1);l(this,"hashes",new ie);l(this,"handlers",new ie);D(this,S,null);l(this,"options");this.options={...w,...e},this.options.offset=Math.max(0,this.options.offset),this.globalRemaining=this.options.globalRequestsPerSecond}setToken(e){return f(this,S,e),this}async queueRequest(e){let t=G.generateRouteData(e.fullRoute,e.method),s=this.hashes.get(`${e.method}:${t.bucketRoute}`)??`Global(${e.method}:${t.bucketRoute})`,r=this.handlers.get(`${s}:${t.majorParameter}`)??this.createHandler(s,t.majorParameter),{url:i,fetchOptions:a}=this.resolveRequest(e);return r.queueRequest(t,i,a,{body:e.body,attachments:e.attachments})}createHandler(e,t){let s=new H(this,e,t);return this.handlers.set(s.id,s),s}resolveRequest(e){let{options:t}=this;re??=new be({...t.agent,keepAlive:!0});let s="";e.query&&(s=`?${e.query.toString()}`);let r={...this.options.headers,"User-Agent":`${Y} ${t.userAgentAppendix}`.trim()};if(e.auth!==!1){if(!u(this,S))throw new Error("Expected token to be set for this request, but none was present");r.Authorization=`${e.authPrefix??"Bot"} ${u(this,S)}`}e.reason?.length&&(r["X-Audit-Log-Reason"]=encodeURIComponent(e.reason));let i=`${t.api}${e.versioned===!1?"":`/v${t.version}`}${e.fullRoute}${s}`,a,g={};if(e.attachments?.length){let o=new he;for(let[R,E]of e.attachments.entries())o.append(E.key??`files[${R}]`,E.rawBuffer,E.fileName);if(e.body!=null)if(e.appendToFormData)for(let[R,E]of Object.entries(e.body))o.append(R,E);else o.append("payload_json",JSON.stringify(e.body));a=o,g=o.getHeaders()}else e.body!=null&&(a=JSON.stringify(e.body),g={"Content-Type":"application/json"});let x={agent:re,body:a,headers:{...e.headers??{},...g,...r},method:e.method};return{url:i,fetchOptions:x}}static generateRouteData(e,t){let r=/^\/(?:channels|guilds|webhooks)\/(\d{16,19})/.exec(e)?.[1]??"global",i=e.replace(/\d{16,19}/g,":id").replace(/\/reactions\/(.*)/,"/reactions/:reaction"),a="";if(t===h.Delete&&i==="/channels/:id/messages/:id"){let g=/\d{16,19}$/.exec(e)[0],x=Re.deconstruct(g);Date.now()-Number(x.timestamp)>1e3*60*60*24*14&&(a+="/Delete Old Message")}return{majorParameter:r,bucketRoute:i+a,original:e}}},X=G;S=new WeakMap;import{EventEmitter as ye}from"node:events";var ve=class extends ye{constructor(e={}){super();l(this,"cdn");l(this,"requestManager");this.cdn=new K(e.cdn??w.cdn),this.requestManager=new X(e).on(m.Debug,this.emit.bind(this,m.Debug)).on(m.RateLimited,this.emit.bind(this,m.RateLimited)).on(m.InvalidRequestWarning,this.emit.bind(this,m.InvalidRequestWarning)),this.on("newListener",(t,s)=>{(t===m.Request||t===m.Response)&&this.requestManager.on(t,s)}),this.on("removeListener",(t,s)=>{(t===m.Request||t===m.Response)&&this.requestManager.off(t,s)})}setToken(e){return this.requestManager.setToken(e),this}get(e,t={}){return this.request({...t,fullRoute:e,method:h.Get})}delete(e,t={}){return this.request({...t,fullRoute:e,method:h.Delete})}post(e,t={}){return this.request({...t,fullRoute:e,method:h.Post})}put(e,t={}){return this.request({...t,fullRoute:e,method:h.Put})}patch(e,t={}){return this.request({...t,fullRoute:e,method:h.Patch})}request(e){return this.requestManager.queueRequest(e)}};export{ee as ALLOWED_EXTENSIONS,B as ALLOWED_SIZES,te as ALLOWED_STICKER_EXTENSIONS,K as CDN,w as DefaultRestOptions,Y as DefaultUserAgent,$ as DiscordAPIError,W as HTTPError,ve as REST,m as RESTEvents,A as RateLimitError,X as RequestManager,h as RequestMethod}; //# sourceMappingURL=index.mjs.map