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.
Files changed (345) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +57 -0
  3. package/lib/api/CDN.d.ts +220 -0
  4. package/lib/api/CDN.js +236 -0
  5. package/lib/api/REST.d.ts +127 -0
  6. package/lib/api/REST.js +424 -0
  7. package/lib/api/Router.d.ts +17 -0
  8. package/lib/api/Router.js +63 -0
  9. package/lib/api/Routes/applications.d.ts +46 -0
  10. package/lib/api/Routes/applications.js +2 -0
  11. package/lib/api/Routes/cdn.d.ts +66 -0
  12. package/lib/api/Routes/cdn.js +2 -0
  13. package/lib/api/Routes/channels.d.ts +109 -0
  14. package/lib/api/Routes/channels.js +2 -0
  15. package/lib/api/Routes/gateway.d.ts +11 -0
  16. package/lib/api/Routes/gateway.js +2 -0
  17. package/lib/api/Routes/guilds.d.ts +171 -0
  18. package/lib/api/Routes/guilds.js +2 -0
  19. package/lib/api/Routes/index.d.ts +13 -0
  20. package/lib/api/Routes/index.js +17 -0
  21. package/lib/api/Routes/interactions.d.ts +14 -0
  22. package/lib/api/Routes/interactions.js +2 -0
  23. package/lib/api/Routes/invites.d.ts +9 -0
  24. package/lib/api/Routes/invites.js +2 -0
  25. package/lib/api/Routes/stage-instances.d.ts +13 -0
  26. package/lib/api/Routes/stage-instances.js +2 -0
  27. package/lib/api/Routes/stickers.d.ts +11 -0
  28. package/lib/api/Routes/stickers.js +2 -0
  29. package/lib/api/Routes/users.d.ts +35 -0
  30. package/lib/api/Routes/users.js +2 -0
  31. package/lib/api/Routes/voice.d.ts +10 -0
  32. package/lib/api/Routes/voice.js +2 -0
  33. package/lib/api/Routes/webhooks.d.ts +29 -0
  34. package/lib/api/Routes/webhooks.js +2 -0
  35. package/lib/api/errors/DiscordAPIError.d.ts +51 -0
  36. package/lib/api/errors/DiscordAPIError.js +81 -0
  37. package/lib/api/errors/HTTPError.d.ts +20 -0
  38. package/lib/api/errors/HTTPError.js +28 -0
  39. package/lib/api/errors/RateLimitError.d.ts +19 -0
  40. package/lib/api/errors/RateLimitError.js +37 -0
  41. package/lib/api/handlers/BurstHandler.d.ts +51 -0
  42. package/lib/api/handlers/BurstHandler.js +124 -0
  43. package/lib/api/handlers/SequentialHandler.d.ts +81 -0
  44. package/lib/api/handlers/SequentialHandler.js +365 -0
  45. package/lib/api/handlers/Shared.d.ts +14 -0
  46. package/lib/api/handlers/Shared.js +125 -0
  47. package/lib/api/index.d.ts +5 -0
  48. package/lib/api/index.js +21 -0
  49. package/lib/api/interfaces/Handler.d.ts +21 -0
  50. package/lib/api/interfaces/Handler.js +2 -0
  51. package/lib/api/shared.d.ts +7 -0
  52. package/lib/api/shared.js +27 -0
  53. package/lib/api/utils/constants.d.ts +39 -0
  54. package/lib/api/utils/constants.js +50 -0
  55. package/lib/api/utils/types.d.ts +335 -0
  56. package/lib/api/utils/types.js +14 -0
  57. package/lib/api/utils/utils.d.ts +52 -0
  58. package/lib/api/utils/utils.js +159 -0
  59. package/lib/builders/ActionRow.d.ts +40 -0
  60. package/lib/builders/ActionRow.js +58 -0
  61. package/lib/builders/Attachment.d.ts +106 -0
  62. package/lib/builders/Attachment.js +196 -0
  63. package/lib/builders/Base.d.ts +10 -0
  64. package/lib/builders/Base.js +13 -0
  65. package/lib/builders/Button.d.ts +59 -0
  66. package/lib/builders/Button.js +94 -0
  67. package/lib/builders/MessageEmbed.d.ts +116 -0
  68. package/lib/builders/MessageEmbed.js +159 -0
  69. package/lib/builders/Modal.d.ts +111 -0
  70. package/lib/builders/Modal.js +162 -0
  71. package/lib/builders/SelectMenu.d.ts +201 -0
  72. package/lib/builders/SelectMenu.js +293 -0
  73. package/lib/builders/index.d.ts +12 -0
  74. package/lib/builders/index.js +54 -0
  75. package/lib/builders/types.d.ts +21 -0
  76. package/lib/builders/types.js +2 -0
  77. package/lib/cache/adapters/default.d.ts +24 -0
  78. package/lib/cache/adapters/default.js +118 -0
  79. package/lib/cache/adapters/index.d.ts +4 -0
  80. package/lib/cache/adapters/index.js +20 -0
  81. package/lib/cache/adapters/redis.d.ts +35 -0
  82. package/lib/cache/adapters/redis.js +180 -0
  83. package/lib/cache/adapters/types.d.ts +25 -0
  84. package/lib/cache/adapters/types.js +2 -0
  85. package/lib/cache/adapters/workeradapter.d.ts +24 -0
  86. package/lib/cache/adapters/workeradapter.js +76 -0
  87. package/lib/cache/index.d.ts +97 -0
  88. package/lib/cache/index.js +394 -0
  89. package/lib/cache/resources/channels.d.ts +7 -0
  90. package/lib/cache/resources/channels.js +20 -0
  91. package/lib/cache/resources/default/base.d.ts +25 -0
  92. package/lib/cache/resources/default/base.js +75 -0
  93. package/lib/cache/resources/default/guild-based.d.ts +33 -0
  94. package/lib/cache/resources/default/guild-based.js +91 -0
  95. package/lib/cache/resources/default/guild-related.d.ts +32 -0
  96. package/lib/cache/resources/default/guild-related.js +102 -0
  97. package/lib/cache/resources/emojis.d.ts +7 -0
  98. package/lib/cache/resources/emojis.js +17 -0
  99. package/lib/cache/resources/guilds.d.ts +10 -0
  100. package/lib/cache/resources/guilds.js +117 -0
  101. package/lib/cache/resources/members.d.ts +10 -0
  102. package/lib/cache/resources/members.js +41 -0
  103. package/lib/cache/resources/presence.d.ts +9 -0
  104. package/lib/cache/resources/presence.js +14 -0
  105. package/lib/cache/resources/roles.d.ts +7 -0
  106. package/lib/cache/resources/roles.js +17 -0
  107. package/lib/cache/resources/stage-instances.d.ts +5 -0
  108. package/lib/cache/resources/stage-instances.js +8 -0
  109. package/lib/cache/resources/stickers.d.ts +7 -0
  110. package/lib/cache/resources/stickers.js +17 -0
  111. package/lib/cache/resources/threads.d.ts +7 -0
  112. package/lib/cache/resources/threads.js +17 -0
  113. package/lib/cache/resources/users.d.ts +7 -0
  114. package/lib/cache/resources/users.js +17 -0
  115. package/lib/cache/resources/voice-states.d.ts +9 -0
  116. package/lib/cache/resources/voice-states.js +13 -0
  117. package/lib/client/base.d.ts +244 -0
  118. package/lib/client/base.js +178 -0
  119. package/lib/client/client.d.ts +32 -0
  120. package/lib/client/client.js +156 -0
  121. package/lib/client/httpclient.d.ts +21 -0
  122. package/lib/client/httpclient.js +143 -0
  123. package/lib/client/index.d.ts +4 -0
  124. package/lib/client/index.js +19 -0
  125. package/lib/client/oninteraction.d.ts +4 -0
  126. package/lib/client/oninteraction.js +180 -0
  127. package/lib/client/workerclient.d.ts +28 -0
  128. package/lib/client/workerclient.js +213 -0
  129. package/lib/collection.d.ts +233 -0
  130. package/lib/collection.js +371 -0
  131. package/lib/commands/applications/chat.d.ts +139 -0
  132. package/lib/commands/applications/chat.js +173 -0
  133. package/lib/commands/applications/chatcontext.d.ts +28 -0
  134. package/lib/commands/applications/chatcontext.js +53 -0
  135. package/lib/commands/applications/menu.d.ts +39 -0
  136. package/lib/commands/applications/menu.js +87 -0
  137. package/lib/commands/applications/menucontext.d.ts +25 -0
  138. package/lib/commands/applications/menucontext.js +64 -0
  139. package/lib/commands/applications/options.d.ts +67 -0
  140. package/lib/commands/applications/options.js +44 -0
  141. package/lib/commands/applications/shared.d.ts +35 -0
  142. package/lib/commands/applications/shared.js +2 -0
  143. package/lib/commands/decorators.d.ts +107 -0
  144. package/lib/commands/decorators.js +85 -0
  145. package/lib/commands/handler.d.ts +15 -0
  146. package/lib/commands/handler.js +140 -0
  147. package/lib/commands/index.d.ts +8 -0
  148. package/lib/commands/index.js +24 -0
  149. package/lib/commands/optionresolver.d.ts +49 -0
  150. package/lib/commands/optionresolver.js +146 -0
  151. package/lib/common/bot/watcher.d.ts +53 -0
  152. package/lib/common/bot/watcher.js +104 -0
  153. package/lib/common/index.d.ts +13 -0
  154. package/lib/common/index.js +30 -0
  155. package/lib/common/it/colors.d.ts +274 -0
  156. package/lib/common/it/colors.js +453 -0
  157. package/lib/common/it/constants.d.ts +36 -0
  158. package/lib/common/it/constants.js +40 -0
  159. package/lib/common/it/logger.d.ts +114 -0
  160. package/lib/common/it/logger.js +189 -0
  161. package/lib/common/it/utils.d.ts +107 -0
  162. package/lib/common/it/utils.js +275 -0
  163. package/lib/common/shorters/base.d.ts +5 -0
  164. package/lib/common/shorters/base.js +10 -0
  165. package/lib/common/shorters/channels.d.ts +90 -0
  166. package/lib/common/shorters/channels.js +95 -0
  167. package/lib/common/shorters/guilds.d.ts +389 -0
  168. package/lib/common/shorters/guilds.js +350 -0
  169. package/lib/common/shorters/members.d.ts +115 -0
  170. package/lib/common/shorters/members.js +179 -0
  171. package/lib/common/shorters/messages.d.ts +27 -0
  172. package/lib/common/shorters/messages.js +117 -0
  173. package/lib/common/shorters/roles.d.ts +12 -0
  174. package/lib/common/shorters/roles.js +51 -0
  175. package/lib/common/shorters/templates.d.ts +12 -0
  176. package/lib/common/shorters/templates.js +29 -0
  177. package/lib/common/shorters/users.d.ts +11 -0
  178. package/lib/common/shorters/users.js +42 -0
  179. package/lib/common/shorters/webhook.d.ts +33 -0
  180. package/lib/common/shorters/webhook.js +69 -0
  181. package/lib/common/types/options.d.ts +10 -0
  182. package/lib/common/types/options.js +2 -0
  183. package/lib/common/types/resolvables.d.ts +10 -0
  184. package/lib/common/types/resolvables.js +2 -0
  185. package/lib/common/types/util.d.ts +90 -0
  186. package/lib/common/types/util.js +2 -0
  187. package/lib/common/types/write.d.ts +21 -0
  188. package/lib/common/types/write.js +2 -0
  189. package/lib/components/ActionRow.d.ts +10 -0
  190. package/lib/components/ActionRow.js +13 -0
  191. package/lib/components/ButtonComponent.d.ts +19 -0
  192. package/lib/components/ButtonComponent.js +34 -0
  193. package/lib/components/ChannelSelectMenuComponent.d.ts +6 -0
  194. package/lib/components/ChannelSelectMenuComponent.js +12 -0
  195. package/lib/components/MentionableSelectMenuComponent.d.ts +4 -0
  196. package/lib/components/MentionableSelectMenuComponent.js +7 -0
  197. package/lib/components/RoleSelectMenuComponent.d.ts +4 -0
  198. package/lib/components/RoleSelectMenuComponent.js +7 -0
  199. package/lib/components/StringSelectMenuComponent.d.ts +6 -0
  200. package/lib/components/StringSelectMenuComponent.js +12 -0
  201. package/lib/components/TextInputComponent.d.ts +7 -0
  202. package/lib/components/TextInputComponent.js +14 -0
  203. package/lib/components/UserSelectMenuComponent.d.ts +4 -0
  204. package/lib/components/UserSelectMenuComponent.js +7 -0
  205. package/lib/components/command.d.ts +23 -0
  206. package/lib/components/command.js +15 -0
  207. package/lib/components/handler.d.ts +48 -0
  208. package/lib/components/handler.js +231 -0
  209. package/lib/components/index.d.ts +20 -0
  210. package/lib/components/index.js +55 -0
  211. package/lib/components/listener.d.ts +11 -0
  212. package/lib/components/listener.js +18 -0
  213. package/lib/events/event.d.ts +23 -0
  214. package/lib/events/event.js +2 -0
  215. package/lib/events/handler.d.ts +19 -0
  216. package/lib/events/handler.js +112 -0
  217. package/lib/events/hooks/application_command.d.ts +12 -0
  218. package/lib/events/hooks/application_command.js +8 -0
  219. package/lib/events/hooks/auto_moderation.d.ts +22 -0
  220. package/lib/events/hooks/auto_moderation.js +21 -0
  221. package/lib/events/hooks/channel.d.ts +11 -0
  222. package/lib/events/hooks/channel.js +24 -0
  223. package/lib/events/hooks/custom.d.ts +4 -0
  224. package/lib/events/hooks/custom.js +11 -0
  225. package/lib/events/hooks/dispatch.d.ts +5 -0
  226. package/lib/events/hooks/dispatch.js +12 -0
  227. package/lib/events/hooks/entitlement.d.ts +35 -0
  228. package/lib/events/hooks/entitlement.js +16 -0
  229. package/lib/events/hooks/guild.d.ts +228 -0
  230. package/lib/events/hooks/guild.js +101 -0
  231. package/lib/events/hooks/index.d.ts +23 -0
  232. package/lib/events/hooks/index.js +34 -0
  233. package/lib/events/hooks/integration.d.ts +94 -0
  234. package/lib/events/hooks/integration.js +27 -0
  235. package/lib/events/hooks/interactions.d.ts +4 -0
  236. package/lib/events/hooks/interactions.js +8 -0
  237. package/lib/events/hooks/invite.d.ts +21 -0
  238. package/lib/events/hooks/invite.js +12 -0
  239. package/lib/events/hooks/message.d.ts +69 -0
  240. package/lib/events/hooks/message.js +37 -0
  241. package/lib/events/hooks/presence.d.ts +27 -0
  242. package/lib/events/hooks/presence.js +8 -0
  243. package/lib/events/hooks/stage.d.ts +29 -0
  244. package/lib/events/hooks/stage.js +16 -0
  245. package/lib/events/hooks/thread.d.ts +198 -0
  246. package/lib/events/hooks/thread.js +29 -0
  247. package/lib/events/hooks/typing.d.ts +16 -0
  248. package/lib/events/hooks/typing.js +14 -0
  249. package/lib/events/hooks/user.d.ts +4 -0
  250. package/lib/events/hooks/user.js +8 -0
  251. package/lib/events/hooks/voice.d.ts +37 -0
  252. package/lib/events/hooks/voice.js +18 -0
  253. package/lib/events/hooks/webhook.d.ts +6 -0
  254. package/lib/events/hooks/webhook.js +8 -0
  255. package/lib/events/index.d.ts +2 -0
  256. package/lib/events/index.js +18 -0
  257. package/lib/index.d.ts +79 -0
  258. package/lib/index.js +104 -0
  259. package/lib/langs/handler.d.ts +11 -0
  260. package/lib/langs/handler.js +34 -0
  261. package/lib/langs/index.d.ts +2 -0
  262. package/lib/langs/index.js +18 -0
  263. package/lib/langs/router.d.ts +18 -0
  264. package/lib/langs/router.js +42 -0
  265. package/lib/structures/AnonymousGuild.d.ts +7 -0
  266. package/lib/structures/AnonymousGuild.js +11 -0
  267. package/lib/structures/AutoModerationRule.d.ts +22 -0
  268. package/lib/structures/AutoModerationRule.js +34 -0
  269. package/lib/structures/ClientUser.d.ts +25 -0
  270. package/lib/structures/ClientUser.js +52 -0
  271. package/lib/structures/Guild.d.ts +86 -0
  272. package/lib/structures/Guild.js +66 -0
  273. package/lib/structures/GuildEmoji.d.ts +29 -0
  274. package/lib/structures/GuildEmoji.js +47 -0
  275. package/lib/structures/GuildMember.d.ts +92 -0
  276. package/lib/structures/GuildMember.js +137 -0
  277. package/lib/structures/GuildPreview.d.ts +10 -0
  278. package/lib/structures/GuildPreview.js +14 -0
  279. package/lib/structures/GuildRole.d.ts +21 -0
  280. package/lib/structures/GuildRole.js +32 -0
  281. package/lib/structures/GuildTemplate.d.ts +23 -0
  282. package/lib/structures/GuildTemplate.js +36 -0
  283. package/lib/structures/Interaction.d.ts +152 -0
  284. package/lib/structures/Interaction.js +409 -0
  285. package/lib/structures/Message.d.ts +53 -0
  286. package/lib/structures/Message.js +123 -0
  287. package/lib/structures/Sticker.d.ts +27 -0
  288. package/lib/structures/Sticker.js +44 -0
  289. package/lib/structures/User.d.ts +20 -0
  290. package/lib/structures/User.js +37 -0
  291. package/lib/structures/Webhook.d.ts +42 -0
  292. package/lib/structures/Webhook.js +63 -0
  293. package/lib/structures/channels.d.ts +232 -0
  294. package/lib/structures/channels.js +366 -0
  295. package/lib/structures/extra/Base.d.ts +7 -0
  296. package/lib/structures/extra/Base.js +39 -0
  297. package/lib/structures/extra/BaseComponent.d.ts +9 -0
  298. package/lib/structures/extra/BaseComponent.js +12 -0
  299. package/lib/structures/extra/BaseGuild.d.ts +40 -0
  300. package/lib/structures/extra/BaseGuild.js +71 -0
  301. package/lib/structures/extra/BaseSelectMenuComponent.d.ts +9 -0
  302. package/lib/structures/extra/BaseSelectMenuComponent.js +13 -0
  303. package/lib/structures/extra/BitField.d.ts +14 -0
  304. package/lib/structures/extra/BitField.js +56 -0
  305. package/lib/structures/extra/DiscordBase.d.ts +18 -0
  306. package/lib/structures/extra/DiscordBase.js +28 -0
  307. package/lib/structures/extra/Permissions.d.ts +54 -0
  308. package/lib/structures/extra/Permissions.js +9 -0
  309. package/lib/structures/extra/functions.d.ts +11 -0
  310. package/lib/structures/extra/functions.js +69 -0
  311. package/lib/structures/index.d.ts +15 -0
  312. package/lib/structures/index.js +31 -0
  313. package/lib/websocket/SharedTypes.d.ts +128 -0
  314. package/lib/websocket/SharedTypes.js +2 -0
  315. package/lib/websocket/constants/index.d.ts +26 -0
  316. package/lib/websocket/constants/index.js +31 -0
  317. package/lib/websocket/discord/basesocket.d.ts +12 -0
  318. package/lib/websocket/discord/basesocket.js +37 -0
  319. package/lib/websocket/discord/events/memberUpdate.d.ts +16 -0
  320. package/lib/websocket/discord/events/memberUpdate.js +47 -0
  321. package/lib/websocket/discord/events/presenceUpdate.d.ts +24 -0
  322. package/lib/websocket/discord/events/presenceUpdate.js +46 -0
  323. package/lib/websocket/discord/handlemessage.d.ts +0 -0
  324. package/lib/websocket/discord/handlemessage.js +1 -0
  325. package/lib/websocket/discord/index.d.ts +4 -0
  326. package/lib/websocket/discord/index.js +20 -0
  327. package/lib/websocket/discord/memberUpdate.d.ts +16 -0
  328. package/lib/websocket/discord/memberUpdate.js +47 -0
  329. package/lib/websocket/discord/shard.d.ts +46 -0
  330. package/lib/websocket/discord/shard.js +278 -0
  331. package/lib/websocket/discord/sharder.d.ts +25 -0
  332. package/lib/websocket/discord/sharder.js +153 -0
  333. package/lib/websocket/discord/shared.d.ts +99 -0
  334. package/lib/websocket/discord/shared.js +8 -0
  335. package/lib/websocket/discord/worker.d.ts +43 -0
  336. package/lib/websocket/discord/worker.js +2 -0
  337. package/lib/websocket/discord/workermanager.d.ts +69 -0
  338. package/lib/websocket/discord/workermanager.js +273 -0
  339. package/lib/websocket/index.d.ts +3 -0
  340. package/lib/websocket/index.js +19 -0
  341. package/lib/websocket/structures/index.d.ts +117 -0
  342. package/lib/websocket/structures/index.js +261 -0
  343. package/lib/websocket/structures/timeout.d.ts +20 -0
  344. package/lib/websocket/structures/timeout.js +75 -0
  345. 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
+ }