seyfert 0.1.0
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/LICENSE +190 -0
- package/README.md +57 -0
- package/lib/api/CDN.d.ts +220 -0
- package/lib/api/CDN.js +236 -0
- package/lib/api/REST.d.ts +127 -0
- package/lib/api/REST.js +424 -0
- package/lib/api/Router.d.ts +17 -0
- package/lib/api/Router.js +63 -0
- package/lib/api/Routes/applications.d.ts +46 -0
- package/lib/api/Routes/applications.js +2 -0
- package/lib/api/Routes/cdn.d.ts +66 -0
- package/lib/api/Routes/cdn.js +2 -0
- package/lib/api/Routes/channels.d.ts +109 -0
- package/lib/api/Routes/channels.js +2 -0
- package/lib/api/Routes/gateway.d.ts +11 -0
- package/lib/api/Routes/gateway.js +2 -0
- package/lib/api/Routes/guilds.d.ts +171 -0
- package/lib/api/Routes/guilds.js +2 -0
- package/lib/api/Routes/index.d.ts +13 -0
- package/lib/api/Routes/index.js +17 -0
- package/lib/api/Routes/interactions.d.ts +14 -0
- package/lib/api/Routes/interactions.js +2 -0
- package/lib/api/Routes/invites.d.ts +9 -0
- package/lib/api/Routes/invites.js +2 -0
- package/lib/api/Routes/stage-instances.d.ts +13 -0
- package/lib/api/Routes/stage-instances.js +2 -0
- package/lib/api/Routes/stickers.d.ts +11 -0
- package/lib/api/Routes/stickers.js +2 -0
- package/lib/api/Routes/users.d.ts +35 -0
- package/lib/api/Routes/users.js +2 -0
- package/lib/api/Routes/voice.d.ts +10 -0
- package/lib/api/Routes/voice.js +2 -0
- package/lib/api/Routes/webhooks.d.ts +29 -0
- package/lib/api/Routes/webhooks.js +2 -0
- package/lib/api/errors/DiscordAPIError.d.ts +51 -0
- package/lib/api/errors/DiscordAPIError.js +81 -0
- package/lib/api/errors/HTTPError.d.ts +20 -0
- package/lib/api/errors/HTTPError.js +28 -0
- package/lib/api/errors/RateLimitError.d.ts +19 -0
- package/lib/api/errors/RateLimitError.js +37 -0
- package/lib/api/handlers/BurstHandler.d.ts +51 -0
- package/lib/api/handlers/BurstHandler.js +124 -0
- package/lib/api/handlers/SequentialHandler.d.ts +81 -0
- package/lib/api/handlers/SequentialHandler.js +365 -0
- package/lib/api/handlers/Shared.d.ts +14 -0
- package/lib/api/handlers/Shared.js +125 -0
- package/lib/api/index.d.ts +5 -0
- package/lib/api/index.js +21 -0
- package/lib/api/interfaces/Handler.d.ts +21 -0
- package/lib/api/interfaces/Handler.js +2 -0
- package/lib/api/shared.d.ts +7 -0
- package/lib/api/shared.js +27 -0
- package/lib/api/utils/constants.d.ts +39 -0
- package/lib/api/utils/constants.js +50 -0
- package/lib/api/utils/types.d.ts +335 -0
- package/lib/api/utils/types.js +14 -0
- package/lib/api/utils/utils.d.ts +52 -0
- package/lib/api/utils/utils.js +159 -0
- package/lib/builders/ActionRow.d.ts +40 -0
- package/lib/builders/ActionRow.js +58 -0
- package/lib/builders/Attachment.d.ts +106 -0
- package/lib/builders/Attachment.js +196 -0
- package/lib/builders/Base.d.ts +10 -0
- package/lib/builders/Base.js +13 -0
- package/lib/builders/Button.d.ts +59 -0
- package/lib/builders/Button.js +94 -0
- package/lib/builders/MessageEmbed.d.ts +116 -0
- package/lib/builders/MessageEmbed.js +159 -0
- package/lib/builders/Modal.d.ts +111 -0
- package/lib/builders/Modal.js +162 -0
- package/lib/builders/SelectMenu.d.ts +201 -0
- package/lib/builders/SelectMenu.js +293 -0
- package/lib/builders/index.d.ts +12 -0
- package/lib/builders/index.js +54 -0
- package/lib/builders/types.d.ts +21 -0
- package/lib/builders/types.js +2 -0
- package/lib/cache/adapters/default.d.ts +24 -0
- package/lib/cache/adapters/default.js +118 -0
- package/lib/cache/adapters/index.d.ts +4 -0
- package/lib/cache/adapters/index.js +20 -0
- package/lib/cache/adapters/redis.d.ts +35 -0
- package/lib/cache/adapters/redis.js +180 -0
- package/lib/cache/adapters/types.d.ts +25 -0
- package/lib/cache/adapters/types.js +2 -0
- package/lib/cache/adapters/workeradapter.d.ts +24 -0
- package/lib/cache/adapters/workeradapter.js +76 -0
- package/lib/cache/index.d.ts +97 -0
- package/lib/cache/index.js +394 -0
- package/lib/cache/resources/channels.d.ts +7 -0
- package/lib/cache/resources/channels.js +20 -0
- package/lib/cache/resources/default/base.d.ts +25 -0
- package/lib/cache/resources/default/base.js +75 -0
- package/lib/cache/resources/default/guild-based.d.ts +33 -0
- package/lib/cache/resources/default/guild-based.js +91 -0
- package/lib/cache/resources/default/guild-related.d.ts +32 -0
- package/lib/cache/resources/default/guild-related.js +102 -0
- package/lib/cache/resources/emojis.d.ts +7 -0
- package/lib/cache/resources/emojis.js +17 -0
- package/lib/cache/resources/guilds.d.ts +10 -0
- package/lib/cache/resources/guilds.js +117 -0
- package/lib/cache/resources/members.d.ts +10 -0
- package/lib/cache/resources/members.js +41 -0
- package/lib/cache/resources/presence.d.ts +9 -0
- package/lib/cache/resources/presence.js +14 -0
- package/lib/cache/resources/roles.d.ts +7 -0
- package/lib/cache/resources/roles.js +17 -0
- package/lib/cache/resources/stage-instances.d.ts +5 -0
- package/lib/cache/resources/stage-instances.js +8 -0
- package/lib/cache/resources/stickers.d.ts +7 -0
- package/lib/cache/resources/stickers.js +17 -0
- package/lib/cache/resources/threads.d.ts +7 -0
- package/lib/cache/resources/threads.js +17 -0
- package/lib/cache/resources/users.d.ts +7 -0
- package/lib/cache/resources/users.js +17 -0
- package/lib/cache/resources/voice-states.d.ts +9 -0
- package/lib/cache/resources/voice-states.js +13 -0
- package/lib/client/base.d.ts +244 -0
- package/lib/client/base.js +178 -0
- package/lib/client/client.d.ts +32 -0
- package/lib/client/client.js +156 -0
- package/lib/client/httpclient.d.ts +21 -0
- package/lib/client/httpclient.js +143 -0
- package/lib/client/index.d.ts +4 -0
- package/lib/client/index.js +19 -0
- package/lib/client/oninteraction.d.ts +4 -0
- package/lib/client/oninteraction.js +180 -0
- package/lib/client/workerclient.d.ts +28 -0
- package/lib/client/workerclient.js +213 -0
- package/lib/collection.d.ts +233 -0
- package/lib/collection.js +371 -0
- package/lib/commands/applications/chat.d.ts +139 -0
- package/lib/commands/applications/chat.js +173 -0
- package/lib/commands/applications/chatcontext.d.ts +28 -0
- package/lib/commands/applications/chatcontext.js +53 -0
- package/lib/commands/applications/menu.d.ts +39 -0
- package/lib/commands/applications/menu.js +87 -0
- package/lib/commands/applications/menucontext.d.ts +25 -0
- package/lib/commands/applications/menucontext.js +64 -0
- package/lib/commands/applications/options.d.ts +67 -0
- package/lib/commands/applications/options.js +44 -0
- package/lib/commands/applications/shared.d.ts +35 -0
- package/lib/commands/applications/shared.js +2 -0
- package/lib/commands/decorators.d.ts +107 -0
- package/lib/commands/decorators.js +85 -0
- package/lib/commands/handler.d.ts +15 -0
- package/lib/commands/handler.js +140 -0
- package/lib/commands/index.d.ts +8 -0
- package/lib/commands/index.js +24 -0
- package/lib/commands/optionresolver.d.ts +49 -0
- package/lib/commands/optionresolver.js +146 -0
- package/lib/common/bot/watcher.d.ts +53 -0
- package/lib/common/bot/watcher.js +104 -0
- package/lib/common/index.d.ts +13 -0
- package/lib/common/index.js +30 -0
- package/lib/common/it/colors.d.ts +274 -0
- package/lib/common/it/colors.js +453 -0
- package/lib/common/it/constants.d.ts +36 -0
- package/lib/common/it/constants.js +40 -0
- package/lib/common/it/logger.d.ts +114 -0
- package/lib/common/it/logger.js +189 -0
- package/lib/common/it/utils.d.ts +107 -0
- package/lib/common/it/utils.js +275 -0
- package/lib/common/shorters/base.d.ts +5 -0
- package/lib/common/shorters/base.js +10 -0
- package/lib/common/shorters/channels.d.ts +90 -0
- package/lib/common/shorters/channels.js +95 -0
- package/lib/common/shorters/guilds.d.ts +389 -0
- package/lib/common/shorters/guilds.js +350 -0
- package/lib/common/shorters/members.d.ts +115 -0
- package/lib/common/shorters/members.js +179 -0
- package/lib/common/shorters/messages.d.ts +27 -0
- package/lib/common/shorters/messages.js +117 -0
- package/lib/common/shorters/roles.d.ts +12 -0
- package/lib/common/shorters/roles.js +51 -0
- package/lib/common/shorters/templates.d.ts +12 -0
- package/lib/common/shorters/templates.js +29 -0
- package/lib/common/shorters/users.d.ts +11 -0
- package/lib/common/shorters/users.js +42 -0
- package/lib/common/shorters/webhook.d.ts +33 -0
- package/lib/common/shorters/webhook.js +69 -0
- package/lib/common/types/options.d.ts +10 -0
- package/lib/common/types/options.js +2 -0
- package/lib/common/types/resolvables.d.ts +10 -0
- package/lib/common/types/resolvables.js +2 -0
- package/lib/common/types/util.d.ts +90 -0
- package/lib/common/types/util.js +2 -0
- package/lib/common/types/write.d.ts +21 -0
- package/lib/common/types/write.js +2 -0
- package/lib/components/ActionRow.d.ts +10 -0
- package/lib/components/ActionRow.js +13 -0
- package/lib/components/ButtonComponent.d.ts +19 -0
- package/lib/components/ButtonComponent.js +34 -0
- package/lib/components/ChannelSelectMenuComponent.d.ts +6 -0
- package/lib/components/ChannelSelectMenuComponent.js +12 -0
- package/lib/components/MentionableSelectMenuComponent.d.ts +4 -0
- package/lib/components/MentionableSelectMenuComponent.js +7 -0
- package/lib/components/RoleSelectMenuComponent.d.ts +4 -0
- package/lib/components/RoleSelectMenuComponent.js +7 -0
- package/lib/components/StringSelectMenuComponent.d.ts +6 -0
- package/lib/components/StringSelectMenuComponent.js +12 -0
- package/lib/components/TextInputComponent.d.ts +7 -0
- package/lib/components/TextInputComponent.js +14 -0
- package/lib/components/UserSelectMenuComponent.d.ts +4 -0
- package/lib/components/UserSelectMenuComponent.js +7 -0
- package/lib/components/command.d.ts +23 -0
- package/lib/components/command.js +15 -0
- package/lib/components/handler.d.ts +48 -0
- package/lib/components/handler.js +231 -0
- package/lib/components/index.d.ts +20 -0
- package/lib/components/index.js +55 -0
- package/lib/components/listener.d.ts +11 -0
- package/lib/components/listener.js +18 -0
- package/lib/events/event.d.ts +23 -0
- package/lib/events/event.js +2 -0
- package/lib/events/handler.d.ts +19 -0
- package/lib/events/handler.js +112 -0
- package/lib/events/hooks/application_command.d.ts +12 -0
- package/lib/events/hooks/application_command.js +8 -0
- package/lib/events/hooks/auto_moderation.d.ts +22 -0
- package/lib/events/hooks/auto_moderation.js +21 -0
- package/lib/events/hooks/channel.d.ts +11 -0
- package/lib/events/hooks/channel.js +24 -0
- package/lib/events/hooks/custom.d.ts +4 -0
- package/lib/events/hooks/custom.js +11 -0
- package/lib/events/hooks/dispatch.d.ts +5 -0
- package/lib/events/hooks/dispatch.js +12 -0
- package/lib/events/hooks/entitlement.d.ts +35 -0
- package/lib/events/hooks/entitlement.js +16 -0
- package/lib/events/hooks/guild.d.ts +228 -0
- package/lib/events/hooks/guild.js +101 -0
- package/lib/events/hooks/index.d.ts +23 -0
- package/lib/events/hooks/index.js +34 -0
- package/lib/events/hooks/integration.d.ts +94 -0
- package/lib/events/hooks/integration.js +27 -0
- package/lib/events/hooks/interactions.d.ts +4 -0
- package/lib/events/hooks/interactions.js +8 -0
- package/lib/events/hooks/invite.d.ts +21 -0
- package/lib/events/hooks/invite.js +12 -0
- package/lib/events/hooks/message.d.ts +69 -0
- package/lib/events/hooks/message.js +37 -0
- package/lib/events/hooks/presence.d.ts +27 -0
- package/lib/events/hooks/presence.js +8 -0
- package/lib/events/hooks/stage.d.ts +29 -0
- package/lib/events/hooks/stage.js +16 -0
- package/lib/events/hooks/thread.d.ts +198 -0
- package/lib/events/hooks/thread.js +29 -0
- package/lib/events/hooks/typing.d.ts +16 -0
- package/lib/events/hooks/typing.js +14 -0
- package/lib/events/hooks/user.d.ts +4 -0
- package/lib/events/hooks/user.js +8 -0
- package/lib/events/hooks/voice.d.ts +37 -0
- package/lib/events/hooks/voice.js +18 -0
- package/lib/events/hooks/webhook.d.ts +6 -0
- package/lib/events/hooks/webhook.js +8 -0
- package/lib/events/index.d.ts +2 -0
- package/lib/events/index.js +18 -0
- package/lib/index.d.ts +79 -0
- package/lib/index.js +104 -0
- package/lib/langs/handler.d.ts +11 -0
- package/lib/langs/handler.js +34 -0
- package/lib/langs/index.d.ts +2 -0
- package/lib/langs/index.js +18 -0
- package/lib/langs/router.d.ts +18 -0
- package/lib/langs/router.js +42 -0
- package/lib/structures/AnonymousGuild.d.ts +7 -0
- package/lib/structures/AnonymousGuild.js +11 -0
- package/lib/structures/AutoModerationRule.d.ts +22 -0
- package/lib/structures/AutoModerationRule.js +34 -0
- package/lib/structures/ClientUser.d.ts +25 -0
- package/lib/structures/ClientUser.js +52 -0
- package/lib/structures/Guild.d.ts +86 -0
- package/lib/structures/Guild.js +66 -0
- package/lib/structures/GuildEmoji.d.ts +29 -0
- package/lib/structures/GuildEmoji.js +47 -0
- package/lib/structures/GuildMember.d.ts +92 -0
- package/lib/structures/GuildMember.js +137 -0
- package/lib/structures/GuildPreview.d.ts +10 -0
- package/lib/structures/GuildPreview.js +14 -0
- package/lib/structures/GuildRole.d.ts +21 -0
- package/lib/structures/GuildRole.js +32 -0
- package/lib/structures/GuildTemplate.d.ts +23 -0
- package/lib/structures/GuildTemplate.js +36 -0
- package/lib/structures/Interaction.d.ts +152 -0
- package/lib/structures/Interaction.js +409 -0
- package/lib/structures/Message.d.ts +53 -0
- package/lib/structures/Message.js +123 -0
- package/lib/structures/Sticker.d.ts +27 -0
- package/lib/structures/Sticker.js +44 -0
- package/lib/structures/User.d.ts +20 -0
- package/lib/structures/User.js +37 -0
- package/lib/structures/Webhook.d.ts +42 -0
- package/lib/structures/Webhook.js +63 -0
- package/lib/structures/channels.d.ts +232 -0
- package/lib/structures/channels.js +366 -0
- package/lib/structures/extra/Base.d.ts +7 -0
- package/lib/structures/extra/Base.js +39 -0
- package/lib/structures/extra/BaseComponent.d.ts +9 -0
- package/lib/structures/extra/BaseComponent.js +12 -0
- package/lib/structures/extra/BaseGuild.d.ts +40 -0
- package/lib/structures/extra/BaseGuild.js +71 -0
- package/lib/structures/extra/BaseSelectMenuComponent.d.ts +9 -0
- package/lib/structures/extra/BaseSelectMenuComponent.js +13 -0
- package/lib/structures/extra/BitField.d.ts +14 -0
- package/lib/structures/extra/BitField.js +56 -0
- package/lib/structures/extra/DiscordBase.d.ts +18 -0
- package/lib/structures/extra/DiscordBase.js +28 -0
- package/lib/structures/extra/Permissions.d.ts +54 -0
- package/lib/structures/extra/Permissions.js +9 -0
- package/lib/structures/extra/functions.d.ts +11 -0
- package/lib/structures/extra/functions.js +69 -0
- package/lib/structures/index.d.ts +15 -0
- package/lib/structures/index.js +31 -0
- package/lib/websocket/SharedTypes.d.ts +128 -0
- package/lib/websocket/SharedTypes.js +2 -0
- package/lib/websocket/constants/index.d.ts +26 -0
- package/lib/websocket/constants/index.js +31 -0
- package/lib/websocket/discord/basesocket.d.ts +12 -0
- package/lib/websocket/discord/basesocket.js +37 -0
- package/lib/websocket/discord/events/memberUpdate.d.ts +16 -0
- package/lib/websocket/discord/events/memberUpdate.js +47 -0
- package/lib/websocket/discord/events/presenceUpdate.d.ts +24 -0
- package/lib/websocket/discord/events/presenceUpdate.js +46 -0
- package/lib/websocket/discord/handlemessage.d.ts +0 -0
- package/lib/websocket/discord/handlemessage.js +1 -0
- package/lib/websocket/discord/index.d.ts +4 -0
- package/lib/websocket/discord/index.js +20 -0
- package/lib/websocket/discord/memberUpdate.d.ts +16 -0
- package/lib/websocket/discord/memberUpdate.js +47 -0
- package/lib/websocket/discord/shard.d.ts +46 -0
- package/lib/websocket/discord/shard.js +278 -0
- package/lib/websocket/discord/sharder.d.ts +25 -0
- package/lib/websocket/discord/sharder.js +153 -0
- package/lib/websocket/discord/shared.d.ts +99 -0
- package/lib/websocket/discord/shared.js +8 -0
- package/lib/websocket/discord/worker.d.ts +43 -0
- package/lib/websocket/discord/worker.js +2 -0
- package/lib/websocket/discord/workermanager.d.ts +69 -0
- package/lib/websocket/discord/workermanager.js +273 -0
- package/lib/websocket/index.d.ts +3 -0
- package/lib/websocket/index.js +19 -0
- package/lib/websocket/structures/index.d.ts +117 -0
- package/lib/websocket/structures/index.js +261 -0
- package/lib/websocket/structures/timeout.d.ts +20 -0
- package/lib/websocket/structures/timeout.js +75 -0
- package/package.json +70 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DiscordAPIError = void 0;
|
|
4
|
+
function isErrorGroupWrapper(error) {
|
|
5
|
+
return Reflect.has(error, '_errors');
|
|
6
|
+
}
|
|
7
|
+
function isErrorResponse(error) {
|
|
8
|
+
return typeof Reflect.get(error, 'message') === 'string';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Represents an API error returned by Discord
|
|
12
|
+
*/
|
|
13
|
+
class DiscordAPIError extends Error {
|
|
14
|
+
rawError;
|
|
15
|
+
code;
|
|
16
|
+
status;
|
|
17
|
+
method;
|
|
18
|
+
url;
|
|
19
|
+
requestBody;
|
|
20
|
+
/**
|
|
21
|
+
* @param rawError - The error reported by Discord
|
|
22
|
+
* @param code - The error code reported by Discord
|
|
23
|
+
* @param status - The status code of the response
|
|
24
|
+
* @param method - The method of the request that erred
|
|
25
|
+
* @param url - The url of the request that erred
|
|
26
|
+
* @param bodyData - The unparsed data for the request that errored
|
|
27
|
+
*/
|
|
28
|
+
constructor(rawError, code, status, method, url, bodyData) {
|
|
29
|
+
super(DiscordAPIError.getMessage(rawError));
|
|
30
|
+
this.rawError = rawError;
|
|
31
|
+
this.code = code;
|
|
32
|
+
this.status = status;
|
|
33
|
+
this.method = method;
|
|
34
|
+
this.url = url;
|
|
35
|
+
this.requestBody = { files: bodyData.files, json: bodyData.body };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The name of the error
|
|
39
|
+
*/
|
|
40
|
+
get name() {
|
|
41
|
+
return `${DiscordAPIError.name}[${this.code}]`;
|
|
42
|
+
}
|
|
43
|
+
static getMessage(error) {
|
|
44
|
+
let flattened = '';
|
|
45
|
+
if ('code' in error) {
|
|
46
|
+
if (error.errors) {
|
|
47
|
+
flattened = [...this.flattenDiscordError(error.errors)].join('\n');
|
|
48
|
+
}
|
|
49
|
+
return error.message && flattened
|
|
50
|
+
? `${error.message}\n${flattened}`
|
|
51
|
+
: error.message || flattened || 'Unknown Error';
|
|
52
|
+
}
|
|
53
|
+
return error.error_description ?? 'No Description';
|
|
54
|
+
}
|
|
55
|
+
static *flattenDiscordError(obj, key = '') {
|
|
56
|
+
if (isErrorResponse(obj)) {
|
|
57
|
+
return yield `${key.length ? `${key}[${obj.code}]` : `${obj.code}`}: ${obj.message}`.trim();
|
|
58
|
+
}
|
|
59
|
+
for (const [otherKey, val] of Object.entries(obj)) {
|
|
60
|
+
const nextKey = otherKey.startsWith('_')
|
|
61
|
+
? key
|
|
62
|
+
: key
|
|
63
|
+
? Number.isNaN(Number(otherKey))
|
|
64
|
+
? `${key}.${otherKey}`
|
|
65
|
+
: `${key}[${otherKey}]`
|
|
66
|
+
: otherKey;
|
|
67
|
+
if (typeof val === 'string') {
|
|
68
|
+
yield val;
|
|
69
|
+
}
|
|
70
|
+
else if (isErrorGroupWrapper(val)) {
|
|
71
|
+
for (const error of val._errors) {
|
|
72
|
+
yield* this.flattenDiscordError(error, nextKey);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
yield* this.flattenDiscordError(val, nextKey);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.DiscordAPIError = DiscordAPIError;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { InternalRequest } from '../utils/types.js';
|
|
2
|
+
import type { RequestBody } from './DiscordAPIError.js';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a HTTP error
|
|
5
|
+
*/
|
|
6
|
+
export declare class HTTPError extends Error {
|
|
7
|
+
status: number;
|
|
8
|
+
method: string;
|
|
9
|
+
url: string;
|
|
10
|
+
requestBody: RequestBody;
|
|
11
|
+
name: string;
|
|
12
|
+
/**
|
|
13
|
+
* @param status - The status code of the response
|
|
14
|
+
* @param statusText - The status text of the response
|
|
15
|
+
* @param method - The method of the request that erred
|
|
16
|
+
* @param url - The url of the request that erred
|
|
17
|
+
* @param bodyData - The unparsed data for the request that errored
|
|
18
|
+
*/
|
|
19
|
+
constructor(status: number, statusText: string, method: string, url: string, bodyData: Pick<InternalRequest, 'body' | 'files'>);
|
|
20
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HTTPError = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Represents a HTTP error
|
|
6
|
+
*/
|
|
7
|
+
class HTTPError extends Error {
|
|
8
|
+
status;
|
|
9
|
+
method;
|
|
10
|
+
url;
|
|
11
|
+
requestBody;
|
|
12
|
+
name = HTTPError.name;
|
|
13
|
+
/**
|
|
14
|
+
* @param status - The status code of the response
|
|
15
|
+
* @param statusText - The status text of the response
|
|
16
|
+
* @param method - The method of the request that erred
|
|
17
|
+
* @param url - The url of the request that erred
|
|
18
|
+
* @param bodyData - The unparsed data for the request that errored
|
|
19
|
+
*/
|
|
20
|
+
constructor(status, statusText, method, url, bodyData) {
|
|
21
|
+
super(statusText);
|
|
22
|
+
this.status = status;
|
|
23
|
+
this.method = method;
|
|
24
|
+
this.url = url;
|
|
25
|
+
this.requestBody = { files: bodyData.files, json: bodyData.body };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.HTTPError = HTTPError;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RateLimitData } from '../utils/types.js';
|
|
2
|
+
export declare class RateLimitError extends Error implements RateLimitData {
|
|
3
|
+
timeToReset: number;
|
|
4
|
+
limit: number;
|
|
5
|
+
method: string;
|
|
6
|
+
hash: string;
|
|
7
|
+
url: string;
|
|
8
|
+
route: string;
|
|
9
|
+
majorParameter: string;
|
|
10
|
+
global: boolean;
|
|
11
|
+
retryAfter: number;
|
|
12
|
+
sublimitTimeout: number;
|
|
13
|
+
scope: RateLimitData['scope'];
|
|
14
|
+
constructor({ timeToReset, limit, method, hash, url, route, majorParameter, global, retryAfter, sublimitTimeout, scope, }: RateLimitData);
|
|
15
|
+
/**
|
|
16
|
+
* The name of the error
|
|
17
|
+
*/
|
|
18
|
+
get name(): string;
|
|
19
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RateLimitError = void 0;
|
|
4
|
+
class RateLimitError extends Error {
|
|
5
|
+
timeToReset;
|
|
6
|
+
limit;
|
|
7
|
+
method;
|
|
8
|
+
hash;
|
|
9
|
+
url;
|
|
10
|
+
route;
|
|
11
|
+
majorParameter;
|
|
12
|
+
global;
|
|
13
|
+
retryAfter;
|
|
14
|
+
sublimitTimeout;
|
|
15
|
+
scope;
|
|
16
|
+
constructor({ timeToReset, limit, method, hash, url, route, majorParameter, global, retryAfter, sublimitTimeout, scope, }) {
|
|
17
|
+
super();
|
|
18
|
+
this.timeToReset = timeToReset;
|
|
19
|
+
this.limit = limit;
|
|
20
|
+
this.method = method;
|
|
21
|
+
this.hash = hash;
|
|
22
|
+
this.url = url;
|
|
23
|
+
this.route = route;
|
|
24
|
+
this.majorParameter = majorParameter;
|
|
25
|
+
this.global = global;
|
|
26
|
+
this.retryAfter = retryAfter;
|
|
27
|
+
this.sublimitTimeout = sublimitTimeout;
|
|
28
|
+
this.scope = scope;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The name of the error
|
|
32
|
+
*/
|
|
33
|
+
get name() {
|
|
34
|
+
return `${RateLimitError.name}[${this.route}]`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.RateLimitError = RateLimitError;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { RequestInit } from 'undici-types';
|
|
2
|
+
import type { REST } from '../REST.js';
|
|
3
|
+
import type { IHandler } from '../interfaces/Handler.js';
|
|
4
|
+
import type { HandlerRequestData, ResponseLike, RouteData } from '../utils/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* The structure used to handle burst requests for a given bucket.
|
|
7
|
+
* Burst requests have no ratelimit handling but allow for pre- and post-processing
|
|
8
|
+
* of data in the same manner as sequentially queued requests.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* This queue may still emit a rate limit error if an unexpected 429 is hit
|
|
12
|
+
*/
|
|
13
|
+
export declare class BurstHandler implements IHandler {
|
|
14
|
+
private readonly manager;
|
|
15
|
+
private readonly hash;
|
|
16
|
+
private readonly majorParameter;
|
|
17
|
+
/**
|
|
18
|
+
* {@inheritdoc IHandler.id}
|
|
19
|
+
*/
|
|
20
|
+
readonly id: string;
|
|
21
|
+
/**
|
|
22
|
+
* {@inheritDoc IHandler.inactive}
|
|
23
|
+
*/
|
|
24
|
+
inactive: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* @param manager - The request manager
|
|
27
|
+
* @param hash - The hash that this RequestHandler handles
|
|
28
|
+
* @param majorParameter - The major parameter for this handler
|
|
29
|
+
*/
|
|
30
|
+
constructor(manager: REST, hash: string, majorParameter: string);
|
|
31
|
+
/**
|
|
32
|
+
* Emits a debug message
|
|
33
|
+
*
|
|
34
|
+
* @param message - The message to debug
|
|
35
|
+
*/
|
|
36
|
+
private debug;
|
|
37
|
+
/**
|
|
38
|
+
* {@inheritDoc IHandler.queueRequest}
|
|
39
|
+
*/
|
|
40
|
+
queueRequest(routeId: RouteData, url: string, options: RequestInit, requestData: HandlerRequestData): Promise<ResponseLike>;
|
|
41
|
+
/**
|
|
42
|
+
* The method that actually makes the request to the API, and updates info about the bucket accordingly
|
|
43
|
+
*
|
|
44
|
+
* @param routeId - The generalized API route with literal ids for major parameters
|
|
45
|
+
* @param url - The fully resolved URL to make the request to
|
|
46
|
+
* @param options - The fetch options needed to make the request
|
|
47
|
+
* @param requestData - Extra data from the user's request needed for errors and additional processing
|
|
48
|
+
* @param retries - The number of retries this request has already attempted (recursion)
|
|
49
|
+
*/
|
|
50
|
+
private runRequest;
|
|
51
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BurstHandler = void 0;
|
|
4
|
+
const utils_js_1 = require("../utils/utils.js");
|
|
5
|
+
const Shared_js_1 = require("./Shared.js");
|
|
6
|
+
/**
|
|
7
|
+
* The structure used to handle burst requests for a given bucket.
|
|
8
|
+
* Burst requests have no ratelimit handling but allow for pre- and post-processing
|
|
9
|
+
* of data in the same manner as sequentially queued requests.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* This queue may still emit a rate limit error if an unexpected 429 is hit
|
|
13
|
+
*/
|
|
14
|
+
class BurstHandler {
|
|
15
|
+
manager;
|
|
16
|
+
hash;
|
|
17
|
+
majorParameter;
|
|
18
|
+
/**
|
|
19
|
+
* {@inheritdoc IHandler.id}
|
|
20
|
+
*/
|
|
21
|
+
id;
|
|
22
|
+
/**
|
|
23
|
+
* {@inheritDoc IHandler.inactive}
|
|
24
|
+
*/
|
|
25
|
+
inactive = false;
|
|
26
|
+
/**
|
|
27
|
+
* @param manager - The request manager
|
|
28
|
+
* @param hash - The hash that this RequestHandler handles
|
|
29
|
+
* @param majorParameter - The major parameter for this handler
|
|
30
|
+
*/
|
|
31
|
+
constructor(manager, hash, majorParameter) {
|
|
32
|
+
this.manager = manager;
|
|
33
|
+
this.hash = hash;
|
|
34
|
+
this.majorParameter = majorParameter;
|
|
35
|
+
this.id = `${hash}:${majorParameter}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Emits a debug message
|
|
39
|
+
*
|
|
40
|
+
* @param message - The message to debug
|
|
41
|
+
*/
|
|
42
|
+
debug(message) {
|
|
43
|
+
this.manager.debugger?.info(`#${this.id} ${message}`);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* {@inheritDoc IHandler.queueRequest}
|
|
47
|
+
*/
|
|
48
|
+
async queueRequest(routeId, url, options, requestData) {
|
|
49
|
+
return this.runRequest(routeId, url, options, requestData);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The method that actually makes the request to the API, and updates info about the bucket accordingly
|
|
53
|
+
*
|
|
54
|
+
* @param routeId - The generalized API route with literal ids for major parameters
|
|
55
|
+
* @param url - The fully resolved URL to make the request to
|
|
56
|
+
* @param options - The fetch options needed to make the request
|
|
57
|
+
* @param requestData - Extra data from the user's request needed for errors and additional processing
|
|
58
|
+
* @param retries - The number of retries this request has already attempted (recursion)
|
|
59
|
+
*/
|
|
60
|
+
async runRequest(routeId, url, options, requestData, retries = 0) {
|
|
61
|
+
const method = options.method ?? 'get';
|
|
62
|
+
const res = await (0, Shared_js_1.makeNetworkRequest)(this.manager, routeId, url, options, requestData, retries);
|
|
63
|
+
// Retry requested
|
|
64
|
+
if (res === null) {
|
|
65
|
+
// eslint-disable-next-line no-param-reassign
|
|
66
|
+
return this.runRequest(routeId, url, options, requestData, ++retries);
|
|
67
|
+
}
|
|
68
|
+
const status = res.status;
|
|
69
|
+
let retryAfter = 0;
|
|
70
|
+
const retry = res.headers.get('Retry-After');
|
|
71
|
+
// Amount of time in milliseconds until we should retry if rate limited (globally or otherwise)
|
|
72
|
+
if (retry)
|
|
73
|
+
retryAfter = Number(retry) * 1_000 + this.manager.options.offset;
|
|
74
|
+
// Count the invalid requests
|
|
75
|
+
if (status === 401 || status === 403 || status === 429) {
|
|
76
|
+
(0, Shared_js_1.incrementInvalidCount)(this.manager);
|
|
77
|
+
}
|
|
78
|
+
if (status >= 200 && status < 300) {
|
|
79
|
+
return res;
|
|
80
|
+
}
|
|
81
|
+
if (status === 429) {
|
|
82
|
+
// Unexpected ratelimit
|
|
83
|
+
const isGlobal = res.headers.has('X-RateLimit-Global');
|
|
84
|
+
const scope = (res.headers.get('X-RateLimit-Scope') ?? 'user');
|
|
85
|
+
await (0, utils_js_1.onRateLimit)(this.manager, {
|
|
86
|
+
global: isGlobal,
|
|
87
|
+
method,
|
|
88
|
+
url,
|
|
89
|
+
route: routeId.bucketRoute,
|
|
90
|
+
majorParameter: this.majorParameter,
|
|
91
|
+
hash: this.hash,
|
|
92
|
+
limit: Number.POSITIVE_INFINITY,
|
|
93
|
+
timeToReset: retryAfter,
|
|
94
|
+
retryAfter,
|
|
95
|
+
sublimitTimeout: 0,
|
|
96
|
+
scope,
|
|
97
|
+
});
|
|
98
|
+
this.debug([
|
|
99
|
+
'Encountered unexpected 429 rate limit',
|
|
100
|
+
` Global : ${isGlobal}`,
|
|
101
|
+
` Method : ${method}`,
|
|
102
|
+
` URL : ${url}`,
|
|
103
|
+
` Bucket : ${routeId.bucketRoute}`,
|
|
104
|
+
` Major parameter: ${routeId.majorParameter}`,
|
|
105
|
+
` Hash : ${this.hash}`,
|
|
106
|
+
` Limit : ${Number.POSITIVE_INFINITY}`,
|
|
107
|
+
` Retry After : ${retryAfter}ms`,
|
|
108
|
+
' Sublimit : None',
|
|
109
|
+
` Scope : ${scope}`,
|
|
110
|
+
].join('\n'));
|
|
111
|
+
// We are bypassing all other limits, but an encountered limit should be respected (it's probably a non-punished rate limit anyways)
|
|
112
|
+
await (0, utils_js_1.sleep)(retryAfter);
|
|
113
|
+
// Since this is not a server side issue, the next request should pass, so we don't bump the retries counter
|
|
114
|
+
return this.runRequest(routeId, url, options, requestData, retries);
|
|
115
|
+
}
|
|
116
|
+
const handled = await (0, Shared_js_1.handleErrors)(this.manager, res, method, url, requestData, retries);
|
|
117
|
+
if (handled === null) {
|
|
118
|
+
// eslint-disable-next-line no-param-reassign
|
|
119
|
+
return this.runRequest(routeId, url, options, requestData, ++retries);
|
|
120
|
+
}
|
|
121
|
+
return handled;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.BurstHandler = BurstHandler;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { RequestInit } from 'undici-types';
|
|
2
|
+
import type { REST } from '../REST.js';
|
|
3
|
+
import type { IHandler } from '../interfaces/Handler.js';
|
|
4
|
+
import type { HandlerRequestData, ResponseLike, RouteData } from '../utils/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* The structure used to handle sequential requests for a given bucket
|
|
7
|
+
*/
|
|
8
|
+
export declare class SequentialHandler implements IHandler {
|
|
9
|
+
#private;
|
|
10
|
+
private readonly manager;
|
|
11
|
+
private readonly hash;
|
|
12
|
+
private readonly majorParameter;
|
|
13
|
+
/**
|
|
14
|
+
* {@inheritDoc IHandler.id}
|
|
15
|
+
*/
|
|
16
|
+
readonly id: string;
|
|
17
|
+
/**
|
|
18
|
+
* The time this rate limit bucket will reset
|
|
19
|
+
*/
|
|
20
|
+
private reset;
|
|
21
|
+
/**
|
|
22
|
+
* The remaining requests that can be made before we are rate limited
|
|
23
|
+
*/
|
|
24
|
+
private remaining;
|
|
25
|
+
/**
|
|
26
|
+
* The total number of requests that can be made before we are rate limited
|
|
27
|
+
*/
|
|
28
|
+
private limit;
|
|
29
|
+
/**
|
|
30
|
+
* @param manager - The request manager
|
|
31
|
+
* @param hash - The hash that this RequestHandler handles
|
|
32
|
+
* @param majorParameter - The major parameter for this handler
|
|
33
|
+
*/
|
|
34
|
+
constructor(manager: REST, hash: string, majorParameter: string);
|
|
35
|
+
/**
|
|
36
|
+
* {@inheritDoc IHandler.inactive}
|
|
37
|
+
*/
|
|
38
|
+
get inactive(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* If the rate limit bucket is currently limited by the global limit
|
|
41
|
+
*/
|
|
42
|
+
private get globalLimited();
|
|
43
|
+
/**
|
|
44
|
+
* If the rate limit bucket is currently limited by its limit
|
|
45
|
+
*/
|
|
46
|
+
private get localLimited();
|
|
47
|
+
/**
|
|
48
|
+
* If the rate limit bucket is currently limited
|
|
49
|
+
*/
|
|
50
|
+
private get limited();
|
|
51
|
+
/**
|
|
52
|
+
* The time until queued requests can continue
|
|
53
|
+
*/
|
|
54
|
+
private get timeToReset();
|
|
55
|
+
/**
|
|
56
|
+
* Emits a debug message
|
|
57
|
+
*
|
|
58
|
+
* @param message - The message to debug
|
|
59
|
+
*/
|
|
60
|
+
private debug;
|
|
61
|
+
/**
|
|
62
|
+
* Delay all requests for the specified amount of time, handling global rate limits
|
|
63
|
+
*
|
|
64
|
+
* @param time - The amount of time to delay all requests for
|
|
65
|
+
*/
|
|
66
|
+
private globalDelayFor;
|
|
67
|
+
/**
|
|
68
|
+
* {@inheritDoc IHandler.queueRequest}
|
|
69
|
+
*/
|
|
70
|
+
queueRequest(routeId: RouteData, url: string, options: RequestInit, requestData: HandlerRequestData): Promise<ResponseLike>;
|
|
71
|
+
/**
|
|
72
|
+
* The method that actually makes the request to the api, and updates info about the bucket accordingly
|
|
73
|
+
*
|
|
74
|
+
* @param routeId - The generalized api route with literal ids for major parameters
|
|
75
|
+
* @param url - The fully resolved url to make the request to
|
|
76
|
+
* @param options - The fetch options needed to make the request
|
|
77
|
+
* @param requestData - Extra data from the user's request needed for errors and additional processing
|
|
78
|
+
* @param retries - The number of retries this request has already attempted (recursion)
|
|
79
|
+
*/
|
|
80
|
+
private runRequest;
|
|
81
|
+
}
|