@discordeno/rest 19.0.0-next.fbd26f4 → 19.0.0-next.fc13bdf
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 +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -0
- package/dist/invalidBucket.d.ts.map +1 -1
- package/dist/invalidBucket.js +84 -2
- package/dist/invalidBucket.js.map +1 -0
- package/dist/manager.d.ts +1 -2683
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +1416 -2
- package/dist/manager.js.map +1 -0
- package/dist/queue.d.ts +3 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +153 -2
- package/dist/queue.js.map +1 -0
- package/dist/types.d.ts +2415 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/typings/routes.d.ts +238 -0
- package/dist/typings/routes.d.ts.map +1 -0
- package/dist/typings/routes.js +3 -0
- package/dist/typings/routes.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/manager.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/restrict-template-expressions */\n/* eslint-disable no-const-assign */\nimport { InteractionResponseTypes } from '@discordeno/types'\nimport {\n calculateBits,\n camelize,\n camelToSnakeCase,\n delay,\n findFiles,\n getBotIdFromToken,\n isGetMessagesAfter,\n isGetMessagesAround,\n isGetMessagesBefore,\n isGetMessagesLimit,\n logger,\n processReactionString,\n urlToBase64,\n} from '@discordeno/utils'\n\nimport { createInvalidRequestBucket } from './invalidBucket.js'\nimport { Queue } from './queue.js'\n\nimport type {\n BigString,\n Camelize,\n DiscordApplication,\n DiscordApplicationCommand,\n DiscordApplicationCommandPermissions,\n DiscordAuditLog,\n DiscordAutoModerationRule,\n DiscordBan,\n DiscordChannel,\n DiscordEmoji,\n DiscordFollowAnnouncementChannel,\n DiscordFollowedChannel,\n DiscordGetGatewayBot,\n DiscordGuild,\n DiscordGuildPreview,\n DiscordGuildWidget,\n DiscordGuildWidgetSettings,\n DiscordIntegration,\n DiscordInvite,\n DiscordInviteMetadata,\n DiscordListActiveThreads,\n DiscordListArchivedThreads,\n DiscordMember,\n DiscordMemberWithUser,\n DiscordMessage,\n DiscordPrunedCount,\n DiscordRole,\n DiscordScheduledEvent,\n DiscordStageInstance,\n DiscordSticker,\n DiscordStickerPack,\n DiscordTemplate,\n DiscordThreadMember,\n DiscordUser,\n DiscordVanityUrl,\n DiscordVoiceRegion,\n DiscordWebhook,\n DiscordWelcomeScreen,\n GetMessagesOptions,\n GetScheduledEventUsers,\n MfaLevels,\n ModifyGuildTemplate,\n} from '@discordeno/types'\nimport type { CreateRestManagerOptions, RestManager, SendRequestOptions } from './types.js'\n\n// TODO: make dynamic based on package.json file\nconst version = '19.0.0-alpha.1'\n\nexport function createRestManager(options: CreateRestManagerOptions): RestManager {\n // Falsy token string check\n if (!options.token) throw new Error('You must provide a valid token.')\n\n const rest: RestManager = {\n token: options.token,\n applicationId: options.applicationId ? BigInt(options.applicationId) : getBotIdFromToken(options.token),\n version: options.version ?? 10,\n baseUrl: options.baseUrl ?? 'https://discord.com/api',\n maxRetryCount: Infinity,\n globallyRateLimited: false,\n processingRateLimitedPaths: false,\n deleteQueueDelay: 60000,\n queues: new Map(),\n rateLimitedPaths: new Map(),\n invalidBucket: createInvalidRequestBucket({}),\n\n routes: {\n webhooks: {\n id: (webhookId) => {\n return `/webhooks/${webhookId}`\n },\n message: (webhookId, token, messageId, options) => {\n let url = `/webhooks/${webhookId}/${token}/messages/${messageId}?`\n\n if (options) {\n if (options.threadId) url += `thread_id=${options.threadId}`\n }\n\n return url\n },\n original: (webhookId, token, options) => {\n let url = `/webhooks/${webhookId}/${token}/messages/@original?`\n\n if (options) {\n if (options.threadId) url += `thread_id=${options.threadId}`\n }\n\n return url\n },\n webhook: (webhookId, token, options) => {\n let url = `/webhooks/${webhookId}/${token}?`\n\n if (options) {\n if (options?.wait !== undefined) url += `wait=${options.wait.toString()}`\n if (options.threadId) url += `thread_id=${options.threadId}`\n }\n\n return url\n },\n },\n\n // Miscellaneous Endpoints\n sessionInfo: () => rest.routes.gatewayBot(),\n\n // Channel Endpoints\n channels: {\n bulk: (channelId) => {\n return `/channels/${channelId}/messages/bulk-delete`\n },\n dm: () => {\n return '/users/@me/channels'\n },\n pin: (channelId, messageId) => {\n return `/channels/${channelId}/pins/${messageId}`\n },\n pins: (channelId) => {\n return `/channels/${channelId}/pins`\n },\n reactions: {\n bot: (channelId, messageId, emoji) => {\n return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/@me`\n },\n user: (channelId, messageId, emoji, userId) => {\n return `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/${userId}`\n },\n all: (channelId, messageId) => {\n return `/channels/${channelId}/messages/${messageId}/reactions`\n },\n emoji: (channelId, messageId, emoji, options) => {\n let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n message: (channelId, messageId, emoji, options) => {\n let url = `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n },\n webhooks: (channelId) => {\n return `/channels/${channelId}/webhooks`\n },\n\n channel: (channelId) => {\n return `/channels/${channelId}`\n },\n\n follow: (channelId) => {\n return `/channels/${channelId}/followers`\n },\n\n forum: (channelId) => {\n return `/channels/${channelId}/threads?has_message=true`\n },\n\n invites: (channelId) => {\n return `/channels/${channelId}/invites`\n },\n\n message: (channelId, messageId) => {\n return `/channels/${channelId}/messages/${messageId}`\n },\n\n messages: (channelId, options?: GetMessagesOptions) => {\n let url = `/channels/${channelId}/messages?`\n\n if (options) {\n if (isGetMessagesAfter(options) && options.after) {\n url += `after=${options.after}`\n }\n if (isGetMessagesBefore(options) && options.before) {\n url += `&before=${options.before}`\n }\n if (isGetMessagesAround(options) && options.around) {\n url += `&around=${options.around}`\n }\n if (isGetMessagesLimit(options) && options.limit) {\n url += `&limit=${options.limit}`\n }\n }\n\n return url\n },\n\n overwrite: (channelId, overwriteId) => {\n return `/channels/${channelId}/permissions/${overwriteId}`\n },\n\n crosspost: (channelId, messageId) => {\n return `/channels/${channelId}/messages/${messageId}/crosspost`\n },\n\n stages: () => {\n return '/stage-instances'\n },\n\n stage: (channelId) => {\n return `/stage-instances/${channelId}`\n },\n\n // Thread Endpoints\n threads: {\n message: (channelId, messageId) => {\n return `/channels/${channelId}/messages/${messageId}/threads`\n },\n all: (channelId) => {\n return `/channels/${channelId}/threads`\n },\n active: (guildId) => {\n return `/guilds/${guildId}/threads/active`\n },\n members: (channelId) => {\n return `/channels/${channelId}/thread-members`\n },\n me: (channelId) => {\n return `/channels/${channelId}/thread-members/@me`\n },\n user: (channelId, userId) => {\n return `/channels/${channelId}/thread-members/${userId}`\n },\n archived: (channelId) => {\n return `/channels/${channelId}/threads/archived`\n },\n public: (channelId, options) => {\n let url = `/channels/${channelId}/threads/archived/public?`\n\n if (options) {\n if (options.before) {\n url += `before=${new Date(options.before).toISOString()}`\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n private: (channelId, options) => {\n let url = `/channels/${channelId}/threads/archived/private?`\n\n if (options) {\n if (options.before) {\n url += `before=${new Date(options.before).toISOString()}`\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n joined: (channelId, options) => {\n let url = `/channels/${channelId}/users/@me/threads/archived/private?`\n\n if (options) {\n if (options.before) {\n url += `before=${new Date(options.before).toISOString()}`\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n }\n\n return url\n },\n },\n\n typing: (channelId) => {\n return `/channels/${channelId}/typing`\n },\n },\n\n // Guild Endpoints\n guilds: {\n all: () => {\n return '/guilds'\n },\n auditlogs: (guildId, options) => {\n let url = `/guilds/${guildId}/audit-logs?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.actionType) url += `action_type=${options.actionType}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.before) url += `&before=${options.before}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `&limit=${options.limit}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.userId) url += `&user_id=${options.userId}`\n }\n\n return url\n },\n automod: {\n rule: (guildId, ruleId) => {\n return `/guilds/${guildId}/auto-moderation/rules/${ruleId}`\n },\n rules: (guildId) => {\n return `/guilds/${guildId}/auto-moderation/rules`\n },\n },\n channels: (guildId) => {\n return `/guilds/${guildId}/channels`\n },\n emoji: (guildId, emojiId) => {\n return `/guilds/${guildId}/emojis/${emojiId}`\n },\n emojis: (guildId) => {\n return `/guilds/${guildId}/emojis`\n },\n events: {\n events: (guildId, withUserCount?: boolean) => {\n let url = `/guilds/${guildId}/scheduled-events?`\n\n if (withUserCount !== undefined) {\n url += `with_user_count=${withUserCount.toString()}`\n }\n return url\n },\n event: (guildId, eventId, withUserCount?: boolean) => {\n let url = `/guilds/${guildId}/scheduled-events/${eventId}`\n\n if (withUserCount !== undefined) {\n url += `with_user_count=${withUserCount.toString()}`\n }\n\n return url\n },\n users: (guildId, eventId, options?: GetScheduledEventUsers) => {\n let url = `/guilds/${guildId}/scheduled-events/${eventId}/users?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit !== undefined) url += `limit=${options.limit}`\n if (options.withMember !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&with_member=${options.withMember.toString()}`\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after !== undefined) url += `&after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.before !== undefined) url += `&before=${options.before}`\n }\n\n return url\n },\n },\n guild(guildId, withCounts) {\n let url = `/guilds/${guildId}?`\n\n if (withCounts !== undefined) {\n url += `with_counts=${withCounts.toString()}`\n }\n\n return url\n },\n integration(guildId, integrationId) {\n return `/guilds/${guildId}/integrations/${integrationId}`\n },\n integrations: (guildId) => {\n return `/guilds/${guildId}/integrations?include_applications=true`\n },\n invite(inviteCode, options) {\n let url = `/invites/${inviteCode}?`\n\n if (options) {\n if (options.withCounts !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `with_counts=${options.withCounts.toString()}`\n }\n if (options.withExpiration !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&with_expiration=${options.withExpiration.toString()}`\n }\n if (options.scheduledEventId) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&guild_scheduled_event_id=${options.scheduledEventId}`\n }\n }\n\n return url\n },\n invites: (guildId) => {\n return `/guilds/${guildId}/invites`\n },\n leave: (guildId) => {\n return `/users/@me/guilds/${guildId}`\n },\n members: {\n ban: (guildId, userId) => {\n return `/guilds/${guildId}/bans/${userId}`\n },\n bans: (guildId, options) => {\n let url = `/guilds/${guildId}/bans?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `limit=${options.limit}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `&after=${options.after}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.before) url += `&before=${options.before}`\n }\n\n return url\n },\n bot: (guildId) => {\n return `/guilds/${guildId}/members/@me`\n },\n member: (guildId, userId) => {\n return `/guilds/${guildId}/members/${userId}`\n },\n members: (guildId, options) => {\n let url = `/guilds/${guildId}/members?`\n\n if (options !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.limit) url += `limit=${options.limit}`\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.after) url += `&after=${options.after}`\n }\n\n return url\n },\n search: (guildId, query, options) => {\n let url = `/guilds/${guildId}/members/search?query=${encodeURIComponent(query)}`\n\n if (options) {\n if (options.limit !== undefined) url += `&limit=${options.limit}`\n }\n\n return url\n },\n prune: (guildId, options) => {\n let url = `/guilds/${guildId}/prune?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.days) url += `days=${options.days}`\n if (Array.isArray(options.includeRoles)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&include_roles=${options.includeRoles.join(',')}`\n } else if (options.includeRoles) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&include_roles=${options.includeRoles}`\n }\n }\n\n return url\n },\n },\n mfa: (guildId) => `/guilds/${guildId}/mfa`,\n preview: (guildId) => {\n return `/guilds/${guildId}/preview`\n },\n prune: (guildId, options) => {\n let url = `/guilds/${guildId}/prune?`\n\n if (options) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n if (options.days) url += `days=${options.days}`\n if (Array.isArray(options.includeRoles)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&include_roles=${options.includeRoles.join(',')}`\n } else if (options.includeRoles) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n url += `&include_roles=${options.includeRoles}`\n }\n }\n\n return url\n },\n roles: {\n one: (guildId, roleId) => {\n return `/guilds/${guildId}/roles/${roleId}`\n },\n all: (guildId) => {\n return `/guilds/${guildId}/roles`\n },\n member: (guildId, memberId, roleId) => {\n return `/guilds/${guildId}/members/${memberId}/roles/${roleId}`\n },\n },\n stickers: (guildId) => {\n return `/guilds/${guildId}/stickers`\n },\n sticker: (guildId, stickerId) => {\n return `/guilds/${guildId}/stickers/${stickerId}`\n },\n voice: (guildId, userId) => {\n return `/guilds/${guildId}/voice-states/${userId ?? '@me'}`\n },\n templates: {\n code: (code) => {\n return `/guilds/templates/${code}`\n },\n guild: (guildId, code) => {\n return `/guilds/${guildId}/templates/${code}`\n },\n all: (guildId) => {\n return `/guilds/${guildId}/templates`\n },\n },\n vanity: (guildId) => {\n return `/guilds/${guildId}/vanity-url`\n },\n regions: (guildId) => {\n return `/guilds/${guildId}/regions`\n },\n webhooks: (guildId) => {\n return `/guilds/${guildId}/webhooks`\n },\n welcome: (guildId) => {\n return `/guilds/${guildId}/welcome-screen`\n },\n widget: (guildId) => {\n return `/guilds/${guildId}/widget`\n },\n widgetJson: (guildId) => {\n return `/guilds/${guildId}/widget.json`\n },\n },\n\n sticker: (stickerId: BigString) => {\n return `/stickers/${stickerId}`\n },\n\n regions: () => {\n return '/voice/regions'\n },\n\n // Interaction Endpoints\n interactions: {\n commands: {\n // Application Endpoints\n commands: (applicationId) => {\n return `/applications/${applicationId}/commands`\n },\n\n guilds: {\n all(applicationId, guildId) {\n return `/applications/${applicationId}/guilds/${guildId}/commands`\n },\n\n one(applicationId, guildId, commandId, withLocalizations) {\n let url = `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}?`\n\n if (withLocalizations !== undefined) {\n url += `with_localizations=${withLocalizations.toString()}`\n }\n\n return url\n },\n },\n permissions: (applicationId, guildId) => {\n return `/applications/${applicationId}/guilds/${guildId}/commands/permissions`\n },\n permission: (applicationId, guildId, commandId) => {\n return `/applications/${applicationId}/guilds/${guildId}/commands/${commandId}/permissions`\n },\n command: (applicationId, commandId, withLocalizations) => {\n let url = `/applications/${applicationId}/commands/${commandId}?`\n\n if (withLocalizations !== undefined) {\n url += `withLocalizations=${withLocalizations.toString()}`\n }\n\n return url\n },\n },\n\n responses: {\n // Interaction Endpoints\n callback: (interactionId, token) => {\n return `/interactions/${interactionId}/${token}/callback`\n },\n original: (interactionId, token) => {\n return `/webhooks/${interactionId}/${token}/messages/@original`\n },\n message: (applicationId, token, messageId) => {\n return `/webhooks/${applicationId}/${token}/messages/${messageId}`\n },\n },\n },\n\n // User endpoints\n user(userId) {\n return `/users/${userId}`\n },\n\n userBot() {\n return '/users/@me'\n },\n\n oauth2Application() {\n return 'oauth2/applications/@me'\n },\n\n gatewayBot() {\n return '/gateway/bot'\n },\n\n nitroStickerPacks() {\n return '/sticker-packs'\n },\n },\n\n checkRateLimits(url) {\n const ratelimited = rest.rateLimitedPaths.get(url)\n const global = rest.rateLimitedPaths.get('global')\n const now = Date.now()\n\n if (ratelimited && now < ratelimited.resetTimestamp) {\n return ratelimited.resetTimestamp - now\n }\n\n if (global && now < global.resetTimestamp) {\n return global.resetTimestamp - now\n }\n\n return false\n },\n\n changeToDiscordFormat(obj: any): any {\n if (obj === null) return null\n\n if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n return obj.map((item) => rest.changeToDiscordFormat(item))\n }\n\n const newObj: any = {}\n\n for (const key of Object.keys(obj)) {\n // Keys that dont require snake casing\n if (['permissions', 'allow', 'deny'].includes(key)) {\n newObj[key] = calculateBits(obj[key])\n continue\n }\n\n if (key === 'defaultMemberPermissions') {\n newObj.default_member_permissions = calculateBits(obj[key]);\n continue;\n }\n\n newObj[camelToSnakeCase(key)] = rest.changeToDiscordFormat(obj[key])\n }\n\n return newObj\n }\n\n if (typeof obj === 'bigint') return obj.toString()\n\n return obj\n },\n\n createRequest(options) {\n const headers: Record<string, string> = {\n 'user-agent': `DiscordBot (https://github.com/discordeno/discordeno, v${version})`,\n }\n\n if (!options.unauthorized) headers.authorization = `Bot ${rest.token}`\n\n // SOMETIMES SPECIAL HEADERS (E.G. CUSTOM AUTHORIZATION) NEED TO BE USED\n if (options.headers) {\n for (const key in options.headers) {\n headers[key.toLowerCase()] = options.headers[key]\n }\n }\n\n // GET METHODS SHOULD NOT HAVE A BODY\n if (options.method === 'GET') {\n options.body = undefined\n }\n\n // IF A REASON IS PROVIDED ENCODE IT IN HEADERS\n if (options.body?.reason) {\n headers['X-Audit-Log-Reason'] = encodeURIComponent(options.body.reason as string)\n options.body.reason = undefined\n }\n\n if (options.body) {\n const { file } = options.body\n if (file) {\n const files = findFiles(file)\n const form = new FormData()\n\n // WHEN CREATING A STICKER, DISCORD WANTS FORM DATA ONLY\n if (options.url?.endsWith('/stickers') && options.method === 'POST') {\n form.append('file', files[0].blob, files[0].name)\n form.append('name', options.body.name as string)\n form.append('description', options.body.description as string)\n form.append('tags', options.body.tags as string)\n } else {\n for (let i = 0; i < files.length; i++) {\n form.append(`file${i}`, files[i].blob, files[i].name)\n }\n\n if (file) options.body.file = undefined\n form.append('payload_json', JSON.stringify(rest.changeToDiscordFormat(options.body)))\n }\n\n options.body.file = form\n } else if (options.body && !['GET', 'DELETE'].includes(options.method)) {\n headers['Content-Type'] = 'application/json'\n }\n }\n\n return {\n headers,\n body: (options.body?.file ?? JSON.stringify(rest.changeToDiscordFormat(options.body))) as FormData | string,\n method: options.method,\n }\n },\n\n processRateLimitedPaths() {\n const now = Date.now()\n\n for (const [key, value] of rest.rateLimitedPaths.entries()) {\n // rest.debug(\n // `[REST - processRateLimitedPaths] Running for of loop. ${\n // value.resetTimestamp - now\n // }`\n // )\n // If the time has not reached cancel\n if (value.resetTimestamp > now) continue\n\n // Rate limit is over, delete the rate limiter\n rest.rateLimitedPaths.delete(key)\n // If it was global, also mark the global value as false\n if (key === 'global') rest.globallyRateLimited = false\n }\n\n // ALL PATHS ARE CLEARED CAN CANCEL OUT!\n if (rest.rateLimitedPaths.size === 0) {\n rest.processingRateLimitedPaths = false\n } else {\n rest.processingRateLimitedPaths = true\n // RECHECK IN 1 SECOND\n setTimeout(() => {\n // rest.debug('[REST - processRateLimitedPaths] Running setTimeout.')\n rest.processRateLimitedPaths()\n }, 1000)\n }\n },\n\n /** Processes the rate limit headers and determines if it needs to be rate limited and returns the bucket id if available */\n processHeaders(url, headers) {\n let rateLimited = false\n\n // GET ALL NECESSARY HEADERS\n const remaining = headers.get('x-ratelimit-remaining')\n const retryAfter = headers.get('x-ratelimit-reset-after')\n const reset = Date.now() + Number(retryAfter) * 1000\n const global = headers.get('x-ratelimit-global')\n // undefined override null needed for typings\n const bucketId = headers.get('x-ratelimit-bucket') ?? undefined\n const limit = headers.get('x-ratelimit-limit')\n\n rest.queues.get(url)?.handleCompletedRequest({\n remaining: remaining ? Number(remaining) : undefined,\n interval: retryAfter ? Number(retryAfter) * 1000 : undefined,\n max: limit ? Number(limit) : undefined,\n })\n\n // IF THERE IS NO REMAINING RATE LIMIT, MARK IT AS RATE LIMITED\n if (remaining === '0') {\n rateLimited = true\n\n // SAVE THE URL AS LIMITED, IMPORTANT FOR NEW REQUESTS BY USER WITHOUT BUCKET\n rest.rateLimitedPaths.set(url, {\n url,\n resetTimestamp: reset,\n bucketId,\n })\n\n // SAVE THE BUCKET AS LIMITED SINCE DIFFERENT URLS MAY SHARE A BUCKET\n if (bucketId) {\n rest.rateLimitedPaths.set(bucketId, {\n url,\n resetTimestamp: reset,\n bucketId,\n })\n }\n }\n\n // IF THERE IS NO REMAINING GLOBAL LIMIT, MARK IT RATE LIMITED GLOBALLY\n if (global) {\n const retryAfter = headers.get('retry-after')\n const globalReset = Date.now() + Number(retryAfter) * 1000\n // rest.debug(\n // `[REST = Globally Rate Limited] URL: ${url} | Global Rest: ${globalReset}`\n // )\n rest.globallyRateLimited = true\n rateLimited = true\n\n setTimeout(() => {\n rest.globallyRateLimited = false\n }, globalReset)\n\n rest.rateLimitedPaths.set('global', {\n url: 'global',\n resetTimestamp: globalReset,\n bucketId,\n })\n\n if (bucketId) {\n rest.rateLimitedPaths.set(bucketId, {\n url: 'global',\n resetTimestamp: globalReset,\n bucketId,\n })\n }\n }\n\n if (rateLimited && !rest.processingRateLimitedPaths) {\n rest.processRateLimitedPaths()\n }\n return rateLimited ? bucketId : undefined\n },\n\n async sendRequest(options) {\n const url = options.url.startsWith('https://') ? options.url : `${rest.baseUrl}/v${rest.version}${options.url}`\n const payload = rest.createRequest({ method: options.method, url: options.url, body: options.body, ...options.options })\n\n logger.debug(`sending request to ${url}`, 'with payload:', { ...payload, headers: { ...payload.headers, authorization: 'Bot tokenhere' } })\n const response = await fetch(url, payload)\n logger.debug(`request fetched from ${url} with status ${response.status} & ${response.statusText}`)\n\n // Set the bucket id if it was available on the headers\n const bucketId = rest.processHeaders(rest.simplifyUrl(options.url, options.method), response.headers)\n if (bucketId) options.bucketId = bucketId\n\n if (response.status < 200 || response.status >= 400) {\n logger.debug(`Request to ${url} failed.`)\n\n if (response.status === 429) {\n logger.debug(`Request to ${url} was ratelimited.`)\n // Too many attempts, get rid of request from queue.\n if (options.retryCount++ >= rest.maxRetryCount) {\n logger.debug(`Request to ${url} exceeded the maximum allowed retries.`, 'with payload:', payload)\n // rest.debug(`[REST - RetriesMaxed] ${JSON.stringify(options)}`)\n // Remove item from queue to prevent retry\n return options.reject({\n ok: false,\n status: response.status,\n error: 'The options was rate limited and it maxed out the retries limit.',\n })\n }\n\n // Rate limited, add back to queue\n rest.invalidBucket.handleCompletedRequest(response.status, response.headers.get('X-RateLimit-Scope') === 'shared')\n\n const resetAfter = response.headers.get('x-ratelimit-reset-after')\n if (resetAfter) await delay(Number(resetAfter) * 1000)\n // process the response to prevent mem leak\n await response.json()\n\n return await options.retryRequest?.(options)\n }\n\n return options.reject({ ok: false, status: response.status, body: JSON.stringify(await response.json()) })\n }\n\n const is204 = response.status === 204\n const json = is204 ? undefined : await response.json()\n // Discord sometimes sends no response with 204 code\n return options.resolve({ ok: true, status: response.status, body: JSON.stringify(json) })\n },\n\n // Credits: github.com/abalabahaha/eris lib/rest/RequestHandler.js#L397\n // Modified for our use-case\n simplifyUrl(url, method) {\n let route = url\n .replace(/\\/([a-z-]+)\\/(?:[0-9]{17,19})/g, function (match, p: string) {\n return ['channels', 'guilds'].includes(p) ? match : `/${p}/x`\n })\n .replace(/\\/reactions\\/[^/]+/g, '/reactions/x')\n\n // GENERAL /reactions and /reactions/emoji/@me share the buckets\n if (route.includes('/reactions')) {\n route = route.substring(0, route.indexOf('/reactions') + '/reactions'.length)\n }\n\n // Delete Message endpoint has its own rate limit\n if (method === 'DELETE' && route.endsWith('/messages/x')) {\n route = method + route\n }\n\n return route\n },\n\n processRequest(request: SendRequestOptions) {\n const route = request.url.substring(request.url.indexOf('api/'))\n const parts = route.split('/')\n // Remove the api/\n parts.shift()\n // Removes the /v#/\n if (parts[0]?.startsWith('v')) parts.shift()\n // Set the full url to discord api in case it was recieved in a proxy rest\n request.url = `${rest.baseUrl}/v${rest.version}/${parts.join('/')}`\n\n const url = rest.simplifyUrl(request.url, request.method)\n const queue = rest.queues.get(url)\n\n if (queue !== undefined) {\n queue.makeRequest(request)\n } else {\n // CREATES A NEW QUEUE\n const bucketQueue = new Queue(rest, { url, deleteQueueDelay: rest.deleteQueueDelay })\n\n // Add request to queue\n bucketQueue.makeRequest(request)\n // Save queue\n rest.queues.set(url, bucketQueue)\n }\n },\n\n async makeRequest(method, url, body, options) {\n return await new Promise((resolve, reject) => {\n const payload: SendRequestOptions = {\n url,\n method,\n body,\n retryCount: 0,\n retryRequest: async function (options: SendRequestOptions) {\n rest.processRequest(payload)\n },\n resolve: (data) => resolve(data.status !== 204 ? JSON.parse(data.body ?? '{}') : undefined),\n reject,\n options,\n }\n\n rest.processRequest(payload)\n })\n },\n\n async get<T = Record<string, unknown>>(url: string) {\n return camelize(await rest.makeRequest('GET', url)) as Camelize<T>\n },\n\n async post<T = Record<string, unknown>>(url: string, body?: Record<string, any>) {\n return camelize(await rest.makeRequest('POST', url, body)) as Camelize<T>\n },\n\n async delete(url: string, body?: Record<string, any>) {\n return camelize(await rest.makeRequest('DELETE', url, body))\n },\n\n async patch<T = Record<string, unknown>>(url: string, body?: Record<string, any>) {\n return camelize(await rest.makeRequest('PATCH', url, body)) as Camelize<T>\n },\n\n async put<T = void>(url: string, body?: Record<string, any>, options?: Record<string, any>) {\n return camelize(await rest.makeRequest('PUT', url, body, options)) as Camelize<T>\n },\n\n async addReaction(channelId, messageId, reaction) {\n reaction = processReactionString(reaction)\n\n return await rest.put(rest.routes.channels.reactions.bot(channelId, messageId, reaction))\n },\n\n async addReactions(channelId, messageId, reactions, ordered = false) {\n if (!ordered) {\n await Promise.all(reactions.map(async (reaction) => await rest.addReaction(channelId, messageId, reaction)))\n return\n }\n\n for (const reaction of reactions) {\n await rest.addReaction(channelId, messageId, reaction)\n }\n },\n\n async addRole(guildId, userId, roleId, reason) {\n return await rest.put(rest.routes.guilds.roles.member(guildId, userId, roleId), { reason })\n },\n\n async addThreadMember(channelId, userId) {\n return await rest.put(rest.routes.channels.threads.user(channelId, userId))\n },\n\n async createAutomodRule(guildId, options) {\n return await rest.post<DiscordAutoModerationRule>(rest.routes.guilds.automod.rules(guildId), options)\n },\n\n async createChannel(guildId, options) {\n return await rest.post<DiscordChannel>(rest.routes.guilds.channels(guildId), options)\n },\n\n async createEmoji(guildId, options) {\n return await rest.post<DiscordEmoji>(rest.routes.guilds.emojis(guildId), options)\n },\n\n async createGlobalApplicationCommand(command) {\n return await rest.post<DiscordApplicationCommand>(rest.routes.interactions.commands.commands(rest.applicationId), command)\n },\n\n async createGuild(options) {\n return await rest.post<DiscordGuild>(rest.routes.guilds.all(), options)\n },\n\n async createGuildApplicationCommand(command, guildId) {\n return await rest.post<DiscordApplicationCommand>(rest.routes.interactions.commands.guilds.all(rest.applicationId, guildId), command)\n },\n\n async createGuildFromTemplate(templateCode, options) {\n if (options.icon) {\n options.icon = await urlToBase64(options.icon)\n }\n\n return await rest.post<DiscordGuild>(rest.routes.guilds.templates.code(templateCode), options)\n },\n\n async createGuildSticker(guildId, options) {\n return await rest.post<DiscordSticker>(rest.routes.guilds.stickers(guildId), options)\n },\n\n async createGuildTemplate(guildId, options) {\n return await rest.post<DiscordTemplate>(rest.routes.guilds.templates.all(guildId), options)\n },\n\n async createForumThread(channelId, options) {\n return await rest.post<DiscordChannel>(rest.routes.channels.forum(channelId), options)\n },\n\n async createInvite(channelId, options = {}) {\n return await rest.post<DiscordInvite>(rest.routes.channels.invites(channelId), options)\n },\n\n async createRole(guildId, options, reason) {\n return await rest.post<DiscordRole>(rest.routes.guilds.roles.all(guildId), {\n ...options,\n reason,\n })\n },\n\n async createScheduledEvent(guildId, options) {\n return await rest.post<DiscordScheduledEvent>(rest.routes.guilds.events.events(guildId), options)\n },\n\n async createStageInstance(options) {\n return await rest.post<DiscordStageInstance>(rest.routes.channels.stages(), options)\n },\n\n async createWebhook(channelId, options) {\n return await rest.post<DiscordWebhook>(rest.routes.channels.webhooks(channelId), {\n name: options.name,\n avatar: options.avatar ? await urlToBase64(options.avatar) : undefined,\n reason: options.reason,\n })\n },\n\n async deleteAutomodRule(guildId, ruleId, reason) {\n return await rest.delete(rest.routes.guilds.automod.rule(guildId, ruleId), { reason })\n },\n\n async deleteChannel(channelId, reason) {\n return await rest.delete(rest.routes.channels.channel(channelId), {\n reason,\n })\n },\n\n async deleteChannelPermissionOverride(channelId, overwriteId, reason) {\n return await rest.delete(rest.routes.channels.overwrite(channelId, overwriteId), reason ? { reason } : undefined)\n },\n\n async deleteEmoji(guildId, id, reason) {\n return await rest.delete(rest.routes.guilds.emoji(guildId, id), { reason })\n },\n\n async deleteFollowupMessage(token, messageId) {\n return await rest.delete(rest.routes.interactions.responses.message(rest.applicationId, token, messageId))\n },\n\n async deleteGlobalApplicationCommand(commandId) {\n return await rest.delete(rest.routes.interactions.commands.command(rest.applicationId, commandId))\n },\n\n async deleteGuild(guildId) {\n return await rest.delete(rest.routes.guilds.guild(guildId))\n },\n\n async deleteGuildApplicationCommand(commandId, guildId) {\n return await rest.delete(rest.routes.interactions.commands.guilds.one(rest.applicationId, guildId, commandId))\n },\n\n async deleteGuildSticker(guildId, stickerId, reason) {\n return await rest.delete(rest.routes.guilds.sticker(guildId, stickerId), reason ? { reason } : undefined)\n },\n\n async deleteGuildTemplate(guildId, templateCode) {\n return await rest.delete(rest.routes.guilds.templates.guild(guildId, templateCode))\n },\n\n async deleteIntegration(guildId, integrationId) {\n return await rest.delete(rest.routes.guilds.integration(guildId, integrationId))\n },\n\n async deleteInvite(inviteCode, reason) {\n return await rest.delete(rest.routes.guilds.invite(inviteCode), reason ? { reason } : undefined)\n },\n\n async deleteMessage(channelId, messageId, reason) {\n return await rest.delete(rest.routes.channels.message(channelId, messageId), { reason })\n },\n\n async deleteMessages(channelId, messageIds, reason) {\n return await rest.post(rest.routes.channels.bulk(channelId), {\n messages: messageIds.slice(0, 100).map((id) => id.toString()),\n reason,\n })\n },\n\n async deleteOriginalInteractionResponse(token) {\n return await rest.delete(rest.routes.interactions.responses.original(rest.applicationId, token))\n },\n\n async deleteOwnReaction(channelId, messageId, reaction) {\n reaction = processReactionString(reaction)\n\n return await rest.delete(rest.routes.channels.reactions.bot(channelId, messageId, reaction))\n },\n\n async deleteReactionsAll(channelId, messageId) {\n return await rest.delete(rest.routes.channels.reactions.all(channelId, messageId))\n },\n\n async deleteReactionsEmoji(channelId, messageId, reaction) {\n reaction = processReactionString(reaction)\n\n return await rest.delete(rest.routes.channels.reactions.emoji(channelId, messageId, reaction))\n },\n\n async deleteRole(guildId, roleId) {\n return await rest.delete(rest.routes.guilds.roles.one(guildId, roleId))\n },\n\n async deleteScheduledEvent(guildId, eventId) {\n return await rest.delete(rest.routes.guilds.events.event(guildId, eventId))\n },\n\n async deleteStageInstance(channelId, reason) {\n return await rest.delete(rest.routes.channels.stage(channelId), reason ? { reason } : undefined)\n },\n\n async deleteUserReaction(channelId, messageId, userId, reaction) {\n reaction = processReactionString(reaction)\n\n return await rest.delete(rest.routes.channels.reactions.user(channelId, messageId, reaction, userId))\n },\n\n async deleteWebhook(webhookId, reason) {\n return await rest.delete(rest.routes.webhooks.id(webhookId), { reason })\n },\n\n async deleteWebhookMessage(webhookId, token, messageId, options) {\n return await rest.delete(rest.routes.webhooks.message(webhookId, token, messageId, options))\n },\n\n async deleteWebhookWithToken(webhookId, token) {\n return await rest.delete(rest.routes.webhooks.webhook(webhookId, token))\n },\n\n async editApplicationCommandPermissions(guildId, commandId, bearerToken, options) {\n return await rest.put<DiscordApplicationCommandPermissions>(\n rest.routes.interactions.commands.permission(rest.applicationId, guildId, commandId),\n {\n permissions: options,\n },\n {\n headers: { authorization: `Bearer ${bearerToken}` },\n },\n )\n },\n\n async editAutomodRule(guildId, ruleId, options) {\n return await rest.patch<DiscordAutoModerationRule>(rest.routes.guilds.automod.rule(guildId, ruleId), options)\n },\n\n async editBotProfile(options) {\n const avatar = options?.botAvatarURL ? await urlToBase64(options?.botAvatarURL) : options?.botAvatarURL\n\n return await rest.patch<DiscordUser>(rest.routes.userBot(), {\n username: options.username?.trim(),\n avatar,\n })\n },\n\n async editChannel(channelId, options) {\n return await rest.patch<DiscordChannel>(rest.routes.channels.channel(channelId), options)\n },\n\n async editChannelPermissionOverrides(channelId, options) {\n return await rest.put(rest.routes.channels.overwrite(channelId, options.id), options)\n },\n\n async editChannelPositions(guildId, channelPositions) {\n return await rest.patch(rest.routes.guilds.channels(guildId), channelPositions)\n },\n\n async editEmoji(guildId, id, options) {\n return await rest.patch<DiscordEmoji>(rest.routes.guilds.emoji(guildId, id), options)\n },\n\n async editFollowupMessage(token, messageId, options) {\n return await rest.patch<DiscordMessage>(rest.routes.interactions.responses.message(rest.applicationId, token, messageId), options)\n },\n\n async editGlobalApplicationCommand(commandId, options) {\n return await rest.patch<DiscordApplicationCommand>(rest.routes.interactions.commands.command(rest.applicationId, commandId), options)\n },\n\n async editGuild(guildId, options) {\n return await rest.patch<DiscordGuild>(rest.routes.guilds.guild(guildId), options)\n },\n\n async editGuildApplicationCommand(commandId, guildId, options) {\n return await rest.patch<DiscordApplicationCommand>(\n rest.routes.interactions.commands.guilds.one(rest.applicationId, guildId, commandId),\n options,\n )\n },\n\n async editGuildMfaLevel(guildId: BigString, mfaLevel: MfaLevels, reason?: string): Promise<void> {\n return await rest.post(rest.routes.guilds.mfa(guildId), { level: mfaLevel, reason })\n },\n\n async editGuildSticker(guildId, stickerId, options) {\n return await rest.patch<DiscordSticker>(rest.routes.guilds.sticker(guildId, stickerId), options)\n },\n\n async editGuildTemplate(guildId, templateCode: string, options: ModifyGuildTemplate): Promise<Camelize<DiscordTemplate>> {\n return await rest.patch<DiscordTemplate>(rest.routes.guilds.templates.guild(guildId, templateCode), options)\n },\n\n async editMessage(channelId, messageId, options) {\n return await rest.patch<DiscordMessage>(rest.routes.channels.message(channelId, messageId), options)\n },\n\n async editOriginalInteractionResponse(token, options) {\n return await rest.patch<DiscordMessage>(rest.routes.interactions.responses.original(rest.applicationId, token), options)\n },\n\n async editOriginalWebhookMessage(webhookId, token, options) {\n return await rest.patch<DiscordMessage>(rest.routes.webhooks.original(webhookId, token, options), {\n type: InteractionResponseTypes.UpdateMessage,\n data: options,\n })\n },\n\n async editOwnVoiceState(guildId, options) {\n return await rest.patch(rest.routes.guilds.voice(guildId), {\n channel_id: options.channelId,\n suppress: options.suppress,\n request_to_speak_timestamp: options.requestToSpeakTimestamp\n ? new Date(options.requestToSpeakTimestamp).toISOString()\n : options.requestToSpeakTimestamp,\n })\n },\n\n async editScheduledEvent(guildId, eventId, options) {\n return await rest.patch<DiscordScheduledEvent>(rest.routes.guilds.events.event(guildId, eventId), options)\n },\n\n async editRole(guildId, roleId, options) {\n return await rest.patch<DiscordRole>(rest.routes.guilds.roles.one(guildId, roleId), options)\n },\n\n async editRolePositions(guildId, options) {\n return await rest.patch<DiscordRole[]>(rest.routes.guilds.roles.all(guildId), options)\n },\n\n async editStageInstance(channelId, data) {\n return await rest.patch<DiscordStageInstance>(rest.routes.channels.stage(channelId), { topic: data.topic })\n },\n\n async editUserVoiceState(guildId, options) {\n return await rest.patch(rest.routes.guilds.voice(guildId, options.userId), {\n channel_id: options.channelId,\n suppress: options.suppress,\n user_id: options.userId,\n })\n },\n\n async editWebhook(webhookId, options) {\n return await rest.patch<DiscordWebhook>(rest.routes.webhooks.id(webhookId), options)\n },\n\n async editWebhookMessage(webhookId, token, messageId, options) {\n return await rest.patch<DiscordMessage>(rest.routes.webhooks.message(webhookId, token, messageId, options), options)\n },\n\n async editWebhookWithToken(webhookId, token, options) {\n return await rest.patch<DiscordWebhook>(rest.routes.webhooks.webhook(webhookId, token), options)\n },\n\n async editWelcomeScreen(guildId, options) {\n return await rest.patch<DiscordWelcomeScreen>(rest.routes.guilds.welcome(guildId), options)\n },\n\n async editWidgetSettings(guildId, options) {\n return await rest.patch<DiscordGuildWidgetSettings>(rest.routes.guilds.widget(guildId), options)\n },\n\n async executeWebhook(webhookId, token, options) {\n return await rest.post<DiscordMessage>(rest.routes.webhooks.webhook(webhookId, token, options), options)\n },\n\n async followAnnouncement(sourceChannelId, targetChannelId) {\n return await rest.post<DiscordFollowedChannel>(rest.routes.channels.follow(sourceChannelId), {\n webhook_channel_id: targetChannelId,\n } as DiscordFollowAnnouncementChannel)\n },\n\n async getActiveThreads(guildId) {\n return await rest.get<DiscordListActiveThreads>(rest.routes.channels.threads.active(guildId))\n },\n\n async getApplicationCommandPermission(guildId, commandId) {\n return await rest.get<DiscordApplicationCommandPermissions>(\n rest.routes.interactions.commands.permission(rest.applicationId, guildId, commandId),\n )\n },\n\n async getApplicationCommandPermissions(guildId) {\n return await rest.get<DiscordApplicationCommandPermissions[]>(rest.routes.interactions.commands.permissions(rest.applicationId, guildId))\n },\n\n async getApplicationInfo() {\n return await rest.get<DiscordApplication>(rest.routes.oauth2Application())\n },\n\n async getAuditLog(guildId, options) {\n return await rest.get<DiscordAuditLog>(rest.routes.guilds.auditlogs(guildId, options))\n },\n\n async getAutomodRule(guildId, ruleId) {\n return await rest.get<DiscordAutoModerationRule>(rest.routes.guilds.automod.rule(guildId, ruleId))\n },\n\n async getAutomodRules(guildId) {\n return await rest.get<DiscordAutoModerationRule[]>(rest.routes.guilds.automod.rules(guildId))\n },\n\n async getAvailableVoiceRegions() {\n return await rest.get<DiscordVoiceRegion[]>(rest.routes.regions())\n },\n\n async getBan(guildId, userId) {\n return await rest.get<DiscordBan>(rest.routes.guilds.members.ban(guildId, userId))\n },\n\n async getBans(guildId, options) {\n return await rest.get<DiscordBan[]>(rest.routes.guilds.members.bans(guildId, options))\n },\n\n async getChannel(id) {\n return await rest.get<DiscordChannel>(rest.routes.channels.channel(id))\n },\n\n async getChannelInvites(channelId) {\n return await rest.get<DiscordInviteMetadata[]>(rest.routes.channels.invites(channelId))\n },\n\n async getChannels(guildId) {\n return await rest.get<DiscordChannel[]>(rest.routes.guilds.channels(guildId))\n },\n\n async getChannelWebhooks(channelId) {\n return await rest.get<DiscordWebhook[]>(rest.routes.channels.webhooks(channelId))\n },\n\n async getDmChannel(userId) {\n return await rest.post<DiscordChannel>(rest.routes.channels.dm(), {\n recipient_id: userId.toString(),\n })\n },\n\n async getEmoji(guildId, emojiId) {\n return await rest.get<DiscordEmoji>(rest.routes.guilds.emoji(guildId, emojiId))\n },\n\n async getEmojis(guildId) {\n return await rest.get<DiscordEmoji[]>(rest.routes.guilds.emojis(guildId))\n },\n\n async getFollowupMessage(token, messageId) {\n return await rest.get<DiscordMessage>(rest.routes.interactions.responses.message(rest.applicationId, token, messageId))\n },\n\n async getGatewayBot() {\n return await rest.get<DiscordGetGatewayBot>(rest.routes.gatewayBot())\n },\n\n async getGlobalApplicationCommand(commandId) {\n return await rest.get<DiscordApplicationCommand>(rest.routes.interactions.commands.command(rest.applicationId, commandId))\n },\n\n async getGlobalApplicationCommands() {\n return await rest.get<DiscordApplicationCommand[]>(rest.routes.interactions.commands.commands(rest.applicationId))\n },\n\n async getGuild(guildId, options = { counts: true }) {\n return await rest.get<DiscordGuild>(rest.routes.guilds.guild(guildId, options.counts))\n },\n\n async getGuildApplicationCommand(commandId, guildId) {\n return await rest.get<DiscordApplicationCommand>(rest.routes.interactions.commands.guilds.one(rest.applicationId, guildId, commandId))\n },\n\n async getGuildApplicationCommands(guildId) {\n return await rest.get<DiscordApplicationCommand[]>(rest.routes.interactions.commands.guilds.all(rest.applicationId, guildId))\n },\n\n async getGuildPreview(guildId) {\n return await rest.get<DiscordGuildPreview>(rest.routes.guilds.preview(guildId))\n },\n\n async getGuildTemplate(templateCode) {\n return await rest.get<DiscordTemplate>(rest.routes.guilds.templates.code(templateCode))\n },\n\n async getGuildTemplates(guildId) {\n return await rest.get<DiscordTemplate[]>(rest.routes.guilds.templates.all(guildId))\n },\n\n async getGuildWebhooks(guildId) {\n return await rest.get<DiscordWebhook[]>(rest.routes.guilds.webhooks(guildId))\n },\n\n async getIntegrations(guildId) {\n return await rest.get<DiscordIntegration[]>(rest.routes.guilds.integrations(guildId))\n },\n\n async getInvite(inviteCode, options) {\n return await rest.get<DiscordInviteMetadata>(rest.routes.guilds.invite(inviteCode, options))\n },\n\n async getInvites(guildId) {\n return await rest.get<DiscordInviteMetadata[]>(rest.routes.guilds.invites(guildId))\n },\n\n async getMessage(channelId, messageId) {\n return await rest.get<DiscordMessage>(rest.routes.channels.message(channelId, messageId))\n },\n\n async getMessages(channelId, options) {\n return await rest.get<DiscordMessage[]>(rest.routes.channels.messages(channelId, options))\n },\n\n async getNitroStickerPacks() {\n return await rest.get<DiscordStickerPack[]>(rest.routes.nitroStickerPacks())\n },\n\n async getOriginalInteractionResponse(token) {\n return await rest.get<DiscordMessage>(rest.routes.interactions.responses.original(rest.applicationId, token))\n },\n\n async getPinnedMessages(channelId) {\n return await rest.get<DiscordMessage[]>(rest.routes.channels.pins(channelId))\n },\n\n async getPrivateArchivedThreads(channelId, options) {\n return await rest.get<DiscordListArchivedThreads>(rest.routes.channels.threads.private(channelId, options))\n },\n\n async getPrivateJoinedArchivedThreads(channelId, options) {\n return await rest.get<DiscordListArchivedThreads>(rest.routes.channels.threads.joined(channelId, options))\n },\n\n async getPruneCount(guildId, options) {\n return await rest.get<DiscordPrunedCount>(rest.routes.guilds.prune(guildId, options))\n },\n\n async getPublicArchivedThreads(channelId, options) {\n return await rest.get<DiscordListArchivedThreads>(rest.routes.channels.threads.public(channelId, options))\n },\n\n async getRoles(guildId) {\n return await rest.get<DiscordRole[]>(rest.routes.guilds.roles.all(guildId))\n },\n\n async getScheduledEvent(guildId, eventId, options) {\n return await rest.get<DiscordScheduledEvent>(rest.routes.guilds.events.event(guildId, eventId, options?.withUserCount))\n },\n\n async getScheduledEvents(guildId, options) {\n return await rest.get<DiscordScheduledEvent[]>(rest.routes.guilds.events.events(guildId, options?.withUserCount))\n },\n\n async getScheduledEventUsers(guildId, eventId, options) {\n return await rest.get<Array<{ user: DiscordUser; member?: DiscordMember }>>(rest.routes.guilds.events.users(guildId, eventId, options))\n },\n\n async getSessionInfo() {\n return await rest.getGatewayBot()\n },\n\n async getStageInstance(channelId) {\n return await rest.get<DiscordStageInstance>(rest.routes.channels.stage(channelId))\n },\n\n async getSticker(stickerId: BigString) {\n return await rest.get<DiscordSticker>(rest.routes.sticker(stickerId))\n },\n\n async getGuildSticker(guildId, stickerId) {\n return await rest.get<DiscordSticker>(rest.routes.guilds.sticker(guildId, stickerId))\n },\n\n async getGuildStickers(guildId) {\n return await rest.get<DiscordSticker[]>(rest.routes.guilds.stickers(guildId))\n },\n\n async getThreadMember(channelId, userId) {\n return await rest.get<DiscordThreadMember>(rest.routes.channels.threads.user(channelId, userId))\n },\n\n async getThreadMembers(channelId) {\n return await rest.get<DiscordThreadMember[]>(rest.routes.channels.threads.members(channelId))\n },\n\n async getReactions(channelId, messageId, reaction, options) {\n return await rest.get<DiscordUser[]>(rest.routes.channels.reactions.message(channelId, messageId, reaction, options))\n },\n\n async getUser(id) {\n return await rest.get<DiscordUser>(rest.routes.user(id))\n },\n\n async getVanityUrl(guildId) {\n return await rest.get<DiscordVanityUrl>(rest.routes.guilds.vanity(guildId))\n },\n\n async getVoiceRegions(guildId) {\n return await rest.get<DiscordVoiceRegion[]>(rest.routes.guilds.regions(guildId))\n },\n\n async getWebhook(webhookId) {\n return await rest.get<DiscordWebhook>(rest.routes.webhooks.id(webhookId))\n },\n\n async getWebhookMessage(webhookId, token, messageId, options) {\n return await rest.get<DiscordMessage>(rest.routes.webhooks.message(webhookId, token, messageId, options))\n },\n\n async getWebhookWithToken(webhookId, token) {\n return await rest.get<DiscordWebhook>(rest.routes.webhooks.webhook(webhookId, token))\n },\n\n async getWelcomeScreen(guildId) {\n return await rest.get<DiscordWelcomeScreen>(rest.routes.guilds.welcome(guildId))\n },\n\n async getWidget(guildId) {\n return await rest.get<DiscordGuildWidget>(rest.routes.guilds.widgetJson(guildId))\n },\n\n async getWidgetSettings(guildId) {\n return await rest.get<DiscordGuildWidgetSettings>(rest.routes.guilds.widget(guildId))\n },\n\n async joinThread(channelId) {\n return await rest.put(rest.routes.channels.threads.me(channelId))\n },\n\n async leaveGuild(guildId) {\n return await rest.delete(rest.routes.guilds.leave(guildId))\n },\n\n async leaveThread(channelId) {\n return await rest.delete(rest.routes.channels.threads.me(channelId))\n },\n\n async publishMessage(channelId, messageId) {\n return await rest.post<DiscordMessage>(rest.routes.channels.crosspost(channelId, messageId))\n },\n\n async removeRole(guildId, userId, roleId, reason) {\n return await rest.delete(rest.routes.guilds.roles.member(guildId, userId, roleId), { reason })\n },\n\n async removeThreadMember(channelId, userId) {\n return await rest.delete(rest.routes.channels.threads.user(channelId, userId))\n },\n\n async sendFollowupMessage(token, options) {\n return await new Promise((resolve, reject) => {\n rest.sendRequest({\n url: rest.routes.webhooks.webhook(rest.applicationId, token),\n method: 'POST',\n body: options,\n retryCount: 0,\n retryRequest: async function (options: SendRequestOptions) {\n // TODO: should change to reprocess queue item\n await rest.sendRequest(options)\n },\n resolve: (data) => resolve(data.status !== 204 ? JSON.parse(data.body ?? '{}') : undefined),\n reject,\n })\n })\n },\n\n async sendInteractionResponse(interactionId, token, options) {\n return await new Promise((resolve, reject) => {\n rest.sendRequest({\n url: rest.routes.interactions.responses.callback(interactionId, token),\n method: 'POST',\n body: options,\n retryCount: 0,\n retryRequest: async function (options: SendRequestOptions) {\n // TODO: should change to reprocess queue item\n await rest.sendRequest(options)\n },\n resolve: (data) => resolve(data.status !== 204 ? JSON.parse(data.body ?? '{}') : undefined),\n reject,\n })\n })\n },\n\n async sendMessage(channelId, options) {\n return await rest.post<DiscordMessage>(rest.routes.channels.messages(channelId), options)\n },\n\n async startThreadWithMessage(channelId, messageId, options) {\n return await rest.post<DiscordChannel>(rest.routes.channels.threads.message(channelId, messageId), options)\n },\n\n async startThreadWithoutMessage(channelId, options) {\n return await rest.post<DiscordChannel>(rest.routes.channels.threads.all(channelId), options)\n },\n\n async syncGuildTemplate(guildId) {\n return await rest.put<DiscordTemplate>(rest.routes.guilds.templates.all(guildId))\n },\n\n async banMember(guildId, userId, options) {\n return await rest.put<void>(rest.routes.guilds.members.ban(guildId, userId), options)\n },\n\n async editBotMember(guildId, options) {\n return await rest.patch<DiscordMember>(rest.routes.guilds.members.bot(guildId), options)\n },\n\n async editMember(guildId, userId, options) {\n return await rest.patch<DiscordMemberWithUser>(rest.routes.guilds.members.member(guildId, userId), options)\n },\n\n async getMember(guildId, userId) {\n return await rest.get<DiscordMemberWithUser>(rest.routes.guilds.members.member(guildId, userId))\n },\n\n async getMembers(guildId, options) {\n return await rest.get<DiscordMemberWithUser[]>(rest.routes.guilds.members.members(guildId, options))\n },\n\n async kickMember(guildId, userId, reason) {\n return await rest.delete(rest.routes.guilds.members.member(guildId, userId), {\n reason,\n })\n },\n\n async pinMessage(channelId, messageId, reason) {\n return await rest.put(rest.routes.channels.pin(channelId, messageId), reason ? { reason } : undefined)\n },\n\n async pruneMembers(guildId, options) {\n return await rest.post<{ pruned: number | null }>(rest.routes.guilds.members.prune(guildId), options)\n },\n\n async searchMembers(guildId, query, options) {\n return await rest.get<DiscordMemberWithUser[]>(rest.routes.guilds.members.search(guildId, query, options))\n },\n\n async unbanMember(guildId, userId) {\n return await rest.delete(rest.routes.guilds.members.ban(guildId, userId))\n },\n\n async unpinMessage(channelId, messageId, reason) {\n return await rest.delete(rest.routes.channels.pin(channelId, messageId), reason ? { reason } : undefined)\n },\n\n async triggerTypingIndicator(channelId) {\n return await rest.post(rest.routes.channels.typing(channelId))\n },\n\n async upsertGlobalApplicationCommands(commands) {\n return await rest.put<DiscordApplicationCommand[]>(rest.routes.interactions.commands.commands(rest.applicationId), commands)\n },\n\n async upsertGuildApplicationCommands(guildId, commands) {\n return await rest.put<DiscordApplicationCommand[]>(rest.routes.interactions.commands.guilds.all(rest.applicationId, guildId), commands)\n },\n }\n\n return rest\n}\n"],"names":["InteractionResponseTypes","calculateBits","camelize","camelToSnakeCase","delay","findFiles","getBotIdFromToken","isGetMessagesAfter","isGetMessagesAround","isGetMessagesBefore","isGetMessagesLimit","logger","processReactionString","urlToBase64","createInvalidRequestBucket","Queue","version","createRestManager","options","token","Error","rest","applicationId","BigInt","baseUrl","maxRetryCount","Infinity","globallyRateLimited","processingRateLimitedPaths","deleteQueueDelay","queues","Map","rateLimitedPaths","invalidBucket","routes","webhooks","id","webhookId","message","messageId","url","threadId","original","webhook","wait","undefined","toString","sessionInfo","gatewayBot","channels","bulk","channelId","dm","pin","pins","reactions","bot","emoji","encodeURIComponent","user","userId","all","after","limit","channel","follow","forum","invites","messages","before","around","overwrite","overwriteId","crosspost","stages","stage","threads","active","guildId","members","me","archived","public","Date","toISOString","private","joined","typing","guilds","auditlogs","actionType","automod","rule","ruleId","rules","emojiId","emojis","events","withUserCount","event","eventId","users","withMember","guild","withCounts","integration","integrationId","integrations","invite","inviteCode","withExpiration","scheduledEventId","leave","ban","bans","member","search","query","prune","days","Array","isArray","includeRoles","join","mfa","preview","roles","one","roleId","memberId","stickers","sticker","stickerId","voice","templates","code","vanity","regions","welcome","widget","widgetJson","interactions","commands","commandId","withLocalizations","permissions","permission","command","responses","callback","interactionId","userBot","oauth2Application","nitroStickerPacks","checkRateLimits","ratelimited","get","global","now","resetTimestamp","changeToDiscordFormat","obj","map","item","newObj","key","Object","keys","includes","default_member_permissions","createRequest","headers","unauthorized","authorization","toLowerCase","method","body","reason","file","files","form","FormData","endsWith","append","blob","name","description","tags","i","length","JSON","stringify","processRateLimitedPaths","value","entries","delete","size","setTimeout","processHeaders","rateLimited","remaining","retryAfter","reset","Number","bucketId","handleCompletedRequest","interval","max","set","globalReset","sendRequest","startsWith","payload","debug","response","fetch","status","statusText","simplifyUrl","retryCount","reject","ok","error","resetAfter","json","retryRequest","is204","resolve","route","replace","match","p","substring","indexOf","processRequest","request","parts","split","shift","queue","makeRequest","bucketQueue","Promise","data","parse","post","patch","put","addReaction","reaction","addReactions","ordered","addRole","addThreadMember","createAutomodRule","createChannel","createEmoji","createGlobalApplicationCommand","createGuild","createGuildApplicationCommand","createGuildFromTemplate","templateCode","icon","createGuildSticker","createGuildTemplate","createForumThread","createInvite","createRole","createScheduledEvent","createStageInstance","createWebhook","avatar","deleteAutomodRule","deleteChannel","deleteChannelPermissionOverride","deleteEmoji","deleteFollowupMessage","deleteGlobalApplicationCommand","deleteGuild","deleteGuildApplicationCommand","deleteGuildSticker","deleteGuildTemplate","deleteIntegration","deleteInvite","deleteMessage","deleteMessages","messageIds","slice","deleteOriginalInteractionResponse","deleteOwnReaction","deleteReactionsAll","deleteReactionsEmoji","deleteRole","deleteScheduledEvent","deleteStageInstance","deleteUserReaction","deleteWebhook","deleteWebhookMessage","deleteWebhookWithToken","editApplicationCommandPermissions","bearerToken","editAutomodRule","editBotProfile","botAvatarURL","username","trim","editChannel","editChannelPermissionOverrides","editChannelPositions","channelPositions","editEmoji","editFollowupMessage","editGlobalApplicationCommand","editGuild","editGuildApplicationCommand","editGuildMfaLevel","mfaLevel","level","editGuildSticker","editGuildTemplate","editMessage","editOriginalInteractionResponse","editOriginalWebhookMessage","type","UpdateMessage","editOwnVoiceState","channel_id","suppress","request_to_speak_timestamp","requestToSpeakTimestamp","editScheduledEvent","editRole","editRolePositions","editStageInstance","topic","editUserVoiceState","user_id","editWebhook","editWebhookMessage","editWebhookWithToken","editWelcomeScreen","editWidgetSettings","executeWebhook","followAnnouncement","sourceChannelId","targetChannelId","webhook_channel_id","getActiveThreads","getApplicationCommandPermission","getApplicationCommandPermissions","getApplicationInfo","getAuditLog","getAutomodRule","getAutomodRules","getAvailableVoiceRegions","getBan","getBans","getChannel","getChannelInvites","getChannels","getChannelWebhooks","getDmChannel","recipient_id","getEmoji","getEmojis","getFollowupMessage","getGatewayBot","getGlobalApplicationCommand","getGlobalApplicationCommands","getGuild","counts","getGuildApplicationCommand","getGuildApplicationCommands","getGuildPreview","getGuildTemplate","getGuildTemplates","getGuildWebhooks","getIntegrations","getInvite","getInvites","getMessage","getMessages","getNitroStickerPacks","getOriginalInteractionResponse","getPinnedMessages","getPrivateArchivedThreads","getPrivateJoinedArchivedThreads","getPruneCount","getPublicArchivedThreads","getRoles","getScheduledEvent","getScheduledEvents","getScheduledEventUsers","getSessionInfo","getStageInstance","getSticker","getGuildSticker","getGuildStickers","getThreadMember","getThreadMembers","getReactions","getUser","getVanityUrl","getVoiceRegions","getWebhook","getWebhookMessage","getWebhookWithToken","getWelcomeScreen","getWidget","getWidgetSettings","joinThread","leaveGuild","leaveThread","publishMessage","removeRole","removeThreadMember","sendFollowupMessage","sendInteractionResponse","sendMessage","startThreadWithMessage","startThreadWithoutMessage","syncGuildTemplate","banMember","editBotMember","editMember","getMember","getMembers","kickMember","pinMessage","pruneMembers","searchMembers","unbanMember","unpinMessage","triggerTypingIndicator","upsertGlobalApplicationCommands","upsertGuildApplicationCommands"],"mappings":"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"}
|
package/dist/queue.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import type { RestManager, SendRequestOptions } from './
|
|
2
|
+
import type { RestManager, SendRequestOptions } from './types.js';
|
|
3
3
|
export declare class Queue {
|
|
4
4
|
/** The rest manager */
|
|
5
5
|
rest: RestManager;
|
|
@@ -41,9 +41,11 @@ export declare class Queue {
|
|
|
41
41
|
interval?: number;
|
|
42
42
|
remaining?: number;
|
|
43
43
|
}): void;
|
|
44
|
+
/** Checks if a request is available and adds it to the queue. Also triggers queue processing if not already processing. */
|
|
44
45
|
makeRequest(options: SendRequestOptions): Promise<void>;
|
|
45
46
|
/** Cleans up the queue by checking if there is nothing left and removing it. */
|
|
46
47
|
cleanup(): void;
|
|
48
|
+
/** Simply checks if the queue is able to be cleared or it has requests pending. */
|
|
47
49
|
isQueueClearable(): boolean;
|
|
48
50
|
}
|
|
49
51
|
export interface QueueOptions {
|
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEjE,qBAAa,KAAK;IAChB,uBAAuB;IACvB,IAAI,EAAE,WAAW,CAAA;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAI;IACrB,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAI;IACf,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAI;IACpB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAA;IACrC,+CAA+C;IAC/C,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAK;IAC9D,+CAA+C;IAC/C,OAAO,EAAE,kBAAkB,EAAE,CAAK;IAClC,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAQ;IAC3B,8DAA8D;IAC9D,iBAAiB,EAAE,OAAO,CAAQ;IAClC,4CAA4C;IAC5C,YAAY,EAAE,OAAO,CAAQ;IAC7B,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAA;IACX,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAI;IACpB,iHAAiH;IACjH,gBAAgB,EAAE,MAAM,CAAQ;gBAEpB,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY;IAWpD,iEAAiE;IACjE,gBAAgB,IAAI,OAAO;IAI3B,kEAAkE;IAC5D,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAchD,2DAA2D;IACrD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrC,4DAA4D;IACtD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA0DrC,sBAAsB,CAAC,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkB9F,2HAA2H;IACrH,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,gFAAgF;IAChF,OAAO,IAAI,IAAI;IAwBf,mFAAmF;IACnF,gBAAgB,IAAI,OAAO;CAU5B;AAED,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;IAC1B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAA;IACX,iHAAiH;IACjH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B"}
|
package/dist/queue.js
CHANGED
|
@@ -1,2 +1,153 @@
|
|
|
1
|
-
import{delay
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9xdWV1ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWxheSwgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL21hbmFnZXIuanMnXG5cbmV4cG9ydCBjbGFzcyBRdWV1ZSB7XG4gIC8qKiBUaGUgcmVzdCBtYW5hZ2VyICovXG4gIHJlc3Q6IFJlc3RNYW5hZ2VyXG4gIC8qKiBBbW91bnQgb2YgcmVxdWVzdHMgdGhhdCBoYXZlIGFyZSByZW1haW5pbmcuIERlZmF1bHRzIHRvIDEuICovXG4gIHJlbWFpbmluZzogbnVtYmVyID0gMVxuICAvKiogTWF4IHJlcXVlc3RzIGZvciB0aGlzIHRoaXMuIERlZmF1bHRzIHRvIDEuICovXG4gIG1heDogbnVtYmVyID0gMVxuICAvKiogVGhlIHRpbWUgdGhhdCBkaXNjb3JkIGFsbG93cyB0byBtYWtlIHRoZSBtYXggbnVtYmVyIG9mIHJlcXVlc3RzLiBEZWZhdWx0cyB0byAwICovXG4gIGludGVydmFsOiBudW1iZXIgPSAwXG4gIC8qKiB0aW1lciB0byByZXNldCB0byAwICovXG4gIHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWRcbiAgLyoqIFRoZSByZXF1ZXN0cyB0aGF0IGFyZSBjdXJyZW50bHkgcGVuZGluZy4gKi9cbiAgd2FpdGluZzogQXJyYXk8KHZhbHVlOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4pID0+IHZvaWQ+ID0gW11cbiAgLyoqIFRoZSByZXF1ZXN0cyB0aGF0IGFyZSBjdXJyZW50bHkgcGVuZGluZy4gKi9cbiAgcGVuZGluZzogU2VuZFJlcXVlc3RPcHRpb25zW10gPSBbXVxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHdhaXRpbmcgcXVldWUgaXMgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBwcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2VcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBwZW5kaW5nIHF1ZXVlIGlzIGFscmVhZHkgcHJvY2Vzc2luZy4gKi9cbiAgcHJvY2Vzc2luZ1BlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICAvKiogV2hldGhlciB0aGUgZmlyc3QgcmVxdWVzdCBpcyBwZW5kaW5nLiAqL1xuICBmaXJzdFJlcXVlc3Q6IGJvb2xlYW4gPSBmYWxzZVxuICAvKiogVGhlIHVybCB0aGF0IGFsbCB0aGUgcmVxdWVzdHMgaW4gdGhpcyBxdWV1ZSBhcmUgc2VudCB0by4gKi9cbiAgdXJsOiBzdHJpbmdcbiAgLyoqIFdoZW4gcmVxdWVzdHMgc3RhcnRlZCBiZWluZyBtYWRlIHRvIGRldGVybWluZSB3aGVuIHRoZSBpbnRlcnZhbCB3aWxsIHJlc2V0IGl0LiAqL1xuICBmcm96ZW5BdDogbnVtYmVyID0gMFxuICAvKiogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nIHRoaXMgcXVldWUgaWYgaXQgaXMgZW1wdHkuIERlZmF1bHRzIHRvIDYwMDAwKG9uZSBtaW51dGUpLiAqL1xuICBkZWxldGVRdWV1ZURlbGF5OiBudW1iZXIgPSA2MDAwMFxuXG4gIGNvbnN0cnVjdG9yKHJlc3Q6IFJlc3RNYW5hZ2VyLCBvcHRpb25zOiBRdWV1ZU9wdGlvbnMpIHtcbiAgICB0aGlzLnJlc3QgPSByZXN0XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybFxuXG4gICAgaWYgKG9wdGlvbnMuaW50ZXJ2YWwpIHRoaXMuaW50ZXJ2YWwgPSBvcHRpb25zLmludGVydmFsXG4gICAgaWYgKG9wdGlvbnMubWF4KSB0aGlzLm1heCA9IG9wdGlvbnMubWF4XG4gICAgaWYgKG9wdGlvbnMucmVtYWluaW5nKSB0aGlzLnJlbWFpbmluZyA9IG9wdGlvbnMucmVtYWluaW5nXG4gICAgaWYgKG9wdGlvbnMudGltZW91dElkKSB0aGlzLnRpbWVvdXRJZCA9IG9wdGlvbnMudGltZW91dElkXG4gICAgaWYgKG9wdGlvbnMuZGVsZXRlUXVldWVEZWxheSkgdGhpcy5kZWxldGVRdWV1ZURlbGF5ID0gb3B0aW9ucy5kZWxldGVRdWV1ZURlbGF5XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlbWFpbmluZyByZXF1ZXN0cyB0aGF0IGFyZSBhbGxvd2VkLiAqL1xuICBpc1JlcXVlc3RBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlbWFpbmluZyA+IDBcbiAgfVxuXG4gIC8qKiBQYXVzZXMgdGhlIGV4ZWN1dGlvbiB1bnRpbCBhIHJlcXVlc3QgaXMgYWxsb3dlZCB0byBiZSBtYWRlLiAqL1xuICBhc3luYyB3YWl0VW50aWxSZXF1ZXN0QXZhaWxhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBJZiB3aGF0ZXZlciBhbW91bnQgb2YgcmVxdWVzdHMgaXMgbGVmdCBpcyBtb3JlIHRoYW4gdGhlIHNhZmV0eSBtYXJnaW4sIGFsbG93IHRoZSByZXF1ZXN0XG4gICAgICBpZiAodGhpcy5pc1JlcXVlc3RBbGxvd2VkKCkpIHtcbiAgICAgICAgLy8gdGhpcy5yZW1haW5pbmcrKztcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndhaXRpbmcucHVzaChyZXNvbHZlKVxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NXYWl0aW5nKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIHJlcXVlc3RzIHdhaXRpbmcgdG8gYmUgaGFuZGxlZC4gKi9cbiAgYXN5bmMgcHJvY2Vzc1dhaXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gSWYgYWxyZWFkeSBwcm9jZXNzaW5nLCB0aGF0IGxvb3Agd2lsbCBoYW5kbGUgYWxsIHdhaXRpbmcgcmVxdWVzdHMuXG4gICAgaWYgKHRoaXMucHJvY2Vzc2luZykgcmV0dXJuXG4gICAgLy8gTWFyayBhcyBwcm9jZXNzaW5nIHNvIG90aGVyIGxvb3BzIGRvbid0IHN0YXJ0XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZVxuXG4gICAgd2hpbGUgKHRoaXMud2FpdGluZy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFF1ZXVlICR7dGhpcy51cmx9IHByb2Nlc3Mgd2FpdGluZyB3aGlsZSBsb29wIHJhbi5gKVxuICAgICAgaWYgKHRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIG5leHQgaXRlbSBpbiB0aGUgcXVldWVcbiAgICAgICAgdGhpcy53YWl0aW5nLnNoaWZ0KCk/LigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBkZWxheSgxMDAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZmFsc2Ugc28gbmV4dCBwZW5kaW5nIHJlcXVlc3QgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXcgbG9vcC5cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIGFsbCByZXF1ZXN0cyBwZW5kaW5nIHRvIGJlIHNlbnQuICovXG4gIGFzeW5jIHByb2Nlc3NQZW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIGFscmVhZHkgcHJvY2Vzc2luZywgdGhhdCBsb29wIHdpbGwgaGFuZGxlIGFsbCBwZW5kaW5nIHJlcXVlc3RzLlxuICAgIGlmICh0aGlzLnByb2Nlc3NpbmdQZW5kaW5nIHx8ICF0aGlzLnBlbmRpbmcubGVuZ3RoKSByZXR1cm5cblxuICAgIC8vIE1hcmsgYXMgcHJvY2Vzc2luZyBzbyBvdGhlciBsb29wcyBkb24ndCBzdGFydFxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSB0cnVlXG5cbiAgICB3aGlsZSAodGhpcy5wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgUXVldWUgJHt0aGlzLnVybH0gcHJvY2VzcyBwZW5kaW5nIHdoaWxlIGxvb3AgcmFuIHdpdGggJHt0aGlzLnBlbmRpbmcubGVuZ3RofS5gKVxuICAgICAgaWYgKCF0aGlzLmZpcnN0UmVxdWVzdCAmJiAhdGhpcy5pc1JlcXVlc3RBbGxvd2VkKCkpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuICAgICAgICBjb25zdCBmdXR1cmUgPSB0aGlzLmZyb3plbkF0ICsgdGhpcy5pbnRlcnZhbFxuICAgICAgICBhd2FpdCBkZWxheShmdXR1cmUgPiBub3cgPyBmdXR1cmUgLSBub3cgOiAxMDAwKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5wZW5kaW5nWzBdXG4gICAgICBpZiAocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBiYXNpY1VSTCA9IHRoaXMucmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnVybCwgcmVxdWVzdC5tZXRob2QpXG5cbiAgICAgICAgLy8gSUYgVEhJUyBVUkwgSVMgU1RJTEwgUkFURSBMSU1JVEVELCBUUlkgQUdBSU5cbiAgICAgICAgLy8gSWYgdGhpcyB1cmwgaXMgc3RpbGwgcmF0ZSBsaW1pdGVkLCB0cnkgYWdhaW5cbiAgICAgICAgY29uc3QgdXJsUmVzZXRJbiA9IHRoaXMucmVzdC5jaGVja1JhdGVMaW1pdHMoYmFzaWNVUkwpXG4gICAgICAgIGlmICh1cmxSZXNldEluKSBhd2FpdCBkZWxheSh1cmxSZXNldEluKVxuXG4gICAgICAgIC8vIElGIEEgQlVDS0VUIEVYSVNUUywgQ0hFQ0sgVEhFIEJVQ0tFVCdTIFJBVEUgTElNSVRTXG4gICAgICAgIGNvbnN0IGJ1Y2tldFJlc2V0SW4gPSByZXF1ZXN0LmJ1Y2tldElkID8gdGhpcy5yZXN0LmNoZWNrUmF0ZUxpbWl0cyhyZXF1ZXN0LmJ1Y2tldElkKSA6IGZhbHNlXG4gICAgICAgIGlmIChidWNrZXRSZXNldEluKSBhd2FpdCBkZWxheShidWNrZXRSZXNldEluKVxuXG4gICAgICAgIHRoaXMuZmlyc3RSZXF1ZXN0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5yZW1haW5pbmctLVxuXG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXRJZCAmJiB0aGlzLnJlbWFpbmluZyA9PT0gMCAmJiB0aGlzLmludGVydmFsICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5tYXhcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICAgICAgfSwgdGhpcy5pbnRlcnZhbClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHF1ZXVlLCB3ZSBhcmUgZXhlY3V0aW5nIGl0LlxuICAgICAgICB0aGlzLnBlbmRpbmcuc2hpZnQoKVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHJlcXVlc3QgaXMgYWJsZSB0byBiZSBtYWRlIGdsb2JhbGx5XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdC5pbnZhbGlkQnVja2V0LndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdFxuICAgICAgICAgIC5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGluIHNlbmRSZXF1ZXN0LCB0aGlzIGNhdGNoIGp1c3QgcHJldmVudHMgYm90cyBmcm9tIGR5aW5nXG4gICAgICAgICAgLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKGBRdWV1ZSAke3RoaXMudXJsfSBwcm9jZXNzIHBlbmRpbmcgd2hpbGUgbG9vcCBleGl0ZWQgd2l0aCAke3RoaXMucGVuZGluZy5sZW5ndGh9LmApXG5cbiAgICAvLyBNYXJrIGFzIGZhbHNlIHNvIG5leHQgcGVuZGluZyByZXF1ZXN0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgbmV3IGxvb3AuXG4gICAgdGhpcy5wcm9jZXNzaW5nUGVuZGluZyA9IGZhbHNlXG4gICAgdGhpcy5jbGVhbnVwKClcbiAgfVxuXG4gIGhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoaGVhZGVyczogeyBtYXg/OiBudW1iZXI7IGludGVydmFsPzogbnVtYmVyOyByZW1haW5pbmc/OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGlmIChoZWFkZXJzLm1heCA9PT0gMCkge1xuICAgICAgdGhpcy5yZW1haW5pbmcrK1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZyb3plbkF0KSB0aGlzLmZyb3plbkF0ID0gRGF0ZS5ub3coKVxuICAgIGlmIChoZWFkZXJzLmludGVydmFsICE9PSB1bmRlZmluZWQpIHRoaXMuaW50ZXJ2YWwgPSBoZWFkZXJzLmludGVydmFsXG4gICAgaWYgKGhlYWRlcnMucmVtYWluaW5nICE9PSB1bmRlZmluZWQpIHRoaXMucmVtYWluaW5nID0gaGVhZGVycy5yZW1haW5pbmdcblxuICAgIGlmICh0aGlzLnJlbWFpbmluZyA8PSAxKSB7XG4gICAgICB0aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbWFpbmluZyA9IHRoaXMubWF4XG4gICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICB9LCBoZWFkZXJzLmludGVydmFsKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ha2VSZXF1ZXN0KG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMud2FpdFVudGlsUmVxdWVzdEF2YWlsYWJsZSgpXG4gICAgdGhpcy5wZW5kaW5nLnB1c2gob3B0aW9ucylcbiAgICB0aGlzLnByb2Nlc3NQZW5kaW5nKClcbiAgfVxuXG4gIC8qKiBDbGVhbnMgdXAgdGhlIHF1ZXVlIGJ5IGNoZWNraW5nIGlmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCBhbmQgcmVtb3ZpbmcgaXQuICovXG4gIGNsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUXVldWVDbGVhcmFibGUoKSkge1xuICAgICAgdGhpcy5wcm9jZXNzUGVuZGluZygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtRdWV1ZV0gJHt0aGlzLnVybH0uIERlbGF5aW5nIGRlbGV0ZSBmb3IgJHt0aGlzLmRlbGV0ZVF1ZXVlRGVsYXl9bXNgKVxuICAgIC8vIERlbGV0ZSBpbiBhIG1pbnV0ZSBnaXZpbmcgYSBiaXQgb2YgdGltZSB0byBhbGxvdyBuZXcgcmVxdWVzdHMgdGhhdCBtYXkgcmV1c2UgdGhpcyBxdWV1ZVxuICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzUXVldWVDbGVhcmFibGUoKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtRdWV1ZV0gJHt0aGlzLnVybH0uIGlzIG5vdCBjbGVhcmFibGUuIFJlc3RhcnRpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZS5gKVxuICAgICAgICB0aGlzLnByb2Nlc3NQZW5kaW5nKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMudXJsfS4gRGVsZXRpbmdgKVxuICAgICAgLy8gTm8gcmVxdWVzdHMgaGF2ZSBiZWVuIHJlcXVlc3RlZCBmb3IgdGhpcyBxdWV1ZSBzbyB3ZSBudWtlIHRoaXMgcXVldWVcbiAgICAgIHRoaXMucmVzdC5xdWV1ZXMuZGVsZXRlKHRoaXMudXJsKVxuICAgICAgbG9nZ2VyLmRlYnVnKGBbUXVldWVdICR7dGhpcy51cmx9LiBEZWxldGVkISBSZW1haW5pbmc6ICgke3RoaXMucmVzdC5xdWV1ZXMuc2l6ZX0pYCwgWy4uLnRoaXMucmVzdC5xdWV1ZXMua2V5cygpXSlcbiAgICB9LCB0aGlzLmRlbGV0ZVF1ZXVlRGVsYXkpXG4gIH1cblxuICBpc1F1ZXVlQ2xlYXJhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmZpcnN0UmVxdWVzdCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHRoaXMud2FpdGluZy5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wZW5kaW5nLmxlbmd0aCA+IDApIHJldHVybiBmYWxzZVxuICAgIGlmICh0aGlzLmludGVydmFsID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nUGVuZGluZykgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIEhvdyBtYW55IHJlcXVlc3RzIGFyZSByZW1haW5pbmcuIERlZmF1bHRzIHRvIDEgKi9cbiAgcmVtYWluaW5nPzogbnVtYmVyXG4gIC8qKiBNYXggbnVtYmVyIG9mIHJlcXVlc3RzIGFsbG93ZWQgaW4gdGhpcyB0aGlzLiBEZWZhdWx0cyB0byAxLiAqL1xuICBtYXg/OiBudW1iZXJcbiAgLyoqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IGRpc2NvcmQgYWxsb3dzIHRvIG1ha2UgdGhlIG1heCBudW1iZXIgb2YgaW52YWxpZCByZXF1ZXN0cy4gRGVmYXVsdHMgdG8gMCAqL1xuICBpbnRlcnZhbD86IG51bWJlclxuICAvKiogdGltZXIgdG8gcmVzZXQgdG8gMCAqL1xuICB0aW1lb3V0SWQ/OiBOb2RlSlMuVGltZW91dFxuICAvKiogVGhlIHVybCB0aGlzIHF1ZXVlIHdpbGwgYmUgaGFuZGxpbmcuICovXG4gIHVybDogc3RyaW5nXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcgdGhpcyBxdWV1ZSBpZiBpdCBpcyBlbXB0eS4gRGVmYXVsdHMgdG8gNjAwMDAob25lIG1pbnV0ZSkuICovXG4gIGRlbGV0ZVF1ZXVlRGVsYXk/OiBudW1iZXJcbn1cbiJdLCJuYW1lcyI6WyJkZWxheSIsImxvZ2dlciIsIlF1ZXVlIiwicmVtYWluaW5nIiwibWF4IiwiaW50ZXJ2YWwiLCJ3YWl0aW5nIiwicGVuZGluZyIsInByb2Nlc3NpbmciLCJwcm9jZXNzaW5nUGVuZGluZyIsImZpcnN0UmVxdWVzdCIsImZyb3plbkF0IiwiZGVsZXRlUXVldWVEZWxheSIsImNvbnN0cnVjdG9yIiwicmVzdCIsIm9wdGlvbnMiLCJ1cmwiLCJ0aW1lb3V0SWQiLCJpc1JlcXVlc3RBbGxvd2VkIiwid2FpdFVudGlsUmVxdWVzdEF2YWlsYWJsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicHVzaCIsInByb2Nlc3NXYWl0aW5nIiwibGVuZ3RoIiwiZGVidWciLCJzaGlmdCIsInByb2Nlc3NQZW5kaW5nIiwibm93IiwiRGF0ZSIsImZ1dHVyZSIsInJlcXVlc3QiLCJiYXNpY1VSTCIsInNpbXBsaWZ5VXJsIiwibWV0aG9kIiwidXJsUmVzZXRJbiIsImNoZWNrUmF0ZUxpbWl0cyIsImJ1Y2tldFJlc2V0SW4iLCJidWNrZXRJZCIsInNldFRpbWVvdXQiLCJ1bmRlZmluZWQiLCJpbnZhbGlkQnVja2V0Iiwic2VuZFJlcXVlc3QiLCJjYXRjaCIsImNsZWFudXAiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaGVhZGVycyIsIm1ha2VSZXF1ZXN0IiwiaXNRdWV1ZUNsZWFyYWJsZSIsInF1ZXVlcyIsImRlbGV0ZSIsInNpemUiLCJrZXlzIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFTQSxTQUFBQSxDQUFLLENBQUVDLFVBQUFBLENBQU0sS0FBUSxtQkFBbUIsQUFHakQsUUFBTyxNQUFNQyxNQUlYQyxVQUFvQixDQUFDLEFBRXJCQyxDQUFBQSxJQUFjLENBQUMsQUFFZkMsQ0FBQUEsU0FBbUIsQ0FBQyxBQUlwQkMsQ0FBQUEsUUFBNEQsRUFBRSxBQUU5REMsQ0FBQUEsUUFBZ0MsRUFBRSxBQUVsQ0MsQ0FBQUEsV0FBc0IsQ0FBQSxDQUFLLEFBRTNCQyxDQUFBQSxr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
|
|
1
|
+
import { delay, logger } from '@discordeno/utils';
|
|
2
|
+
export class Queue {
|
|
3
|
+
/** Amount of requests that have are remaining. Defaults to 1. */ remaining = 1;
|
|
4
|
+
/** Max requests for this this. Defaults to 1. */ max = 1;
|
|
5
|
+
/** The time that discord allows to make the max number of requests. Defaults to 0 */ interval = 0;
|
|
6
|
+
/** The requests that are currently pending. */ waiting = [];
|
|
7
|
+
/** The requests that are currently pending. */ pending = [];
|
|
8
|
+
/** Whether or not the waiting queue is already processing. */ processing = false;
|
|
9
|
+
/** Whether or not the pending queue is already processing. */ processingPending = false;
|
|
10
|
+
/** Whether the first request is pending. */ firstRequest = false;
|
|
11
|
+
/** When requests started being made to determine when the interval will reset it. */ frozenAt = 0;
|
|
12
|
+
/** The time in milliseconds to wait before deleting this queue if it is empty. Defaults to 60000(one minute). */ deleteQueueDelay = 60000;
|
|
13
|
+
constructor(rest, options){
|
|
14
|
+
this.rest = rest;
|
|
15
|
+
this.url = options.url;
|
|
16
|
+
if (options.interval) this.interval = options.interval;
|
|
17
|
+
if (options.max) this.max = options.max;
|
|
18
|
+
if (options.remaining) this.remaining = options.remaining;
|
|
19
|
+
if (options.timeoutId) this.timeoutId = options.timeoutId;
|
|
20
|
+
if (options.deleteQueueDelay) this.deleteQueueDelay = options.deleteQueueDelay;
|
|
21
|
+
}
|
|
22
|
+
/** Check if there is any remaining requests that are allowed. */ isRequestAllowed() {
|
|
23
|
+
return this.remaining > 0;
|
|
24
|
+
}
|
|
25
|
+
/** Pauses the execution until a request is allowed to be made. */ async waitUntilRequestAvailable() {
|
|
26
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
27
|
+
return await new Promise(async (resolve)=>{
|
|
28
|
+
// If whatever amount of requests is left is more than the safety margin, allow the request
|
|
29
|
+
if (this.isRequestAllowed()) {
|
|
30
|
+
// this.remaining++;
|
|
31
|
+
resolve();
|
|
32
|
+
} else {
|
|
33
|
+
this.waiting.push(resolve);
|
|
34
|
+
await this.processWaiting();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** Process the queue of requests waiting to be handled. */ async processWaiting() {
|
|
39
|
+
// If already processing, that loop will handle all waiting requests.
|
|
40
|
+
if (this.processing) return;
|
|
41
|
+
// Mark as processing so other loops don't start
|
|
42
|
+
this.processing = true;
|
|
43
|
+
while(this.waiting.length > 0){
|
|
44
|
+
logger.debug(`[Queue] ${this.url} process waiting while loop ran.`);
|
|
45
|
+
if (this.isRequestAllowed()) {
|
|
46
|
+
// Resolve the next item in the queue
|
|
47
|
+
this.waiting.shift()?.();
|
|
48
|
+
} else {
|
|
49
|
+
await delay(1000);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Mark as false so next pending request can be triggered by new loop.
|
|
53
|
+
this.processing = false;
|
|
54
|
+
}
|
|
55
|
+
/** Process the queue of all requests pending to be sent. */ async processPending() {
|
|
56
|
+
// If already processing, that loop will handle all pending requests.
|
|
57
|
+
if (this.processingPending || !this.pending.length) return;
|
|
58
|
+
// Mark as processing so other loops don't start
|
|
59
|
+
this.processingPending = true;
|
|
60
|
+
while(this.pending.length > 0){
|
|
61
|
+
logger.debug(`Queue ${this.url} process pending while loop ran with ${this.pending.length}.`);
|
|
62
|
+
if (!this.firstRequest && !this.isRequestAllowed()) {
|
|
63
|
+
const now = Date.now();
|
|
64
|
+
const future = this.frozenAt + this.interval;
|
|
65
|
+
await delay(future > now ? future - now : 1000);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const request = this.pending[0];
|
|
69
|
+
if (request) {
|
|
70
|
+
const basicURL = this.rest.simplifyUrl(request.url, request.method);
|
|
71
|
+
// IF THIS URL IS STILL RATE LIMITED, TRY AGAIN
|
|
72
|
+
// If this url is still rate limited, try again
|
|
73
|
+
const urlResetIn = this.rest.checkRateLimits(basicURL);
|
|
74
|
+
if (urlResetIn) await delay(urlResetIn);
|
|
75
|
+
// IF A BUCKET EXISTS, CHECK THE BUCKET'S RATE LIMITS
|
|
76
|
+
const bucketResetIn = request.bucketId ? this.rest.checkRateLimits(request.bucketId) : false;
|
|
77
|
+
if (bucketResetIn) await delay(bucketResetIn);
|
|
78
|
+
this.firstRequest = false;
|
|
79
|
+
this.remaining--;
|
|
80
|
+
if (this.timeoutId && this.remaining === 0 && this.interval !== 0) {
|
|
81
|
+
this.timeoutId = setTimeout(()=>{
|
|
82
|
+
this.remaining = this.max;
|
|
83
|
+
this.timeoutId = undefined;
|
|
84
|
+
}, this.interval);
|
|
85
|
+
}
|
|
86
|
+
// Remove from queue, we are executing it.
|
|
87
|
+
this.pending.shift();
|
|
88
|
+
// Check if this request is able to be made globally
|
|
89
|
+
await this.rest.invalidBucket.waitUntilRequestAvailable();
|
|
90
|
+
await this.rest.sendRequest(request)// Should be handled in sendRequest, this catch just prevents bots from dying
|
|
91
|
+
.catch(()=>null);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
logger.debug(`Queue ${this.url} process pending while loop exited with ${this.pending.length}.`);
|
|
95
|
+
// Mark as false so next pending request can be triggered by new loop.
|
|
96
|
+
this.processingPending = false;
|
|
97
|
+
this.cleanup();
|
|
98
|
+
}
|
|
99
|
+
handleCompletedRequest(headers) {
|
|
100
|
+
if (headers.max === 0) {
|
|
101
|
+
this.remaining++;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (!this.frozenAt) this.frozenAt = Date.now();
|
|
105
|
+
if (headers.interval !== undefined) this.interval = headers.interval;
|
|
106
|
+
if (headers.remaining !== undefined) this.remaining = headers.remaining;
|
|
107
|
+
if (this.remaining <= 1) {
|
|
108
|
+
this.timeoutId = setTimeout(()=>{
|
|
109
|
+
this.remaining = this.max;
|
|
110
|
+
this.timeoutId = undefined;
|
|
111
|
+
}, headers.interval);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Checks if a request is available and adds it to the queue. Also triggers queue processing if not already processing. */ async makeRequest(options) {
|
|
115
|
+
await this.waitUntilRequestAvailable();
|
|
116
|
+
this.pending.push(options);
|
|
117
|
+
this.processPending();
|
|
118
|
+
}
|
|
119
|
+
/** Cleans up the queue by checking if there is nothing left and removing it. */ cleanup() {
|
|
120
|
+
if (!this.isQueueClearable()) {
|
|
121
|
+
this.processPending();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
logger.debug(`[Queue] ${this.url}. Delaying delete for ${this.deleteQueueDelay}ms`);
|
|
125
|
+
// Delete in a minute giving a bit of time to allow new requests that may reuse this queue
|
|
126
|
+
setTimeout(async ()=>{
|
|
127
|
+
if (!this.isQueueClearable()) {
|
|
128
|
+
logger.debug(`[Queue] ${this.url}. is not clearable. Restarting processing of queue.`);
|
|
129
|
+
this.processPending();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
logger.debug(`[Queue] ${this.url}. Deleting`);
|
|
133
|
+
if (this.timeoutId) clearTimeout(this.timeoutId);
|
|
134
|
+
// No requests have been requested for this queue so we nuke this queue
|
|
135
|
+
this.rest.queues.delete(this.url);
|
|
136
|
+
logger.debug(`[Queue] ${this.url}. Deleted! Remaining: (${this.rest.queues.size})`, [
|
|
137
|
+
...this.rest.queues.keys()
|
|
138
|
+
]);
|
|
139
|
+
if (this.rest.queues.size) this.processPending();
|
|
140
|
+
}, this.deleteQueueDelay);
|
|
141
|
+
}
|
|
142
|
+
/** Simply checks if the queue is able to be cleared or it has requests pending. */ isQueueClearable() {
|
|
143
|
+
if (this.firstRequest) return false;
|
|
144
|
+
if (this.waiting.length > 0) return false;
|
|
145
|
+
if (this.pending.length > 0) return false;
|
|
146
|
+
if (this.interval === 0) return false;
|
|
147
|
+
if (this.processing) return false;
|
|
148
|
+
if (this.processingPending) return false;
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/queue.ts"],"sourcesContent":["import { delay, logger } from '@discordeno/utils'\nimport type { RestManager, SendRequestOptions } from './types.js'\n\nexport class Queue {\n /** The rest manager */\n rest: RestManager\n /** Amount of requests that have are remaining. Defaults to 1. */\n remaining: number = 1\n /** Max requests for this this. Defaults to 1. */\n max: number = 1\n /** The time that discord allows to make the max number of requests. Defaults to 0 */\n interval: number = 0\n /** timer to reset to 0 */\n timeoutId: NodeJS.Timeout | undefined\n /** The requests that are currently pending. */\n waiting: Array<(value: void | PromiseLike<void>) => void> = []\n /** The requests that are currently pending. */\n pending: SendRequestOptions[] = []\n /** Whether or not the waiting queue is already processing. */\n processing: boolean = false\n /** Whether or not the pending queue is already processing. */\n processingPending: boolean = false\n /** Whether the first request is pending. */\n firstRequest: boolean = false\n /** The url that all the requests in this queue are sent to. */\n url: string\n /** When requests started being made to determine when the interval will reset it. */\n frozenAt: number = 0\n /** The time in milliseconds to wait before deleting this queue if it is empty. Defaults to 60000(one minute). */\n deleteQueueDelay: number = 60000\n\n constructor(rest: RestManager, options: QueueOptions) {\n this.rest = rest\n this.url = options.url\n\n if (options.interval) this.interval = options.interval\n if (options.max) this.max = options.max\n if (options.remaining) this.remaining = options.remaining\n if (options.timeoutId) this.timeoutId = options.timeoutId\n if (options.deleteQueueDelay) this.deleteQueueDelay = options.deleteQueueDelay\n }\n\n /** Check if there is any remaining requests that are allowed. */\n isRequestAllowed(): boolean {\n return this.remaining > 0\n }\n\n /** Pauses the execution until a request is allowed to be made. */\n async waitUntilRequestAvailable(): Promise<void> {\n // eslint-disable-next-line no-async-promise-executor\n return await new Promise(async (resolve) => {\n // If whatever amount of requests is left is more than the safety margin, allow the request\n if (this.isRequestAllowed()) {\n // this.remaining++;\n resolve()\n } else {\n this.waiting.push(resolve)\n await this.processWaiting()\n }\n })\n }\n\n /** Process the queue of requests waiting to be handled. */\n async processWaiting(): Promise<void> {\n // If already processing, that loop will handle all waiting requests.\n if (this.processing) return\n // Mark as processing so other loops don't start\n this.processing = true\n\n while (this.waiting.length > 0) {\n logger.debug(`[Queue] ${this.url} process waiting while loop ran.`)\n if (this.isRequestAllowed()) {\n // Resolve the next item in the queue\n this.waiting.shift()?.()\n } else {\n await delay(1000)\n }\n }\n\n // Mark as false so next pending request can be triggered by new loop.\n this.processing = false\n }\n\n /** Process the queue of all requests pending to be sent. */\n async processPending(): Promise<void> {\n // If already processing, that loop will handle all pending requests.\n if (this.processingPending || !this.pending.length) return\n\n // Mark as processing so other loops don't start\n this.processingPending = true\n\n while (this.pending.length > 0) {\n logger.debug(`Queue ${this.url} process pending while loop ran with ${this.pending.length}.`)\n if (!this.firstRequest && !this.isRequestAllowed()) {\n const now = Date.now()\n const future = this.frozenAt + this.interval\n await delay(future > now ? future - now : 1000)\n continue\n }\n\n const request = this.pending[0]\n if (request) {\n const basicURL = this.rest.simplifyUrl(request.url, request.method)\n\n // IF THIS URL IS STILL RATE LIMITED, TRY AGAIN\n // If this url is still rate limited, try again\n const urlResetIn = this.rest.checkRateLimits(basicURL)\n if (urlResetIn) await delay(urlResetIn)\n\n // IF A BUCKET EXISTS, CHECK THE BUCKET'S RATE LIMITS\n const bucketResetIn = request.bucketId ? this.rest.checkRateLimits(request.bucketId) : false\n if (bucketResetIn) await delay(bucketResetIn)\n\n this.firstRequest = false\n this.remaining--\n\n if (this.timeoutId && this.remaining === 0 && this.interval !== 0) {\n this.timeoutId = setTimeout(() => {\n this.remaining = this.max\n this.timeoutId = undefined\n }, this.interval)\n }\n\n // Remove from queue, we are executing it.\n this.pending.shift()\n // Check if this request is able to be made globally\n await this.rest.invalidBucket.waitUntilRequestAvailable()\n\n await this.rest\n .sendRequest(request)\n // Should be handled in sendRequest, this catch just prevents bots from dying\n .catch(() => null)\n }\n }\n\n logger.debug(`Queue ${this.url} process pending while loop exited with ${this.pending.length}.`)\n\n // Mark as false so next pending request can be triggered by new loop.\n this.processingPending = false\n this.cleanup()\n }\n\n handleCompletedRequest(headers: { max?: number; interval?: number; remaining?: number }): void {\n if (headers.max === 0) {\n this.remaining++\n return\n }\n\n if (!this.frozenAt) this.frozenAt = Date.now()\n if (headers.interval !== undefined) this.interval = headers.interval\n if (headers.remaining !== undefined) this.remaining = headers.remaining\n\n if (this.remaining <= 1) {\n this.timeoutId = setTimeout(() => {\n this.remaining = this.max\n this.timeoutId = undefined\n }, headers.interval)\n }\n }\n\n /** Checks if a request is available and adds it to the queue. Also triggers queue processing if not already processing. */\n async makeRequest(options: SendRequestOptions): Promise<void> {\n await this.waitUntilRequestAvailable()\n this.pending.push(options)\n this.processPending()\n }\n\n /** Cleans up the queue by checking if there is nothing left and removing it. */\n cleanup(): void {\n if (!this.isQueueClearable()) {\n this.processPending()\n return\n }\n\n logger.debug(`[Queue] ${this.url}. Delaying delete for ${this.deleteQueueDelay}ms`)\n // Delete in a minute giving a bit of time to allow new requests that may reuse this queue\n setTimeout(async () => {\n if (!this.isQueueClearable()) {\n logger.debug(`[Queue] ${this.url}. is not clearable. Restarting processing of queue.`)\n this.processPending()\n return\n }\n\n logger.debug(`[Queue] ${this.url}. Deleting`)\n if (this.timeoutId) clearTimeout(this.timeoutId)\n // No requests have been requested for this queue so we nuke this queue\n this.rest.queues.delete(this.url)\n logger.debug(`[Queue] ${this.url}. Deleted! Remaining: (${this.rest.queues.size})`, [...this.rest.queues.keys()])\n if (this.rest.queues.size) this.processPending()\n }, this.deleteQueueDelay)\n }\n\n /** Simply checks if the queue is able to be cleared or it has requests pending. */\n isQueueClearable(): boolean {\n if (this.firstRequest) return false\n if (this.waiting.length > 0) return false\n if (this.pending.length > 0) return false\n if (this.interval === 0) return false\n if (this.processing) return false\n if (this.processingPending) return false\n\n return true\n }\n}\n\nexport interface QueueOptions {\n /** How many requests are remaining. Defaults to 1 */\n remaining?: number\n /** Max number of requests allowed in this this. Defaults to 1. */\n max?: number\n /** The time in milliseconds that discord allows to make the max number of invalid requests. Defaults to 0 */\n interval?: number\n /** timer to reset to 0 */\n timeoutId?: NodeJS.Timeout\n /** The url this queue will be handling. */\n url: string\n /** The time in milliseconds to wait before deleting this queue if it is empty. Defaults to 60000(one minute). */\n deleteQueueDelay?: number\n}\n"],"names":["delay","logger","Queue","remaining","max","interval","waiting","pending","processing","processingPending","firstRequest","frozenAt","deleteQueueDelay","constructor","rest","options","url","timeoutId","isRequestAllowed","waitUntilRequestAvailable","Promise","resolve","push","processWaiting","length","debug","shift","processPending","now","Date","future","request","basicURL","simplifyUrl","method","urlResetIn","checkRateLimits","bucketResetIn","bucketId","setTimeout","undefined","invalidBucket","sendRequest","catch","cleanup","handleCompletedRequest","headers","makeRequest","isQueueClearable","clearTimeout","queues","delete","size","keys"],"mappings":"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"}
|