@biggy1337/discord-sbjs 1.3.11

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 (373) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +147 -0
  3. package/package.json +80 -0
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +110 -0
  6. package/src/client/Client.js +1076 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +133 -0
  9. package/src/client/actions/ActionsManager.js +80 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +27 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +28 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +32 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
  15. package/src/client/actions/ChannelCreate.js +23 -0
  16. package/src/client/actions/ChannelDelete.js +39 -0
  17. package/src/client/actions/ChannelUpdate.js +43 -0
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  19. package/src/client/actions/GuildBanAdd.js +20 -0
  20. package/src/client/actions/GuildBanRemove.js +25 -0
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  22. package/src/client/actions/GuildDelete.js +65 -0
  23. package/src/client/actions/GuildEmojiCreate.js +20 -0
  24. package/src/client/actions/GuildEmojiDelete.js +21 -0
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  28. package/src/client/actions/GuildMemberRemove.js +33 -0
  29. package/src/client/actions/GuildMemberUpdate.js +44 -0
  30. package/src/client/actions/GuildRoleCreate.js +25 -0
  31. package/src/client/actions/GuildRoleDelete.js +31 -0
  32. package/src/client/actions/GuildRoleUpdate.js +39 -0
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  39. package/src/client/actions/GuildStickerCreate.js +20 -0
  40. package/src/client/actions/GuildStickerDelete.js +21 -0
  41. package/src/client/actions/GuildStickerUpdate.js +20 -0
  42. package/src/client/actions/GuildStickersUpdate.js +34 -0
  43. package/src/client/actions/GuildUpdate.js +33 -0
  44. package/src/client/actions/InviteCreate.js +28 -0
  45. package/src/client/actions/InviteDelete.js +30 -0
  46. package/src/client/actions/MessageCreate.js +50 -0
  47. package/src/client/actions/MessageDelete.js +34 -0
  48. package/src/client/actions/MessageDeleteBulk.js +43 -0
  49. package/src/client/actions/MessagePollVoteAdd.js +33 -0
  50. package/src/client/actions/MessagePollVoteRemove.js +33 -0
  51. package/src/client/actions/MessageReactionAdd.js +71 -0
  52. package/src/client/actions/MessageReactionRemove.js +39 -0
  53. package/src/client/actions/MessageReactionRemoveAll.js +36 -0
  54. package/src/client/actions/MessageReactionRemoveEmoji.js +30 -0
  55. package/src/client/actions/MessageUpdate.js +28 -0
  56. package/src/client/actions/PresenceUpdate.js +55 -0
  57. package/src/client/actions/StageInstanceCreate.js +28 -0
  58. package/src/client/actions/StageInstanceDelete.js +33 -0
  59. package/src/client/actions/StageInstanceUpdate.js +30 -0
  60. package/src/client/actions/ThreadCreate.js +24 -0
  61. package/src/client/actions/ThreadDelete.js +32 -0
  62. package/src/client/actions/ThreadListSync.js +60 -0
  63. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  64. package/src/client/actions/ThreadMembersUpdate.js +38 -0
  65. package/src/client/actions/TypingStart.js +31 -0
  66. package/src/client/actions/UserUpdate.js +35 -0
  67. package/src/client/actions/VoiceStateUpdate.js +63 -0
  68. package/src/client/actions/WebhooksUpdate.js +20 -0
  69. package/src/client/voice/ClientVoiceManager.js +162 -0
  70. package/src/client/voice/StreamEventRouter.js +60 -0
  71. package/src/client/voice/VoiceConnection.js +1173 -0
  72. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  73. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  74. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  75. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  76. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  77. package/src/client/voice/networking/VoiceUDPClient.js +187 -0
  78. package/src/client/voice/networking/VoiceWebSocket.js +347 -0
  79. package/src/client/voice/player/MediaPlayer.js +321 -0
  80. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  81. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  82. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  83. package/src/client/voice/receiver/PacketHandler.js +260 -0
  84. package/src/client/voice/receiver/Receiver.js +96 -0
  85. package/src/client/voice/receiver/Recorder.js +191 -0
  86. package/src/client/voice/util/Function.js +116 -0
  87. package/src/client/voice/util/PlayInterface.js +122 -0
  88. package/src/client/voice/util/Secretbox.js +64 -0
  89. package/src/client/voice/util/Silence.js +16 -0
  90. package/src/client/voice/util/Socket.js +62 -0
  91. package/src/client/voice/util/VolumeInterface.js +104 -0
  92. package/src/client/websocket/DispatchTable.js +7 -0
  93. package/src/client/websocket/GatewaySendScheduler.js +122 -0
  94. package/src/client/websocket/WebSocketManager.js +439 -0
  95. package/src/client/websocket/WebSocketShard.js +1085 -0
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  97. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  98. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  99. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  100. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  101. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  102. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  103. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  104. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  105. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  106. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  107. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  108. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  109. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  110. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  111. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  112. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  113. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  114. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  115. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_CREATE.js +51 -0
  117. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  118. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  119. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +45 -0
  121. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  122. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  129. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  130. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  131. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  132. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  133. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  134. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  135. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  136. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  140. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
  141. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  143. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  144. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  145. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  146. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  147. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  148. package/src/client/websocket/handlers/READY.js +156 -0
  149. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  150. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  151. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  152. package/src/client/websocket/handlers/RESUMED.js +14 -0
  153. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  154. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  155. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  156. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  157. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  158. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  159. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  160. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  161. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  162. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  163. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  164. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +82 -0
  166. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  167. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  168. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  169. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  170. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +12 -0
  171. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  172. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  173. package/src/client/websocket/handlers/index.js +84 -0
  174. package/src/errors/DJSError.js +61 -0
  175. package/src/errors/Messages.js +218 -0
  176. package/src/errors/index.js +4 -0
  177. package/src/index.js +172 -0
  178. package/src/managers/ApplicationCommandManager.js +264 -0
  179. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  180. package/src/managers/AutoModerationRuleManager.js +296 -0
  181. package/src/managers/BaseGuildEmojiManager.js +80 -0
  182. package/src/managers/BaseManager.js +19 -0
  183. package/src/managers/BillingManager.js +66 -0
  184. package/src/managers/CachedManager.js +72 -0
  185. package/src/managers/ChannelManager.js +148 -0
  186. package/src/managers/ClientUserSettingManager.js +372 -0
  187. package/src/managers/DataManager.js +61 -0
  188. package/src/managers/DeveloperManager.js +265 -0
  189. package/src/managers/GuildBanManager.js +252 -0
  190. package/src/managers/GuildChannelManager.js +488 -0
  191. package/src/managers/GuildEmojiManager.js +171 -0
  192. package/src/managers/GuildEmojiRoleManager.js +118 -0
  193. package/src/managers/GuildForumThreadManager.js +108 -0
  194. package/src/managers/GuildInviteManager.js +213 -0
  195. package/src/managers/GuildManager.js +401 -0
  196. package/src/managers/GuildMemberManager.js +608 -0
  197. package/src/managers/GuildMemberRoleManager.js +195 -0
  198. package/src/managers/GuildScheduledEventManager.js +314 -0
  199. package/src/managers/GuildSettingManager.js +155 -0
  200. package/src/managers/GuildStickerManager.js +179 -0
  201. package/src/managers/GuildTextThreadManager.js +98 -0
  202. package/src/managers/InteractionManager.js +39 -0
  203. package/src/managers/MessageManager.js +457 -0
  204. package/src/managers/PermissionOverwriteManager.js +169 -0
  205. package/src/managers/PresenceManager.js +71 -0
  206. package/src/managers/QuestManager.js +391 -0
  207. package/src/managers/ReactionManager.js +67 -0
  208. package/src/managers/ReactionUserManager.js +73 -0
  209. package/src/managers/RelationshipManager.js +341 -0
  210. package/src/managers/RoleManager.js +448 -0
  211. package/src/managers/SessionManager.js +66 -0
  212. package/src/managers/StageInstanceManager.js +162 -0
  213. package/src/managers/ThreadManager.js +175 -0
  214. package/src/managers/ThreadMemberManager.js +186 -0
  215. package/src/managers/UserManager.js +274 -0
  216. package/src/managers/UserNoteManager.js +53 -0
  217. package/src/managers/VoiceStateManager.js +59 -0
  218. package/src/rest/APIRequest.js +198 -0
  219. package/src/rest/APIRouter.js +94 -0
  220. package/src/rest/DiscordAPIError.js +120 -0
  221. package/src/rest/HTTPError.js +62 -0
  222. package/src/rest/RESTManager.js +203 -0
  223. package/src/rest/RateLimitCoordinator.js +156 -0
  224. package/src/rest/RateLimitError.js +55 -0
  225. package/src/rest/RequestHandler.js +552 -0
  226. package/src/sharding/Shard.js +444 -0
  227. package/src/sharding/ShardClientUtil.js +279 -0
  228. package/src/sharding/ShardingManager.js +319 -0
  229. package/src/structures/AnonymousGuild.js +98 -0
  230. package/src/structures/ApplicationCommand.js +593 -0
  231. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
  232. package/src/structures/AutoModerationActionExecution.js +89 -0
  233. package/src/structures/AutoModerationRule.js +294 -0
  234. package/src/structures/AutocompleteInteraction.js +107 -0
  235. package/src/structures/Base.js +43 -0
  236. package/src/structures/BaseCommandInteraction.js +211 -0
  237. package/src/structures/BaseGuild.js +124 -0
  238. package/src/structures/BaseGuildEmoji.js +56 -0
  239. package/src/structures/BaseGuildTextChannel.js +191 -0
  240. package/src/structures/BaseGuildVoiceChannel.js +241 -0
  241. package/src/structures/BaseMessageComponent.js +181 -0
  242. package/src/structures/ButtonInteraction.js +11 -0
  243. package/src/structures/CallState.js +63 -0
  244. package/src/structures/CategoryChannel.js +85 -0
  245. package/src/structures/Channel.js +284 -0
  246. package/src/structures/ClientPresence.js +77 -0
  247. package/src/structures/ClientUser.js +706 -0
  248. package/src/structures/CommandInteraction.js +41 -0
  249. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  250. package/src/structures/ContainerComponent.js +68 -0
  251. package/src/structures/ContextMenuInteraction.js +65 -0
  252. package/src/structures/DMChannel.js +222 -0
  253. package/src/structures/DirectoryChannel.js +20 -0
  254. package/src/structures/Emoji.js +148 -0
  255. package/src/structures/FileComponent.js +49 -0
  256. package/src/structures/ForumChannel.js +31 -0
  257. package/src/structures/GroupDMChannel.js +415 -0
  258. package/src/structures/Guild.js +1804 -0
  259. package/src/structures/GuildAuditLogs.js +746 -0
  260. package/src/structures/GuildBan.js +59 -0
  261. package/src/structures/GuildBoost.js +108 -0
  262. package/src/structures/GuildChannel.js +470 -0
  263. package/src/structures/GuildEmoji.js +161 -0
  264. package/src/structures/GuildMember.js +636 -0
  265. package/src/structures/GuildPreview.js +191 -0
  266. package/src/structures/GuildPreviewEmoji.js +27 -0
  267. package/src/structures/GuildScheduledEvent.js +536 -0
  268. package/src/structures/GuildTemplate.js +236 -0
  269. package/src/structures/Integration.js +188 -0
  270. package/src/structures/IntegrationApplication.js +96 -0
  271. package/src/structures/Interaction.js +290 -0
  272. package/src/structures/InteractionCollector.js +248 -0
  273. package/src/structures/InteractionWebhook.js +43 -0
  274. package/src/structures/Invite.js +358 -0
  275. package/src/structures/InviteGuild.js +23 -0
  276. package/src/structures/InviteStageInstance.js +86 -0
  277. package/src/structures/MediaChannel.js +11 -0
  278. package/src/structures/MediaGalleryComponent.js +41 -0
  279. package/src/structures/MediaGalleryItem.js +47 -0
  280. package/src/structures/Message.js +1272 -0
  281. package/src/structures/MessageActionRow.js +105 -0
  282. package/src/structures/MessageAttachment.js +216 -0
  283. package/src/structures/MessageButton.js +166 -0
  284. package/src/structures/MessageCollector.js +146 -0
  285. package/src/structures/MessageComponentInteraction.js +120 -0
  286. package/src/structures/MessageContextMenuInteraction.js +20 -0
  287. package/src/structures/MessageEmbed.js +596 -0
  288. package/src/structures/MessageMentions.js +273 -0
  289. package/src/structures/MessagePayload.js +354 -0
  290. package/src/structures/MessageReaction.js +181 -0
  291. package/src/structures/MessageSelectMenu.js +141 -0
  292. package/src/structures/Modal.js +161 -0
  293. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  294. package/src/structures/ModalSubmitInteraction.js +119 -0
  295. package/src/structures/NewsChannel.js +32 -0
  296. package/src/structures/OAuth2Guild.js +28 -0
  297. package/src/structures/PermissionOverwrites.js +198 -0
  298. package/src/structures/Poll.js +108 -0
  299. package/src/structures/PollAnswer.js +88 -0
  300. package/src/structures/Presence.js +1165 -0
  301. package/src/structures/ReactionCollector.js +229 -0
  302. package/src/structures/ReactionEmoji.js +31 -0
  303. package/src/structures/Role.js +590 -0
  304. package/src/structures/SectionComponent.js +48 -0
  305. package/src/structures/SelectMenuInteraction.js +21 -0
  306. package/src/structures/SeparatorComponent.js +48 -0
  307. package/src/structures/Session.js +81 -0
  308. package/src/structures/StageChannel.js +104 -0
  309. package/src/structures/StageInstance.js +208 -0
  310. package/src/structures/Sticker.js +310 -0
  311. package/src/structures/StickerPack.js +95 -0
  312. package/src/structures/StoreChannel.js +56 -0
  313. package/src/structures/Team.js +118 -0
  314. package/src/structures/TeamMember.js +80 -0
  315. package/src/structures/TextChannel.js +33 -0
  316. package/src/structures/TextDisplayComponent.js +40 -0
  317. package/src/structures/TextInputComponent.js +132 -0
  318. package/src/structures/ThreadChannel.js +605 -0
  319. package/src/structures/ThreadMember.js +105 -0
  320. package/src/structures/ThreadOnlyChannel.js +249 -0
  321. package/src/structures/ThumbnailComponent.js +57 -0
  322. package/src/structures/Typing.js +74 -0
  323. package/src/structures/UnfurledMediaItem.js +29 -0
  324. package/src/structures/User.js +992 -0
  325. package/src/structures/UserContextMenuInteraction.js +29 -0
  326. package/src/structures/VoiceChannel.js +110 -0
  327. package/src/structures/VoiceChannelEffect.js +69 -0
  328. package/src/structures/VoiceRegion.js +53 -0
  329. package/src/structures/VoiceState.js +354 -0
  330. package/src/structures/WebEmbed.js +373 -0
  331. package/src/structures/Webhook.js +478 -0
  332. package/src/structures/WelcomeChannel.js +60 -0
  333. package/src/structures/WelcomeScreen.js +48 -0
  334. package/src/structures/Widget.js +87 -0
  335. package/src/structures/WidgetMember.js +100 -0
  336. package/src/structures/interfaces/Application.js +953 -0
  337. package/src/structures/interfaces/Collector.js +301 -0
  338. package/src/structures/interfaces/InteractionResponses.js +313 -0
  339. package/src/structures/interfaces/TextBasedChannel.js +821 -0
  340. package/src/util/APITypes.js +59 -0
  341. package/src/util/ActivityFlags.js +44 -0
  342. package/src/util/ApplicationFlags.js +76 -0
  343. package/src/util/AttachmentFlags.js +38 -0
  344. package/src/util/BitField.js +170 -0
  345. package/src/util/ChannelFlags.js +45 -0
  346. package/src/util/Constants.js +1953 -0
  347. package/src/util/DataResolver.js +162 -0
  348. package/src/util/FastQueue.js +93 -0
  349. package/src/util/FetchUtil.js +77 -0
  350. package/src/util/Formatters.js +228 -0
  351. package/src/util/GuildMemberFlags.js +43 -0
  352. package/src/util/Intents.js +74 -0
  353. package/src/util/InviteFlags.js +34 -0
  354. package/src/util/LimitedCollection.js +131 -0
  355. package/src/util/ListenerUtil.js +12 -0
  356. package/src/util/MessageFlags.js +63 -0
  357. package/src/util/Options.js +431 -0
  358. package/src/util/Permissions.js +202 -0
  359. package/src/util/PremiumUsageFlags.js +31 -0
  360. package/src/util/PurchasedFlags.js +33 -0
  361. package/src/util/RemoteAuth.js +425 -0
  362. package/src/util/RoleFlags.js +37 -0
  363. package/src/util/SnowflakeUtil.js +92 -0
  364. package/src/util/Speaking.js +33 -0
  365. package/src/util/Sweepers.js +493 -0
  366. package/src/util/SystemChannelFlags.js +55 -0
  367. package/src/util/ThreadMemberFlags.js +30 -0
  368. package/src/util/UserFlags.js +104 -0
  369. package/src/util/Util.js +1144 -0
  370. package/typings/enums.d.ts +437 -0
  371. package/typings/index.d.ts +8857 -0
  372. package/typings/index.test-d.ts +0 -0
  373. package/typings/rawDataTypes.d.ts +403 -0
