snowtransfer 0.17.1 → 0.17.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -201,7 +201,7 @@ declare class IntervalCounter implements Counter {
201
201
  remaining: number;
202
202
  private firstRequestTime;
203
203
  private resetAt;
204
- id: string;
204
+ readonly id: string;
205
205
  /**
206
206
  * Create a new base bucket
207
207
  * @param limit Number of functions that may be executed during the timeframe set in reset
@@ -226,7 +226,7 @@ declare class LeakyCounter implements Counter {
226
226
  */
227
227
  remaining: number;
228
228
  private resetAt;
229
- id: string;
229
+ readonly id: string;
230
230
  /**
231
231
  * Create a new base bucket
232
232
  * @param limit Number of functions that may be executed until some are reset
@@ -246,11 +246,11 @@ declare class LeakyCounter implements Counter {
246
246
  */
247
247
  declare class Bucket {
248
248
  /** Tracks the state this bucket is in (blocked, running, waiting, etc) and what operations are allowed. */
249
- sm: StateMachine;
249
+ readonly sm: StateMachine;
250
250
  /** Wrapped functions which always resolve (not reject) after the original function has completed and resolved. The original function may manipulate rate limit buckets in that time before it resolves. */
251
- calls: Array<() => any>;
251
+ readonly calls: Array<() => any>;
252
252
  /** The backing counters of the bucket that determine how many functions can be consumed in a timeframe. */
253
- counters: Array<Counter>;
253
+ readonly counters: Array<Counter>;
254
254
  private pauseRequested;
255
255
  /**
256
256
  * Create a new bucket
@@ -288,11 +288,11 @@ declare class Ratelimiter {
288
288
  /**
289
289
  * A Map of Buckets keyed by route keys that store rate limit info
290
290
  */
291
- buckets: Map<string, Bucket>;
291
+ readonly buckets: Map<string, Bucket>;
292
292
  /**
293
293
  * The bucket that limits how many requests per second you can make globally
294
294
  */
295
- globalBucket: Bucket;
295
+ readonly globalBucket: Bucket;
296
296
  /**
297
297
  * If you're being globally rate limited
298
298
  */
@@ -409,7 +409,7 @@ declare class RequestHandler extends EventEmitter$1<HandlerEvents> {
409
409
  * @protected
410
410
  */
411
411
  declare class AuditLogMethods {
412
- requestHandler: RequestHandler;
412
+ readonly requestHandler: RequestHandler;
413
413
  /**
414
414
  * Create a new Audit Log Method Handler
415
415
  *
@@ -448,7 +448,7 @@ declare class AuditLogMethods {
448
448
  * @protected
449
449
  */
450
450
  declare class AutoModerationMethods {
451
- requestHandler: RequestHandler;
451
+ readonly requestHandler: RequestHandler;
452
452
  /**
453
453
  * Create a new Auto Moderation Method Handler
454
454
  *
@@ -569,7 +569,7 @@ declare class AutoModerationMethods {
569
569
  * @protected
570
570
  */
571
571
  declare class BotMethods {
572
- requestHandler: RequestHandler;
572
+ readonly requestHandler: RequestHandler;
573
573
  /**
574
574
  * Create a new Bot Method Handler
575
575
  *
@@ -633,7 +633,7 @@ declare class BotMethods {
633
633
  * @protected
634
634
  */
635
635
  declare class AssetsMethods {
636
- requestHandler: RequestHandler;
636
+ readonly requestHandler: RequestHandler;
637
637
  /**
638
638
  * Create a new Assets Method handler
639
639
  *
@@ -921,7 +921,7 @@ declare class AssetsMethods {
921
921
  * @protected
922
922
  */
923
923
  declare class EntitlementMethods {
924
- requestHandler: RequestHandler;
924
+ readonly requestHandler: RequestHandler;
925
925
  /**
926
926
  * Create a new Entitement Method handler
927
927
  *
@@ -1007,7 +1007,7 @@ declare class EntitlementMethods {
1007
1007
  * @protected
1008
1008
  */
1009
1009
  declare class GuildMethods {
1010
- requestHandler: RequestHandler;
1010
+ readonly requestHandler: RequestHandler;
1011
1011
  /**
1012
1012
  * Create a new Guild Method Handler
1013
1013
  *
@@ -1711,7 +1711,7 @@ declare class GuildMethods {
1711
1711
  * @protected
1712
1712
  */
1713
1713
  declare class GuildScheduledEventMethods {
1714
- requestHandler: RequestHandler;
1714
+ readonly requestHandler: RequestHandler;
1715
1715
  /**
1716
1716
  * Create a new Guild Scheduled Event Method Handler
1717
1717
  *
@@ -1848,7 +1848,7 @@ declare class GuildScheduledEventMethods {
1848
1848
  * @protected
1849
1849
  */
1850
1850
  declare class GuildTemplateMethods {
1851
- requestHandler: RequestHandler;
1851
+ readonly requestHandler: RequestHandler;
1852
1852
  /**
1853
1853
  * Create a new Guild Template Method Handler
1854
1854
  *
@@ -1957,7 +1957,7 @@ declare class GuildTemplateMethods {
1957
1957
  * @protected
1958
1958
  */
1959
1959
  declare class WebhookMethods {
1960
- requestHandler: RequestHandler;
1960
+ readonly requestHandler: RequestHandler;
1961
1961
  options: SnowTransfer.Options;
1962
1962
  /**
1963
1963
  * Create a new Method Handler
@@ -2222,8 +2222,8 @@ declare class WebhookMethods {
2222
2222
  * @protected
2223
2223
  */
2224
2224
  declare class InteractionMethods {
2225
- requestHandler: RequestHandler;
2226
- webhooks: WebhookMethods;
2225
+ readonly requestHandler: RequestHandler;
2226
+ readonly webhooks: WebhookMethods;
2227
2227
  options: SnowTransfer.Options;
2228
2228
  /**
2229
2229
  * Create a new Interaction Method Handler
@@ -2558,7 +2558,7 @@ declare class InteractionMethods {
2558
2558
  * @protected
2559
2559
  */
2560
2560
  declare class InviteMethods {
2561
- requestHandler: RequestHandler;
2561
+ readonly requestHandler: RequestHandler;
2562
2562
  /**
2563
2563
  * Create a new Invite Method Handler
2564
2564
  *
@@ -2638,7 +2638,7 @@ declare class InviteMethods {
2638
2638
  * @protected
2639
2639
  */
2640
2640
  declare class SkuMethods {
2641
- requestHandler: RequestHandler;
2641
+ readonly requestHandler: RequestHandler;
2642
2642
  /**
2643
2643
  * Create a new SKU Method handler
2644
2644
  *
@@ -2695,7 +2695,7 @@ declare class SkuMethods {
2695
2695
  * @protected
2696
2696
  */
2697
2697
  declare class StageInstanceMethods {
2698
- requestHandler: RequestHandler;
2698
+ readonly requestHandler: RequestHandler;
2699
2699
  /**
2700
2700
  * Create a new Stage Instance Method Handler
2701
2701
  *
@@ -2780,7 +2780,7 @@ declare class StageInstanceMethods {
2780
2780
  * @protected
2781
2781
  */
2782
2782
  declare class UserMethods {
2783
- requestHandler: RequestHandler;
2783
+ readonly requestHandler: RequestHandler;
2784
2784
  /**
2785
2785
  * Create a new User Method handler
2786
2786
  *
@@ -2946,7 +2946,7 @@ declare class UserMethods {
2946
2946
  * @protected
2947
2947
  */
2948
2948
  declare class VoiceMethods {
2949
- requestHandler: RequestHandler;
2949
+ readonly requestHandler: RequestHandler;
2950
2950
  /**
2951
2951
  * Create a new Voice Method Handler
2952
2952
  *
@@ -3007,41 +3007,41 @@ declare class SnowTransfer {
3007
3007
  /** The access token to use for requests. Can be a bot or bearer token */
3008
3008
  token: string | undefined;
3009
3009
  /** Methods related to channels */
3010
- channel: ChannelMethods;
3010
+ readonly channel: ChannelMethods;
3011
3011
  /** Helper to execute REST calls */
3012
- requestHandler: RequestHandler;
3012
+ readonly requestHandler: RequestHandler;
3013
3013
  /** Methods related to users */
3014
- user: UserMethods;
3014
+ readonly user: UserMethods;
3015
3015
  /** Methods related to stickers and emojis */
3016
- assets: AssetsMethods;
3016
+ readonly assets: AssetsMethods;
3017
3017
  /** Methods related to webhooks */
3018
- webhook: WebhookMethods;
3018
+ readonly webhook: WebhookMethods;
3019
3019
  /** Methods related to guilds */
3020
- guild: GuildMethods;
3020
+ readonly guild: GuildMethods;
3021
3021
  /** Methods related to guild scheduled events */
3022
- guildScheduledEvent: GuildScheduledEventMethods;
3022
+ readonly guildScheduledEvent: GuildScheduledEventMethods;
3023
3023
  /** Methods related to guild templates */
3024
- guildTemplate: GuildTemplateMethods;
3024
+ readonly guildTemplate: GuildTemplateMethods;
3025
3025
  /** Methods related to application commands/interactions */
3026
- interaction: InteractionMethods;
3026
+ readonly interaction: InteractionMethods;
3027
3027
  /** Methods related to invites */
3028
- invite: InviteMethods;
3028
+ readonly invite: InviteMethods;
3029
3029
  /** Methods related to voice regions */
3030
- voice: VoiceMethods;
3030
+ readonly voice: VoiceMethods;
3031
3031
  /** Methods related to getting gateway connect info */
3032
- bot: BotMethods;
3032
+ readonly bot: BotMethods;
3033
3033
  /** Methods related to guild audit logs */
3034
- auditLog: AuditLogMethods;
3034
+ readonly auditLog: AuditLogMethods;
3035
3035
  /** Methods related to guild stage instances */
3036
- stageInstance: StageInstanceMethods;
3036
+ readonly stageInstance: StageInstanceMethods;
3037
3037
  /** Methods related to guild auto mod */
3038
- autoMod: AutoModerationMethods;
3038
+ readonly autoMod: AutoModerationMethods;
3039
3039
  /** Methods related to entitlements */
3040
- entitlement: EntitlementMethods;
3040
+ readonly entitlement: EntitlementMethods;
3041
3041
  /** Methods related to SKUs */
3042
- sku: SkuMethods;
3042
+ readonly sku: SkuMethods;
3043
3043
  /** Ratelimiter used for handling the ratelimits imposed by the rest api */
3044
- ratelimiter: Ratelimiter;
3044
+ readonly ratelimiter: Ratelimiter;
3045
3045
  /**
3046
3046
  * Create a new Rest Client
3047
3047
  * @param token Discord Bot token to use
@@ -3056,7 +3056,7 @@ declare class SnowTransfer {
3056
3056
  * @protected
3057
3057
  */
3058
3058
  declare class ChannelMethods {
3059
- requestHandler: RequestHandler;
3059
+ readonly requestHandler: RequestHandler;
3060
3060
  options: SnowTransfer.Options;
3061
3061
  /**
3062
3062
  * Create a new Channel Method handler
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ var web = require('stream/web');
6
6
  var events = require('events');
7
7
  var v10 = require('discord-api-types/v10');
8
8
 
9
- var __getOwnPropNames=Object.getOwnPropertyNames;var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var __esm=(fn,res)=>function(){return fn&&(res=(0, fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __commonJS=(cb,mod)=>function(){return mod||(0, cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var require_StateMachine=__commonJS({"src/StateMachine.ts"(exports,module){var EventEmitter2=__require("events"),StateMachine=class extends EventEmitter2{constructor(currentStateName){super();this.currentStateName=currentStateName;this.deferredTransitionCreators.push(()=>{this.states.has(currentStateName)||this.defineState(currentStateName);});}states=new Map;editable=true;deferredTransitionCreators=[];history=[];guardEditable(){if(!this.editable)throw new Error("tried to edit state machine after machine has been frozen")}guardNotEditable(){if(this.editable)throw new Error("tried to do transition before machine has been frozen")}defineState(name,cbs={onEnter:[],onLeave:[],transitions:new Map}){if(this.guardEditable(),this.states.has(name))throw new Error(`attempt to redefine state ${name}, please edit it instead`);return this.states.set(name,{onEnter:cbs.onEnter,onLeave:cbs.onLeave,transitions:cbs.transitions}),this}defineTransition(from,event,to,cb){this.guardEditable();let state=this.states.get(from);if(state.transitions.has(event))throw new Error(`attempt to redefine transition ${from} --${event}--> *, please only create transitions once`);let onTransition=[];return cb&&onTransition.push(cb),state.transitions.set(event,{destination:to,onTransition}),this}defineUniversalTransition(event,to){return this.guardEditable(),this.deferredTransitionCreators.push(()=>{for(let[stateName,state]of this.states.entries())state.transitions.has(event)||this.defineTransition(stateName,event,to);}),this}freeze(){this.guardEditable();for(let cb of this.deferredTransitionCreators)cb();let problems=[];for(let[stateName,state]of this.states.entries())for(let[transitionName,transition]of state.transitions.entries())this.states.has(transition.destination)||problems.push(`transition ${stateName} --${transitionName}--> ${transition.destination} has an invalid destination`);if(problems.length)throw new Error(`Consistency problems in state machine: ${problems.join(";")}`);this.editable=false;}doTransition(event,...args){this.guardNotEditable();let from=this.currentStateName,transition=this.states.get(this.currentStateName).transitions.get(event);if(!transition)throw new Error(`undefined transition: ${this.currentStateName} -> ${event} -> ?`);this.history.push({from,event,to:transition.destination,time:Date.now()}),this.history.length>20&&this.history.shift();for(let cb of this.states.get(this.currentStateName).onLeave)try{cb(event);}catch(e){throw this.debug(),new Error(`onLeave callback for state ${from} (during transition ${from} --${event}--> ${transition.destination})`,{cause:e})}this.currentStateName=transition.destination;for(let cb of transition.onTransition??[])try{cb(...args);}catch(e){throw this.debug(),new Error(`onTransition callback during ${from} --${event}--> ${transition.destination}`,{cause:e})}this.emit("enter",this.currentStateName);for(let cb of this.states.get(this.currentStateName).onEnter)try{cb(event);}catch(e){throw this.debug(),new Error(`onEnter callback for state ${from} (during transition ${this.currentStateName} --${event}--> ${transition.destination})`,{cause:e})}}doTransitionLater(event,delayMs,...args){this.guardNotEditable();let timer=setTimeout(()=>{this.doTransition(event,...args);},delayMs);this.once("enter",()=>{clearTimeout(timer);});}debug(){console.table(this.history.map(h=>({At:new Date(h.time),"From -->":h.from,"-- Event -->":h.event,"--> To":h.to})).concat({At:new Date,"From -->":this.currentStateName,"-- Event -->":"(debug)","--> To":""}));}};module.exports=StateMachine;}});var require_Constants=__commonJS({"src/Constants.ts"(exports,module){var Constants3={REST_API_VERSION:10,GET_CHANNEL_MESSAGES_MIN_RESULTS:1,GET_CHANNEL_MESSAGES_MAX_RESULTS:100,GET_GUILD_SCHEDULED_EVENT_USERS_MIN_RESULTS:1,GET_GUILD_SCHEDULED_EVENT_USERS_MAX_RESULTS:100,SEARCH_MEMBERS_MIN_RESULTS:1,SEARCH_MEMBERS_MAX_RESULTS:1e3,BULK_DELETE_MESSAGES_MIN:2,BULK_DELETE_MESSAGES_MAX:100,OK_STATUS_CODES:new Set([200,201,204,304]),DO_NOT_RETRY_STATUS_CODES:new Set([401,403,404,405,411,413,429]),DEFAULT_RETRY_LIMIT:3,GLOBAL_REQUESTS_PER_SECOND:50,async standardMultipartHandler(data){let form=new FormData;if(data.files&&Array.isArray(data.files)&&data.files.every(f=>!!f.name&&!!f.file)){let index=0;for(let file of data.files)await Constants3.standardAddToFormHandler(form,`files[${index}]`,file.file,file.name),delete file.file,index++;}return data.data&&delete data.files,form.append("payload_json",JSON.stringify(data)),form},async standardAddToFormHandler(form,name,value,filename){if(value instanceof Buffer||typeof value=="string")form.append(name,new buffer.Blob([value]),filename);else if(value instanceof buffer.Blob||value instanceof buffer.File)form.append(name,value,filename);else if(value instanceof stream.Readable||value instanceof web.ReadableStream){let blob=await new Response(value instanceof web.ReadableStream?value:stream.Readable.toWeb(value)).blob();form.set(name,blob,filename);}else throw new Error(`Don't know how to add ${value?.constructor?.name??typeof value} to form`)},reasonHeader(reason){return reason?{"X-Audit-Log-Reason":reason}:{}}};module.exports=Constants3;}});var require_Endpoints=__commonJS({"src/Endpoints.ts"(exports,module){var Constants3=require_Constants(),Endpoints3={BASE_URL:"/api/v"+Constants3.REST_API_VERSION,BASE_HOST:"https://discord.com",CDN_URL:"https://cdn.discordapp.com",APPLICATION_COMMAND:(appId,cmdId)=>`${Endpoints3.APPLICATION_COMMANDS(appId)}/${cmdId}`,APPLICATION_COMMANDS:appId=>`/applications/${appId}/commands`,APPLICATION_EMOJI:(appId,emojiId)=>`${Endpoints3.APPLICATION_EMOJIS(appId)}/${emojiId}`,APPLICATION_EMOJIS:appId=>`/applications/${appId}/emojis`,APPLICATION_ENTITLEMENT:(appId,entitlementId)=>`${Endpoints3.APPLICATION_ENTITLEMENTS(appId)}/${entitlementId}`,APPLICATION_ENTITLEMENT_CONSUME:(appId,entitlementId)=>`${Endpoints3.APPLICATION_ENTITLEMENT(appId,entitlementId)}/consume`,APPLICATION_ENTITLEMENTS:appId=>`/applications/${appId}/entitlements`,APPLICATION_GUILD_COMMANDS_PERMISSIONS:(appId,guildId)=>`${Endpoints3.APPLICATION_GUILD_COMMANDS(appId,guildId)}/permissions`,APPLICATION_GUILD_COMMAND_PERMISSIONS:(appId,guildId,cmdId)=>`${Endpoints3.APPLICATION_GUILD_COMMAND(appId,guildId,cmdId)}/permissions`,APPLICATION_GUILD_COMMAND:(appId,guildId,cmdId)=>`${Endpoints3.APPLICATION_GUILD_COMMANDS(appId,guildId)}/${cmdId}`,APPLICATION_GUILD_COMMANDS:(appId,guildId)=>`/applications/${appId}/guilds/${guildId}/commands`,APPLICATION_SKUS:appId=>`/applications/${appId}/skus`,ATTACHMENTS_REFRESH_URLS:"/attachments/refresh-urls",CHANNEL:chanId=>`${Endpoints3.CHANNELS}/${chanId}`,CHANNEL_ATTACHMENTS:chanId=>`${Endpoints3.CHANNEL(chanId)}/attachments`,CHANNEL_BULK_DELETE:chanId=>`${Endpoints3.CHANNEL_MESSAGES(chanId)}/bulk-delete`,CHANNEL_FOLLOWERS:chanId=>`${Endpoints3.CHANNEL(chanId)}/followers`,CHANNEL_INVITES:chanId=>`${Endpoints3.CHANNEL(chanId)}/invites`,CHANNEL_MESSAGE:(chanId,msgId)=>`${Endpoints3.CHANNEL_MESSAGES(chanId)}/${msgId}`,CHANNEL_MESSAGE_CROSSPOST:(chanId,msgId)=>`${Endpoints3.CHANNEL_MESSAGE(chanId,msgId)}/crosspost`,CHANNEL_MESSAGE_REACTION:(chanId,msgId,reaction)=>`${Endpoints3.CHANNEL_MESSAGE_REACTIONS(chanId,msgId)}/${reaction}`,CHANNEL_MESSAGE_REACTION_USER:(chanId,msgId,reaction,userId)=>`${Endpoints3.CHANNEL_MESSAGE_REACTION(chanId,msgId,reaction)}/${userId}`,CHANNEL_MESSAGE_REACTIONS:(chanId,msgId)=>`${Endpoints3.CHANNEL_MESSAGE(chanId,msgId)}/reactions`,CHANNEL_MESSAGE_THREADS:(chanId,msgId)=>`${Endpoints3.CHANNEL_MESSAGE(chanId,msgId)}/threads`,CHANNEL_MESSAGES:chanId=>`${Endpoints3.CHANNEL(chanId)}/messages`,CHANNEL_PERMISSION:(chanId,permId)=>`${Endpoints3.CHANNEL_PERMISSIONS(chanId)}/${permId}`,CHANNEL_PERMISSIONS:chanId=>`${Endpoints3.CHANNEL(chanId)}/permissions`,CHANNEL_PIN:(chanId,msgId)=>`${Endpoints3.CHANNEL_PINS(chanId)}/${msgId}`,CHANNEL_PINS:chanId=>`${Endpoints3.CHANNEL(chanId)}/messages/pins`,CHANNEL_RECIPIENT:(chanId,userId)=>`${Endpoints3.CHANNEL(chanId)}/recipients/${userId}`,CHANNEL_THREADS:chanId=>`${Endpoints3.CHANNEL(chanId)}/threads`,CHANNEL_THREAD_MEMBER:(chanId,memberId)=>`${Endpoints3.CHANNEL_THREAD_MEMBERS(chanId)}/${memberId}`,CHANNEL_THREAD_MEMBERS:chanId=>`${Endpoints3.CHANNEL(chanId)}/thread-members`,CHANNEL_THREADS_ARCHIVED_PRIVATE:chanId=>`${Endpoints3.CHANNEL_THREADS(chanId)}/archived/private`,CHANNEL_THREADS_ARCHIVED_PRIVATE_USER:chanId=>`${Endpoints3.CHANNEL(chanId)}/users/@me/threads/archived/private`,CHANNEL_THREADS_ARCHIVED_PUBLIC:chanId=>`${Endpoints3.CHANNEL_THREADS(chanId)}/archived/public`,CHANNEL_TYPING:chanId=>`${Endpoints3.CHANNEL(chanId)}/typing`,CHANNEL_VOICE_STATUS:chanId=>`${Endpoints3.CHANNEL(chanId)}/voice-status`,CHANNEL_WEBHOOKS:chanId=>`${Endpoints3.CHANNEL(chanId)}/webhooks`,CHANNELS:"/channels",GATEWAY:"/gateway",GATEWAY_BOT:"/gateway/bot",GUILD:guildId=>`${Endpoints3.GUILDS}/${guildId}`,GUILD_AUDIT_LOGS:guildId=>`${Endpoints3.GUILD(guildId)}/audit-logs`,GUILD_AUTO_MOD_RULE:(guildId,ruleId)=>`${Endpoints3.GUILD_AUTO_MOD_RULES(guildId)}/${ruleId}`,GUILD_AUTO_MOD_RULES:guildId=>`${Endpoints3.GUILD(guildId)}/auto-moderation/rules`,GUILD_BAN:(guildId,memberId)=>`${Endpoints3.GUILD_BANS(guildId)}/${memberId}`,GUILD_BANS:guildId=>`${Endpoints3.GUILD(guildId)}/bans`,GUILD_CHANNELS:guildId=>`${Endpoints3.GUILD(guildId)}/channels`,GUILD_EMOJI:(guildId,emojiId)=>`${Endpoints3.GUILD_EMOJIS(guildId)}/${emojiId}`,GUILD_EMOJIS:guildId=>`${Endpoints3.GUILD(guildId)}/emojis`,GUILD_INVITES:guildId=>`${Endpoints3.GUILD(guildId)}/invites`,GUILD_INTEGRATION:(guildId,integrationId)=>`${Endpoints3.GUILD_INTEGRATIONS(guildId)}/${integrationId}`,GUILD_INTEGRATIONS:guildId=>`${Endpoints3.GUILD(guildId)}/integrations`,GUILD_MEMBER:(guildId,memberId)=>`${Endpoints3.GUILD_MEMBERS(guildId)}/${memberId}`,GUILD_MEMBER_ROLE:(guildId,memberId,roleId)=>`${Endpoints3.GUILD_MEMBER(guildId,memberId)}/roles/${roleId}`,GUILD_MEMBERS:guildId=>`${Endpoints3.GUILD(guildId)}/members`,GUILD_MEMBERS_SEARCH:guildId=>`${Endpoints3.GUILD_MEMBERS(guildId)}/search`,GUILD_PREVIEW:guildId=>`${Endpoints3.GUILD(guildId)}/preview`,GUILD_PRUNE:guildId=>`${Endpoints3.GUILD(guildId)}/prune`,GUILD_ROLE:(guildId,roleId)=>`${Endpoints3.GUILD_ROLES(guildId)}/${roleId}`,GUILD_ROLES:guildId=>`${Endpoints3.GUILD(guildId)}/roles`,GUILD_SCHEDULED_EVENTS:guildId=>`${Endpoints3.GUILD(guildId)}/scheduled-events`,GUILD_SCHEDULED_EVENT:(guildId,eventId)=>`${Endpoints3.GUILD_SCHEDULED_EVENTS(guildId)}/${eventId}`,GUILD_SCHEDULED_EVENT_USERS:(guildId,eventId)=>`${Endpoints3.GUILD_SCHEDULED_EVENT(guildId,eventId)}/users`,GUILD_STICKER:(guildId,stickerId)=>`${Endpoints3.GUILD_STICKERS(guildId)}/${stickerId}`,GUILD_STICKERS:guildId=>`${Endpoints3.GUILD(guildId)}/stickers`,GUILD_TEMPLATE:(guildId,code)=>`${Endpoints3.GUILD_TEMPLATES(guildId)}/${code}`,GUILD_THREADS_ACTIVE:guildId=>`${Endpoints3.GUILD(guildId)}/threads/active`,GUILD_TEMPLATES:guildId=>`${Endpoints3.GUILD(guildId)}/templates`,GUILD_VANITY:guildId=>`${Endpoints3.GUILD(guildId)}/vanity-url`,GUILD_VOICE_REGIONS:guildId=>`${Endpoints3.GUILD(guildId)}/regions`,GUILD_VOICE_STATE_USER:(guildId,memberId)=>`${Endpoints3.GUILD(guildId)}/voice-states/${memberId}`,GUILD_WEBHOOKS:guildId=>`${Endpoints3.GUILD(guildId)}/webhooks`,GUILD_WELCOME_SCREEN:guildId=>`${Endpoints3.GUILD(guildId)}/welcome-screen`,GUILD_WIDGET:guildId=>`${Endpoints3.GUILD(guildId)}/widget.json`,GUILD_WIDGET_SETTINGS:guildId=>`${Endpoints3.GUILD(guildId)}/widget`,GUILDS:"/guilds",INTERACTION_CALLBACK:(interactionId,token)=>`/interactions/${interactionId}/${token}/callback`,INVITES:inviteId=>`/invites/${inviteId}`,INVITE_TARGET_USERS:inviteId=>`${Endpoints3.INVITES(inviteId)}/target-users`,INVITE_TARGET_USERS_JOB_STATUS:inviteId=>`${Endpoints3.INVITE_TARGET_USERS(inviteId)}/job-status`,OAUTH2_APPLICATION:appId=>`/oauth2/applications/${appId}`,OAUTH2_TOKEN:"/api/oauth2/token",POLL_ANSWER:(chanId,msgId,answerId)=>`${Endpoints3.CHANNEL(chanId)}/polls/${msgId}/answers/${answerId}`,POLL_EXPIRE:(chanId,msgId)=>`${Endpoints3.CHANNEL(chanId)}/polls/${msgId}/expire`,SKU_SUBSCRIPTIONS:skuId=>`/skus/${skuId}/subscriptions`,SKU_SUBSCRIPTION:(skuId,subscriptionId)=>`${Endpoints3.SKU_SUBSCRIPTIONS(skuId)}/${subscriptionId}`,STAGE_INSTANCE_CHANNEL:chanId=>`${Endpoints3.STAGE_INSTANCES}/${chanId}`,STAGE_INSTANCES:"/stage-instances",STICKER:stickerId=>`/stickers/${stickerId}`,TEMPLATE:code=>`/guilds/templates/${code}`,USER:userId=>`${Endpoints3.USERS}/${userId}`,USER_APPLICATION_ROLE_CONNECTION:(userId,appId)=>`${Endpoints3.USER(userId)}/applications/${appId}/role-connection`,USER_CHANNELS:userId=>`${Endpoints3.USER(userId)}/channels`,USER_CONNECTIONS:userId=>`${Endpoints3.USER(userId)}/connections`,USER_GUILD:(userId,guildId)=>`${Endpoints3.USER_GUILDS(userId)}/${guildId}`,USER_GUILDS:userId=>`${Endpoints3.USER(userId)}/guilds`,USER_GUILD_VOICE_STATE:(guildId,userId)=>`${Endpoints3.GUILD(guildId)}/voice-states/${userId}`,USERS:"/users",VOICE_REGIONS:"/voice/regions",WEBHOOK:hookId=>`/webhooks/${hookId}`,WEBHOOK_TOKEN:(hookId,token)=>`${Endpoints3.WEBHOOK(hookId)}/${token}`,WEBHOOK_TOKEN_GITHUB:(hookId,token)=>`${Endpoints3.WEBHOOK_TOKEN(hookId,token)}/github`,WEBHOOK_TOKEN_MESSAGE:(hookId,token,msgId)=>`/webhooks/${hookId}/${token}/messages/${msgId}`,WEBHOOK_TOKEN_SLACK:(hookId,token)=>`${Endpoints3.WEBHOOK_TOKEN(hookId,token)}/slack`};module.exports=Endpoints3;}});function appendQuery(query){let count=0;for(let[key,value]of Object.entries(query))value==null?delete query[key]:count++;return count>0?`?${new URLSearchParams(query).toString()}`:""}var fs,path,crypto,util,Endpoints,version,Constants,SM2,routeRegex,reactionsRegex,reactionsUserRegex,webhooksRegex,isMessageEndpointRegex,isGuildChannelsRegex,messagesRegex,disallowedBodyMethods;exports.DiscordAPIError = void 0;exports.IntervalCounter = void 0;exports.LeakyCounter = void 0;exports.Bucket = void 0;exports.Ratelimiter = void 0;exports.RequestHandler = void 0;var init_RequestHandler=__esm({"src/RequestHandler.ts"(){fs=__require("fs"),path=__require("path"),crypto=__require("crypto"),util=__require("util"),Endpoints=require_Endpoints(),{version}=JSON.parse(fs.readFileSync(path.join(__dirname,"../package.json"),{encoding:"utf8"})),Constants=require_Constants(),SM2=require_StateMachine(),routeRegex=/\/([a-z-]+)\/(?:\d+)/g,reactionsRegex=/\/reactions\/[^/]+/g,reactionsUserRegex=/\/reactions\/:id\/[^/]+/g,webhooksRegex=/^\/webhooks\/(\d+)\/[A-Za-z0-9-_]{64,}/,isMessageEndpointRegex=/\/messages\/:id$/,isGuildChannelsRegex=/\/guilds\/\d+\/channels$/,messagesRegex=/\/messages\/\d+$/,disallowedBodyMethods=new Set(["head","get","delete"]),exports.DiscordAPIError=class extends Error{method;path;code;httpStatus;request;response;constructor(error,request,response){super(),this.name="DiscordAPIError",this.message=error.message??util.inspect(error),this.method=request.method,this.path=request.endpoint,this.code=error.code??4e3,this.httpStatus=response.status,Object.defineProperties(this,{request:{enumerable:false,value:request},response:{enumerable:false,value:response}});}},exports.IntervalCounter=class{constructor(limit,reset){this.limit=limit;this.reset=reset;this.remaining=limit;}remaining;firstRequestTime=0;resetAt=null;id=new Array(3).fill(0).map(()=>String.fromCodePoint(Math.floor(Math.random()*26+65))).join("");checkReset(){let now=Date.now();this.resetAt!==null?now>this.resetAt&&(this.firstRequestTime=0,this.remaining=this.limit,this.resetAt=null,globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [itrv] [${this.id}] informed reset: ${this.remaining}/${this.limit}`)):now>this.firstRequestTime+this.reset&&(this.firstRequestTime=0,this.remaining=this.limit,globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [itrv] [${this.id}] predicted reset: ${this.remaining}/${this.limit}`));}hasReset(){return this.checkReset(),this.remaining===this.limit}canTake(){return this.checkReset(),this.remaining>0}take(){this.checkReset(),this.remaining===this.limit&&(this.firstRequestTime=Date.now());let ok=this.remaining>0;return this.remaining--,ok}timeUntilReset(){let now=Date.now();return this.resetAt?Math.max(this.resetAt-now+1,0):Math.max(this.firstRequestTime+this.reset-Date.now()+1,0)}responseReceived(){this.remaining===this.limit-1&&this.firstRequestTime&&(this.firstRequestTime=Date.now());}applyCount(limit,remaining,resetAfter){limit!=null&&(this.limit=limit),this.remaining=remaining,this.resetAt=Date.now()+resetAfter;}},exports.LeakyCounter=class{constructor(limit){this.limit=limit;this.remaining=limit;}remaining;resetAt=null;id=new Array(3).fill(0).map(()=>String.fromCodePoint(Math.floor(Math.random()*26+65))).join("");checkReset(){let now=Date.now();this.resetAt&&now>this.resetAt&&(this.remaining=Math.min(this.limit,this.remaining+1),this.resetAt=null,globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [leak] [${this.id}] restore one: ${this.remaining}/${this.limit}`));}hasReset(){return this.checkReset(),this.remaining===this.limit}canTake(){return this.checkReset(),this.remaining>0}take(){return this.checkReset(),globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [leak] [${this.id}] took: ${this.remaining-1} left`),this.remaining-- >0}timeUntilReset(){let now=Date.now();return this.resetAt?Math.max(this.resetAt-now+1,0):0}responseReceived(){}applyCount(limit,remaining,resetAfter){limit!=null&&(this.limit=limit),this.remaining=remaining,this.resetAt=Date.now()+resetAfter,globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [leak] [${this.id}] applied: ${remaining}/${limit} - wait another ${resetAfter}`);}},exports.Bucket=class{sm=new SM2("ready");calls=[];counters=[];pauseRequested=false;constructor(counters){this.counters=counters,this.sm.defineState("ready",{onEnter:[],onLeave:[],transitions:new Map([["enqueue",{destination:"check"}],["pause",{destination:"paused"}]])}),this.sm.defineState("check",{onEnter:[()=>this.pauseRequested?this.sm.doTransition("pause"):this.counters.every(c=>c.canTake())?this.calls.length?this.sm.doTransition("run"):this.sm.doTransition("empty"):this.sm.doTransition("cooldown")],onLeave:[],transitions:new Map([["pause",{destination:"paused"}],["cooldown",{destination:"cooldown"}],["run",{destination:"running"}],["empty",{destination:"ready"}]])}),this.sm.defineState("running",{onEnter:[()=>{this.counters.forEach(c=>c.take()),this.calls.shift()().then(()=>{this.sm.doTransition("complete");});}],onLeave:[],transitions:new Map([["complete",{destination:"check"}]])}),this.sm.defineState("cooldown",{onEnter:[()=>{this.sm.doTransitionLater("reset",Math.max(...this.counters.map(c=>c.timeUntilReset())));}],onLeave:[],transitions:new Map([["reset",{destination:"check"}]])}),this.sm.defineState("paused",{onEnter:[],onLeave:[()=>{this.pauseRequested=false;}],transitions:new Map([["resume",{destination:"check"}]])}),this.sm.freeze();}enqueue(fn){return new Promise((resolve,reject)=>{this.calls.push(()=>fn(this).then(resolve).catch(reject)),this.sm.currentStateName==="ready"&&this.sm.doTransition("enqueue");})}pause(){this.pauseRequested=true,this.sm.currentStateName==="ready"&&this.sm.doTransition("pause");}resume(){this.pauseRequested=false,this.sm.currentStateName==="paused"&&this.sm.doTransition("resume");}dropQueue(){this.calls=[];}},exports.Ratelimiter=class{buckets=new Map;globalBucket=new exports.Bucket([new exports.IntervalCounter(Constants.GLOBAL_REQUESTS_PER_SECOND,1e3)]);get global(){return !this.globalBucket.counters[0].canTake()}constructor(){setInterval(()=>{for(let[key,value]of this.buckets.entries())value.counters[0].hasReset()&&this.buckets.delete(key);},3600*1e3).unref();}routify(url,method){let route=url.replaceAll(routeRegex,function(match,p){return p==="channels"||p==="guilds"||p==="webhooks"?match:`/${p}/:id`}).replaceAll(reactionsRegex,"/reactions/:id").replaceAll(reactionsUserRegex,"/reactions/:id/:userId").replace(webhooksRegex,"/webhooks/$1/:token");if(method==="DELETE"&&isMessageEndpointRegex.test(route)?route=method+route:method==="GET"&&isGuildChannelsRegex.test(route)&&(route="/guilds/:id/channels"),method==="PUT"||method==="DELETE"){let index=route.indexOf("/reactions");index!==-1&&(route="MODIFY"+route.slice(0,index+10));}return route}queue(fn,url,method){let routeKey=this.routify(url,method),bucket=this.buckets.get(routeKey);return bucket||(method==="DELETE"&&messagesRegex.test(url)?bucket=new exports.Bucket([new exports.LeakyCounter(1),new exports.IntervalCounter(5,5e3),this.globalBucket.counters[0]]):bucket=new exports.Bucket([new exports.LeakyCounter(1),this.globalBucket.counters[0]]),this.buckets.set(routeKey,bucket)),bucket.enqueue(fn)}setGlobal(ms){this.globalBucket.counters[0].applyCount(Constants.GLOBAL_REQUESTS_PER_SECOND,0,ms);}},exports.RequestHandler=class extends events.EventEmitter{constructor(ratelimiter,options){super();this.ratelimiter=ratelimiter;this.options={baseHost:options?.baseHost??Endpoints.BASE_HOST,baseURL:options?.baseURL??Endpoints.BASE_URL,bypassBuckets:options?.bypassBuckets??false,retryFailed:options?.retryFailed??false,retryLimit:options?.retryLimit??Constants.DEFAULT_RETRY_LIMIT,headers:{"User-Agent":`Discordbot (https://github.com/DasWolke/SnowTransfer, ${version}) Node.js/${process.version}`},fetch:options?.fetch??fetch},options?.token&&(this.options.headers.Authorization=options.token),this.apiURL=this.options.baseHost+Endpoints.BASE_URL,this.latency=500;}options;latency;apiURL;request(endpoint,params={},method,dataType,data,extraHeaders,retries=this.options.retryLimit,rawResponse=false){let stack=new Error().stack;return new Promise(async(resolve,reject)=>{let fn=async bkt=>{let reqId=crypto.randomBytes(20).toString("hex");try{let request={endpoint,method:method.toUpperCase(),dataType,data:data??{}};this.emit("request",reqId,request);let before=Date.now(),response;switch(dataType){case "json":response=await this._request(endpoint,params,method,data,extraHeaders);break;case "multipart":if(!data)throw new Error("No multipart data");response=await this._multiPartRequest(endpoint,params,method,data,extraHeaders);break;default:throw new Error("Forbidden dataType. Use json or multipart or ensure multipart has FormData")}if(this.latency=Date.now()-before,bkt?.counters.forEach(c=>c.responseReceived()),bkt&&this._applyRatelimitHeaders(bkt,response.headers),response.status&&!Constants.OK_STATUS_CODES.has(response.status)&&response.status!==429){if(this.options.retryFailed&&!Constants.DO_NOT_RETRY_STATUS_CODES.has(response.status)&&retries!==0)return this.request(endpoint,params,method,dataType,data,extraHeaders,retries--).then(resolve).catch(reject);throw new exports.DiscordAPIError({message:await response.text()},request,response)}if(response.status===429){let b=await response.json();throw b.global&&this.ratelimiter.setGlobal(b.retry_after*1e3),globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [rate] [${bkt?.counters[0].id}] !! 429 - guess there was 0 remaining, wait another ${b.retry_after*1e3} (route: ${this.ratelimiter.routify(endpoint,method.toUpperCase())})`),this.emit("rateLimit",{method:method.toUpperCase(),path:endpoint,route:this.ratelimiter.routify(endpoint,method.toUpperCase())}),new exports.DiscordAPIError({message:b.message,code:b.code??429},request,response)}if(this.emit("done",reqId,response,request),rawResponse)return resolve(response);if(response.body){let b;try{b=await response.json();}catch{return resolve(void 0)}return resolve(b)}else return resolve(void 0)}catch(error){return error?.stack&&(error.stack=error.stack+`
9
+ var __getOwnPropNames=Object.getOwnPropertyNames;var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var __esm=(fn,res)=>function(){return fn&&(res=(0, fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __commonJS=(cb,mod)=>function(){return mod||(0, cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var require_StateMachine=__commonJS({"src/StateMachine.ts"(exports,module){var EventEmitter2=__require("events"),StateMachine=class extends EventEmitter2{constructor(currentStateName){super();this.currentStateName=currentStateName;this.deferredTransitionCreators.push(()=>{this.states.has(currentStateName)||this.defineState(currentStateName);});}states=new Map;editable=true;deferredTransitionCreators=[];history=[];guardEditable(){if(!this.editable)throw new Error("tried to edit state machine after machine has been frozen")}guardNotEditable(){if(this.editable)throw new Error("tried to do transition before machine has been frozen")}defineState(name,cbs={onEnter:[],onLeave:[],transitions:new Map}){if(this.guardEditable(),this.states.has(name))throw new Error(`attempt to redefine state ${name}, please edit it instead`);return this.states.set(name,{onEnter:cbs.onEnter,onLeave:cbs.onLeave,transitions:cbs.transitions}),this}defineTransition(from,event,to,cb){this.guardEditable();let state=this.states.get(from);if(state.transitions.has(event))throw new Error(`attempt to redefine transition ${from} --${event}--> *, please only create transitions once`);let onTransition=[];return cb&&onTransition.push(cb),state.transitions.set(event,{destination:to,onTransition}),this}defineUniversalTransition(event,to){return this.guardEditable(),this.deferredTransitionCreators.push(()=>{for(let[stateName,state]of this.states.entries())state.transitions.has(event)||this.defineTransition(stateName,event,to);}),this}freeze(){this.guardEditable();for(let cb of this.deferredTransitionCreators)cb();let problems=[];for(let[stateName,state]of this.states.entries())for(let[transitionName,transition]of state.transitions.entries())this.states.has(transition.destination)||problems.push(`transition ${stateName} --${transitionName}--> ${transition.destination} has an invalid destination`);if(problems.length)throw new Error(`Consistency problems in state machine: ${problems.join(";")}`);this.editable=false;}doTransition(event,...args){this.guardNotEditable();let from=this.currentStateName,transition=this.states.get(this.currentStateName).transitions.get(event);if(!transition)throw new Error(`undefined transition: ${this.currentStateName} -> ${event} -> ?`);this.history.push({from,event,to:transition.destination,time:Date.now()}),this.history.length>20&&this.history.shift();for(let cb of this.states.get(this.currentStateName).onLeave)try{cb(event);}catch(e){throw this.debug(),new Error(`onLeave callback for state ${from} (during transition ${from} --${event}--> ${transition.destination})`,{cause:e})}this.currentStateName=transition.destination;for(let cb of transition.onTransition??[])try{cb(...args);}catch(e){throw this.debug(),new Error(`onTransition callback during ${from} --${event}--> ${transition.destination}`,{cause:e})}this.emit("enter",this.currentStateName);for(let cb of this.states.get(this.currentStateName).onEnter)try{cb(event);}catch(e){throw this.debug(),new Error(`onEnter callback for state ${from} (during transition ${this.currentStateName} --${event}--> ${transition.destination})`,{cause:e})}}doTransitionLater(event,delayMs,...args){this.guardNotEditable();let timer=setTimeout(()=>{this.doTransition(event,...args);},delayMs);this.once("enter",()=>{clearTimeout(timer);});}debug(){console.table(this.history.map(h=>({At:new Date(h.time),"From -->":h.from,"-- Event -->":h.event,"--> To":h.to})).concat({At:new Date,"From -->":this.currentStateName,"-- Event -->":"(debug)","--> To":""}));}};module.exports=StateMachine;}});var require_Constants=__commonJS({"src/Constants.ts"(exports,module){var Constants3={REST_API_VERSION:10,GET_CHANNEL_MESSAGES_MIN_RESULTS:1,GET_CHANNEL_MESSAGES_MAX_RESULTS:100,GET_GUILD_SCHEDULED_EVENT_USERS_MIN_RESULTS:1,GET_GUILD_SCHEDULED_EVENT_USERS_MAX_RESULTS:100,SEARCH_MEMBERS_MIN_RESULTS:1,SEARCH_MEMBERS_MAX_RESULTS:1e3,BULK_DELETE_MESSAGES_MIN:2,BULK_DELETE_MESSAGES_MAX:100,OK_STATUS_CODES:new Set([200,201,204,304]),DO_NOT_RETRY_STATUS_CODES:new Set([401,403,404,405,411,413]),DEFAULT_RETRY_LIMIT:3,GLOBAL_REQUESTS_PER_SECOND:50,async standardMultipartHandler(data){let form=new FormData;if(data.files&&Array.isArray(data.files)&&data.files.every(f=>!!f.name&&!!f.file)){let index=0;for(let file of data.files)await Constants3.standardAddToFormHandler(form,`files[${index}]`,file.file,file.name),delete file.file,index++;}return data.data&&delete data.files,form.append("payload_json",JSON.stringify(data)),form},async standardAddToFormHandler(form,name,value,filename){if(value instanceof Buffer||typeof value=="string")form.append(name,new buffer.Blob([value]),filename);else if(value instanceof buffer.Blob||value instanceof buffer.File)form.append(name,value,filename);else if(value instanceof stream.Readable||value instanceof web.ReadableStream){let blob=await new Response(value instanceof web.ReadableStream?value:stream.Readable.toWeb(value)).blob();form.set(name,blob,filename);}else throw new Error(`Don't know how to add ${value?.constructor?.name??typeof value} to form`)},reasonHeader(reason){return reason?{"X-Audit-Log-Reason":reason}:{}}};module.exports=Constants3;}});var require_Endpoints=__commonJS({"src/Endpoints.ts"(exports,module){var Constants3=require_Constants(),Endpoints3={BASE_URL:"/api/v"+Constants3.REST_API_VERSION,BASE_HOST:"https://discord.com",CDN_URL:"https://cdn.discordapp.com",APPLICATION_COMMAND:(appId,cmdId)=>`${Endpoints3.APPLICATION_COMMANDS(appId)}/${cmdId}`,APPLICATION_COMMANDS:appId=>`/applications/${appId}/commands`,APPLICATION_EMOJI:(appId,emojiId)=>`${Endpoints3.APPLICATION_EMOJIS(appId)}/${emojiId}`,APPLICATION_EMOJIS:appId=>`/applications/${appId}/emojis`,APPLICATION_ENTITLEMENT:(appId,entitlementId)=>`${Endpoints3.APPLICATION_ENTITLEMENTS(appId)}/${entitlementId}`,APPLICATION_ENTITLEMENT_CONSUME:(appId,entitlementId)=>`${Endpoints3.APPLICATION_ENTITLEMENT(appId,entitlementId)}/consume`,APPLICATION_ENTITLEMENTS:appId=>`/applications/${appId}/entitlements`,APPLICATION_GUILD_COMMANDS_PERMISSIONS:(appId,guildId)=>`${Endpoints3.APPLICATION_GUILD_COMMANDS(appId,guildId)}/permissions`,APPLICATION_GUILD_COMMAND_PERMISSIONS:(appId,guildId,cmdId)=>`${Endpoints3.APPLICATION_GUILD_COMMAND(appId,guildId,cmdId)}/permissions`,APPLICATION_GUILD_COMMAND:(appId,guildId,cmdId)=>`${Endpoints3.APPLICATION_GUILD_COMMANDS(appId,guildId)}/${cmdId}`,APPLICATION_GUILD_COMMANDS:(appId,guildId)=>`/applications/${appId}/guilds/${guildId}/commands`,APPLICATION_SKUS:appId=>`/applications/${appId}/skus`,ATTACHMENTS_REFRESH_URLS:"/attachments/refresh-urls",CHANNEL:chanId=>`${Endpoints3.CHANNELS}/${chanId}`,CHANNEL_ATTACHMENTS:chanId=>`${Endpoints3.CHANNEL(chanId)}/attachments`,CHANNEL_BULK_DELETE:chanId=>`${Endpoints3.CHANNEL_MESSAGES(chanId)}/bulk-delete`,CHANNEL_FOLLOWERS:chanId=>`${Endpoints3.CHANNEL(chanId)}/followers`,CHANNEL_INVITES:chanId=>`${Endpoints3.CHANNEL(chanId)}/invites`,CHANNEL_MESSAGE:(chanId,msgId)=>`${Endpoints3.CHANNEL_MESSAGES(chanId)}/${msgId}`,CHANNEL_MESSAGE_CROSSPOST:(chanId,msgId)=>`${Endpoints3.CHANNEL_MESSAGE(chanId,msgId)}/crosspost`,CHANNEL_MESSAGE_REACTION:(chanId,msgId,reaction)=>`${Endpoints3.CHANNEL_MESSAGE_REACTIONS(chanId,msgId)}/${reaction}`,CHANNEL_MESSAGE_REACTION_USER:(chanId,msgId,reaction,userId)=>`${Endpoints3.CHANNEL_MESSAGE_REACTION(chanId,msgId,reaction)}/${userId}`,CHANNEL_MESSAGE_REACTIONS:(chanId,msgId)=>`${Endpoints3.CHANNEL_MESSAGE(chanId,msgId)}/reactions`,CHANNEL_MESSAGE_THREADS:(chanId,msgId)=>`${Endpoints3.CHANNEL_MESSAGE(chanId,msgId)}/threads`,CHANNEL_MESSAGES:chanId=>`${Endpoints3.CHANNEL(chanId)}/messages`,CHANNEL_PERMISSION:(chanId,permId)=>`${Endpoints3.CHANNEL_PERMISSIONS(chanId)}/${permId}`,CHANNEL_PERMISSIONS:chanId=>`${Endpoints3.CHANNEL(chanId)}/permissions`,CHANNEL_PIN:(chanId,msgId)=>`${Endpoints3.CHANNEL_PINS(chanId)}/${msgId}`,CHANNEL_PINS:chanId=>`${Endpoints3.CHANNEL(chanId)}/messages/pins`,CHANNEL_RECIPIENT:(chanId,userId)=>`${Endpoints3.CHANNEL(chanId)}/recipients/${userId}`,CHANNEL_THREADS:chanId=>`${Endpoints3.CHANNEL(chanId)}/threads`,CHANNEL_THREAD_MEMBER:(chanId,memberId)=>`${Endpoints3.CHANNEL_THREAD_MEMBERS(chanId)}/${memberId}`,CHANNEL_THREAD_MEMBERS:chanId=>`${Endpoints3.CHANNEL(chanId)}/thread-members`,CHANNEL_THREADS_ARCHIVED_PRIVATE:chanId=>`${Endpoints3.CHANNEL_THREADS(chanId)}/archived/private`,CHANNEL_THREADS_ARCHIVED_PRIVATE_USER:chanId=>`${Endpoints3.CHANNEL(chanId)}/users/@me/threads/archived/private`,CHANNEL_THREADS_ARCHIVED_PUBLIC:chanId=>`${Endpoints3.CHANNEL_THREADS(chanId)}/archived/public`,CHANNEL_TYPING:chanId=>`${Endpoints3.CHANNEL(chanId)}/typing`,CHANNEL_VOICE_STATUS:chanId=>`${Endpoints3.CHANNEL(chanId)}/voice-status`,CHANNEL_WEBHOOKS:chanId=>`${Endpoints3.CHANNEL(chanId)}/webhooks`,CHANNELS:"/channels",GATEWAY:"/gateway",GATEWAY_BOT:"/gateway/bot",GUILD:guildId=>`${Endpoints3.GUILDS}/${guildId}`,GUILD_AUDIT_LOGS:guildId=>`${Endpoints3.GUILD(guildId)}/audit-logs`,GUILD_AUTO_MOD_RULE:(guildId,ruleId)=>`${Endpoints3.GUILD_AUTO_MOD_RULES(guildId)}/${ruleId}`,GUILD_AUTO_MOD_RULES:guildId=>`${Endpoints3.GUILD(guildId)}/auto-moderation/rules`,GUILD_BAN:(guildId,memberId)=>`${Endpoints3.GUILD_BANS(guildId)}/${memberId}`,GUILD_BANS:guildId=>`${Endpoints3.GUILD(guildId)}/bans`,GUILD_CHANNELS:guildId=>`${Endpoints3.GUILD(guildId)}/channels`,GUILD_EMOJI:(guildId,emojiId)=>`${Endpoints3.GUILD_EMOJIS(guildId)}/${emojiId}`,GUILD_EMOJIS:guildId=>`${Endpoints3.GUILD(guildId)}/emojis`,GUILD_INVITES:guildId=>`${Endpoints3.GUILD(guildId)}/invites`,GUILD_INTEGRATION:(guildId,integrationId)=>`${Endpoints3.GUILD_INTEGRATIONS(guildId)}/${integrationId}`,GUILD_INTEGRATIONS:guildId=>`${Endpoints3.GUILD(guildId)}/integrations`,GUILD_MEMBER:(guildId,memberId)=>`${Endpoints3.GUILD_MEMBERS(guildId)}/${memberId}`,GUILD_MEMBER_ROLE:(guildId,memberId,roleId)=>`${Endpoints3.GUILD_MEMBER(guildId,memberId)}/roles/${roleId}`,GUILD_MEMBERS:guildId=>`${Endpoints3.GUILD(guildId)}/members`,GUILD_MEMBERS_SEARCH:guildId=>`${Endpoints3.GUILD_MEMBERS(guildId)}/search`,GUILD_PREVIEW:guildId=>`${Endpoints3.GUILD(guildId)}/preview`,GUILD_PRUNE:guildId=>`${Endpoints3.GUILD(guildId)}/prune`,GUILD_ROLE:(guildId,roleId)=>`${Endpoints3.GUILD_ROLES(guildId)}/${roleId}`,GUILD_ROLES:guildId=>`${Endpoints3.GUILD(guildId)}/roles`,GUILD_SCHEDULED_EVENTS:guildId=>`${Endpoints3.GUILD(guildId)}/scheduled-events`,GUILD_SCHEDULED_EVENT:(guildId,eventId)=>`${Endpoints3.GUILD_SCHEDULED_EVENTS(guildId)}/${eventId}`,GUILD_SCHEDULED_EVENT_USERS:(guildId,eventId)=>`${Endpoints3.GUILD_SCHEDULED_EVENT(guildId,eventId)}/users`,GUILD_STICKER:(guildId,stickerId)=>`${Endpoints3.GUILD_STICKERS(guildId)}/${stickerId}`,GUILD_STICKERS:guildId=>`${Endpoints3.GUILD(guildId)}/stickers`,GUILD_TEMPLATE:(guildId,code)=>`${Endpoints3.GUILD_TEMPLATES(guildId)}/${code}`,GUILD_THREADS_ACTIVE:guildId=>`${Endpoints3.GUILD(guildId)}/threads/active`,GUILD_TEMPLATES:guildId=>`${Endpoints3.GUILD(guildId)}/templates`,GUILD_VANITY:guildId=>`${Endpoints3.GUILD(guildId)}/vanity-url`,GUILD_VOICE_REGIONS:guildId=>`${Endpoints3.GUILD(guildId)}/regions`,GUILD_VOICE_STATE_USER:(guildId,memberId)=>`${Endpoints3.GUILD(guildId)}/voice-states/${memberId}`,GUILD_WEBHOOKS:guildId=>`${Endpoints3.GUILD(guildId)}/webhooks`,GUILD_WELCOME_SCREEN:guildId=>`${Endpoints3.GUILD(guildId)}/welcome-screen`,GUILD_WIDGET:guildId=>`${Endpoints3.GUILD(guildId)}/widget.json`,GUILD_WIDGET_SETTINGS:guildId=>`${Endpoints3.GUILD(guildId)}/widget`,GUILDS:"/guilds",INTERACTION_CALLBACK:(interactionId,token)=>`/interactions/${interactionId}/${token}/callback`,INVITES:inviteId=>`/invites/${inviteId}`,INVITE_TARGET_USERS:inviteId=>`${Endpoints3.INVITES(inviteId)}/target-users`,INVITE_TARGET_USERS_JOB_STATUS:inviteId=>`${Endpoints3.INVITE_TARGET_USERS(inviteId)}/job-status`,OAUTH2_APPLICATION:appId=>`/oauth2/applications/${appId}`,OAUTH2_TOKEN:"/api/oauth2/token",POLL_ANSWER:(chanId,msgId,answerId)=>`${Endpoints3.CHANNEL(chanId)}/polls/${msgId}/answers/${answerId}`,POLL_EXPIRE:(chanId,msgId)=>`${Endpoints3.CHANNEL(chanId)}/polls/${msgId}/expire`,SKU_SUBSCRIPTIONS:skuId=>`/skus/${skuId}/subscriptions`,SKU_SUBSCRIPTION:(skuId,subscriptionId)=>`${Endpoints3.SKU_SUBSCRIPTIONS(skuId)}/${subscriptionId}`,STAGE_INSTANCE_CHANNEL:chanId=>`${Endpoints3.STAGE_INSTANCES}/${chanId}`,STAGE_INSTANCES:"/stage-instances",STICKER:stickerId=>`/stickers/${stickerId}`,TEMPLATE:code=>`/guilds/templates/${code}`,USER:userId=>`${Endpoints3.USERS}/${userId}`,USER_APPLICATION_ROLE_CONNECTION:(userId,appId)=>`${Endpoints3.USER(userId)}/applications/${appId}/role-connection`,USER_CHANNELS:userId=>`${Endpoints3.USER(userId)}/channels`,USER_CONNECTIONS:userId=>`${Endpoints3.USER(userId)}/connections`,USER_GUILD:(userId,guildId)=>`${Endpoints3.USER_GUILDS(userId)}/${guildId}`,USER_GUILDS:userId=>`${Endpoints3.USER(userId)}/guilds`,USER_GUILD_VOICE_STATE:(guildId,userId)=>`${Endpoints3.GUILD(guildId)}/voice-states/${userId}`,USERS:"/users",VOICE_REGIONS:"/voice/regions",WEBHOOK:hookId=>`/webhooks/${hookId}`,WEBHOOK_TOKEN:(hookId,token)=>`${Endpoints3.WEBHOOK(hookId)}/${token}`,WEBHOOK_TOKEN_GITHUB:(hookId,token)=>`${Endpoints3.WEBHOOK_TOKEN(hookId,token)}/github`,WEBHOOK_TOKEN_MESSAGE:(hookId,token,msgId)=>`/webhooks/${hookId}/${token}/messages/${msgId}`,WEBHOOK_TOKEN_SLACK:(hookId,token)=>`${Endpoints3.WEBHOOK_TOKEN(hookId,token)}/slack`};module.exports=Endpoints3;}});function appendQuery(query){let count=0;for(let[key,value]of Object.entries(query))value==null?delete query[key]:count++;return count>0?`?${new URLSearchParams(query).toString()}`:""}var fs,path,crypto,util,Endpoints,version,Constants,SM2,routeRegex,reactionsRegex,reactionsUserRegex,webhooksRegex,isMessageEndpointRegex,isGuildChannelsRegex,messagesRegex,disallowedBodyMethods;exports.DiscordAPIError = void 0;exports.IntervalCounter = void 0;exports.LeakyCounter = void 0;exports.Bucket = void 0;exports.Ratelimiter = void 0;exports.RequestHandler = void 0;var init_RequestHandler=__esm({"src/RequestHandler.ts"(){fs=__require("fs"),path=__require("path"),crypto=__require("crypto"),util=__require("util"),Endpoints=require_Endpoints(),{version}=JSON.parse(fs.readFileSync(path.join(__dirname,"../package.json"),{encoding:"utf8"})),Constants=require_Constants(),SM2=require_StateMachine(),routeRegex=/\/([a-z-]+)\/(?:\d+)/g,reactionsRegex=/\/reactions\/[^/]+/g,reactionsUserRegex=/\/reactions\/:id\/[^/]+/g,webhooksRegex=/^\/webhooks\/(\d+)\/[A-Za-z0-9-_]{64,}/,isMessageEndpointRegex=/\/messages\/:id$/,isGuildChannelsRegex=/\/guilds\/\d+\/channels$/,messagesRegex=/\/messages\/\d+$/,disallowedBodyMethods=new Set(["head","get","delete"]),exports.DiscordAPIError=class extends Error{method;path;code;httpStatus;request;response;constructor(error,request,response){super(),this.name="DiscordAPIError",this.message=error.message??util.inspect(error),this.method=request.method,this.path=request.endpoint,this.code=error.code??4e3,this.httpStatus=response.status,Object.defineProperties(this,{request:{enumerable:false,value:request},response:{enumerable:false,value:response}});}},exports.IntervalCounter=class{constructor(limit,reset){this.limit=limit;this.reset=reset;this.remaining=limit;}remaining;firstRequestTime=0;resetAt=null;id=new Array(3).fill(0).map(()=>String.fromCodePoint(Math.floor(Math.random()*26+65))).join("");checkReset(){let now=Date.now();this.resetAt!==null?now>this.resetAt&&(this.firstRequestTime=0,this.remaining=this.limit,this.resetAt=null,globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [itrv] [${this.id}] informed reset: ${this.remaining}/${this.limit}`)):now>this.firstRequestTime+this.reset&&(this.firstRequestTime=0,this.remaining=this.limit,globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [itrv] [${this.id}] predicted reset: ${this.remaining}/${this.limit}`));}hasReset(){return this.checkReset(),this.remaining===this.limit}canTake(){return this.checkReset(),this.remaining>0}take(){this.checkReset(),this.remaining===this.limit&&(this.firstRequestTime=Date.now());let ok=this.remaining>0;return this.remaining--,ok}timeUntilReset(){let now=Date.now();return this.resetAt?Math.max(this.resetAt-now+1,0):Math.max(this.firstRequestTime+this.reset-Date.now()+1,0)}responseReceived(){this.remaining===this.limit-1&&this.firstRequestTime&&(this.firstRequestTime=Date.now());}applyCount(limit,remaining,resetAfter){limit!=null&&(this.limit=limit),this.remaining=remaining,this.resetAt=Date.now()+resetAfter;}},exports.LeakyCounter=class{constructor(limit){this.limit=limit;this.remaining=limit;}remaining;resetAt=null;id=new Array(3).fill(0).map(()=>String.fromCodePoint(Math.floor(Math.random()*26+65))).join("");checkReset(){let now=Date.now();this.resetAt&&now>this.resetAt&&(this.remaining=Math.min(this.limit,this.remaining+1),this.resetAt=null,globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [leak] [${this.id}] restore one: ${this.remaining}/${this.limit}`));}hasReset(){return this.checkReset(),this.remaining===this.limit}canTake(){return this.checkReset(),this.remaining>0}take(){return this.checkReset(),globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [leak] [${this.id}] took: ${this.remaining-1} left`),this.remaining-- >0}timeUntilReset(){let now=Date.now();return this.resetAt?Math.max(this.resetAt-now+1,0):0}responseReceived(){}applyCount(limit,remaining,resetAfter){limit!=null&&(this.limit=limit),this.remaining=remaining,this.resetAt=Date.now()+resetAfter,globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [leak] [${this.id}] applied: ${remaining}/${limit} - wait another ${resetAfter}`);}},exports.Bucket=class{sm=new SM2("ready");calls=[];counters=[];pauseRequested=false;constructor(counters){this.counters=counters,this.sm.defineState("ready",{onEnter:[],onLeave:[],transitions:new Map([["enqueue",{destination:"check"}],["pause",{destination:"paused"}]])}),this.sm.defineState("check",{onEnter:[()=>this.pauseRequested?this.sm.doTransition("pause"):this.counters.every(c=>c.canTake())?this.calls.length?this.sm.doTransition("run"):this.sm.doTransition("empty"):this.sm.doTransition("cooldown")],onLeave:[],transitions:new Map([["pause",{destination:"paused"}],["cooldown",{destination:"cooldown"}],["run",{destination:"running"}],["empty",{destination:"ready"}]])}),this.sm.defineState("running",{onEnter:[()=>{this.counters.forEach(c=>c.take()),this.calls.shift()().then(()=>{this.sm.doTransition("complete");});}],onLeave:[],transitions:new Map([["complete",{destination:"check"}]])}),this.sm.defineState("cooldown",{onEnter:[()=>{this.sm.doTransitionLater("reset",Math.max(...this.counters.map(c=>c.timeUntilReset())));}],onLeave:[],transitions:new Map([["reset",{destination:"check"}]])}),this.sm.defineState("paused",{onEnter:[],onLeave:[()=>{this.pauseRequested=false;}],transitions:new Map([["resume",{destination:"check"}]])}),this.sm.freeze();}enqueue(fn){return new Promise((resolve,reject)=>{this.calls.push(()=>fn(this).then(resolve).catch(reject)),this.sm.currentStateName==="ready"&&this.sm.doTransition("enqueue");})}pause(){this.pauseRequested=true,this.sm.currentStateName==="ready"&&this.sm.doTransition("pause");}resume(){this.pauseRequested=false,this.sm.currentStateName==="paused"&&this.sm.doTransition("resume");}dropQueue(){this.calls.length=0;}},exports.Ratelimiter=class{buckets=new Map;globalBucket=new exports.Bucket([new exports.IntervalCounter(Constants.GLOBAL_REQUESTS_PER_SECOND,1e3)]);get global(){return !this.globalBucket.counters[0].canTake()}constructor(){setInterval(()=>{for(let[key,value]of this.buckets.entries())value.counters[0].hasReset()&&this.buckets.delete(key);},3600*1e3).unref();}routify(url,method){let route=url.replaceAll(routeRegex,function(match,p){return p==="channels"||p==="guilds"||p==="webhooks"?match:`/${p}/:id`}).replaceAll(reactionsRegex,"/reactions/:id").replaceAll(reactionsUserRegex,"/reactions/:id/:userId").replace(webhooksRegex,"/webhooks/$1/:token");if(method==="DELETE"&&isMessageEndpointRegex.test(route)?route=method+route:method==="GET"&&isGuildChannelsRegex.test(route)&&(route="/guilds/:id/channels"),method==="PUT"||method==="DELETE"){let index=route.indexOf("/reactions");index!==-1&&(route="MODIFY"+route.slice(0,index+10));}return route}queue(fn,url,method){let routeKey=this.routify(url,method),bucket=this.buckets.get(routeKey);return bucket||(method==="DELETE"&&messagesRegex.test(url)?bucket=new exports.Bucket([new exports.LeakyCounter(1),new exports.IntervalCounter(5,5e3),this.globalBucket.counters[0]]):bucket=new exports.Bucket([new exports.LeakyCounter(1),this.globalBucket.counters[0]]),this.buckets.set(routeKey,bucket)),bucket.enqueue(fn)}setGlobal(ms){this.globalBucket.counters[0].applyCount(Constants.GLOBAL_REQUESTS_PER_SECOND,0,ms);}},exports.RequestHandler=class extends events.EventEmitter{constructor(ratelimiter,options){super();this.ratelimiter=ratelimiter;this.options={baseHost:options?.baseHost??Endpoints.BASE_HOST,baseURL:options?.baseURL??Endpoints.BASE_URL,bypassBuckets:options?.bypassBuckets??false,retryFailed:options?.retryFailed??false,retryLimit:options?.retryLimit??Constants.DEFAULT_RETRY_LIMIT,headers:{"User-Agent":`Discordbot (https://github.com/DasWolke/SnowTransfer, ${version}) Node.js/${process.version}`},fetch:options?.fetch??fetch},options?.token&&(this.options.headers.Authorization=options.token),this.apiURL=this.options.baseHost+Endpoints.BASE_URL,this.latency=500;}options;latency;apiURL;request(endpoint,params={},method,dataType,data,extraHeaders,retries=this.options.retryLimit,rawResponse=false){let stack=new Error().stack;return new Promise(async(resolve,reject)=>{let fn=async bkt=>{let reqId=crypto.randomBytes(20).toString("hex");try{let request={endpoint,method:method.toUpperCase(),dataType,data:data??{}};this.emit("request",reqId,request);let before=Date.now(),response;switch(dataType){case "json":response=await this._request(endpoint,params,method,data,extraHeaders);break;case "multipart":if(!data)throw new Error("No multipart data");response=await this._multiPartRequest(endpoint,params,method,data,extraHeaders);break;default:throw new Error("Forbidden dataType. Use json or multipart or ensure multipart has FormData")}if(this.latency=Date.now()-before,bkt?.counters.forEach(c=>c.responseReceived()),bkt&&this._applyRatelimitHeaders(bkt,response.headers),response.status&&!Constants.OK_STATUS_CODES.has(response.status)&&response.status!==429){if(this.options.retryFailed&&!Constants.DO_NOT_RETRY_STATUS_CODES.has(response.status)&&retries!==0)return this.request(endpoint,params,method,dataType,data,extraHeaders,retries--).then(resolve).catch(reject);throw new exports.DiscordAPIError({message:await response.text()},request,response)}if(response.status===429){let b=await response.json();if(b.global&&this.ratelimiter.setGlobal(b.retry_after*1e3),globalThis.snowtransferDebugLogging&&console.log(`${new Date().toISOString()} [rate] [${bkt?.counters[0].id}] !! 429 - guess there was 0 remaining, wait another ${b.retry_after*1e3} (route: ${this.ratelimiter.routify(endpoint,method.toUpperCase())})`),this.emit("rateLimit",{method:method.toUpperCase(),path:endpoint,route:this.ratelimiter.routify(endpoint,method.toUpperCase())}),this.options.retryFailed&&retries!==0)return this.request(endpoint,params,method,dataType,data,extraHeaders,0).then(resolve).catch(reject);throw new exports.DiscordAPIError({message:b.message,code:b.code??429},request,response)}if(this.emit("done",reqId,response,request),rawResponse)return resolve(response);if(response.body){let b;try{b=await response.json();}catch{return resolve(void 0)}return resolve(b)}else return resolve(void 0)}catch(error){return error?.stack&&(error.stack=error.stack+`
10
10
  ${stack.split(`
11
11
  `).slice(1).join(`
12
12
  `)}`),this.emit("requestError",reqId,error),reject(error)}};this.options.bypassBuckets?fn():this.ratelimiter.queue(fn,endpoint,method.toUpperCase());})}_applyRatelimitHeaders(bkt,headers){let remaining=headers.get("x-ratelimit-remaining"),limit=headers.get("x-ratelimit-limit"),resetAfter=headers.get("x-ratelimit-reset-after"),isGlobal=headers.get("x-ratelimit-global");remaining===null&&!bkt.counters[0].canTake()&&!isGlobal&&bkt.counters[0].applyCount(null,1,0),remaining&&limit&&resetAfter&&!isGlobal&&bkt.counters[0].applyCount(Number.parseInt(limit),Number.parseInt(remaining),Number.parseFloat(resetAfter)*1e3);}async _request(endpoint,params={},method,data,extraHeaders){let headers={...this.options.headers,...extraHeaders},body;return disallowedBodyMethods.has(method)||(typeof data=="object"?body=JSON.stringify(data):body=String(data),headers["Content-Type"]="application/json"),this.options.fetch(`${this.apiURL}${endpoint}${appendQuery(params)}`,{method:method.toUpperCase(),headers,body})}async _multiPartRequest(endpoint,params={},method,data,extraHeaders){let headers={...this.options.headers,...extraHeaders};return this.options.fetch(`${this.apiURL}${endpoint}${appendQuery(params)}`,{method:method.toUpperCase(),headers,body:data})}};}});var require_AuditLog=__commonJS({"src/methods/AuditLog.ts"(exports,module){var Endpoints3=require_Endpoints(),AuditLogMethods=class{constructor(requestHandler){this.requestHandler=requestHandler;}async getAuditLog(guildId,options){return this.requestHandler.request(Endpoints3.GUILD_AUDIT_LOGS(guildId),options,"get","json")}};module.exports=AuditLogMethods;}});var require_AutoModeration=__commonJS({"src/methods/AutoModeration.ts"(exports,module){var Endpoints3=require_Endpoints(),Constants3=require_Constants(),AutoModerationMethods=class{constructor(requestHandler){this.requestHandler=requestHandler;}async getAutoModerationRules(guildId){return this.requestHandler.request(Endpoints3.GUILD_AUTO_MOD_RULES(guildId),{},"get","json")}async getAutoModerationRule(guildId,ruleId){return this.requestHandler.request(Endpoints3.GUILD_AUTO_MOD_RULE(guildId,ruleId),{},"get","json")}async createAutoModerationRule(guildId,data,reason){return this.requestHandler.request(Endpoints3.GUILD_AUTO_MOD_RULES(guildId),{},"post","json",data,Constants3.reasonHeader(reason))}async editAutoModerationRule(guildId,ruleId,data,reason){return this.requestHandler.request(Endpoints3.GUILD_AUTO_MOD_RULE(guildId,ruleId),{},"patch","json",data,Constants3.reasonHeader(reason))}async deleteAutoModerationRule(guildId,ruleId,reason){return this.requestHandler.request(Endpoints3.GUILD_AUTO_MOD_RULE(guildId,ruleId),{},"delete","json",{},Constants3.reasonHeader(reason))}};module.exports=AutoModerationMethods;}});var require_Bot=__commonJS({"src/methods/Bot.ts"(exports,module){var Endpoints3=require_Endpoints(),BotMethods=class{constructor(requestHandler){this.requestHandler=requestHandler;}async getGateway(){return this.requestHandler.request(Endpoints3.GATEWAY,{},"get","json")}async getGatewayBot(){return this.requestHandler.request(Endpoints3.GATEWAY_BOT,{},"get","json")}async getApplicationInfo(){return this.requestHandler.request(Endpoints3.OAUTH2_APPLICATION("@me"),{},"get","json")}async updateApplicationInfo(data){return this.requestHandler.request(Endpoints3.OAUTH2_APPLICATION("@me"),{},"patch","json",data)}};module.exports=BotMethods;}});var require_Channel=__commonJS({"src/methods/Channel.ts"(exports,module){var Endpoints3=require_Endpoints(),Constants3=require_Constants(),ChannelMethods=class{constructor(requestHandler,options){this.requestHandler=requestHandler;this.options=options;}async getChannel(channelId){return this.requestHandler.request(Endpoints3.CHANNEL(channelId),{},"get","json")}async updateChannel(channelId,data,reason){return this.requestHandler.request(Endpoints3.CHANNEL(channelId),{},"patch","json",data,Constants3.reasonHeader(reason))}async deleteChannel(channelId,reason){return this.requestHandler.request(Endpoints3.CHANNEL(channelId),{},"delete","json",{},Constants3.reasonHeader(reason))}async getChannelMessages(channelId,options={limit:50}){if(options.around?(delete options.before,delete options.after):options.before?(delete options.around,delete options.after):options.after&&(delete options.before,delete options.around),options.limit!==void 0&&(options.limit<Constants3.GET_CHANNEL_MESSAGES_MIN_RESULTS||options.limit>Constants3.GET_CHANNEL_MESSAGES_MAX_RESULTS))throw new RangeError(`Amount of messages that may be requested has to be between ${Constants3.GET_CHANNEL_MESSAGES_MIN_RESULTS} and ${Constants3.GET_CHANNEL_MESSAGES_MAX_RESULTS}`);return this.requestHandler.request(Endpoints3.CHANNEL_MESSAGES(channelId),options,"get","json")}async getChannelMessage(channelId,messageId){return this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE(channelId,messageId),{},"get","json")}async createMessage(channelId,data){if(typeof data!="string"&&!data.content&&(!data.message_reference||data.message_reference&&data.message_reference.type===v10.MessageReferenceType.Default)&&!data.embeds&&!data.sticker_ids&&!data.components&&!data.files&&!data.poll)throw new Error("Missing content, message_reference type 1, embeds, sticker_ids, components, files, or poll");if(typeof data=="string"&&(data={content:data}),(data.content||data.embeds)&&data.flags&&(data.flags&v10.MessageFlags.IsComponentsV2)===v10.MessageFlags.IsComponentsV2)throw new Error("The message flags was set to include IsComponentsV2, but content and/or embeds were also present. You can either have content/embeds or components v2, not both.");return data.allowed_mentions??=this.options.allowed_mentions,data.files?this.requestHandler.request(Endpoints3.CHANNEL_MESSAGES(channelId),{},"post","multipart",await Constants3.standardMultipartHandler(data)):this.requestHandler.request(Endpoints3.CHANNEL_MESSAGES(channelId),{},"post","json",data)}async createVoiceMessage(channelId,data,audioDurationSeconds,waveform=""){let{upload_url,upload_filename}=await this.requestHandler.request(Endpoints3.CHANNEL_ATTACHMENTS(channelId),{},"post","json",{files:[{id:"69420",filename:"voice-message.ogg",file_size:data.byteLength}]}).then(d=>d.attachments[0]);return await fetch(upload_url,{method:"PUT",body:data}),this.requestHandler.request(Endpoints3.CHANNEL_MESSAGES(channelId),{},"post","json",{attachments:[{id:"42069",uploaded_filename:upload_filename,filename:"voice-message.ogg",duration_secs:audioDurationSeconds,waveform}],flags:8192})}async crosspostMessage(channelId,messageId){return this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE_CROSSPOST(channelId,messageId),{},"post","json")}async createReaction(channelId,messageId,emoji){return this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE_REACTION_USER(channelId,messageId,emoji,"@me"),{},"put","json")}async deleteReactionSelf(channelId,messageId,emoji){return this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE_REACTION_USER(channelId,messageId,emoji,"@me"),{},"delete","json")}async deleteReaction(channelId,messageId,emoji,userId){return this.requestHandler.request(userId?Endpoints3.CHANNEL_MESSAGE_REACTION_USER(channelId,messageId,emoji,userId):Endpoints3.CHANNEL_MESSAGE_REACTION(channelId,messageId,emoji),{},"delete","json")}async getReactions(channelId,messageId,emoji,options){return this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE_REACTION(channelId,messageId,emoji),options,"get","json")}async deleteAllReactions(channelId,messageId){return this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE_REACTIONS(channelId,messageId),{},"delete","json")}async editMessage(channelId,messageId,data){return typeof data=="string"&&(data={content:data}),(data.content||data.components)&&(data.allowed_mentions??=this.options.allowed_mentions),data.files?this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE(channelId,messageId),{},"patch","multipart",await Constants3.standardMultipartHandler(data)):this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE(channelId,messageId),{},"patch","json",data)}async deleteMessage(channelId,messageId,reason){return this.requestHandler.request(Endpoints3.CHANNEL_MESSAGE(channelId,messageId),{},"delete","json",{},Constants3.reasonHeader(reason))}async bulkDeleteMessages(channelId,messages,reason){if(messages.length<Constants3.BULK_DELETE_MESSAGES_MIN||messages.length>Constants3.BULK_DELETE_MESSAGES_MAX)throw new RangeError(`Amount of messages to be deleted has to be between ${Constants3.BULK_DELETE_MESSAGES_MIN} and ${Constants3.BULK_DELETE_MESSAGES_MAX}`);let oldestSnowflake=BigInt(Date.now()-142128e7)*BigInt(2)**BigInt(22),forbiddenMessage=messages.find(m=>BigInt(m)<oldestSnowflake);if(forbiddenMessage)throw new Error(`The message ${forbiddenMessage} is older than 2 weeks and may not be deleted using the bulk delete endpoint`);let data={messages};return this.requestHandler.request(Endpoints3.CHANNEL_BULK_DELETE(channelId),{},"post","json",data,Constants3.reasonHeader(reason))}async editChannelPermission(channelId,permissionId,data,reason){return this.requestHandler.request(Endpoints3.CHANNEL_PERMISSION(channelId,permissionId),{},"put","json",data,Constants3.reasonHeader(reason))}async getChannelInvites(channelId){return this.requestHandler.request(Endpoints3.CHANNEL_INVITES(channelId),{},"get","json")}async createChannelInvite(channelId,data={max_age:86400,max_uses:0,temporary:false,unique:false},reason){let targetUsers=data?.target_users;if(targetUsers?.length){delete data.target_users;let form=new FormData;return await Constants3.standardAddToFormHandler(form,"target_users_file",`Users