From b808105b7588ed4ccef97fc368c499a5d4390a50 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Fri, 17 Jan 2025 14:52:23 -0700 Subject: [PATCH] 1.1.0 --- .prettierrc | 2 +- build.ps1 | 9 + generate.js | 124 +- package.json | 6 +- pnpm-lock.yaml | 32 + snippets/duplicates.js | 15 + src/mappings/chroma-js.ts | 4 +- src/mappings/classnames.ts | 16 +- src/mappings/dependency-graph.ts | 146 ++ src/mappings/discord/Constants.ts | 1852 ++++++++++++++++- src/mappings/discord/Dispatcher.ts | 7 +- .../actions/ContextMenuActionCreators.ts | 10 +- .../discord/actions/MessageActionCreators.ts | 1 - .../actions/UserProfileModalActionCreators.ts | 1 - .../UserSettingsModalActionCreators.ts | 31 +- .../discord/components/common/Alerts.ts | 40 + .../components/common/BaseHeaderBar.ts | 7 +- .../discord/components/common/FileUpload.ts | 41 + .../components/common/FormSwitch.css.ts | 5 +- .../components/common/HeaderBar.css.ts | 5 +- .../components/common/HelpMessage.css.ts | 5 +- .../discord/components/common/Scroller.css.ts | 28 + .../discord/components/common/index.ts | 78 +- .../discord/components/modals/ConfirmModal.ts | 9 +- src/mappings/discord/lib/BaseRecord.ts | 27 + src/mappings/discord/lib/ChannelMessages.ts | 1 - src/mappings/discord/lib/web/Storage.ts | 28 + .../modules/a11y/AccessibilityStore.ts | 1 - .../age_gate/web/components/AgeGate.css.ts | 1 - .../age_gate/web/components/AgeGate.ts | 1 - .../ApplicationCommandBuiltIns.ts | 3 +- .../modules/applications/ApplicationStore.ts | 1 - .../build_overrides/web/BuildOverride.css.ts | 5 +- .../discord/modules/calls/ChannelRTCStore.ts | 1 - .../modules/discovery/web/Discovery.css.ts | 5 +- .../discord/modules/emojis/EmojiStore.ts | 1 - .../modules/experiments/ExperimentStore.ts | 1 - .../discord/modules/forums/web/Forums.css.ts | 5 +- .../discord/modules/forums/web/Header.css.ts | 5 +- .../modules/forums/web/SortMenu.css.ts | 5 +- .../discord/modules/forums/web/Tag.ts | 9 +- .../modules/gateway/GatewayConnectionStore.ts | 1 - .../GuildRoleMemberCountStore.ts | 1 - .../guild_settings/IntegrationCard.css.ts | 25 - .../roles/web/GuildSettingsRoleEdit.css.ts | 8 +- .../modules/guild_settings/web/AppCard.css.ts | 9 +- .../guild_settings/web/AppCardItem.css.ts | 11 +- .../guild_settings/web/SearchSection.css.ts | 19 +- .../guild_sidebar/web/CategoryChannel.css.ts | 28 +- .../discord/modules/markup/MarkupUtils.ts | 7 +- .../discord/modules/menus/web/Menu.ts | 7 + .../modules/messages/web/Markup.css.ts | 18 +- .../modules/messages/web/Message.css.ts | 82 +- .../modules/messages/web/UserMention.ts | 1 - src/mappings/discord/modules/oauth2/index.ts | 47 + .../modules/people/web/PeoplePage.css.ts | 5 +- .../modules/replies/PendingReplyStore.ts | 1 - .../modules/replies/ReferencedMessageStore.ts | 1 - .../discord/modules/spotify/SpotifyStore.ts | 1 - .../discord/modules/stickers/StickersStore.ts | 1 - .../modules/user_profile/UserProfileStore.ts | 1 - .../user_profile/web/BiteSizeActivity.css.ts | 13 +- .../web/UserProfileActivityCardWrapper.ts | 3 +- .../modules/user_settings/ThemeStore.ts | 1 - .../modules/user_settings/UserSettings.ts | 1 - .../user_settings/UserSettingsProtoStore.ts | 1 - .../user_settings/web/openUserSettings.ts | 20 - .../packages/flux/BatchedStoreListener.ts | 32 + .../discord/packages/flux/ChangeListeners.ts | 33 + .../discord/packages/flux/Dispatcher.ts | 97 + src/mappings/discord/packages/flux/Emitter.ts | 44 + .../discord/packages/flux/LoggingUtils.ts | 53 + .../discord/packages/flux/PersistedStore.ts | 85 + src/mappings/discord/packages/flux/Store.ts | 68 + src/mappings/discord/packages/flux/_shared.ts | 5 + .../discord/packages/flux/connectStores.ts | 25 + .../packages/{flux.ts => flux/index.ts} | 83 +- .../packages/flux/useStateFromStores.ts | 51 + src/mappings/discord/records/UserRecord.ts | 90 + .../stores/ApplicationStreamingStore.ts | 1 - .../discord/stores/AuthenticationStore.ts | 1 - src/mappings/discord/stores/ChannelStore.ts | 1 - src/mappings/discord/stores/GameStore.ts | 1 - .../discord/stores/GuildCategoryStore.ts | 1 - .../discord/stores/GuildMemberCountStore.ts | 1 - .../discord/stores/GuildMemberStore.ts | 1 - src/mappings/discord/stores/GuildStore.ts | 1 - .../discord/stores/MediaEngineStore.ts | 1 - .../discord/stores/MessageReactionsStore.ts | 1 - src/mappings/discord/stores/MessageStore.ts | 1 - .../discord/stores/PermissionStore.ts | 1 - src/mappings/discord/stores/PresenceStore.ts | 1 - src/mappings/discord/stores/ReadStateStore.ts | 1 - .../discord/stores/RelationshipStore.ts | 1 - .../discord/stores/SelectedChannelStore.ts | 1 - .../discord/stores/SelfPresenceStore.ts | 1 - src/mappings/discord/stores/SessionsStore.ts | 1 - .../discord/stores/SortedGuildStore.ts | 1 - src/mappings/discord/stores/TypingStore.ts | 1 - .../discord/stores/UploadAttachmentStore.ts | 1 - .../discord/stores/UserGuildSettingsStore.ts | 1 - src/mappings/discord/stores/UserStore.ts | 1 - .../discord/stores/VoiceStateStore.ts | 1 - .../discord/styles/shared/Margins.css.ts | 5 +- .../discord/styles/shared/Markup.css.ts | 32 - src/mappings/discord/uikit/Flex.ts | 17 +- src/mappings/discord/uikit/HeaderBar.ts | 1 - src/mappings/discord/uikit/ListSectionItem.ts | 1 - src/mappings/discord/uikit/OverflowTooltip.ts | 1 - .../discord/uikit/legacy/LegacyText.ts | 1 - src/mappings/discord/utils/AnalyticsUtils.ts | 1 - src/mappings/discord/utils/AvatarUtils.ts | 1 - src/mappings/discord/utils/ClipboardUtils.ts | 5 +- src/mappings/discord/utils/HTTPUtils.ts | 10 +- src/mappings/discord/utils/MaskedLinkUtils.ts | 6 + src/mappings/discord/utils/NativeUtils.ts | 7 +- src/mappings/discord/utils/PermissionUtils.ts | 1 - src/mappings/discord/utils/SnowflakeUtils.ts | 1 - src/mappings/highlight.js.ts | 8 +- src/mappings/highlight.js/lib/core.ts | 4 +- src/mappings/lodash.ts | 4 +- src/mappings/murmurhash.ts | 27 +- src/mappings/platform.js.ts | 4 +- src/mappings/react.ts | 13 +- src/mappings/simple-markdown.ts | 1 - src/mappings/uuid/v4.ts | 4 +- src/modules.ts | 72 +- src/types.ts | 80 +- 128 files changed, 3454 insertions(+), 430 deletions(-) create mode 100644 build.ps1 create mode 100644 snippets/duplicates.js create mode 100644 src/mappings/dependency-graph.ts create mode 100644 src/mappings/discord/components/common/Alerts.ts create mode 100644 src/mappings/discord/components/common/FileUpload.ts create mode 100644 src/mappings/discord/components/common/Scroller.css.ts create mode 100644 src/mappings/discord/lib/BaseRecord.ts delete mode 100644 src/mappings/discord/modules/guild_settings/IntegrationCard.css.ts create mode 100644 src/mappings/discord/modules/oauth2/index.ts delete mode 100644 src/mappings/discord/modules/user_settings/web/openUserSettings.ts create mode 100644 src/mappings/discord/packages/flux/BatchedStoreListener.ts create mode 100644 src/mappings/discord/packages/flux/ChangeListeners.ts create mode 100644 src/mappings/discord/packages/flux/Dispatcher.ts create mode 100644 src/mappings/discord/packages/flux/Emitter.ts create mode 100644 src/mappings/discord/packages/flux/LoggingUtils.ts create mode 100644 src/mappings/discord/packages/flux/PersistedStore.ts create mode 100644 src/mappings/discord/packages/flux/Store.ts create mode 100644 src/mappings/discord/packages/flux/_shared.ts create mode 100644 src/mappings/discord/packages/flux/connectStores.ts rename src/mappings/discord/packages/{flux.ts => flux/index.ts} (51%) create mode 100644 src/mappings/discord/packages/flux/useStateFromStores.ts create mode 100644 src/mappings/discord/records/UserRecord.ts delete mode 100644 src/mappings/discord/styles/shared/Markup.css.ts diff --git a/.prettierrc b/.prettierrc index daff9d2..142ae0e 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,5 @@ { - "printWidth": 80, + "printWidth": 120, "trailingComma": "none", "tabWidth": 2, "singleQuote": false diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..6f4bc70 --- /dev/null +++ b/build.ps1 @@ -0,0 +1,9 @@ +node .\generate.js types --write +node .\generate.js imports --write +prettier --write ./src + +node .\generate.js declares "@moonlight-mod/wp/" > ..\moonlight\packages\types\src\mappings.d.ts +prettier --write ..\moonlight\packages\types\src\mappings.d.ts + +pnpm run clean +pnpm run build diff --git a/generate.js b/generate.js index a3917da..cb7b46f 100644 --- a/generate.js +++ b/generate.js @@ -1,49 +1,74 @@ -const fs = require("fs"); - -/*const typeNames = { - "chroma-js": "chroma", - "discord/Dispatcher": "_Dispatcher", // "Dispatcher" may be reserved in some scenarios - "discord/components/common/index": "Components", - "discord/packages/flux": "Flux", - "highlight.js": "HighlightJS", - "highlight.js/lib/core": "HighlightJSCore", - "platform.js": "platformjs", - react: "React", - "simple-markdown": "SimpleMarkdown", - "uuid/v4": "UUIDv4" -};*/ +const fs = require("node:fs"); +const path = require("node:path"); +const ts = require("typescript"); const mappedTypes = { "discord/actions/ContextMenuActionCreators": "ContextMenuActionCreators", - "discord/Dispatcher": "_Dispatcher", // "Dispatcher" may be reserved in some scenarios + "discord/actions/UserSettingsModalActionCreators": "UserSettingsModalActionCreators", + "discord/components/common/Alerts": "Alerts", + "discord/components/common/BaseHeaderBar": "BaseHeaderBar", + "discord/components/common/FileUpload": "FileUpload", + "discord/components/common/FormSwitch.css": "FormSwitchCSS", + "discord/components/common/HeaderBar.css": "HeaderBarCSS", + "discord/components/common/HelpMessage.css": "HelpMessageCSS", "discord/components/common/index": "Components", - "discord/modules/guild_settings/IntegrationCard.css": "IntegrationCardCSS", + "discord/components/common/PanelButton": "PanelButton", + "discord/components/common/Scroller.css": "ScrollerCSS", + "discord/components/modals/ConfirmModal": "ConfirmModal", + "discord/Constants": "Constants", + "discord/Dispatcher": "_Dispatcher", // "Dispatcher" may be reserved in some scenarios + "discord/lib/BaseRecord": "BaseRecord", + "discord/lib/web/Storage": "Storage", + "discord/modules/build_overrides/web/BuildOverride.css": "BuildOverrideCSS", + "discord/modules/discovery/web/Discovery.css": "DiscoveryCSS", + "discord/modules/forums/web/Forums.css": "ForumsCSS", + "discord/modules/forums/web/Header.css": "ForumHeaderCSS", + "discord/modules/forums/web/SortMenu.css": "ForumSortMenuCSS", + "discord/modules/forums/web/Tag": "ForumTag", + "discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css": "GuildSettingsRoleEditCSS", + "discord/modules/guild_settings/web/AppCard.css": "AppCardCSS", + "discord/modules/guild_settings/web/AppCardItem.css": "AppCardItemCSS", + "discord/modules/guild_settings/web/SearchSection.css": "GuildSettingsSearchSectionCSS", "discord/modules/markup/MarkupUtils": "MarkupUtils", - "discord/modules/user_settings/web/openUserSettings": "OpenUserSettings", + "discord/modules/menus/web/Menu": "Menu", + "discord/modules/oauth2/index": "Oauth2", + "discord/modules/messages/web/Markup.css": "MarkupCSS", + "discord/modules/messages/web/Message.css": "MessageCSS", + "discord/modules/people/web/PeoplePage.css": "PeoplePageCSS", + "discord/modules/user_profile/web/BiteSizeActivity.css": "ByteSizeActivityCSS", "discord/packages/flux": "Flux", "discord/utils/ClipboardUtils": "ClipboardUtils", "discord/utils/HTTPUtils": "HTTPUtils", "discord/utils/NativeUtils": "NativeUtils", + "discord/styles/shared/Margins.css": "MarginsCSS", "discord/uikit/Flex": "Flex", - react: "React" + "chroma-js": "ChromaJS", + "dependency-graph": "DependencyGraph", + "highlight.js": "HighlightJS", + "highlight.js/lib/core": "HighlightJSCore", + lodash: "lodash", + murmurhash: "murmurhash", + "platform.js": "PlatformJS", + react: "React", + "uuid/v4": "UUID" }; const write = process.argv.includes("--write"); -/*function getPaths() { +function getPaths() { const paths = fs.readdirSync("src/mappings", { recursive: true }); const out = []; - for (const path of paths) { - if (!path.endsWith(".ts")) continue; - - out.push(path.replace(".ts", "").replaceAll("\\", "/")); + for (const filePath of paths) { + if (!filePath.endsWith(".ts")) continue; + if (path.basename(filePath).startsWith("_")) continue; + out.push(filePath.replace(".ts", "").replaceAll("\\", "/")); } return out.sort(); -}*/ +} -/*function generateImports() { +function generateImports() { let str = "// auto-generated\n"; for (const path of getPaths()) { @@ -55,7 +80,7 @@ const write = process.argv.includes("--write"); } else { console.log(str); } -}*/ +} function generateTypes() { const paths = Object.keys(mappedTypes).sort(); @@ -77,8 +102,7 @@ function generateTypes() { } str += "};\n\n"; - str += - "export declare function WebpackRequire(\n module: T\n): MappedModules[T];\n"; + str += "export declare function WebpackRequire(\n module: T\n): MappedModules[T];\n"; if (write) { fs.writeFileSync("src/types.ts", str); @@ -92,9 +116,39 @@ function generateDeclares(prefix) { for (const path of Object.keys(mappedTypes).sort()) { str += `declare module "${prefix}${path}" {\n`; - str += ` import { MappedModules } from "@moonlight-mod/mappings";\n`; - str += ` const _: MappedModules["${path}"];\n`; - str += ` export = _;\n`; + + let sourcePath = "./src/mappings/" + path + ".ts"; + if (!fs.existsSync(sourcePath)) sourcePath = "./src/mappings/" + path + "/index.ts"; + const program = ts.createProgram([sourcePath], { + target: ts.ScriptTarget.ES2022, + module: ts.ScriptTarget.ES2022, + noEmit: true + }); + const source = program.getSourceFile(sourcePath); + const typeChecker = program.getTypeChecker(); + const alias = source.statements.find((s) => ts.isTypeAliasDeclaration(s) && s.name.getText(source) === "Exports"); + const type = typeChecker.getTypeAtLocation(alias); + const properties = type.getProperties().map((p) => p.getName()); + + if (properties.some((s) => s === "__mappings_exportEquals")) { + str += ` import { MappedModules } from "@moonlight-mod/mappings";\n`; + str += ` const _: Omit;\n`; + str += ` export = _;\n`; + } else if (properties.length > 0) { + str += ` import { MappedModules } from "@moonlight-mod/mappings";\n`; + for (const name of properties) { + if (name === "default") { + str += ` const _default: MappedModules["${path}"]["default"];\n`; + str += ` export default _default;\n`; + } else { + // :( + if (name.includes("-")) continue; + + str += ` export const ${name}: MappedModules["${path}"]["${name}"];\n`; + } + } + } + str += `}\n\n`; } @@ -104,11 +158,9 @@ function generateDeclares(prefix) { const command = process.argv.length > 2 ? process.argv[2] : null; switch (command) { - // "do not use the imports argument that's for when we finish every type (imports file loads every single module to register them, right now it'd only register the ones with types and break 90% of it)" - // "it should probably just be removed tbh, since we aren't gonna type every module" - /*case "imports": + case "imports": generateImports(); - break;*/ + break; case "types": generateTypes(); @@ -119,6 +171,6 @@ switch (command) { break; default: - console.error(`Usage: node generate.js `); + console.error(`Usage: node generate.js `); break; } diff --git a/package.json b/package.json index 1afa7c1..ca542ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moonlight-mod/mappings", - "version": "1.0.11", + "version": "1.1.0", "license": "MIT", "repository": { "type": "git", @@ -22,7 +22,11 @@ "prepare": "npm run build" }, "dependencies": { + "@types/chroma-js": "^3.1.0", "@types/flux": "^3.1.14", + "@types/highlightjs": "^9.12.6", + "@types/lodash": "^4.17.14", + "@types/platform": "^1.3.6", "@types/react": "^18.3.10", "csstype": "^3.1.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0e67dd..ea92ffa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,9 +14,21 @@ importers: '@moonlight-mod/moonmap': specifier: ^1.0.0 version: 1.0.3 + '@types/chroma-js': + specifier: ^3.1.0 + version: 3.1.0 '@types/flux': specifier: ^3.1.14 version: 3.1.14 + '@types/highlightjs': + specifier: ^9.12.6 + version: 9.12.6 + '@types/lodash': + specifier: ^4.17.14 + version: 4.17.14 + '@types/platform': + specifier: ^1.3.6 + version: 1.3.6 '@types/react': specifier: ^18.3.10 version: 18.3.10 @@ -39,6 +51,9 @@ packages: '@moonlight-mod/moonmap@1.0.3': resolution: {integrity: sha512-G7pwvrcVDimc388IX6VZFzBXpbuyvqbJ+w9/v+MUIc8P7dADJXQ9YkBWvobtRc6eaBBl1FWUwTeU8oobbxLVag==} + '@types/chroma-js@3.1.0': + resolution: {integrity: sha512-Uwl3SOtUkbQ6Ye6ZYu4q4xdLGBzmY839sEHYtOT7i691neeyd+7fXWT5VIkcUSfNwIFrIjQutNYQn9h4q5HFvg==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -51,6 +66,15 @@ packages: '@types/flux@3.1.14': resolution: {integrity: sha512-WRXN0kQPCnqxN0/PgNgc7WBF6c8rbSHsEep3/qBLpsQ824RONdOmTs0TV7XhIW2GDNRAHO2CqCgAFLR5PChosw==} + '@types/highlightjs@9.12.6': + resolution: {integrity: sha512-Qfd1DUrwE851Hc3tExADJY4qY8yeZMt06Xw9AJm/UtpneepJS3MZY29c33BY0wP899veaaHD4gZzYiSuQm84Fg==} + + '@types/lodash@4.17.14': + resolution: {integrity: sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==} + + '@types/platform@1.3.6': + resolution: {integrity: sha512-ZmSaqHuvzv+jC232cFoz2QqPUkaj6EvMmCrWcx3WRr7xTPVFCMUOTcOq8m2d+Zw1iKRc1kDiaA+jtNrV0hkVew==} + '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} @@ -91,6 +115,8 @@ snapshots: '@moonlight-mod/moonmap@1.0.3': {} + '@types/chroma-js@3.1.0': {} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 @@ -104,6 +130,12 @@ snapshots: '@types/fbemitter': 2.0.35 '@types/react': 18.3.10 + '@types/highlightjs@9.12.6': {} + + '@types/lodash@4.17.14': {} + + '@types/platform@1.3.6': {} + '@types/prop-types@15.7.13': {} '@types/react@18.3.10': diff --git a/snippets/duplicates.js b/snippets/duplicates.js new file mode 100644 index 0000000..03e6726 --- /dev/null +++ b/snippets/duplicates.js @@ -0,0 +1,15 @@ +() => { + const ids = Object.values(moonlight.moonmap.modules); + const duplicates = ids.filter( + (id) => ids.filter((id2) => id2 === id).length > 1 + ); + const dedupedDuplicates = duplicates.filter( + (id, i) => duplicates.indexOf(id) === i + ); + for (const id of dedupedDuplicates) { + const using = Object.entries(moonlight.moonmap.modules) + .filter(([_, v]) => v === id) + .map(([k, _]) => k); + console.log(id, using); + } +}; diff --git a/src/mappings/chroma-js.ts b/src/mappings/chroma-js.ts index 4dd8ab5..7ceda3e 100644 --- a/src/mappings/chroma-js.ts +++ b/src/mappings/chroma-js.ts @@ -1,6 +1,8 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../registry"; +type Exports = typeof import("chroma-js"); +export default Exports; + register((moonmap) => { const name = "chroma-js"; moonmap.register({ diff --git a/src/mappings/classnames.ts b/src/mappings/classnames.ts index 934fe81..ade9a61 100644 --- a/src/mappings/classnames.ts +++ b/src/mappings/classnames.ts @@ -1,6 +1,20 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../registry"; +// copypasted types: https://github.com/JedWatson/classnames/blob/main/index.d.ts +export type Value = string | boolean | undefined | null; +export type Mapping = Record; +export interface ArgumentArray extends Array {} +export interface ReadonlyArgumentArray extends ReadonlyArray {} +export type Argument = Value | Mapping | ArgumentArray | ReadonlyArgumentArray; + +/** + * A simple JavaScript utility for conditionally joining classNames together. + */ +type classNames = (...args: ArgumentArray) => string; + +type Exports = classNames & { default: classNames }; +export default Exports; + register((moonmap) => { const name = "classnames"; moonmap.register({ diff --git a/src/mappings/dependency-graph.ts b/src/mappings/dependency-graph.ts new file mode 100644 index 0000000..5e8627a --- /dev/null +++ b/src/mappings/dependency-graph.ts @@ -0,0 +1,146 @@ +import { ModuleExportType } from "@moonlight-mod/moonmap"; +import register from "../registry"; + +export interface Options { + circular?: boolean; +} + +export declare class DepGraph { + /** + * Creates an instance of DepGraph with optional Options. + */ + constructor(opts?: Options); + + /** + * The number of nodes in the graph. + */ + size(): number; + + /** + * Add a node in the graph with optional data. If data is not given, name will be used as data. + * @param {string} name + * @param data + */ + addNode(name: string, data?: T): void; + + /** + * Remove a node from the graph. + * @param {string} name + */ + removeNode(name: string): void; + + /** + * Check if a node exists in the graph. + * @param {string} name + */ + hasNode(name: string): boolean; + + /** + * Get the data associated with a node (will throw an Error if the node does not exist). + * @param {string} name + */ + getNodeData(name: string): T; + + /** + * Set the data for an existing node (will throw an Error if the node does not exist). + * @param {string} name + * @param data + */ + setNodeData(name: string, data?: T): void; + + /** + * Add a dependency between two nodes (will throw an Error if one of the nodes does not exist). + * @param {string} from + * @param {string} to + */ + addDependency(from: string, to: string): void; + + /** + * Remove a dependency between two nodes. + * @param {string} from + * @param {string} to + */ + removeDependency(from: string, to: string): void; + + /** + * Return a clone of the dependency graph (If any custom data is attached + * to the nodes, it will only be shallow copied). + */ + clone(): DepGraph; + + /** + * Get an array containing the direct dependency nodes of the specified node. + * @param name + */ + directDependenciesOf(name: string): string[]; + + /** + * Get an array containing the nodes that directly depend on the specified node. + * @param name + */ + directDependantsOf(name: string): string[]; + + /** + * Alias of `directDependantsOf` + * + * @see directDependantsOf + * @param {string} name + */ + directDependentsOf(name: string): string[]; + + /** + * Get an array containing the nodes that the specified node depends on (transitively). If leavesOnly is true, only nodes that do not depend on any other nodes will be returned in the array. + * @param {string} name + * @param {boolean} leavesOnly + */ + dependenciesOf(name: string, leavesOnly?: boolean): string[]; + + /** + * Get an array containing the nodes that depend on the specified node (transitively). If leavesOnly is true, only nodes that do not have any dependants will be returned in the array. + * @param {string} name + * @param {boolean} leavesOnly + */ + dependantsOf(name: string, leavesOnly?: boolean): string[]; + + /** + * Alias of `dependantsOf` + * + * @see dependantsOf + * @param name + * @param leavesOnly + */ + dependentsOf(name: string, leavesOnly?: boolean): string[]; + + /** + * Get an array of nodes that have no dependants (i.e. nothing depends on them). + */ + entryNodes(): string[]; + + /** + * Construct the overall processing order for the dependency graph. If leavesOnly is true, only nodes that do not depend on any other nodes will be returned. + * @param {boolean} leavesOnly + */ + overallOrder(leavesOnly?: boolean): string[]; +} + +export declare class DepGraphCycleError extends Error { + cyclePath: string[]; +} + +type Exports = { + DepGraph: typeof DepGraph; +}; +export default Exports; + +register((moonmap) => { + const name = "dependency-graph"; + moonmap.register({ + name, + find: "DepGraph=", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/Constants.ts b/src/mappings/discord/Constants.ts index 5f4b16f..e12343f 100644 --- a/src/mappings/discord/Constants.ts +++ b/src/mappings/discord/Constants.ts @@ -1,6 +1,1849 @@ import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../registry"; +export enum ActivityFlags { + INSTANCE = 1 << 0, + JOIN = 1 << 1, + SYNC = 1 << 4, + PLAY = 1 << 5, + PARTY_PRIVACY_FRIENDS = 1 << 6, + PARTY_PRIVACY_VOICE_CHANNEL = 1 << 7, + EMBEDDED = 1 << 8 +} + +export enum ActivityTypes { + PLAYING, + STREAMING, + LISTENING, + WATCHING, + CUSTOM_STATUS, + COMPETING, + HANG_STATUS +} + +export enum AnalyticsLocations { + ACTIVITY_PANEL = "Activity Panel", + ACTIVITY_RPC = "Activity RPC", + ACTIVITY_SHELF = "Activity Shelf", + ADD_FRIENDS_TO_DM = "Add Friends to DM", + APPLICATION_CONTEXT_MENU_PLAY = "Application Context Menu Play", + APPLICATION_CONTEXT_MENU_TOGGLE_INSTALL = "Application Context Menu Toggle Install", + APPLICATION_LIBRARY = "Application Library", + APPLICATION_LIBRARY_UPDATES = "Application Library Updates", + APPLICATION_STORE = "Application Store", + APPLICATION_STORE_HEADER = "Application Store Header", + APPLICATION_STORE_HERO = "Application Store Hero", + APPLICATION_STORE_LISTING_BACK_BUTTON = "Application Store Listing Back Button", + APPLICATION_STORE_LISTING_DETAILS = "Application Store Listing Details", + APPLICATION_STORE_PAYMENT_MODAL = "Application Store Purchase Modal", + APPLICATION_STORE_PREMIUM_CAROUSEL = "Application Store Premium Carousel", + APPLICATION_STORE_RELATED_CONTENT = "Application Store Related Content", + APPLICATION_STORE_TILE = "Application Store Tile", + APPLICATION_STORE_WARNING = "Application Store Warning", + APPLICATION_TEST_MODE_NOTICE = "Application Test Mode Notice", + APP_DIRECTORY_PROFILE = "App Directory Profile", + APP_STOREFRONT = "app storefront", + APP_SUBSCRIPTIONS_MANAGEMENT = "app subscriptions management", + BITE_SIZE_POPOUT = "Bite Size Popout", + BOT_PROFILE_POPOUT = "Bot Profile Popout", + CAROUSEL_PROMOTION_UNIT = "Carousel Promotion Unit", + CHANNEL_CALL = "Channel Call", + CHECKOUT_RECOVERY_NAGBAR = "Checkout Recovery Nagbar", + CLAN_ADOPT_IDENTITY_MODAL = "clan adopt identity modal", + CLAN_DISCOVERY_CARD = "clan discovery card", + CLAN_SETUP_MODAL = "clan setup modal", + CONNECTIONS_EMPTY_STATE = "Connections User Settings Empty State", + CONSOLE_LAN_DETECTION_ACTION_SHEET = "Console LAN Detection Action Sheet", + CONTEXT_MENU = "Context Menu", + CREATE_JOIN_GUILD_MODAL = "Create or Join Guild Modal", + DEEP_LINK = "Deep Link", + E2EE_USER_VERIFY_MODAL = "E2EE User Verify Modal", + EXTERNAL_INVITE_LINK_MODAL = "External Invite Link Modal", + FRIEND_ANNIVERSARIES_ACTION_BUTTON = "Friend Anniversaries Action Button", + FRIEND_ANNIVERSARIES_ACTION_BUTTON_COACHMARK = "Friend Anniversaries Action Button Coachmark", + FRIEND_ANNIVERSARIES_CHAT = "Friend Anniversaries Chat", + GAME_MODAL = "Game Modal", + GAME_POPOUT = "Game Popout", + GO_LIVE_MODAL = "Go Live Modal", + GUILD_CHANNEL_LIST = "Guild Channel List", + GUILD_CREATE_INVITE_SUGGESTION = "Guild Create Invite Suggestion", + GUILD_INTEGRATION_SETTINGS = "Guild Integration Settings", + HOME_BUTTON = "Home Button", + HOME_NAVIGATION = "Home Navigation", + HUB_PROGRESS = "Hub Progress", + INBOUND_PARTNER_PROMOTION_REDEMPTION_MODAL = "Inbound Partner Promotion Redemption Modal", + INTENT_DISCOVERY = "Intent Discovery", + INTERACTION_RESPONSE = "Interaction Response", + IN_APPLICATION_PURCHASE_FALLBACK = "In-Application Purchase - App", + IN_APPLICATION_PURCHASE_OVERLAY = "In-Application Purchase - Overlay", + LARGE_SERVER_INTENT_DISCOVERY = "Large Game Server Intent Discovery", + LOCKED_OVERLAY = "Locked Overlay", + MANAGE_ACCOUNTS_MODAL = "Manage Accounts Modal", + MESSAGE_EMBED = "Message Embed", + NITRO_BASIC_UPSELL = "Nitro Basic Upsell", + NOTIFICATION_CENTER = "Notification Center", + OVERLAY_NUDGE = "Overlay Nudge", + PARTNER_PROMOTIONS_CLAIM_MODAL = "Partner Promotions Claim Modal", + PROFILE_MODAL_MUTUALS = "Profile Modal Mutuals", + PROFILE_MODAL_RELATIONS = "Profile Modal Relations", + PROFILE_MODAL_TABS = "Profile Modal Tabs", + PROFILE_PANEL = "Profile Panel", + PROFILE_POPOUT = "Profile Popout", + PROMOTION_CARD = "Promotion Card", + QUICK_LAUNCHER = "Quick Launcher", + QUICK_SWITCHER = "Quick Switcher", + REGISTRATION = "Registration", + RELINK_UPSELL = "Relink Upsell", + REPEAT_GIFT_PURCHASE_BUTTON = "Repeat Gift Purchase Button", + ROLE_SUBSCRIPTIONS_TAB = "Role Subscriptions Tab", + ROLE_SUBSCRIPTION_GATED_CHANNEL = "Role Subscription Gated Channel", + SHARE_NEWS_MODAL = "Share News Modal", + SIMPLIFIED_USER_PROFILE = "Simplified User Profile", + STANDALONE_MANAGE_SUBSCRIPTIONS = "Standalone Manage Subscriptions", + STREAM = "Stream", + TRAY_CONTEXT_MENU = "Tray Context Menu", + UNCANCEL_WINBACK_MODAL = "Premium Uncancel Winback Modal", + UNLOCKED_OVERLAY = "Unlocked Overlay", + URI_SCHEME = "URI Scheme", + USER_ACTIVITY_ACTIONS = "User Activity Actions", + USER_SETTINGS = "User Settings", + VOICE_PANEL = "Voice Panel" +} + +export enum ChannelLayouts { + FULL_SCREEN = "full-screen", + MINIMUM = "minimum", + NORMAL = "normal", + NO_CHAT = "no-chat" +} + +export enum ChannelModes { + VIDEO = "video", + VOICE = "voice" +} + +export enum ChannelStreamTypes { + DIVIDER = "DIVIDER", + DIVIDER_NEW_MESSAGES = "DIVIDER_NEW_MESSAGES", + DIVIDER_TIME_STAMP = "DIVIDER_TIME_STAMP", + FORUM_POST_ACTION_BAR = "FORUM_POST_ACTION_BAR", + JUMP_TARGET = "JUMP_TARGET", + MESSAGE = "MESSAGE", + MESSAGE_GROUP = "MESSAGE_GROUP", + MESSAGE_GROUP_BLOCKED = "MESSAGE_GROUP_BLOCKED", + MESSAGE_GROUP_IGNORED = "MESSAGE_GROUP_IGNORED", + MESSAGE_GROUP_SPAMMER = "MESSAGE_GROUP_SPAMMER", + THREAD_STARTER_MESSAGE = "THREAD_STARTER_MESSAGE" +} + +export enum ChannelTypes { + GUILD_TEXT, + DM, + GUILD_VOICE, + GROUP_DM, + GUILD_CATEGORY, + GUILD_ANNOUNCEMENT, + GUILD_STORE, + ANNOUNCEMENT_THREAD = 10, + PUBLIC_THREAD, + PRIVATE_THREAD, + GUILD_STAGE_VOICE, + GUILD_DIRECTORY, + GUILD_FORUM, + GUILD_MEDIA, + LOBBY, + DM_SDK, + UNKNOWN = 10000 +} + +export enum ComponentActions { + BLUR_INPUT = "BLUR_INPUT", + BOTTOM_CHANNEL_SCREEN_DRAG_START = "BOTTOM_CHANNEL_SCREEN_DRAG_START", + CALL_ACCEPT = "CALL_ACCEPT", + CALL_DECLINE = "CALL_DECLINE", + CALL_START = "CALL_START", + CAROUSEL_NEXT = "CAROUSEL_NEXT", + CAROUSEL_PREV = "CAROUSEL_PREV", + CLEAR_TEXT = "CLEAR_TEXT", + CLOSE_GIF_PICKER = "CLOSE_GIF_PICKER", + CONNECTIONS_CALLBACK_ERROR = "CONNECTIONS_CALLBACK_ERROR", + CONTEXT_MENU_CLOSE = "CONTEXT_MENU_CLOSE", + DDR_ARROW_DOWN = "DDR_ARROW_DOWN", + DDR_ARROW_UP = "DDR_ARROW_UP", + EMPHASIZE_NOTICE = "EMPHASIZE_NOTICE", + EMPHASIZE_SLOWMODE_COOLDOWN = "EMPHASIZE_SLOWMODE_COOLDOWN", + FAVORITE_GIF = "FAVORITE_GIF", + FOCUS_ATTACHMENT_AREA = "FOCUS_ATTACHMENT_AREA", + FOCUS_CHANNEL_TEXT_AREA = "FOCUS_CHANNEL_TEXT_AREA", + FOCUS_CHAT_BUTTON = "FOCUS_CHAT_BUTTON", + FOCUS_COMPOSER_TITLE = "FOCUS_COMPOSER_TITLE", + FOCUS_FRIEND_SEARCH = "FOCUS_FRIEND_SEARCH", + FOCUS_MESSAGES = "FOCUS_MESSAGES", + FOCUS_SEARCH = "FOCUS_SEARCH", + GLOBAL_CLIPBOARD_PASTE = "GLOBAL_CLIPBOARD_PASTE", + HIDE_APP_LAUNCHER_BUTTON_APP_INSTALLED_EDUCATION = "HIDE_APP_LAUNCHER_BUTTON_APP_INSTALLED_EDUCATION", + HIDE_CHANNEL_DETAILS = "HIDE_CHANNEL_DETAILS", + IFRAME_MOUNT = "IFRAME_MOUNT", + IFRAME_UNMOUNT = "IFRAME_UNMOUNT", + INSERT_TEXT = "INSERT_TEXT", + LAST_NITRO_HOST_LEFT = "LAST_NITRO_HOST_LEFT", + LAUNCH_PAD_HIDE = "LAUNCH_PAD_HIDE", + LAUNCH_PAD_SHOW = "LAUNCH_PAD_SHOW", + LAYER_POP_COMPLETE = "LAYER_POP_COMPLETE", + LAYER_POP_ESCAPE_KEY = "LAYER_POP_ESCAPE_KEY", + LAYER_POP_START = "LAYER_POP_START", + MANUAL_IFRAME_RESIZING = "MANUAL_IFRAME_RESIZING", + MARK_TOP_INBOX_CHANNEL_READ = "MARK_TOP_INBOX_CHANNEL_READ", + MEDIA_KEYBOARD_GIFT_SELECTED = "MEDIA_KEYBOARD_GIFT_SELECTED", + MEDIA_MODAL_CLOSE = "MEDIA_MODAL_CLOSE", + MODAL_CAROUSEL_NEXT = "MODAL_CAROUSEL_NEXT", + MODAL_CAROUSEL_PREV = "MODAL_CAROUSEL_PREV", + MODAL_CLOSE = "MODAL_CLOSE", + MODAL_SUBMIT = "MODAL_SUBMIT", + NAVIGATOR_READY = "NAVIGATOR_READY", + OPEN_APP_LAUNCHER = "OPEN_APP_LAUNCHER", + OPEN_EMBEDDED_ACTIVITY = "OPEN_EMBEDDED_ACTIVITY", + OPEN_EXPRESSION_PICKER = "OPEN_EXPRESSION_PICKER", + OPEN_THREAD_NOTIFICATION_SETTINGS = "OPEN_THREAD_NOTIFICATION_SETTINGS", + OVERLAY_V3_SHOW_WIDGETS = "OVERLAY_V3_SHOW_WIDGETS", + PERFORM_SEARCH = "PERFORM_SEARCH", + POPOUT_CLOSE = "POPOUT_CLOSE", + POPOUT_HIDE = "POPOUT_HIDE", + POPOUT_SHOW = "POPOUT_SHOW", + PREMIUM_SUBSCRIPTION_CREATED = "PREMIUM_SUBSCRIPTION_CREATED", + PREPEND_TEXT = "PREPEND_TEXT", + QUICKSWITCHER_RESULT_FOCUS = "QUICKSWITCHER_RESULT_FOCUS", + RELEASE_ACTIVITY_WEB_VIEW = "RELEASE_ACTIVITY_WEB_VIEW", + REMEASURE_TARGET = "REMEASURE_TARGET", + SCROLLTO_CHANNEL = "SCROLLTO_CHANNEL", + SCROLLTO_PRESENT = "SCROLLTO_PRESENT", + SCROLL_PAGE_DOWN = "SCROLL_PAGE_DOWN", + SCROLL_PAGE_UP = "SCROLL_PAGE_UP", + SEARCH_RESULTS_CLOSE = "SEARCH_RESULTS_CLOSE", + SEARCH_TABS_RESET = "SEARCH_TABS_RESET", + SELECT_ACTIVITY = "SELECT_ACTIVITY", + SET_SEARCH_QUERY = "SET_SEARCH_QUERY", + SHAKE_APP = "SHAKE_APP", + SHOW_ACTIVITIES_CHANNEL_SELECTOR = "SHOW_ACTIVITIES_CHANNEL_SELECTOR", + SHOW_ACTIVITY_DETAILS = "SHOW_ACTIVITY_DETAILS", + SHOW_APP_LAUNCHER_BUTTON_APP_INSTALLED_EDUCATION = "SHOW_APP_LAUNCHER_BUTTON_APP_INSTALLED_EDUCATION", + SHOW_CHANNEL_DETAILS = "SHOW_CHANNEL_DETAILS", + SHOW_OAUTH2_MODAL = "SHOW_OAUTH2_MODAL", + SHOW_TEXT_IN_VOICE_POPOUT_COMING_SOON_TIP = "SHOW_TEXT_IN_VOICE_POPOUT_COMING_SOON_TIP", + TEXTAREA_BLUR = "TEXTAREA_BLUR", + TEXTAREA_FOCUS = "TEXTAREA_FOCUS", + TOGGLE_CALL_CONTROL_DRAWER = "TOGGLE_CALL_CONTROL_DRAWER", + TOGGLE_CHANNEL_PINS = "TOGGLE_CHANNEL_PINS", + TOGGLE_DM_CREATE = "TOGGLE_DM_CREATE", + TOGGLE_EMOJI_POPOUT = "TOGGLE_EMOJI_POPOUT", + TOGGLE_FOR_LATER = "TOGGLE_FOR_LATER", + TOGGLE_GIF_PICKER = "TOGGLE_GIF_PICKER", + TOGGLE_GUILD_FEED_FEATURED_ITEMS = "TOGGLE_GUILD_FEED_FEATURED_ITEMS", + TOGGLE_INBOX = "TOGGLE_INBOX", + TOGGLE_SOUNDBOARD = "TOGGLE_SOUNDBOARD", + TOGGLE_STICKER_PICKER = "TOGGLE_STICKER_PICKER", + UPLOAD_FILE = "UPLOAD_FILE", + VIDEO_EMBED_PLAYBACK_STARTED = "VIDEO_EMBED_PLAYBACK_STARTED", + VOICE_MESSAGE_BUTTON_PRESSED = "VOICE_MESSAGE_RECORDING_PRESSED", + VOICE_MESSAGE_PLAYBACK_STARTED = "VOICE_MESSAGE_PLAYBACK_STARTED", + VOICE_PANEL_CLOSE = "VOICE_PANEL_CLOSE", + VOICE_PANEL_OPEN = "VOICE_PANEL_OPEN", + VOICE_PANEL_PIP_CONTENT_READY = "VOICE_PANEL_PIP_CONTENT_READY", + VOICE_PANEL_TIV_CLOSE = "VOICE_PANEL_TIV_CLOSE", + WAVE_EMPHASIZE = "WAVE_EMPHASIZE" +} + +type DEFAULT_ROLE_COLOR = 10070709; + +export type Endpoints = { + USER: (userId: U) => `/users/${U}`; + USER_RELAUIONSHIPS: (userId?: U) => `/users/${U}/relationships`; + USER_RELAUIONSHIP: (userId: U) => `/users/@me/relationships/${U}`; + USER_BULK_RELAUIONSHIPS: "/users/@me/relationships/bulk"; + USER_PROFILE: (userId: U) => `/users/${U}/profile`; + USER_GUILD_PROFILE: (guildId: G, userId: U) => `/users/${U}/profile`; + USER_CHANNELS: "/users/@me/channels"; + DM_CHANNEL: (channelId: C) => `/users/@me/dms/${C}`; + USER_SETTINGS_PROTO: (type: T) => `/users/@me/settings-proto/${T}`; + USER_ACTIVITY_METADATA: ( + userId: U, + session: S, + appId?: A + ) => `/users/${U}/sessions/${S}/activities/${A}/metadata`; + USER_ACTIVITY_JOIN: ( + userId: U, + session: S, + appId: A + ) => `/users/${U}/sessions/${S}/activities/${A}/1`; + USER_ACTIVITY_STATISTICS: "/users/@me/activities/statistics/applications"; + APPLICATION_ACTIVITY_STATISTICS: (appId: A) => `/activities/statistics/applications/${A}`; + ACTIVITIES: "/activities"; + NETWORKING_TOKEN: "/networking/token"; + USER_GAMES_NOTIFICATIONS: "/users/@me/settings/game-notifications"; + USER_GAMES_NOTIFICATIONS_OVERRIDES: "/users/@me/settings/game-notifications/overrides"; + UNVERIFIED_APPLICATIONS: "/unverified-applications"; + UNVERIFIED_APPLICATIONS_ICONS: "/unverified-applications/icons"; + GUILD_FEATURE_ACK: ( + guildId: G, + ack: A, + type: T + ) => `/guilds/${G}/ack/${A}/${T}`; + USER_NON_CHANNEL_ACK: (ack: A, type: T) => `/users/@me/${T}/${A}/ack`; + BULK_ACK: "/read-states/ack-bulk"; + DM_SETTINGS_UPSELL_ACK: (guildId: G) => `/users/@me/guilds/${G}/member/ack-dm-upsell-settings`; + GUILD_CHANNELS: (guildId: G) => `/guilds/${G}/channels`; + GUILD_MEMBERS: (guildId: G) => `/guilds/${G}/members`; + GUILD_MEMBER: (guildId: G, userId: U) => `/guilds/${G}/members/${U}`; + GUILD_MEMBER_NICK: (guildId: G, userId: U) => `/guilds/${G}/members/${U}/nick`; + GUILD_MEMBER_AVATAR: ( + guildId: G, + userId: U, + avatar: A, + extension: E + ) => `/guilds/${G}/users/${U}/avatars/${A}.${E}`; + SET_GUILD_MEMBER: (guildId: G) => `/guilds/${G}/members/@me`; + GUILD_JOIN: (guildId: G) => `/guilds/${G}/members/@me`; + GUILD_LEAVE: (guildId: G) => `/users/@me/guilds/${G}`; + GUILD_INTEGRATIONS: (guildId: G) => `/guilds/${G}/integrations`; + GUILD_INTEGRATION: ( + guildId: G, + integration: I + ) => `/guilds/${G}/integrations/${I}`; + GUILD_INTEGRATION_SYNC: ( + guildId: G, + integration: I + ) => `/guilds/${G}/integrations/${I}/sync`; + GUILD_MIGRATE_COMMAND_SCOPE: (guildId: G) => `/guilds/${G}/migrate-comand-scope`; + GUILD_BANS_SEARCH: (guildId: G) => `/guilds/${G}/bans/search`; + GUILD_BANS: (guildId: G) => `/guilds/${G}/bans`; + GUILD_BAN: (guildId: G, userId: U) => `/guilds/${G}/bans/${U}`; + GUILD_ROLES: (guildId: G) => `/guilds/${G}/roles`; + GUILD_ROLE_MEMBER_COUNTS: (guildId: G) => `/guilds/${G}/roles/member-counts`; + GUILD_ROLE_CONNECTIONS_CONFIGURATIONS: ( + guildId: G + ) => `/guilds/${G}/roles/connections-configurations`; + GUILD_ROLE: (guildId: G, roleId: R) => `/guilds/${G}/roles/${R}`; + GUILD_ROLE_MEMBERS: (guildId: G, roleId: R) => `/guilds/${G}/roles/${R}/members`; + GUILD_ROLE_CONNECTIONS_ELIGIBILITY: ( + guildId: G, + roleId: R + ) => `/guilds/${G}/roles/${R}/connections/eligibility`; + GUILD_ROLE_CONNECTIONS_ASSIGN: ( + guildId: G, + roleId: R + ) => `/guilds/${G}/roles/${R}/connections/assign`; + GUILD_ROLE_CONNECTIONS_UNASSIGN: ( + guildId: G, + roleId: R + ) => `/guilds/${G}/roles/${R}/connections/unassign`; + GUILD_ONBOARDING: (guildId: G) => `/guilds/${G}/onboarding`; + GUILD_ONBOARDING_PROMPT: ( + guildId: G, + prompt: P + ) => `/guilds/${G}/onboarding-prompts/${P}`; + GUILD_ONBOARDING_RESPONSES: (guildId: G) => `/guilds/${G}/onboarding-responses`; + ROLE_ICON: (roleId: R, icon: I) => `/roles/${R}/icons/${I}.png`; + GUILD_INSTANT_INVITES: (guildId: G) => `/guilds/${G}/invites`; + GUILD_WIDGET: (guildId: G) => `/guilds/${G}/widget`; + GUILD_VANITY_URL: (guildId: G) => `/guilds/${G}/vanity-url`; + GUILD_MFA: (guildId: G) => `/guilds/${G}/mfa`; + GUILD_PRUNE: (guildId: G) => `/guilds/${G}/prune`; + GUILD_ICON: ( + guildId: G, + icon: I, + extension?: E + ) => `/guilds/${G}/icons/${I}.${E}`; + GUILD_TEMPLATE_ICON: ( + guildId: G, + icon: I, + extension?: E + ) => `/templates/${G}/icons/${I}.${E}`; + GUILD_DISCOVERY_CHECKLIST: (guildId: G) => `/guilds/${G}/discovery-checklist`; + GUILD_DISCOVERY_REQUIREMENTS: (guildId: G) => `/guilds/${G}/discovery-requirements`; + GUILD_EMOJIS: (guildId: G) => `/guilds/${G}/emojis`; + GUILD_EMOJI: (guildId: G, emojiId: E) => `/guilds/${G}/emojis/${E}`; + GUILD_AUDIT_LOG: (guildId: G) => `/guilds/${G}/audit-logs`; + GUILD_ANALYTICS_OVERVIEW: (guildId: G) => `/guilds/${G}/analytics/overview`; + GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW: (guildId: G) => `/guilds/${G}/analytics/engagement/overview`; + GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW: ( + guildId: G + ) => `/guilds/${G}/analytics/growth-activation/overview`; + GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION: ( + guildId: G + ) => `/guilds/${G}/analytics/growth-activation/retention`; + GUILD_TOP_GAMES: (guildId: G) => `/guilds/${G}/top-games`; + GUILD_TOP_READ_CHANNELS: (guildId: G) => `/guilds/${G}/top-read-channels`; + EMOJI: (emojiId: I, extension: E) => `/emojis/${I}.${E}`; + EMOJI_GUILD_DATA: (emojiId: E) => `/emojis/${E}/guild`; + EMOJI_SOURCE_DATA: (emojiId: E) => `/emojis/${E}/source`; + TOP_EMOJIS_FOR_GUILD: (guildId: G) => `/guilds/${G}/top-emojis`; + GUILD_SPLASH: (guildId: G, splash: S) => `/guilds/${G}/splashes/${S}.jpg`; + GUILD_DISCOVERY_SPLASH: ( + guildId: G, + splash: S + ) => `/guilds/${G}/discovery-splashes/${S}.jpg`; + GUILD_BANNER: ( + guildId: G, + banner: B, + extension: E + ) => `/guilds/${G}/icons/${B}.${E}`; + GUILD_HOME_SETTINGS: (guildId: G) => `/guilds/${G}/new-member-welcome`; + RESOURCE_CHANNEL: (guildId: G, id: I) => `/guilds/${G}/resource-channels/${I}`; + NEW_MEMBER_ACTION: (guildId: G, id: I) => `/guilds/${G}/new-member-actions/${I}`; + GUILD_RESOURCE_CHANNELS_ICON: ( + guildId: G, + icon: I, + extension?: E + ) => `/guilds/${G}/avatars/${I}.${E}`; + GUILD_NEW_MEMBER_ACTIONS_ICON: ( + guildId: G, + icon: I, + extension?: E + ) => `/guilds/${G}/avatars/${I}.${E}`; + GUILD_MEMBER_ACTIONS: (guildId: G) => `/guilds/${G}/new-member-actions`; + GUILD_MEMBER_ACTION_UPDATE: ( + guildId: G, + action: A + ) => `/guilds/${G}/new-member-actions/${A}`; + GUILD_HOME_HEADER: ( + guildId: G, + header: H + ) => `/guilds/${G}/home-headers/${H}.jpg`; + GUILD_WELCOME_SCREEN: (guildId: G) => `/guilds/${G}/welcome-screen`; + GUILD_MEMBER_VERIFICATION: (guildId: G) => `/guilds/${G}/member-verification`; + GUILD_JOIN_REQUESTS_BY_ID: (id: I) => `/join-requests/${I}`; + GUILD_JOIN_REQUESTS: (guildId: G) => `/guilds/${G}/requests`; + USER_JOIN_REQUEST_GUILDS: "/users/@me/join-request-guilds"; + GUILD_MEMBER_REQUEST_TO_JOIN: (guildId: G) => `/guilds/${G}/requests/@me`; + GUILD_MEMBER_JOIN_REQUEST_COOLDOWN: (guildId: G) => `/guilds/${G}/requests/@me/cooldown`; + GUILD_JOIN_REQUEST: (guildId: G, id: I) => `/guilds/${G}/requests/${I}`; + GUILD_JOIN_REQUEST_ID: (guildId: G, id: I) => `/guilds/${G}/requests/id/${I}`; + GUILD_JOIN_REQUEST_ACK: (guildId: G, id: I) => `/guilds/${G}/requests/${I}/ack`; + GUILD_JOIN_REQUEST_INTERVIEW: (id: I) => `/join-requests/${I}/interview`; + GUILDS: "/guilds"; + GUILD: (guildId: G) => `/guilds/${G}`; + GUILD_BASIC: (guildId: G) => `/guilds/${G}/basic`; + GUILD_PINCODE: (guildId: G) => `/guilds/${G}/pincode`; + GUILD_DELETE: (guildId: G) => `/guilds/${G}/delete`; + CHANNELS: "/channels"; + CHANNEL: (channelId: C) => `/channels/${C}`; + THREAD_MEMBER: ( + channelId: C, + userId?: U + ) => `/channels/${C}/thread-members/${U}`; + THREAD_MEMBER_SETTINGS: (channelId: C) => `/channels/${C}/thread-members/@me/settings`; + ALL_ARCHIVED_THREADS: ( + channelId: C, + type: T + ) => `/channels/${C}/threads/archived/${T}`; + MY_ARCHIVED_THREADS: (channelId: C) => `/channels/${C}/users/@me/threads/archived/private`; + THREAD_SEARCH: (channelId: C) => `/channels/${C}/threads/search`; + FORUM_POSTS: (channelId: C) => `/channels/${C}/post-data`; + VOICE_CHANNEL_NOTIFICATIONS: (channelId: C) => `/channels/${C}/voice-push`; + PARTNER_REQUIREMENTS: (id: I) => `/partners/${I}/requirements`; + AVATAR: ( + userId: U, + avatar: A, + extension?: E + ) => `/users/${U}/avatars/${A}.${E}`; + USER_BANNER: ( + userId: U, + banner: B, + extension: E + ) => `/users/${U}/banners/${B}.${E}`; + AVATAR_DECORATION_PRESETS:

( + preset: P, + extension?: E + ) => `/avatar-decoration-presets/${P}.${E}`; + USER_PROFILE_EFFECTS: "/user-profile-effects"; + COLLECTIBLES_CATEGORIES: "/collectibles-categories"; + COLLECTIBLES_CLAIM: "/users/@me/claim-premium-collectibles-product"; + COLLECTIBLES_PURCHASES: "/users/@me/collectibles-purchases"; + COLLECTIBLES_PRODUCTS: (id: I) => `/collectibles-products/${I}`; + COLLECTIBLES_VALID_GIFT_RECIPIENT: "/users/@me/valid-collectibles-gift-recipient"; + COLLECTIBLES_MARKETING: "/users/@me/collectibles-marketing"; + COLLECTIBLES_SHOP_HOME: "/collectibles-shop-home"; + CONSUMABLE_FETCH_PRICE: (id: I) => `/store/consumable/pricing/${I}`; + CONSUME_HD_STREAMING_POTION: "/users/@me/consumable/hd-streaming"; + FETCH_HD_STREAMING_ENTITLEMENT: "/users/@me/consumable/hd-streaming"; + CONSUME_MESSAGE_CONFETTI_POTION: "/users/@me/consumable/confetti"; + FETCH_MESSAGE_CONFETTI_ENTITLEMENT: "/users/@me/consumable/confetti"; + GUILD_MEMBER_BANNER: ( + guildId: G, + userId: U, + banner: B, + extension?: E + ) => `/guilds/${G}/users/${U}/banners/${B}.${E}`; + MESSAGES: (channelId: C) => `/channels/${C}/messages`; + MESSAGES_GREET: (channelId: C) => `/channels/${C}/greet`; + MESSAGE: (channelId: C, messageId: M) => `/channels/${C}/messages/${M}`; + MESSAGE_ACK: (channelId: C, messageId: M) => `/channels/${C}/messages/${M}/ack`; + MESSAGE_CREATE_ATTACHMENT_UPLOAD: (channelId: C) => `/channels/${C}/attachments`; + UPDATE_VOICE_CHANNEL_STATUS: (channelId: C) => `/channels/${C}/voice-status`; + MESSAGE_DELETE_UPLOAD: (id: I) => `/attachments/${I}`; + MESSAGE_CROSSPOST: ( + channelId: C, + messageId: M + ) => `/channels/${C}/messages/${M}/crosspost`; + MESSAGE_LOG_PRIVATE_CHANNELS: "/messages-log/private-channels/get"; + MESSAGE_LOG_GUILD_CHANNELS: "/messages-log/guild-channels/get"; + BACKGROUND_SYNC: "/users/@me/background-sync"; + MESSAGE_PREVIEWS: "/channels/preload-messages"; + GUILD_FEED_MESSAGE_REMOVE: ( + channelId: C, + messageId: M + ) => `/channels/${C}/messages/${M}/hide-guild-feed`; + GUILD_FEED_MESSAGE_SET_PREFERENCE: (guildId: G) => `/guilds/${G}/guild-feed/preference`; + GUILD_FEED_FEATURE_ITEM: (guildId: G) => `/guilds/${G}/guild-feed/feature`; + GUILD_FEED_MARK_SEEN: (guildId: G) => `/guilds/${G}/guild-feed/mark-seen`; + PINS_ACK: (channelId: C) => `/channels/${C}/pins/ack`; + PINS: (channelId: C) => `/channels/${C}/pins`; + PIN: (channelId: C, messageId: M) => `/channels/${C}/pins/${M}`; + INSTANT_INVITES: (channelId: C) => `/channels/${C}/invites`; + TYPING: (channelId: C) => `/channels/${C}/typing`; + CHANNEL_PERMISSIONS_OVERWRITE: ( + channelId: C, + permission: P + ) => `/channels/${C}/permissions/${P}`; + CHANNEL_RECIPIENTS: (channelId: C) => `/channels/${C}/recipients`; + CHANNEL_RECIPIENT: (channelId: C, userId: U) => `/channels/${C}/recipients/${U}`; + CHANNEL_RECIPIENT_ME: (channelId: C) => `/channels/${C}/recipients/@me`; + CHANNEL_RECIPIENT_REJECT_BATCH: () => "/channels/recipients/@me/batch-reject"; + CHANNEL_ICON: (channelId: C, icon: I) => `/channels/${C}/icons/${I}.jpg`; + CHANNEL_CONVERT: (channelId: C) => `/channels/${C}/convert`; + CHANNEL_ACK: (channelId: C) => `/channels/${C}/messages/ack`; + CHANNEL_STORE_LISTING: (channelId: C) => `/channels/${C}/store-listing`; + CHANNEL_STORE_LISTING_SKU: ( + channelId: C, + skuId: S + ) => `/channels/${C}/store-listings/${S}`; + CHANNEL_ENTITLEMENT_GRANT: (channelId: C) => `/channels/${C}/store-listing/entitlement-grant`; + CHANNEL_FOLLOWERS: (channelId: C) => `/channels/${C}/followers`; + CHANNEL_FOLLOWER_STATS: (channelId: C) => `/channels/${C}/follower-stats`; + CHANNEL_FOLLOWER_MESSAGE_STATS: (channelId: C) => `/channels/${C}/follower-message-stats`; + CHANNEL_INTEGRATIONS: (channelId: C) => `/channels/${C}/integrations`; + CHANNEL_INTEGRATION: ( + channelId: C, + integration: I + ) => `/channels/${C}/integrations/${I}`; + CHANNEL_SAFETY_WARNINGS_ACK: (channelId: C) => `/channels/${C}/safety-warnings/ack`; + CHANNEL_BLOCKED_USER_WARNING_ACK: (channelId: C) => `/channels/${C}/blocked-user-warning-dismissal`; + FORUM_TAGS: (channelId: C) => `/channels/${C}/tags`; + FORUM_TAG: (channelId: C, tag: T) => `/channels/${C}/tags/${T}`; + FRIEND_FINDER: "/friend-finder/find-friends"; + FRIEND_SUGGESTIONS: "/friend-suggestions"; + FRIEND_SUGGESTION: (id: I) => `/friend-suggestions/${I}`; + TUTORIAL_INDICATORS: "/tutorial/indicators"; + TUTORIAL_INDICATORS_SUPPRESS: "/tutorial/indicators/suppress"; + TUTORIAL_INDICATOR: (id: I) => `/tutorial/indicators/${I}`; + USERS: "/users"; + ME: "/users/@me"; + GRAVITY_ATTACHMENTS: "/users/@me/gravity-attachments"; + GRAVITY_ATTACHMENTS_UPLOAD: "/users/@me/gravity-attachments-upload"; + GRAVITY_ITEMS_DEHYDRATED: "/users/@me/gravity-icymi"; + GRAVITY_ITEMS_DEHYDRATED_LEGACY: "/users/@me/gravity-icymi-legacy"; + GRAVITY_RECOMMENDED_GUILDS: "/gravity-recommended-guilds"; + GRAVITY_ITEMS_NEGATIVE: "/users/@me/gravity-icymi-negative"; + GRAVITY_ITEMS_HYDRATE: "/gravity-content"; + GRAVITY_CUSTOM_GUILD_SCORES: "/gravity-custom-guild-score"; + GRAVITY_CUSTOM_SCORES: "/gravity-custom-channel-scores"; + GRAVITY_JOIN_GUILD: "/guilds/gravity-join"; + GRAVITY_TOPIC_GUILDS: "/gravity-topic-guilds"; + POMELO_SUGGESTIONS: "/users/@me/pomelo-suggestions"; + POMELO_SUGGESTIONS_UNAUTHED: "/unique-username/username-suggestions-unauthed"; + POMELO_ATTEMPT: "/users/@me/pomelo-attempt"; + POMELO_ATTEMPT_UNAUTHED: "/unique-username/username-attempt-unauthed"; + POMELO_CREATE: "/users/@me/pomelo"; + DELETE_ACCOUNT: "/users/@me/delete"; + DISABLE_ACCOUNT: "/users/@me/disable"; + DEVICES: "/users/@me/devices"; + DEVICES_SYNC_TOKEN: "/users/@me/devices/sync-token"; + DEVICES_SYNC: "/users/@me/devices/sync"; + SETTINGS: "/users/@me/settings"; + SETTINGS_CONSENT: "/users/@me/consent"; + PHONE: "/users/@me/phone"; + PHONE_VERIFY_NO_PASSWORD: "/users/@me/phone/verify"; + PHONE_REVERIFY: "/users/@me/phone/reverify"; + FRIEND_INVITES: "/users/@me/invites"; + VERIFY_PHONE: "/phone-verifications/verify"; + VERIFY_PHONE_FOR_TICKET: "/phone-verifications/validate-support-ticket"; + RESEND_PHONE: "/phone-verifications/resend"; + CONNECTIONS: "/users/@me/connections"; + CONNECTIONS_AUTHORIZE: (id: I) => `/connections/${I}/authorize`; + CONNECTIONS_SESSION_HANDOFF: (id: I) => `/connections/${I}/callback/session-handoff`; + CONNECTIONS_CALLBACK: (id: I) => `/connections/${I}/callback`; + CONNECTION: (connection: C, id: I) => `/users/@me/connections/${C}/${I}`; + CONNECTION_REFRESH: ( + connection: C, + id: I + ) => `/users/@me/connections/${C}/${I}/refresh`; + CONNECTION_SYNC_CONTACTS: "/users/@me/connections/contacts/@me/external-friend-list-entries"; + CONNECTION_ACCESS_TOKEN: ( + connection: C, + id: I + ) => `/users/@me/connections/${C}/${I}/access-token`; + CONNECTIONS_LINK_DISPATCH_AUTH_CALLBACK: (id: I) => `/connections/${I}/link-dispatch-auth-callback`; + XBOX_HANDOFF: "/consoles/xbox-handoff"; + NOTES: "/users/@me/notes"; + NOTE: (id: I) => `/users/@me/notes/${I}`; + MENTIONS: "/users/@me/mentions"; + MENTIONS_MESSAGE_ID: (id: I) => `/users/@me/mentions/${I}`; + CAPTCHA: "/users/@me/captcha/verify"; + CAPTCHA_TEST: "/captcha/decider"; + AGE_ASSURANCE_TEST: "/age-verification/test"; + EXPERIMENTS: "/experiments"; + LOGIN: "/auth/login"; + LOGIN_MFA: (id: I) => `/auth/mfa/${I}`; + LOGIN_SMS_SEND: "/auth/mfa/sms/send"; + REMOTE_AUTH_INITIALIZE: "/users/@me/remote-auth"; + REMOTE_AUTH_CANCEL: "/users/@me/remote-auth/cancel"; + REMOTE_AUTH_LOGIN: "/users/@me/remote-auth/login"; + REMOTE_AUTH_FINISH: "/users/@me/remote-auth/finish"; + LOGOUT: "/auth/logout"; + REGISTER: "/auth/register"; + REGISTER_PHONE: "/auth/register/phone"; + MFA_WEBAUTHN_CREDENTIALS: "/users/@me/mfa/webauthn/credentials"; + WEBAUTHN_CONDITIONAL_UI_CHALLENGE: "/auth/conditional/start"; + WEBAUTHN_CONDITIONAL_UI_LOGIN: "/auth/conditional/finish"; + WEBAUTHN_PASSWORDLESS_CHALLENGE: "/auth/passwordless/start"; + MFA_WEBAUTHN_CREDENTIAL: (id: I) => `/users/@me/mfa/webauthn/credentials/${I}`; + INVITE: (id: I) => `/invites/${I}`; + UNRESOLVED_GUILD_TEMPLATE: (id: I) => `/guilds/templates/${I}`; + GUILD_TEMPLATES: (guildId: G) => `/guilds/${G}/templates`; + GUILD_TEMPLATE: (guildId: G, templateId: T) => `/guilds/${G}/templates/${T}`; + TRACK: "/science"; + METRICS: "/metrics"; + METRICS_V2: "/metrics/v2"; + SSO: "/sso"; + SSO_TOKEN: "/sso-token"; + VERIFY: "/auth/verify"; + AUTHORIZE_IP: "/auth/authorize-ip"; + AUTHORIZE_PAYMENT: "/billing/verify-purchase-request"; + VERIFY_RESEND: "/auth/verify/resend"; + FORGOT_PASSWORD: "/auth/forgot"; + RESET_PASSWORD: "/auth/reset"; + REGIONS: (guildId?: G) => G extends string ? `/guilds/${G}/regions` : "/voice/regions"; + DEBUG_LOG: (id: I, id2: II) => `/debug-logs/${I}/${II}`; + DEBUG_LOGS: (id: I) => `/debug-logs/multi/${I}`; + REPORT_V2: "/reports"; + STAGE_REPORT: ( + channelId: C, + messageId: M + ) => `/reports/channels/${C}/messages/${M}`; + REPORT_OPTIONS: "/report/options"; + INTEGRATIONS: "/integrations"; + INTEGRATION_JOIN: (id: I) => `/integrations/${I}/join`; + INTEGRATION_SEARCH: (id: I) => `/integrations/${I}/search`; + INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS: "/users/@me/guilds/integration-application-ids"; + USER_GUILD_SETTINGS_BULK: "/users/@me/guilds/settings"; + USER_GUILD_SETTINGS: (id: I) => `/users/@me/guilds/${I}/settings`; + APPLICATIONS_DETECTABLE: "/applications/detectable"; + APPLICATIONS_GAMES_SUPPLEMENTAL: "/applications/games-supplemental"; + APPLICATION_ICON: (appId: A, icon: I) => `/applications/${A}/app-icons/${I}.png`; + APPLICATION_RPC: (id: I) => `/oauth2/applications/${I}/rpc`; + APPLICATION_ASSETS: (id: I) => `/oauth2/applications/${I}/assets`; + APPLICATION_EXTERNAL_ASSETS: (id: I) => `/applications/${I}/external-assets`; + OWNED_APPLICATION_BRANCHES: (id: I) => `/applications/${I}/branches`; + OAUTH2_AUTHORIZE: "/oauth2/authorize"; + OAUTH2_AUTHORIZE_SAMSUNG: "/oauth2/samsung/authorize"; + OAUTH2_AUTHORIZE_SAMSUNG_CALLBACK: "/oauth2/samsung/authorize/callback"; + OAUTH2_AUTHORIZE_WEBHOOK_CHANNELS: "/oauth2/authorize/webhook-channels"; + OAUTH2_CURRENT_AUTH: "/oauth2/@me"; + OAUTH2_TOKENS: "/oauth2/tokens"; + OAUTH2_TOKEN: (id: I) => `/oauth2/tokens/${I}`; + OAUTH2_WHITELIST_ACCEPT: "/oauth2/allowlist/accept"; + OAUTH2_DEVICE_VERIFY: "/oauth2/device/verify"; + OAUTH2_DEVICE_FINISH: "/oauth2/device/finish"; + MFA_TOTP_ENABLE: "/users/@me/mfa/totp/enable"; + MFA_TOTP_ENABLE_VERIFY: "/users/@me/mfa/totp/enable/verify"; + MFA_TOTP_ENABLE_RESEND: "/users/@me/mfa/totp/enable/resend"; + MFA_TOTP_DISABLE: "/users/@me/mfa/totp/disable"; + MFA_SMS_ENABLE: "/users/@me/mfa/sms/enable"; + MFA_SMS_DISABLE: "/users/@me/mfa/sms/disable"; + MFA_CODES_VERIFICATION: "/users/@me/mfa/codes-verification"; + MFA_SEND_VERIFICATION_KEY: "/auth/verify/view-backup-codes-challenge"; + CALL: (channelId: C) => `/channels/${C}/call`; + CALL_RING: (channelId: C) => `/channels/${C}/call/ring`; + CALL_STOP_RINGING: (channelId: C) => `/channels/${C}/call/stop-ringing`; + DISABLE_EMAIL_NOTIFICATIONS: "/users/disable-email-notifications"; + DISABLE_SERVER_HIGHLIGHT_NOTIFICATIONS: "/users/disable-server-highlight-notifications"; + CHANNEL_WEBHOOKS: (channelId: C) => `/channels/${C}/webhooks`; + GUILD_WEBHOOKS: (guildId: G) => `/guilds/${G}/webhooks`; + WEBHOOK: (id: I) => `/webhooks/${I}`; + WEBHOOK_INTEGRATION: (webhookId: W, token: T) => `/webhooks/${W}/${T}`; + REACTIONS: ( + channelId: C, + messageId: M, + reaction: R + ) => `/channels/${C}/messages/${M}/reactions/${R}`; + REMOVE_REACTIONS: ( + channelId: C, + messageId: M + ) => `/channels/${C}/messages/${M}/reactions`; + REMOVE_EMOJI_REACTIONS: ( + channelId: C, + messageId: M, + reaction: R + ) => `/channels/${C}/messages/${M}/reactions/${R}`; + REACTION: ( + channelId: C, + messageId: M, + reaction: R, + userId: U + ) => `/channels/${C}/messages/${M}/reactions/${R}/${U}`; + REACTION_WITH_TYPE: ( + channelId: C, + messageId: M, + reaction: R, + userId: U, + type: T + ) => `/channels/${C}/messages/${M}/reactions/${R}/${U}/${T}`; + SEARCH_GUILD: (guildId: G) => `/guilds/${G}/messages/search`; + SEARCH_FAVORITES: "/search/favorites"; + SEARCH_TABS_GUILD: (guildId: G) => `/guilds/${G}/messages/search/tabs`; + SEARCH_DMS: "/users/@me/messages/search"; + SEARCH_TABS_DMS: "/users/@me/messages/search/tabs"; + CHANGELOG_MESSAGES: "/changelogs/@me/messages"; + GUILD_APPLICATIONS: (guildId: G) => `/guilds/${G}/applications`; + APPLIED_GUILD_BOOSTS_FOR_GUILD: (guildId: G) => `/guilds/${G}/premium/subscriptions`; + APPLIED_GUILD_BOOST: ( + guildId: G, + userId: U + ) => `/guilds/${G}/premium/subscriptions/${U}`; + APPLIED_GUILD_BOOST_COOLDOWN: "/users/@me/guilds/premium/subscriptions/cooldown"; + USER_APPLIED_GUILD_BOOSTS: "/users/@me/guilds/premium/subscriptions"; + USER_GUILD_BOOST_SLOTS: "/users/@me/guilds/premium/subscription-slots"; + USER_GUILD_BOOST_SLOT_CANCEL: (id: I) => `/users/@me/guilds/premium/subscription-slots/${I}/cancel`; + USER_GUILD_BOOST_SLOT_UNCANCEL: ( + id: I + ) => `/users/@me/guilds/premium/subscription-slots/${I}/uncancel`; + SEARCH_CHANNEL: (channelId: C) => `/channels/${C}/messages/search`; + SEARCH_TABS_CHANNEL: (channelId: C) => `/channels/${C}/messages/search/tabs`; + BILLING_STRIPE_SETUP_INTENT_SECRET: "/users/@me/billing/stripe/setup-intents"; + BILLING_ADYEN_PAYMENT_METHODS: "/users/@me/billing/adyen/payment-methods"; + BILLING_PAYMENT_SOURCES: "/users/@me/billing/payment-sources"; + BILLING_PAYMENT_SOURCES_VALIDATE_BILLING_ADDRESS: "/users/@me/billing/payment-sources/validate-billing-address"; + BILLING_PAYMENT_SOURCE: (id: I) => `/users/@me/billing/payment-sources/${I}`; + BILLING_PAYMENTS: "/users/@me/billing/payments"; + BILLING_PAYMENT: (id: I) => `/users/@me/billing/payments/${I}`; + BILLING_PAYMENTS_VOID: (id: I) => `/users/@me/billing/payments/${I}/void`; + BILLING_PAYMENTS_REFUND: (id: I) => `/users/@me/billing/payments/${I}/refund`; + BILLING_INVOICE_PDF: "/users/@me/billing/invoice"; + BILLING_INVOICE_BREAKDOWN: "/users/@me/billing/invoice/breakdown"; + BILLING_STRIPE_PAYMENT_INTENTS: ( + id: I + ) => `/users/@me/billing/stripe/payment-intents/payments/${I}`; + BILLING_STRIPE_PAYMENT_INTENTS_VIA_ID: (id: I) => `/users/@me/billing/stripe/payment-intents/${I}`; + BILLING_STANDALONE_CHECKOUT_PAGE:

( + planId: P, + gift: G, + loadId: I, + type: T + ) => `/billing/premium/subscribe?plan_id=${P}&gift=${G}&load_id=${I}${T extends string ? `&payment_method_type=${T}` : ""}`; + BILLING_STANDALONE_CHECKOUT_LOGIN_HANDOFF: ( + key: K, + token: T, + dest: D + ) => `//discord.com/billing/premium/subscribe/login-handoff?handoff_key=${K}&handoff_token=${T}&destination=${D}`; + BILLING_PAYPAL_BILLING_AGREEMENT_TOKENS: "/users/@me/billing/paypal/billing-agreement-tokens"; + BILLING_POPUP_BRIDGE: (id: I) => `/billing/popup-bridge/${I}`; + BILLING_POPUP_BRIDGE_CALLBACK: (id: I) => `/billing/popup-bridge/${I}/callback`; + BILLING_POPUP_BRIDGE_CALLBACK_REDIRECT_PREFIX: ( + id: I, + callback: C, + redirect?: R + ) => `/billing/popup-bridge/${I}/callback/${C}/${R extends string ? R : ""}`; + BILLING_SUBSCRIPTIONS: "/users/@me/billing/subscriptions"; + BILLING_PERKS_RELEVANCE: "/users/@me/billing/perks-relevance"; + BILLING_NITRO_AFFINITY: "/users/@me/billing/nitro-affinity"; + BILLING_SUBSCRIPTIONS_PREVIEW: "/users/@me/billing/subscriptions/preview"; + BILLING_APPLY_APPLE_RECEIPT: "/billing/apple/apply-receipt"; + BILLING_APPLE_SUBSCRIPTION: (id: I) => `/billing/apple/subscriptions/${I}`; + BILLING_GENERATE_APPLE_TRIAL_OFFER_SIGNATURE: "/users/@me/billing/apple/trial-offer-signature"; + BILLING_CREATE_APPLE_IAP_JWT_TOKEN: "/billing/apple/jwt-token"; + BILLING_SUBSCRIPTION: (id: I) => `/users/@me/billing/subscriptions/${I}`; + BILLING_SUBSCRIPTION_PREVIEW: (id: I) => `/users/@me/billing/subscriptions/${I}/preview`; + BILLING_SUBSCRIPTION_INVOICE: (id: I) => `/users/@me/billing/subscriptions/${I}/invoices`; + BILLING_INVOICE_MANUAL_PAYMENT: ( + subscription: S, + invoice: I + ) => `/users/@me/billing/subscriptions/${S}/invoices/${I}/pay`; + BILLING_COUNTRY_CODE: "/users/@me/billing/country-code"; + BILLING_LOCALIZED_PROMO: "/users/@me/billing/localized-pricing-promo"; + VERIFY_PURCHASE: "/google-play/verify-purchase-token"; + DOWNGRADE_SUBSCRIPTION: "/google-play/downgrade-subscription"; + GOOGLE_PLAY_VALIDATE_PURCHASE: "/google-play/validate-purchase"; + USER_AGREEMENTS: "/users/@me/agreements"; + HANDOFF: "/auth/handoff"; + HANDOFF_EXCHANGE: "/auth/handoff/exchange"; + LIBRARY: "/users/@me/library"; + LIBRARY_APPLICATION_BRANCH: (id: I, branch: B) => `/users/@me/library/${I}/${B}`; + LIBRARY_APPLICATION_DELETE: (id: I) => `/users/@me/library/${I}`; + AUTH_LOCATION_METADATA: "/auth/location-metadata"; + USER_HARVEST: "/users/@me/harvest"; + APPLICATION_LIVE_BUILD: ( + id: I, + branch: B + ) => `/applications/${I}/branches/${B}/builds/live`; + APPLICATION_BUILD_SIZE: ( + id: I, + branch: B, + build: BB + ) => `/applications/${I}/branches/${B}/builds/${BB}/size`; + APPLICATION_BRANCHES: "/branches"; + APPLICATION_PUBLIC: (id: I) => `/applications/${I}/public`; + APPLICATIONS_PUBLIC: "/applications/public"; + APPLICATIONS_TRENDING: "/applications/trending/global"; + APPLICATION_BRANCH_LIST: (id: I) => `/applications/${I}/branches`; + LIBRARY_APPLICATION_INSTALLED: ( + id: I, + id2: II + ) => `/users/@me/library/${I}/${II}/installed`; + STOREFRONT_PREMIUM_BUTTON: (id: I) => `/applications/storefront/interactions/premium-button/${I}`; + STORE_DIRECTORY_LAYOUT: (id: I) => `/store/directory-layouts/${I}`; + STORE_DIRECTORY: (id: I) => `/store/directory/${I}`; + STORE_EMAIL_RESEND_PAYMENT_VERIFICATION: "/store/email/resend-payment-verification"; + STORE_PUBLISHED_LISTINGS_APPLICATIONS: "/store/published-listings/applications"; + STORE_PUBLISHED_LISTINGS_APPLICATION: (id: I) => `/store/published-listings/applications/${I}`; + STORE_PUBLISHED_LISTINGS_SKUS: "/store/published-listings/skus"; + STORE_PUBLISHED_LISTINGS_SKU: (id: I) => `/store/published-listings/skus/${I}`; + STORE_PUBLISHED_LISTINGS_SKU_JOIN_GUILD: ( + id: I + ) => `/store/published-listings/skus/${I}/guild/join`; + STORE_PUBLISHED_LISTINGS_SUBSCRIPTION_PLANS: ( + id: I + ) => `/store/published-listings/skus/${I}/subscription-plans`; + STORE_SKU: (id: I) => `/store/skus/${I}`; + STORE_SKU_PURCHASE: (id: I) => `/store/skus/${I}/purchase`; + STORE_LISTING: (id: I) => `/store/listings/${I}`; + STORE_LISTINGS_SKU: (id: I) => `/store/skus/${I}/listings`; + APPLICATION_SKUS: (id: I) => `/applications/${I}/skus`; + STORE_EULA: (id: I) => `/store/eulas/${I}`; + ENTITLEMENTS_FOR_APPLICATION: (id: I) => `/users/@me/applications/${I}/entitlements`; + ENTITLEMENTS_FOR_USER: "/users/@me/entitlements"; + ENTITLEMENT_TICKET: (id: I) => `/users/@me/applications/${I}/entitlement-ticket`; + APPLICATION_TICKET: (id: I) => `/users/@me/applications/${I}/ticket`; + ENTITLEMENTS_GIFTABLE: "/users/@me/entitlements/gifts"; + STORE_ASSET: ( + id: I, + asset: A, + extension: E + ) => `/store/applications/${I}/assets/${A}.${E}`; + APPLICATION_ASSET: ( + id: I, + asset: A, + extension: E + ) => `/applications/${I}/app-assets/${A}.${E}`; + HYPESQUAD_ONLINE: "/hypesquad/online"; + APPLICATION_STORAGE: ( + id: I, + branch: B + ) => `/applications/${I}/branches/${B}/storage`; + APPLICATION_DISCLOSURES: (id: I) => `/applications/${I}/disclosures`; + GIFS_SEARCH: "/gifs/search"; + GIFS_TRENDING: "/gifs/trending"; + GIFS_TRENDING_GIFS: "/gifs/trending-gifs"; + GIFS_SELECT: "/gifs/select"; + GIFS_SUGGEST: "/gifs/suggest"; + GIFS_TRENDING_SEARCH: "/gifs/trending-search"; + GIFT_CODE_RESOLVE: (id: I) => `/entitlements/gift-codes/${I}`; + GIFT_CODE_REDEEM: (id: I) => `/entitlements/gift-codes/${I}/redeem`; + PARTNER_PROMOTIONS: (id: I) => `/entitlements/partner-promotions/${I}`; + USER_GIFT_CODE_CREATE: "/users/@me/entitlements/gift-codes"; + USER_GIFT_CODE_REVOKE: (id: I) => `/users/@me/entitlements/gift-codes/${I}`; + USER_GIFT_CODES: "/users/@me/entitlements/gift-codes"; + USER_TRIAL_OFFER: "/users/@me/billing/user-trial-offer"; + USER_TRIAL_OFFER_ACKNOWLEDGED: (id: I) => `/users/@me/billing/user-trial-offer/${I}/ack`; + USER_OFFER: "/users/@me/billing/user-offer"; + USER_OFFER_ACKNOWLEDGED: "/users/@me/billing/user-offer/ack"; + CHURN_USER_OFFER: "/users/@me/billing/churn-user-offer"; + USER_OFFER_REDEEM: "/users/@me/billing/user-offer/redeem"; + USER_PERKS_DEMOS: "/users/@me/perks-demos"; + USER_PERKS_DEMOS_ACTIVATE: (id: I) => `/users/@me/activate-perk-demo/${I}`; + GUILD_DISCOVERY: "/discoverable-guilds"; + GUILD_DISCOVERY_SEARCH: "/discoverable-guilds/search"; + GUILD_DISCOVERY_CATEGORIES: "/discovery/categories"; + GUILD_DISCOVERY_SLUG: (id: I) => `/discovery/${I}`; + GUILD_DISCOVERY_METADATA: (guildId: G) => `/guilds/${G}/discovery-metadata`; + GUILD_DISCOVERY_UPDATE_CATEGORY: ( + guildId: G, + category: C + ) => `/guilds/${G}/discovery-categories/${C}`; + STREAM_PREVIEW: (id: I) => `/streams/${I}/preview`; + STREAM_NOTIFY: (id: I) => `/streams/${I}/notify`; + STREAM: (id: I) => `/streams/${I}/stream`; + GUILD_PREVIEW: (guildId: G) => `/guilds/${G}/preview`; + USER_AFFINITIES: "/users/@me/affinities/users"; + USER_AFFINITIES_V2: "/users/@me/affinities/v2/users"; + GUILD_AFFINITIES: "/users/@me/affinities/guilds"; + CHANNEL_AFFINITIES: "/users/@me/affinities/channels"; + FUNIMATION_PROMOTION: "/promotions/funimation"; + PARTNERS_CONNECTIONS: "/partners/connections"; + PARTNERS_APPLY: "/partners/apply"; + STICKER_PACK: (id: I) => `/sticker-packs/${I}`; + STORE_DIRECTORY_LAYOUT_STICKER_PACKS: (id: I) => `/sticker-packs/directory-v2/${I}`; + USER_STICKER_PACKS: "/users/@me/sticker-packs"; + STICKER_ASSET: (id: I, extension: E) => `/stickers/${I}.${E}`; + STICKER: (id: I) => `/stickers/${I}`; + STICKER_PACKS: "/sticker-packs"; + GUILD_STICKER_PACKS: (guildId: G) => `/guilds/${G}/stickers`; + GUILD_STICKER: (guildId: G, stickerId: S) => `/guilds/${G}/stickers/${S}`; + STICKER_GUILD_DATA: (id: I) => `/stickers/${I}/guild`; + INTERACTIONS: "/interactions"; + MESSAGE_INTERACTION_DATA: ( + channelId: C, + messageId: M + ) => `/channels/${C}/messages/${M}/interaction-data`; + ACTIVITY_SHELF: "/activities/shelf"; + ACTIVITY_CHANNEL_LAUNCH: (id: A, instance: I) => `/activities/${A}/${I}`; + ACTIVITY_JOIN_INSTANCE: ( + id: A, + instance: I + ) => `/activities/applications/${A}/activity-instances/${I}/join`; + ACTIVITY_TEST_MODE: (id: I) => `/activities/${I}/test-mode`; + ACTIVITY_LEAVE: ( + id: A, + activity: AA, + instance: I + ) => `/applications/${A}/activities/${AA}/instances/${I}/leave`; + APPLICATION_UPLOAD_ATTACHMENT: (id: I) => `/applications/${I}/attachment`; + CHANNEL_THREADS: (channelId: C) => `/channels/${C}/threads`; + CHANNEL_MESSAGE_THREADS: ( + channelId: C, + messageId: M + ) => `/channels/${C}/messages/${M}/threads`; + CHANNEL_LINKED_LOBBY: (channelId: C) => `/channels/${C}/linked-lobby`; + APPLICATION_BOT_GUILD_COMMAND_PERMISSIONS: ( + id: A, + guildId: G, + command: C + ) => `/applications/${A}/guilds/${G}/commands/${C}/permissions`; + UPDATE_VOICE_STATE: ( + guildId: G, + userId?: U + ) => `/guilds/${G}/voice-states/${U}`; + GET_REPORT_MENU: (id: I) => `/reporting/menu/${I}`; + GET_UNAUTHENTICATED_REPORT_MENU: (id: I) => `/reporting/unauthenticated/menu/${I}`; + SUBMIT_REPORT_MENU: (id: I) => `/reporting/${I}`; + SUBMIT_UNAUTHENTICATED_REPORT_MENU: (id: I) => `/reporting/unauthenticated/${I}`; + SEND_UNAUTHENTICATED_REPORT_PINCODE: (id: I) => `/reporting/unauthenticated/${I}/code`; + VERIFY_UNAUTHENTICATED_REPORT: (id: I) => `/reporting/unauthenticated/${I}/verify`; + DSA_EXPERIMENT_UNAUTHENTICATED: "/reporting/unauthenticated/experiment"; + SUBMIT_REPORT_SECOND_LOOK: "/reporting/review"; + STAGE_INSTANCES: "/stage-instances"; + STAGE_INSTANCES_EXTRA: "/stage-instances/extra"; + STAGE_INSTANCE: (id: I) => `/stage-instances/${I}`; + USER_SURVEY: "/users/@me/survey"; + USER_SURVEY_SEEN: (id: I) => `/users/@me/survey/${I}/seen`; + GUILD_EVENTS: "/guild-events"; + GUILD_EVENT: (guildId: G, event: E) => `/guilds/${G}/scheduled-events/${E}`; + GUILD_EVENT_IMAGE: ( + event: G, + image: I, + extension: E + ) => `/guild-events/${G}/images/${I}.${E}`; + GUILD_EVENTS_FOR_GUILD: (guildId: G) => `/guilds/${G}/scheduled-events`; + GUILD_EVENT_USER_COUNTS: ( + guildId: G, + event: E + ) => `/guilds/${G}/scheduled-events/${E}/users/counts`; + GUILD_EVENT_USERS: ( + guildId: G, + event: E, + id?: I + ) => `/guilds/${G}/scheduled-events/${E}${I extends string ? `/${I}` : ""}/users`; + USER_GUILD_EVENT: ( + guildId: G, + event: E, + id?: I + ) => `/guilds/${G}/scheduled-events/${E}${I extends string ? `/${I}` : ""}/users/@me`; + USER_GUILD_EVENTS: "/users/@me/scheduled-events"; + GUILD_EVENT_EXCEPTIONS: ( + guildId: G, + event: E + ) => `/guilds/${G}/scheduled-events/${E}/exceptions`; + GUILD_EVENT_EXCEPTION: ( + guildId: G, + event: E, + exception: I + ) => `/guilds/${G}/scheduled-events/${E}/exceptions/${I}`; + MEMBER_SAFETY_SUPPLEMENTAL: (guildId: G) => `/guilds/${G}/members/supplemental`; + GUILD_MEMBER_SEARCH: (guildId: G) => `/guilds/${G}/members-search`; + GUILD_AUTOMOD_RULES: (guildId: G) => `/guilds/${G}/auto-moderation/rules`; + GUILD_AUTOMOD_RULE: ( + guildId: G, + rule: R + ) => `/guilds/${G}/auto-moderation/rules/${R}`; + GUILD_AUTOMOD_VALIDATE_RULE: (guildId: G) => `/guilds/${G}/auto-moderation/rules/validate`; + GUILD_AUTOMOD_CLEAR_MENTION_RAID: (guildId: G) => `/guilds/${G}/auto-moderation/clear-mention-raid`; + GUILD_AUTOMOD_ALERT_ACTION: (guildId: G) => `/guilds/${G}/auto-moderation/alert-action`; + GUILD_INCIDENT_ACTIONS: (guildId: G) => `/guilds/${G}/incident-actions`; + GUILD_INCIDENT_REPORT_FALSE_ALARM: (guildId: G) => `/guilds/${G}/auto-moderation/false-alarm`; + GUILD_INCIDENT_REPORT_RAID: (guildId: G) => `/guilds/${G}/auto-moderation/report-raid`; + DIRECTORY_CHANNEL_ENTRIES: (channelId: C) => `/channels/${C}/directory-entries`; + DIRECTORY_CHANNEL_ENTRY: ( + channelId: C, + entry: E + ) => `/channels/${C}/directory-entry/${E}`; + DIRECTORY_ENTRIES_SEARCH: (channelId: C) => `/channels/${C}/directory-entries/search`; + DIRECTORY_CHANNEL_CATEGORY_COUNTS: (channelId: C) => `/channels/${C}/directory-entries/counts`; + DIRECTORY_CHANNEL_LIST_BY_ID: (channelId: C) => `/channels/${C}/directory-entries/list`; + DIRECTORY_ENTRIES_BROADCAST_INFO: (guildId: G) => `/guilds/${G}/directory-entries/broadcast`; + PRICE_TIERS: "/store/price-tiers"; + TEAMS: "/teams"; + APPLICATIONS: "/applications"; + APPLICATIONS_WITH_ASSETS: "/applications-with-assets"; + APPLICATION_OWNER_TRANSFER: (id: I) => `/applications/${I}/transfer`; + HUB_WAITLIST_SIGNUP: "/hub-waitlist/signup"; + HUB_EMAIL_VERIFY: "/guilds/automations/email-domain-lookup/verify"; + HUB_EMAIL_VERIFY_CODE: "/guilds/automations/email-domain-lookup/verify-code"; + OUTBOUND_PROMOTIONS: "/outbound-promotions"; + OUTBOUND_PROMOTIONS_PREVIEW: "/outbound-promotions/preview"; + BOGO_PROMOTIONS: "/bogo-promotions"; + CLAIMED_OUTBOUND_PROMOTION_CODES: "/users/@me/outbound-promotions/codes"; + CLAIM_OUTBOUND_PROMOTION_CODE: (id: I) => `/outbound-promotions/${I}/claim`; + HUB_EMAIL_VERIFY_SEND: "/guilds/automations/email-domain-lookup"; + GUILD_PRODUCT_CREATE_ATTACHMENT_UPLOAD: (guildId: G) => `/guilds/${G}/products/attachments`; + GUILD_ROLE_SUBSCRIPTIONS_SETTINGS: (guildId: G) => `/guilds/${G}/role-subscriptions/settings`; + GUILD_ROLE_SUBSCRIPTION_GROUP_LISTINGS: ( + guildId: G, + id?: I + ) => `/guilds/${G}/role-subscriptions/group-listings${I extends string ? `/${I}` : ""}`; + GUILD_ROLE_SUBSCRIPTION_LISTINGS: ( + guildId: G, + group: I, + subscription?: S + ) => `/guilds/${G}/role-subscriptions/group-listings/${I}/subscription-listings${S extends string ? `/${S}` : ""}`; + GUILD_ROLE_SUBSCRIPTION_GROUP_LISTING_ARCHIVE: ( + guildId: G, + group: I, + subscription: S + ) => `/guilds/${G}/role-subscriptions/group-listings/${I}/subscription-listings/${S}/archive`; + GUILD_ROLE_SUBSCRIPTION_TRIALS: (guildId: G) => `/guilds/${G}/role-subscriptions/trials`; + GUILD_ROLE_SUBSCRIPTION_LISTING_TRIAL: ( + guildId: G, + subscription: S + ) => `/guilds/${G}/role-subscriptions/subscription-listings/${S}/trial`; + GUILD_ROLE_SUBSCRIPTION_LISTING_TEMPLATES: ( + guildId: G + ) => `/guilds/${G}/role-subscriptions/templates`; + CREATOR_MONETIZATION_ENABLE_REQUESTS: ( + guildId: G + ) => `/guilds/${G}/creator-monetization/enable-requests`; + CREATOR_MONETIZATION_ELIGIBILITY: (guildId: G) => `/guilds/${G}/creator-monetization/requirements`; + CREATOR_MONETIZATION_ACCEPT_TERMS: ( + guildId: G, + request: R + ) => `/guilds/${G}/creator-monetization/enable-requests/${R}/accept-terms`; + CREATOR_MONETIZATION_ACCEPT_TERMS_V2: ( + guildId: G + ) => `/guilds/${G}/creator-monetization/accept-terms`; + CREATOR_MONETIZATION_RESTRICTIONS: (guildId: G) => `/guilds/${G}/creator-monetization/restrictions`; + GUILD_ROLE_SUBSCRIPTION_TRIAL_ELIGIBILITY: ( + guildId: G, + subscription: S, + trial: T + ) => `/guilds/${G}/role-subscriptions/subscription-listings/${S}/trial/${T}/eligibility`; + CREATOR_MONETIZATION_MARKETING_ONBOARDING: ( + guildId: G + ) => `/guilds/${G}/creator-monetization/marketing/onboarding`; + CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY: "/creator-monetization/marketing/nag-activate/eligibility"; + CREATOR_MONETIZATION_OWNERSHIP_TRANSFER_ONBOARD: ( + guildId: G + ) => `/guilds/${G}/creator-monetization/ownership-transfer/onboarding`; + CREATOR_MONETIZATION_ACCEPT_NEW_TERMS: ( + guildId: G + ) => `/guilds/${G}/creator-monetization/accept-new-terms`; + CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_DEMONETIZED: ( + guildId: G + ) => `/guilds/${G}/creator-monetization/accept-new-terms-demonetized`; + CREATOR_MONETIZATION_REMOVE_MONETIZATION: ( + guildId: G + ) => `/guilds/${G}/creator-monetization/remove-monetization`; + SUBSCRIPTION_PLAN_GROUP_LISTING: (id: I) => `/subscription-plans/${I}/subscription-group-listing`; + SUBSCRIPTION_PLAN_GUILD_ROLE_GROUP_LISTING: ( + id: I + ) => `/subscription-plans/${I}/guild-role-subscription-group-listing`; + MEDIA_POST_RESHARE_GET_PREVIEW: (channelId: C) => `/channels/${C}/media-post-preview`; + UNFURL_EMBED_URLS: "/unfurler/embed-urls"; + BUG_REPORTS: "/private/bug-reports"; + PAYMENT_PAYOUT_GROUPS: (id: I) => `/applications/${I}/payment-payout-groups`; + GUILD_PRODUCTS: (guildId: G) => `/guilds/${G}/products`; + GUILD_PRODUCT_LISTINGS: ( + guildId: G, + id?: I + ) => `/guilds/${G}/products/listings${I extends string ? `/${I}` : ""}`; + GUILD_PRODUCT_ATTACHMENT_DOWNLOAD: ( + guildId: G, + id: I, + attachment: A + ) => `/guilds/${G}/products/listings/${I}/attachments/${A}/download`; + GUILD_CONVERT_TO_CLAN: (id: I) => `/clan/${I}`; + GUILD_CLAN_DISCOVERY_INFO: (id: I) => `/discovery/${I}/clan`; + GUILD_PROFILE: (guildId: G) => `/guilds/${G}/profile`; + USER_SET_CLAN_IDENTITY: "/users/@me/clan"; + CLAN_SETTINGS: (id: I) => `/clan/${I}/settings`; + DISABLE_CLAN: (id: I) => `/clan/${I}/disable`; + TENOR_ASSET_PATH: "/tenor"; + EMAIL_SETTINGS: "/users/@me/email-settings"; + ACCOUNT_NOTIFICATION_SETTINGS: "/users/@me/notification-settings"; + VIDEO_FILTER_ASSETS: "/users/@me/video-filters/assets"; + VIDEO_FILTER_ASSET: (id: I) => `/users/@me/video-filters/assets/${I}`; + VIDEO_FILTER_ASSET_LAST_USED: (id: I) => `/users/@me/video-filters/assets/${I}/last-used`; + VIDEO_FILTER_ASSET_STORAGE: ( + userId: U, + asset: A, + hash: H, + extension: E + ) => `/users/${U}/video-filter-assets/${A}/${H}.${E}`; + GUILD_SOUNDBOARD_SOUNDS: (guildId: G) => `/guilds/${G}/soundboard-sounds`; + GUILD_SOUNDBOARD_SOUND: ( + guildId: G, + sound: S + ) => `/guilds/${G}/soundboard-sounds/${S}`; + SOUNDBOARD_SOUND: (id: I) => `/soundboard-sounds/${I}`; + SOUNDBOARD_SOUND_GUILD_DATA: ( + sound: S, + guildId: G + ) => `/soundboard-sounds/${S}/guild/${G}`; + SOUNDBOARD_DEFAULT_SOUNDS: "/soundboard-default-sounds"; + SEND_SOUNDBOARD_SOUND: (channelId: C) => `/channels/${C}/send-soundboard-sound`; + APPLICATION_COMMANDS_SEARCH: (channelId: C) => `/channels/${C}/application-commands/search`; + APPLICATION_COMMAND_INDEX_CHANNEL: (channelId: C) => `/channels/${C}/application-command-index`; + APPLICATION_COMMAND_INDEX_GUILD: (guildId: G) => `/guilds/${G}/application-command-index`; + APPLICATION_COMMAND_INDEX_USER: "/users/@me/application-command-index"; + APPLICATION_COMMAND_INDEX_APPLICATION: (id: I) => `/applications/${I}/application-command-index`; + GUILD_COMMANDS_FOR_APPLICATION: ( + guildId: G, + appId: A + ) => `/guilds/${G}/application-commands/${A}`; + APPLICATION_DIRECTORY_APPLICATION: (id: I) => `/application-directory-static/applications/${I}`; + APPLICATION_DIRECTORY_EMBED_APPLICATION: ( + id: I + ) => `/application-directory/applications/${I}/embed`; + APPLICATION_DIRECTORY_CATEGORIES: "/application-directory-static/categories"; + APPLICATION_DIRECTORY_SIMILAR: (id: I) => `/application-directory-static/applications/${I}/similar`; + APPLICATION_DIRECTORY_SEARCH: "/application-directory-static/search"; + APPLICATION_DIRECTORY_COLLECTIONS: "/application-directory-static/collections"; + APPLICATION_DIRECTORY_COLLECTION_ITEM_IMAGE: ( + id: I, + hash: H, + extension: E + ) => `/application-directory/collection-items/${I}/${H}.${E}`; + APP_RECOMMENDATIONS: "/app-recommendations"; + GUILD_FEED: (guildId: G) => `/guilds/${G}/guild-feed`; + USER_EMAIL: "/users/@me/email"; + USER_EMAIL_VERIFY_CODE: "/users/@me/email/verify-code"; + PREMIUM_USAGE: "/users/@me/premium-usage"; + ACTIVE_CHANNELS: (guildId: G) => `/guilds/${G}/active-channels`; + NOTIF_CENTER_ITEMS: (id?: I) => `/users/@me/notification-center/items${I extends string ? `/${I}` : ""}`; + NOTIF_CENTER_ITEMS_ACK: (id: I) => `/users/@me/notification-center/items/${I}/ack`; + NOTIF_CENTER_ITEMS_BULK_ACK: "/users/@me/notification-center/items/bulk-ack"; + NOTIFICATION_SNAPSHOTS: "/users/@me/notification-settings/snapshots"; + NOTIFICATION_SNAPSHOT: (id: I) => `/users/@me/notification-settings/snapshots/${I}`; + RESTORE_NOTIFICATION_SNAPSHOT: ( + id: I + ) => `/users/@me/notification-settings/snapshots/${I}/restore-guilds`; + GUILD_ADMIN_SERVER_ELIGIBILITY: (guildId: G) => `/guilds/${G}/admin-server-eligibility`; + JOIN_ADMIN_SERVER: (guildId: G) => `/guilds/${G}/join-admin-server`; + AUTH_SESSIONS: "/auth/sessions"; + AUTH_SESSION_NOTIFICATIONS_DEBUG: "/auth/sessions/debug/notifications"; + AUTH_SESSIONS_LOGOUT: "/auth/sessions/logout"; + CUSTOM_CALL_SOUNDS: (channelId: C) => `/channels/${C}/custom-call-sounds`; + VOICE_CHANNEL_EFFECTS: (channelId: C) => `/channels/${C}/voice-channel-effects`; + APPLICATION_SUBSCRIPTION_GROUP_LISTING: ( + appId: A, + id: I + ) => `/applications/${A}/subscription-group-listings/${I}`; + GUILD_ENTITLEMENTS: (guildId: G) => `/guilds/${G}/entitlements`; + GUILD_ROLE_CONNECTIONS_CONFIGURATION: ( + guildId: G, + roleId: R + ) => `/guilds/${G}/roles/${R}/connections/configuration`; + MESSAGE_REQUESTS_SUPPLEMENTAL_DATA: "/users/@me/message-requests/supplemental-data"; + CONNECT_REQUEST_CREATE: "/consoles/connect-request"; + CONNECT_REQUEST: (id: I) => `/consoles/connect-request/${I}`; + CONSOLES_DEVICES: (id: I) => `/consoles/${I}/devices`; + CONSOLES_DEVICES_COMMANDS: ( + console: C, + device: D + ) => `/consoles/${C}/devices/${D}/commands`; + CONSOLES_DEVICES_COMMAND: ( + console: C, + device: D, + command: I + ) => `/consoles/${C}/devices/${D}/commands/${I}`; + ELIGIBLE_APPLICATION_SUBSCRIPTION_GUILDS: "/users/@me/billing/eligible-application-subscription-guilds"; + APPLICATION_USER_ROLE_CONNECTIONS: "/users/@me/applications/role-connections"; + SHARED_CANVAS_LINES: ( + channelId: C, + id: I + ) => `/channels/${C}/${I}/shared-canvas/lines`; + SHARED_CANVAS_EMOJI_HOSES: ( + channelId: C, + id: I + ) => `/channels/${C}/${I}/shared-canvas/emoji-hose`; + SHARED_CANVAS_EMOJI_HOSE: ( + channelId: C, + id: I, + hose: H + ) => `/channels/${C}/${I}/shared-canvas/emoji-hose/${H}`; + BURST_CREDIT_BALANCE: "/users/@me/burst-credits"; + GET_SAVED_MESSAGES: "/users/@me/saved-messages"; + PUT_SAVED_MESSAGE: ( + channelId: C, + messageId: M + ) => `/users/@me/saved-messages/${C}/${M}`; + DELETE_SAVED_MESSAGE: ( + channelId: C, + messageId: M + ) => `/users/@me/saved-messages/${C}/${M}`; + GET_REFERRALS_REMAINING: "/users/@me/referrals/eligibility"; + GET_REFERRAL_ELIGIBLE_USERS: "/users/@me/referrals/eligible-users"; + GET_REFERRAL_INCENTIVE_ELIGIBILITY: "/users/@me/referrals/incentive-eligibility"; + CREATE_REFERRAL_PREVIEW: (id: I) => `/users/@me/referrals/${I}/preview`; + CREATE_REFERRAL: (id: I) => `/users/@me/referrals/${I}`; + FAMILY_CENTER_TEEN_ACTIVITY: (id: I) => `/family-center/${I}/activity`; + FAMILY_CENTER_TEEN_ACTIVITY_ME: "/family-center/@me"; + FAMILY_CENTER_TEEN_ACTIVITY_MORE: ( + id: I, + id2: II, + id3: III, + id4: IV + ) => `/family-center/more-activity/${I}/${II}/${III}/${IV}`; + FAMILY_CENTER_LINKED_USERS: "/users/@me/linked-users"; + FAMILY_CENTER_LINK_CODE: "/family-center/@me/link-code"; + FAMILY_CENTER_FETCH_TEEN_USER: (id: I) => `/family-center/teen-user/${I}`; + REFERRAL_OFFER_ID_RESOLVE: (id: I) => `/referrals/${I}`; + APPLICATIONS_SHELF: "/applications/shelf"; + DISCORDIFY_ME: "/users/@me/avatars/discordify"; + BADGE_ICON: (id: I) => `/badge-icons/${I}.png`; + FINISH_MFA_CHECK: "/mfa/finish"; + CREATE_USER_OFFER: (userId: U, offer: O) => `/user-offers/create/${O}/${U}`; + DELETE_USER_OFFER: (userId: U, offer: O) => `/user-offers/${O}/${U}`; + UNACK_USER_OFFER: (userId: U, offer: O) => `/user-offers/${O}/${U}/unack`; + USER_OFFERS: "/user-offers"; + USER_OFFER_IDS: "/user-offer-ids"; + GUILD_MEMBERS_UNUSUAL_DM_ACTIVITY: (guildId: G) => `/guilds/${G}/members/unusual-dm-activity`; + EMOJI_CAPTIONS_GET: "/users/@me/emoji-captions"; + SAFETY_HUB: "/safety-hub/@me"; + SAFETY_HUB_REQUEST_REVIEW: (id: I) => `/safety-hub/request-review/${I}`; + SAFETY_HUB_REQUEST_SUSPENDED_USER_REVIEW: (id: I) => `/safety-hub/suspended/request-review/${I}`; + SAFETY_HUB_SUSPENDED: "/safety-hub/suspended/@me"; + SAFETY_HUB_REQUEST_SUSPENDED_AGE_VERIFICATION: "/safety-hub/suspended/request-verification"; + SAFETY_HUB_CHECK_SUSPENDED_AGE_VERIFICATION: "/safety-hub/suspended/check-verification"; + INITIATE_CHANNEL_PROMPTS: "/initiate-prompts"; + FORCE_SEND_PROMPT: (id: I) => `/${I}/force-send-prompt`; + EXPLICIT_MEDIA_REPORT_FALSE_POSITIVE: "/attachments/report-false-positive"; + EXPLICIT_MEDIA_SENDER_REPORT_FALSE_POSITIVE: "/attachments/sender-report-false-positive"; + SEND_GAMING_STATS: (id: I) => `/${I}/gaming-stats`; + UPDATE_GAMING_STATS: (id: I, id2: II) => `/${I}/${II}/update-gaming-stats`; + BULK_GUILD_BAN: (guildId: G) => `/guilds/${G}/bulk-ban`; + EXPLICIT_MEDIA_SCAN_MESSAGES: (channelId: C) => `/channels/${C}/explicit-media`; + EXPLICIT_MEDIA_SCAN_MULTI_CHANNEL_MESSAGES: "/messages/explicit-media"; + POLL_ANSWERS: (channelId: C, poll: P) => `/channels/${C}/polls/${P}/answers/@me`; + POLL_EXPIRE: (channelId: C, poll: P) => `/channels/${C}/polls/${P}/expire`; + POLL_ANSWER_VOTERS: ( + channelId: C, + poll: P, + answer: A + ) => `/channels/${C}/polls/${P}/answers/${A}`; + PREMIUM_MARKETING: "/premium-marketing"; + QUESTS_CURRENT_QUESTS: "/quests/@me"; + QUESTS_CLAIMED_QUESTS: "/quests/@me/claimed"; + QUEST: (id: I) => `/quests/${I}`; + QUESTS_ENROLL: (id: I) => `/quests/${I}/enroll`; + QUEST_ON_CONSOLE_START: (id: I) => `/quests/${I}/console/start`; + QUEST_ON_CONSOLE_STOP: (id: I) => `/quests/${I}/console/stop`; + QUESTS_HEARTBEAT: (id: I) => `/quests/${I}/heartbeat`; + QUESTS_VIDEO_PROGRESS: (id: I) => `/quests/${I}/video-progress`; + QUESTS_REWARD_CODE: (id: I) => `/quests/${I}/reward-code`; + QUESTS_CLAIM_REWARD: (id: I) => `/quests/${I}/claim-reward`; + QUESTS_DISMISS_CONTENT: ( + id: I, + id2: II + ) => `/quests/${I}/dismissible-content/${II}/dismiss`; + QUESTS_PREVIEW_STATUS: (id: I) => `/quests/${I}/preview/status`; + QUESTS_PREVIEW_DISMISSIBILITY: (id: I) => `/quests/${I}/preview/dismissibility`; + QUESTS_PREVIEW_COMPLETE: (id: I) => `/quests/${I}/preview/complete`; + QUEST_FETCH_QUEST_TO_DELIVER: (id: I) => `/quests/decision?placement=${I}`; + ATTACHMENTS_REFRESH_URLS: "/attachments/refresh-urls"; + GAME_INVITE: (id: I) => `/game-invite/@me/${I}`; + GAME_INVITES: "/game-invite/@me"; + ADD_SAFETY_WARNING: (channelId: C) => `/channels/${C}/add-safety-warning`; + DELETE_SAFETY_WARNINGS: (channelId: C) => `/channels/${C}/safety-warnings`; + SAFETY_WARNING_FALSE_POSITIVE: ( + channelId: C + ) => `/channels/${C}/safety-warning/report-false-positive`; + MY_CONTENT_INVENTORY: (id?: I) => `/content-inventory/users/@me${I extends string ? `?refresh_token=${I}` : ""}`; + CONTENT_INVENTORY_OUTBOX: (id: I) => `/content-inventory/users/${I}/outbox`; + DELETE_MY_CONTENT_INVENTORY_OUTBOX_ENTRY_HISTORY: ( + id: I + ) => `/content-inventory/users/@me/outbox/entries/id/${I}/history`; + MY_SPOTIFY_CONTENT_INVENTORY: "/content-inventory/users/@me/spotify"; + MY_CONTENT_INVENTORY_APPLICATION: (id: I) => `/content-inventory/users/@me/applications/${I}`; + TENURE_REWARD_SYNC: "/users/@me/tenure-reward/sync"; + STORE_LAYOUT: (id: I) => `/applications/${I}/store-layout`; + CHECKOUT_RECOVERY: "/users/@me/billing/checkout-recovery"; + CAMPAIGN_CONTEXT: "/users/@me/billing/campaign-context"; + SIMILAR_GAMES: (id: I) => `/content-inventory/users/@me/similar-games/${I}`; + VOICE_PUBLIC_KEYS: () => "/voice/public-keys"; + VOICE_MATCH_PUBLIC_KEY: (id: I) => `/voice/${I}/match-public-key`; + ACCOUNT_REVERT: "/auth/revert"; + GUILD_LEADERBOARD: (guildId: G, id: I) => `/guilds/${G}/leaderboards/${I}`; + UPDATE_MY_LOL_LEADERBOARD: () => "/users/@me/update-league-of-legends-leaderboard"; + GUILD_LEADERBOARD_SETTINGS: ( + guildId: G, + id: I + ) => `/guilds/${G}/leaderboards/${I}/settings`; + VIRTUAL_CURRENCY_SKU_REDEEM: (id: I) => `/virtual-currency/skus/${I}/redeem`; + VIRTUAL_CURRENCY_USER_BALANCE: "/users/@me/virtual-currency/balance"; + IGNORE_USER: (id: I) => `/users/@me/relationships/${I}/ignore`; + SCHEDULED_MESSAGES: "/users/@me/scheduled-messages"; + SCHEDULED_MESSAGE: (id: I) => `/users/@me/scheduled-messages/${I}`; +}; + +export enum MessageFlags { + CROSSPOSTED = 1 << 0, + IS_CROSSPOST = 1 << 1, + SUPPRESS_EMBEDS = 1 << 2, + SOURCE_MESSAGE_DELETED = 1 << 3, + URGENT = 1 << 4, + HAS_THREAD = 1 << 5, + EPHEMERAL = 1 << 6, + LOADING = 1 << 7, + FAILED_TO_MENTION_SOME_ROLES_IN_THREAD = 1 << 8, + GUILD_FEED_HIDDEN = 1 << 9, + SHOULD_SHOW_LINK_NOT_DISCORD_WARNING = 1 << 10, + SUPPRESS_NOTIFICATIONS = 1 << 12, + IS_VOICE_MESSAGE = 1 << 13, + HAS_SNAPSHOT = 1 << 14, + IS_UIKIT_COMPONENTS = 1 << 15, + SENT_BY_SOCIAL_LAYER_INTEGRATION = 1 << 16 +} + +export enum MessageTypes { + DEFAULT, + RECIPIENT_ADD, + RECIPIENT_REMOVE, + CALL, + CHANNEL_NAME_CHANGE, + CHANNEL_ICON_CHANGE, + CHANNEL_PINNED_MESSAGE, + USER_JOIN, + GUILD_BOOST, + GUILD_BOOST_TIER_1, + GUILD_BOOST_TIER_2, + GUILD_BOOST_TIER_3, + CHANNEL_FOLLOW_ADD, + GUILD_STREAM, + GUILD_DISCOVERY_DISQUALIFIED, + GUILD_DISCOVERY_REQUALIFIED, + GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING, + GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING, + THREAD_CREATED, + REPLY, + CHAT_INPUT_COMMAND, + THREAD_STARTER_MESSAGE, + GUILD_INVITE_REMINDER, + CONTEXT_MENU_COMMAND, + AUTO_MODERATION_ACTION, + ROLE_SUBSCRIPTION_PURCHASE, + INTERACTION_PREMIUM_UPSELL, + STAGE_START, + STAGE_END, + STAGE_SPEAKER, + STAGE_RAISE_HAND, + STAGE_TOPIC, + GUILD_APPLICATION_PREMIUM_SUBSCRIPTION, + PRIVATE_CHANNEL_INTEGRATION_ADDED, + PRIVATE_CHANNEL_INTEGRATION_REMOVED, + PREMIUM_REFERRAL, + GUILD_INCIDENT_ALERT_MODE_ENABLED, + GUILD_INCIDENT_ALERT_MODE_DISABLED, + GUILD_INCIDENT_REPORT_RAID, + GUILD_INCIDENT_REPORT_FALSE_ALARM, + GUILD_DEADCHAT_REVIVE_PROMPT, + CUSTOM_GIFT, + GUILD_GAMING_STATS_PROMPT, + PURCHASE_NOTIFICATION, + VOICE_HANGOUT_INVITE, + POLL_RESULT, + CHANGELOG, + NITRO_NOTIFICATION, + CHANNEL_LINKED_TO_LOBBY, + GIFTING_PROMPT, + IN_GAME_MESSAGE_NUX, + GUILD_JOIN_REQUEST_ACCEPT_NOTIFICATION, + GUILD_JOIN_REQUEST_REJECT_NOTIFICATION, + GUILD_JOIN_REQUEST_WITHDRAWN_NOTIFICATION, + HD_STREAMING_UPGRADED +} + +export const Permissions = { + CREATE_INSTANT_INVITE: 1n << 0n, + KICK_MEMBERS: 1n << 1n, + BAN_MEMBERS: 1n << 2n, + ADMINISTRATOR: 1n << 3n, + MANAGE_CHANNELS: 1n << 4n, + MANAGE_GUILD: 1n << 5n, + CHANGE_NICKNAME: 1n << 26n, + MANAGE_NICKNAMES: 1n << 27n, + MANAGE_ROLES: 1n << 28n, + MANAGE_WEBHOOKS: 1n << 29n, + MANAGE_GUILD_EXPRESSIONS: 1n << 30n, + CREATE_GUILD_EXPRESSIONS: 1n << 43n, + VIEW_AUDIT_LOG: 1n << 7n, + VIEW_CHANNEL: 1n << 10n, + VIEW_GUILD_ANALYTICS: 1n << 19n, + VIEW_CREATOR_MONETIZATION_ANALYTICS: 1n << 41n, + MODERATE_MEMBERS: 1n << 40n, + USE_EMBEDDED_ACTIVITIES: 1n << 39n, + USE_EXTERNAL_APPS: 1n << 50n, + SEND_MESSAGES: 1n << 11n, + SEND_TTS_MESSAGES: 1n << 12n, + MANAGE_MESSAGES: 1n << 13n, + EMBED_LINKS: 1n << 14n, + ATTACH_FILES: 1n << 15n, + READ_MESSAGE_HISTORY: 1n << 16n, + MENTION_EVERYONE: 1n << 17n, + USE_EXTERNAL_EMOJIS: 1n << 18n, + ADD_REACTIONS: 1n << 6n, + USE_APPLICATION_COMMANDS: 1n << 31n, + MANAGE_THREADS: 1n << 34n, + CREATE_PUBLIC_THREADS: 1n << 35n, + CREATE_PRIVATE_THREADS: 1n << 36n, + USE_EXTERNAL_STICKERS: 1n << 37n, + SEND_MESSAGES_IN_THREADS: 1n << 38n, + SEND_VOICE_MESSAGES: 1n << 46n, + USE_CLYDE_AI: 1n << 47n, + SEND_POLLS: 1n << 49n, + CONNECT: 1n << 20n, + SPEAK: 1n << 21n, + MUTE_MEMBERS: 1n << 22n, + DEAFEN_MEMBERS: 1n << 23n, + MOVE_MEMBERS: 1n << 24n, + USE_VAD: 1n << 25n, + PRIORITY_SPEAKER: 1n << 8n, + STREAM: 1n << 9n, + USE_SOUNDBOARD: 1n << 42n, + USE_EXTERNAL_SOUNDS: 1n << 45n, + SET_VOICE_CHANNEL_STATUS: 1n << 48n, + REQUEST_TO_SPEAK: 1n << 32n, + MANAGE_EVENTS: 1n << 33n, + CREATE_EVENTS: 1n << 44n +}; + +export enum PlatformTypes { + AMAZON_MUSIC = "amazon-music", + BATTLENET = "battlenet", + BLUESKY = "bluesky", + BUNGIE = "bungie", + CONTACTS = "contacts", + CRUNCHYROLL = "crunchyroll", + DOMAIN = "domain", + EBAY = "ebay", + EPIC_GAMES = "epicgames", + FACEBOOK = "facebook", + GITHUB = "github", + INSTAGRAM = "instagram", + LEAGUE_OF_LEGENDS = "leagueoflegends", + MASTODON = "mastodon", + PAYPAL = "paypal", + PLAYSTATION = "playstation", + PLAYSTATION_STAGING = "playstation-stg", + REDDIT = "reddit", + RIOT_GAMES = "riotgames", + ROBLOX = "roblox", + SAMSUNG = "samsung", + SKYPE = "skype", + SOUNDCLOUD = "soundcloud", + SPOTIFY = "spotify", + STEAM = "steam", + TIKTOK = "tiktok", + TWITCH = "twitch", + TWITTER = "twitter", + TWITTER_LEGACY = "twitter_legacy", + XBOX = "xbox", + YOUTUBE = "youtube" +} + +export enum RelationshipTypes { + BLOCKED = "BLOCKED", + ENABLED = "ENABLED", + NEVER = "NEVER" +} + +export type Routes = { + INDEX: "/"; + APP: "/app"; + APP_WITH_INVITE_AND_GUILD_ONBOARDING: (id: I) => `/app/invite-with-guild-onboarding/${I}`; + ACTIVITY: "/activity"; + ACTIVITIES: "/activities"; + ACTIVITIES_HAPPENING_NOW: "/activities/happening-now"; + ACTIVITY_DETAILS: (id: I) => `/activities/${I}`; + APPLICATION_LIBRARY: "/library"; + APPLICATION_LIBRARY_INVENTORY: "/library/inventory"; + APPLICATION_LIBRARY_ACTION: (id: I, action: A) => `/library/${I}/${A}`; + APPLICATION_LIBRARY_SETTINGS: "/library/settings"; + APPLICATION_STORE: "/store"; + APPLICATION_STORE_LISTING_SKU: ( + id: I, + action?: A + ) => A extends string ? `/store/skus/${I}/${A}` : `/store/skus/${I}`; + APPLICATION_STORE_LISTING_APPLICATION: ( + id: I, + action?: A + ) => A extends string ? `/store/applications/${I}/${A}` : `/store/applications/${I}`; + BILLING_PREFIX: "/billing"; + BILLING_LOGIN_HANDOFF: "/billing/login/handoff"; + BILLING_PREMIUM_SUBSCRIBE: "/billing/premium/subscribe"; + BILLING_PAYMENT_SOURCES_CREATE: "/billing/payment-sources/create"; + BILLING_PREMIUM_SWITCH_PLAN: "/billing/premium/switch-plan"; + BILLING_GUILD_SUBSCRIPTIONS_PURCHASE: "/billing/guild-subscriptions/purchase"; + BILLING_PAYMENTS: "/billing/payments"; + BILLING_PROMOTION_REDEMPTION: (id: I) => `/billing/promotions/${I}`; + BILLING_PROMOTION_REDEMPTION_GENERIC: "/billing/promotions"; + BILLING_PROMOTION_DIRECT_FULFILLMENT_REDEMPTION: ( + id: I, + id2: II + ) => `/billing/partner-promotions/${I}/${II}`; + NOTIFICATIONS: "/notifications"; + FRIENDS: "/channels/@me"; + ME: "/channels/@me"; + MESSAGE_REQUESTS: "/message-requests"; + CHANNEL: ( + guildId?: G, + channelId?: C, + id?: I + ) => C extends string ? (I extends string ? `/channels/${G}/${C}/${I}` : `/channels/${G}/${C}`) : `/channels/${G}`; + CHANNEL_THREAD_VIEW: ( + guildId: G, + channelId: C, + threadId: T, + id?: I + ) => I extends string ? `/channels/${G}/${C}/threads/${T}/${I}` : `/channels/${G}/${C}/threads/${T}`; + VOICE_CHAT_CHANNEL_PARTIAL: ( + voiceId: V, + id: I, + id2?: II + ) => II extends string ? `/voice/${V}/${I}/${II}` : `/voice/${V}/${I}`; + LOGIN: "/login"; + LOGIN_HANDOFF: "/login/handoff"; + REGISTER: "/register"; + DEFAULT_LOGGED_OUT: "/login"; + INVITE: (id: I) => `/invites/${I}`; + INVITE_LOGIN: (id: I) => `/invite/${I}/login`; + INVITE_REGISTER: (id: I) => `/invite/${I}/register`; + INVITE_PROXY: (id: I) => `/invite-proxy/${I}`; + GUILD_TEMPLATE: (id: I) => `/template/${I}`; + GUILD_TEMPLATE_LOGIN: (id: I) => `/template/${I}/login`; + GIFT_CODE: (id: I) => `/gifts/${I}`; + GIFT_CODE_LOGIN: (id: I) => `/gifts/${I}/login`; + WELCOME: ( + userId?: U, + id?: I + ) => I extends string ? `/welcome/${U}/${I}` : `/welcome/${U}`; + VERIFY: "/verify"; + VERIFY_REQUEST: "/verify-request"; + RESET: "/reset"; + APPS: "/apps"; + ACTIVATE: "/activate"; + ACTIVATE_HANDOFF: "/activate/handoff"; + CONNECTION_LINK: (id: I) => `/connections/${I}/link`; + CONNECTION_LINK_AUTHORIZE: (id: I) => `/connections/${I}/link-authorize`; + CONNECTIONS_SUCCESS: (id: I) => `/connections/${I}/success`; + CONNECTIONS_ERROR: (id: I) => `/connections/${I}/error`; + CONNECTIONS: (id: I) => `/connections/${I}`; + CONNECTIONS_AUTHORIZE_CONTINUE: (id: I) => `/connections/${I}/authorize-continue`; + CONNECT_AUTHORIZE: "/connect/authorize"; + OAUTH2_AUTHORIZE: "/oauth2/authorize"; + OAUTH2_AUTHORIZED: "/oauth2/authorized"; + OAUTH2_ERROR: "/oauth2/error"; + SETTINGS: (one: I, two?: II) => II extends string ? `/settings/${I}/${II}` : `/settings/${I}`; + SNOWSGIVING: "/snowsgiving"; + CHANGELOGS: (id: I) => I extends string ? `/settings/changelogs/${I}` : `/settings/changelogs`; + USERS: (id: I) => `/users/${I}`; + GUILD_CREATE: "/guilds/create"; + DISABLE_EMAIL_NOTIFICATIONS: "/disable-email-notifications"; + DISABLE_SERVER_HIGHLIGHT_NOTIFICATIONS: "/disable-server-highlight-notifications"; + USER_GUILD_NOTIFICATION_SETTINGS: (id: I) => `/guilds/${I}/notification-settings`; + AUTHORIZE_IP: "/authorize-ip"; + REJECT_IP: "/reject-ip"; + REJECT_MFA: "/reject-mfa"; + AUTHORIZE_PAYMENT: "/authorize-payment"; + HANDOFF: "/handoff"; + DOMAIN_MIGRATION: "/domain-migration"; + XBOX_EDU: "/connections/xbox/intro"; + XBOX_PIN: "/connections/xbox/pin"; + DOWNLOAD_QR_CODE_REDIRECT: "/download-qr-code"; + BILLING_POPUP_BRIDGE_CALLBACK: "/billing/popup-bridge/callback"; + OAUTH2_WHITELIST_ACCEPT: "/oauth2/allowlist/accept"; + GUILD_DISCOVERY: "/guild-discovery"; + GLOBAL_DISCOVERY: "/discovery"; + QUEST_HOME: "/discovery/quests"; + GLOBAL_DISCOVERY_SERVERS: "/discovery/servers"; + GLOBAL_DISCOVERY_APPS: "/discovery/applications"; + GLOBAL_DISCOVERY_APPS_CATEGORY: (id: I) => `/discovery/applications/categories/${I}`; + GLOBAL_DISCOVERY_APPS_PROFILE: (id: I) => `/discovery/applications/${I}`; + GLOBAL_DISCOVERY_APPS_PROFILE_SECTION: ( + one: I, + two: II + ) => `/discovery/applications/${I}/${II}`; + GLOBAL_DISCOVERY_APPS_PROFILE_STORE_SKU: ( + one: I, + two: II + ) => `/discovery/applications/${I}/store/${II}`; + GLOBAL_DISCOVERY_APPS_SEARCH: "/discovery/applications/search"; + GUILD_MEMBER_VERIFICATION: ( + one: I, + two?: II + ) => II extends string ? `/member-verification/${I}/${II}` : `/member-verification/${I}`; + GUILD_MEMBER_VERIFICATION_FOR_HUB: ( + one: I, + two?: II + ) => II extends string ? `/member-verification-for-hub/${I}/${II}` : `/member-verification-for-hub/${I}`; + POPOUT_WINDOW: "/popout"; + UPCOMING_STAGES: ( + guildId: G, + id?: I + ) => I extends string ? `/guild-stages/${G}/${I}` : `/guild-stages/${G}`; + VERIFY_HUB_EMAIL: "/verify-hub-email"; + OPEN_APP_FROM_EMAIL: "/open-app-from-email"; + BILLING_MANAGE_SUBSCRIPTION: "/billing/premium/manage"; + GUILD_BOOSTING_MARKETING: (guildId: G) => `/guilds/${G}/premium-guild-subscriptions`; + GUILD_SETTINGS: ( + guildId: G, + setting?: S, + id?: I + ) => S extends string + ? I extends string + ? `/guilds/${G}/settings/${S}/${I}` + : `/guilds/${G}/settings/${S}` + : `/guilds/${G}/settings`; + PICK_GUILD_SETTINGS: ( + setting?: S, + id?: I, + feature?: F + ) => S extends string + ? I extends string + ? `/guild/settings/${S}/${I}${F extends string ? `?feature=${F}` : ""}` + : `/guild/settings/${S}${F extends string ? `?feature=${F}` : ""}` + : `/guilds/settings${F extends string ? `?feature=${F}` : ""}`; + GUILD_EVENT_DETAILS: ( + event: E, + id: I, + id2?: II + ) => II extends string ? `/events/${E}/${I}/${II}` : `/events/${E}/${I}`; + FEATURE: (id: I) => `/feature/${I}`; + GUILD_JOIN_REQUEST: (guildId: G, id: I) => `/guilds/${G}/requests/${I}`; + MOBILE_WEB_HANDOFF: "/mweb-handoff"; + APPLICATION_DIRECTORY: "/application-directory"; + APPLICATION_DIRECTORY_PROFILE: (id: I) => `/application-directory/${I}`; + APPLICATION_DIRECTORY_PROFILE_SECTION: ( + one: I, + two: II + ) => `/application-directory/${I}/${II}`; + APPLICATION_DIRECTORY_PROFILE_STORE_SKU: ( + one: I, + two: II + ) => `/application-directory/${I}/store/${II}`; + APPLICATION_DIRECTORY_SEARCH: "/application-directory/search"; + FAMILY_CENTER: "/family-center"; + SERVER_SHOP: (guildId: G) => `/channels/${G}/shop`; + GUILD_PRODUCT: (guildId: G, id: I) => `/channels/${G}/shop/${I}`; + REPORT: "/report"; + REPORT_SECOND_LOOK: "/report-review"; + COLLECTIBLES_SHOP: "/shop"; + COLLECTIBLES_SHOP_FULLSCREEN: "/shop/fullscreen"; + COLLECTIBLES_SHOP_PRODUCT_DETAIL: (id: I) => `/shop/product/${I}`; + NITRO_HOME: "/store"; + ACCOUNT_STANDING: "/account-standing"; + CHANNEL_SUMMARIES: (guildId: G) => `/channels/${G}/summaries`; + CHANNEL_SUMMARY: (guildID: G, id: I) => `/channels/${G}/summaries/${I}`; + USER_SUMMARIES: "/users/@me/summaries"; + QUESTS: (id: I) => `/quests/${I}`; + ACCOUNT_REVERT: (id: I) => `/wasntme/${I}`; +}; + +export enum StatusTypes { + DND = "dnd", + IDLE = "idle", + INVISIBLE = "invisible", + OFFLINE = "offline", + ONLINE = "online", + STREAMING = "streaming", + UNKNOWN = "unknown" +} + +export enum Themes { + DARK = "dark", + DARKER = "darker", + LIGHT = "light", + MIDNIGHT = "midnight" +} + +export enum UserSettingsSections { + ACCESSIBILITY = "Accessibility", + ACCOUNT = "My Account", + ACCOUNT_BACKUP_CODES = "Backup Codes", + ACCOUNT_CHANGE_PASSWORD = "Change Password", + ACCOUNT_CHANGE_USERNAME = "Change Username", + ACCOUNT_CONFIRM_PASSWORD = "Confirm Password", + ACCOUNT_CONFIRM_VIEW_BACKUP_CODES = "Backup Codes", + ACCOUNT_STANDING = "Account Standing", + ACTIVITY_PRIVACY = "Activity Privacy", + ADVANCED = "Advanced", + APPEARANCE = "Appearance", + APPEARANCE_THEME_PICKER = "Appearance Theme Picker", + APP_ICONS = "App Icons", + AUTHORIZED_APPS = "Authorized Apps", + BILLING = "Billing", + BLOCKED_USERS = "Blocked Users", + BLOCKED_USERS_V2 = "Blocked Users V2", + BROWSER = "Browser", + CHANGE_LOG = "Change Log", + CHECK_NATIVE_UPDATE = "Check For Native Update", + CLIPS = "Settings Clips", + COLLECTIBLES_SHOP = "Shop", + COLLECTIBLES_SHOP_VIEW_ALL_CATEGORY_ITEMS = "Collectibles Shop View All Category Items", + COMMUNITY_ALERTS = "Community Alerts Settings", + CONNECTIONS = "Connections", + CONNECTIONS_XBOX = "Connections Xbox", + CONTENT_AND_SOCIAL = "Content & Social", + CUSTOM_STATUS = "Custom Status", + CUSTOM_STATUS_EMOJI_PICKER = "Custom Status Emoji Picker", + DATA = "Data", + DATA_AND_PRIVACY = "Data & Privacy", + DESIGN_SYSTEM = "Design System", + DESIGN_SYSTEMS = "Design System", + DESIGN_SYSTEM_ALERT_MODAL = "Design System (Alert Modal)", + DESIGN_SYSTEM_BACKDROP = "Design Systems (Backdrop)", + DESIGN_SYSTEM_BACKGROUND_BLUR_VIEW = "Design System (Background Blur View)", + DESIGN_SYSTEM_BUTTON = "Design System (Button)", + DESIGN_SYSTEM_BUTTON_GROUP = "Design System (Button Group)", + DESIGN_SYSTEM_COACHMARK = "Design System (Coachmark)", + DESIGN_SYSTEM_CONTEXT_MENU = "Design System (Context Menu)", + DESIGN_SYSTEM_EXPERIMENTAL_BUTTONS = "Design System (Experimental Buttons)", + DESIGN_SYSTEM_FORM_PRIMITIVES = "Design Systems (Form Primitives)", + DESIGN_SYSTEM_MODAL = "Design System (Modal)", + DESIGN_SYSTEM_PILE = "Design Systems (Pile)", + DESIGN_SYSTEM_ROW_BUTTON = "Design System (Row Button)", + DESIGN_SYSTEM_SEGMENTED_CONTROL = "Design System (Segmented Control)", + DESIGN_SYSTEM_SHADOWS = "Design System (Shadows)", + DESIGN_SYSTEM_SHEETS = "Design Systems (Sheets)", + DESIGN_SYSTEM_STACK = "Design Systems (Stack)", + DESIGN_SYSTEM_TABLE_ROW = "Design System (Table Row)", + DESIGN_SYSTEM_TABS = "Design System (Tabs)", + DESIGN_SYSTEM_TEXT = "Design System (Text)", + DESIGN_SYSTEM_TEXT_INPUT = "Design System (Text Input)", + DESIGN_SYSTEM_TOAST = "Design System (Toast)", + DESIGN_SYSTEM_TOOLTIP = "Design System (Tooltip)", + DESKTOP_APP = "Desktop Only", + DEVELOPER_OPTIONS = "Developer Options", + DISMISSIBLE_CONTENT_OPTIONS = "Dismissible Content Options", + EMAILS = "Email Settings", + EXPERIMENTS = "Experiments", + FAMILY_CENTER = "Family Center", + FRIEND_REQUESTS = "Friend Requests", + GAMES = "Games", + GUILD_BOOSTING = "Nitro Server Boost", + GUILD_ROLE_SUBSCRIPTIONS = "Guild Role Subscription", + GUILD_ROLE_SUBSCRIPTIONS_CANCEL = "Guild Role Subscription Cancel", + HIGHLIGHT_NOTIFICATIONS = "Highlight notification settings", + HOTSPOT_OPTIONS = "Hotspot Options", + HYPESQUAD_ONLINE = "Hypesquad Online", + IGNORED_USERS = "Ignored Users", + INSTALL_NATIVE_UPDATE = "Install Native Build", + INTL_TESTING = "Intl Testing", + INVENTORY = "Library Inventory", + KEYBINDS = "Keybinds", + LINUX = "Linux", + LOCALE = "Language", + NOTIFICATIONS = "Notifications", + OVERLAY = "Overlay", + OVERVIEW = "Overview", + PAYMENT_FLOW_MODAL_TEST_PAGE = "Payment Flow Modals", + POGGERMODE = "Powermode Settings", + PREMIUM = "Discord Nitro", + PREMIUM_GIFTING = "Nitro Gifting", + PREMIUM_MANAGE_PLAN = "Manage Nitro Plan", + PREMIUM_PLAN_SELECT = "Discord Premium Plan Select", + PRIVACY_AND_SAFETY = "Privacy & Safety", + PROFILE_CUSTOMIZATION = "Profile Customization", + PROFILE_CUSTOMIZATION_TRY_IT_OUT = "Profile Customization Try It Out", + PROFILE_EFFECTS_PREVIEW_TOOL = "Profile Effects Preview Tool", + QUESTS = "Quests", + QUEST_PREVIEW_TOOL = "Quest Preview Tool", + REGISTERED_GAMES = "Game Activity", + REVENUE_STORYBOOK_PAGE = "Revenue Storybook", + ROLE_SUBSCRIPTIONS = "Guild Role Subscription", + SECURE_FRAMES = "Secure Frames", + SECURE_FRAMES_VERIFIED_DEVICES = "Secure Frames Verified Devices", + SESSIONS = "Sessions", + SOUNDS = "Sounds", + STREAMER_MODE = "Streamer Mode", + SUBSCRIPTIONS = "Subscriptions", + TEXT = "Text & Images", + TEXT_COMPONENT = "Text Component", + TEXT_PLAYGROUND = "Text Playground", + TOWNHALL = "Townhall", + VOICE = "Voice & Video", + WEBAUTHN_VIEW = "View Security Keys", + WEB_SETTING_TREE_TOOL = "Web Setting Tree Tool", + WINDOWS = "Windows" +} + +export enum UserFlags { + STAFF = 1 << 0, + PARTNER = 1 << 1, + HYPESQUAD = 1 << 2, + BUG_HUNTER_LEVEL_1 = 1 << 3, + MFA_SMS = 1 << 4, + PREMIUM_PROMO_DISMISSED = 1 << 5, + HYPESQUAD_ONLINE_HOUSE_1 = 1 << 6, + HYPESQUAD_ONLINE_HOUSE_2 = 1 << 7, + HYPESQUAD_ONLINE_HOUSE_3 = 1 << 8, + PREMIUM_EARLY_SUPPORTER = 1 << 9, + HAS_UNREAD_URGENT_MESSAGES = 1 << 13, + BUG_HUNTER_LEVEL_2 = 1 << 14, + VERIFIED_BOT = 1 << 16, + VERIFIED_DEVELOPER = 1 << 17, + CERTIFIED_MODERATOR = 1 << 18, + BOT_HTTP_INTERACTIONS = 1 << 19, + SPAMMER = 1 << 20, + DISABLE_PREMIUM = 1 << 21, + ACTIVE_DEVELOPER = 1 << 22, + PROVISIONAL_ACCOUNT = 1 << 23, + QUARANTINED = 17592186044416, // 1 << 44 + COLLABORATOR = 0x4000000000000, // 1 << 50 + RESTRICTED_COLLABORATOR = 0x8000000000000 // 1 << 51 +} + +type Exports = { + ActivityFlags: typeof ActivityFlags; + ActivityTypes: typeof ActivityTypes; + AnalyticsLocations: typeof AnalyticsLocations; + ChannelLayouts: typeof ChannelLayouts; + ChannelModes: typeof ChannelModes; + ChannelTypes: typeof ChannelTypes; + ChannelStreamTypes: typeof ChannelStreamTypes; + ComponentActions: typeof ComponentActions; + DEFAULT_ROLE_COLOR: DEFAULT_ROLE_COLOR; + Endpoints: Endpoints; + MessageFlags: typeof MessageFlags; + MessageTypes: typeof MessageTypes; + Permissions: Permissions; + PlatformTypes: typeof PlatformTypes; + RelationshipTypes: typeof RelationshipTypes; + Routes: Routes; + StatusTypes: typeof StatusTypes; + Themes: typeof Themes; + UserSettingsSections: typeof UserSettingsSections; + UserFlags: typeof UserFlags; +}; +export default Exports; + register((moonmap) => { const name = "discord/Constants"; moonmap.register({ @@ -79,14 +1922,17 @@ register((moonmap) => { find: "DND" }); moonmap.addExport(name, "Themes", { - type: ModuleExportType.KeyValuePair, - key: "DARK", - value: "dark" + type: ModuleExportType.Key, + find: "MIDNIGHT" }); moonmap.addExport(name, "UserSettingsSections", { type: ModuleExportType.Key, find: "CHANGE_LOG" }); + moonmap.addExport(name, "UserFlags", { + type: ModuleExportType.Key, + find: "SPAMMER" + }); return true; } diff --git a/src/mappings/discord/Dispatcher.ts b/src/mappings/discord/Dispatcher.ts index a462e75..39dd297 100644 --- a/src/mappings/discord/Dispatcher.ts +++ b/src/mappings/discord/Dispatcher.ts @@ -25,6 +25,11 @@ type Dispatcher = OrigDispatcher & { addDependencies: (id: string, deps: string[]) => void; }; +type Exports = { + default: Dispatcher; +}; +export default Exports; + register((moonmap) => { const name = "discord/Dispatcher"; moonmap.register({ @@ -37,5 +42,3 @@ register((moonmap) => { } }); }); - -export default Dispatcher; diff --git a/src/mappings/discord/actions/ContextMenuActionCreators.ts b/src/mappings/discord/actions/ContextMenuActionCreators.ts index e1d90b6..8685c59 100644 --- a/src/mappings/discord/actions/ContextMenuActionCreators.ts +++ b/src/mappings/discord/actions/ContextMenuActionCreators.ts @@ -1,15 +1,13 @@ import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; -type ContextMenuActionCreators = { +type Exports = { closeContextMenu: () => void; // TODO: these have some extra args - openContextMenu: ( - event: React.SyntheticEvent, - element: () => React.ReactNode - ) => void; + openContextMenu: (event: React.SyntheticEvent, element: () => React.ReactNode) => void; openContextMenuLazy: Function; }; +export default Exports; register((moonmap) => { const name = "discord/actions/ContextMenuActionCreators"; @@ -36,5 +34,3 @@ register((moonmap) => { } }); }); - -export default ContextMenuActionCreators; diff --git a/src/mappings/discord/actions/MessageActionCreators.ts b/src/mappings/discord/actions/MessageActionCreators.ts index ffe4dee..4aa5d64 100644 --- a/src/mappings/discord/actions/MessageActionCreators.ts +++ b/src/mappings/discord/actions/MessageActionCreators.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/actions/UserProfileModalActionCreators.ts b/src/mappings/discord/actions/UserProfileModalActionCreators.ts index 6f0fe07..1f4b5c9 100644 --- a/src/mappings/discord/actions/UserProfileModalActionCreators.ts +++ b/src/mappings/discord/actions/UserProfileModalActionCreators.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/actions/UserSettingsModalActionCreators.ts b/src/mappings/discord/actions/UserSettingsModalActionCreators.ts index 8fbcb76..989c3d8 100644 --- a/src/mappings/discord/actions/UserSettingsModalActionCreators.ts +++ b/src/mappings/discord/actions/UserSettingsModalActionCreators.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; export type UserSettingsOpenOptions = { @@ -16,33 +15,23 @@ export type AccountChanges = { }; export type UserSettingsModalActionCreators = { - open: ( - section?: string, - subsection?: string, - options?: UserSettingsOpenOptions - ) => void; - init: ( - section?: string, - subsection?: string, - options?: UserSettingsOpenOptions - ) => void; + open: (section?: string, subsection?: string, options?: UserSettingsOpenOptions) => void; + init: (section?: string, subsection?: string, options?: UserSettingsOpenOptions) => void; close: () => void; - setSection: ( - section: string, - subsection?: string, - options?: UserSettingsOpenOptions - ) => void; + setSection: (section: string, subsection?: string, options?: UserSettingsOpenOptions) => void; clearSubsection: (section: string) => void; clearScrollPosition: (section: string) => void; updateAccount: (settings: any) => void; submitComplete: () => void; reset: () => void; - saveAccountChanges: ( - changes: AccountChanges, - options: { close: boolean } - ) => any; + saveAccountChanges: (changes: AccountChanges, options: { close: boolean }) => any; }; +type Exports = { + default: UserSettingsModalActionCreators; +}; +export default Exports; + register((moonmap) => { const name = "discord/actions/UserSettingsModalActionCreators"; moonmap.register({ @@ -55,5 +44,3 @@ register((moonmap) => { } }); }); - -export default UserSettingsModalActionCreators; diff --git a/src/mappings/discord/components/common/Alerts.ts b/src/mappings/discord/components/common/Alerts.ts new file mode 100644 index 0000000..7394429 --- /dev/null +++ b/src/mappings/discord/components/common/Alerts.ts @@ -0,0 +1,40 @@ +import register from "../../../../registry"; + +export type AlertProps = { + title: string; + body: string; + confirmText: string; + cancelText: string; + confirmColor?: string; + onConfirm: () => void; + onCancel: () => void; + secondaryConfirmText?: string; + onConfirmSecondary?: () => void; + className?: string; + titleClassName?: string; + contextKey?: any; +}; + +export type Alerts = { + show: (props: AlertProps) => void; + close: () => void; + confirm: (props: AlertProps) => Promise; +}; + +type Exports = { + default: Alerts; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/components/common/Alerts"; + moonmap.register({ + name, + find: ".trackAnnouncementMessageLinkClicked({messageId:", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/components/common/BaseHeaderBar.ts b/src/mappings/discord/components/common/BaseHeaderBar.ts index 4cadd9b..945cc33 100644 --- a/src/mappings/discord/components/common/BaseHeaderBar.ts +++ b/src/mappings/discord/components/common/BaseHeaderBar.ts @@ -71,6 +71,11 @@ export type BaseHeaderBar = ComponentType & { Caret: Caret; }; +type Exports = { + default: BaseHeaderBar; +}; +export default Exports; + register((moonmap) => { const name = "discord/components/common/BaseHeaderBar"; moonmap.register({ @@ -92,5 +97,3 @@ register((moonmap) => { } }); }); - -export default BaseHeaderBar; diff --git a/src/mappings/discord/components/common/FileUpload.ts b/src/mappings/discord/components/common/FileUpload.ts new file mode 100644 index 0000000..efcab54 --- /dev/null +++ b/src/mappings/discord/components/common/FileUpload.ts @@ -0,0 +1,41 @@ +import { ComponentType } from "react"; +import register from "../../../../registry"; + +export type OAuth2Response = { + application?: any; + guild?: any; + location: string; +}; + +export type FileFilter = { + name: string; + extensions: string[]; +}; + +export type FileUploadProps = { + buttonText: string; + placeholder: string; + onFileSelect: (file: File) => void; + filename?: string; + className?: string; + filters: FileFilter[]; +}; + +// Lazy on the types here since it's hard to test, don't want to spam oauth endpoints +type Exports = { + default: React.FC; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/components/common/FileUpload"; + moonmap.register({ + name, + find: "fileUploadInput,", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/components/common/FormSwitch.css.ts b/src/mappings/discord/components/common/FormSwitch.css.ts index 9fd0661..374ea45 100644 --- a/src/mappings/discord/components/common/FormSwitch.css.ts +++ b/src/mappings/discord/components/common/FormSwitch.css.ts @@ -1,6 +1,6 @@ import register from "../../../../registry"; -type FormSwitchCSS = { +type Exports = { container: string; labelRow: string; control: string; @@ -10,6 +10,7 @@ type FormSwitchCSS = { disabledText: string; dividerDefault: string; }; +export default Exports; register((moonmap) => { const name = "discord/components/common/FormSwitch.css"; @@ -23,5 +24,3 @@ register((moonmap) => { } }); }); - -export default FormSwitchCSS; diff --git a/src/mappings/discord/components/common/HeaderBar.css.ts b/src/mappings/discord/components/common/HeaderBar.css.ts index 9e79232..bbd34ae 100644 --- a/src/mappings/discord/components/common/HeaderBar.css.ts +++ b/src/mappings/discord/components/common/HeaderBar.css.ts @@ -1,6 +1,6 @@ import register from "../../../../registry"; -export type HeaderBarCSS = { +type Exports = { caret: string; children: string; clickable: string; @@ -23,6 +23,7 @@ export type HeaderBarCSS = { transparent: string; upperContainer: string; }; +export default Exports; register((moonmap) => { const name = "discord/components/common/HeaderBar.css"; @@ -36,5 +37,3 @@ register((moonmap) => { } }); }); - -export default HeaderBarCSS; diff --git a/src/mappings/discord/components/common/HelpMessage.css.ts b/src/mappings/discord/components/common/HelpMessage.css.ts index 3d5e504..b96d3f1 100644 --- a/src/mappings/discord/components/common/HelpMessage.css.ts +++ b/src/mappings/discord/components/common/HelpMessage.css.ts @@ -1,6 +1,6 @@ import register from "../../../../registry"; -type HelpMessageCSS = { +type Exports = { container: string; icon: string; iconDiv: string; @@ -10,6 +10,7 @@ type HelpMessageCSS = { info: string; error: string; }; +export default Exports; register((moonmap) => { const name = "discord/components/common/HelpMessage.css"; @@ -23,5 +24,3 @@ register((moonmap) => { } }); }); - -export default HelpMessageCSS; diff --git a/src/mappings/discord/components/common/Scroller.css.ts b/src/mappings/discord/components/common/Scroller.css.ts new file mode 100644 index 0000000..ab2ac50 --- /dev/null +++ b/src/mappings/discord/components/common/Scroller.css.ts @@ -0,0 +1,28 @@ +import register from "../../../../registry"; + +type Exports = { + auto: string; + content: string; + customTheme: string; + disableScrollAnchor: string; + fade: string; + managedReactiveScroller: string; + none: string; + pointerCover: string; + scrolling: string; + thin: string; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/components/common/Scroller.css"; + moonmap.register({ + name, + find: "managedReactiveScroller:", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/components/common/index.ts b/src/mappings/discord/components/common/index.ts index 4e22972..e3dc321 100644 --- a/src/mappings/discord/components/common/index.ts +++ b/src/mappings/discord/components/common/index.ts @@ -20,14 +20,7 @@ import { FunctionNames, ComponentNames, IconNames } from "./_indexNames"; type Modify = Pick> & R; // #region Icons -export type IconSize = - | "xxs" - | "xs" - | "sm" - | "md" - | "lg" - | "custom" - | "refresh_sm"; +export type IconSize = "xxs" | "xs" | "sm" | "md" | "lg" | "custom" | "refresh_sm"; export type IconProps = { size?: IconSize; @@ -70,8 +63,7 @@ export type TextInputProps = Modify< } >; -export interface TextInput - extends ComponentClass> { +export interface TextInput extends ComponentClass> { Sizes: typeof TextInputSizes; } // #endregion @@ -144,7 +136,7 @@ interface FormText style?: CSSProperties; }> > { - Types: FormTextTypes; + Types: typeof FormTextTypes; } // #endregion @@ -367,10 +359,7 @@ export type SelectInteraction = { updated?: Set; }; -export type SelectInteractionCallback = ( - newValue: SelectOption, - oldValue: SelectOption -) => SelectInteraction; +export type SelectInteractionCallback = (newValue: SelectOption, oldValue: SelectOption) => SelectInteraction; export type SelectProps = { value: Set; @@ -391,19 +380,14 @@ export enum ModalTransitionState { export type ModalProps = PropsWithoutRef<{ transitionState?: ModalTransitionState; + onClose: () => void; }>; export type ModalCallback = (props: ModalProps) => React.ReactNode; // #endregion // #region Tooltip -export type LayerPosition = - | "top" - | "bottom" - | "left" - | "right" - | "center" - | "window_center"; +export type LayerPosition = "top" | "bottom" | "left" | "right" | "center" | "window_center"; export type LayerAlign = "top" | "bottom" | "center"; export enum TooltipColors { @@ -751,24 +735,18 @@ export type MenuControlItem = ComponentType< }> >; -export type Menu = ComponentType< - PropsWithChildren<{ - className?: string; - navId: string; - variant?: string; - hideScroller?: boolean; - onClose?: () => void; - onSelect?: () => void; - }> ->; +export type MenuProps = { + className?: string; + navId: string; + variant?: string; + hideScroller?: boolean; + onClose?: () => void; + onSelect?: () => void; +}; + +export type Menu = ComponentType>; -export type MenuElement = - | MenuSeparator - | MenuGroup - | MenuItem - | MenuCheckboxItem - | MenuRadioItem - | MenuControlItem; +export type MenuElement = MenuSeparator | MenuGroup | MenuItem | MenuCheckboxItem | MenuRadioItem | MenuControlItem; // #endregion // #startregion Unsorted @@ -976,7 +954,7 @@ type UntypedFunctions = Record; // TODO: wtaf is up with react types not working in jsx // FIXME: tsc doesnt see [index: string]: any; -type CommonComponents = IconComponents & +type Exports = IconComponents & UntypedComponents & UntypedFunctions & UnsortedComponentTypes & @@ -1024,6 +1002,7 @@ type CommonComponents = IconComponents & disabled?: boolean; required?: boolean; error?: string; + style?: CSSProperties; }> >; FormSwitch: ComponentClass< @@ -1035,7 +1014,7 @@ type CommonComponents = IconComponents & hideBorder?: boolean; tooltipNote?: string; onChange?: (value: boolean) => void; - note?: string; + note?: React.ReactNode; disabledText?: string; }> >; @@ -1139,13 +1118,7 @@ type CommonComponents = IconComponents & position?: string; onRequestOpen?: () => void; onRequestClose?: () => void; - align?: - | "top" - | "bottom" - | "left" - | "right" - | "center" - | "window_center"; + align?: "top" | "bottom" | "left" | "right" | "center" | "window_center"; autoInvert?: boolean; fixed?: boolean; nudgeAlignIntoViewport?: boolean; @@ -1192,7 +1165,6 @@ type CommonComponents = IconComponents & style?: CSSProperties; "aria-label"?: string; orientation?: "horizontal" | "vertical"; - selectedItem: any; onItemSelect: (id: any) => void; look?: string; @@ -1266,10 +1238,7 @@ type CommonComponents = IconComponents & PropsWithChildren<{ activeId: string; breadcrumbs: Breadcrumb[]; - renderCustomBreadcrumb?: ( - breadcrumb: Breadcrumb, - last: boolean - ) => ReactNode; + renderCustomBreadcrumb?: (breadcrumb: Breadcrumb, last: boolean) => ReactNode; onBreadcrumbClick?: (breadcrumb: Breadcrumb) => void; className?: string; separatorClassName?: string; @@ -1314,6 +1283,7 @@ type CommonComponents = IconComponents & closeModal: (id: string) => void; useModalsStore: any; }; +export default Exports; register((moonmap) => { const name = "discord/components/common/index"; @@ -1327,5 +1297,3 @@ register((moonmap) => { } }); }); - -export default CommonComponents; diff --git a/src/mappings/discord/components/modals/ConfirmModal.ts b/src/mappings/discord/components/modals/ConfirmModal.ts index 6f3f295..2602e15 100644 --- a/src/mappings/discord/components/modals/ConfirmModal.ts +++ b/src/mappings/discord/components/modals/ConfirmModal.ts @@ -16,6 +16,12 @@ export type ConfirmModalProps = { transitionState?: ModalTransitionState; titleClassName?: string; }; +export type ConfirmModal = ComponentType; + +type Exports = { + default: ConfirmModal; +}; +export default Exports; register((moonmap) => { const name = "discord/components/modals/ConfirmModal"; @@ -29,6 +35,3 @@ register((moonmap) => { } }); }); - -type ConfirmModal = ComponentType; -export default ConfirmModal; diff --git a/src/mappings/discord/lib/BaseRecord.ts b/src/mappings/discord/lib/BaseRecord.ts new file mode 100644 index 0000000..7bf39f3 --- /dev/null +++ b/src/mappings/discord/lib/BaseRecord.ts @@ -0,0 +1,27 @@ +import register from "../../../registry"; + +export declare class BaseRecord { + toJS(): this; + set(key: string, value: unknown): this; + merge(record: this): this; + update(key: string, defaultValue: unknown, reducer: (value: unknown) => unknown): this; + update(key: string, reducer: (value: unknown) => unknown): this; +} + +type Exports = { + default: BaseRecord; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/lib/BaseRecord"; + moonmap.register({ + name, + find: "{toJS(){return{...this}}set(", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/lib/ChannelMessages.ts b/src/mappings/discord/lib/ChannelMessages.ts index caa7a4d..e667535 100644 --- a/src/mappings/discord/lib/ChannelMessages.ts +++ b/src/mappings/discord/lib/ChannelMessages.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/lib/web/Storage.ts b/src/mappings/discord/lib/web/Storage.ts index 00460dd..4edd6c0 100644 --- a/src/mappings/discord/lib/web/Storage.ts +++ b/src/mappings/discord/lib/web/Storage.ts @@ -1,6 +1,34 @@ import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; +export declare class ObjectStorage { + storage: Record; + + get(key: string, defaultValue: string): any; + set(key: string, value: any): void; + remove(key: string): void; + clear(): void; + stringify(): string; + /** + * This function tries to query `localStorage`, even as a normal ObjectStorage class. + */ + asyncGetRaw(key: string, defaultValue: string): string; + /** + * This function tries to query `localStorage`, even as a normal ObjectStorage class. + */ + setRaw(key: string, value: string): void; + getAfterRefresh(key: string): string; +} + +type Exports = { + ObjectStorage: typeof ObjectStorage; + /** + * Equivalent to `window.localStorage`. If `window.localStorage` does exist, it is technically a wrapper class without `this.storage` + */ + impl: ObjectStorage; +}; +export default Exports; + register((moonmap) => { const name = "discord/lib/web/Storage"; moonmap.register({ diff --git a/src/mappings/discord/modules/a11y/AccessibilityStore.ts b/src/mappings/discord/modules/a11y/AccessibilityStore.ts index c48b0ba..cc421c0 100644 --- a/src/mappings/discord/modules/a11y/AccessibilityStore.ts +++ b/src/mappings/discord/modules/a11y/AccessibilityStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/age_gate/web/components/AgeGate.css.ts b/src/mappings/discord/modules/age_gate/web/components/AgeGate.css.ts index d205637..3327e38 100644 --- a/src/mappings/discord/modules/age_gate/web/components/AgeGate.css.ts +++ b/src/mappings/discord/modules/age_gate/web/components/AgeGate.css.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/age_gate/web/components/AgeGate.ts b/src/mappings/discord/modules/age_gate/web/components/AgeGate.ts index 77f0eca..a4058a0 100644 --- a/src/mappings/discord/modules/age_gate/web/components/AgeGate.ts +++ b/src/mappings/discord/modules/age_gate/web/components/AgeGate.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/application_commands/ApplicationCommandBuiltIns.ts b/src/mappings/discord/modules/application_commands/ApplicationCommandBuiltIns.ts index a6ca36b..5d53717 100644 --- a/src/mappings/discord/modules/application_commands/ApplicationCommandBuiltIns.ts +++ b/src/mappings/discord/modules/application_commands/ApplicationCommandBuiltIns.ts @@ -2,8 +2,7 @@ import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { - const name = - "discord/modules/application_commands/ApplicationCommandBuiltIns"; + const name = "discord/modules/application_commands/ApplicationCommandBuiltIns"; moonmap.register({ name, find: ["BUILT_IN,get name"], diff --git a/src/mappings/discord/modules/applications/ApplicationStore.ts b/src/mappings/discord/modules/applications/ApplicationStore.ts index eb4873c..2256a86 100644 --- a/src/mappings/discord/modules/applications/ApplicationStore.ts +++ b/src/mappings/discord/modules/applications/ApplicationStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/build_overrides/web/BuildOverride.css.ts b/src/mappings/discord/modules/build_overrides/web/BuildOverride.css.ts index d323776..664b9db 100644 --- a/src/mappings/discord/modules/build_overrides/web/BuildOverride.css.ts +++ b/src/mappings/discord/modules/build_overrides/web/BuildOverride.css.ts @@ -1,6 +1,6 @@ import register from "../../../../../registry"; -type BuildOverrideCSS = { +type Exports = { wrapper: string; titleRegion: string; title: string; @@ -21,6 +21,7 @@ type BuildOverrideCSS = { buttonLoader: string; disabledButtonOverride: string; }; +export default Exports; register((moonmap) => { const name = "discord/modules/build_overrides/web/BuildOverride.css"; @@ -34,5 +35,3 @@ register((moonmap) => { } }); }); - -export default BuildOverrideCSS; diff --git a/src/mappings/discord/modules/calls/ChannelRTCStore.ts b/src/mappings/discord/modules/calls/ChannelRTCStore.ts index cf006d1..ecbe37a 100644 --- a/src/mappings/discord/modules/calls/ChannelRTCStore.ts +++ b/src/mappings/discord/modules/calls/ChannelRTCStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/discovery/web/Discovery.css.ts b/src/mappings/discord/modules/discovery/web/Discovery.css.ts index 5f63bc9..09c3bbb 100644 --- a/src/mappings/discord/modules/discovery/web/Discovery.css.ts +++ b/src/mappings/discord/modules/discovery/web/Discovery.css.ts @@ -1,6 +1,6 @@ import register from "../../../../../registry"; -export type DiscoveryCSS = { +type Exports = { header: string; headerImage: string; headerImageSimple: string; @@ -18,6 +18,7 @@ export type DiscoveryCSS = { tabBarItem: string; sectionHeader: string; }; +export default Exports; register((moonmap) => { const name = "discord/modules/discovery/web/Discovery.css"; @@ -31,5 +32,3 @@ register((moonmap) => { } }); }); - -export default DiscoveryCSS; diff --git a/src/mappings/discord/modules/emojis/EmojiStore.ts b/src/mappings/discord/modules/emojis/EmojiStore.ts index 63ce0fa..d0de77f 100644 --- a/src/mappings/discord/modules/emojis/EmojiStore.ts +++ b/src/mappings/discord/modules/emojis/EmojiStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/experiments/ExperimentStore.ts b/src/mappings/discord/modules/experiments/ExperimentStore.ts index fb9f56e..c6599f9 100644 --- a/src/mappings/discord/modules/experiments/ExperimentStore.ts +++ b/src/mappings/discord/modules/experiments/ExperimentStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/forums/web/Forums.css.ts b/src/mappings/discord/modules/forums/web/Forums.css.ts index e0d4b2f..8b7be69 100644 --- a/src/mappings/discord/modules/forums/web/Forums.css.ts +++ b/src/mappings/discord/modules/forums/web/Forums.css.ts @@ -1,6 +1,6 @@ import register from "../../../../../registry"; -export type ForumsCSS = { +type Exports = { container: string; uploadArea: string; label: string; @@ -59,6 +59,7 @@ export type ForumsCSS = { countText: string; optInNotice: string; }; +export default Exports; register((moonmap) => { const name = "discord/modules/forums/web/Forums.css"; @@ -72,5 +73,3 @@ register((moonmap) => { } }); }); - -export default ForumsCSS; diff --git a/src/mappings/discord/modules/forums/web/Header.css.ts b/src/mappings/discord/modules/forums/web/Header.css.ts index 3865bde..cd55697 100644 --- a/src/mappings/discord/modules/forums/web/Header.css.ts +++ b/src/mappings/discord/modules/forums/web/Header.css.ts @@ -1,6 +1,6 @@ import register from "../../../../../registry"; -export type HeaderCSS = { +type Exports = { container: string; header: string; headerLeft: string; @@ -13,6 +13,7 @@ export type HeaderCSS = { row: string; separator: string; }; +export default Exports; register((moonmap) => { const name = "discord/modules/forums/web/Header.css"; @@ -26,5 +27,3 @@ register((moonmap) => { } }); }); - -export default HeaderCSS; diff --git a/src/mappings/discord/modules/forums/web/SortMenu.css.ts b/src/mappings/discord/modules/forums/web/SortMenu.css.ts index 9ab1ffb..37d3877 100644 --- a/src/mappings/discord/modules/forums/web/SortMenu.css.ts +++ b/src/mappings/discord/modules/forums/web/SortMenu.css.ts @@ -1,9 +1,10 @@ import register from "../../../../../registry"; -export type SortMenuCSS = { +type Exports = { container: string; clearText: string; }; +export default Exports; register((moonmap) => { const name = "discord/modules/forums/web/SortMenu.css"; @@ -17,5 +18,3 @@ register((moonmap) => { } }); }); - -export default SortMenuCSS; diff --git a/src/mappings/discord/modules/forums/web/Tag.ts b/src/mappings/discord/modules/forums/web/Tag.ts index ec49f4e..26a8665 100644 --- a/src/mappings/discord/modules/forums/web/Tag.ts +++ b/src/mappings/discord/modules/forums/web/Tag.ts @@ -25,6 +25,12 @@ export type TagProps = { ariaLabel?: string; }; +type Exports = { + default: ComponentType & { Sizes: typeof TagSize }; + TagBar: ComponentType; +}; +export default Exports; + register((moonmap) => { const name = "discord/modules/forums/web/Tag"; moonmap.register({ @@ -42,6 +48,3 @@ register((moonmap) => { } }); }); - -type TagComponent = ComponentType & { Sizes: TagSize }; -export default TagComponent; diff --git a/src/mappings/discord/modules/gateway/GatewayConnectionStore.ts b/src/mappings/discord/modules/gateway/GatewayConnectionStore.ts index 8d78e65..a3c2209 100644 --- a/src/mappings/discord/modules/gateway/GatewayConnectionStore.ts +++ b/src/mappings/discord/modules/gateway/GatewayConnectionStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/guild_settings/GuildRoleMemberCountStore.ts b/src/mappings/discord/modules/guild_settings/GuildRoleMemberCountStore.ts index 0772608..aa32229 100644 --- a/src/mappings/discord/modules/guild_settings/GuildRoleMemberCountStore.ts +++ b/src/mappings/discord/modules/guild_settings/GuildRoleMemberCountStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/guild_settings/IntegrationCard.css.ts b/src/mappings/discord/modules/guild_settings/IntegrationCard.css.ts deleted file mode 100644 index 6cde9e5..0000000 --- a/src/mappings/discord/modules/guild_settings/IntegrationCard.css.ts +++ /dev/null @@ -1,25 +0,0 @@ -import register from "../../../../registry"; - -export type IntegrationCardCSS = { - card: string; - cardHeader: string; -}; - -register((moonmap) => { - const name = "discord/modules/guild_settings/IntegrationCard.css"; - moonmap.register({ - name, - find: ["card:", "cardHeader:", "inModal:"], - lazy: { - find: "renderArtisanalHack", - chunk: /\[(?:.\.e\("\d+?"\),?)+\][^}]+?webpackId:\d+,name:"GuildSettings"/ - }, - process({ id }) { - moonmap.addModule(id, name); - - return true; - } - }); -}); - -export default IntegrationCardCSS; diff --git a/src/mappings/discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css.ts b/src/mappings/discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css.ts index c788c9a..48aca83 100644 --- a/src/mappings/discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css.ts +++ b/src/mappings/discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css.ts @@ -1,6 +1,6 @@ import register from "../../../../../../registry"; -type GuildSettingsRoleEditCSS = { +type Exports = { addButton: string; container: string; emptyRowContainer: string; @@ -16,10 +16,10 @@ type GuildSettingsRoleEditCSS = { searchContainer: string; searchWarning: string; }; +export default Exports; register((moonmap) => { - const name = - "discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css"; + const name = "discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css"; moonmap.register({ name, find: "removeButtonContainer:", @@ -30,5 +30,3 @@ register((moonmap) => { } }); }); - -export default GuildSettingsRoleEditCSS; diff --git a/src/mappings/discord/modules/guild_settings/web/AppCard.css.ts b/src/mappings/discord/modules/guild_settings/web/AppCard.css.ts index ac8140f..f8d9de7 100644 --- a/src/mappings/discord/modules/guild_settings/web/AppCard.css.ts +++ b/src/mappings/discord/modules/guild_settings/web/AppCard.css.ts @@ -1,6 +1,13 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; +type Exports = { + card: string; + inModal: string; + cardHeader: string; + title: string; +}; +export default Exports; + register((moonmap) => { const name = "discord/modules/guild_settings/web/AppCard.css"; moonmap.register({ diff --git a/src/mappings/discord/modules/guild_settings/web/AppCardItem.css.ts b/src/mappings/discord/modules/guild_settings/web/AppCardItem.css.ts index e0361e6..b3bd606 100644 --- a/src/mappings/discord/modules/guild_settings/web/AppCardItem.css.ts +++ b/src/mappings/discord/modules/guild_settings/web/AppCardItem.css.ts @@ -1,6 +1,15 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; +type Exports = { + icon: string; + identifier: string; + item: string; + statusContainer: string; + statusLine: string; + statusIcon: string; +}; +export default Exports; + register((moonmap) => { const name = "discord/modules/guild_settings/web/AppCardItem.css"; moonmap.register({ diff --git a/src/mappings/discord/modules/guild_settings/web/SearchSection.css.ts b/src/mappings/discord/modules/guild_settings/web/SearchSection.css.ts index 81189bf..8034ba7 100644 --- a/src/mappings/discord/modules/guild_settings/web/SearchSection.css.ts +++ b/src/mappings/discord/modules/guild_settings/web/SearchSection.css.ts @@ -1,6 +1,23 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; +type Exports = { + container: string; + headerContainer: string; + searchContainer: string; + searchWarning: string; + addButton: string; + memberRow: string; + emptyRowContainer: string; + emptyRowText: string; + memberDetails: string; + list: string; + removeButtonContainer: string; + removeButton: string; + removeButtonDisabled: string; + removeTip: string; +}; +export default Exports; + // Lazy loaded by Integrations tab in server settings register((moonmap) => { const name = "discord/modules/guild_settings/web/SearchSection.css"; diff --git a/src/mappings/discord/modules/guild_sidebar/web/CategoryChannel.css.ts b/src/mappings/discord/modules/guild_sidebar/web/CategoryChannel.css.ts index 0dea3af..d58c895 100644 --- a/src/mappings/discord/modules/guild_sidebar/web/CategoryChannel.css.ts +++ b/src/mappings/discord/modules/guild_sidebar/web/CategoryChannel.css.ts @@ -1,6 +1,32 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; +type Exports = { + containerDefault: string; + containerDragBefore: string; + containerDragAfter: string; + addButton: string; + forceVisible: string; + iconVisibility: string; + addButtonIcon: string; + wrapper: string; + wrapperStatic: string; + clickable: string; + children: string; + mainContent: string; + icon: string; + collapsed: string; + muted: string; + name: string; + dismissWrapper: string; + dismissButton: string; + dismiss: string; + voiceChannelsButton: string; + voiceChannelsToggleIcon: string; + refreshVoiceChannelsButton: string; + refreshVoiceChannelsButtonInner: string; +}; +export default Exports; + register((moonmap) => { const name = "discord/modules/guild_sidebar/web/CategoryChannel.css"; moonmap.register({ diff --git a/src/mappings/discord/modules/markup/MarkupUtils.ts b/src/mappings/discord/modules/markup/MarkupUtils.ts index 7b311ac..6fef91b 100644 --- a/src/mappings/discord/modules/markup/MarkupUtils.ts +++ b/src/mappings/discord/modules/markup/MarkupUtils.ts @@ -25,6 +25,11 @@ export type MarkupUtils = { ) => ReactElement; }; +type Exports = { + default: MarkupUtils; +}; +export default Exports; + register((moonmap) => { const name = "discord/modules/markup/MarkupUtils"; moonmap.register({ @@ -37,5 +42,3 @@ register((moonmap) => { } }); }); - -export default MarkupUtils; diff --git a/src/mappings/discord/modules/menus/web/Menu.ts b/src/mappings/discord/modules/menus/web/Menu.ts index 05abf43..002003e 100644 --- a/src/mappings/discord/modules/menus/web/Menu.ts +++ b/src/mappings/discord/modules/menus/web/Menu.ts @@ -2,6 +2,13 @@ // the 2017 path is components/contextmenus import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; +import type { Menu } from "../../../components/common/index"; + +type Exports = { + MenuSpinner: React.ComponentType<{}>; + Menu: Menu; +}; +export default Exports; register((moonmap) => { const name = "discord/modules/menus/web/Menu"; diff --git a/src/mappings/discord/modules/messages/web/Markup.css.ts b/src/mappings/discord/modules/messages/web/Markup.css.ts index 5e4cadd..33f100a 100644 --- a/src/mappings/discord/modules/messages/web/Markup.css.ts +++ b/src/mappings/discord/modules/messages/web/Markup.css.ts @@ -1,6 +1,22 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; +type Exports = { + markup: string; + inlineFormat: string; + codeContainer: string; + codeActions: string; + blockquoteContainer: string; + blockquoteDivider: string; + slateBlockquoteContainer: string; + roleMention: string; + rolePopout: string; + roleHeader: string; + roleScroller: string; + timestamp: string; + timestampTooltip: string; +}; +export default Exports; + register((moonmap) => { const name = "discord/modules/messages/web/Markup.css"; moonmap.register({ diff --git a/src/mappings/discord/modules/messages/web/Message.css.ts b/src/mappings/discord/modules/messages/web/Message.css.ts index e677d56..206164a 100644 --- a/src/mappings/discord/modules/messages/web/Message.css.ts +++ b/src/mappings/discord/modules/messages/web/Message.css.ts @@ -1,6 +1,86 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; +type Exports = { + wrapper: string; + compact: string; + cozy: string; + contentOnly: string; + repliedMessage: string; + threadMessageAccessory: string; + executedCommand: string; + latin12CompactTimeStamp: string; + latin24CompactTimeStamp: string; + asianCompactTimeStamp: string; + contextCommandMessage: string; + messageSpine: string; + repliedMessageClickableSpine: string; + repliedMessageContentHovered: string; + threadMessageAccessoryAvatar: string; + replyAvatar: string; + replyBadge: string; + executedCommandAvatar: string; + replyChatIconContainer: string; + replyIcon: string; + clanTagChiplet: string; + userJoinSystemMessageIcon: string; + ticketIcon: string; + commandIcon: string; + username: string; + roleDot: string; + commandName: string; + appsIcon: string; + appLauncherOnboardingCommandName: string; + targetUsername: string; + executedCommandSeparator: string; + repliedTextPreview: string; + threadMessageAccessoryPreview: string; + repliedTextContent: string; + clickable: string; + repliedMessageClickableSpineHovered: string; + threadMessageAccessoryContent: string; + repliedTextPlaceholder: string; + threadMessageAccessoryPlaceholder: string; + repliedTextContentTrailingIcon: string; + threadMessageAccessoryContentTrailingIcon: string; + repliedTextContentLeadingIcon: string; + threadMessageAccessoryContentLeadingIcon: string; + contents: string; + zalgo: string; + messageContent: string; + header: string; + buttonContainer: string; + avatar: string; + avatarDecoration: string; + roleIcon: string; + timestamp: string; + timestampInline: string; + alt: string; + timestampTooltip: string; + timestampVisibleOnHover: string; + nitroAuthorBadgeTootip: string; + headerText: string; + hasRoleIcon: string; + hasBadges: string; + botTagCompact: string; + botTagCozy: string; + nitroBadgeSvg: string; + nitroAuthorBadgeContainer: string; + separator: string; + hasThread: string; + isSystemMessage: string; + hasReply: string; + markupRtl: string; + isSending: string; + isFailed: string; + isUnsupported: string; + edited: string; + communicationDisabled: string; + compactCommunicationDisabled: string; + communicationDisabledOpacity: string; + badgesContainer: string; +}; +export default Exports; + register((moonmap) => { const name = "discord/modules/messages/web/Message.css"; moonmap.register({ diff --git a/src/mappings/discord/modules/messages/web/UserMention.ts b/src/mappings/discord/modules/messages/web/UserMention.ts index 59ba0e0..6d5bebd 100644 --- a/src/mappings/discord/modules/messages/web/UserMention.ts +++ b/src/mappings/discord/modules/messages/web/UserMention.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/oauth2/index.ts b/src/mappings/discord/modules/oauth2/index.ts new file mode 100644 index 0000000..32ee3e9 --- /dev/null +++ b/src/mappings/discord/modules/oauth2/index.ts @@ -0,0 +1,47 @@ +import { ComponentType } from "react"; +import register from "../../../../registry"; + +export type OAuth2Response = { + application?: any; + guild?: any; + location: string; +}; + +export type OAuth2Props = { + clientId: string; + redirectUri?: string; + scopes?: string[]; + responseType?: string; + permissions?: bigint; + callback: (response: OAuth2Response) => void; + + channelId?: string; + guildId?: string; + + cancelCompletesFlow?: boolean; + disableGuildSelect?: boolean; +}; + +// Lazy on the types here since it's hard to test, don't want to spam oauth endpoints +type Exports = { + OAuth2AuthorizeModal: ComponentType; + OAuth2AuthorizePage: ComponentType; + getOAuth2AuthorizeProps: (url: string) => any; + openOAuth2Modal: (props: OAuth2Props, unk?: any) => void; + openOAuth2ModalWithCreateGuildModal: (props: OAuth2Props, unk?: any) => void; + useOAuth2AuthorizeForm: any; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/modules/oauth2/index"; + moonmap.register({ + name, + find: ["OAuth2AuthorizeModal:", "openOAuth2Modal:"], + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/modules/people/web/PeoplePage.css.ts b/src/mappings/discord/modules/people/web/PeoplePage.css.ts index da30f3d..5972d55 100644 --- a/src/mappings/discord/modules/people/web/PeoplePage.css.ts +++ b/src/mappings/discord/modules/people/web/PeoplePage.css.ts @@ -2,7 +2,7 @@ // mobile has `modules/people(/native)` import register from "../../../../../registry"; -export type PeoplePageCSS = { +type Exports = { addFriend: string; badge: string; container: string; @@ -13,6 +13,7 @@ export type PeoplePageCSS = { tabBar: string; tabBody: string; }; +export default Exports; register((moonmap) => { const name = "discord/modules/people/web/PeoplePage.css"; @@ -26,5 +27,3 @@ register((moonmap) => { } }); }); - -export default PeoplePageCSS; diff --git a/src/mappings/discord/modules/replies/PendingReplyStore.ts b/src/mappings/discord/modules/replies/PendingReplyStore.ts index e683001..5b35a26 100644 --- a/src/mappings/discord/modules/replies/PendingReplyStore.ts +++ b/src/mappings/discord/modules/replies/PendingReplyStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/replies/ReferencedMessageStore.ts b/src/mappings/discord/modules/replies/ReferencedMessageStore.ts index 9029edc..42d946b 100644 --- a/src/mappings/discord/modules/replies/ReferencedMessageStore.ts +++ b/src/mappings/discord/modules/replies/ReferencedMessageStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/spotify/SpotifyStore.ts b/src/mappings/discord/modules/spotify/SpotifyStore.ts index 4e05d21..384e192 100644 --- a/src/mappings/discord/modules/spotify/SpotifyStore.ts +++ b/src/mappings/discord/modules/spotify/SpotifyStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/stickers/StickersStore.ts b/src/mappings/discord/modules/stickers/StickersStore.ts index fe06a12..548a91a 100644 --- a/src/mappings/discord/modules/stickers/StickersStore.ts +++ b/src/mappings/discord/modules/stickers/StickersStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/user_profile/UserProfileStore.ts b/src/mappings/discord/modules/user_profile/UserProfileStore.ts index 24a61b6..560cee0 100644 --- a/src/mappings/discord/modules/user_profile/UserProfileStore.ts +++ b/src/mappings/discord/modules/user_profile/UserProfileStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/user_profile/web/BiteSizeActivity.css.ts b/src/mappings/discord/modules/user_profile/web/BiteSizeActivity.css.ts index f977bb5..3287598 100644 --- a/src/mappings/discord/modules/user_profile/web/BiteSizeActivity.css.ts +++ b/src/mappings/discord/modules/user_profile/web/BiteSizeActivity.css.ts @@ -1,6 +1,17 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; +type Exports = { + header: string; + headerTag: string; + body: string; + footer: string; + backdrop: string; + toast: string; + activity: string; + upsell: string; +}; +export default Exports; + register((moonmap) => { const name = "discord/modules/user_profile/web/BiteSizeActivity.css"; moonmap.register({ diff --git a/src/mappings/discord/modules/user_profile/web/UserProfileActivityCardWrapper.ts b/src/mappings/discord/modules/user_profile/web/UserProfileActivityCardWrapper.ts index 6fa2b41..8023739 100644 --- a/src/mappings/discord/modules/user_profile/web/UserProfileActivityCardWrapper.ts +++ b/src/mappings/discord/modules/user_profile/web/UserProfileActivityCardWrapper.ts @@ -2,8 +2,7 @@ import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../../registry"; register((moonmap) => { - const name = - "discord/modules/user_profile/web/UserProfileActivityCardWrapper"; + const name = "discord/modules/user_profile/web/UserProfileActivityCardWrapper"; moonmap.register({ name, find: 'location:"UserProfileActivityCardWrapper"},', diff --git a/src/mappings/discord/modules/user_settings/ThemeStore.ts b/src/mappings/discord/modules/user_settings/ThemeStore.ts index 46f9558..4f7c225 100644 --- a/src/mappings/discord/modules/user_settings/ThemeStore.ts +++ b/src/mappings/discord/modules/user_settings/ThemeStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/user_settings/UserSettings.ts b/src/mappings/discord/modules/user_settings/UserSettings.ts index 2ec0304..05f34c1 100644 --- a/src/mappings/discord/modules/user_settings/UserSettings.ts +++ b/src/mappings/discord/modules/user_settings/UserSettings.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/user_settings/UserSettingsProtoStore.ts b/src/mappings/discord/modules/user_settings/UserSettingsProtoStore.ts index baa54f7..c549c5a 100644 --- a/src/mappings/discord/modules/user_settings/UserSettingsProtoStore.ts +++ b/src/mappings/discord/modules/user_settings/UserSettingsProtoStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/modules/user_settings/web/openUserSettings.ts b/src/mappings/discord/modules/user_settings/web/openUserSettings.ts deleted file mode 100644 index 2f74c3b..0000000 --- a/src/mappings/discord/modules/user_settings/web/openUserSettings.ts +++ /dev/null @@ -1,20 +0,0 @@ -import register from "../../../../../registry"; - -type OpenUserSettings = { - open: (section: string, index?: number, unk?: any) => void; -}; - -register((moonmap) => { - const name = "discord/modules/user_settings/web/openUserSettings"; - moonmap.register({ - name, - find: 'dispatch({type:"USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION"', - process({ id }) { - moonmap.addModule(id, name); - - return true; - } - }); -}); - -export default OpenUserSettings; diff --git a/src/mappings/discord/packages/flux/BatchedStoreListener.ts b/src/mappings/discord/packages/flux/BatchedStoreListener.ts new file mode 100644 index 0000000..21644be --- /dev/null +++ b/src/mappings/discord/packages/flux/BatchedStoreListener.ts @@ -0,0 +1,32 @@ +import register from "../../../../registry"; +import type { Store } from "./Store"; + +export declare class BatchedStoreListener { + stores: Store[]; + changeCallback(): void; + storeVersionHandled: number; + handleStoreChange(): void; + + attach(name: string): void; + detatch(): void; + + constructor(stores: Store[], changeCallback: () => void); +} + +type Exports = { + default: typeof BatchedStoreListener; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/packages/flux/BatchedStoreListener"; + moonmap.register({ + name, + find: " tried to load a non-existent store. Either it isn't defined or there is a circular dependency. Loaded ", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/packages/flux/ChangeListeners.ts b/src/mappings/discord/packages/flux/ChangeListeners.ts new file mode 100644 index 0000000..5bcb9fb --- /dev/null +++ b/src/mappings/discord/packages/flux/ChangeListeners.ts @@ -0,0 +1,33 @@ +import register from "../../../../registry"; + +type ChangeListener = () => void; + +export declare class ChangeListeners { + listeners: Set; + + add(listener: ChangeListener): void; + remove(listener: ChangeListener): void; + addConditional(condition: () => boolean, bool?: boolean): void; + + has(listener: ChangeListener): boolean; + hasAny(): boolean; + invokeAll(): void; +} + +export type Exports = { + default: typeof ChangeListeners; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/packages/flux/Dispatcher"; + moonmap.register({ + name, + find: "invokeAll(){this.listeners.forEach(", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/packages/flux/Dispatcher.ts b/src/mappings/discord/packages/flux/Dispatcher.ts new file mode 100644 index 0000000..693cd45 --- /dev/null +++ b/src/mappings/discord/packages/flux/Dispatcher.ts @@ -0,0 +1,97 @@ +import { ModuleExportType } from "@moonlight-mod/moonmap"; +import register from "../../../../registry"; +import type { BasePayload, Interceptor, Listener } from "./_shared"; +import type { ActionLogger } from "./LoggingUtils"; +import type { DepGraph } from "../../../dependency-graph"; + +// fiery was here :) jan 16th 2025 + +export type ActionHandler = (payload: T) => void; + +export type ActionHandlerRecord = { + name: string; + band?: string; + actionHandler: ActionHandler; + storeDidChange(): void; +}; + +export declare class Dispatcher { + _defaultBand: number; + _interceptors: Interceptor[]; + _subscriptions: Record>>; + _waitQueue: T[]; + _processingWaitQueue: boolean; + _currentDispatchActionType: T["type"] | null; + _actionHandlers: ActionHandlers; + _sentryUtils: any | undefined; + actionLogger: ActionLogger; + functionCache: Record void>; + + isDispatching(): boolean; + dispatch(payload: T): Promise; + flushWaitQueue(): void; + _dispatchWithDevtools(payload: T): void; + _dispatchWithLogging(payload: T): void; + _dispatch(payload: T, callback: (key: T["type"], callback: () => void) => void): void; + addInterceptor(interceptor: Interceptor): void; + wait(payload: T): void; + subscribe(type: T["type"], listener: Listener): void; + unsubscribe(type: T["type"], listener: Listener): void; + register( + type: T["type"], + handlers: Record>, + storeDidChange: () => void, + band: number | null, + token?: string + ): string; + createToken(): string; + addDependencies(type: T["type"], dependencies: ActionHandlerRecord[]): void; + + constructor(band?: number, logger?: ActionLogger, unused?: unknown); +} +export declare class ActionHandlers { + _orderedActionHandlers: Record[]>; + _orderedCallbackTokens: any | null; // TODO + _lastID: number; + _dependencyGraph: DepGraph>; + + getOrderedActionHandlers(type: T["type"]): Record[]>; + register( + type: T["type"], + handlers: Record>, + storeDidChange: () => void, + band: number, + token?: string + ): string; + createToken(): string; + addDependencies(type: T["type"], dependencies: ActionHandlerRecord[]): void; + _validateDependencies(type: T["type"], dependencies: ActionHandlerRecord[]): void; + _invalidateCaches(): void; + _bandToken(band: number): string; + _addToBand(type: T["type"], band: number): void; + _computeOrderedActionHandlers(type: T["type"]): ActionHandlerRecord[]; + _computeOrderedCallbackTokens(): ActionHandlerRecord[]; +} + +export type Exports = { + Dispatcher: typeof Dispatcher; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/packages/flux/Dispatcher"; + moonmap.register({ + name, + find: "Dispatch.dispatch(...) called without an action type", + process({ id }) { + moonmap.addModule(id, name); + + moonmap.addExport(name, "Dispatcher", { + type: ModuleExportType.Function, + find: "_dispatchWithDevtools(" + }); + + return true; + } + }); +}); diff --git a/src/mappings/discord/packages/flux/Emitter.ts b/src/mappings/discord/packages/flux/Emitter.ts new file mode 100644 index 0000000..ba09828 --- /dev/null +++ b/src/mappings/discord/packages/flux/Emitter.ts @@ -0,0 +1,44 @@ +import register from "../../../../registry"; +import type { Store } from "./Store"; + +export declare class Emitter { + changedStores: Set>; + reactChangedStores: Set>; + changeSentinel: number; + isBatchEmitting: boolean; + isDispatching: boolean; + isPaused: boolean; + pauseTimer?: number; + + destroy(): void; + injectBatchEmitChanges(callback: (callback: () => void) => void): void; + pause(): void; + resume(): void; + batched(callback: () => any): any; + emit(): void; + getChangeSentinel(): number; + getIsPaused(): boolean; + markChanged(store: Store): void; + emitNonReactOnce(unused1: unknown, unused2: unknown): void; + emitReactOnce(): void; + + constructor(); +} + +type Exports = { + default: typeof Emitter; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/packages/flux/Emitter"; + moonmap.register({ + name, + find: "Slow batch emitReactChanges took ", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/packages/flux/LoggingUtils.ts b/src/mappings/discord/packages/flux/LoggingUtils.ts new file mode 100644 index 0000000..1de3167 --- /dev/null +++ b/src/mappings/discord/packages/flux/LoggingUtils.ts @@ -0,0 +1,53 @@ +import register from "../../../../registry"; + +export type LogTrace = { + name: string; + time: number; +}; +export declare class ActionLog { + id: number; + action: string; + createdAt: Date; + startTime: number; + totalTime: number; + traces: LogTrace[]; + error: Error | null; + + get name(): string; + toJSON(): { + actionType: string; + created_at: Date; + totalTime: number; + traces: LogTrace[]; + }; + + constructor(action: string); +} +export declare class ActionLogger { + logs: ActionLog[]; + persist: boolean; + + log(type: string, value: any): ActionLog; // TODO: this function is a mess to decipher as its like a stack of 3 function calls for the parameter + getSlowestActions(type: string): ActionLog[]; + getLastActionMetrics(type: string): [traceName: string, name: string, time: number][]; + + constructor(options: { persist: boolean }); +} + +type Exports = { + default: ActionLogger; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/packages/flux/LoggingUtils"; + moonmap.register({ + name, + find: "ActionLog.toJSON: You must complete your logging before calling toJSON", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/packages/flux/PersistedStore.ts b/src/mappings/discord/packages/flux/PersistedStore.ts new file mode 100644 index 0000000..adb7f70 --- /dev/null +++ b/src/mappings/discord/packages/flux/PersistedStore.ts @@ -0,0 +1,85 @@ +import { ModuleExportType } from "@moonlight-mod/moonmap"; +import register from "../../../../registry"; + +import type { DebouncedFunc } from "lodash"; +import type { BasePayload } from "./_shared"; +import type { Store } from "./Store"; +import type { ActionHandler, Dispatcher } from "./Dispatcher"; + +export type ClearAll = { + omit: string[]; + type: "all" | "user-data-only"; +}; + +type Callback = () => void; + +export declare abstract class PersistedStore extends Store { + _version: number; + callback: (callback: Callback) => void; + throttledCallback: DebouncedFunc; + + allPersistKeys: Set; + userAgnosticPersistKeys: Set; + _writePromises: Map>; + _writeResolvers: Map; + _clearAllPromise?: Promise; + disableWrites: boolean; + persistKey?: string; + disableWrite: boolean; + throttleDelay: number; + migrations?: unknown; + + /** + * Returns `this.constructor` + */ + getClass(): (dispatcher: typeof Dispatcher, actionHandlers?: Record>) => this; + static clearAll(toClear: ClearAll): Promise | null | undefined; + static shouldClear(toClear: ClearAll, store: string): boolean; + static clearPersistQueue(store: string): void; + static getAllStates(): Record; + static initializeAll(state: BasePayload): void; + initializeFromState(state: T): void; + static destroy(): void; + initializeIfNeeded(): void; + static migrateAndReadStoreState(store: string, migrators: (() => any)[]): { state?: any; requiresPersist: boolean }; + asyncPersist(): Promise; + persist(): void; + clear(): void; + + initialize(state?: T): void; + getState(): T; + + constructor(dispatcher: typeof Dispatcher, actionHandlers?: Record>); +} + +declare abstract class UserAgnosticStore extends PersistedStore { + initializeFromState(state: T): void; + initializeIfNeeded(): void; + getState(): T; +} + +export declare abstract class DeviceSettingsStore extends UserAgnosticStore {} +export declare abstract class OfflineCacheStore extends UserAgnosticStore {} + +export type Exports = { + PersistedStore: typeof PersistedStore; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/packages/flux/PersistedStore"; + moonmap.register({ + name, + find: " initialized without a `persistKey`. Add one so we know where to save your stuff!", + process({ id }) { + moonmap.addModule(id, name); + + moonmap.addExport(name, "PersistedStore", { + type: ModuleExportType.Function, + find: " initialized without a `persistKey`. Add one so we know where to save your stuff!" + }); + + return true; + } + }); +}); diff --git a/src/mappings/discord/packages/flux/Store.ts b/src/mappings/discord/packages/flux/Store.ts new file mode 100644 index 0000000..1633d14 --- /dev/null +++ b/src/mappings/discord/packages/flux/Store.ts @@ -0,0 +1,68 @@ +import type { BasePayload } from "./_shared"; +import type { ActionHandler, Dispatcher } from "./Dispatcher"; +import type { ChangeListeners } from "./ChangeListeners"; +import register from "../../../../registry"; +import { ModuleExportType } from "@moonlight-mod/moonmap"; + +export type SyncFunction = () => boolean; +type SyncsWith = { + func: SyncFunction; + store: Store; +}; + +export declare abstract class Store { + _changeCallbacks: ChangeListeners; + _reactChangeCallbacks: ChangeListeners; + _syncsWith: SyncsWith[]; + _dispatchToken: string; + _dispatcher: typeof Dispatcher; + _mustEmitChanges: () => boolean; + _isInitialized: boolean; + __getLocalVars(): any; // most discord stores dont add it anymore o7 + addChangeListener: ChangeListeners["add"]; + addConditionalChangeListener: ChangeListeners["addConditional"]; + removeChangeListener: ChangeListeners["remove"]; + addReactChangeListener: ChangeListeners["add"]; + removeReactChangeListener: ChangeListeners["remove"]; + + static displayName?: string; + static initialized: boolean; + + static initialize(): void; + static destroy(): void; + static getAll: () => Store[]; + registerActionHandlers(handlers: Record>, band?: number): void; + getName(): string; + initializeIfNeeded(): void; + initialize(): void; + syncWith(stores: Store[], callback: SyncFunction, timeout?: number): void; + waitFor(...stores: Store[]): void; + emitChange(): void; + getDispatchToken(): string; + mustEmitChanges(should?: () => boolean): void; + + constructor(dispatcher: typeof Dispatcher, actionHandlers?: Record>, band?: number); +} + +export type Exports = { + Store: typeof Store; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/packages/flux/Store"; + moonmap.register({ + name, + find: "Stores belong to two separate dispatchers.", + process({ id }) { + moonmap.addModule(id, name); + + moonmap.addExport(name, "Store", { + type: ModuleExportType.Function, + find: "Stores belong to two separate dispatchers." + }); + + return true; + } + }); +}); diff --git a/src/mappings/discord/packages/flux/_shared.ts b/src/mappings/discord/packages/flux/_shared.ts new file mode 100644 index 0000000..32b921b --- /dev/null +++ b/src/mappings/discord/packages/flux/_shared.ts @@ -0,0 +1,5 @@ +export type BasePayload = { + type: string; +}; +export type Interceptor = (payload: T) => boolean; +export type Listener = (payload: T) => void; diff --git a/src/mappings/discord/packages/flux/connectStores.ts b/src/mappings/discord/packages/flux/connectStores.ts new file mode 100644 index 0000000..8c777f5 --- /dev/null +++ b/src/mappings/discord/packages/flux/connectStores.ts @@ -0,0 +1,25 @@ +import { ComponentConstructor } from "flux/lib/FluxContainer"; +import type { Store } from "./Store"; +import register from "../../../../registry"; + +export interface ConnectStores { + (stores: Store[], callback: T, context?: any): ComponentConstructor; +} + +type Exports = { + default: ConnectStores; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/packages/flux/connectStores"; + moonmap.register({ + name, + find: '="FluxContainer(".concat(', + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/packages/flux.ts b/src/mappings/discord/packages/flux/index.ts similarity index 51% rename from src/mappings/discord/packages/flux.ts rename to src/mappings/discord/packages/flux/index.ts index 0cefae5..ff3149c 100644 --- a/src/mappings/discord/packages/flux.ts +++ b/src/mappings/discord/packages/flux/index.ts @@ -1,65 +1,38 @@ import { ModuleExportType } from "@moonlight-mod/moonmap"; -import register from "../../../registry"; - -import { DependencyList } from "react"; -import { Store as FluxStore } from "flux/utils"; -import { Dispatcher as FluxDispatcher } from "flux"; -import { ComponentConstructor } from "flux/lib/FluxContainer"; - -/* - It seems like Discord maintains their own version of Flux that doesn't match - the types on NPM. This is a heavy work in progress - if you encounter rough - edges, please contribute! -*/ - -export declare abstract class Store extends FluxStore { - static getAll: () => Store[]; - getName: () => string; - emitChange: () => void; - addChangeListener: (callback: () => void) => void; - removeChangeListener: (callback: () => void) => void; -} - -interface ConnectStores { - ( - stores: Store[], - callback: T, - context?: any - ): ComponentConstructor; -} +import register from "../../../../registry"; +import type { Dispatcher } from "./Dispatcher"; +import type { Store } from "./Store"; +import type { DeviceSettingsStore, OfflineCacheStore, PersistedStore } from "./PersistedStore"; +import type { Emitter } from "./Emitter"; +import type { ConnectStores } from "./connectStores"; +import type { BatchedStoreListener } from "./BatchedStoreListener"; +import type { UseStateFromStores, UseStateFromStoresArray, UseStateFromStoresObject } from "./useStateFromStores"; type Flux = { - DeviceSettingsStore: any; // TODO - Emitter: any; // @types/fbemitter - OfflineCacheStore: any; // TODO - PersistedStore: any; // TODO + Emitter: typeof Emitter; Store: typeof Store; - Dispatcher: typeof FluxDispatcher; + PersistedStore: typeof PersistedStore; + DeviceSettingsStore: typeof DeviceSettingsStore; + OfflineCacheStore: typeof OfflineCacheStore; connectStores: ConnectStores; initialize: () => void; - initialized: Promise; - destroy: () => void; + get initialized(): Promise; +}; + +type Exports = { + BatchedStoreListener: BatchedStoreListener; + Dispatcher: typeof Dispatcher; + Store: typeof Store; + default: Flux; + /** + * This function always returns false. + */ + statesWillNeverBeEqual(state1: any, state2: any): boolean; useStateFromStores: UseStateFromStores; useStateFromStoresArray: UseStateFromStoresArray; useStateFromStoresObject: UseStateFromStoresObject; }; - -interface UseStateFromStores { - ( - stores: Store[], - callback: () => T, - deps?: DependencyList, - shouldUpdate?: (oldState: T, newState: T) => boolean - ): T; -} - -interface UseStateFromStoresArray { - (stores: Store[], callback: () => T, deps?: DependencyList): T; -} - -interface UseStateFromStoresObject { - (stores: Store[], callback: () => T, deps?: DependencyList): T; -} +export default Exports; register((moonmap) => { const name = "discord/packages/flux"; @@ -73,6 +46,10 @@ register((moonmap) => { type: ModuleExportType.Function, find: " tried to load a non-existent store." }); + moonmap.addExport(name, "createFetchStore", { + type: ModuleExportType.Function, + find: "let{dangerousAbortOnCleanup:" + }); moonmap.addExport(name, "Dispatcher", { type: ModuleExportType.Function, find: "_dispatchWithDevtools(" @@ -102,5 +79,3 @@ register((moonmap) => { } }); }); - -export default Flux; diff --git a/src/mappings/discord/packages/flux/useStateFromStores.ts b/src/mappings/discord/packages/flux/useStateFromStores.ts new file mode 100644 index 0000000..509fac6 --- /dev/null +++ b/src/mappings/discord/packages/flux/useStateFromStores.ts @@ -0,0 +1,51 @@ +import { DependencyList } from "react"; +import type { Store } from "./Store"; +import register from "../../../../registry"; +import { ModuleExportType } from "@moonlight-mod/moonmap"; + +export interface UseStateFromStores { + ( + stores: Store[], + callback: () => T, + deps?: DependencyList, + shouldUpdate?: (oldState: T, newState: T) => boolean + ): T; +} + +export interface UseStateFromStoresArray { + (stores: Store[], callback: () => T, deps?: DependencyList): T; +} + +export interface UseStateFromStoresObject { + (stores: Store[], callback: () => T, deps?: DependencyList): T; +} + +register((moonmap) => { + const name = "discord/packages/flux/useStateFromStores"; + moonmap.register({ + name, + find: '.attach("useStateFromStores")', + process({ id }) { + moonmap.addModule(id, name); + + moonmap.addExport(name, "statesWillNeverBeEqual", { + type: ModuleExportType.Function, + find: "{return!1}" + }); + moonmap.addExport(name, "useStateFromStores", { + type: ModuleExportType.Function, + find: '.attach("useStateFromStores")' + }); + moonmap.addExport(name, "useStateFromStoresArray", { + type: ModuleExportType.Function, + find: /return (.)\((.),(.),(.),(.)\.([^Z])\)/ + }); + moonmap.addExport(name, "useStateFromStoresObject", { + type: ModuleExportType.Function, + find: /return (.)\((.),(.),(.),(.)\.Z\)/ + }); + + return true; + } + }); +}); diff --git a/src/mappings/discord/records/UserRecord.ts b/src/mappings/discord/records/UserRecord.ts new file mode 100644 index 0000000..64b5fd0 --- /dev/null +++ b/src/mappings/discord/records/UserRecord.ts @@ -0,0 +1,90 @@ +import register from "../../../registry"; +import { BaseRecord } from "../lib/BaseRecord"; +import { UserFlags } from "../Constants"; + +interface AvatarDecorationData { + asset: string; + skuId: string; +} + +declare class UserRecord extends BaseRecord { + id: string; + username: string; + discriminator: string; + avatar: string; + avatarDecorationData: AvatarDecorationData | null; + email: string | null; + verified: boolean; + bot: boolean; + system: boolean; + mfaEnabled: boolean | null; + mobile: boolean; + desktop: boolean; + premiumType: number | undefined; + flags: UserFlags; + publicFlags: UserFlags; + purchasedFlags: number; + premiumUsageFlags: number; + phone: string | null; + nsfwAllowed: boolean | undefined; + guildMemberAvatars: Record; + hasBouncedEmail: boolean; + personalConnectionId: string | null; + globalName: string | null; + primaryGuild: { + identityGuildId: string | null; + identityEnabled: boolean; + tag: string | null; + badge: string | null; + }; + + hasFlag(flag: number): boolean; + isStaff(): boolean; + isStaffPersonal(): boolean; + hasAnyStaffLevel(): boolean; + + get createdAt(): Date; + hasVerifiedEmailOrPhone(): boolean; + getAvatarURL(guildId: string | undefined, size: number, canAnimate?: boolean): string | undefined; + addGuildAvatarHash(guildId: string, hash: string): this; + removeGuildAvatarHash(guildId: string): this; + getAvatarSource(guildId: string | undefined): { uri: string } | undefined; + isClaimed(): boolean; + isPhoneVerified(): boolean; + toString(): string; + get tag(): string; + hasPurchasedFlag(flag: number): boolean; + hasPremiumUsageFlag(flag: number): boolean; + hasHadSKU(id: string): boolean; + hasHadPremium(): boolean; + hasFreePremium(): boolean; + hasUrgentMessages(): boolean; + isNonUserBot(): boolean; + isLocalBot(): boolean; + isVerifiedBot(): boolean; + isSystemUser(): boolean; + isClyde(): boolean; + hasAvatarForGuild(guildId: string): boolean; + isPomelo(): boolean; + get isProvisional(): boolean; + get avatarDecoration(): AvatarDecorationData | null; + set avatarDecoration(value: AvatarDecorationData | null); +} + +type Exports = { + default: UserRecord; +}; +export default Exports; + +register((moonmap) => { + const name = "discord/records/UserRecord"; + moonmap.register({ + name, + find: "hasFreePremium(){", + process({ id }) { + moonmap.addModule(id, name); + + return true; + } + }); +}); diff --git a/src/mappings/discord/stores/ApplicationStreamingStore.ts b/src/mappings/discord/stores/ApplicationStreamingStore.ts index b5ff275..cc6d97d 100644 --- a/src/mappings/discord/stores/ApplicationStreamingStore.ts +++ b/src/mappings/discord/stores/ApplicationStreamingStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/AuthenticationStore.ts b/src/mappings/discord/stores/AuthenticationStore.ts index 7f8f849..6708ee7 100644 --- a/src/mappings/discord/stores/AuthenticationStore.ts +++ b/src/mappings/discord/stores/AuthenticationStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/ChannelStore.ts b/src/mappings/discord/stores/ChannelStore.ts index 085354e..6d00c94 100644 --- a/src/mappings/discord/stores/ChannelStore.ts +++ b/src/mappings/discord/stores/ChannelStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/GameStore.ts b/src/mappings/discord/stores/GameStore.ts index 95a4fa6..59969b1 100644 --- a/src/mappings/discord/stores/GameStore.ts +++ b/src/mappings/discord/stores/GameStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/GuildCategoryStore.ts b/src/mappings/discord/stores/GuildCategoryStore.ts index 83479e4..dc81b34 100644 --- a/src/mappings/discord/stores/GuildCategoryStore.ts +++ b/src/mappings/discord/stores/GuildCategoryStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/GuildMemberCountStore.ts b/src/mappings/discord/stores/GuildMemberCountStore.ts index b71156f..83e3f8a 100644 --- a/src/mappings/discord/stores/GuildMemberCountStore.ts +++ b/src/mappings/discord/stores/GuildMemberCountStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/GuildMemberStore.ts b/src/mappings/discord/stores/GuildMemberStore.ts index 6dcc52e..7aeee8e 100644 --- a/src/mappings/discord/stores/GuildMemberStore.ts +++ b/src/mappings/discord/stores/GuildMemberStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/GuildStore.ts b/src/mappings/discord/stores/GuildStore.ts index fef677a..e4bcb7c 100644 --- a/src/mappings/discord/stores/GuildStore.ts +++ b/src/mappings/discord/stores/GuildStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/MediaEngineStore.ts b/src/mappings/discord/stores/MediaEngineStore.ts index cf9748b..09b1be6 100644 --- a/src/mappings/discord/stores/MediaEngineStore.ts +++ b/src/mappings/discord/stores/MediaEngineStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/MessageReactionsStore.ts b/src/mappings/discord/stores/MessageReactionsStore.ts index e40e07c..dfb2982 100644 --- a/src/mappings/discord/stores/MessageReactionsStore.ts +++ b/src/mappings/discord/stores/MessageReactionsStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/MessageStore.ts b/src/mappings/discord/stores/MessageStore.ts index 3c595e1..b32825b 100644 --- a/src/mappings/discord/stores/MessageStore.ts +++ b/src/mappings/discord/stores/MessageStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/PermissionStore.ts b/src/mappings/discord/stores/PermissionStore.ts index 0cd8142..4cdf7b1 100644 --- a/src/mappings/discord/stores/PermissionStore.ts +++ b/src/mappings/discord/stores/PermissionStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/PresenceStore.ts b/src/mappings/discord/stores/PresenceStore.ts index e5232b0..618ac1f 100644 --- a/src/mappings/discord/stores/PresenceStore.ts +++ b/src/mappings/discord/stores/PresenceStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/ReadStateStore.ts b/src/mappings/discord/stores/ReadStateStore.ts index 836e8f9..dcde07e 100644 --- a/src/mappings/discord/stores/ReadStateStore.ts +++ b/src/mappings/discord/stores/ReadStateStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/RelationshipStore.ts b/src/mappings/discord/stores/RelationshipStore.ts index 7638729..b9f4e67 100644 --- a/src/mappings/discord/stores/RelationshipStore.ts +++ b/src/mappings/discord/stores/RelationshipStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/SelectedChannelStore.ts b/src/mappings/discord/stores/SelectedChannelStore.ts index dc45e56..d029881 100644 --- a/src/mappings/discord/stores/SelectedChannelStore.ts +++ b/src/mappings/discord/stores/SelectedChannelStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/SelfPresenceStore.ts b/src/mappings/discord/stores/SelfPresenceStore.ts index 1c2cd91..f483ed6 100644 --- a/src/mappings/discord/stores/SelfPresenceStore.ts +++ b/src/mappings/discord/stores/SelfPresenceStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/SessionsStore.ts b/src/mappings/discord/stores/SessionsStore.ts index f53d712..42ca896 100644 --- a/src/mappings/discord/stores/SessionsStore.ts +++ b/src/mappings/discord/stores/SessionsStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/SortedGuildStore.ts b/src/mappings/discord/stores/SortedGuildStore.ts index 28e24f5..6cd4cac 100644 --- a/src/mappings/discord/stores/SortedGuildStore.ts +++ b/src/mappings/discord/stores/SortedGuildStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/TypingStore.ts b/src/mappings/discord/stores/TypingStore.ts index 9df73ac..7453b44 100644 --- a/src/mappings/discord/stores/TypingStore.ts +++ b/src/mappings/discord/stores/TypingStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/UploadAttachmentStore.ts b/src/mappings/discord/stores/UploadAttachmentStore.ts index 42708f8..dd27b01 100644 --- a/src/mappings/discord/stores/UploadAttachmentStore.ts +++ b/src/mappings/discord/stores/UploadAttachmentStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/UserGuildSettingsStore.ts b/src/mappings/discord/stores/UserGuildSettingsStore.ts index 0823e1d..0306ca4 100644 --- a/src/mappings/discord/stores/UserGuildSettingsStore.ts +++ b/src/mappings/discord/stores/UserGuildSettingsStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/UserStore.ts b/src/mappings/discord/stores/UserStore.ts index 473bdfa..5a6f401 100644 --- a/src/mappings/discord/stores/UserStore.ts +++ b/src/mappings/discord/stores/UserStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/stores/VoiceStateStore.ts b/src/mappings/discord/stores/VoiceStateStore.ts index 82a1664..b893658 100644 --- a/src/mappings/discord/stores/VoiceStateStore.ts +++ b/src/mappings/discord/stores/VoiceStateStore.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/styles/shared/Margins.css.ts b/src/mappings/discord/styles/shared/Margins.css.ts index 452ee16..f157976 100644 --- a/src/mappings/discord/styles/shared/Margins.css.ts +++ b/src/mappings/discord/styles/shared/Margins.css.ts @@ -1,6 +1,6 @@ import register from "../../../../registry"; -export type MarginsCSS = { +type Exports = { marginReset: string; marginTop4: string; marginBottom4: string; @@ -15,6 +15,7 @@ export type MarginsCSS = { marginCenterHorz: string; marginLeft8: string; }; +export default Exports; register((moonmap) => { const name = "discord/styles/shared/Margins.css"; @@ -28,5 +29,3 @@ register((moonmap) => { } }); }); - -export default MarginsCSS; diff --git a/src/mappings/discord/styles/shared/Markup.css.ts b/src/mappings/discord/styles/shared/Markup.css.ts deleted file mode 100644 index 3b3e6c7..0000000 --- a/src/mappings/discord/styles/shared/Markup.css.ts +++ /dev/null @@ -1,32 +0,0 @@ -import register from "../../../../registry"; - -type MarkupCSS = { - markup: string; - inlineFormat: string; - codeContainer: string; - codeActions: string; - blockquoteContainer: string; - blockquoteDivider: string; - slateBlockquoteContainer: string; - roleMention: string; - rolePopout: string; - roleHeader: string; - roleScroller: string; - timestamp: string; - timestampTooltip: string; -}; - -register((moonmap) => { - const name = "discord/styles/shared/Markup.css"; - moonmap.register({ - name, - find: ["markup:", "inlineFormat:"], - process({ id }) { - moonmap.addModule(id, name); - - return true; - } - }); -}); - -export default MarkupCSS; diff --git a/src/mappings/discord/uikit/Flex.ts b/src/mappings/discord/uikit/Flex.ts index 2bdb1cc..497fe91 100644 --- a/src/mappings/discord/uikit/Flex.ts +++ b/src/mappings/discord/uikit/Flex.ts @@ -1,12 +1,6 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; -import { - Component, - ComponentClass, - CSSProperties, - PropsWithChildren -} from "react"; +import { Component, ComponentClass, CSSProperties, PropsWithChildren } from "react"; import * as CSS from "csstype"; export enum FlexDirection { @@ -52,7 +46,7 @@ export interface Flex Align: typeof FlexAlign; Justify: typeof FlexJustify; Wrap: typeof FlexWrap; - Child: Component< + Child: ComponentClass< PropsWithChildren<{ className?: string; shrink?: CSS.Property.FlexShrink; @@ -64,6 +58,11 @@ export interface Flex >; } +type Exports = { + default: Flex; +}; +export default Exports; + register((moonmap) => { const name = "discord/uikit/Flex"; moonmap.register({ @@ -76,5 +75,3 @@ register((moonmap) => { } }); }); - -export default Flex; diff --git a/src/mappings/discord/uikit/HeaderBar.ts b/src/mappings/discord/uikit/HeaderBar.ts index 535f5c7..bb0eb5b 100644 --- a/src/mappings/discord/uikit/HeaderBar.ts +++ b/src/mappings/discord/uikit/HeaderBar.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/uikit/ListSectionItem.ts b/src/mappings/discord/uikit/ListSectionItem.ts index 5b58701..bc33188 100644 --- a/src/mappings/discord/uikit/ListSectionItem.ts +++ b/src/mappings/discord/uikit/ListSectionItem.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/uikit/OverflowTooltip.ts b/src/mappings/discord/uikit/OverflowTooltip.ts index 2707326..35e166a 100644 --- a/src/mappings/discord/uikit/OverflowTooltip.ts +++ b/src/mappings/discord/uikit/OverflowTooltip.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/uikit/legacy/LegacyText.ts b/src/mappings/discord/uikit/legacy/LegacyText.ts index 2989eed..93e9577 100644 --- a/src/mappings/discord/uikit/legacy/LegacyText.ts +++ b/src/mappings/discord/uikit/legacy/LegacyText.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/utils/AnalyticsUtils.ts b/src/mappings/discord/utils/AnalyticsUtils.ts index 8ae7752..d990608 100644 --- a/src/mappings/discord/utils/AnalyticsUtils.ts +++ b/src/mappings/discord/utils/AnalyticsUtils.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/utils/AvatarUtils.ts b/src/mappings/discord/utils/AvatarUtils.ts index ed468a0..58352a5 100644 --- a/src/mappings/discord/utils/AvatarUtils.ts +++ b/src/mappings/discord/utils/AvatarUtils.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/utils/ClipboardUtils.ts b/src/mappings/discord/utils/ClipboardUtils.ts index 96fc47e..28898c4 100644 --- a/src/mappings/discord/utils/ClipboardUtils.ts +++ b/src/mappings/discord/utils/ClipboardUtils.ts @@ -1,10 +1,11 @@ import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; -type ClipboardUtils = { +type Exports = { SUPPORTS_COPY: boolean; copy: (text: string) => boolean; }; +export default Exports; register((moonmap, lunast) => { const name = "discord/utils/ClipboardUtils"; @@ -40,5 +41,3 @@ register((moonmap, lunast) => { } }); }); - -export default ClipboardUtils; diff --git a/src/mappings/discord/utils/HTTPUtils.ts b/src/mappings/discord/utils/HTTPUtils.ts index 79cb5a4..68c2d75 100644 --- a/src/mappings/discord/utils/HTTPUtils.ts +++ b/src/mappings/discord/utils/HTTPUtils.ts @@ -6,6 +6,7 @@ export type HTTPUtilsRequest = { query?: Record; headers?: Record; body?: any; + oldFormErrors?: boolean; }; export type HTTPUtilsResponse = { @@ -16,9 +17,7 @@ export type HTTPUtilsResponse = { body?: any; }; -export type HTTPUtilsFunction = ( - data: HTTPUtilsRequest -) => Promise; +export type HTTPUtilsFunction = (data: HTTPUtilsRequest) => Promise; type HTTP = { get: HTTPUtilsFunction; @@ -28,9 +27,10 @@ type HTTP = { del: HTTPUtilsFunction; }; -type HTTPUtils = { +type Exports = { HTTP: HTTP; }; +export default Exports; register((moonmap) => { const name = "discord/utils/HTTPUtils"; @@ -49,5 +49,3 @@ register((moonmap) => { } }); }); - -export default HTTPUtils; diff --git a/src/mappings/discord/utils/MaskedLinkUtils.ts b/src/mappings/discord/utils/MaskedLinkUtils.ts index ed54f8a..ea62134 100644 --- a/src/mappings/discord/utils/MaskedLinkUtils.ts +++ b/src/mappings/discord/utils/MaskedLinkUtils.ts @@ -1,6 +1,12 @@ import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; +type Exports = { + isLinkTrusted: (link: string, unk?: string) => boolean; + handleClick: (link: string, unk?: string) => void; +}; +export default Exports; + register((moonmap) => { const name = "discord/utils/MaskedLinkUtils"; moonmap.register({ diff --git a/src/mappings/discord/utils/NativeUtils.ts b/src/mappings/discord/utils/NativeUtils.ts index 1c88a74..68d35a8 100644 --- a/src/mappings/discord/utils/NativeUtils.ts +++ b/src/mappings/discord/utils/NativeUtils.ts @@ -1,9 +1,12 @@ import register from "../../../registry"; -// TODO type NativeUtils = { copyImage: (url: string) => void; }; +type Exports = { + default: NativeUtils; +}; +export default Exports; register((moonmap) => { const name = "discord/utils/NativeUtils"; @@ -17,5 +20,3 @@ register((moonmap) => { } }); }); - -export default NativeUtils; diff --git a/src/mappings/discord/utils/PermissionUtils.ts b/src/mappings/discord/utils/PermissionUtils.ts index 684ef30..e83f77e 100644 --- a/src/mappings/discord/utils/PermissionUtils.ts +++ b/src/mappings/discord/utils/PermissionUtils.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/discord/utils/SnowflakeUtils.ts b/src/mappings/discord/utils/SnowflakeUtils.ts index f930cf6..fb48313 100644 --- a/src/mappings/discord/utils/SnowflakeUtils.ts +++ b/src/mappings/discord/utils/SnowflakeUtils.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; register((moonmap) => { diff --git a/src/mappings/highlight.js.ts b/src/mappings/highlight.js.ts index ae23bd0..1fa432e 100644 --- a/src/mappings/highlight.js.ts +++ b/src/mappings/highlight.js.ts @@ -1,6 +1,12 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../registry"; +type hljs = typeof import("highlightjs"); +type Exports = hljs & { + default: hljs; + HighlightJS: hljs; +}; +export default Exports; + register((moonmap) => { const name = "highlight.js"; moonmap.register({ diff --git a/src/mappings/highlight.js/lib/core.ts b/src/mappings/highlight.js/lib/core.ts index e8145f4..e0ace65 100644 --- a/src/mappings/highlight.js/lib/core.ts +++ b/src/mappings/highlight.js/lib/core.ts @@ -1,6 +1,8 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../../registry"; +type Exports = typeof import("highlightjs"); +export default Exports; + register((moonmap) => { const name = "highlight.js/lib/core"; moonmap.register({ diff --git a/src/mappings/lodash.ts b/src/mappings/lodash.ts index 067a5d4..34c92f1 100644 --- a/src/mappings/lodash.ts +++ b/src/mappings/lodash.ts @@ -1,6 +1,8 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../registry"; +type Exports = typeof import("lodash"); +export default Exports; + register((moonmap) => { const name = "lodash"; moonmap.register({ diff --git a/src/mappings/murmurhash.ts b/src/mappings/murmurhash.ts index d96eb64..736a40a 100644 --- a/src/mappings/murmurhash.ts +++ b/src/mappings/murmurhash.ts @@ -1,6 +1,31 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../registry"; +// copypasted https://github.com/perezd/node-murmurhash/blob/master/murmurhash.d.ts + +type hashfunc = (key: string | Uint8Array, seed?: number) => number; + +/** + * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + * + * @param key - ASCII only + * @param seed - (optional) positive integer + * @returns 32-bit positive integer hash + */ +type murmurhash = hashfunc; + +type Exports = murmurhash & { + /** + * JS Implementation of MurmurHash2 + * + * @param str - ASCII only + * @param seed - (optional) positive integer + * @returns 32-bit positive integer hash + */ + v2: hashfunc; + v3: murmurhash; +}; +export default Exports; + register((moonmap) => { const name = "murmurhash"; moonmap.register({ diff --git a/src/mappings/platform.js.ts b/src/mappings/platform.js.ts index 7fda74b..940a433 100644 --- a/src/mappings/platform.js.ts +++ b/src/mappings/platform.js.ts @@ -1,6 +1,8 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../registry"; +type Exports = typeof import("platform"); +export default Exports; + register((moonmap) => { const name = "platform.js"; moonmap.register({ diff --git a/src/mappings/react.ts b/src/mappings/react.ts index 268015d..cf9ad91 100644 --- a/src/mappings/react.ts +++ b/src/mappings/react.ts @@ -1,16 +1,15 @@ import register from "../registry"; -type React = typeof import("react"); +type Exports = typeof import("react") & { + __mappings_exportEquals: true; +}; +export default Exports; register((moonmap) => { const name = "react"; moonmap.register({ name, - find: [ - "__SECRET_INTERNALS_DO_NOT_USE" + "_OR_YOU_WILL_BE_FIRED", - /\.?version(?:=|:)/, - /\.?createElement(?:=|:)/ - ], + find: ["__SECRET_INTERNALS_DO_NOT_USE" + "_OR_YOU_WILL_BE_FIRED", /\.?version(?:=|:)/, /\.?createElement(?:=|:)/], process({ id }) { moonmap.addModule(id, name); @@ -18,5 +17,3 @@ register((moonmap) => { } }); }); - -export default React; diff --git a/src/mappings/simple-markdown.ts b/src/mappings/simple-markdown.ts index 9628910..930d063 100644 --- a/src/mappings/simple-markdown.ts +++ b/src/mappings/simple-markdown.ts @@ -1,4 +1,3 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../registry"; register((moonmap) => { diff --git a/src/mappings/uuid/v4.ts b/src/mappings/uuid/v4.ts index 5132e8e..6343ef5 100644 --- a/src/mappings/uuid/v4.ts +++ b/src/mappings/uuid/v4.ts @@ -1,6 +1,8 @@ -import { ModuleExportType } from "@moonlight-mod/moonmap"; import register from "../../registry"; +type Exports = Crypto["randomUUID"]; +export default Exports; + register((moonmap) => { const name = "uuid/v4"; moonmap.register({ diff --git a/src/modules.ts b/src/modules.ts index 58a21ad..7aef115 100644 --- a/src/modules.ts +++ b/src/modules.ts @@ -1,44 +1,69 @@ +// auto-generated +import "./mappings/chroma-js"; +import "./mappings/classnames"; +import "./mappings/ctrl/tinycolor"; +import "./mappings/dependency-graph"; +import "./mappings/discord/Constants"; +import "./mappings/discord/Dispatcher"; import "./mappings/discord/actions/ContextMenuActionCreators"; import "./mappings/discord/actions/LayerActionCreators"; import "./mappings/discord/actions/MessageActionCreators"; import "./mappings/discord/actions/UserActionCreators"; import "./mappings/discord/actions/UserProfileModalActionCreators"; +import "./mappings/discord/actions/UserSettingsModalActionCreators"; +import "./mappings/discord/components/common/Alerts"; +import "./mappings/discord/components/common/BaseHeaderBar"; import "./mappings/discord/components/common/Breadcrumbs.css"; -import "./mappings/discord/components/common/index"; +import "./mappings/discord/components/common/FileUpload"; +import "./mappings/discord/components/common/FormSwitch.css"; +import "./mappings/discord/components/common/HeaderBar.css"; +import "./mappings/discord/components/common/HelpMessage.css"; import "./mappings/discord/components/common/NoResults"; +import "./mappings/discord/components/common/PanelButton"; +import "./mappings/discord/components/common/Scroller.css"; import "./mappings/discord/components/common/SettingsNotice"; import "./mappings/discord/components/common/SettingsView"; import "./mappings/discord/components/common/UserSummaryItem"; -import "./mappings/discord/Constants"; -import "./mappings/discord/Dispatcher"; +import "./mappings/discord/components/common/index"; +import "./mappings/discord/components/modals/ConfirmModal"; import "./mappings/discord/flow/Server"; import "./mappings/discord/intl"; +import "./mappings/discord/lib/BaseRecord"; import "./mappings/discord/lib/ChannelMessages"; import "./mappings/discord/lib/web/Storage"; import "./mappings/discord/modules/a11y/AccessibilityStore"; import "./mappings/discord/modules/age_gate/web/components/AgeGate"; import "./mappings/discord/modules/age_gate/web/components/AgeGate.css"; -import "./mappings/discord/modules/applications/ApplicationStore"; import "./mappings/discord/modules/application_commands/ApplicationCommandBuiltIns"; import "./mappings/discord/modules/application_commands/ApplicationCommandTypes"; +import "./mappings/discord/modules/applications/ApplicationStore"; +import "./mappings/discord/modules/build_overrides/web/BuildOverride.css"; import "./mappings/discord/modules/calls/ChannelRTCStore"; +import "./mappings/discord/modules/discovery/web/Discovery.css"; import "./mappings/discord/modules/emojis/EmojiStore"; import "./mappings/discord/modules/experiments/ExperimentStore"; +import "./mappings/discord/modules/forums/web/Forums.css"; +import "./mappings/discord/modules/forums/web/Header.css"; +import "./mappings/discord/modules/forums/web/SortMenu.css"; +import "./mappings/discord/modules/forums/web/Tag"; import "./mappings/discord/modules/gateway/GatewayConnectionStore"; +import "./mappings/discord/modules/guild_settings/GuildRoleMemberCountStore"; +import "./mappings/discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css"; import "./mappings/discord/modules/guild_settings/web/AppCard.css"; import "./mappings/discord/modules/guild_settings/web/AppCardItem.css"; import "./mappings/discord/modules/guild_settings/web/SearchSection.css"; -import "./mappings/discord/modules/guild_settings/GuildRoleMemberCountStore"; -import "./mappings/discord/modules/guild_settings/IntegrationCard.css"; import "./mappings/discord/modules/guild_sidebar/web/CategoryChannel.css"; import "./mappings/discord/modules/markup/MarkupEligibilityUtils"; import "./mappings/discord/modules/markup/MarkupUtils"; -import "./mappings/discord/modules/messages/createMessage"; +import "./mappings/discord/modules/menus/web/Menu"; import "./mappings/discord/modules/messages/MessageParser"; +import "./mappings/discord/modules/messages/createMessage"; import "./mappings/discord/modules/messages/web/Markup.css"; import "./mappings/discord/modules/messages/web/Message.css"; import "./mappings/discord/modules/messages/web/TimestampTooltip"; import "./mappings/discord/modules/messages/web/UserMention"; +import "./mappings/discord/modules/oauth2/index"; +import "./mappings/discord/modules/people/web/PeoplePage.css"; import "./mappings/discord/modules/replies/PendingReplyStore"; import "./mappings/discord/modules/replies/ReferencedMessageStore"; import "./mappings/discord/modules/spotify/SpotifyActionCreators"; @@ -48,22 +73,31 @@ import "./mappings/discord/modules/user_profile/UserProfileStore"; import "./mappings/discord/modules/user_profile/web/BiteSizeActivity.css"; import "./mappings/discord/modules/user_profile/web/UserActivity"; import "./mappings/discord/modules/user_profile/web/UserProfileActivityCardWrapper"; -import "./mappings/discord/modules/user_settings/web/openUserSettings"; import "./mappings/discord/modules/user_settings/ThemeStore"; import "./mappings/discord/modules/user_settings/UserSettings"; import "./mappings/discord/modules/user_settings/UserSettingsProtoStore"; -import "./mappings/discord/packages/flux"; -import "./mappings/discord/stores/AuthenticationStore"; +import "./mappings/discord/packages/flux/BatchedStoreListener"; +import "./mappings/discord/packages/flux/ChangeListeners"; +import "./mappings/discord/packages/flux/Dispatcher"; +import "./mappings/discord/packages/flux/Emitter"; +import "./mappings/discord/packages/flux/LoggingUtils"; +import "./mappings/discord/packages/flux/PersistedStore"; +import "./mappings/discord/packages/flux/Store"; +import "./mappings/discord/packages/flux/connectStores"; +import "./mappings/discord/packages/flux/index"; +import "./mappings/discord/packages/flux/useStateFromStores"; +import "./mappings/discord/records/UserRecord"; import "./mappings/discord/stores/ApplicationStreamingStore"; +import "./mappings/discord/stores/AuthenticationStore"; import "./mappings/discord/stores/ChannelStore"; import "./mappings/discord/stores/GameStore"; -import "./mappings/discord/stores/GuildStore"; import "./mappings/discord/stores/GuildCategoryStore"; -import "./mappings/discord/stores/GuildMemberStore"; import "./mappings/discord/stores/GuildMemberCountStore"; +import "./mappings/discord/stores/GuildMemberStore"; +import "./mappings/discord/stores/GuildStore"; import "./mappings/discord/stores/MediaEngineStore"; -import "./mappings/discord/stores/MessageStore"; import "./mappings/discord/stores/MessageReactionsStore"; +import "./mappings/discord/stores/MessageStore"; import "./mappings/discord/stores/PermissionStore"; import "./mappings/discord/stores/PresenceStore"; import "./mappings/discord/stores/ReadStateStore"; @@ -74,17 +108,17 @@ import "./mappings/discord/stores/SessionsStore"; import "./mappings/discord/stores/SortedGuildStore"; import "./mappings/discord/stores/TypingStore"; import "./mappings/discord/stores/UploadAttachmentStore"; -import "./mappings/discord/stores/UserStore"; import "./mappings/discord/stores/UserGuildSettingsStore"; +import "./mappings/discord/stores/UserStore"; import "./mappings/discord/stores/VoiceStateStore"; import "./mappings/discord/styles/shared/Margins.css"; import "./mappings/discord/uikit/Flex"; import "./mappings/discord/uikit/HeaderBar"; +import "./mappings/discord/uikit/ListSectionItem"; import "./mappings/discord/uikit/OverflowTooltip"; +import "./mappings/discord/uikit/Spinner"; import "./mappings/discord/uikit/legacy/LegacyText"; -import "./mappings/discord/uikit/ListSectionItem"; import "./mappings/discord/uikit/search/SearchBar"; -import "./mappings/discord/uikit/Spinner"; import "./mappings/discord/utils/AnalyticsUtils"; import "./mappings/discord/utils/AvatarUtils"; import "./mappings/discord/utils/BigFlagUtils"; @@ -93,17 +127,15 @@ import "./mappings/discord/utils/ColorUtils"; import "./mappings/discord/utils/FileUtils"; import "./mappings/discord/utils/FlagUtils"; import "./mappings/discord/utils/HTTPUtils"; +import "./mappings/discord/utils/MaskedLinkUtils"; import "./mappings/discord/utils/NativeUtils"; import "./mappings/discord/utils/PermissionUtils"; import "./mappings/discord/utils/SnowflakeUtils"; -import "./mappings/ctrl/tinycolor"; -import "./mappings/chroma-js"; -import "./mappings/classnames"; import "./mappings/highlight.js"; import "./mappings/highlight.js/lib/core"; -import "./mappings/platform.js"; import "./mappings/lodash"; import "./mappings/murmurhash"; +import "./mappings/platform.js"; import "./mappings/react"; import "./mappings/simple-markdown"; import "./mappings/uuid/v4"; diff --git a/src/types.ts b/src/types.ts index f0851db..b776300 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,30 +1,102 @@ // auto-generated +import ChromaJS from "./mappings/chroma-js"; +import DependencyGraph from "./mappings/dependency-graph"; +import Constants from "./mappings/discord/Constants"; import _Dispatcher from "./mappings/discord/Dispatcher"; import ContextMenuActionCreators from "./mappings/discord/actions/ContextMenuActionCreators"; +import UserSettingsModalActionCreators from "./mappings/discord/actions/UserSettingsModalActionCreators"; +import Alerts from "./mappings/discord/components/common/Alerts"; +import BaseHeaderBar from "./mappings/discord/components/common/BaseHeaderBar"; +import FileUpload from "./mappings/discord/components/common/FileUpload"; +import FormSwitchCSS from "./mappings/discord/components/common/FormSwitch.css"; +import HeaderBarCSS from "./mappings/discord/components/common/HeaderBar.css"; +import HelpMessageCSS from "./mappings/discord/components/common/HelpMessage.css"; +import PanelButton from "./mappings/discord/components/common/PanelButton"; +import ScrollerCSS from "./mappings/discord/components/common/Scroller.css"; import Components from "./mappings/discord/components/common/index"; -import IntegrationCardCSS from "./mappings/discord/modules/guild_settings/IntegrationCard.css"; +import ConfirmModal from "./mappings/discord/components/modals/ConfirmModal"; +import BaseRecord from "./mappings/discord/lib/BaseRecord"; +import Storage from "./mappings/discord/lib/web/Storage"; +import BuildOverrideCSS from "./mappings/discord/modules/build_overrides/web/BuildOverride.css"; +import DiscoveryCSS from "./mappings/discord/modules/discovery/web/Discovery.css"; +import ForumsCSS from "./mappings/discord/modules/forums/web/Forums.css"; +import ForumHeaderCSS from "./mappings/discord/modules/forums/web/Header.css"; +import ForumSortMenuCSS from "./mappings/discord/modules/forums/web/SortMenu.css"; +import ForumTag from "./mappings/discord/modules/forums/web/Tag"; +import GuildSettingsRoleEditCSS from "./mappings/discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css"; +import AppCardCSS from "./mappings/discord/modules/guild_settings/web/AppCard.css"; +import AppCardItemCSS from "./mappings/discord/modules/guild_settings/web/AppCardItem.css"; +import GuildSettingsSearchSectionCSS from "./mappings/discord/modules/guild_settings/web/SearchSection.css"; import MarkupUtils from "./mappings/discord/modules/markup/MarkupUtils"; -import OpenUserSettings from "./mappings/discord/modules/user_settings/web/openUserSettings"; +import Menu from "./mappings/discord/modules/menus/web/Menu"; +import MarkupCSS from "./mappings/discord/modules/messages/web/Markup.css"; +import MessageCSS from "./mappings/discord/modules/messages/web/Message.css"; +import Oauth2 from "./mappings/discord/modules/oauth2/index"; +import PeoplePageCSS from "./mappings/discord/modules/people/web/PeoplePage.css"; +import ByteSizeActivityCSS from "./mappings/discord/modules/user_profile/web/BiteSizeActivity.css"; import Flux from "./mappings/discord/packages/flux"; +import MarginsCSS from "./mappings/discord/styles/shared/Margins.css"; import Flex from "./mappings/discord/uikit/Flex"; import ClipboardUtils from "./mappings/discord/utils/ClipboardUtils"; import HTTPUtils from "./mappings/discord/utils/HTTPUtils"; import NativeUtils from "./mappings/discord/utils/NativeUtils"; +import HighlightJS from "./mappings/highlight.js"; +import HighlightJSCore from "./mappings/highlight.js/lib/core"; +import lodash from "./mappings/lodash"; +import murmurhash from "./mappings/murmurhash"; +import PlatformJS from "./mappings/platform.js"; import React from "./mappings/react"; +import UUID from "./mappings/uuid/v4"; export type MappedModules = { + "chroma-js": ChromaJS; + "dependency-graph": DependencyGraph; + "discord/Constants": Constants; "discord/Dispatcher": _Dispatcher; "discord/actions/ContextMenuActionCreators": ContextMenuActionCreators; + "discord/actions/UserSettingsModalActionCreators": UserSettingsModalActionCreators; + "discord/components/common/Alerts": Alerts; + "discord/components/common/BaseHeaderBar": BaseHeaderBar; + "discord/components/common/FileUpload": FileUpload; + "discord/components/common/FormSwitch.css": FormSwitchCSS; + "discord/components/common/HeaderBar.css": HeaderBarCSS; + "discord/components/common/HelpMessage.css": HelpMessageCSS; + "discord/components/common/PanelButton": PanelButton; + "discord/components/common/Scroller.css": ScrollerCSS; "discord/components/common/index": Components; - "discord/modules/guild_settings/IntegrationCard.css": IntegrationCardCSS; + "discord/components/modals/ConfirmModal": ConfirmModal; + "discord/lib/BaseRecord": BaseRecord; + "discord/lib/web/Storage": Storage; + "discord/modules/build_overrides/web/BuildOverride.css": BuildOverrideCSS; + "discord/modules/discovery/web/Discovery.css": DiscoveryCSS; + "discord/modules/forums/web/Forums.css": ForumsCSS; + "discord/modules/forums/web/Header.css": ForumHeaderCSS; + "discord/modules/forums/web/SortMenu.css": ForumSortMenuCSS; + "discord/modules/forums/web/Tag": ForumTag; + "discord/modules/guild_settings/roles/web/GuildSettingsRoleEdit.css": GuildSettingsRoleEditCSS; + "discord/modules/guild_settings/web/AppCard.css": AppCardCSS; + "discord/modules/guild_settings/web/AppCardItem.css": AppCardItemCSS; + "discord/modules/guild_settings/web/SearchSection.css": GuildSettingsSearchSectionCSS; "discord/modules/markup/MarkupUtils": MarkupUtils; - "discord/modules/user_settings/web/openUserSettings": OpenUserSettings; + "discord/modules/menus/web/Menu": Menu; + "discord/modules/messages/web/Markup.css": MarkupCSS; + "discord/modules/messages/web/Message.css": MessageCSS; + "discord/modules/oauth2/index": Oauth2; + "discord/modules/people/web/PeoplePage.css": PeoplePageCSS; + "discord/modules/user_profile/web/BiteSizeActivity.css": ByteSizeActivityCSS; "discord/packages/flux": Flux; + "discord/styles/shared/Margins.css": MarginsCSS; "discord/uikit/Flex": Flex; "discord/utils/ClipboardUtils": ClipboardUtils; "discord/utils/HTTPUtils": HTTPUtils; "discord/utils/NativeUtils": NativeUtils; + "highlight.js": HighlightJS; + "highlight.js/lib/core": HighlightJSCore; + "lodash": lodash; + "murmurhash": murmurhash; + "platform.js": PlatformJS; "react": React; + "uuid/v4": UUID; }; export declare function WebpackRequire(