@@ -0,0 +1,202 @@
1
+ 'use strict';
2
+
3
+ const BitField = require('./BitField');
4
+
5
+ /**
6
+ * Data structure that makes it easy to interact with a permission bitfield. All {@link GuildMember}s have a set of
7
+ * permissions in their guild, and each channel in the guild may also have {@link PermissionOverwrites} for the member
8
+ * that override their default permissions.
9
+ * @extends {BitField}
10
+ */
11
+ class Permissions extends BitField {
12
+ /**
13
+ * Bitfield of the packed bits
14
+ * @type {bigint}
15
+ * @name Permissions#bitfield
16
+ */
17
+
18
+ /**
19
+ * Data that can be resolved to give a permission number. This can be:
20
+ * * A string (see {@link Permissions.FLAGS})
21
+ * * A permission number
22
+ * * An instance of Permissions
23
+ * * An Array of PermissionResolvable
24
+ * @typedef {string|bigint|Permissions|PermissionResolvable[]} PermissionResolvable
25
+ */
26
+
27
+ /**
28
+ * Gets all given bits that are missing from the bitfield.
29
+ * @param {BitFieldResolvable} bits Bit(s) to check for
30
+ * @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
31
+ * @returns {string[]}
32
+ */
33
+ missing(bits, checkAdmin = true) {
34
+ return checkAdmin && this.has(this.constructor.FLAGS.ADMINISTRATOR) ? [] : super.missing(bits);
35
+ }
36
+
37
+ /**
38
+ * Checks whether the bitfield has a permission, or any of multiple permissions.
39
+ * @param {PermissionResolvable} permission Permission(s) to check for
40
+ * @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
41
+ * @returns {boolean}
42
+ */
43
+ any(permission, checkAdmin = true) {
44
+ return (checkAdmin && super.has(this.constructor.FLAGS.ADMINISTRATOR)) || super.any(permission);
45
+ }
46
+
47
+ /**
48
+ * Checks whether the bitfield has a permission, or multiple permissions.
49
+ * @param {PermissionResolvable} permission Permission(s) to check for
50
+ * @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
51
+ * @returns {boolean}
52
+ */
53
+ has(permission, checkAdmin = true) {
54
+ return (checkAdmin && super.has(this.constructor.FLAGS.ADMINISTRATOR)) || super.has(permission);
55
+ }
56
+
57
+ /**
58
+ * Gets an {@link Array} of bitfield names based on the permissions available.
59
+ * @returns {string[]}
60
+ */
61
+ toArray() {
62
+ return super.toArray(false);
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Numeric permission flags. All available properties:
68
+ * * `CREATE_INSTANT_INVITE` (create invitations to the guild)
69
+ * * `KICK_MEMBERS`
70
+ * * `BAN_MEMBERS`
71
+ * * `ADMINISTRATOR` (implicitly has *all* permissions, and bypasses all channel overwrites)
72
+ * * `MANAGE_CHANNELS` (edit and reorder channels)
73
+ * * `MANAGE_GUILD` (edit the guild information, region, etc.)
74
+ * * `ADD_REACTIONS` (add new reactions to messages)
75
+ * * `VIEW_AUDIT_LOG`
76
+ * * `PRIORITY_SPEAKER`
77
+ * * `STREAM`
78
+ * * `VIEW_CHANNEL`
79
+ * * `SEND_MESSAGES`
80
+ * * `SEND_TTS_MESSAGES`
81
+ * * `MANAGE_MESSAGES` (delete messages and reactions)
82
+ * * `EMBED_LINKS` (links posted will have a preview embedded)
83
+ * * `ATTACH_FILES`
84
+ * * `READ_MESSAGE_HISTORY` (view messages that were posted prior to opening Discord)
85
+ * * `MENTION_EVERYONE`
86
+ * * `USE_EXTERNAL_EMOJIS` (use emojis from different guilds)
87
+ * * `VIEW_GUILD_INSIGHTS`
88
+ * * `CONNECT` (connect to a voice channel)
89
+ * * `SPEAK` (speak in a voice channel)
90
+ * * `MUTE_MEMBERS` (mute members across all voice channels)
91
+ * * `DEAFEN_MEMBERS` (deafen members across all voice channels)
92
+ * * `MOVE_MEMBERS` (move members between voice channels)
93
+ * * `USE_VAD` (use voice activity detection)
94
+ * * `CHANGE_NICKNAME`
95
+ * * `MANAGE_NICKNAMES` (change other members' nicknames)
96
+ * * `MANAGE_ROLES`
97
+ * * `MANAGE_WEBHOOKS`
98
+ * * `MANAGE_EMOJIS_AND_STICKERS`
99
+ * * `USE_APPLICATION_COMMANDS`
100
+ * * `REQUEST_TO_SPEAK`
101
+ * * `MANAGE_EVENTS`
102
+ * * `MANAGE_THREADS`
103
+ * * `USE_PUBLIC_THREADS` (deprecated)
104
+ * * `CREATE_PUBLIC_THREADS`
105
+ * * `USE_PRIVATE_THREADS` (deprecated)
106
+ * * `CREATE_PRIVATE_THREADS`
107
+ * * `USE_EXTERNAL_STICKERS` (use stickers from different guilds)
108
+ * * `SEND_MESSAGES_IN_THREADS`
109
+ * * `START_EMBEDDED_ACTIVITIES`
110
+ * * `MODERATE_MEMBERS`
111
+ * * `VIEW_CREATOR_MONETIZATION_ANALYTICS`
112
+ * * `USE_SOUNDBOARD`
113
+ * * `CREATE_GUILD_EXPRESSIONS`
114
+ * * `CREATE_EVENTS`
115
+ * * `USE_EXTERNAL_SOUNDS`
116
+ * * `SEND_VOICE_MESSAGES`
117
+ * * `USE_CLYDE_AI`
118
+ * * `SET_VOICE_CHANNEL_STATUS`
119
+ * * `SEND_POLLS`
120
+ * * `USE_EXTERNAL_APPS`
121
+ * @type {Object<string, bigint>}
122
+ * @see {@link https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags}
123
+ */
124
+ Permissions.FLAGS = {
125
+ CREATE_INSTANT_INVITE: 1n << 0n,
126
+ KICK_MEMBERS: 1n << 1n,
127
+ BAN_MEMBERS: 1n << 2n,
128
+ ADMINISTRATOR: 1n << 3n,
129
+ MANAGE_CHANNELS: 1n << 4n,
130
+ MANAGE_GUILD: 1n << 5n,
131
+ ADD_REACTIONS: 1n << 6n,
132
+ VIEW_AUDIT_LOG: 1n << 7n,
133
+ PRIORITY_SPEAKER: 1n << 8n,
134
+ STREAM: 1n << 9n,
135
+ VIEW_CHANNEL: 1n << 10n,
136
+ SEND_MESSAGES: 1n << 11n,
137
+ SEND_TTS_MESSAGES: 1n << 12n,
138
+ MANAGE_MESSAGES: 1n << 13n,
139
+ EMBED_LINKS: 1n << 14n,
140
+ ATTACH_FILES: 1n << 15n,
141
+ READ_MESSAGE_HISTORY: 1n << 16n,
142
+ MENTION_EVERYONE: 1n << 17n,
143
+ USE_EXTERNAL_EMOJIS: 1n << 18n,
144
+ VIEW_GUILD_INSIGHTS: 1n << 19n,
145
+ CONNECT: 1n << 20n,
146
+ SPEAK: 1n << 21n,
147
+ MUTE_MEMBERS: 1n << 22n,
148
+ DEAFEN_MEMBERS: 1n << 23n,
149
+ MOVE_MEMBERS: 1n << 24n,
150
+ USE_VAD: 1n << 25n,
151
+ CHANGE_NICKNAME: 1n << 26n,
152
+ MANAGE_NICKNAMES: 1n << 27n,
153
+ MANAGE_ROLES: 1n << 28n,
154
+ MANAGE_WEBHOOKS: 1n << 29n,
155
+ MANAGE_EMOJIS_AND_STICKERS: 1n << 30n,
156
+ USE_APPLICATION_COMMANDS: 1n << 31n,
157
+ REQUEST_TO_SPEAK: 1n << 32n,
158
+ MANAGE_EVENTS: 1n << 33n,
159
+ MANAGE_THREADS: 1n << 34n,
160
+ // TODO: Remove deprecated USE_*_THREADS flags in v14
161
+ USE_PUBLIC_THREADS: 1n << 35n,
162
+ CREATE_PUBLIC_THREADS: 1n << 35n,
163
+ USE_PRIVATE_THREADS: 1n << 36n,
164
+ CREATE_PRIVATE_THREADS: 1n << 36n,
165
+ USE_EXTERNAL_STICKERS: 1n << 37n,
166
+ SEND_MESSAGES_IN_THREADS: 1n << 38n,
167
+ START_EMBEDDED_ACTIVITIES: 1n << 39n,
168
+ MODERATE_MEMBERS: 1n << 40n,
169
+ VIEW_CREATOR_MONETIZATION_ANALYTICS: 1n << 41n,
170
+ USE_SOUNDBOARD: 1n << 42n,
171
+ CREATE_GUILD_EXPRESSIONS: 1n << 43n,
172
+ CREATE_EVENTS: 1n << 44n,
173
+ USE_EXTERNAL_SOUNDS: 1n << 45n,
174
+ SEND_VOICE_MESSAGES: 1n << 46n,
175
+ USE_CLYDE_AI: 1n << 47n,
176
+ SET_VOICE_CHANNEL_STATUS: 1n << 48n,
177
+ SEND_POLLS: 1n << 49n,
178
+ USE_EXTERNAL_APPS: 1n << 50n,
179
+ };
180
+
181
+ /**
182
+ * Bitfield representing every permission combined
183
+ * @type {bigint}
184
+ */
185
+ Permissions.ALL = Object.values(Permissions.FLAGS).reduce((all, p) => all | p, 0n);
186
+
187
+ /**
188
+ * Bitfield representing the default permissions for users
189
+ * @type {bigint}
190
+ */
191
+ Permissions.DEFAULT = BigInt(104324673);
192
+
193
+ /**
194
+ * Bitfield representing the permissions required for moderators of stage channels
195
+ * @type {bigint}
196
+ */
197
+ Permissions.STAGE_MODERATOR =
198
+ Permissions.FLAGS.MANAGE_CHANNELS | Permissions.FLAGS.MUTE_MEMBERS | Permissions.FLAGS.MOVE_MEMBERS;
199
+
200
+ Permissions.defaultBit = BigInt(0);
201
+
202
+ module.exports = Permissions;
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ const BitField = require('./BitField');
4
+
5
+ /**
6
+ * Data structure that makes it easy to interact with an {@link PremiumUsageFlags#flags} bitfield.
7
+ * @extends {BitField}
8
+ */
9
+ class PremiumUsageFlags extends BitField {}
10
+
11
+ /**
12
+ * @name PremiumUsageFlags
13
+ * @kind constructor
14
+ * @memberof PremiumUsageFlags
15
+ * @param {BitFieldResolvable} [bits=0] Bit(s) to read from
16
+ */
17
+
18
+ /**
19
+ * Numeric the Discord premium usage flags. All available properties:
20
+ * * `PREMIUM_DISCRIMINATOR`
21
+ * * `ANIMATED_AVATAR`
22
+ * * `PROFILE_BANNER`
23
+ * @type {Object}
24
+ */
25
+ PremiumUsageFlags.FLAGS = {
26
+ PREMIUM_DISCRIMINATOR: 1 << 0,
27
+ ANIMATED_AVATAR: 1 << 1,
28
+ PROFILE_BANNER: 1 << 2,
29
+ };
30
+
31
+ module.exports = PremiumUsageFlags;
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ const BitField = require('./BitField');
4
+
5
+ /**
6
+ * Data structure that makes it easy to interact with an {@link PurchasedFlags#flags} bitfield.
7
+ * @extends {BitField}
8
+ */
9
+ class PurchasedFlags extends BitField {}
10
+
11
+ /**
12
+ * @name PurchasedFlags
13
+ * @kind constructor
14
+ * @memberof PurchasedFlags
15
+ * @param {BitFieldResolvable} [bits=0] Bit(s) to read from
16
+ */
17
+
18
+ /**
19
+ * Numeric the Discord purchased flags. All available properties:
20
+ * * `NITRO_CLASSIC`
21
+ * * `NITRO`
22
+ * * `GUILD_BOOST`
23
+ * * `NITRO_BASIC`
24
+ * @type {Object}
25
+ */
26
+ PurchasedFlags.FLAGS = {
27
+ NITRO_CLASSIC: 1 << 0,
28
+ NITRO: 1 << 1,
29
+ GUILD_BOOST: 1 << 2,
30
+ NITRO_BASIC: 1 << 3,
31
+ };
32
+
33
+ module.exports = PurchasedFlags;
@@ -0,0 +1,425 @@
1
+ 'use strict';
2
+
3
+ const { Buffer } = require('node:buffer');
4
+ const crypto = require('node:crypto');
5
+ const EventEmitter = require('node:events');
6
+ const { setTimeout } = require('node:timers');
7
+ const { UserAgent } = require('./Constants');
8
+ const { getNativeFetch } = require('./FetchUtil');
9
+ const Options = require('./Options');
10
+ const { WebSocket } = require('../WebSocket');
11
+
12
+ const fetch = getNativeFetch();
13
+
14
+ const defaultClientOptions = Options.createDefault();
15
+ const superPropertiesBase64 = Buffer.from(JSON.stringify(defaultClientOptions.ws.properties), 'ascii').toString(
16
+ 'base64',
17
+ );
18
+
19
+ const baseURL = 'https://discord.com/ra/';
20
+
21
+ const wsURL = 'wss://remote-auth-gateway.discord.gg/?v=2';
22
+
23
+ const receiveEvent = {
24
+ HELLO: 'hello',
25
+ NONCE_PROOF: 'nonce_proof',
26
+ PENDING_REMOTE_INIT: 'pending_remote_init',
27
+ HEARTBEAT_ACK: 'heartbeat_ack',
28
+ PENDING_TICKET: 'pending_ticket',
29
+ CANCEL: 'cancel',
30
+ PENDING_LOGIN: 'pending_login',
31
+ };
32
+
33
+ const sendEvent = {
34
+ INIT: 'init',
35
+ NONCE_PROOF: 'nonce_proof',
36
+ HEARTBEAT: 'heartbeat',
37
+ };
38
+
39
+ const Event = {
40
+ READY: 'ready',
41
+ ERROR: 'error',
42
+ CANCEL: 'cancel',
43
+ WAIT_SCAN: 'pending',
44
+ FINISH: 'finish',
45
+ CLOSED: 'closed',
46
+ DEBUG: 'debug',
47
+ };
48
+
49
+ /**
50
+ * Discord Auth QR
51
+ * @extends {EventEmitter}
52
+ * @abstract
53
+ */
54
+ class DiscordAuthWebsocket extends EventEmitter {
55
+ #ws = null;
56
+ #heartbeatTimeout = null;
57
+ #heartbeatInterval = null;
58
+ #expire = null;
59
+ #publicKey = null;
60
+ #privateKey = null;
61
+ #encodedPublicKey = null;
62
+ #ticket = null;
63
+ #fingerprint = '';
64
+ #userDecryptString = '';
65
+
66
+ /**
67
+ * Creates a new DiscordAuthWebsocket instance.
68
+ */
69
+ constructor() {
70
+ super();
71
+ this.token = '';
72
+ }
73
+
74
+ /**
75
+ * @type {string}
76
+ */
77
+ get AuthURL() {
78
+ return baseURL + this.#fingerprint;
79
+ }
80
+
81
+ /**
82
+ * @type {Date}
83
+ */
84
+ get expire() {
85
+ return this.#expire;
86
+ }
87
+
88
+ /**
89
+ * @type {Date}
90
+ * @deprecated Use {@link DiscordAuthWebsocket#expire} instead.
91
+ */
92
+ get exprire() {
93
+ return this.expire;
94
+ }
95
+
96
+ /**
97
+ * @type {UserRaw}
98
+ */
99
+ get user() {
100
+ return DiscordAuthWebsocket.decryptUser(this.#userDecryptString);
101
+ }
102
+
103
+ #createWebSocket(url) {
104
+ this.#ws = new WebSocket(url, {
105
+ headers: {
106
+ Origin: 'https://discord.com',
107
+ 'User-Agent': UserAgent,
108
+ },
109
+ });
110
+ this.#handleWebSocket();
111
+ }
112
+
113
+ #clearHeartbeatTimer() {
114
+ if (!this.#heartbeatTimeout) return;
115
+ clearTimeout(this.#heartbeatTimeout);
116
+ this.#heartbeatTimeout = null;
117
+ }
118
+
119
+ #parseMessage(message) {
120
+ try {
121
+ const payload =
122
+ typeof message === 'string'
123
+ ? message
124
+ : Buffer.isBuffer(message)
125
+ ? message.toString('utf8')
126
+ : message?.data instanceof ArrayBuffer
127
+ ? Buffer.from(message.data).toString('utf8')
128
+ : Buffer.isBuffer(message?.data)
129
+ ? message.data.toString('utf8')
130
+ : message?.data ?? message;
131
+ const serialized = typeof payload === 'string' ? payload : String(payload);
132
+ return JSON.parse(serialized);
133
+ } catch (error) {
134
+ this.emit(Event.ERROR, error);
135
+ return null;
136
+ }
137
+ }
138
+
139
+ #handleWebSocket() {
140
+ this.#ws.on('error', error => {
141
+ /**
142
+ * WS Error
143
+ * @event DiscordAuthWebsocket#error
144
+ * @param {Error} error Error
145
+ */
146
+ this.emit(Event.ERROR, error);
147
+ });
148
+ this.#ws.on('open', () => {
149
+ /**
150
+ * Debug Event
151
+ * @event DiscordAuthWebsocket#debug
152
+ * @param {string} msg Debug msg
153
+ */
154
+ this.emit(Event.DEBUG, '[WS] Client Connected');
155
+ });
156
+ this.#ws.on('close', () => {
157
+ this.#clearHeartbeatTimer();
158
+ this.emit(Event.DEBUG, '[WS] Connection closed');
159
+ });
160
+ this.#ws.on('message', this.#handleMessage.bind(this));
161
+ }
162
+
163
+ #handleMessage(message) {
164
+ const payload = this.#parseMessage(message);
165
+ if (!payload) return;
166
+ switch (payload.op) {
167
+ case receiveEvent.HELLO: {
168
+ this.#ready(payload);
169
+ break;
170
+ }
171
+
172
+ case receiveEvent.NONCE_PROOF: {
173
+ this.#receiveNonceProof(payload);
174
+ break;
175
+ }
176
+
177
+ case receiveEvent.PENDING_REMOTE_INIT: {
178
+ this.#fingerprint = payload.fingerprint;
179
+ /**
180
+ * Ready Event
181
+ * @event DiscordAuthWebsocket#ready
182
+ * @param {DiscordAuthWebsocket} client WS
183
+ */
184
+ this.emit(Event.READY, this);
185
+ break;
186
+ }
187
+
188
+ case receiveEvent.HEARTBEAT_ACK: {
189
+ this.emit(Event.DEBUG, `Heartbeat acknowledged.`);
190
+ this.#heartbeatAck();
191
+ break;
192
+ }
193
+
194
+ case receiveEvent.PENDING_TICKET: {
195
+ this.#pendingLogin(payload);
196
+ break;
197
+ }
198
+
199
+ case receiveEvent.CANCEL: {
200
+ /**
201
+ * Cancel
202
+ * @event DiscordAuthWebsocket#cancel
203
+ * @param {DiscordAuthWebsocket} client WS
204
+ */
205
+ this.emit(Event.CANCEL, this);
206
+ this.destroy();
207
+ break;
208
+ }
209
+
210
+ case receiveEvent.PENDING_LOGIN: {
211
+ this.#ticket = payload.ticket;
212
+ this.#findRealToken();
213
+ break;
214
+ }
215
+ }
216
+ }
217
+
218
+ #send(op, data) {
219
+ if (!this.#ws || this.#ws.readyState !== WebSocket.OPEN) return;
220
+ let payload = { op: op };
221
+ if (data !== null) payload = { ...payload, ...data };
222
+ this.#ws.send(JSON.stringify(payload));
223
+ }
224
+
225
+ #heartbeatAck() {
226
+ this.#clearHeartbeatTimer();
227
+ this.#heartbeatTimeout = setTimeout(() => {
228
+ this.#send(sendEvent.HEARTBEAT);
229
+ }, this.#heartbeatInterval);
230
+ if (typeof this.#heartbeatTimeout.unref === 'function') {
231
+ this.#heartbeatTimeout.unref();
232
+ }
233
+ }
234
+
235
+ #ready(data) {
236
+ this.emit(Event.DEBUG, 'Attempting server handshake...');
237
+ this.#expire = new Date(Date.now() + data.timeout_ms);
238
+ this.#heartbeatInterval = data.heartbeat_interval;
239
+ this.#createKey();
240
+ this.#heartbeatAck();
241
+ this.#init();
242
+ }
243
+
244
+ #createKey() {
245
+ const key = crypto.generateKeyPairSync('rsa', {
246
+ modulusLength: 2048,
247
+ publicKeyEncoding: {
248
+ type: 'spki',
249
+ format: 'pem',
250
+ },
251
+ privateKeyEncoding: {
252
+ type: 'pkcs1',
253
+ format: 'pem',
254
+ },
255
+ });
256
+ this.#privateKey = typeof key.privateKey === 'string' ? key.privateKey : key.privateKey.toString('utf8');
257
+ this.#publicKey = typeof key.publicKey === 'string' ? key.publicKey : key.publicKey.toString('utf8');
258
+ this.#encodedPublicKey = this.#encodePublicKey();
259
+ }
260
+
261
+ #encodePublicKey() {
262
+ return this.#publicKey
263
+ .replace('-----BEGIN PUBLIC KEY-----\n', '')
264
+ .replace('\n-----END PUBLIC KEY-----\n', '')
265
+ .replace(/\n/g, '');
266
+ }
267
+
268
+ #init() {
269
+ this.#send(sendEvent.INIT, { encoded_public_key: this.#encodedPublicKey });
270
+ }
271
+
272
+ #receiveNonceProof(data) {
273
+ const nonce = data.encrypted_nonce;
274
+ const decrypted_nonce = this.#decryptPayload(nonce);
275
+ const proof = crypto.createHash('sha256').update(decrypted_nonce).digest('base64url');
276
+ this.#send(sendEvent.NONCE_PROOF, { proof: proof });
277
+ }
278
+
279
+ #decryptPayload(encrypted_payload) {
280
+ const payload = Buffer.from(encrypted_payload, 'base64');
281
+ const data = crypto.privateDecrypt(
282
+ {
283
+ key: this.#privateKey,
284
+ padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
285
+ oaepHash: 'sha256',
286
+ },
287
+ payload,
288
+ );
289
+ return data;
290
+ }
291
+
292
+ #pendingLogin(data) {
293
+ const user_data = this.#decryptPayload(data.encrypted_user_payload);
294
+ this.#userDecryptString = user_data.toString('utf8');
295
+
296
+ /**
297
+ * @typedef {Object} UserRaw
298
+ * @property {Snowflake} id
299
+ * @property {string} username
300
+ * @property {number} discriminator Legacy discriminator. Use `username` instead.
301
+ * @property {string} avatar
302
+ */
303
+
304
+ /**
305
+ * Emitted whenever a user is scan QR Code.
306
+ * @event DiscordAuthWebsocket#pending
307
+ * @param {UserRaw} user Discord User Raw
308
+ */
309
+ this.emit(Event.WAIT_SCAN, this.user);
310
+ }
311
+
312
+ #awaitLogin(client) {
313
+ return new Promise(r => {
314
+ this.once(Event.FINISH, token => {
315
+ r(client.login(token));
316
+ });
317
+ });
318
+ }
319
+
320
+ /**
321
+ * Connect WS
322
+ * @param {Client} [client] DiscordJS Client
323
+ * @returns {Promise<void>}
324
+ */
325
+ connect(client) {
326
+ this.#createWebSocket(wsURL);
327
+ if (client) {
328
+ return this.#awaitLogin(client);
329
+ } else {
330
+ return Promise.resolve();
331
+ }
332
+ }
333
+
334
+ /**
335
+ * Destroy client
336
+ * @returns {void}
337
+ */
338
+ destroy() {
339
+ if (!this.#ws) return;
340
+ this.#clearHeartbeatTimer();
341
+ this.#ws.close();
342
+ this.#ws = null;
343
+ this.emit(Event.DEBUG, 'WebSocket closed.');
344
+ /**
345
+ * Emitted whenever a connection is closed.
346
+ * @event DiscordAuthWebsocket#closed
347
+ */
348
+ this.emit(Event.CLOSED);
349
+ }
350
+
351
+ /**
352
+ * Generate QR code for user to scan (Terminal)
353
+ * @returns {void}
354
+ */
355
+ generateQR() {
356
+ if (!this.#fingerprint) return;
357
+ require('qrcode').toString(this.AuthURL, { type: 'utf8', errorCorrectionLevel: 'L' }, (err, url) => {
358
+ if (err) {
359
+ //
360
+ }
361
+ console.log(url);
362
+ });
363
+ }
364
+
365
+ async #findRealToken() {
366
+ try {
367
+ const response = await fetch(`https://discord.com/api/v9/users/@me/remote-auth/login`, {
368
+ method: 'POST',
369
+ headers: {
370
+ Accept: '*/*',
371
+ 'Accept-Language': 'en-US',
372
+ 'Content-Type': 'application/json',
373
+ 'Sec-Fetch-Dest': 'empty',
374
+ 'Sec-Fetch-Mode': 'cors',
375
+ 'Sec-Fetch-Site': 'same-origin',
376
+ 'X-Debug-Options': 'bugReporterEnabled',
377
+ 'X-Super-Properties': superPropertiesBase64,
378
+ 'X-Discord-Locale': 'en-US',
379
+ 'User-Agent': UserAgent,
380
+ Referer: 'https://discord.com/channels/@me',
381
+ Connection: 'keep-alive',
382
+ Origin: 'https://discord.com',
383
+ },
384
+ body: JSON.stringify({
385
+ ticket: this.#ticket,
386
+ }),
387
+ });
388
+
389
+ if (!response.ok) {
390
+ throw new Error(`Remote auth exchange failed with status ${response.status}`);
391
+ }
392
+
393
+ const res = await response.json();
394
+ if (res.encrypted_token) {
395
+ this.token = this.#decryptPayload(res.encrypted_token).toString('utf8');
396
+ }
397
+ /**
398
+ * Emitted whenever a real token is found.
399
+ * @event DiscordAuthWebsocket#finish
400
+ * @param {string} token Discord Token
401
+ */
402
+ this.emit(Event.FINISH, this.token);
403
+ } catch (error) {
404
+ this.emit(Event.ERROR, error);
405
+ } finally {
406
+ this.destroy();
407
+ }
408
+ }
409
+
410
+ static decryptUser(payload) {
411
+ const values = payload.split(':');
412
+ const id = values[0];
413
+ const username = values[3];
414
+ const discriminator = values[1];
415
+ const avatar = values[2];
416
+ return {
417
+ id,
418
+ username,
419
+ discriminator,
420
+ avatar,
421
+ };
422
+ }
423
+ }
424
+
425
+ module.exports = DiscordAuthWebsocket;