From d4783ffd703509f7c5eeff890821882ecaa86f5a Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sun, 12 May 2024 05:07:02 -0400 Subject: [PATCH 001/126] Initial commit --- src/utils/types.ts | 4 +- src/webpack/common/types/fluxActionType.d.ts | 40 +++ src/webpack/common/types/fluxEvents.d.ts | 40 --- src/webpack/common/types/stores.d.ts | 275 ++++++++++++++++--- src/webpack/common/types/utils.d.ts | 180 +++++++++++- 5 files changed, 442 insertions(+), 97 deletions(-) create mode 100644 src/webpack/common/types/fluxActionType.d.ts delete mode 100644 src/webpack/common/types/fluxEvents.d.ts diff --git a/src/utils/types.ts b/src/utils/types.ts index bec7cb0b3..547b93e2a 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -18,7 +18,7 @@ import { Command } from "@api/Commands"; import { NavContextMenuPatchCallback } from "@api/ContextMenu"; -import { FluxEvents } from "@webpack/types"; +import type { FluxActionType } from "@webpack/types"; import { Promisable } from "type-fest"; // exists to export default definePlugin({...}) @@ -114,7 +114,7 @@ export interface PluginDef { * Allows you to subscribe to Flux events */ flux?: { - [E in FluxEvents]?: (event: any) => void; + [E in FluxActionType]?: (event: any) => void; }; /** * Allows you to manipulate context menus diff --git a/src/webpack/common/types/fluxActionType.d.ts b/src/webpack/common/types/fluxActionType.d.ts new file mode 100644 index 000000000..43ad8fc7c --- /dev/null +++ b/src/webpack/common/types/fluxActionType.d.ts @@ -0,0 +1,40 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +/* +function makeFluxEventList() { + // prefill MESSAGE_CREATE so that typescript infers this is a String Set + // without explicitly typing so that this function is also valid javascript + const events = new Set(["MESSAGE_CREATE"]); + + const { nodes } = Vencord.Webpack.Common.FluxDispatcher._actionHandlers._dependencyGraph; + for (const nodeId in nodes) { + for (const event in nodes[nodeId].actionHandler) { + events.add(event); + } + } + for (const event in Vencord.Webpack.Common.FluxDispatcher._subscriptions) { + events.add(event); + } + + return Array.from(events, e => JSON.stringify(e)).sort().join("|"); +} +*/ + +// 46kb worth of events ??????? +export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_DETECTION_MODAL_SEEN" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SUPPORT_CHANGED" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PIP_MODE_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "ALLOW_SPAM_MESSAGES_FOR_USER" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMANDS_FETCH" | "APPLICATION_COMMANDS_FETCH_FOR_APPLICATION" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_FETCH" | "APPLICATION_COMMAND_REGISTRY_UPDATE" | "APPLICATION_COMMAND_SEARCH_STORE_QUERY" | "APPLICATION_COMMAND_SEARCH_STORE_UI_UPDATE" | "APPLICATION_COMMAND_SEARCH_STORE_UPDATE" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_DIRECTORY_FETCH_SUCCESS" | "APPLICATION_STORE_DIRECTORY_MUTE" | "APPLICATION_STORE_DIRECTORY_UNMUTE" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ADD" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_REMOVE" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_CLOSE" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_OPEN" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_HIGHLIGHTS_FETCH_START" | "CHANNEL_HIGHLIGHTS_FETCH_SUCCESS" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MESSAGE_PREVIEW_LOAD_MESSAGES" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_MUSIC_MUTED" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_GUILD_CACHE" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_SAVE_CLIP" | "CLIPS_SETTINGS_UPDATE" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CREATE_PENDING_REPLY" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_ENABLED" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISCOVER_GUILDS_FETCH_FAILURE" | "DISCOVER_GUILDS_FETCH_START" | "DISCOVER_GUILDS_FETCH_SUCCESS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_NITRODUCTION_TOOLTIP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_FREE_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_FREE_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_INBOUND_UPDATE" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMOJI_DELETE" | "EMOJI_FETCH_FAILURE" | "EMOJI_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "EMOJI_UPLOAD_START" | "EMOJI_UPLOAD_STOP" | "ENABLE_AUTOMATIC_ACK" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "EXPERIMENT_TRIGGER" | "FETCH_AUTH_SESSIONS_SUCCESS" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_ICON_UPDATE" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_SUCCESS" | "GUILD_ANALYTICS_MEMBER_INSIGHTS_FETCH_SUCCESS" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_DISABLE_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_STATUS" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE" | "GUILD_MOVE_BY_ID" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTIONS_CONFIGURATIONS_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_RESET" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_FAILED" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SUBMIT" | "GUILD_SETTINGS_DEFAULT_CHANNELS_TOGGLE" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INTEGRATIONS_WITH_COMMANDS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_EDUCATION_UPSELL_DISMISSED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_EDIT" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_ERRORS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_FAILED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SUBMIT" | "GUILD_SETTINGS_ONBOARDING_STEP" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS" | "GUILD_SETTINGS_ROLES_EDIT_SECTION_UPDATE" | "GUILD_SETTINGS_ROLES_INIT" | "GUILD_SETTINGS_ROLES_SAVE_FAIL" | "GUILD_SETTINGS_ROLES_SAVE_SUCCESS" | "GUILD_SETTINGS_ROLES_SORT_UPDATE" | "GUILD_SETTINGS_ROLES_SUBMITTING" | "GUILD_SETTINGS_ROLES_UPDATE_COLOR" | "GUILD_SETTINGS_ROLES_UPDATE_DESCRIPTION" | "GUILD_SETTINGS_ROLES_UPDATE_NAME" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSION_SET" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_CONNECTION_CONFIGURATIONS" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_ICON" | "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SETTINGS_VANITY_URL_CLOSE" | "GUILD_SETTINGS_VANITY_URL_ERROR" | "GUILD_SETTINGS_VANITY_URL_RESET" | "GUILD_SETTINGS_VANITY_URL_SET" | "GUILD_SOUNDBOARD_DELETE_SUCCESS" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_FETCH_FAILURE" | "GUILD_SOUNDBOARD_FETCH_SUCCESS" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_UPDATE_SUCCESS" | "GUILD_SOUNDBOARD_UPLOAD_SUCCESS" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_TOP_READ_CHANNELS_FETCH_SUCCESS" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UNREADS_SET_LAST_CLEARED" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIDE_SPAM_MESSAGES_FOR_USER" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_APPLICATION_PERMISSIONS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_CLEAR" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_COMMAND_UPDATE" | "INTEGRATION_PERMISSION_SETTINGS_EDIT" | "INTEGRATION_PERMISSION_SETTINGS_INIT" | "INTEGRATION_PERMISSION_SETTINGS_RESET" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_COMMAND" | "INTEGRATION_SETTINGS_START_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_COMMAND" | "INTEGRATION_SETTINGS_STOP_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_INTEGRATION" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOBBY_CONNECT" | "LOBBY_CREATE" | "LOBBY_DELETE" | "LOBBY_DISCONNECT" | "LOBBY_MEMBER_CONNECT" | "LOBBY_MEMBER_DISCONNECT" | "LOBBY_MEMBER_UPDATE" | "LOBBY_MESSAGE" | "LOBBY_UPDATE" | "LOBBY_VOICE_CONNECT" | "LOBBY_VOICE_DISCONNECT" | "LOBBY_VOICE_SERVER_UPDATE" | "LOBBY_VOICE_STATE_UPDATE" | "LOCAL_ACTIVITY_UPDATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_MFA_WEBAUTHN" | "LOGIN_MFA_WEBAUTHN_TO_TOTP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGOUT" | "LOGOUT_AUTH_SESSIONS_SUCCESS" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_ENABLE_SOUNDSHARE" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_AV1" | "MEDIA_ENGINE_SET_DESKTOP_SOURCE" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_TODO_ADD" | "MESSAGE_TODO_CLEANUP" | "MESSAGE_TODO_COMPLETE" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MFA_CLEAR_BACKUP_CODES" | "MFA_DISABLE_SUCCESS" | "MFA_ENABLE_SUCCESS" | "MFA_SEND_VERIFICATION_KEY" | "MFA_SMS_TOGGLE" | "MFA_SMS_TOGGLE_COMPLETE" | "MFA_VIEW_BACKUP_CODES" | "MFA_WEBAUTHN_CREDENTIALS_LOADED" | "MFA_WEBAUTHN_CREDENTIALS_LOADING" | "MFA_WEBAUTHN_CREDENTIAL_CREATE" | "MFA_WEBAUTHN_CREDENTIAL_DELETE" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NITRODUCTION_PERSISTENT_ONBOARDING_TOGGLE_COLLAPSE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_GAMES_CHANGE" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_START_SESSION" | "PARTNER_REQUIREMENTS_FETCH_FAILURE" | "PARTNER_REQUIREMENTS_FETCH_START" | "PARTNER_REQUIREMENTS_FETCH_SUCCESS" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_PANEL_TOGGLE_SECTION" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECENT_MENTION_DELETE" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_FORUM_UNREADS" | "RESET_ALL_NITRODUCTION_TOOLTIPS" | "RESET_HAS_COMPLETED_STEP" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HAS_COMPLETED_STEP" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SOUNDPACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_ADD_FAVORITE_SOUND" | "SOUNDBOARD_REMOVE_FAVORITE_SOUND" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_APPLICATION_INTERACTION_FAKE_USER" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPDATE_APP_COLORS" | "UPDATE_AVAILABLE" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HAS_FLOW_START_EVENT_BEEN_EMITTED" | "UPDATE_MANUALLY" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_DISABLE_SUBMIT" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SETTINGS_THEME_OVERRIDE" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SETTINGS_CLEAR" | "WELCOME_SCREEN_SETTINGS_RESET" | "WELCOME_SCREEN_SETTINGS_UPDATE" | "WELCOME_SCREEN_SUBMIT" | "WELCOME_SCREEN_SUBMIT_FAILURE" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD"; diff --git a/src/webpack/common/types/fluxEvents.d.ts b/src/webpack/common/types/fluxEvents.d.ts deleted file mode 100644 index 36bcb2cde..000000000 --- a/src/webpack/common/types/fluxEvents.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2023 Vendicated and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . -*/ - -/* -function makeFluxEventList() { - // prefill MESSAGE_CREATE so that typescript infers this is a String Set - // without explicitly typing so that this function is also valid javascript - const events = new Set(["MESSAGE_CREATE"]); - - const { nodes } = Vencord.Webpack.Common.FluxDispatcher._actionHandlers._dependencyGraph; - for (const nodeId in nodes) { - for (const event in nodes[nodeId].actionHandler) { - events.add(event); - } - } - for (const event in Vencord.Webpack.Common.FluxDispatcher._subscriptions) { - events.add(event); - } - - return Array.from(events, e => JSON.stringify(e)).sort().join("|"); -} -*/ - -// 46kb worth of events ??????? -export type FluxEvents = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_DETECTION_MODAL_SEEN" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SUPPORT_CHANGED" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PIP_MODE_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "ALLOW_SPAM_MESSAGES_FOR_USER" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMANDS_FETCH" | "APPLICATION_COMMANDS_FETCH_FOR_APPLICATION" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_FETCH" | "APPLICATION_COMMAND_REGISTRY_UPDATE" | "APPLICATION_COMMAND_SEARCH_STORE_QUERY" | "APPLICATION_COMMAND_SEARCH_STORE_UI_UPDATE" | "APPLICATION_COMMAND_SEARCH_STORE_UPDATE" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_DIRECTORY_FETCH_SUCCESS" | "APPLICATION_STORE_DIRECTORY_MUTE" | "APPLICATION_STORE_DIRECTORY_UNMUTE" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ADD" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_REMOVE" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_CLOSE" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_OPEN" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_HIGHLIGHTS_FETCH_START" | "CHANNEL_HIGHLIGHTS_FETCH_SUCCESS" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MESSAGE_PREVIEW_LOAD_MESSAGES" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_MUSIC_MUTED" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_GUILD_CACHE" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_SAVE_CLIP" | "CLIPS_SETTINGS_UPDATE" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CREATE_PENDING_REPLY" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_ENABLED" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISCOVER_GUILDS_FETCH_FAILURE" | "DISCOVER_GUILDS_FETCH_START" | "DISCOVER_GUILDS_FETCH_SUCCESS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_NITRODUCTION_TOOLTIP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_FREE_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_FREE_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_INBOUND_UPDATE" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMOJI_DELETE" | "EMOJI_FETCH_FAILURE" | "EMOJI_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "EMOJI_UPLOAD_START" | "EMOJI_UPLOAD_STOP" | "ENABLE_AUTOMATIC_ACK" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "EXPERIMENT_TRIGGER" | "FETCH_AUTH_SESSIONS_SUCCESS" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_ICON_UPDATE" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_SUCCESS" | "GUILD_ANALYTICS_MEMBER_INSIGHTS_FETCH_SUCCESS" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_DISABLE_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_STATUS" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE" | "GUILD_MOVE_BY_ID" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTIONS_CONFIGURATIONS_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_RESET" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_FAILED" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SUBMIT" | "GUILD_SETTINGS_DEFAULT_CHANNELS_TOGGLE" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INTEGRATIONS_WITH_COMMANDS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_EDUCATION_UPSELL_DISMISSED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_EDIT" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_ERRORS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_FAILED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SUBMIT" | "GUILD_SETTINGS_ONBOARDING_STEP" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS" | "GUILD_SETTINGS_ROLES_EDIT_SECTION_UPDATE" | "GUILD_SETTINGS_ROLES_INIT" | "GUILD_SETTINGS_ROLES_SAVE_FAIL" | "GUILD_SETTINGS_ROLES_SAVE_SUCCESS" | "GUILD_SETTINGS_ROLES_SORT_UPDATE" | "GUILD_SETTINGS_ROLES_SUBMITTING" | "GUILD_SETTINGS_ROLES_UPDATE_COLOR" | "GUILD_SETTINGS_ROLES_UPDATE_DESCRIPTION" | "GUILD_SETTINGS_ROLES_UPDATE_NAME" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSION_SET" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_CONNECTION_CONFIGURATIONS" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_ICON" | "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SETTINGS_VANITY_URL_CLOSE" | "GUILD_SETTINGS_VANITY_URL_ERROR" | "GUILD_SETTINGS_VANITY_URL_RESET" | "GUILD_SETTINGS_VANITY_URL_SET" | "GUILD_SOUNDBOARD_DELETE_SUCCESS" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_FETCH_FAILURE" | "GUILD_SOUNDBOARD_FETCH_SUCCESS" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_UPDATE_SUCCESS" | "GUILD_SOUNDBOARD_UPLOAD_SUCCESS" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_TOP_READ_CHANNELS_FETCH_SUCCESS" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UNREADS_SET_LAST_CLEARED" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIDE_SPAM_MESSAGES_FOR_USER" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_APPLICATION_PERMISSIONS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_CLEAR" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_COMMAND_UPDATE" | "INTEGRATION_PERMISSION_SETTINGS_EDIT" | "INTEGRATION_PERMISSION_SETTINGS_INIT" | "INTEGRATION_PERMISSION_SETTINGS_RESET" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_COMMAND" | "INTEGRATION_SETTINGS_START_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_COMMAND" | "INTEGRATION_SETTINGS_STOP_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_INTEGRATION" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOBBY_CONNECT" | "LOBBY_CREATE" | "LOBBY_DELETE" | "LOBBY_DISCONNECT" | "LOBBY_MEMBER_CONNECT" | "LOBBY_MEMBER_DISCONNECT" | "LOBBY_MEMBER_UPDATE" | "LOBBY_MESSAGE" | "LOBBY_UPDATE" | "LOBBY_VOICE_CONNECT" | "LOBBY_VOICE_DISCONNECT" | "LOBBY_VOICE_SERVER_UPDATE" | "LOBBY_VOICE_STATE_UPDATE" | "LOCAL_ACTIVITY_UPDATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_MFA_WEBAUTHN" | "LOGIN_MFA_WEBAUTHN_TO_TOTP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGOUT" | "LOGOUT_AUTH_SESSIONS_SUCCESS" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_ENABLE_SOUNDSHARE" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_AV1" | "MEDIA_ENGINE_SET_DESKTOP_SOURCE" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_TODO_ADD" | "MESSAGE_TODO_CLEANUP" | "MESSAGE_TODO_COMPLETE" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MFA_CLEAR_BACKUP_CODES" | "MFA_DISABLE_SUCCESS" | "MFA_ENABLE_SUCCESS" | "MFA_SEND_VERIFICATION_KEY" | "MFA_SMS_TOGGLE" | "MFA_SMS_TOGGLE_COMPLETE" | "MFA_VIEW_BACKUP_CODES" | "MFA_WEBAUTHN_CREDENTIALS_LOADED" | "MFA_WEBAUTHN_CREDENTIALS_LOADING" | "MFA_WEBAUTHN_CREDENTIAL_CREATE" | "MFA_WEBAUTHN_CREDENTIAL_DELETE" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NITRODUCTION_PERSISTENT_ONBOARDING_TOGGLE_COLLAPSE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_GAMES_CHANGE" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_START_SESSION" | "PARTNER_REQUIREMENTS_FETCH_FAILURE" | "PARTNER_REQUIREMENTS_FETCH_START" | "PARTNER_REQUIREMENTS_FETCH_SUCCESS" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_PANEL_TOGGLE_SECTION" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECENT_MENTION_DELETE" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_FORUM_UNREADS" | "RESET_ALL_NITRODUCTION_TOOLTIPS" | "RESET_HAS_COMPLETED_STEP" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HAS_COMPLETED_STEP" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SOUNDPACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_ADD_FAVORITE_SOUND" | "SOUNDBOARD_REMOVE_FAVORITE_SOUND" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_APPLICATION_INTERACTION_FAKE_USER" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPDATE_APP_COLORS" | "UPDATE_AVAILABLE" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HAS_FLOW_START_EVENT_BEEN_EMITTED" | "UPDATE_MANUALLY" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_DISABLE_SUBMIT" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SETTINGS_THEME_OVERRIDE" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SETTINGS_CLEAR" | "WELCOME_SCREEN_SETTINGS_RESET" | "WELCOME_SCREEN_SETTINGS_UPDATE" | "WELCOME_SCREEN_SUBMIT" | "WELCOME_SCREEN_SUBMIT_FAILURE" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD"; diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index d6bf3aaf3..235fada78 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -19,39 +19,105 @@ import { DraftType } from "@webpack/common"; import { Channel, Guild, Role } from "discord-types/general"; -import { FluxDispatcher, FluxEvents } from "./utils"; +import type { FluxActionHandlers, FluxActionType, FluxDispatcher, FluxPayload } from "./utils"; -type GenericFunction = (...args: any[]) => any; +type Nullish = null | undefined; -export class FluxStore { - constructor(dispatcher: FluxDispatcher, eventHandlers?: Partial void>>); +type FluxChangeListener = () => boolean; + +class FluxChangeListeners { + has(listener: FluxChangeListener): boolean; + hasAny(): boolean; + invokeAll(): void; + + add: (listener: FluxChangeListener) => void; + addConditional: (listener: FluxChangeListener, immediatelyCall?: boolean | undefined /* = true */) => void; + listeners: Set; + remove: (listener: FluxChangeListener) => void; +} + + +export class FluxStore< + Dispatcher extends FluxDispatcher = FluxDispatcher, + Payload = P, + ActionType = A +> { + constructor( + dispatcher: Dispatcher, + actionHandlers: FluxActionHandlers, + band?: number | Nullish + ); + + static displayName: undefined; + static initialized: Promise; + static destroy(): void; + static getAll(): FluxStore[]; + static initialize(): void; - addChangeListener(callback: () => void): void; - addReactChangeListener(callback: () => void): void; - removeChangeListener(callback: () => void): void; - removeReactChangeListener(callback: () => void): void; emitChange(): void; getDispatchToken(): string; getName(): string; initialize(): void; initializeIfNeeded(): void; - registerActionHandlers: GenericFunction; - syncWith: GenericFunction; - waitFor: GenericFunction; - __getLocalVars(): Record; + mustEmitChanges(mustEmitChanges?: ((payload: Payload) => boolean) | Nullish /* = () => true */): void; + registerActionHandlers(actionHandlers: FluxActionHandlers, band?: number | Nullish): void; + syncWith(stores: FluxStore[], func: () => boolean | void, delay?: number | Nullish); + waitFor(...stores: FluxStore[]): void; + + __getLocalVars: undefined; + _changeCallbacks: FluxChangeListeners; + _dispatcher: Dispatcher; + _dispatchToken: string; + _isInitialized: boolean; + _mustEmitChanges: ((payload: Payload) => boolean) | Nullish; + _reactChangeCallbacks: FluxChangeListeners; + _syncWiths: { + func: () => boolean | void; + store: FluxStore; + }[]; + addChangeListener: FluxChangeListeners["add"]; + addConditionalChangeListener: FluxChangeListeners["addConditional"]; + addReactChangeListener: FluxChangeListeners["add"]; + removeChangeListener: FluxChangeListeners["remove"]; + removeReactChangeListener: FluxChangeListeners["remove"]; } export interface Flux { Store: typeof FluxStore; } -export class WindowStore extends FluxStore { - isElementFullScreen(): boolean; - isFocused(): boolean; - windowSize(): Record<"width" | "height", number>; +export type useStateFromStores = ( + stores: FluxStore[], + getStateFromStores: () => T, + dependencies?: any[] | null | undefined, + areStatesEqual?: ((prevState: T, currState: T) => boolean) | undefined +) => T; + +export interface DraftObject { + channelId: string; + timestamp: number; + draft: string; +} + +interface DraftState { + [userId: string]: { + [channelId: string]: { + [key in DraftType]?: Omit; + } | undefined; + } | undefined; +} + + +export class DraftStore extends FluxStore { + getDraft(channelId: string, type: DraftType): string; + getRecentlyEditedDrafts(type: DraftType): DraftObject[]; + getState(): DraftState; + getThreadDraftWithParentMessageId?(arg: any): any; + getThreadSettings(channelId: string): any | null; } type Emoji = CustomEmoji | UnicodeEmoji; + export interface CustomEmoji { allNamesString: string; animated: boolean; @@ -150,29 +216,6 @@ export class EmojiStore extends FluxStore { }; } -export interface DraftObject { - channelId: string; - timestamp: number; - draft: string; -} - -interface DraftState { - [userId: string]: { - [channelId: string]: { - [key in DraftType]?: Omit; - } | undefined; - } | undefined; -} - - -export class DraftStore extends FluxStore { - getDraft(channelId: string, type: DraftType): string; - getRecentlyEditedDrafts(type: DraftType): DraftObject[]; - getState(): DraftState; - getThreadDraftWithParentMessageId?(arg: any): any; - getThreadSettings(channelId: string): any | null; -} - export class GuildStore extends FluxStore { getGuild(guildId: string): Guild; getGuildCount(): number; @@ -183,9 +226,151 @@ export class GuildStore extends FluxStore { getAllGuildRoles(): Record>; } -export type useStateFromStores = ( - stores: t.FluxStore[], - mapper: () => T, - dependencies?: any, - isEqual?: (old: T, newer: T) => boolean -) => T; +export class User { + constructor(user: object); // TEMP + + addGuildAvatarHash(guildId: string, avatarHash: string): User; + get avatarDecoration(): { + asset: string; + skuId: string; + } | null; + set avatarDecoration(avatarDecoration: { + asset: string; + skuId: string; + } | null): void; + get createdAt(): Date; + getAvatarSource(guildId?: string | Nullish, canAnimate?: boolean | undefined): { uri: string; }; + getAvatarURL(guildId?: string | Nullish, avatarSize?: number | undefined, canAnimate?: boolean | undefined): string; + hasAvatarForGuild(guildId?: string | Nullish): boolean; + hasDisabledPremium(): boolean; + hasFreePremium(): boolean; + hasHadPremium(): boolean; + hasHadSKU(skuId: string): boolean; + hasPremiumUsageFlag(flag: number): boolean; + hasPurchasedFlag(flag: number): boolean; + hasUrgentMessages(): boolean; + hasVerifiedEmailOrPhone(): boolean; + isClaimed(): boolean; + isClyde(): boolean; + isLocalBot(): boolean; + isNonUserBot(): boolean; + isPhoneVerified(): boolean; + isPomelo(): boolean; + isSystemUser(): boolean; + isVerifiedBot(): boolean; + removeGuildAvatarHash(guildId: string): User; + get tag(): string; + toString(): string; + + avatar: string; + avatarDecorationData: { + asset: string; + skuId: string; + } | null; + bot: boolean; + clan: null; // TEMP + desktop: boolean; + discriminator: string; + email: string | null; + flags: number; + globalName: string | null; + guildMemberAvatars: Record; + hasAnyStaffLevel: () => boolean; + hasBouncedEmail: boolean; + hasFlag: (flag: number) => boolean; + id: string; + isStaff: () => boolean; + isStaffPersonal: () => boolean; + mfaEnabled: boolean; + mobile: boolean; + nsfwAllowed: boolean | null; + personalConnectionId: string | null; + phone: string | null; + premiumType: number | null | undefined; + premiumUsageFlags: number; + publicFlags: number; + purchasedFlags: number; + system: boolean; + username: string; + verified: boolean; +} + +export class UserStore extends FluxStore { + static displayName: "UserStore"; + static LATEST_SNAPSHOT_VERSION: number; + + filter(predicate: (user: User) => any): User[]; + findByTag(username: string, discriminator?: string | Nullish): User | undefined; + forEach(callback: (user: User) => void): void; + getCurrentUser(): User /* | undefined */; + getUser(userId: string): User | undefined; + getUsers(): Record; + getUserStoreVersion(): number; + handleLoadCache(arg: object): void; // TEMP + takeSnapshot(): { + data: { users: [User] | []; }; + version: number; + }; +} + +export interface UserProfile { + application: null; // TEMP + accentColor: number | null; + applicationRoleConnections: []; // TEMP + badges: { + description: string; + icon: string; + id: string; + link?: string; + }[]; + banner: string | null | undefined; + bio: string; + connectedAccounts: { + id: string; + metadata?: Record; + name: string; + type: string; + verified: boolean; + }[]; + lastFetched: number; + legacyUsername: string | null; + popoutAnimationParticleType?: null | undefined; // TEMP + premiumGuildSince: Date | null; + premiumSince: Date | null; + premiumType: number | null | undefined; + profileEffectId: string | undefined; + profileFetchFailed: boolean; + pronouns: string; + themeColors?: [primaryColor: number, accentColor: number] | undefined; + userId: string; +} + +export class UserProfileStore extends FluxStore { + static displayName: "UserProfileStore"; + static LATEST_SNAPSHOT_VERSION: number; + + getUserProfile(userId: string): UserProfile | undefined; + getGuildMemberProfile(userId: string, guildId: T): T extends Nullish ? null : object | undefined; // TEMP + getIsAccessibilityTooltipViewed(): boolean; + getMutualFriends(userId: string): object; // TEMP + getMutualFriendsCount(userId: string): number; + getMutualGuilds(userId: string): object; // TEMP + isFetchingFriends(userId: string): boolean; + isFetchingProfile(userId: string): boolean; + get isSubmitting(): boolean; + takeSnapshot(): { + data: { + userId: string; + profile: UserProfile | undefined; + }; + version: number; + }; + + loadCache: () => void; +} + +export class WindowStore extends FluxStore { + isElementFullScreen(): boolean; + isFocused(): boolean; + windowSize(): Record<"width" | "height", number>; +} diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 39af843c5..2dd270f76 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -16,22 +16,182 @@ * along with this program. If not, see . */ -import { Guild, GuildMember } from "discord-types/general"; +import type { EventEmitter } from "events"; // Discord uses a polyfill for node's EventEmitter +import type { Guild, GuildMember } from "discord-types/general"; import type { ReactNode } from "react"; -import type { FluxEvents } from "./fluxEvents"; -import { i18nMessages } from "./i18nMessages"; +import type { FluxActionType } from "./fluxActionType"; +import type { i18nMessages } from "./i18nMessages"; -export { FluxEvents }; +export { FluxActionType }; -export interface FluxDispatcher { - _actionHandlers: any; - _subscriptions: any; - dispatch(event: { [key: string]: unknown; type: FluxEvents; }): Promise; +type Nullish = null | undefined; + +export interface FluxPayload extends Record { + type: ActionType; +} + +export type FluxActionHandlers = { + [K in T]?: (payload: FluxPayload) => void; +}; + +class DepGraph { + constructor(options?: { circular?: boolean | undefined; } | undefined); + + addDependency(from: string, to: string): void; + addNode(name: string, data?: Data | undefined): void; + clone(): DepGraph; + dependantsOf(name: string, leavesOnly?: boolean | undefined): string[]; + dependenciesOf(name: string, leavesOnly?: boolean | undefined): string[]; + getNodeData(name: string): Data; + hasNode(name: string): Data; + overallOrder(leavesOnly?: boolean | undefined): string[]; + removeDependency(from: string, to: string): void; + removeNode(name: string): void; + setNodeData(name: string, data?: Data | undefined): void; + size(): number; + + circular: boolean | undefined; + nodes: Record; + outgoingEdges: Record; + incomingEdges: Record; +} + +interface FluxActionHandlersGraphNode< + Payload extends FluxPayload = FluxPayload +> { + name: string; + band: number; + actionHandler: (payload: Payload) => void; + storeDidChange: (payload: Payload) => void; +} + +type FluxOrderedActionHandlers = Omit, "band">[]; + +class FluxActionHandlersGraph< + Payload extends FluxPayload = FluxPayload, + ActionType = A +> { + _addToBand(token: string, band: number): void; + _bandToken(band: number): string; + _computeOrderedActionHandlers(actionType: ActionType): FluxOrderedActionHandlers; + _computeOrderedCallbackTokens(): string[]; + _invalidateCaches(): void; + _validateDependencies(fromToken: string, toToken: string): void; + addDependencies(fromToken: string, toTokens: string[]): void; + createToken(): string; + getOrderedActionHandlers(payload: Payload): FluxOrderedActionHandlers; + register( + name: string, + actionHandlers: FluxActionHandlers, + storeDidChange: (payload: Payload) => void, + band: number, + token?: string | undefined + ): string; + + _dependencyGraph: DepGraph>; + _lastID: number; + _orderedActionHandlers: Record | null>; + _orderedCallbackTokens: string[] | null; +} + +interface SentryUtils { + addBreadcrumb: (breadcrumb: { + category?: string | undefined; + data?: any; + level?: string | undefined; + message?: string | undefined; + type?: string | undefined; + }) => void; +} + +class FluxActionLog< + Payload extends FluxPayload = FluxPayload, + ActionType = A +> { + constructor(actionType: Payload); + + get name(): ActionType; + toJSON(): Pick, "action" | "createdAt" | "traces"> & { + created_at: FluxActionLog["createdAt"]; + }; + + action: Payload; + createdAt: Date; + error: Error | undefined; + id: number; + startTime: number; + totalTime: number; + traces: { + name: string; + time: number; + }[]; +} + +class FluxActionLogger< + Payload extends FluxPayload = FluxPayload, + ActionType = A +> extends EventEmitter { + constructor(options?: { persist?: boolean | undefined; } | undefined); + + getLastActionMetrics(title: string, quantity?: number | undefined /* = 20 */): [ + storeName: string, + actionType: ActionType, + totalTime: number + ]; + getSlowestActions(actionType?: ActionType | Nullish, quantity?: number | undefined /* = 20 */): []; + log( + actionType: T, + callback: (func: any>(storeName: string, func: U) => ReturnType) => void + ): FluxActionLog; + + logs: FluxActionLog[]; + persist: boolean; +} + +export class FluxDispatcher< + Payload extends FluxPayload = FluxPayload, + ActionType = A +> { + constructor( + defaultBand?: number | undefined /* = 0 */, + actionLogger?: FluxActionLogger | Nullish, + sentryUtils?: SentryUtils | Nullish + ); + + _dispatch( + payload: Payload, + func: any>(storeName: string, func: U) => ReturnType + ): false | void; + _dispatchWithDevtools(payload: Payload): void; + _dispatchWithLogging(payload: Payload): void; + addDependencies(fromToken: string, toTokens: string[]): void; + addInterceptor(interceptor: (payload: Payload) => boolean): void; + createToken(): string; + dispatch(payload: Payload): Promise; + flushWaitQueue(): void; isDispatching(): boolean; - subscribe(event: FluxEvents, callback: (data: any) => void): void; - unsubscribe(event: FluxEvents, callback: (data: any) => void): void; + register( + name: string, + actionHandlers: FluxActionHandlers, + storeDidChange: (payload: Payload) => void, + band?: number | Nullish, + token?: string | undefined + ): string; + subscribe(actionType: ActionType, listener: (payload: Payload) => void): void; + unsubscribe(actionType: ActionType, listener: (payload: Payload) => void): void; wait(callback: () => void): void; + + _actionHandlers: FluxActionHandlersGraph; + _currentDispatchActionType: ActionType | Nullish; + _defaultBand: number; + _interceptors: ((payload: Payload) => boolean)[]; + _processingWaitQueue: boolean; + _sentryUtils: SentryUtils | Nullish; + _subscriptions: Record void> | Nullish>; + _waitQueue: (() => void)[]; + actionLogger: FluxActionLogger; + functionCache: Record void>; } export type Parser = Record< From 4ef9a22f7903dbbb16002277003fdbffda62379c Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Mon, 13 May 2024 07:52:22 -0400 Subject: [PATCH 002/126] Progress --- package.json | 1 + pnpm-lock.yaml | 956 ++++++++++++++++++- src/webpack/common/types/fluxActionType.d.ts | 6 +- src/webpack/common/types/index.d.ts | 2 +- src/webpack/common/types/stores.d.ts | 293 ++++-- src/webpack/common/types/utils.d.ts | 130 +-- 6 files changed, 1177 insertions(+), 211 deletions(-) diff --git a/package.json b/package.json index 0e5845987..011a9cc56 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", "diff": "^5.1.0", + "discord-api-types": "^0.37.83", "discord-types": "^1.3.26", "esbuild": "^0.15.18", "eslint": "^8.46.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54b3ab8da..911ac8a3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,13 +67,16 @@ importers: version: 2.4.2 '@typescript-eslint/eslint-plugin': specifier: ^5.59.1 - version: 5.59.1(@typescript-eslint/parser@5.59.1)(eslint@8.46.0)(typescript@5.0.4) + version: 5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) '@typescript-eslint/parser': specifier: ^5.59.1 - version: 5.59.1(eslint@8.46.0)(typescript@5.0.4) + version: 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) diff: specifier: ^5.1.0 version: 5.1.0 + discord-api-types: + specifier: ^0.37.83 + version: 0.37.83 discord-types: specifier: ^1.3.26 version: 1.3.26 @@ -85,16 +88,16 @@ importers: version: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2 + version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))) eslint-plugin-path-alias: specifier: ^1.0.0 - version: 1.0.0(patch_hash=m6sma4g6bh67km3q6igf6uxaja)(eslint@8.46.0) + version: 1.0.0(patch_hash=m6sma4g6bh67km3q6igf6uxaja)(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.46.0) + version: 10.0.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.1)(eslint@8.46.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) highlight.js: specifier: 10.6.0 version: 10.6.0 @@ -328,9 +331,6 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - peerDependenciesMeta: - eslint: - optional: true '@eslint-community/regexpp@4.5.1': resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} @@ -402,6 +402,9 @@ packages: '@types/json-schema@7.0.11': resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/lodash@4.14.194': resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==} @@ -446,8 +449,6 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: - eslint: - optional: true typescript: optional: true @@ -458,8 +459,6 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: - eslint: - optional: true typescript: optional: true @@ -474,8 +473,6 @@ packages: eslint: '*' typescript: '*' peerDependenciesMeta: - eslint: - optional: true typescript: optional: true @@ -497,9 +494,6 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - eslint: - optional: true '@typescript-eslint/visitor-keys@5.59.1': resolution: {integrity: sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA==} @@ -554,6 +548,14 @@ packages: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -562,6 +564,22 @@ packages: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -582,6 +600,10 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -618,6 +640,10 @@ packages: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -711,6 +737,18 @@ packages: csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -719,6 +757,14 @@ packages: supports-color: optional: true + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -743,6 +789,14 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + define-property@0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} @@ -766,9 +820,16 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + discord-api-types@0.37.83: + resolution: {integrity: sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==} + discord-types@1.3.26: resolution: {integrity: sha512-ToG51AOCH+JTQf7b+8vuYQe5Iqwz7nZ7StpECAZ/VZcI1ZhQk13pvt9KkRTfRv1xNvwJ2qib4e3+RifQlo8VPQ==} + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -782,6 +843,33 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + esbuild-android-64@0.15.18: resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} @@ -929,17 +1017,45 @@ packages: engines: {node: '>= 4'} peerDependencies: eslint-plugin-import: '>=1.4.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.8.1: + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - eslint-plugin-import: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.29.1: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': optional: true eslint-plugin-path-alias@1.0.0: resolution: {integrity: sha512-FXus57yC+Zd3sMv46pbloXYwFeNVNHJqlACr9V68FG/IzGFBBokGJpmjDbEjpt8ZCeVSndUubeDWWl2A8sCNVQ==} peerDependencies: eslint: ^7 - peerDependenciesMeta: - eslint: - optional: true eslint-plugin-simple-header@1.0.2: resolution: {integrity: sha512-K1EJ/ueBIjPRA8qR44Ymo+GDmPYYmfoODtainGxVr7PSbX6QiaY+pTuGCrOhO+AtVsYJs8GLSVdGUTXyAxAtOA==} @@ -948,9 +1064,6 @@ packages: resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' - peerDependenciesMeta: - eslint: - optional: true eslint-plugin-unused-imports@2.0.0: resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} @@ -961,8 +1074,6 @@ packages: peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true - eslint: - optional: true eslint-rule-composer@0.3.0: resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} @@ -1078,6 +1189,9 @@ packages: flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} @@ -1100,14 +1214,32 @@ packages: function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + get-tsconfig@4.5.0: resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} @@ -1117,7 +1249,6 @@ packages: gifenc@https://codeload.github.com/mattdesl/gifenc/tar.gz/64842fca317b112a8590f8fef2bf3825da8f6fe3: resolution: {tarball: https://codeload.github.com/mattdesl/gifenc/tar.gz/64842fca317b112a8590f8fef2bf3825da8f6fe3} - name: gifenc version: 1.0.3 glob-parent@5.1.2: @@ -1143,6 +1274,10 @@ packages: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -1150,6 +1285,9 @@ packages: globjoin@0.1.4: resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1163,6 +1301,9 @@ packages: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -1171,6 +1312,21 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} @@ -1191,6 +1347,10 @@ packages: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + highlight.js@10.6.0: resolution: {integrity: sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==} @@ -1241,6 +1401,10 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} @@ -1249,15 +1413,33 @@ packages: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-core-module@2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} @@ -1266,6 +1448,14 @@ packages: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + is-descriptor@0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} @@ -1294,6 +1484,14 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} @@ -1318,6 +1516,29 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -1325,6 +1546,9 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1355,6 +1579,10 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} @@ -1450,6 +1678,9 @@ packages: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mitt@3.0.0: resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==} @@ -1516,14 +1747,37 @@ packages: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -1595,6 +1849,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + postcss-media-query-parser@0.2.3: resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} @@ -1676,6 +1934,10 @@ packages: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -1700,6 +1962,10 @@ packages: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} @@ -1715,9 +1981,17 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} @@ -1725,11 +1999,23 @@ packages: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + semver@7.5.0: resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} engines: {node: '>=10'} hasBin: true + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} @@ -1742,6 +2028,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + signal-exit@4.0.1: resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==} engines: {node: '>=14'} @@ -1808,6 +2098,17 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -1815,6 +2116,10 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -1896,6 +2201,9 @@ packages: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -1933,11 +2241,30 @@ packages: resolution: {integrity: sha512-hR8JP2e8UiH7SME5JZjsobBlEiatFoxpzCP+R3ZeCo7kAaG1jXQE5X/buLzogM6GJu8le9Y4OcfNuIQX0rZskA==} engines: {node: '>=14.16'} + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} @@ -1984,6 +2311,13 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -2076,7 +2410,7 @@ snapshots: '@csstools/css-tokenizer@2.1.1': {} - '@csstools/media-query-list-parser@2.0.4(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1)': + '@csstools/media-query-list-parser@2.0.4(@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1))(@csstools/css-tokenizer@2.1.1)': dependencies: '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 @@ -2172,7 +2506,7 @@ snapshots: '@esbuild/win32-x64@0.17.18': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.46.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))': dependencies: eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) eslint-visitor-keys: 3.4.2 @@ -2229,9 +2563,10 @@ snapshots: progress: 2.0.3 proxy-from-env: 1.1.0 tar-fs: 2.1.1 - typescript: 5.0.4 unbzip2-stream: 1.4.3 yargs: 17.7.1 + optionalDependencies: + typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -2254,6 +2589,8 @@ snapshots: '@types/json-schema@7.0.11': {} + '@types/json5@0.0.29': {} + '@types/lodash@4.14.194': {} '@types/minimist@1.2.2': {} @@ -2292,13 +2629,13 @@ snapshots: dependencies: '@types/node': 18.16.3 - '@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1)(eslint@8.46.0)(typescript@5.0.4)': + '@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4)': dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.1(eslint@8.46.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) '@typescript-eslint/scope-manager': 5.59.1 - '@typescript-eslint/type-utils': 5.59.1(eslint@8.46.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.1(eslint@8.46.0)(typescript@5.0.4) + '@typescript-eslint/type-utils': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) debug: 4.3.4 eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) grapheme-splitter: 1.0.4 @@ -2306,17 +2643,19 @@ snapshots: natural-compare-lite: 1.4.0 semver: 7.5.0 tsutils: 3.21.0(typescript@5.0.4) + optionalDependencies: typescript: 5.0.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.59.1(eslint@8.46.0)(typescript@5.0.4)': + '@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4)': dependencies: '@typescript-eslint/scope-manager': 5.59.1 '@typescript-eslint/types': 5.59.1 '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.0.4) debug: 4.3.4 eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + optionalDependencies: typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -2326,13 +2665,14 @@ snapshots: '@typescript-eslint/types': 5.59.1 '@typescript-eslint/visitor-keys': 5.59.1 - '@typescript-eslint/type-utils@5.59.1(eslint@8.46.0)(typescript@5.0.4)': + '@typescript-eslint/type-utils@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4)': dependencies: '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.1(eslint@8.46.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) debug: 4.3.4 eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) tsutils: 3.21.0(typescript@5.0.4) + optionalDependencies: typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -2348,13 +2688,14 @@ snapshots: is-glob: 4.0.3 semver: 7.5.0 tsutils: 3.21.0(typescript@5.0.4) + optionalDependencies: typescript: 5.0.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.59.1(eslint@8.46.0)(typescript@5.0.4)': + '@typescript-eslint/utils@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.59.1 @@ -2424,10 +2765,58 @@ snapshots: arr-union@3.1.0: {} + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + array-union@2.1.0: {} array-unique@0.3.2: {} + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + arrify@1.0.1: {} assign-symbols@1.0.0: {} @@ -2438,6 +2827,10 @@ snapshots: atob@2.1.2: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + balanced-match@1.0.2: {} balanced-match@2.0.0: {} @@ -2490,6 +2883,14 @@ snapshots: union-value: 1.0.1 unset-value: 1.0.0 + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + callsites@3.1.0: {} camelcase-keys@6.2.2: @@ -2586,10 +2987,32 @@ snapshots: csstype@3.1.2: {} + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + debug@2.6.9: dependencies: ms: 2.0.0 + debug@3.2.7: + dependencies: + ms: 2.1.2 + debug@4.3.4: dependencies: ms: 2.1.2 @@ -2605,6 +3028,18 @@ snapshots: deep-is@0.1.4: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + define-property@0.2.5: dependencies: is-descriptor: 0.1.6 @@ -2626,11 +3061,17 @@ snapshots: dependencies: path-type: 4.0.0 + discord-api-types@0.37.83: {} + discord-types@1.3.26: dependencies: '@types/react': 17.0.2 moment: 2.29.4 + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + doctrine@3.0.0: dependencies: esutils: 2.0.3 @@ -2645,6 +3086,81 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + esbuild-android-64@0.15.18: optional: true @@ -2761,9 +3277,56 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-import-resolver-alias@1.1.2: {} + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))): + dependencies: + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) - eslint-plugin-path-alias@1.0.0(patch_hash=m6sma4g6bh67km3q6igf6uxaja)(eslint@8.46.0): + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.8.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint-import-resolver-node@0.3.9)(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) + eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint-import-resolver-node@0.3.9)(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-path-alias@1.0.0(patch_hash=m6sma4g6bh67km3q6igf6uxaja)(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): dependencies: eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) nanomatch: 1.2.13 @@ -2772,15 +3335,16 @@ snapshots: eslint-plugin-simple-header@1.0.2: {} - eslint-plugin-simple-import-sort@10.0.0(eslint@8.46.0): + eslint-plugin-simple-import-sort@10.0.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): dependencies: eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) - eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.1)(eslint@8.46.0): + eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): dependencies: - '@typescript-eslint/eslint-plugin': 5.59.1(@typescript-eslint/parser@5.59.1)(eslint@8.46.0)(typescript@5.0.4) eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.0.4) eslint-rule-composer@0.3.0: {} @@ -2800,7 +3364,7 @@ snapshots: eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) '@eslint-community/regexpp': 4.6.2 '@eslint/eslintrc': 2.1.1 '@eslint/js': 8.46.0 @@ -2932,6 +3496,10 @@ snapshots: flatted@3.2.7: {} + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + for-in@1.0.2: {} fragment-cache@0.2.1: @@ -2947,12 +3515,37 @@ snapshots: function-bind@1.1.1: {} + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + get-caller-file@2.0.5: {} + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + get-stream@5.2.0: dependencies: pump: 3.0.0 + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + get-tsconfig@4.5.0: {} get-value@2.0.6: {} @@ -2990,6 +3583,11 @@ snapshots: dependencies: type-fest: 0.20.2 + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -3001,6 +3599,10 @@ snapshots: globjoin@0.1.4: {} + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + graceful-fs@4.2.11: {} grapheme-splitter@1.0.4: {} @@ -3009,10 +3611,24 @@ snapshots: hard-rejection@2.1.0: {} + has-bigints@1.0.2: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + has-value@0.3.1: dependencies: get-value: 2.0.6 @@ -3036,6 +3652,10 @@ snapshots: dependencies: function-bind: 1.1.1 + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + highlight.js@10.6.0: {} hosted-git-info@2.8.9: {} @@ -3077,6 +3697,12 @@ snapshots: ini@1.3.8: {} + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + is-accessor-descriptor@0.1.6: dependencies: kind-of: 3.2.2 @@ -3085,14 +3711,34 @@ snapshots: dependencies: kind-of: 6.0.3 + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + is-arrayish@0.2.1: {} + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + is-buffer@1.1.6: {} + is-callable@1.2.7: {} + is-core-module@2.12.0: dependencies: has: 1.0.3 + is-core-module@2.13.1: + dependencies: + hasown: 2.0.2 + is-data-descriptor@0.1.4: dependencies: kind-of: 3.2.2 @@ -3101,6 +3747,14 @@ snapshots: dependencies: kind-of: 6.0.3 + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + is-descriptor@0.1.6: dependencies: is-accessor-descriptor: 0.1.6 @@ -3127,6 +3781,12 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + is-number@3.0.0: dependencies: kind-of: 3.2.2 @@ -3143,10 +3803,37 @@ snapshots: is-plain-object@5.0.0: {} + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + is-windows@1.0.2: {} isarray@1.0.0: {} + isarray@2.0.5: {} + isexe@2.0.0: {} isobject@2.1.0: @@ -3169,6 +3856,10 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json5@1.0.2: + dependencies: + minimist: 1.2.8 + jsonc-parser@3.2.0: {} jszip@2.7.0: @@ -3260,6 +3951,8 @@ snapshots: is-plain-obj: 1.1.0 kind-of: 6.0.3 + minimist@1.2.8: {} + mitt@3.0.0: {} mixin-deep@1.3.2: @@ -3327,14 +4020,44 @@ snapshots: define-property: 0.2.5 kind-of: 3.2.2 + object-inspect@1.13.1: {} + + object-keys@1.1.1: {} + object-visit@1.0.1: dependencies: isobject: 3.0.1 + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + object.pick@1.3.0: dependencies: isobject: 3.0.1 + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -3397,6 +4120,8 @@ snapshots: picomatch@2.3.1: {} + possible-typed-array-names@1.0.0: {} + postcss-media-query-parser@0.2.3: {} postcss-resolve-nested-selector@0.1.1: {} @@ -3442,9 +4167,10 @@ snapshots: https-proxy-agent: 5.0.1 proxy-from-env: 1.1.0 tar-fs: 2.1.1 - typescript: 5.0.4 unbzip2-stream: 1.4.3 ws: 8.13.0 + optionalDependencies: + typescript: 5.0.4 transitivePeerDependencies: - bufferutil - encoding @@ -3486,6 +4212,13 @@ snapshots: extend-shallow: 3.0.2 safe-regex: 1.1.0 + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -3502,6 +4235,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + ret@0.1.15: {} reusify@1.0.4: {} @@ -3514,18 +4253,49 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + safe-buffer@5.2.1: {} + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + safe-regex@1.1.0: dependencies: ret: 0.1.15 semver@5.7.1: {} + semver@6.3.1: {} + semver@7.5.0: dependencies: lru-cache: 6.0.0 + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + set-value@2.0.1: dependencies: extend-shallow: 2.0.1 @@ -3539,6 +4309,13 @@ snapshots: shebang-regex@3.0.0: {} + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + signal-exit@4.0.1: {} slash@3.0.0: {} @@ -3616,6 +4393,25 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -3624,6 +4420,8 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-bom@3.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -3645,7 +4443,7 @@ snapshots: dependencies: '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) '@csstools/css-tokenizer': 2.1.1 - '@csstools/media-query-list-parser': 2.0.4(@csstools/css-parser-algorithms@2.1.1)(@csstools/css-tokenizer@2.1.1) + '@csstools/media-query-list-parser': 2.0.4(@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1))(@csstools/css-tokenizer@2.1.1) '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.12) balanced-match: 2.0.0 colord: 2.9.3 @@ -3751,6 +4549,13 @@ snapshots: trim-newlines@3.0.1: {} + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@1.14.1: {} tsutils@3.21.0(typescript@5.0.4): @@ -3780,8 +4585,47 @@ snapshots: type-fest@3.9.0: {} + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + typescript@5.0.4: {} + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 @@ -3829,6 +4673,22 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + which@1.3.1: dependencies: isexe: 2.0.0 diff --git a/src/webpack/common/types/fluxActionType.d.ts b/src/webpack/common/types/fluxActionType.d.ts index 43ad8fc7c..fee2b10d7 100644 --- a/src/webpack/common/types/fluxActionType.d.ts +++ b/src/webpack/common/types/fluxActionType.d.ts @@ -36,5 +36,9 @@ function makeFluxEventList() { } */ +export interface FluxAction extends Record { + type: ActionType; +} + // 46kb worth of events ??????? -export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_DETECTION_MODAL_SEEN" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SUPPORT_CHANGED" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PIP_MODE_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "ALLOW_SPAM_MESSAGES_FOR_USER" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMANDS_FETCH" | "APPLICATION_COMMANDS_FETCH_FOR_APPLICATION" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_FETCH" | "APPLICATION_COMMAND_REGISTRY_UPDATE" | "APPLICATION_COMMAND_SEARCH_STORE_QUERY" | "APPLICATION_COMMAND_SEARCH_STORE_UI_UPDATE" | "APPLICATION_COMMAND_SEARCH_STORE_UPDATE" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_DIRECTORY_FETCH_SUCCESS" | "APPLICATION_STORE_DIRECTORY_MUTE" | "APPLICATION_STORE_DIRECTORY_UNMUTE" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ADD" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_REMOVE" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_CLOSE" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_OPEN" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_HIGHLIGHTS_FETCH_START" | "CHANNEL_HIGHLIGHTS_FETCH_SUCCESS" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MESSAGE_PREVIEW_LOAD_MESSAGES" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_MUSIC_MUTED" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_GUILD_CACHE" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_SAVE_CLIP" | "CLIPS_SETTINGS_UPDATE" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CREATE_PENDING_REPLY" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_ENABLED" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISCOVER_GUILDS_FETCH_FAILURE" | "DISCOVER_GUILDS_FETCH_START" | "DISCOVER_GUILDS_FETCH_SUCCESS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_NITRODUCTION_TOOLTIP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_FREE_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_FREE_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_INBOUND_UPDATE" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMOJI_DELETE" | "EMOJI_FETCH_FAILURE" | "EMOJI_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "EMOJI_UPLOAD_START" | "EMOJI_UPLOAD_STOP" | "ENABLE_AUTOMATIC_ACK" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "EXPERIMENT_TRIGGER" | "FETCH_AUTH_SESSIONS_SUCCESS" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_ICON_UPDATE" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_SUCCESS" | "GUILD_ANALYTICS_MEMBER_INSIGHTS_FETCH_SUCCESS" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_DISABLE_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_STATUS" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE" | "GUILD_MOVE_BY_ID" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTIONS_CONFIGURATIONS_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_RESET" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_FAILED" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SUBMIT" | "GUILD_SETTINGS_DEFAULT_CHANNELS_TOGGLE" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INTEGRATIONS_WITH_COMMANDS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_EDUCATION_UPSELL_DISMISSED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_EDIT" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_ERRORS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_FAILED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SUBMIT" | "GUILD_SETTINGS_ONBOARDING_STEP" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS" | "GUILD_SETTINGS_ROLES_EDIT_SECTION_UPDATE" | "GUILD_SETTINGS_ROLES_INIT" | "GUILD_SETTINGS_ROLES_SAVE_FAIL" | "GUILD_SETTINGS_ROLES_SAVE_SUCCESS" | "GUILD_SETTINGS_ROLES_SORT_UPDATE" | "GUILD_SETTINGS_ROLES_SUBMITTING" | "GUILD_SETTINGS_ROLES_UPDATE_COLOR" | "GUILD_SETTINGS_ROLES_UPDATE_DESCRIPTION" | "GUILD_SETTINGS_ROLES_UPDATE_NAME" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSION_SET" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_CONNECTION_CONFIGURATIONS" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_ICON" | "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SETTINGS_VANITY_URL_CLOSE" | "GUILD_SETTINGS_VANITY_URL_ERROR" | "GUILD_SETTINGS_VANITY_URL_RESET" | "GUILD_SETTINGS_VANITY_URL_SET" | "GUILD_SOUNDBOARD_DELETE_SUCCESS" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_FETCH_FAILURE" | "GUILD_SOUNDBOARD_FETCH_SUCCESS" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_UPDATE_SUCCESS" | "GUILD_SOUNDBOARD_UPLOAD_SUCCESS" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_TOP_READ_CHANNELS_FETCH_SUCCESS" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UNREADS_SET_LAST_CLEARED" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIDE_SPAM_MESSAGES_FOR_USER" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_APPLICATION_PERMISSIONS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_CLEAR" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_COMMAND_UPDATE" | "INTEGRATION_PERMISSION_SETTINGS_EDIT" | "INTEGRATION_PERMISSION_SETTINGS_INIT" | "INTEGRATION_PERMISSION_SETTINGS_RESET" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_COMMAND" | "INTEGRATION_SETTINGS_START_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_COMMAND" | "INTEGRATION_SETTINGS_STOP_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_INTEGRATION" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOBBY_CONNECT" | "LOBBY_CREATE" | "LOBBY_DELETE" | "LOBBY_DISCONNECT" | "LOBBY_MEMBER_CONNECT" | "LOBBY_MEMBER_DISCONNECT" | "LOBBY_MEMBER_UPDATE" | "LOBBY_MESSAGE" | "LOBBY_UPDATE" | "LOBBY_VOICE_CONNECT" | "LOBBY_VOICE_DISCONNECT" | "LOBBY_VOICE_SERVER_UPDATE" | "LOBBY_VOICE_STATE_UPDATE" | "LOCAL_ACTIVITY_UPDATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_MFA_WEBAUTHN" | "LOGIN_MFA_WEBAUTHN_TO_TOTP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGOUT" | "LOGOUT_AUTH_SESSIONS_SUCCESS" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_ENABLE_SOUNDSHARE" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_AV1" | "MEDIA_ENGINE_SET_DESKTOP_SOURCE" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_TODO_ADD" | "MESSAGE_TODO_CLEANUP" | "MESSAGE_TODO_COMPLETE" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MFA_CLEAR_BACKUP_CODES" | "MFA_DISABLE_SUCCESS" | "MFA_ENABLE_SUCCESS" | "MFA_SEND_VERIFICATION_KEY" | "MFA_SMS_TOGGLE" | "MFA_SMS_TOGGLE_COMPLETE" | "MFA_VIEW_BACKUP_CODES" | "MFA_WEBAUTHN_CREDENTIALS_LOADED" | "MFA_WEBAUTHN_CREDENTIALS_LOADING" | "MFA_WEBAUTHN_CREDENTIAL_CREATE" | "MFA_WEBAUTHN_CREDENTIAL_DELETE" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NITRODUCTION_PERSISTENT_ONBOARDING_TOGGLE_COLLAPSE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_GAMES_CHANGE" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_START_SESSION" | "PARTNER_REQUIREMENTS_FETCH_FAILURE" | "PARTNER_REQUIREMENTS_FETCH_START" | "PARTNER_REQUIREMENTS_FETCH_SUCCESS" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_PANEL_TOGGLE_SECTION" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECENT_MENTION_DELETE" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_FORUM_UNREADS" | "RESET_ALL_NITRODUCTION_TOOLTIPS" | "RESET_HAS_COMPLETED_STEP" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HAS_COMPLETED_STEP" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SOUNDPACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_ADD_FAVORITE_SOUND" | "SOUNDBOARD_REMOVE_FAVORITE_SOUND" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_APPLICATION_INTERACTION_FAKE_USER" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPDATE_APP_COLORS" | "UPDATE_AVAILABLE" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HAS_FLOW_START_EVENT_BEEN_EMITTED" | "UPDATE_MANUALLY" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_DISABLE_SUBMIT" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SETTINGS_THEME_OVERRIDE" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SETTINGS_CLEAR" | "WELCOME_SCREEN_SETTINGS_RESET" | "WELCOME_SCREEN_SETTINGS_UPDATE" | "WELCOME_SCREEN_SUBMIT" | "WELCOME_SCREEN_SUBMIT_FAILURE" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD"; +export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACCESSIBILITY_TOGGLE_DISABLE_VOICE_BACKGROUNDS" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_BACKGROUND_UPDATE" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/src/webpack/common/types/index.d.ts b/src/webpack/common/types/index.d.ts index 01c968553..707594427 100644 --- a/src/webpack/common/types/index.d.ts +++ b/src/webpack/common/types/index.d.ts @@ -18,7 +18,7 @@ export * from "./classes"; export * from "./components"; -export * from "./fluxEvents"; +export * from "./fluxActions"; export * from "./i18nMessages"; export * from "./menu"; export * from "./settingsStores"; diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index 235fada78..fc849306d 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -16,10 +16,11 @@ * along with this program. If not, see . */ -import { DraftType } from "@webpack/common"; -import { Channel, Guild, Role } from "discord-types/general"; +import type { DraftType } from "@webpack/common"; +import type { APIUser, ApplicationFlags, OAuth2Scopes, UserFlags, UserPremiumType } from "discord-api-types/v9"; +import { Channel, Guild, Role } from "discord-types/general"; // TODO -import type { FluxActionHandlers, FluxActionType, FluxDispatcher, FluxPayload } from "./utils"; +import type { FluxAction, FluxActionType, FluxActionHandlers, FluxDispatchBand, FluxDispatcher } from "./utils"; type Nullish = null | undefined; @@ -36,11 +37,10 @@ class FluxChangeListeners { remove: (listener: FluxChangeListener) => void; } - export class FluxStore< - Dispatcher extends FluxDispatcher = FluxDispatcher, - Payload = P, - ActionType = A + Dispatcher extends FluxDispatcher = FluxDispatcher, + Action = A, + ActionType = T > { constructor( dispatcher: Dispatcher, @@ -59,9 +59,9 @@ export class FluxStore< getName(): string; initialize(): void; initializeIfNeeded(): void; - mustEmitChanges(mustEmitChanges?: ((payload: Payload) => boolean) | Nullish /* = () => true */): void; - registerActionHandlers(actionHandlers: FluxActionHandlers, band?: number | Nullish): void; - syncWith(stores: FluxStore[], func: () => boolean | void, delay?: number | Nullish); + mustEmitChanges(mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */): void; + registerActionHandlers(actionHandlers: FluxActionHandlers, band?: FluxDispatchBand | Nullish): void; + syncWith(stores: FluxStore[], func: () => boolean | void, timeout?: number | Nullish): void; waitFor(...stores: FluxStore[]): void; __getLocalVars: undefined; @@ -69,7 +69,7 @@ export class FluxStore< _dispatcher: Dispatcher; _dispatchToken: string; _isInitialized: boolean; - _mustEmitChanges: ((payload: Payload) => boolean) | Nullish; + _mustEmitChanges: ((action: Action) => boolean) | Nullish; _reactChangeCallbacks: FluxChangeListeners; _syncWiths: { func: () => boolean | void; @@ -82,6 +82,30 @@ export class FluxStore< removeReactChangeListener: FluxChangeListeners["remove"]; } +type FluxSnapshotStoreActionType = Exclude; + +interface FluxSnapshot { + data: Data; + version: number; +} + +export class FluxSnapshotStore< + Constructor extends typeof FluxSnapshotStore, + SnapshotData = any, + Action extends FluxAction = FluxAction +> extends FluxStore> { + constructor(actionHandlers: FluxActionHandlers); + + static allStores: FluxSnapshotStore[]; + static clearAll(): void; + + clear(): void; + getClass(): Constructor; + get persistKey(): string; + readSnapshot(version: number): SnapshotData | null; + save(): void; +} + export interface Flux { Store: typeof FluxStore; } @@ -89,10 +113,26 @@ export interface Flux { export type useStateFromStores = ( stores: FluxStore[], getStateFromStores: () => T, - dependencies?: any[] | null | undefined, + dependencies?: any[] | Nullish, areStatesEqual?: ((prevState: T, currState: T) => boolean) | undefined ) => T; +// Original name: Record, renamed to avoid conflict with the Record util type +export class ImmutableRecord> { + merge(collection: Partial): this; + set(key: K, value: OwnProperties[K]): this; + toJS(): OwnProperties; + update( + key: K, + updater: (value: OwnProperties[K]) => OwnProperties[K] + ): this; + update( + key: K, + notSetValue: OwnProperties[K], + updater: (value: OwnProperties[K]) => OwnProperties[K] + ): this; +} + export interface DraftObject { channelId: string; timestamp: number; @@ -107,7 +147,6 @@ interface DraftState { } | undefined; } - export class DraftStore extends FluxStore { getDraft(channelId: string, type: DraftType): string; getRecentlyEditedDrafts(type: DraftType): DraftObject[]; @@ -226,20 +265,117 @@ export class GuildStore extends FluxStore { getAllGuildRoles(): Record>; } -export class User { - constructor(user: object); // TEMP +enum ApplicationIntegrationType { + GUILD_INSTALL, + USER_INSTALL +} - addGuildAvatarHash(guildId: string, avatarHash: string): User; - get avatarDecoration(): { - asset: string; - skuId: string; +interface UserProfileFetchFailed { + accentColor: null; + application: null; + applicationRoleConnections: []; + banner: null; + bio: ""; + connectedAccounts: []; + lastFetched: number; + legacyUsername: null; + premiumGuildSince: null; + premiumSince: null; + profileFetchFailed: true; + pronouns: ""; + userId: string; +} + +interface UserProfileFetchSucceeded { + application: { + customInstallUrl: string | Nullish; + flags: ApplicationFlags; + id: string; + installParams: { + scopes: OAuth2Scopes[] | Nullish; + permissions: string | Nullish; + } | Nullish; + integrationTypesConfig: Partial> | Nullish; // TEMP + popularApplicationCommandIds: string[] | undefined; + primarySkuId: string | Nullish; + storefront_available: boolean; } | null; - set avatarDecoration(avatarDecoration: { + accentColor: number | Nullish; + applicationRoleConnections: any[]; // TEMP + badges: { + description: string; + icon: string; + id: string; + link?: string; + }[]; + banner: string | Nullish; + bio: string; + connectedAccounts: { + id: string; + metadata?: Record; + name: string; + type: string; + verified: boolean; + }[]; + lastFetched: number; + legacyUsername: string | Nullish; + popoutAnimationParticleType: Nullish; // TEMP + premiumGuildSince: Date | null; + premiumSince: Date | null; + premiumType: UserPremiumType | Nullish; + profileEffectId: string | undefined; + profileFetchFailed: false; + pronouns: string; + themeColors: [primaryColor: number, accentColor: number] | Nullish; + userId: string; +} + +export type UserProfile = FetchFailed extends true + ? UserProfileFetchFailed + : UserProfileFetchSucceeded; + +interface UserProfileStoreSnapshotData { + userId: string; + profile: UserProfile | undefined; +} + +export class UserProfileStore extends FluxSnapshotStore { + static displayName: "UserProfileStore"; + static LATEST_SNAPSHOT_VERSION: number; + + getUserProfile(userId: string): UserProfile | undefined; + getGuildMemberProfile(userId: string, guildId: T): T extends Nullish ? null : any | undefined; // TEMP + getIsAccessibilityTooltipViewed(): boolean; + getMutualFriends(userId: string): any; // TEMP + getMutualFriendsCount(userId: string): number; + getMutualGuilds(userId: string): any; // TEMP + isFetchingFriends(userId: string): boolean; + isFetchingProfile(userId: string): boolean; + get isSubmitting(): boolean; + takeSnapshot(): FluxSnapshot; + + loadCache: () => void; +} + +interface AvatarDecorationData { + asset: string; + skuId: string; +} + +type UserRecordOwnProperties = Pick; + +export class UserRecord extends ImmutableRecord { + constructor(userFromServer: APIUser); + + addGuildAvatarHash(guildId: string, avatarHash: string): this; + get avatarDecoration(): AvatarDecorationData | null; + set avatarDecoration(avatarDecorationData: { asset: string; - skuId: string; + skuId?: string; + sku_id?: string; } | null): void; get createdAt(): Date; - getAvatarSource(guildId?: string | Nullish, canAnimate?: boolean | undefined): { uri: string; }; + getAvatarSource(guildId?: string | Nullish, canAnimate?: boolean | undefined, avatarSize?: number | undefined): { uri: string; }; getAvatarURL(guildId?: string | Nullish, avatarSize?: number | undefined, canAnimate?: boolean | undefined): string; hasAvatarForGuild(guildId?: string | Nullish): boolean; hasDisabledPremium(): boolean; @@ -258,23 +394,25 @@ export class User { isPomelo(): boolean; isSystemUser(): boolean; isVerifiedBot(): boolean; - removeGuildAvatarHash(guildId: string): User; + removeGuildAvatarHash(guildId: string): UserRecord; get tag(): string; - toString(): string; - avatar: string; - avatarDecorationData: { - asset: string; - skuId: string; - } | null; + avatar: string | null; + avatarDecorationData: AvatarDecorationData | null; + banner: string | Nullish; bot: boolean; - clan: null; // TEMP + clan: { + badge: string | Nullish; + identityEnabled: boolean | undefined; + identityGuildId: string | Nullish; + tag: string | Nullish; + } | null; desktop: boolean; discriminator: string; email: string | null; - flags: number; - globalName: string | null; - guildMemberAvatars: Record; + flags: UserFlags; + globalName: string | Nullish; + guildMemberAvatars: Record; hasAnyStaffLevel: () => boolean; hasBouncedEmail: boolean; hasFlag: (flag: number) => boolean; @@ -283,90 +421,37 @@ export class User { isStaffPersonal: () => boolean; mfaEnabled: boolean; mobile: boolean; - nsfwAllowed: boolean | null; + nsfwAllowed: boolean; personalConnectionId: string | null; phone: string | null; - premiumType: number | null | undefined; + premiumType: UserPremiumType | Nullish; // discord seems to have recently made it so that premiumType is nullish for every UserRecord premiumUsageFlags: number; - publicFlags: number; + publicFlags: UserFlags; purchasedFlags: number; system: boolean; username: string; verified: boolean; } -export class UserStore extends FluxStore { +interface UserStoreSnapshotData { users: [UserRecord] | []; }; + +export class UserStore extends FluxSnapshotStore { static displayName: "UserStore"; static LATEST_SNAPSHOT_VERSION: number; - filter(predicate: (user: User) => any): User[]; - findByTag(username: string, discriminator?: string | Nullish): User | undefined; - forEach(callback: (user: User) => void): void; - getCurrentUser(): User /* | undefined */; - getUser(userId: string): User | undefined; - getUsers(): Record; + filter(predicate: (user: UserRecord) => any, sort?: boolean | undefined): UserRecord[]; + findByTag(username: string, discriminator?: string | Nullish): UserRecord | undefined; + forEach(callback: (user: UserRecord) => void): void; + getCurrentUser(): UserRecord | Nullish; // returns undefined if called before the first USER_UPDATE action for the current user. discord seems to always check != null too + getUser(userId: string): UserRecord | Nullish; + getUsers(): Record; getUserStoreVersion(): number; - handleLoadCache(arg: object): void; // TEMP - takeSnapshot(): { - data: { users: [User] | []; }; - version: number; - }; -} - -export interface UserProfile { - application: null; // TEMP - accentColor: number | null; - applicationRoleConnections: []; // TEMP - badges: { - description: string; - icon: string; - id: string; - link?: string; - }[]; - banner: string | null | undefined; - bio: string; - connectedAccounts: { - id: string; - metadata?: Record; - name: string; - type: string; - verified: boolean; - }[]; - lastFetched: number; - legacyUsername: string | null; - popoutAnimationParticleType?: null | undefined; // TEMP - premiumGuildSince: Date | null; - premiumSince: Date | null; - premiumType: number | null | undefined; - profileEffectId: string | undefined; - profileFetchFailed: boolean; - pronouns: string; - themeColors?: [primaryColor: number, accentColor: number] | undefined; - userId: string; -} - -export class UserProfileStore extends FluxStore { - static displayName: "UserProfileStore"; - static LATEST_SNAPSHOT_VERSION: number; - - getUserProfile(userId: string): UserProfile | undefined; - getGuildMemberProfile(userId: string, guildId: T): T extends Nullish ? null : object | undefined; // TEMP - getIsAccessibilityTooltipViewed(): boolean; - getMutualFriends(userId: string): object; // TEMP - getMutualFriendsCount(userId: string): number; - getMutualGuilds(userId: string): object; // TEMP - isFetchingFriends(userId: string): boolean; - isFetchingProfile(userId: string): boolean; - get isSubmitting(): boolean; - takeSnapshot(): { - data: { - userId: string; - profile: UserProfile | undefined; - }; - version: number; - }; - - loadCache: () => void; + handleLoadCache(cache: { + initialGuildChannels: any[]; // TEMP + privateChannels: any[]; // TEMP + users: any[] | Nullish; // TEMP + }): void; + takeSnapshot(): FluxSnapshot; } export class WindowStore extends FluxStore { diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 2dd270f76..444da34a2 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -17,24 +17,16 @@ */ import type { EventEmitter } from "events"; // Discord uses a polyfill for node's EventEmitter -import type { Guild, GuildMember } from "discord-types/general"; +import { Guild, GuildMember } from "discord-types/general"; // TODO import type { ReactNode } from "react"; -import type { FluxActionType } from "./fluxActionType"; +import type { FluxAction, FluxActionType } from "./fluxActions"; import type { i18nMessages } from "./i18nMessages"; -export { FluxActionType }; +export { FluxAction, FluxActionType }; type Nullish = null | undefined; -export interface FluxPayload extends Record { - type: ActionType; -} - -export type FluxActionHandlers = { - [K in T]?: (payload: FluxPayload) => void; -}; - class DepGraph { constructor(options?: { circular?: boolean | undefined; } | undefined); @@ -57,41 +49,54 @@ class DepGraph { incomingEdges: Record; } +export type FluxActionHandler = (action: Action) => void; + +export type FluxActionHandlers< + Action extends FluxAction = FluxAction, + ActionType = T +> = { [Type in ActionType]?: FluxActionHandler>; }; + interface FluxActionHandlersGraphNode< - Payload extends FluxPayload = FluxPayload + Payload extends FluxAction = FluxAction > { name: string; band: number; - actionHandler: (payload: Payload) => void; - storeDidChange: (payload: Payload) => void; + actionHandler: FluxActionHandler; + storeDidChange: FluxActionHandler; } -type FluxOrderedActionHandlers = Omit, "band">[]; +type FluxOrderedActionHandlers = Omit, "band">[]; + +export enum FluxDispatchBand { + Early, + Database, + Default +} class FluxActionHandlersGraph< - Payload extends FluxPayload = FluxPayload, - ActionType = A + Action extends FluxAction = FluxAction, + ActionType = T > { - _addToBand(token: string, band: number): void; - _bandToken(band: number): string; - _computeOrderedActionHandlers(actionType: ActionType): FluxOrderedActionHandlers; + _addToBand(token: string, band: FluxDispatchBand): void; + _bandToken(band: DispatcherBand): string; + _computeOrderedActionHandlers(actionType: ActionType): FluxOrderedActionHandlers; _computeOrderedCallbackTokens(): string[]; _invalidateCaches(): void; _validateDependencies(fromToken: string, toToken: string): void; addDependencies(fromToken: string, toTokens: string[]): void; createToken(): string; - getOrderedActionHandlers(payload: Payload): FluxOrderedActionHandlers; + getOrderedActionHandlers(action: Action): FluxOrderedActionHandlers; register( name: string, actionHandlers: FluxActionHandlers, - storeDidChange: (payload: Payload) => void, - band: number, + storeDidChange: FluxActionHandler, + band: FluxDispatchBand, token?: string | undefined ): string; - _dependencyGraph: DepGraph>; + _dependencyGraph: DepGraph>; _lastID: number; - _orderedActionHandlers: Record | null>; + _orderedActionHandlers: Record | null>; _orderedCallbackTokens: string[] | null; } @@ -105,18 +110,21 @@ interface SentryUtils { }) => void; } +type ActionMetric + = [storeName: string, actionType: ActionType, totalTime: number]; + class FluxActionLog< - Payload extends FluxPayload = FluxPayload, - ActionType = A + Action extends FluxAction = FluxAction, + ActionType = T > { - constructor(actionType: Payload); + constructor(actionType: ActionType); get name(): ActionType; toJSON(): Pick, "action" | "createdAt" | "traces"> & { created_at: FluxActionLog["createdAt"]; }; - action: Payload; + action: Action; createdAt: Date; error: Error | undefined; id: number; @@ -129,69 +137,77 @@ class FluxActionLog< } class FluxActionLogger< - Payload extends FluxPayload = FluxPayload, - ActionType = A + Action extends FluxAction = FluxAction, + ActionType = T > extends EventEmitter { constructor(options?: { persist?: boolean | undefined; } | undefined); - getLastActionMetrics(title: string, quantity?: number | undefined /* = 20 */): [ - storeName: string, - actionType: ActionType, - totalTime: number - ]; - getSlowestActions(actionType?: ActionType | Nullish, quantity?: number | undefined /* = 20 */): []; - log( - actionType: T, + getLastActionMetrics( + title: string, + limit?: number | undefined /* = 20 */ + ): ActionMetric[]; + getSlowestActions( + actionType?: ActionType | Nullish, + limit?: number | undefined /* = 20 */ + ): ActionMetric[]; + log( + action: A, callback: (func: any>(storeName: string, func: U) => ReturnType) => void - ): FluxActionLog; + ): FluxActionLog; - logs: FluxActionLog[]; + logs: FluxActionLog[]; persist: boolean; } export class FluxDispatcher< - Payload extends FluxPayload = FluxPayload, - ActionType = A + Action extends FluxAction = FluxAction, + ActionType = T > { constructor( defaultBand?: number | undefined /* = 0 */, - actionLogger?: FluxActionLogger | Nullish, + actionLogger?: FluxActionLogger | Nullish, sentryUtils?: SentryUtils | Nullish ); _dispatch( - payload: Payload, + action: Action, func: any>(storeName: string, func: U) => ReturnType ): false | void; - _dispatchWithDevtools(payload: Payload): void; - _dispatchWithLogging(payload: Payload): void; + _dispatchWithDevtools(action: Action): void; + _dispatchWithLogging(action: Action): void; addDependencies(fromToken: string, toTokens: string[]): void; - addInterceptor(interceptor: (payload: Payload) => boolean): void; + addInterceptor(interceptor: FluxActionHandler): void; createToken(): string; - dispatch(payload: Payload): Promise; + dispatch(action: Action): Promise; flushWaitQueue(): void; isDispatching(): boolean; register( name: string, actionHandlers: FluxActionHandlers, - storeDidChange: (payload: Payload) => void, + storeDidChange: FluxActionHandler, band?: number | Nullish, token?: string | undefined ): string; - subscribe(actionType: ActionType, listener: (payload: Payload) => void): void; - unsubscribe(actionType: ActionType, listener: (payload: Payload) => void): void; + subscribe, AT = U>( + actionType: AT, + listener: FluxActionHandler + ): void; + unsubscribe, AT = U>( + actionType: AT, + listener: FluxActionHandler + ): void; wait(callback: () => void): void; - _actionHandlers: FluxActionHandlersGraph; + _actionHandlers: FluxActionHandlersGraph; _currentDispatchActionType: ActionType | Nullish; _defaultBand: number; - _interceptors: ((payload: Payload) => boolean)[]; + _interceptors: ((action: Action) => boolean)[]; _processingWaitQueue: boolean; _sentryUtils: SentryUtils | Nullish; - _subscriptions: Record void> | Nullish>; + _subscriptions: Record> | Nullish>; _waitQueue: (() => void)[]; - actionLogger: FluxActionLogger; - functionCache: Record void>; + actionLogger: FluxActionLogger; + functionCache: Record>; } export type Parser = Record< From 6c444fc4523ec6d9eaf71f23590ffcad95e2bebf Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Mon, 13 May 2024 08:03:19 -0400 Subject: [PATCH 003/126] Lint --- src/webpack/common/types/stores.d.ts | 6 +++--- src/webpack/common/types/utils.d.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index fc849306d..b9e6b8990 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -18,9 +18,9 @@ import type { DraftType } from "@webpack/common"; import type { APIUser, ApplicationFlags, OAuth2Scopes, UserFlags, UserPremiumType } from "discord-api-types/v9"; -import { Channel, Guild, Role } from "discord-types/general"; // TODO +import type { Channel, Guild, Role } from "discord-types/general"; // TODO -import type { FluxAction, FluxActionType, FluxActionHandlers, FluxDispatchBand, FluxDispatcher } from "./utils"; +import type { FluxAction, FluxActionHandlers, FluxActionType, FluxDispatchBand, FluxDispatcher } from "./utils"; type Nullish = null | undefined; @@ -433,7 +433,7 @@ export class UserRecord extends ImmutableRecord { verified: boolean; } -interface UserStoreSnapshotData { users: [UserRecord] | []; }; +interface UserStoreSnapshotData { users: [UserRecord] | []; } export class UserStore extends FluxSnapshotStore { static displayName: "UserStore"; diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 444da34a2..90fb90e03 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -16,8 +16,8 @@ * along with this program. If not, see . */ +import type { Guild, GuildMember } from "discord-types/general"; // TODO import type { EventEmitter } from "events"; // Discord uses a polyfill for node's EventEmitter -import { Guild, GuildMember } from "discord-types/general"; // TODO import type { ReactNode } from "react"; import type { FluxAction, FluxActionType } from "./fluxActions"; From 9f6725f536aa38c34fdefc58222d7cc573abc570 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Tue, 14 May 2024 05:24:51 -0400 Subject: [PATCH 004/126] Progress --- src/webpack/common/types/fluxActionType.d.ts | 16 ++- src/webpack/common/types/stores.d.ts | 91 ++++++++++----- src/webpack/common/types/utils.d.ts | 114 +++++++++---------- 3 files changed, 130 insertions(+), 91 deletions(-) diff --git a/src/webpack/common/types/fluxActionType.d.ts b/src/webpack/common/types/fluxActionType.d.ts index fee2b10d7..dc68a7253 100644 --- a/src/webpack/common/types/fluxActionType.d.ts +++ b/src/webpack/common/types/fluxActionType.d.ts @@ -36,9 +36,17 @@ function makeFluxEventList() { } */ -export interface FluxAction extends Record { - type: ActionType; -} +// Someone could create their own Dispatcher with its own action handlers, so the constraint is string. +// However, Discord seems to only use one Dispatcher instance (all ~375 stores use the same instance), so the default constraint is FluxActionType. +export type FluxAction = ActionType extends string + ? { type: ActionType; } & Record + : never; + +export type ExtractAction = Action extends FluxAction + ? Action["type"] extends ActionType + ? Action + : never + : never; // 46kb worth of events ??????? -export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACCESSIBILITY_TOGGLE_DISABLE_VOICE_BACKGROUNDS" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_BACKGROUND_UPDATE" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; +export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACCESSIBILITY_TOGGLE_DISABLE_VOICE_BACKGROUNDS" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_INTERACTION_INITIATED" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "IN_APP_REPORTS_SHOW_FEEDBACK" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_BACKGROUND_SHOW_FEEDBACK" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_BACKGROUND_UPDATE" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_SHOW_FEEDBACK" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index b9e6b8990..77befac67 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -24,6 +24,9 @@ import type { FluxAction, FluxActionHandlers, FluxActionType, FluxDispatchBand, type Nullish = null | undefined; +type DispatcherAction>> + = Dispatcher extends FluxDispatcher ? Action : never; + type FluxChangeListener = () => boolean; class FluxChangeListeners { @@ -32,36 +35,45 @@ class FluxChangeListeners { invokeAll(): void; add: (listener: FluxChangeListener) => void; - addConditional: (listener: FluxChangeListener, immediatelyCall?: boolean | undefined /* = true */) => void; + addConditional: ( + listener: FluxChangeListener, + immediatelyCall?: boolean | undefined /* = true */ + ) => void; listeners: Set; remove: (listener: FluxChangeListener) => void; } export class FluxStore< - Dispatcher extends FluxDispatcher = FluxDispatcher, - Action = A, - ActionType = T + Dispatcher extends FluxDispatcher> = FluxDispatcher, + Action extends DispatcherAction = DispatcherAction > { constructor( dispatcher: Dispatcher, - actionHandlers: FluxActionHandlers, - band?: number | Nullish + actionHandlers: FluxActionHandlers, + band?: FluxDispatchBand | Nullish ); static displayName: undefined; - static initialized: Promise; static destroy(): void; - static getAll(): FluxStore[]; + static getAll(): FluxStore>, FluxAction>[]; static initialize(): void; + static initialized: Promise; emitChange(): void; getDispatchToken(): string; getName(): string; initialize(): void; initializeIfNeeded(): void; - mustEmitChanges(mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */): void; - registerActionHandlers(actionHandlers: FluxActionHandlers, band?: FluxDispatchBand | Nullish): void; - syncWith(stores: FluxStore[], func: () => boolean | void, timeout?: number | Nullish): void; + mustEmitChanges: (mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */) => void; + registerActionHandlers( + actionHandlers: FluxActionHandlers, + band?: FluxDispatchBand | Nullish + ): void; + syncWith( + stores: FluxStore[], + func: () => boolean | void, + timeout?: number | Nullish + ): void; waitFor(...stores: FluxStore[]): void; __getLocalVars: undefined; @@ -90,10 +102,10 @@ interface FluxSnapshot { } export class FluxSnapshotStore< - Constructor extends typeof FluxSnapshotStore, + Constructor extends typeof FluxSnapshotStore = typeof FluxSnapshotStore, SnapshotData = any, - Action extends FluxAction = FluxAction -> extends FluxStore> { + Action extends FluxSnapshotStoreActionType = FluxSnapshotStoreActionType +> extends FluxStore { constructor(actionHandlers: FluxActionHandlers); static allStores: FluxSnapshotStore[]; @@ -110,26 +122,26 @@ export interface Flux { Store: typeof FluxStore; } -export type useStateFromStores = ( - stores: FluxStore[], - getStateFromStores: () => T, +export type useStateFromStores = ( + stores: FluxStore>, FluxAction>[], + getStateFromStores: () => State, dependencies?: any[] | Nullish, - areStatesEqual?: ((prevState: T, currState: T) => boolean) | undefined -) => T; + areStatesEqual?: ((prevState: State, currState: State) => boolean) | undefined +) => State; // Original name: Record, renamed to avoid conflict with the Record util type export class ImmutableRecord> { merge(collection: Partial): this; - set(key: K, value: OwnProperties[K]): this; + set(key: Key, value: OwnProperties[Key]): this; toJS(): OwnProperties; - update( - key: K, - updater: (value: OwnProperties[K]) => OwnProperties[K] + update( + key: Key, + updater: (value: OwnProperties[Key]) => OwnProperties[Key] ): this; - update( - key: K, - notSetValue: OwnProperties[K], - updater: (value: OwnProperties[K]) => OwnProperties[K] + update( + key: Key, + notSetValue: OwnProperties[Key], + updater: (value: OwnProperties[Key]) => OwnProperties[Key] ): this; } @@ -255,6 +267,31 @@ export class EmojiStore extends FluxStore { }; } +/* +export class GuildMemberStore extends FluxStore { + static displayName: "GuildMemberStore"; + + getCommunicationDisabledUserMap(): ; + getCommunicationDisabledVersion(): ; + getMember(e: , t: ): ; + getMemberIds(e: ): ; + getMemberRoleWithPendingUpdates(e: , t: ): ; + getMembers(e: ): ; + getMemberVersion(): ; + getMutableAllGuildsAndMembers(): ; + getNick(e: , t: ): ; + getNicknameGuildsMapping(e: ): ; + getNicknames(e: ): ;: ; + getPendingRoleUpdates(e: ): ; + getSelfMember(e: ): ; + getTrueMember(e: , t: ): ; + isCurrentUserGuest(e: ): ; + isGuestOrLurker(e: , t: ): ; + isMember(e: , t: ): ; + memberOf(e: ): ; +} +*/ + export class GuildStore extends FluxStore { getGuild(guildId: string): Guild; getGuildCount(): number; diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 90fb90e03..709c1973b 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -17,13 +17,14 @@ */ import type { Guild, GuildMember } from "discord-types/general"; // TODO -import type { EventEmitter } from "events"; // Discord uses a polyfill for node's EventEmitter +import type { EventEmitter } from "events"; // Discord uses a polyfill for Node's EventEmitter import type { ReactNode } from "react"; +import type { OmitIndexSignature } from "type-fest"; -import type { FluxAction, FluxActionType } from "./fluxActions"; +import type { ExtractAction, FluxAction, FluxActionType } from "./fluxActions"; import type { i18nMessages } from "./i18nMessages"; -export { FluxAction, FluxActionType }; +export { ExtractAction, FluxAction, FluxActionType }; type Nullish = null | undefined; @@ -49,37 +50,35 @@ class DepGraph { incomingEdges: Record; } -export type FluxActionHandler = (action: Action) => void; - -export type FluxActionHandlers< - Action extends FluxAction = FluxAction, - ActionType = T -> = { [Type in ActionType]?: FluxActionHandler>; }; - -interface FluxActionHandlersGraphNode< - Payload extends FluxAction = FluxAction -> { - name: string; - band: number; - actionHandler: FluxActionHandler; - storeDidChange: FluxActionHandler; -} - -type FluxOrderedActionHandlers = Omit, "band">[]; - export enum FluxDispatchBand { Early, Database, Default } -class FluxActionHandlersGraph< - Action extends FluxAction = FluxAction, - ActionType = T -> { +export type FluxActionHandler = Action extends FluxAction + ? Exclude, "type"> extends never + ? (action: any) => Return + : (action: Action) => Return + : never; + +export type FluxActionHandlers = FluxAction> + = { [ActionType in Action["type"]]: FluxActionHandler>; }; + +interface FluxActionHandlersGraphNode = FluxAction> { + name: string; + band: number; + actionHandler: FluxActionHandler; + storeDidChange: FluxActionHandler; +} + +type FluxOrderedActionHandlers = FluxAction> + = Omit, "band">[]; + +class FluxActionHandlersGraph = FluxAction> { _addToBand(token: string, band: FluxDispatchBand): void; _bandToken(band: DispatcherBand): string; - _computeOrderedActionHandlers(actionType: ActionType): FluxOrderedActionHandlers; + _computeOrderedActionHandlers(actionType: Action["type"]): FluxOrderedActionHandlers; _computeOrderedCallbackTokens(): string[]; _invalidateCaches(): void; _validateDependencies(fromToken: string, toToken: string): void; @@ -88,7 +87,7 @@ class FluxActionHandlersGraph< getOrderedActionHandlers(action: Action): FluxOrderedActionHandlers; register( name: string, - actionHandlers: FluxActionHandlers, + actionHandlers: Partial>, storeDidChange: FluxActionHandler, band: FluxDispatchBand, token?: string | undefined @@ -96,8 +95,10 @@ class FluxActionHandlersGraph< _dependencyGraph: DepGraph>; _lastID: number; - _orderedActionHandlers: Record | null>; - _orderedCallbackTokens: string[] | null; + _orderedActionHandlers: { + [ActionType in Action["type"]]?: FluxOrderedActionHandlers> | Nullish; + }; + _orderedCallbackTokens: string[] | Nullish; } interface SentryUtils { @@ -110,17 +111,14 @@ interface SentryUtils { }) => void; } -type ActionMetric +type ActionMetric = [storeName: string, actionType: ActionType, totalTime: number]; -class FluxActionLog< - Action extends FluxAction = FluxAction, - ActionType = T -> { - constructor(actionType: ActionType); +class FluxActionLog = FluxAction> { + constructor(actionType: Action["type"]); - get name(): ActionType; - toJSON(): Pick, "action" | "createdAt" | "traces"> & { + get name(): Action["type"]; + toJSON(): Pick, "action" | "createdAt" | "traces"> & { created_at: FluxActionLog["createdAt"]; }; @@ -136,18 +134,15 @@ class FluxActionLog< }[]; } -class FluxActionLogger< - Action extends FluxAction = FluxAction, - ActionType = T -> extends EventEmitter { +class FluxActionLogger = FluxAction> extends EventEmitter { constructor(options?: { persist?: boolean | undefined; } | undefined); getLastActionMetrics( title: string, limit?: number | undefined /* = 20 */ - ): ActionMetric[]; + ): ActionMetric[]; getSlowestActions( - actionType?: ActionType | Nullish, + actionType?: Action["type"] | Nullish, limit?: number | undefined /* = 20 */ ): ActionMetric[]; log( @@ -159,12 +154,9 @@ class FluxActionLogger< persist: boolean; } -export class FluxDispatcher< - Action extends FluxAction = FluxAction, - ActionType = T -> { +export class FluxDispatcher = FluxAction> { constructor( - defaultBand?: number | undefined /* = 0 */, + defaultBand?: FluxDispatchBand | undefined /* = 0 */, actionLogger?: FluxActionLogger | Nullish, sentryUtils?: SentryUtils | Nullish ); @@ -183,31 +175,33 @@ export class FluxDispatcher< isDispatching(): boolean; register( name: string, - actionHandlers: FluxActionHandlers, + actionHandlers: Partial>, storeDidChange: FluxActionHandler, - band?: number | Nullish, + band?: FluxDispatchBand | Nullish, token?: string | undefined ): string; - subscribe, AT = U>( - actionType: AT, - listener: FluxActionHandler + subscribe( + actionType: ActionType, + listener: FluxActionHandler> ): void; - unsubscribe, AT = U>( - actionType: AT, - listener: FluxActionHandler + unsubscribe( + actionType: ActionType, + listener: FluxActionHandler> ): void; wait(callback: () => void): void; _actionHandlers: FluxActionHandlersGraph; - _currentDispatchActionType: ActionType | Nullish; - _defaultBand: number; + _currentDispatchActionType: Action["type"] | Nullish; + _defaultBand: FluxDispatchBand; _interceptors: ((action: Action) => boolean)[]; _processingWaitQueue: boolean; _sentryUtils: SentryUtils | Nullish; - _subscriptions: Record> | Nullish>; + _subscriptions: { + [ActionType in Action["type"]]?: Set>> | Nullish; + }; _waitQueue: (() => void)[]; actionLogger: FluxActionLogger; - functionCache: Record>; + functionCache: FluxActionHandlers; } export type Parser = Record< From abf69425ea53827b063a3140d87c9f8e59bc7a94 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Fri, 17 May 2024 09:35:02 -0400 Subject: [PATCH 005/126] Progress --- package.json | 2 +- src/plugins/index.ts | 6 +- src/webpack/common/stores.ts | 30 +- src/webpack/common/types/components.d.ts | 2 +- src/webpack/common/types/fluxActionType.d.ts | 52 --- src/webpack/common/types/fluxActions.d.ts | 57 +++ src/webpack/common/types/stores.d.ts | 460 ++++++++++++++++--- src/webpack/common/types/utils.d.ts | 164 ++++--- tsconfig.json | 1 - 9 files changed, 554 insertions(+), 220 deletions(-) delete mode 100644 src/webpack/common/types/fluxActionType.d.ts create mode 100644 src/webpack/common/types/fluxActions.d.ts diff --git a/package.json b/package.json index 011a9cc56..5e966cf7d 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "stylelint-config-standard": "^33.0.0", "tsx": "^3.12.7", "type-fest": "^3.9.0", - "typescript": "^5.0.4", + "typescript": "^5.4.5", "zip-local": "^0.3.5", "zustand": "^3.7.2" }, diff --git a/src/plugins/index.ts b/src/plugins/index.ts index 488847d15..58758077c 100644 --- a/src/plugins/index.ts +++ b/src/plugins/index.ts @@ -22,7 +22,7 @@ import { Settings } from "@api/Settings"; import { Logger } from "@utils/Logger"; import { Patch, Plugin, StartAt } from "@utils/types"; import { FluxDispatcher } from "@webpack/common"; -import { FluxEvents } from "@webpack/types"; +import type { FluxActionType } from "@webpack/types"; import Plugins from "~plugins"; @@ -129,7 +129,7 @@ export function subscribePluginFluxEvents(p: Plugin, fluxDispatcher: typeof Flux logger.debug("Subscribing to flux events of plugin", p.name); for (const [event, handler] of Object.entries(p.flux)) { - fluxDispatcher.subscribe(event as FluxEvents, handler); + fluxDispatcher.subscribe(event as FluxActionType, handler); } } } @@ -140,7 +140,7 @@ export function unsubscribePluginFluxEvents(p: Plugin, fluxDispatcher: typeof Fl logger.debug("Unsubscribing from flux events of plugin", p.name); for (const [event, handler] of Object.entries(p.flux)) { - fluxDispatcher.unsubscribe(event as FluxEvents, handler); + fluxDispatcher.unsubscribe(event as FluxActionType, handler); } } } diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index be5721ff3..3e95e4d61 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -46,12 +46,12 @@ export let ReadStateStore: GenericStore; export let PresenceStore: GenericStore; export let GuildStore: t.GuildStore; -export let UserStore: Stores.UserStore & t.FluxStore; -export let UserProfileStore: GenericStore; +export let UserStore: t.UserStore; +export let UserProfileStore: t.UserProfileStore; export let SelectedChannelStore: Stores.SelectedChannelStore & t.FluxStore; export let SelectedGuildStore: t.FluxStore & Record; export let ChannelStore: Stores.ChannelStore & t.FluxStore; -export let GuildMemberStore: Stores.GuildMemberStore & t.FluxStore; +export let GuildMemberStore: t.GuildMemberStore; export let RelationshipStore: Stores.RelationshipStore & t.FluxStore & { /** Get the date (as a string) that the relationship was created */ getSince(userId: string): string; @@ -65,28 +65,28 @@ export let DraftStore: t.DraftStore; * React hook that returns stateful data for one or more stores * You might need a custom comparator (4th argument) if your store data is an object * @param stores The stores to listen to - * @param mapper A function that returns the data you need + * @param getStateFromStores A function that returns the data you need * @param dependencies An array of reactive values which the hook depends on. Use this if your mapper or equality function depends on the value of another hook - * @param isEqual A custom comparator for the data returned by mapper + * @param areStatesEqual A custom comparator for the data returned by mapper * * @example const user = useStateFromStores([UserStore], () => UserStore.getCurrentUser(), null, (old, current) => old.id === current.id); */ // eslint-disable-next-line prefer-destructuring export const useStateFromStores: t.useStateFromStores = findByPropsLazy("useStateFromStores").useStateFromStores; -waitForStore("DraftStore", s => DraftStore = s); -waitForStore("UserStore", s => UserStore = s); -waitForStore("UserProfileStore", m => UserProfileStore = m); waitForStore("ChannelStore", m => ChannelStore = m); -waitForStore("SelectedChannelStore", m => SelectedChannelStore = m); -waitForStore("SelectedGuildStore", m => SelectedGuildStore = m); -waitForStore("GuildStore", m => GuildStore = m); +waitForStore("DraftStore", s => DraftStore = s); +waitForStore("EmojiStore", m => EmojiStore = m); +waitForStore("GuildChannelStore", m => GuildChannelStore = m); waitForStore("GuildMemberStore", m => GuildMemberStore = m); -waitForStore("RelationshipStore", m => RelationshipStore = m); +waitForStore("GuildStore", m => GuildStore = m); +waitForStore("MessageStore", m => MessageStore = m); waitForStore("PermissionStore", m => PermissionStore = m); waitForStore("PresenceStore", m => PresenceStore = m); waitForStore("ReadStateStore", m => ReadStateStore = m); -waitForStore("GuildChannelStore", m => GuildChannelStore = m); -waitForStore("MessageStore", m => MessageStore = m); +waitForStore("RelationshipStore", m => RelationshipStore = m); +waitForStore("SelectedChannelStore", m => SelectedChannelStore = m); +waitForStore("SelectedGuildStore", m => SelectedGuildStore = m); +waitForStore("UserProfileStore", m => UserProfileStore = m); +waitForStore("UserStore", s => UserStore = s); waitForStore("WindowStore", m => WindowStore = m); -waitForStore("EmojiStore", m => EmojiStore = m); diff --git a/src/webpack/common/types/components.d.ts b/src/webpack/common/types/components.d.ts index c51264370..dc2b05e11 100644 --- a/src/webpack/common/types/components.d.ts +++ b/src/webpack/common/types/components.d.ts @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import type { ComponentType, CSSProperties, FunctionComponent, HtmlHTMLAttributes, HTMLProps, KeyboardEvent, MouseEvent, PropsWithChildren, PropsWithRef, ReactNode, Ref } from "react"; +import type { ComponentType, CSSProperties, FunctionComponent, HtmlHTMLAttributes, HTMLProps, KeyboardEvent, MouseEvent, PropsWithChildren, PropsWithRef, ReactNode, Ref, RefObject } from "react"; export type TextVariant = "heading-sm/normal" | "heading-sm/medium" | "heading-sm/semibold" | "heading-sm/bold" | "heading-md/normal" | "heading-md/medium" | "heading-md/semibold" | "heading-md/bold" | "heading-lg/normal" | "heading-lg/medium" | "heading-lg/semibold" | "heading-lg/bold" | "heading-xl/normal" | "heading-xl/medium" | "heading-xl/bold" | "heading-xxl/normal" | "heading-xxl/medium" | "heading-xxl/bold" | "eyebrow" | "heading-deprecated-14/normal" | "heading-deprecated-14/medium" | "heading-deprecated-14/bold" | "text-xxs/normal" | "text-xxs/medium" | "text-xxs/semibold" | "text-xxs/bold" | "text-xs/normal" | "text-xs/medium" | "text-xs/semibold" | "text-xs/bold" | "text-sm/normal" | "text-sm/medium" | "text-sm/semibold" | "text-sm/bold" | "text-md/normal" | "text-md/medium" | "text-md/semibold" | "text-md/bold" | "text-lg/normal" | "text-lg/medium" | "text-lg/semibold" | "text-lg/bold" | "display-sm" | "display-md" | "display-lg" | "code"; export type FormTextTypes = Record<"DEFAULT" | "INPUT_PLACEHOLDER" | "DESCRIPTION" | "LABEL_BOLD" | "LABEL_SELECTED" | "LABEL_DESCRIPTOR" | "ERROR" | "SUCCESS", string>; diff --git a/src/webpack/common/types/fluxActionType.d.ts b/src/webpack/common/types/fluxActionType.d.ts deleted file mode 100644 index dc68a7253..000000000 --- a/src/webpack/common/types/fluxActionType.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2023 Vendicated and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . -*/ - -/* -function makeFluxEventList() { - // prefill MESSAGE_CREATE so that typescript infers this is a String Set - // without explicitly typing so that this function is also valid javascript - const events = new Set(["MESSAGE_CREATE"]); - - const { nodes } = Vencord.Webpack.Common.FluxDispatcher._actionHandlers._dependencyGraph; - for (const nodeId in nodes) { - for (const event in nodes[nodeId].actionHandler) { - events.add(event); - } - } - for (const event in Vencord.Webpack.Common.FluxDispatcher._subscriptions) { - events.add(event); - } - - return Array.from(events, e => JSON.stringify(e)).sort().join("|"); -} -*/ - -// Someone could create their own Dispatcher with its own action handlers, so the constraint is string. -// However, Discord seems to only use one Dispatcher instance (all ~375 stores use the same instance), so the default constraint is FluxActionType. -export type FluxAction = ActionType extends string - ? { type: ActionType; } & Record - : never; - -export type ExtractAction = Action extends FluxAction - ? Action["type"] extends ActionType - ? Action - : never - : never; - -// 46kb worth of events ??????? -export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACCESSIBILITY_TOGGLE_DISABLE_VOICE_BACKGROUNDS" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_INTERACTION_INITIATED" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "IN_APP_REPORTS_SHOW_FEEDBACK" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_BACKGROUND_SHOW_FEEDBACK" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_BACKGROUND_UPDATE" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_SHOW_FEEDBACK" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/src/webpack/common/types/fluxActions.d.ts b/src/webpack/common/types/fluxActions.d.ts new file mode 100644 index 000000000..f149a76ff --- /dev/null +++ b/src/webpack/common/types/fluxActions.d.ts @@ -0,0 +1,57 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +/* +function generateFluxActionType() { + const actionTypes = new Set(); + + const { FluxDispatcher } = Vencord.Webpack.Common; + for (const actionType in FluxDispatcher._subscriptions) + actionTypes.add(actionType); + for (const actionType in FluxDispatcher._actionHandlers._orderedActionHandlers) + actionTypes.add(actionType); + const { nodes } = FluxDispatcher._actionHandlers._dependencyGraph; + for (const dispatchToken in nodes) + for (const actionType in nodes[dispatchToken].actionHandler) + actionTypes.add(actionType); + + return `"${[...actionTypes].sort().join('" | "')}"`; +} +*/ + +type FluxGenericAction = ActionType extends unknown + ? { type: ActionType; } + : never; + +export type FluxAction = FluxGenericAction; + +export type ExcludeAction + = Action extends unknown + ? Action["type"] extends ActionType + ? never + : Action + : never; + +export type ExtractAction + = Action extends unknown + ? Action["type"] extends ActionType + ? Action + : never + : never; + +export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACCESSIBILITY_TOGGLE_DISABLE_VOICE_BACKGROUNDS" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_START" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_DEBUG_CLEAR_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_LOG_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_TOGGLE_FAST_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTENT_INVENTORY_TRACK_ITEM_IMPRESSIONS" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DELIVERY_OVERRIDE" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRACK" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_BACKGROUND_UPDATE" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index 77befac67..2384af114 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -17,19 +17,16 @@ */ import type { DraftType } from "@webpack/common"; -import type { APIUser, ApplicationFlags, OAuth2Scopes, UserFlags, UserPremiumType } from "discord-api-types/v9"; -import type { Channel, Guild, Role } from "discord-types/general"; // TODO +import type { APIGuild, APIRoleTags, APIUser } from "discord-api-types/v9"; +import type { Channel } from "discord-types/general"; // TODO -import type { FluxAction, FluxActionHandlers, FluxActionType, FluxDispatchBand, FluxDispatcher } from "./utils"; +import type { ExcludeAction, ExtractAction, FluxAction, FluxActionHandlerMap, FluxDispatchBand, FluxDispatcher } from "./utils"; type Nullish = null | undefined; -type DispatcherAction>> - = Dispatcher extends FluxDispatcher ? Action : never; - type FluxChangeListener = () => boolean; -class FluxChangeListeners { +declare class FluxChangeListeners { has(listener: FluxChangeListener): boolean; hasAny(): boolean; invokeAll(): void; @@ -43,19 +40,16 @@ class FluxChangeListeners { remove: (listener: FluxChangeListener) => void; } -export class FluxStore< - Dispatcher extends FluxDispatcher> = FluxDispatcher, - Action extends DispatcherAction = DispatcherAction -> { +export class FluxStore { constructor( - dispatcher: Dispatcher, - actionHandlers: FluxActionHandlers, - band?: FluxDispatchBand | Nullish + dispatcher: FluxDispatcher, + actionHandlers: FluxActionHandlerMap, + dispatchBand?: FluxDispatchBand | Nullish ); - static displayName: undefined; + static displayName: string | undefined; // undefined on FluxStore's constructor static destroy(): void; - static getAll(): FluxStore>, FluxAction>[]; + static getAll(): FluxStore[]; static initialize(): void; static initialized: Promise; @@ -64,28 +58,30 @@ export class FluxStore< getName(): string; initialize(): void; initializeIfNeeded(): void; - mustEmitChanges: (mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */) => void; + mustEmitChanges( + mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */ + ): void; registerActionHandlers( - actionHandlers: FluxActionHandlers, - band?: FluxDispatchBand | Nullish + actionHandlers: FluxActionHandlerMap, + dispatchBand?: FluxDispatchBand | Nullish ): void; syncWith( - stores: FluxStore[], + stores: FluxStore[], func: () => boolean | void, timeout?: number | Nullish ): void; - waitFor(...stores: FluxStore[]): void; + waitFor(...stores: FluxStore[]): void; __getLocalVars: undefined; _changeCallbacks: FluxChangeListeners; - _dispatcher: Dispatcher; + _dispatcher: FluxDispatcher; _dispatchToken: string; _isInitialized: boolean; _mustEmitChanges: ((action: Action) => boolean) | Nullish; _reactChangeCallbacks: FluxChangeListeners; _syncWiths: { func: () => boolean | void; - store: FluxStore; + store: FluxStore; }[]; addChangeListener: FluxChangeListeners["add"]; addConditionalChangeListener: FluxChangeListeners["addConditional"]; @@ -94,21 +90,24 @@ export class FluxStore< removeReactChangeListener: FluxChangeListeners["remove"]; } -type FluxSnapshotStoreActionType = Exclude; +interface GenericConstructor { new (...args: any[]): any } -interface FluxSnapshot { - data: Data; +interface FluxSnapshot { + data: SnapshotData; version: number; } +type FluxSnapshotStoreAction = ExcludeAction; + export class FluxSnapshotStore< - Constructor extends typeof FluxSnapshotStore = typeof FluxSnapshotStore, + Constructor extends GenericConstructor = GenericConstructor, SnapshotData = any, - Action extends FluxSnapshotStoreActionType = FluxSnapshotStoreActionType -> extends FluxStore { - constructor(actionHandlers: FluxActionHandlers); + Action extends FluxSnapshotStoreAction = FluxSnapshotStoreAction +> extends FluxStore> { + constructor(actionHandlers: FluxActionHandlerMap); static allStores: FluxSnapshotStore[]; + static displayName: string; // not actually defined on SnapshotStore's constructor, but all subclasses are required to have it static clearAll(): void; clear(): void; @@ -123,9 +122,9 @@ export interface Flux { } export type useStateFromStores = ( - stores: FluxStore>, FluxAction>[], + stores: FluxStore[], getStateFromStores: () => State, - dependencies?: any[] | Nullish, + dependencies?: unknown[] | Nullish, areStatesEqual?: ((prevState: State, currState: State) => boolean) | undefined ) => State; @@ -267,44 +266,292 @@ export class EmojiStore extends FluxStore { }; } -/* -export class GuildMemberStore extends FluxStore { +interface AvatarDecorationData { + asset: string; + skuId: string; +} + +export const enum GuildMemberFlags { + DID_REJOIN = 1 << 0, + COMPLETED_ONBOARDING = 1 << 1, + BYPASSES_VERIFICATION = 1 << 2, + STARTED_ONBOARDING = 1 << 3, + IS_GUEST = 1 << 4, + STARTED_HOME_ACTIONS = 1 << 5, + COMPLETED_HOME_ACTIONS = 1 << 6, + AUTOMOD_QUARANTINED_USERNAME_OR_GUILD_NICKNAME = 1 << 7, + AUTOMOD_QUARANTINED_BIO = 1 << 8, + DM_SETTINGS_UPSELL_ACKNOWLEDGED = 1 << 9, + AUTOMOD_QUARANTINED_CLAN_TAG = 1 << 10 +} + +export interface GuildMember { + avatar: string | null; + avatarDecoration: AvatarDecorationData | undefined; + colorRoleId: string | undefined; + colorString: string | undefined; + communicationDisabledUntil: string | Nullish; + flags: GuildMemberFlags; + fullProfileLoadedTimestamp: number | undefined; + guildId: string; + highestRoleId: string | undefined; + hoistRoleId: string | undefined; + iconRoleId: string | undefined; + isPending: boolean; + joinedAt: string; + nick: string | null; + premiumSince: string | null; + roles: string[]; + unusualDMActivityUntil: string | Nullish; + userId: string; +} + +type GuildMemberStoreAction = ExtractAction; + +export class GuildMemberStore extends FluxStore { static displayName: "GuildMemberStore"; - getCommunicationDisabledUserMap(): ; - getCommunicationDisabledVersion(): ; - getMember(e: , t: ): ; - getMemberIds(e: ): ; - getMemberRoleWithPendingUpdates(e: , t: ): ; - getMembers(e: ): ; - getMemberVersion(): ; - getMutableAllGuildsAndMembers(): ; - getNick(e: , t: ): ; - getNicknameGuildsMapping(e: ): ; - getNicknames(e: ): ;: ; - getPendingRoleUpdates(e: ): ; - getSelfMember(e: ): ; - getTrueMember(e: , t: ): ; - isCurrentUserGuest(e: ): ; - isGuestOrLurker(e: , t: ): ; - isMember(e: , t: ): ; - memberOf(e: ): ; + getCommunicationDisabledUserMap(): Record; + getCommunicationDisabledVersion(): number; + getMember(guildId: string, userId: string): GuildMember | null; // TEMP + getMemberIds(guildId?: string | Nullish): string[]; + getMemberRoleWithPendingUpdates(guildId: string, userId: string): string[]; + getMembers(guildId?: string | Nullish): GuildMember[]; + getMemberVersion(): number; + getMutableAllGuildsAndMembers(): Record>; + getNick(guildId?: string | Nullish, userId?: string | Nullish): string | null; + getNicknameGuildsMapping(userId: string): Record; + getNicknames(userId: string): string[]; + getPendingRoleUpdates(guildId: string): { + added: string[] + removed: string[] + }; + getSelfMember(guildId: string): GuildMember | null; + getTrueMember(guildId: string, userId: string): GuildMember | null; + isCurrentUserGuest(guildId?: string | Nullish): boolean; + isGuestOrLurker(guildId?: string | Nullish, userId?: string | Nullish): boolean; + isMember(guildId?: string | Nullish, userId?: string | Nullish): boolean; + memberOf(userId: string): string[]; +} + +export const enum RoleFlags { + IN_PROMPT = 1 +} + +/* +// bigint enums are not yet possible: https://github.com/microsoft/TypeScript/issues/37783 +export const enum 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, + ADD_REACTIONS = 1n << 6n, + VIEW_AUDIT_LOG = 1n << 7n, + PRIORITY_SPEAKER = 1n << 8n, + STREAM = 1n << 9n, + VIEW_CHANNEL = 1n << 10n, + 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, + VIEW_GUILD_ANALYTICS = 1n << 19n, + CONNECT = 1n << 20n, + SPEAK = 1n << 21n, + MUTE_MEMBERS = 1n << 22n, + DEAFEN_MEMBERS = 1n << 23n, + MOVE_MEMBERS = 1n << 24n, + USE_VAD = 1n << 25n, + CHANGE_NICKNAME = 1n << 26n, + MANAGE_NICKNAMES = 1n << 27n, + MANAGE_ROLES = 1n << 28n, + MANAGE_WEBHOOKS = 1n << 29n, + MANAGE_GUILD_EXPRESSIONS = 1n << 30n, + USE_APPLICATION_COMMANDS = 1n << 31n, + REQUEST_TO_SPEAK = 1n << 32n, + MANAGE_EVENTS = 1n << 33n, + 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, + USE_EMBEDDED_ACTIVITIES = 1n << 39n, + MODERATE_MEMBERS = 1n << 40n, + VIEW_CREATOR_MONETIZATION_ANALYTICS = 1n << 41n, + USE_SOUNDBOARD = 1n << 42n, + CREATE_GUILD_EXPRESSIONS = 1n << 43n, + CREATE_EVENTS = 1n << 44n, + USE_EXTERNAL_SOUNDS = 1n << 45n, + SEND_VOICE_MESSAGES = 1n << 46n, + USE_CLYDE_AI = 1n << 47n, + SET_VOICE_CHANNEL_STATUS = 1n << 48n, + SEND_POLLS = 1n << 49n } */ -export class GuildStore extends FluxStore { - getGuild(guildId: string): Guild; - getGuildCount(): number; - getGuilds(): Record; - getGuildIds(): string[]; - getRole(guildId: string, roleId: string): Role; - getRoles(guildId: string): Record; - getAllGuildRoles(): Record>; +export interface Role { + color: number; + colorString: string | null; + flags: RoleFlags; + hoist: boolean; + icon: string | null; + id: string; + managed: boolean; + mentionable: boolean; + name: string; + originalPosition: number; + permissions: bigint /* Permissions */; + position: number; + tags: APIRoleTags; + unicodeEmoji: string | null; } -enum ApplicationIntegrationType { - GUILD_INSTALL, - USER_INSTALL +type GuildRecordOwnProperties = Pick; + +export class GuildRecord< + OwnProperties extends GuildRecordOwnProperties = GuildRecordOwnProperties +> extends ImmutableRecord { + constructor(guildFromServer: APIGuild); + + get acronym(): ; // TEMP + canHaveRaidActivityAlerts(): ; // TEMP + getApplicationId(): ; // TEMP + getEveryoneRoleId(): ; // TEMP + getIconSource(e: ): ; // TEMP + getIconURL(e: ): ; // TEMP + getMaxEmojiSlots(): ; // TEMP + getMaxRoleSubscriptionEmojiSlots(): ; // TEMP + getMaxSoundboardSlots(): ; // TEMP + getSafetyAlertsChannelId(): ; // TEMP + isCommunity(): ; // TEMP + isLurker(): ; // TEMP + isNew(): ; // TEMP + isOwner(e: ): ; // TEMP + isOwnerWithRequiredMfaLevel(e: ): ; // TEMP + hasCommunityInfoSubheader(): ; // TEMP + hasFeature(e: ): ; // TEMP + hasVerificationGate(): ; // TEMP + merge(e: ): ; // TEMP + updateJoinedAt(e: ): ; // TEMP + + afkChannelId: ; // TEMP + afkTimeout: ; // TEMP + application_id: ; // TEMP + banner: ; // TEMP + clan: ; // TEMP + defaultMessageNotifications: ; // TEMP + description: ; // TEMP + discoverySplash: ; // TEMP + explicitContentFilter: ; // TEMP + features: ; // TEMP + homeHeader: ; // TEMP + hubType: ; // TEMP + icon: ; // TEMP + id: ; // TEMP + joinedAt: ; // TEMP + latestOnboardingQuestionId: ; // TEMP + maxMembers: ; // TEMP + maxStageVideoChannelUsers: ; // TEMP + maxVideoChannelUsers: ; // TEMP + mfaLevel: ; // TEMP + name: ; // TEMP + nsfwLevel: ; // TEMP + ownerId: ; // TEMP + preferredLocale: ; // TEMP + premiumProgressBarEnabled: ; // TEMP + premiumSubscriberCount: ; // TEMP + premiumTier: ; // TEMP + publicUpdatesChannelId: ; // TEMP + rulesChannelId: ; // TEMP + safetyAlertsChannelId: ; // TEMP + splash: ; // TEMP + systemChannelFlags: ; // TEMP + systemChannelId: ; // TEMP + vanityURLCode: ; // TEMP + verificationLevel: ; // TEMP +} + +type GuildStoreAction = ExtractAction; + +export class GuildStore extends FluxStore { + static displayName: "GuildStore"; + + getAllGuildsRoles(): Record>; + getGeoRestrictedGuilds(): Record; + getGuild(guildId?: string | Nullish): GuildRecord; + getGuildCount(): number; + getGuildIds(): string[]; + getGuilds(): Record; + getRole(guildId: string, roleId: string): Role; + getRoles(guildId: string): Record; + isLoaded(): boolean; +} + +export const enum ApplicationFlags { + EMBEDDED_RELEASED = 1 << 1, + EMBEDDED_IAP = 1 << 3, + APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE = 1 << 6, + GATEWAY_PRESENCE = 1 << 12, + GATEWAY_PRESENCE_LIMITED = 1 << 13, + GATEWAY_GUILD_MEMBERS = 1 << 14, + GATEWAY_GUILD_MEMBERS_LIMITED = 1 << 15, + EMBEDDED = 1 << 17, + GATEWAY_MESSAGE_CONTENT = 1 << 18, + GATEWAY_MESSAGE_CONTENT_LIMITED = 1 << 19, + EMBEDDED_FIRST_PARTY = 1 << 20, + APPLICATION_COMMAND_BADGE = 1 << 23, + SOCIAL_LAYER_INTEGRATION = 1 << 27 +} + +export const enum OAuth2Scopes { + ACTIVITIES_READ = "activities.read", + ACTIVITIES_WRITE = "activities.write", + APPLICATIONS_BUILDS_READ = "applications.builds.read", + APPLICATIONS_BUILDS_UPLOAD = "applications.builds.upload", + APPLICATIONS_COMMANDS = "applications.commands", + APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE = "applications.commands.permissions.update", + APPLICATIONS_COMMANDS_UPDATE = "applications.commands.update", + APPLICATIONS_ENTITLEMENTS = "applications.entitlements", + APPLICATIONS_STORE_UPDATE = "applications.store.update", + BOT = "bot", + CONNECTIONS = "connections", + DM_CHANNELS_MESSAGES_READ = "dm_channels.messages.read", + DM_CHANNELS_MESSAGES_WRITE = "dm_channels.messages.write", + DM_CHANNELS_READ = "dm_channels.read", + EMAIL = "email", + GDM_JOIN = "gdm.join", + GUILDS = "guilds", + GUILDS_JOIN = "guilds.join", + GUILDS_MEMBERS_READ = "guilds.members.read", + IDENTIFY = "identify", + MESSAGES_READ = "messages.read", + OPENID = "openid", + PRESENCES_READ = "presences.read", + PRESENCES_WRITE = "presences.write", + RELATIONSHIPS_READ = "relationships.read", + RELATIONSHIPS_WRITE = "relationships.write", + ROLE_CONNECTIONS_WRITE = "role_connections.write", + RPC = "rpc", + RPC_ACTIVITIES_WRITE = "rpc.activities.write", + RPC_NOTIFICATIONS_READ = "rpc.notifications.read", + RPC_SCREENSHARE_READ = "rpc.screenshare.read", + RPC_SCREENSHARE_WRITE = "rpc.screenshare.write", + RPC_VIDEO_READ = "rpc.video.read", + RPC_VIDEO_WRITE = "rpc.video.write", + RPC_VOICE_READ = "rpc.voice.read", + RPC_VOICE_WRITE = "rpc.voice.write", + VOICE = "voice", + WEBHOOK_INCOMING = "webhook.incoming" +} + +export const enum ApplicationIntegrationType { + GUILD_INSTALL = 0, + USER_INSTALL = 1 } interface UserProfileFetchFailed { @@ -359,7 +606,7 @@ interface UserProfileFetchSucceeded { popoutAnimationParticleType: Nullish; // TEMP premiumGuildSince: Date | null; premiumSince: Date | null; - premiumType: UserPremiumType | Nullish; + premiumType: PremiumTypes | Nullish; profileEffectId: string | undefined; profileFetchFailed: false; pronouns: string; @@ -371,21 +618,41 @@ export type UserProfile = FetchFailed ext ? UserProfileFetchFailed : UserProfileFetchSucceeded; + +export const enum StatusTypes { + DND = "dnd", + IDLE = "idle", + INVISIBLE = "invisible", + OFFLINE = "offline", + ONLINE = "online", + STREAMING = "streaming", + UNKNOWN = "unknown" +} + interface UserProfileStoreSnapshotData { userId: string; profile: UserProfile | undefined; } +type UserProfileStoreAction = ExtractAction; + export class UserProfileStore extends FluxSnapshotStore { static displayName: "UserProfileStore"; static LATEST_SNAPSHOT_VERSION: number; getUserProfile(userId: string): UserProfile | undefined; - getGuildMemberProfile(userId: string, guildId: T): T extends Nullish ? null : any | undefined; // TEMP + getGuildMemberProfile(userId: string, guildId?: string | Nullish): Record /* | Nullish */; // TEMP getIsAccessibilityTooltipViewed(): boolean; - getMutualFriends(userId: string): any; // TEMP + getMutualFriends(userId: string): { + key: string; // userId + status: StatusTypes; + user: UserRecord; + }[]; getMutualFriendsCount(userId: string): number; - getMutualGuilds(userId: string): any; // TEMP + getMutualGuilds(userId: string): { + guild: Record; // TEMP + nick: string | null; + }[]; isFetchingFriends(userId: string): boolean; isFetchingProfile(userId: string): boolean; get isSubmitting(): boolean; @@ -394,14 +661,43 @@ export class UserProfileStore extends FluxSnapshotStore void; } -interface AvatarDecorationData { - asset: string; - skuId: string; +export const 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, + TEAM_PSEUDO_USER = 1 << 10, + 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, + QUARANTINED = 0x100_000_000_000, + COLLABORATOR = 0x4_000_000_000_000, + RESTRICTED_COLLABORATOR = 0x8_000_000_000_000 +} + +export const enum PremiumTypes { + TIER_1 = 1, + TIER_2 = 2, + TIER_0 = 3 } type UserRecordOwnProperties = Pick; -export class UserRecord extends ImmutableRecord { +export class UserRecord< + OwnProperties extends UserRecordOwnProperties = UserRecordOwnProperties +> extends ImmutableRecord { constructor(userFromServer: APIUser); addGuildAvatarHash(guildId: string, avatarHash: string): this; @@ -410,10 +706,18 @@ export class UserRecord extends ImmutableRecord { asset: string; skuId?: string; sku_id?: string; - } | null): void; + } | null); get createdAt(): Date; - getAvatarSource(guildId?: string | Nullish, canAnimate?: boolean | undefined, avatarSize?: number | undefined): { uri: string; }; - getAvatarURL(guildId?: string | Nullish, avatarSize?: number | undefined, canAnimate?: boolean | undefined): string; + getAvatarSource( + guildId?: string | Nullish, + canAnimate?: boolean | undefined, + avatarSize?: number | undefined + ): { uri: string; }; + getAvatarURL( + guildId?: string | Nullish, + avatarSize?: number | undefined, + canAnimate?: boolean | undefined + ): string; hasAvatarForGuild(guildId?: string | Nullish): boolean; hasDisabledPremium(): boolean; hasFreePremium(): boolean; @@ -461,7 +765,7 @@ export class UserRecord extends ImmutableRecord { nsfwAllowed: boolean; personalConnectionId: string | null; phone: string | null; - premiumType: UserPremiumType | Nullish; // discord seems to have recently made it so that premiumType is nullish for every UserRecord + premiumType: PremiumTypes | Nullish; // discord seems to have recently made it so that premiumType is nullish for every UserRecord premiumUsageFlags: number; publicFlags: UserFlags; purchasedFlags: number; @@ -472,7 +776,11 @@ export class UserRecord extends ImmutableRecord { interface UserStoreSnapshotData { users: [UserRecord] | []; } -export class UserStore extends FluxSnapshotStore { +type UserStoreAction = ExtractAction; + +export class UserStore extends FluxSnapshotStore { + constructor(); + static displayName: "UserStore"; static LATEST_SNAPSHOT_VERSION: number; diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 709c1973b..981c49cff 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -19,20 +19,20 @@ import type { Guild, GuildMember } from "discord-types/general"; // TODO import type { EventEmitter } from "events"; // Discord uses a polyfill for Node's EventEmitter import type { ReactNode } from "react"; -import type { OmitIndexSignature } from "type-fest"; -import type { ExtractAction, FluxAction, FluxActionType } from "./fluxActions"; +// import type { OmitIndexSignature } from "type-fest"; +import type { ExcludeAction, ExtractAction, FluxAction, FluxActionType } from "./fluxActions"; import type { i18nMessages } from "./i18nMessages"; -export { ExtractAction, FluxAction, FluxActionType }; +export { ExcludeAction, ExtractAction, FluxAction, FluxActionType }; type Nullish = null | undefined; -class DepGraph { +declare class DepGraph { constructor(options?: { circular?: boolean | undefined; } | undefined); addDependency(from: string, to: string): void; - addNode(name: string, data?: Data | undefined): void; + addNode(name: string, data/* ?*/: Data/* | undefined*/): void; clone(): DepGraph; dependantsOf(name: string, leavesOnly?: boolean | undefined): string[]; dependenciesOf(name: string, leavesOnly?: boolean | undefined): string[]; @@ -41,62 +41,73 @@ class DepGraph { overallOrder(leavesOnly?: boolean | undefined): string[]; removeDependency(from: string, to: string): void; removeNode(name: string): void; - setNodeData(name: string, data?: Data | undefined): void; + setNodeData(name: string, data/* ?*/: Data/* | undefined*/): void; size(): number; circular: boolean | undefined; - nodes: Record; + nodes: Record; outgoingEdges: Record; incomingEdges: Record; } -export enum FluxDispatchBand { - Early, - Database, - Default +export const enum FluxDispatchBand { + Early = 0, + Database = 1, + Default = 2 } -export type FluxActionHandler = Action extends FluxAction +/* +export type FluxActionHandler = Action extends FluxAction ? Exclude, "type"> extends never ? (action: any) => Return : (action: Action) => Return : never; +*/ -export type FluxActionHandlers = FluxAction> +export type FluxActionHandler = (action: Action) => void; + +export type FluxActionHandlerMap = { [ActionType in Action["type"]]: FluxActionHandler>; }; -interface FluxActionHandlersGraphNode = FluxAction> { - name: string; - band: number; - actionHandler: FluxActionHandler; - storeDidChange: FluxActionHandler; +interface FluxActionHandlersGraphNode { + name: string; // storeName + band: FluxDispatchBand; + actionHandler: FluxActionHandlerMap; + storeDidChange: FluxActionHandler; } -type FluxOrderedActionHandlers = FluxAction> - = Omit, "band">[]; +type FluxOrderedActionHandlers = { + name: string; // storeName + actionHandler: FluxActionHandler; + storeDidChange: FluxActionHandler; +}[]; -class FluxActionHandlersGraph = FluxAction> { - _addToBand(token: string, band: FluxDispatchBand): void; - _bandToken(band: DispatcherBand): string; - _computeOrderedActionHandlers(actionType: Action["type"]): FluxOrderedActionHandlers; +declare class FluxActionHandlersGraph { + _addToBand(dispatchToken: string, dispatchBand: FluxDispatchBand): void; + _bandToken(dispatchBand: FluxDispatchBand): string; + _computeOrderedActionHandlers( + actionType: ActionType + ): FluxOrderedActionHandlers>[]; _computeOrderedCallbackTokens(): string[]; _invalidateCaches(): void; - _validateDependencies(fromToken: string, toToken: string): void; - addDependencies(fromToken: string, toTokens: string[]): void; + _validateDependencies(fromDispatchToken: string, toDispatchToken: string): void; + addDependencies(fromDispatchToken: string, toDispatchTokens: string[]): void; createToken(): string; - getOrderedActionHandlers(action: Action): FluxOrderedActionHandlers; - register( - name: string, - actionHandlers: Partial>, + getOrderedActionHandlers({ type }: { + type: ActionType; + }): FluxOrderedActionHandlers>; + register( + storeName: string, + actionHandlers: FluxActionHandlerMap, storeDidChange: FluxActionHandler, - band: FluxDispatchBand, - token?: string | undefined + dispatchBand: FluxDispatchBand, + dispatchToken?: string | undefined ): string; - _dependencyGraph: DepGraph>; + _dependencyGraph: DepGraph; _lastID: number; _orderedActionHandlers: { - [ActionType in Action["type"]]?: FluxOrderedActionHandlers> | Nullish; + [ActionType in FluxActionType]?: FluxOrderedActionHandlers> | Nullish; }; _orderedCallbackTokens: string[] | Nullish; } @@ -111,14 +122,14 @@ interface SentryUtils { }) => void; } -type ActionMetric +type FluxActionMetric = [storeName: string, actionType: ActionType, totalTime: number]; -class FluxActionLog = FluxAction> { +declare class FluxActionLog { constructor(actionType: Action["type"]); get name(): Action["type"]; - toJSON(): Pick, "action" | "createdAt" | "traces"> & { + toJSON(): Pick, "action" | "createdAt" | "traces"> & { created_at: FluxActionLog["createdAt"]; }; @@ -134,74 +145,84 @@ class FluxActionLog = FluxAction> { }[]; } -class FluxActionLogger = FluxAction> extends EventEmitter { +declare class FluxActionLogger extends EventEmitter { constructor(options?: { persist?: boolean | undefined; } | undefined); getLastActionMetrics( title: string, limit?: number | undefined /* = 20 */ - ): ActionMetric[]; - getSlowestActions( - actionType?: Action["type"] | Nullish, + ): FluxActionMetric[]; + getSlowestActions( + actionType?: ActionType | Nullish, limit?: number | undefined /* = 20 */ - ): ActionMetric[]; - log( - action: A, - callback: (func: any>(storeName: string, func: U) => ReturnType) => void - ): FluxActionLog; + ): FluxActionMetric[]; + log( + action: Action, + callback: (func: any>(storeName: string, func: T) => ReturnType) => void + ): FluxActionLog; - logs: FluxActionLog[]; + logs: FluxActionLog[]; persist: boolean; } -export class FluxDispatcher = FluxAction> { +/* + * The only reason to make Dispatcher generic with a type parameter for the actions it handles would be to allow plugins + * to create their own Flux stores with their own actions. However, this would require removing all contravariant properties + * from Dispatcher so that plugins could create stores with their own Dispatcher instances. This would be required, since + * the alternative option, allowing plugins to use the main Dispatcher instance, would require removing type information for + * Discord's actions from Dispatcher, and would introduce the potential for action type name conflicts. Both of these + * options would harm the main use case of these types. Furthermore, there are other state management libraries bundled with + * Discord that plugins can use (e.g., Redux, Zustand), and Discord seems to only use one Dispatcher instance (all ~388 + * stores use the same instance), implying that their type for Dispatcher is also not generic. + */ +export class FluxDispatcher { constructor( - defaultBand?: FluxDispatchBand | undefined /* = 0 */, - actionLogger?: FluxActionLogger | Nullish, + defaultBand?: FluxDispatchBand | undefined /* = FluxDispatchBand.Early */, + actionLogger?: FluxActionLogger | Nullish, sentryUtils?: SentryUtils | Nullish ); _dispatch( - action: Action, + action: FluxAction, func: any>(storeName: string, func: U) => ReturnType ): false | void; - _dispatchWithDevtools(action: Action): void; - _dispatchWithLogging(action: Action): void; - addDependencies(fromToken: string, toTokens: string[]): void; - addInterceptor(interceptor: FluxActionHandler): void; + _dispatchWithDevtools(action: FluxAction): void; + _dispatchWithLogging(action: FluxAction): void; + addDependencies(fromDispatchToken: string, toDispatchTokens: string[]): void; + addInterceptor(interceptor: FluxActionHandler): void; createToken(): string; - dispatch(action: Action): Promise; + dispatch(action: FluxAction): Promise; flushWaitQueue(): void; isDispatching(): boolean; - register( - name: string, - actionHandlers: Partial>, + register( + storeName: string, + actionHandlers: FluxActionHandlerMap, storeDidChange: FluxActionHandler, - band?: FluxDispatchBand | Nullish, - token?: string | undefined + dispatchBand?: FluxDispatchBand | Nullish, + dispatchToken?: string | undefined ): string; - subscribe( + subscribe( actionType: ActionType, - listener: FluxActionHandler> + listener: FluxActionHandler> ): void; - unsubscribe( + unsubscribe( actionType: ActionType, - listener: FluxActionHandler> + listener: FluxActionHandler> ): void; wait(callback: () => void): void; - _actionHandlers: FluxActionHandlersGraph; - _currentDispatchActionType: Action["type"] | Nullish; + _actionHandlers: FluxActionHandlersGraph; + _currentDispatchActionType: FluxActionType | Nullish; _defaultBand: FluxDispatchBand; - _interceptors: ((action: Action) => boolean)[]; + _interceptors: ((action: FluxAction) => boolean)[]; _processingWaitQueue: boolean; _sentryUtils: SentryUtils | Nullish; _subscriptions: { - [ActionType in Action["type"]]?: Set>> | Nullish; + [ActionType in FluxActionType]?: Set>> | Nullish; }; _waitQueue: (() => void)[]; - actionLogger: FluxActionLogger; - functionCache: FluxActionHandlers; + actionLogger: FluxActionLogger; + functionCache: FluxActionHandlerMap; } export type Parser = Record< @@ -352,6 +373,7 @@ export interface NavigationRouter { } export interface IconUtils { + // @ts-expect-error: TODO getUserAvatarURL(user: User, canAnimate?: boolean, size?: number, format?: string): string; getDefaultAvatarURL(id: string, discriminator?: string): string; getUserBannerURL(data: { id: string, banner: string, canAnimate?: boolean, size: number; }): string | undefined; diff --git a/tsconfig.json b/tsconfig.json index 96c904766..659595953 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,6 @@ "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "esModuleInterop": true, - "skipLibCheck": true, "lib": [ "DOM", "DOM.Iterable", From 67569af324400d7ca32ea9029ea4d189de90cf07 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sat, 18 May 2024 03:29:31 -0400 Subject: [PATCH 006/126] Progress --- src/webpack/common/stores.ts | 2 +- src/webpack/common/types/stores.d.ts | 663 ++++++++++++++++++++------- 2 files changed, 500 insertions(+), 165 deletions(-) diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index d969f5ab9..47ff3ed97 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -45,7 +45,7 @@ export let UserStore: t.UserStore; export let UserProfileStore: t.UserProfileStore; export let SelectedChannelStore: Stores.SelectedChannelStore & t.FluxStore; export let SelectedGuildStore: t.FluxStore & Record; -export let ChannelStore: Stores.ChannelStore & t.FluxStore; +export let ChannelStore: t.ChannelStore; export let GuildMemberStore: t.GuildMemberStore; export let RelationshipStore: Stores.RelationshipStore & t.FluxStore & { /** Get the date (as a string) that the relationship was created */ diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index 43f3c372c..0d3cf47f4 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -16,9 +16,6 @@ * along with this program. If not, see . */ -import type { APIGuild, APIRoleTags, APIUser } from "discord-api-types/v9"; -import type { Channel } from "discord-types/general"; // TODO - import type { ExcludeAction, ExtractAction, FluxAction, FluxActionHandlerMap, FluxDispatchBand, FluxDispatcher } from "./utils"; type Nullish = null | undefined; @@ -143,6 +140,241 @@ export class ImmutableRecord; + +// does not extend ImmutableRecord +export class ChannelRecordBase { + constructor(channelFromServer: Record); // TEMP + + get accessPermissions(): /* Permissions */ bigint; + get bitrate(): number; + computeLurkerPermissionsAllowList(): /* Permissions */ bigint | undefined; + get flags(): ChannelFlags; + getApplicationId(): this["application_id"]; + getDefaultLayout(): FormLayout; + getDefaultSortOrder(): ThreadSortOrder; + getGuildId(): string | null; + hasFlag(flag: number): boolean; + isActiveThread(): boolean; + isAnnouncementThread(): boolean; + isArchivedLockedThread(): boolean; + isArchivedThread(): boolean; + isBroadcastChannel(): boolean; + isCategory(): boolean; + isDM(): boolean; + isDirectory(): boolean; + isForumChannel(): boolean; + isForumLikeChannel(): boolean; + isForumPost(): boolean; + isGroupDM(): boolean; + isGuildStageVoice(): boolean; + isGuildVocal(): boolean; + isGuildVocalOrThread(): boolean; + isGuildVoice(): boolean; + isListenModeCapable(): boolean; + isLockedThread(): boolean; + isManaged(): boolean; + isMediaChannel(): boolean; + isMediaPost(): boolean; + isMultiUserDM(): boolean; + isNSFW(): boolean; + isOwner(userId: string): boolean; + isPrivate(): boolean; + isRoleSubscriptionTemplatePreviewChannel(): boolean; + isScheduledForDeletion(): boolean; + isSystemDM(): boolean; + isThread(): boolean; + isVocal(): boolean; + isVocalThread(): boolean; + merge(collection: Partial): this; + get nsfw(): boolean; + get permissionOverwrites(): Record; // TEMP + get position(): number; + get rateLimitPerUser(): number; + set(key: Key, value: OwnProperties[Key]): this; + toJS(): OwnProperties; + get topic(): string; + get userLimit(): number; + + application_id: undefined; // TEMP + appliedTags: undefined; // TEMP + availableTags: undefined; // TEMP + bitrate_: undefined; // TEMP + defaultAutoArchiveDuration: undefined; // TEMP + defaultForumLayout: undefined; // TEMP + defaultReactionEmoji: undefined; // TEMP + defaultSortOrder: undefined; // TEMP + defaultThreadRateLimitPerUser: undefined; // TEMP + flags_: undefined; // TEMP + guild_id: string | null; + icon: undefined; // TEMP + iconEmoji: undefined; // TEMP + id: string; + isMessageRequest: undefined; // TEMP + isMessageRequestTimestamp: undefined; // TEMP + isSpam: undefined; // TEMP + lastMessageId: undefined; // TEMP + lastPinTimestamp: undefined; // TEMP + member: undefined; // TEMP + memberCount: undefined; // TEMP + memberIdsPreview: undefined; // TEMP + memberListId: undefined; // TEMP + messageCount: undefined; // TEMP + name: string; + nicks: undefined; // TEMP + nsfw_: undefined; // TEMP + originChannelId: undefined; // TEMP + ownerId: undefined; // TEMP + parentChannelThreadType: undefined; // TEMP + parent_id: undefined; // TEMP + permissionOverwrites_: undefined; // TEMP + position_: undefined; // TEMP + rateLimitPerUser_: undefined; // TEMP + rawRecipients: undefined; // TEMP + recipients: undefined; // TEMP + rtcRegion: undefined; // TEMP + safetyWarnings: undefined; // TEMP + template: undefined; // TEMP + themeColor: undefined; // TEMP + threadMetadata: undefined; // TEMP + topic_: undefined; // TEMP + totalMessageSent: undefined; // TEMP + type: ChannelTypes; + userLimit_: undefined; // TEMP + version: undefined; // TEMP + videoQualityMode: undefined; // TEMP +} + +type ChannelStoreAction = ExtractAction; + +export class ChannelStore extends FluxStore { + static displayName: "ChannelStore"; + + getAllThreadsForParent(channelId: string): ; // TEMP + getBasicChannel(channelId?: string | Nullish): ; // TEMP + getChannel(channelId?: string | Nullish): ; // TEMP + getChannelIds(guildId?: string | Nullish): string[]; + getDebugInfo(): { + loadedGuildIds: any[]; // TEMP + pendingGuildLoads: any[]; // TEMP + guildSizes: string[]; + }; + getDMFromUserId(userId?: string | Nullish): ; // TEMP + getDMUserIds(): string[]; + getGuildChannelsVersion(guildId: string): number; // TEMP + getInitialOverlayState(): ; // TEMP + getMutableBasicGuildChannelsForGuild(guildId: string): ; // TEMP + getMutableDMsByUserIds(): ; // TEMP + getMutableGuildChannelsForGuild(guildId: string): ; // TEMP + getMutablePrivateChannels(): ; // TEMP + getPrivateChannelsVersion(): number; + getSortedPrivateChannels(): ; // TEMP + hasChannel(channelId: string): boolean; + loadAllGuildAndPrivateChannelsFromDisk(): ; // TEMP +} + export interface DraftObject { channelId: string; timestamp: number; @@ -247,6 +479,7 @@ export class EmojiStore extends FluxStore { pendingUsages: { key: string, timestamp: number; }[]; }; searchWithoutFetchingLatest(data: { + // @ts-expect-error: TODO channel: Channel, query: string; count?: number; @@ -292,7 +525,7 @@ export const enum GuildMemberFlags { AUTOMOD_QUARANTINED_USERNAME_OR_GUILD_NICKNAME = 1 << 7, AUTOMOD_QUARANTINED_BIO = 1 << 8, DM_SETTINGS_UPSELL_ACKNOWLEDGED = 1 << 9, - AUTOMOD_QUARANTINED_CLAN_TAG = 1 << 10 + AUTOMOD_QUARANTINED_CLAN_TAG = 1 << 10, } export interface GuildMember { @@ -321,23 +554,23 @@ type GuildMemberStoreAction = ExtractAction extends FluxStore { static displayName: "GuildMemberStore"; - getCommunicationDisabledUserMap(): Record; + getCommunicationDisabledUserMap(): { [userId: string]: string; }; getCommunicationDisabledVersion(): number; getMember(guildId: string, userId: string): GuildMember | null; // TEMP getMemberIds(guildId?: string | Nullish): string[]; getMemberRoleWithPendingUpdates(guildId: string, userId: string): string[]; getMembers(guildId?: string | Nullish): GuildMember[]; getMemberVersion(): number; - getMutableAllGuildsAndMembers(): Record>; + getMutableAllGuildsAndMembers(): { [guildId: string]: { [userId: string]: GuildMember; }; }; getNick(guildId?: string | Nullish, userId?: string | Nullish): string | null; - getNicknameGuildsMapping(userId: string): Record; + getNicknameGuildsMapping(userId: string): { [nickname: string]: string[]; }; getNicknames(userId: string): string[]; getPendingRoleUpdates(guildId: string): { added: string[] removed: string[] }; - getSelfMember(guildId: string): GuildMember | null; - getTrueMember(guildId: string, userId: string): GuildMember | null; + getSelfMember(guildId: string): GuildMember | Nullish; + getTrueMember(guildId: string, userId: string): GuildMember | Nullish; isCurrentUserGuest(guildId?: string | Nullish): boolean; isGuestOrLurker(guildId?: string | Nullish, userId?: string | Nullish): boolean; isMember(guildId?: string | Nullish, userId?: string | Nullish): boolean; @@ -348,62 +581,6 @@ export const enum RoleFlags { IN_PROMPT = 1 } -/* -// bigint enums are not yet possible: https://github.com/microsoft/TypeScript/issues/37783 -export const enum 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, - ADD_REACTIONS = 1n << 6n, - VIEW_AUDIT_LOG = 1n << 7n, - PRIORITY_SPEAKER = 1n << 8n, - STREAM = 1n << 9n, - VIEW_CHANNEL = 1n << 10n, - 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, - VIEW_GUILD_ANALYTICS = 1n << 19n, - CONNECT = 1n << 20n, - SPEAK = 1n << 21n, - MUTE_MEMBERS = 1n << 22n, - DEAFEN_MEMBERS = 1n << 23n, - MOVE_MEMBERS = 1n << 24n, - USE_VAD = 1n << 25n, - CHANGE_NICKNAME = 1n << 26n, - MANAGE_NICKNAMES = 1n << 27n, - MANAGE_ROLES = 1n << 28n, - MANAGE_WEBHOOKS = 1n << 29n, - MANAGE_GUILD_EXPRESSIONS = 1n << 30n, - USE_APPLICATION_COMMANDS = 1n << 31n, - REQUEST_TO_SPEAK = 1n << 32n, - MANAGE_EVENTS = 1n << 33n, - 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, - USE_EMBEDDED_ACTIVITIES = 1n << 39n, - MODERATE_MEMBERS = 1n << 40n, - VIEW_CREATOR_MONETIZATION_ANALYTICS = 1n << 41n, - USE_SOUNDBOARD = 1n << 42n, - CREATE_GUILD_EXPRESSIONS = 1n << 43n, - CREATE_EVENTS = 1n << 44n, - USE_EXTERNAL_SOUNDS = 1n << 45n, - SEND_VOICE_MESSAGES = 1n << 46n, - USE_CLYDE_AI = 1n << 47n, - SET_VOICE_CHANNEL_STATUS = 1n << 48n, - SEND_POLLS = 1n << 49n -} -*/ - export interface Role { color: number; colorString: string | null; @@ -415,75 +592,220 @@ export interface Role { mentionable: boolean; name: string; originalPosition: number; - permissions: bigint /* Permissions */; + permissions: /* Permissions */ bigint; position: number; - tags: APIRoleTags; + tags: { + available_for_purchase?: null; + bot_id?: string; + guild_connections?: null; + integration_id?: string; + premium_subscriber?: null; + subscription_listing_id?: string; + }; unicodeEmoji: string | null; } +interface IconSource { + uri: string; +} + +export interface Clan { + badge: string | Nullish; + identityEnabled: boolean | undefined; + identityGuildId: string | Nullish; + tag: string | Nullish; +} + +export const enum UserNotificationSettings { + ALL_MESSAGES = 0, + ONLY_MENTIONS = 1, + NO_MESSAGES = 2, + NULL = 3, +} + +export const enum GuildExplicitContentFilterTypes { + DISABLED = 0, + MEMBERS_WITHOUT_ROLES = 1, + ALL_MEMBERS = 2, +} + +export const enum GuildFeatures { + ANIMATED_BANNER = "ANIMATED_BANNER", + ANIMATED_ICON = "ANIMATED_ICON", + AUTOMOD_TRIGGER_USER_PROFILE = "AUTOMOD_TRIGGER_USER_PROFILE", + AUTO_MODERATION = "AUTO_MODERATION", + BANNER = "BANNER", + BURST_REACTIONS = "BURST_REACTIONS", + CHANNEL_ICON_EMOJIS_GENERATED = "CHANNEL_ICON_EMOJIS_GENERATED", + CLAN = "CLAN", + CLAN_PILOT_GENSHIN = "CLAN_PILOT_GENSHIN", + CLAN_PILOT_VALORANT = "CLAN_PILOT_VALORANT", + CLYDE_DISABLED = "CLYDE_DISABLED", + CLYDE_ENABLED = "CLYDE_ENABLED", + COMMERCE = "COMMERCE", + COMMUNITY = "COMMUNITY", + CREATOR_MONETIZABLE = "CREATOR_MONETIZABLE", + CREATOR_MONETIZABLE_DISABLED = "CREATOR_MONETIZABLE_DISABLED", + CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING = "CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING", + CREATOR_MONETIZABLE_PROVISIONAL = "CREATOR_MONETIZABLE_PROVISIONAL", + CREATOR_MONETIZABLE_RESTRICTED = "CREATOR_MONETIZABLE_RESTRICTED", + CREATOR_MONETIZABLE_WHITEGLOVE = "CREATOR_MONETIZABLE_WHITEGLOVE", + CREATOR_STORE_PAGE = "CREATOR_STORE_PAGE", + DISCOVERABLE = "DISCOVERABLE", + ENABLED_DISCOVERABLE_BEFORE = "ENABLED_DISCOVERABLE_BEFORE", + ENABLED_MODERATION_EXPERIENCE_FOR_NON_COMMUNITY = "ENABLED_MODERATION_EXPERIENCE_FOR_NON_COMMUNITY", + EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT = "EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT", + FEATURABLE = "FEATURABLE", + GENSHIN_L30 = "GENSHIN_L30", + GUILD_HOME_DEPRECATION_OVERRIDE = "GUILD_HOME_DEPRECATION_OVERRIDE", + GUILD_HOME_OVERRIDE = "GUILD_HOME_OVERRIDE", + GUILD_HOME_TEST = "GUILD_HOME_TEST", + GUILD_ONBOARDING = "GUILD_ONBOARDING", + GUILD_ONBOARDING_EVER_ENABLED = "GUILD_ONBOARDING_EVER_ENABLED", + GUILD_ONBOARDING_HAS_PROMPTS = "GUILD_ONBOARDING_HAS_PROMPTS", + GUILD_PRODUCTS_ALLOW_ARCHIVED_FILE = "GUILD_PRODUCTS_ALLOW_ARCHIVED_FILE", + GUILD_SERVER_GUIDE = "GUILD_SERVER_GUIDE", + GUILD_WEB_PAGE_VANITY_URL = "GUILD_WEB_PAGE_VANITY_URL", + HAS_DIRECTORY_ENTRY = "HAS_DIRECTORY_ENTRY", + HUB = "HUB", + INTERNAL_EMPLOYEE_ONLY = "INTERNAL_EMPLOYEE_ONLY", + INVITES_DISABLED = "INVITES_DISABLED", + INVITE_SPLASH = "INVITE_SPLASH", + LINKED_TO_HUB = "LINKED_TO_HUB", + MEMBER_VERIFICATION_GATE_ENABLED = "MEMBER_VERIFICATION_GATE_ENABLED", + MORE_EMOJI = "MORE_EMOJI", + MORE_STICKERS = "MORE_STICKERS", + NEWS = "NEWS", + NEW_THREAD_PERMISSIONS = "NEW_THREAD_PERMISSIONS", + NON_COMMUNITY_RAID_ALERTS = "NON_COMMUNITY_RAID_ALERTS", + PARTNERED = "PARTNERED", + PREVIEW_ENABLED = "PREVIEW_ENABLED", + PRODUCTS_AVAILABLE_FOR_PURCHASE = "PRODUCTS_AVAILABLE_FOR_PURCHASE", + RAID_ALERTS_DISABLED = "RAID_ALERTS_DISABLED", + ROLE_ICONS = "ROLE_ICONS", + ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE = "ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE", + ROLE_SUBSCRIPTIONS_ENABLED = "ROLE_SUBSCRIPTIONS_ENABLED", + SHARD = "SHARD", + SOUNDBOARD = "SOUNDBOARD", + SUMMARIES_ENABLED_BY_USER = "SUMMARIES_ENABLED_BY_USER", + SUMMARIES_ENABLED_GA = "SUMMARIES_ENABLED_GA", + SUMMARIES_OPT_OUT_EXPERIENCE = "SUMMARIES_OPT_OUT_EXPERIENCE", + TEXT_IN_STAGE_ENABLED = "TEXT_IN_STAGE_ENABLED", + TEXT_IN_VOICE_ENABLED = "TEXT_IN_VOICE_ENABLED", + THREADS_ENABLED = "THREADS_ENABLED", + THREADS_ENABLED_TESTING = "THREADS_ENABLED_TESTING", + VALORANT_L30 = "VALORANT_L30", + VANITY_URL = "VANITY_URL", + VERIFIED = "VERIFIED", + VIP_REGIONS = "VIP_REGIONS", + WELCOME_SCREEN_ENABLED = "WELCOME_SCREEN_ENABLED", +} + +export const enum GuildHubTypes { + DEFAULT = 0, + HIGH_SCHOOL = 1, + COLLEGE = 2, +} + +export const enum MFALevels { + NONE = 0, + ELEVATED = 1, +} + +export const enum GuildNSFWContentLevel { + DEFAULT = 0, + EXPLICIT = 1, + SAFE = 2, + AGE_RESTRICTED = 3, +} + +export const enum BoostedGuildTiers { + NONE = 0, + TIER_1 = 1, + TIER_2 = 2, + TIER_3 = 3, +} + +export const enum SystemChannelFlags { + SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0, + SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1, + SUPPRESS_GUILD_REMINDER_NOTIFICATIONS = 1 << 2, + SUPPRESS_JOIN_NOTIFICATION_REPLIES = 1 << 3, + SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS = 1 << 4, + SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES = 1 << 5, + SUPPRESS_CHANNEL_PROMPT_DEADCHAT = 1 << 7, +} + +export const enum VerificationLevels { + NONE = 0, + LOW = 1, + MEDIUM = 2, + HIGH = 3, + VERY_HIGH = 4, +} + type GuildRecordOwnProperties = Pick; export class GuildRecord< OwnProperties extends GuildRecordOwnProperties = GuildRecordOwnProperties > extends ImmutableRecord { - constructor(guildFromServer: APIGuild); + constructor(guildFromServer: Record); // TEMP - get acronym(): ; // TEMP - canHaveRaidActivityAlerts(): ; // TEMP - getApplicationId(): ; // TEMP - getEveryoneRoleId(): ; // TEMP - getIconSource(e: ): ; // TEMP - getIconURL(e: ): ; // TEMP - getMaxEmojiSlots(): ; // TEMP - getMaxRoleSubscriptionEmojiSlots(): ; // TEMP - getMaxSoundboardSlots(): ; // TEMP - getSafetyAlertsChannelId(): ; // TEMP - isCommunity(): ; // TEMP - isLurker(): ; // TEMP - isNew(): ; // TEMP - isOwner(e: ): ; // TEMP - isOwnerWithRequiredMfaLevel(e: ): ; // TEMP - hasCommunityInfoSubheader(): ; // TEMP - hasFeature(e: ): ; // TEMP - hasVerificationGate(): ; // TEMP - merge(e: ): ; // TEMP - updateJoinedAt(e: ): ; // TEMP + get acronym(): string; + canHaveRaidActivityAlerts(): boolean; + getApplicationId(): string | null; + getEveryoneRoleId(): string; + getIconSource(iconSize?: number | undefined, canAnimate?: boolean | undefined): IconSource; + getIconURL(iconSize?: number | undefined, canAnimate?: boolean | undefined): string; + getMaxEmojiSlots(): number; + getMaxRoleSubscriptionEmojiSlots(): number; + getMaxSoundboardSlots(): number; + getSafetyAlertsChannelId(): string | null; + isCommunity(): boolean; + isLurker(): boolean; + isNew(): boolean; + isOwner(userOrUserId?: UserRecord | string | Nullish): boolean; + isOwnerWithRequiredMfaLevel(userOrUserId?: UserRecord | string | Nullish): boolean; + hasCommunityInfoSubheader(): boolean; + hasFeature(guildFeature: GuildFeatures): boolean; + hasVerificationGate(): boolean; + updateJoinedAt(joinedAt: Date | string): this; - afkChannelId: ; // TEMP - afkTimeout: ; // TEMP - application_id: ; // TEMP - banner: ; // TEMP - clan: ; // TEMP - defaultMessageNotifications: ; // TEMP - description: ; // TEMP - discoverySplash: ; // TEMP - explicitContentFilter: ; // TEMP - features: ; // TEMP - homeHeader: ; // TEMP - hubType: ; // TEMP - icon: ; // TEMP - id: ; // TEMP - joinedAt: ; // TEMP - latestOnboardingQuestionId: ; // TEMP - maxMembers: ; // TEMP - maxStageVideoChannelUsers: ; // TEMP - maxVideoChannelUsers: ; // TEMP - mfaLevel: ; // TEMP - name: ; // TEMP - nsfwLevel: ; // TEMP - ownerId: ; // TEMP - preferredLocale: ; // TEMP - premiumProgressBarEnabled: ; // TEMP - premiumSubscriberCount: ; // TEMP - premiumTier: ; // TEMP - publicUpdatesChannelId: ; // TEMP - rulesChannelId: ; // TEMP - safetyAlertsChannelId: ; // TEMP - splash: ; // TEMP - systemChannelFlags: ; // TEMP - systemChannelId: ; // TEMP - vanityURLCode: ; // TEMP - verificationLevel: ; // TEMP + afkChannelId: string | null; + afkTimeout: number; + application_id: string | null; + banner: string | null; + clan: Clan | null; // TEMP + defaultMessageNotifications: UserNotificationSettings; + description: string | null; + discoverySplash: string | null; + explicitContentFilter: GuildExplicitContentFilterTypes; + features: Set; + homeHeader: string | null; + hubType: GuildHubTypes | null; + icon: string | null; + id: string; + joinedAt: Date; + latestOnboardingQuestionId: string | null; + maxMembers: number; + maxStageVideoChannelUsers: number; + maxVideoChannelUsers: number; + mfaLevel: MFALevels; + name: string; + nsfwLevel: GuildNSFWContentLevel; + ownerId: string | null; + preferredLocale: string; + premiumProgressBarEnabled: boolean; + premiumSubscriberCount: number; + premiumTier: BoostedGuildTiers; + publicUpdatesChannelId: string | null; + rulesChannelId: string | null; + safetyAlertsChannelId: string | null; + splash: string | null; + systemChannelFlags: SystemChannelFlags; + systemChannelId: string | null; + vanityURLCode: string | null; + verificationLevel: VerificationLevels; } type GuildStoreAction = ExtractAction; @@ -491,14 +813,14 @@ type GuildStoreAction = ExtractAction extends FluxStore { static displayName: "GuildStore"; - getAllGuildsRoles(): Record>; - getGeoRestrictedGuilds(): Record; - getGuild(guildId?: string | Nullish): GuildRecord; + getAllGuildsRoles(): { [guildId: string]: { [roleId: string]: Role; }; }; + getGeoRestrictedGuilds(): { [guildId: string]: GuildRecord; }; + getGuild(guildId?: string | Nullish): GuildRecord | undefined; getGuildCount(): number; getGuildIds(): string[]; - getGuilds(): Record; - getRole(guildId: string, roleId: string): Role; - getRoles(guildId: string): Record; + getGuilds(): { [guildId: string]: GuildRecord; }; + getRole(guildId: string, roleId: string): Role | undefined; + getRoles(guildId: string): { [roleId: string]: Role; }; isLoaded(): boolean; } @@ -515,7 +837,7 @@ export const enum ApplicationFlags { GATEWAY_MESSAGE_CONTENT_LIMITED = 1 << 19, EMBEDDED_FIRST_PARTY = 1 << 20, APPLICATION_COMMAND_BADGE = 1 << 23, - SOCIAL_LAYER_INTEGRATION = 1 << 27 + SOCIAL_LAYER_INTEGRATION = 1 << 27, } export const enum OAuth2Scopes { @@ -556,14 +878,23 @@ export const enum OAuth2Scopes { RPC_VOICE_READ = "rpc.voice.read", RPC_VOICE_WRITE = "rpc.voice.write", VOICE = "voice", - WEBHOOK_INCOMING = "webhook.incoming" + WEBHOOK_INCOMING = "webhook.incoming", } export const enum ApplicationIntegrationType { GUILD_INSTALL = 0, - USER_INSTALL = 1 + USER_INSTALL = 1, } +interface ProfileBadge { + description: string; + icon: string; + id: string; + link?: string; +} + +type ProfileThemeColors = [primaryColor: number, accentColor: number]; + interface UserProfileFetchFailed { accentColor: null; application: null; @@ -596,12 +927,7 @@ interface UserProfileFetchSucceeded { } | null; accentColor: number | Nullish; applicationRoleConnections: any[]; // TEMP - badges: { - description: string; - icon: string; - id: string; - link?: string; - }[]; + badges: ProfileBadge[]; banner: string | Nullish; bio: string; connectedAccounts: { @@ -620,7 +946,7 @@ interface UserProfileFetchSucceeded { profileEffectId: string | undefined; profileFetchFailed: false; pronouns: string; - themeColors: [primaryColor: number, accentColor: number] | Nullish; + themeColors: ProfileThemeColors | Nullish; userId: string; } @@ -629,6 +955,19 @@ export type UserProfile = FetchFailed ext : UserProfileFetchSucceeded; +export interface GuildMemberProfile { + accentColor: number | Nullish; + badges: ProfileBadge[]; + banner: string | Nullish; + bio: string | undefined; + guildId: string; + popoutAnimationParticleType: Nullish; // TEMP + profileEffectId: string | undefined; + pronouns: string; + themeColors: ProfileThemeColors | Nullish; + userId: string; +} + export const enum StatusTypes { DND = "dnd", IDLE = "idle", @@ -636,7 +975,7 @@ export const enum StatusTypes { OFFLINE = "offline", ONLINE = "online", STREAMING = "streaming", - UNKNOWN = "unknown" + UNKNOWN = "unknown", } interface UserProfileStoreSnapshotData { @@ -651,18 +990,18 @@ export class UserProfileStore extends FluxSnapshotStore(userId: string): UserProfile | undefined; - getGuildMemberProfile(userId: string, guildId?: string | Nullish): Record /* | Nullish */; // TEMP + getGuildMemberProfile(userId: string, guildId?: string | Nullish): GuildMemberProfile | Nullish; getIsAccessibilityTooltipViewed(): boolean; getMutualFriends(userId: string): { key: string; // userId status: StatusTypes; user: UserRecord; - }[]; - getMutualFriendsCount(userId: string): number; + }[] | undefined; + getMutualFriendsCount(userId: string): number | undefined; getMutualGuilds(userId: string): { - guild: Record; // TEMP + guild: GuildRecord; nick: string | null; - }[]; + }[] | undefined; isFetchingFriends(userId: string): boolean; isFetchingProfile(userId: string): boolean; get isSubmitting(): boolean; @@ -698,9 +1037,9 @@ export const enum UserFlags { } export const enum PremiumTypes { - TIER_1 = 1, - TIER_2 = 2, - TIER_0 = 3 + TIER_1 = 1, // Nitro Classic + TIER_2 = 2, // Nitro + TIER_0 = 3, // Nitro Basic } type UserRecordOwnProperties = Pick; @@ -708,7 +1047,7 @@ type UserRecordOwnProperties = Pick extends ImmutableRecord { - constructor(userFromServer: APIUser); + constructor(userFromServer: Record); // TEMP addGuildAvatarHash(guildId: string, avatarHash: string): this; get avatarDecoration(): AvatarDecorationData | null; @@ -722,7 +1061,7 @@ export class UserRecord< guildId?: string | Nullish, canAnimate?: boolean | undefined, avatarSize?: number | undefined - ): { uri: string; }; + ): IconSource; getAvatarURL( guildId?: string | Nullish, avatarSize?: number | undefined, @@ -745,25 +1084,20 @@ export class UserRecord< isPomelo(): boolean; isSystemUser(): boolean; isVerifiedBot(): boolean; - removeGuildAvatarHash(guildId: string): UserRecord; + removeGuildAvatarHash(guildId: string): this; get tag(): string; avatar: string | null; avatarDecorationData: AvatarDecorationData | null; banner: string | Nullish; bot: boolean; - clan: { - badge: string | Nullish; - identityEnabled: boolean | undefined; - identityGuildId: string | Nullish; - tag: string | Nullish; - } | null; + clan: Clan | null; desktop: boolean; discriminator: string; email: string | null; flags: UserFlags; globalName: string | Nullish; - guildMemberAvatars: Record; + guildMemberAvatars: { [guildId: string]: string; }; hasAnyStaffLevel: () => boolean; hasBouncedEmail: boolean; hasFlag: (flag: number) => boolean; @@ -775,7 +1109,7 @@ export class UserRecord< nsfwAllowed: boolean; personalConnectionId: string | null; phone: string | null; - premiumType: PremiumTypes | Nullish; // discord seems to have recently made it so that premiumType is nullish for every UserRecord + premiumType: PremiumTypes | Nullish; // discord seems to have recently made it so that premiumType is undefined for every UserRecord except for that of the current user premiumUsageFlags: number; publicFlags: UserFlags; purchasedFlags: number; @@ -794,12 +1128,13 @@ export class UserStore extends FluxSnapshotStore any, sort?: boolean | undefined): UserRecord[]; + filter(predicate: (user: UserRecord) => user is T, sort?: boolean | undefined): T[]; + filter(predicate: (user: UserRecord) => unknown, sort?: boolean | undefined): UserRecord[]; findByTag(username: string, discriminator?: string | Nullish): UserRecord | undefined; - forEach(callback: (user: UserRecord) => void): void; - getCurrentUser(): UserRecord | Nullish; // returns undefined if called before the first USER_UPDATE action for the current user. discord seems to always check != null too - getUser(userId: string): UserRecord | Nullish; - getUsers(): Record; + forEach(callback: (user: UserRecord) => boolean | void): void; + getCurrentUser(): UserRecord | undefined; // returns undefined if called before the first USER_UPDATE action for the current user. discord seems to always check != null too + getUser(userId?: string | Nullish): UserRecord | undefined; + getUsers(): { [userId: string]: UserRecord; }; getUserStoreVersion(): number; handleLoadCache(cache: { initialGuildChannels: any[]; // TEMP From 619d1b163ad1a0cb302df4e74d23a5bb60fb9fa3 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Tue, 21 May 2024 17:49:18 -0400 Subject: [PATCH 007/126] Progress --- src/webpack/common/stores.ts | 2 +- src/webpack/common/types/stores.d.ts | 574 ++++++++++++++++++++++----- src/webpack/common/types/utils.d.ts | 4 +- src/webpack/common/utils.ts | 2 +- 4 files changed, 481 insertions(+), 101 deletions(-) diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index 47ff3ed97..383b18a0e 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -33,7 +33,7 @@ export let MessageStore: Omit & { getMessages(chanId: string): any; }; -// this is not actually a FluxStore +// Original name: ChannelActionCreators, this is not actually a FluxStore export const PrivateChannelsStore = findByPropsLazy("openPrivateChannel"); export let PermissionStore: GenericStore; export let GuildChannelStore: GenericStore; diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index 0d3cf47f4..152359092 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -18,6 +18,8 @@ import type { ExcludeAction, ExtractAction, FluxAction, FluxActionHandlerMap, FluxDispatchBand, FluxDispatcher } from "./utils"; +type Defined = Exclude; + type Nullish = null | undefined; type FluxChangeListener = () => boolean; @@ -196,6 +198,17 @@ export const enum Permissions { } */ +export const enum FormLayout { + DEFAULT = 0, + LIST = 1, + GRID = 2, +} + +export const enum ThreadSortOrder { + LATEST_ACTIVITY = 0, + CREATION_DATE = 1, +} + export const enum ChannelFlags { GUILD_FEED_REMOVED = 1 << 0, PINNED = 1 << 1, @@ -213,6 +226,33 @@ export const enum ChannelFlags { IS_JOIN_REQUEST_INTERVIEW_CHANNEL = 1 << 16, } +export const enum ThreadMemberFlags { + HAS_INTERACTED = 1 << 0, + ALL_MESSAGES = 1 << 1, + ONLY_MENTIONS = 1 << 2, + NO_MESSAGES = 1 << 3, +} + +export const enum PermissionOverwriteType { + ROLE = 0, + MEMBER = 1, +} + +interface PermissionOverwrites { + [roleIdOrUserId: string]: { + allow: /* Permissions */ bigint; + deny: /* Permissions */ bigint; + id: string; + type: PermissionOverwriteType; + }; +} + +export const enum SafetyWarningTypes { + STRANGER_DANGER = 1, + INAPPROPRIATE_CONVERSATION_TIER_1 = 2, + INAPPROPRIATE_CONVERSATION_TIER_2 = 3, +} + export const enum ChannelTypes { GUILD_TEXT = 0, DM = 1, @@ -231,22 +271,18 @@ export const enum ChannelTypes { UNKNOWN = 10_000, } -export const enum FormLayout { - DEFAULT = 0, - LIST = 1, - GRID = 2, +export const enum VideoQualityMode { + AUTO = 1, + FULL = 2, } -export const enum ThreadSortOrder { - LATEST_ACTIVITY = 0, - CREATION_DATE = 1, -} +type ChannelRecordOwnKeys = "application_id" | "appliedTags" | "availableTags" | "bitrate_" | "defaultAutoArchiveDuration" | "defaultForumLayout" | "defaultReactionEmoji" | "defaultSortOrder" | "defaultThreadRateLimitPerUser" | "flags_" | "guild_id" | "icon" | "iconEmoji" | "id" | "isMessageRequest" | "isMessageRequestTimestamp" | "isSpam" | "lastMessageId" | "lastPinTimestamp" | "member" | "memberCount" | "memberIdsPreview" | "memberListId" | "messageCount" | "name" | "nicks" | "nsfw_" | "originChannelId" | "ownerId" | "parentChannelThreadType" | "parent_id" | "permissionOverwrites_" | "position_" | "rateLimitPerUser_" | "rawRecipients" | "recipients" | "rtcRegion" | "safetyWarnings" | "template" | "themeColor" | "threadMetadata" | "topic_" | "totalMessageSent" | "type" | "userLimit_" | "version" | "videoQualityMode"; -type ChannelRecordBaseOwnProperties = Pick; +type ChannelRecordOwnProperties = Pick; // does not extend ImmutableRecord -export class ChannelRecordBase { - constructor(channelFromServer: Record); // TEMP +export abstract class ChannelRecordBase { + constructor(channelProperties: Record); // TEMP get accessPermissions(): /* Permissions */ bigint; get bitrate(): number; @@ -255,124 +291,468 @@ export class ChannelRecordBase; + isArchivedLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isArchivedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 isBroadcastChannel(): boolean; - isCategory(): boolean; - isDM(): boolean; - isDirectory(): boolean; - isForumChannel(): boolean; - isForumLikeChannel(): boolean; - isForumPost(): boolean; - isGroupDM(): boolean; - isGuildStageVoice(): boolean; - isGuildVocal(): boolean; - isGuildVocalOrThread(): boolean; - isGuildVoice(): boolean; - isListenModeCapable(): boolean; - isLockedThread(): boolean; + isCategory(): this is GuildCategoryChannelRecord; + isDM(): this is DMChannelRecord; + isDirectory(): this is GuildDirectoryChannelRecord; + isForumChannel(): this is ForumChannelRecord; + isForumLikeChannel(): this is ForumChannelRecord; + isForumPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isGroupDM(): this is GroupDMChannelRecord; + isGuildStageVoice(): this is GuildStageVoiceChannelRecord; + isGuildVocal(): this is GuildVocalChannelRecord; + isGuildVocalOrThread(): this is GuildVocalChannelRecord | ThreadChannelRecord; + isGuildVoice(): this is GuildVoiceChannelRecord; + isListenModeCapable(): this is GuildStageVoiceChannelRecord; + isLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 isManaged(): boolean; - isMediaChannel(): boolean; - isMediaPost(): boolean; - isMultiUserDM(): boolean; + isMediaChannel(): this is ForumChannelRecord; + isMediaPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isMultiUserDM(): this is GroupDMChannelRecord; isNSFW(): boolean; isOwner(userId: string): boolean; - isPrivate(): boolean; + isPrivate(): this is PrivateChannelRecord; isRoleSubscriptionTemplatePreviewChannel(): boolean; isScheduledForDeletion(): boolean; isSystemDM(): boolean; - isThread(): boolean; - isVocal(): boolean; - isVocalThread(): boolean; - merge(collection: Partial): this; + isThread(): this is ThreadChannelRecord; + isVocal(): this is PrivateChannelRecord | GuildVocalChannelRecord | ThreadChannelRecord; + isVocalThread(): this is ThreadChannelRecord; + merge(collection: Partial>): this; get nsfw(): boolean; - get permissionOverwrites(): Record; // TEMP + get permissionOverwrites(): PermissionOverwrites; get position(): number; get rateLimitPerUser(): number; - set(key: Key, value: OwnProperties[Key]): this; - toJS(): OwnProperties; + set(key: Key, value: ChannelRecordOwnProperties[Key]): this; + toJS(): ChannelRecordOwnProperties; get topic(): string; get userLimit(): number; - application_id: undefined; // TEMP - appliedTags: undefined; // TEMP - availableTags: undefined; // TEMP - bitrate_: undefined; // TEMP - defaultAutoArchiveDuration: undefined; // TEMP - defaultForumLayout: undefined; // TEMP - defaultReactionEmoji: undefined; // TEMP - defaultSortOrder: undefined; // TEMP - defaultThreadRateLimitPerUser: undefined; // TEMP - flags_: undefined; // TEMP + application_id?: string | undefined; + appliedTags?: string[] | undefined; + availableTags?: { + id: string; + emojiId: string | null; + emojiName: string | null; + moderated: boolean; + name: string; + }[] | undefined; + bitrate_?: number | undefined; + defaultAutoArchiveDuration?: number | undefined; + defaultForumLayout?: FormLayout | undefined; + defaultReactionEmoji?: { + emojiId: string | null; + emojiName: string | null; + } | undefined; + defaultSortOrder?: ThreadSortOrder | Nullish; + defaultThreadRateLimitPerUser?: number | undefined; + flags_: ChannelFlags; guild_id: string | null; - icon: undefined; // TEMP - iconEmoji: undefined; // TEMP + icon?: string | Nullish; + iconEmoji?: { + id: string | null; + name: string; + } | undefined; id: string; - isMessageRequest: undefined; // TEMP - isMessageRequestTimestamp: undefined; // TEMP - isSpam: undefined; // TEMP - lastMessageId: undefined; // TEMP - lastPinTimestamp: undefined; // TEMP - member: undefined; // TEMP - memberCount: undefined; // TEMP - memberIdsPreview: undefined; // TEMP - memberListId: undefined; // TEMP - messageCount: undefined; // TEMP + isMessageRequest?: boolean | undefined; + isMessageRequestTimestamp?: string | Nullish; + isSpam?: boolean | undefined; + lastMessageId: string | Nullish; + lastPinTimestamp: string | Nullish; + member?: { + flags: ThreadMemberFlags; + joinTimestamp: string; + muteConfig: { + end_time: string | null; + selected_time_window: number; + } | null; + muted: boolean; + } | undefined; + memberCount?: number | undefined; + memberIdsPreview?: string[] | undefined; + memberListId?: string | Nullish; + messageCount?: number | undefined; name: string; - nicks: undefined; // TEMP - nsfw_: undefined; // TEMP - originChannelId: undefined; // TEMP - ownerId: undefined; // TEMP - parentChannelThreadType: undefined; // TEMP - parent_id: undefined; // TEMP - permissionOverwrites_: undefined; // TEMP - position_: undefined; // TEMP - rateLimitPerUser_: undefined; // TEMP - rawRecipients: undefined; // TEMP - recipients: undefined; // TEMP - rtcRegion: undefined; // TEMP - safetyWarnings: undefined; // TEMP - template: undefined; // TEMP - themeColor: undefined; // TEMP - threadMetadata: undefined; // TEMP - topic_: undefined; // TEMP - totalMessageSent: undefined; // TEMP + nicks?: { [userId: string]: string; } | undefined; + nsfw_?: boolean | undefined; + originChannelId?: string | Nullish; + ownerId?: string | undefined; + parent_id?: string | Nullish; + parentChannelThreadType?: ChannelTypes.GUILD_TEXT | ChannelTypes.GUILD_ANNOUNCEMENT | ChannelTypes.GUILD_FORUM | ChannelTypes.GUILD_MEDIA | undefined; + permissionOverwrites_?: PermissionOverwrites | undefined; + position_?: number | undefined; + rateLimitPerUser_?: number | undefined; + rawRecipients?: Record[] | undefined; // TEMP + recipients?: string[] | undefined; + rtcRegion?: string | Nullish; + safetyWarnings?: { + type: SafetyWarningTypes; + dismiss_timestamp: string | undefined; // TEMP + }[] | undefined; // TEMP + template?: string | undefined; + themeColor?: number | Nullish; + threadMetadata?: { + archived: boolean; + archiveTimestamp: string; + autoArchiveDuration: number; + createTimestamp: string | Nullish; + invitable: boolean; + locked: boolean; + } | undefined; + topic_?: string | Nullish; + totalMessageSent?: number | undefined; type: ChannelTypes; - userLimit_: undefined; // TEMP - version: undefined; // TEMP - videoQualityMode: undefined; // TEMP + userLimit_?: number | undefined; + version?: number | undefined; + videoQualityMode?: VideoQualityMode | undefined; } +export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildTextualChannelRecord; // TEMP + + application_id: undefined; + appliedTags?: undefined; + availableTags?: undefined; + bitrate_?: undefined; + defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; + defaultForumLayout?: undefined; + defaultReactionEmoji?: undefined; + defaultSortOrder?: undefined; + defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; + icon?: undefined; + iconEmoji: Defined; + isMessageRequest?: undefined; + isMessageRequestTimestamp?: undefined; + isSpam?: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; + member?: undefined; + memberCount?: undefined; + memberIdsPreview?: undefined; + memberListId: ChannelRecordBase["memberListId"]; + messageCount?: undefined; + nicks?: undefined; + nsfw_: Defined; + originChannelId?: undefined; + ownerId?: undefined; + parent_id: ChannelRecordBase["parent_id"]; + parentChannelThreadType?: undefined; + permissionOverwrites_: Defined; + position_: Defined; + rateLimitPerUser_: Defined; + rawRecipients?: undefined; + recipients?: undefined; + rtcRegion?: undefined; + safetyWarnings?: undefined; + template?: undefined; + themeColor: ChannelRecordBase["themeColor"]; + threadMetadata?: undefined; + topic_: ChannelRecordBase["topic_"]; + totalMessageSent?: undefined; + type: ChannelTypes.GUILD_TEXT | ChannelTypes.GUILD_CATEGORY | ChannelTypes.GUILD_ANNOUNCEMENT | ChannelTypes.GUILD_STORE | ChannelTypes.GUILD_DIRECTORY; + userLimit_?: undefined; + version: ChannelRecordBase["version"]; + videoQualityMode?: undefined; +} + +export class GuildTextChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelTypes.GUILD_TEXT; +} // TEMP + +export class GuildCategoryChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelTypes.GUILD_CATEGORY; +} // TEMP + +export class GuildAnnouncementChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelTypes.GUILD_ANNOUNCEMENT; +} // TEMP + +export class GuildStoreChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelTypes.GUILD_STORE; +} // TEMP + +export class GuildDirectoryChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelTypes.GUILD_DIRECTORY; +} // TEMP + +export type GuildTextualChannelRecord = GuildTextChannelRecord | GuildCategoryChannelRecord | GuildAnnouncementChannelRecord | GuildStoreChannelRecord | GuildDirectoryChannelRecord; + +export abstract class PrivateChannelRecordBase extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record): PrivateChannelRecord; // TEMP + static sortRecipients(recipients: Record[] | Nullish, channelId: string): string[]; // TEMP + + addRecipient(recipientUserId: string, nickname: string | undefined, currentUserId: string): this; + getRecipientId(): string | undefined; + removeRecipient(recipientUserId: string): this; + + application_id: ChannelRecordBase["application_id"]; + appliedTags?: undefined; + availableTags?: undefined; + bitrate_?: undefined; + defaultAutoArchiveDuration?: undefined; + defaultForumLayout?: undefined; + defaultReactionEmoji?: undefined; + defaultSortOrder?: undefined; + defaultThreadRateLimitPerUser?: undefined; + icon: ChannelRecordBase["icon"]; + iconEmoji?: undefined; + isMessageRequest: ChannelRecordBase["isMessageRequest"]; + isMessageRequestTimestamp: ChannelRecordBase["isMessageRequestTimestamp"]; + isSpam: Defined; + lastMessageId: Defined; + lastPinTimestamp: undefined; + member?: undefined; + memberCount?: undefined; + memberIdsPreview?: undefined; + memberListId?: undefined; + messageCount?: undefined; + nicks: Defined; + nsfw_?: undefined; + originChannelId?: undefined; + ownerId: ChannelRecordBase["ownerId"]; + parent_id?: undefined; + parentChannelThreadType?: undefined; + permissionOverwrites_?: undefined; + position_?: undefined; + rateLimitPerUser_?: undefined; + rawRecipients: Defined; + recipients: Defined; + rtcRegion?: undefined; + safetyWarnings: ChannelRecordBase["safetyWarnings"]; + template?: undefined; + themeColor?: undefined; + threadMetadata?: undefined; + topic_?: undefined; + totalMessageSent?: undefined; + type: ChannelTypes.DM | ChannelTypes.GROUP_DM; + userLimit_?: undefined; + version?: undefined; + videoQualityMode?: undefined; +} + +export class DMChannelRecord extends PrivateChannelRecordBase { + type: ChannelTypes.DM; +} // TEMP + +export class GroupDMChannelRecord extends PrivateChannelRecordBase{ + application_id: ChannelRecordBase["application_id"]; + type: ChannelTypes.GROUP_DM; +} // TEMP + +export type PrivateChannelRecord = DMChannelRecord | GroupDMChannelRecord; + +export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildVocalChannelRecord; // TEMP + + application_id: undefined; + appliedTags?: undefined; + availableTags?: undefined; + bitrate_: Defined; + defaultAutoArchiveDuration?: undefined; + defaultForumLayout?: undefined; + defaultReactionEmoji?: undefined; + defaultSortOrder?: undefined; + defaultThreadRateLimitPerUser?: undefined; + icon?: undefined; + iconEmoji: Defined; + isMessageRequest?: undefined; + isMessageRequestTimestamp?: undefined; + isSpam?: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: undefined; + member?: undefined; + memberCount?: undefined; + memberIdsPreview?: undefined; + memberListId: ChannelRecordBase["memberListId"]; // TEMP + messageCount?: undefined; + nicks?: undefined; + nsfw_: Defined; + originChannelId: ChannelRecordBase["originChannelId"]; // TEMP + ownerId?: undefined; + parent_id: ChannelRecordBase["parent_id"]; + parentChannelThreadType?: undefined; + permissionOverwrites_: Defined; + position_: Defined; + rateLimitPerUser_: Defined; + rawRecipients?: undefined; + recipients?: undefined; + rtcRegion: Defined; + safetyWarnings?: undefined; + template?: undefined; + themeColor: Nullish; // TEMP + threadMetadata?: undefined; + topic_: Nullish; + totalMessageSent?: undefined; + type: ChannelTypes.GUILD_VOICE | ChannelTypes.GUILD_STAGE_VOICE; + userLimit_: Defined; + version: ChannelRecordBase["version"]; + videoQualityMode: ChannelRecordBase["videoQualityMode"]; +} + +export class GuildVoiceChannelRecord extends GuildVocalChannelRecordBase { + type: ChannelTypes.GUILD_VOICE; +} // TEMP + +export class GuildStageVoiceChannelRecord extends GuildVocalChannelRecordBase { + type: ChannelTypes.GUILD_STAGE_VOICE; +} // TEMP + +export type GuildVocalChannelRecord = GuildVoiceChannelRecord | GuildStageVoiceChannelRecord; + +type ThreadChannelType = ChannelTypes.ANNOUNCEMENT_THREAD | ChannelTypes.PUBLIC_THREAD | ChannelTypes.PRIVATE_THREAD; + +export class ThreadChannelRecord extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): ThreadChannelRecord; // TEMP + + application_id?: undefined; + appliedTags: Defined; + availableTags?: undefined; + bitrate_: undefined; + defaultAutoArchiveDuration?: undefined; + defaultForumLayout?: undefined; + defaultReactionEmoji?: undefined; + defaultSortOrder?: undefined; + defaultThreadRateLimitPerUser?: undefined; + icon?: undefined; + iconEmoji?: undefined; + isMessageRequest?: undefined; + isMessageRequestTimestamp?: undefined; + isSpam?: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastMessageId"]; + member: ChannelRecordBase["member"]; + memberCount: Defined; + memberIdsPreview: Defined; + memberListId?: undefined; + messageCount: Defined; + nicks?: undefined; + nsfw_: Defined; + originChannelId?: undefined; + ownerId: Defined; + parentChannelThreadType: Defined; + parent_id: NonNullable; + permissionOverwrites_?: undefined; + position_?: undefined; + rateLimitPerUser_: Defined; + rawRecipients?: undefined; + recipients?: undefined; + rtcRegion: undefined; + safetyWarnings?: undefined; + template?: undefined; + themeColor?: undefined; + threadMetadata: ChannelRecordBase["threadMetadata"]; + topic_?: undefined; + totalMessageSent: ChannelRecordBase["rateLimitPerUser_"]; + type: ChannelType; + userLimit_: undefined; + version?: undefined; + videoQualityMode: undefined; +} + +type ForumChannelType = ChannelTypes.GUILD_FORUM | ChannelTypes.GUILD_MEDIA; + +export class ForumChannelRecord extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): ForumChannelRecord; // TEMP + + application_id?: undefined; + appliedTags?: undefined; + availableTags: Defined; + bitrate_?: undefined; + defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; + defaultForumLayout: ChannelRecordBase["defaultForumLayout"]; + defaultReactionEmoji: ChannelRecordBase["defaultReactionEmoji"]; + defaultSortOrder: ChannelRecordBase["defaultSortOrder"]; + defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; + icon?: undefined; + iconEmoji: ChannelRecordBase["iconEmoji"]; + isMessageRequest?: undefined; + isMessageRequestTimestamp?: undefined; + isSpam?: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; + member?: undefined; + memberCount?: undefined; + memberIdsPreview?: undefined; + memberListId: ChannelRecordBase["memberListId"]; // TEMP + messageCount?: undefined; + nicks?: undefined; + nsfw_: Defined; + originChannelId?: undefined; + ownerId?: undefined; + parentChannelThreadType?: undefined; + parent_id: NonNullable; + permissionOverwrites_: Defined; + position_: Defined; + rateLimitPerUser_: Defined; + rawRecipients?: undefined; + recipients?: undefined; + rtcRegion?: undefined; + safetyWarnings?: undefined; + template: Defined; + themeColor: ChannelRecordBase["themeColor"]; + threadMetadata?: undefined; + topic_: ChannelRecordBase["topic_"]; + totalMessageSent?: undefined; + type: ChannelType; + userLimit_?: undefined; + version: ChannelRecordBase["version"]; + videoQualityMode?: undefined; +} + +export class UnknownChannelRecord extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): UnknownChannelRecord; // TEMP + + type: ChannelTypes.UNKNOWN; +} // TEMP + +export type GuildChannelRecord = GuildTextualChannelRecord | GuildVocalChannelRecord | ForumChannelRecord; + +export type ChannelRecord = GuildChannelRecord | PrivateChannelRecord | ThreadChannelRecord | UnknownChannelRecord; + type ChannelStoreAction = ExtractAction; export class ChannelStore extends FluxStore { static displayName: "ChannelStore"; - getAllThreadsForParent(channelId: string): ; // TEMP - getBasicChannel(channelId?: string | Nullish): ; // TEMP - getChannel(channelId?: string | Nullish): ; // TEMP + getAllThreadsForParent(channelId: string): ThreadChannelRecord[]; + getBasicChannel(channelId?: string | Nullish): ChannelRecord | null; // TEMP + getChannel(channelId?: string | Nullish): ChannelRecord | undefined; getChannelIds(guildId?: string | Nullish): string[]; getDebugInfo(): { - loadedGuildIds: any[]; // TEMP + loadedGuildIds: string[]; pendingGuildLoads: any[]; // TEMP guildSizes: string[]; }; - getDMFromUserId(userId?: string | Nullish): ; // TEMP + getDMFromUserId(userId?: string | Nullish): string | undefined; getDMUserIds(): string[]; - getGuildChannelsVersion(guildId: string): number; // TEMP - getInitialOverlayState(): ; // TEMP - getMutableBasicGuildChannelsForGuild(guildId: string): ; // TEMP - getMutableDMsByUserIds(): ; // TEMP - getMutableGuildChannelsForGuild(guildId: string): ; // TEMP - getMutablePrivateChannels(): ; // TEMP + getGuildChannelsVersion(guildId: string): number; + getInitialOverlayState(): { [channelId: string]: ChannelRecord; }; + getMutableBasicGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; } | undefined; // TEMP + getMutableDMsByUserIds(): { [userId: string]: string; }; + getMutableGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; } | undefined; + getMutablePrivateChannels(): { [channelId: string]: PrivateChannelRecord; }; getPrivateChannelsVersion(): number; - getSortedPrivateChannels(): ; // TEMP + getSortedPrivateChannels(): PrivateChannelRecord[]; hasChannel(channelId: string): boolean; - loadAllGuildAndPrivateChannelsFromDisk(): ; // TEMP + loadAllGuildAndPrivateChannelsFromDisk(): { [channelId: string]: GuildChannelRecord | PrivateChannelRecord; }; } export interface DraftObject { diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 981c49cff..4c6e2b291 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -274,7 +274,7 @@ interface RestRequestData { export type RestAPI = Record<"delete" | "get" | "patch" | "post" | "put", (data: RestRequestData) => Promise>; -export type Permissions = "CREATE_INSTANT_INVITE" +export type PermissionKeys = "CREATE_INSTANT_INVITE" | "KICK_MEMBERS" | "BAN_MEMBERS" | "ADMINISTRATOR" @@ -322,7 +322,7 @@ export type Permissions = "CREATE_INSTANT_INVITE" | "MANAGE_EVENTS" | "CREATE_EVENTS"; -export type PermissionsBits = Record; +export type Permissions = Record; export interface Locale { name: string; diff --git a/src/webpack/common/utils.ts b/src/webpack/common/utils.ts index 72a71f31c..83d55cf51 100644 --- a/src/webpack/common/utils.ts +++ b/src/webpack/common/utils.ts @@ -136,7 +136,7 @@ export const NavigationRouter: t.NavigationRouter = findByPropsLazy("transitionT export let SettingsRouter: any; waitFor(["open", "saveAccountChanges"], m => SettingsRouter = m); -export const { Permissions: PermissionsBits } = findLazy(m => typeof m.Permissions?.ADMINISTRATOR === "bigint") as { Permissions: t.PermissionsBits; }; +export const { Permissions: PermissionsBits } = findLazy(m => typeof m.Permissions?.ADMINISTRATOR === "bigint") as { Permissions: t.Permissions; }; export const zustandCreate = findByCodeLazy("will be removed in v4"); From 8821d78e5072d3d27d231d18594e235984cfc382 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Fri, 24 May 2024 03:41:22 -0400 Subject: [PATCH 008/126] Progress --- src/webpack/common/types/stores.d.ts | 82 +++++++++++++++++++--------- src/webpack/common/types/utils.d.ts | 10 ++-- 2 files changed, 62 insertions(+), 30 deletions(-) diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index 152359092..de5723727 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -38,7 +38,7 @@ declare class FluxChangeListeners { remove: (listener: FluxChangeListener) => void; } -export class FluxStore { +export abstract class FluxStore { constructor( dispatcher: FluxDispatcher, actionHandlers: FluxActionHandlerMap, @@ -88,7 +88,9 @@ export class FluxStore { removeReactChangeListener: FluxChangeListeners["remove"]; } -interface GenericConstructor { new (...args: any[]): any } +interface GenericConstructor { + new (...args: any[]): any; +} interface FluxSnapshot { data: SnapshotData; @@ -97,7 +99,7 @@ interface FluxSnapshot { type FluxSnapshotStoreAction = ExcludeAction; -export class FluxSnapshotStore< +export abstract class FluxSnapshotStore< Constructor extends GenericConstructor = GenericConstructor, SnapshotData = any, Action extends FluxSnapshotStoreAction = FluxSnapshotStoreAction @@ -113,6 +115,7 @@ export class FluxSnapshotStore< get persistKey(): string; readSnapshot(version: number): SnapshotData | null; save(): void; + abstract takeSnapshot(): FluxSnapshot; } export interface Flux { @@ -276,9 +279,14 @@ export const enum VideoQualityMode { FULL = 2, } -type ChannelRecordOwnKeys = "application_id" | "appliedTags" | "availableTags" | "bitrate_" | "defaultAutoArchiveDuration" | "defaultForumLayout" | "defaultReactionEmoji" | "defaultSortOrder" | "defaultThreadRateLimitPerUser" | "flags_" | "guild_id" | "icon" | "iconEmoji" | "id" | "isMessageRequest" | "isMessageRequestTimestamp" | "isSpam" | "lastMessageId" | "lastPinTimestamp" | "member" | "memberCount" | "memberIdsPreview" | "memberListId" | "messageCount" | "name" | "nicks" | "nsfw_" | "originChannelId" | "ownerId" | "parentChannelThreadType" | "parent_id" | "permissionOverwrites_" | "position_" | "rateLimitPerUser_" | "rawRecipients" | "recipients" | "rtcRegion" | "safetyWarnings" | "template" | "themeColor" | "threadMetadata" | "topic_" | "totalMessageSent" | "type" | "userLimit_" | "version" | "videoQualityMode"; +export const enum VoiceCallBackgroundTypes { + EMPTY = 0, + GRADIENT = 1, +} -type ChannelRecordOwnProperties = Pick; +type ChannelRecordOwnPropertyKeys = "application_id" | "appliedTags" | "availableTags" | "bitrate_" | "defaultAutoArchiveDuration" | "defaultForumLayout" | "defaultReactionEmoji" | "defaultSortOrder" | "defaultThreadRateLimitPerUser" | "flags_" | "guild_id" | "icon" | "iconEmoji" | "id" | "isMessageRequest" | "isMessageRequestTimestamp" | "isSpam" | "lastMessageId" | "lastPinTimestamp" | "member" | "memberCount" | "memberIdsPreview" | "memberListId" | "messageCount" | "name" | "nicks" | "nsfw_" | "originChannelId" | "ownerId" | "parentChannelThreadType" | "parent_id" | "permissionOverwrites_" | "position_" | "rateLimitPerUser_" | "rawRecipients" | "recipients" | "rtcRegion" | "safetyWarnings" | "template" | "themeColor" | "threadMetadata" | "topic_" | "totalMessageSent" | "type" | "userLimit_" | "version" | "videoQualityMode"; + +type ChannelRecordOwnProperties = Pick; // does not extend ImmutableRecord export abstract class ChannelRecordBase { @@ -329,7 +337,7 @@ export abstract class ChannelRecordBase { get permissionOverwrites(): PermissionOverwrites; get position(): number; get rateLimitPerUser(): number; - set(key: Key, value: ChannelRecordOwnProperties[Key]): this; + set(key: Key, value: ChannelRecordOwnProperties[Key]): this; toJS(): ChannelRecordOwnProperties; get topic(): string; get userLimit(): number; @@ -411,6 +419,9 @@ export abstract class ChannelRecordBase { userLimit_?: number | undefined; version?: number | undefined; videoQualityMode?: VideoQualityMode | undefined; + voiceBackgroundDisplay?: { type: VoiceCallBackgroundTypes.EMPTY; } + | { type: VoiceCallBackgroundTypes.GRADIENT; resourceId: string; } + | Nullish; } export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { @@ -461,6 +472,7 @@ export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { userLimit_?: undefined; version: ChannelRecordBase["version"]; videoQualityMode?: undefined; + voiceBackgroundDisplay?: undefined; } export class GuildTextChannelRecord extends GuildTextualChannelRecordBase { @@ -488,7 +500,7 @@ export type GuildTextualChannelRecord = GuildTextChannelRecord | GuildCategoryCh export abstract class PrivateChannelRecordBase extends ChannelRecordBase { constructor(channelProperties: Record); // TEMP - static fromServer(channelFromServer: Record): PrivateChannelRecord; // TEMP + static fromServer(channelFromServer: Record): PrivateChannelRecord; static sortRecipients(recipients: Record[] | Nullish, channelId: string): string[]; // TEMP addRecipient(recipientUserId: string, nickname: string | undefined, currentUserId: string): this; @@ -504,13 +516,14 @@ export abstract class PrivateChannelRecordBase extends ChannelRecordBase { defaultReactionEmoji?: undefined; defaultSortOrder?: undefined; defaultThreadRateLimitPerUser?: undefined; + guild_id: null; icon: ChannelRecordBase["icon"]; iconEmoji?: undefined; isMessageRequest: ChannelRecordBase["isMessageRequest"]; isMessageRequestTimestamp: ChannelRecordBase["isMessageRequestTimestamp"]; isSpam: Defined; - lastMessageId: Defined; - lastPinTimestamp: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; member?: undefined; memberCount?: undefined; memberIdsPreview?: undefined; @@ -538,16 +551,23 @@ export abstract class PrivateChannelRecordBase extends ChannelRecordBase { userLimit_?: undefined; version?: undefined; videoQualityMode?: undefined; + voiceBackgroundDisplay?: undefined; } export class DMChannelRecord extends PrivateChannelRecordBase { + application_id: undefined; + icon: undefined; + name: ""; + ownerId: undefined; type: ChannelTypes.DM; -} // TEMP +} -export class GroupDMChannelRecord extends PrivateChannelRecordBase{ - application_id: ChannelRecordBase["application_id"]; +export class GroupDMChannelRecord extends PrivateChannelRecordBase { + isMessageRequest: undefined; + isMessageRequestTimestamp: undefined; + ownerId: PrivateChannelRecordBase["ownerId"]; type: ChannelTypes.GROUP_DM; -} // TEMP +} export type PrivateChannelRecord = DMChannelRecord | GroupDMChannelRecord; @@ -599,15 +619,16 @@ export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { userLimit_: Defined; version: ChannelRecordBase["version"]; videoQualityMode: ChannelRecordBase["videoQualityMode"]; + voiceBackgroundDisplay: Defined; } export class GuildVoiceChannelRecord extends GuildVocalChannelRecordBase { type: ChannelTypes.GUILD_VOICE; -} // TEMP +} export class GuildStageVoiceChannelRecord extends GuildVocalChannelRecordBase { type: ChannelTypes.GUILD_STAGE_VOICE; -} // TEMP +} export type GuildVocalChannelRecord = GuildVoiceChannelRecord | GuildStageVoiceChannelRecord; @@ -661,11 +682,10 @@ export class ThreadChannelRecord extends ChannelRecordBase { +export abstract class ForumChannelRecordBase extends ChannelRecordBase { constructor(channelProperties: Record); // TEMP static fromServer(channelFromServer: Record, guildId?: string | Nullish): ForumChannelRecord; // TEMP @@ -709,12 +729,23 @@ export class ForumChannelRecord); // TEMP @@ -725,7 +756,7 @@ export class UnknownChannelRecord extends ChannelRecordBase { export type GuildChannelRecord = GuildTextualChannelRecord | GuildVocalChannelRecord | ForumChannelRecord; -export type ChannelRecord = GuildChannelRecord | PrivateChannelRecord | ThreadChannelRecord | UnknownChannelRecord; +export type ChannelRecord = GuildChannelRecord | PrivateChannelRecord | ThreadChannelRecord; type ChannelStoreAction = ExtractAction; @@ -958,7 +989,7 @@ export class GuildMemberStore = FetchFailed ext ? UserProfileFetchFailed : UserProfileFetchSucceeded; - export interface GuildMemberProfile { accentColor: number | Nullish; badges: ProfileBadge[]; @@ -1365,7 +1395,7 @@ interface UserProfileStoreSnapshotData { type UserProfileStoreAction = ExtractAction; -export class UserProfileStore extends FluxSnapshotStore { +export class UserProfileStore extends FluxSnapshotStore { static displayName: "UserProfileStore"; static LATEST_SNAPSHOT_VERSION: number; @@ -1498,7 +1528,9 @@ export class UserRecord< verified: boolean; } -interface UserStoreSnapshotData { users: [UserRecord] | []; } +interface UserStoreSnapshotData { + users: [UserRecord] | []; +} type UserStoreAction = ExtractAction; diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 4c6e2b291..ca819ae65 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -129,7 +129,7 @@ declare class FluxActionLog { constructor(actionType: Action["type"]); get name(): Action["type"]; - toJSON(): Pick, "action" | "createdAt" | "traces"> & { + toJSON(): Pick & { created_at: FluxActionLog["createdAt"]; }; @@ -158,7 +158,7 @@ declare class FluxActionLogger extends EventEmitter { ): FluxActionMetric[]; log( action: Action, - callback: (func: any>(storeName: string, func: T) => ReturnType) => void + callback: (func: (storeName: string, func: () => T) => T) => void ): FluxActionLog; logs: FluxActionLog[]; @@ -172,7 +172,7 @@ declare class FluxActionLogger extends EventEmitter { * the alternative option, allowing plugins to use the main Dispatcher instance, would require removing type information for * Discord's actions from Dispatcher, and would introduce the potential for action type name conflicts. Both of these * options would harm the main use case of these types. Furthermore, there are other state management libraries bundled with - * Discord that plugins can use (e.g., Redux, Zustand), and Discord seems to only use one Dispatcher instance (all ~388 + * Discord that plugins can use (e.g., Redux, Zustand), and Discord seems to only use one Dispatcher instance (all ~398 * stores use the same instance), implying that their type for Dispatcher is also not generic. */ export class FluxDispatcher { @@ -184,8 +184,8 @@ export class FluxDispatcher { _dispatch( action: FluxAction, - func: any>(storeName: string, func: U) => ReturnType - ): false | void; + func: (storeName: string, func: () => T) => T + ): boolean | void; _dispatchWithDevtools(action: FluxAction): void; _dispatchWithLogging(action: FluxAction): void; addDependencies(fromDispatchToken: string, toDispatchTokens: string[]): void; From 5bb416de61810c4f323ff5690f888d92d4feeda6 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Fri, 24 May 2024 03:52:26 -0400 Subject: [PATCH 009/126] Progress --- src/webpack/common/types/stores.d.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index de5723727..165078b94 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -1396,6 +1396,8 @@ interface UserProfileStoreSnapshotData { type UserProfileStoreAction = ExtractAction; export class UserProfileStore extends FluxSnapshotStore { + constructor(); + static displayName: "UserProfileStore"; static LATEST_SNAPSHOT_VERSION: number; From f6c07d1516e6461a302a4f9aff19c9865de798b5 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Fri, 24 May 2024 22:14:25 -0400 Subject: [PATCH 010/126] Progress --- src/webpack/common/stores.ts | 9 +- src/webpack/common/types/fluxActions.d.ts | 2 +- src/webpack/common/types/stores.d.ts | 481 +++++++++++++++++----- src/webpack/common/types/utils.d.ts | 2 +- 4 files changed, 394 insertions(+), 100 deletions(-) diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index 383b18a0e..95307b6c4 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -43,14 +43,11 @@ export let PresenceStore: GenericStore; export let GuildStore: t.GuildStore; export let UserStore: t.UserStore; export let UserProfileStore: t.UserProfileStore; -export let SelectedChannelStore: Stores.SelectedChannelStore & t.FluxStore; -export let SelectedGuildStore: t.FluxStore & Record; +export let SelectedChannelStore: t.SelectedChannelStore; +export let SelectedGuildStore: t.SelectedGuildStore; export let ChannelStore: t.ChannelStore; export let GuildMemberStore: t.GuildMemberStore; -export let RelationshipStore: Stores.RelationshipStore & t.FluxStore & { - /** Get the date (as a string) that the relationship was created */ - getSince(userId: string): string; -}; +export let RelationshipStore: t.RelationshipStore; export let EmojiStore: t.EmojiStore; export let WindowStore: t.WindowStore; diff --git a/src/webpack/common/types/fluxActions.d.ts b/src/webpack/common/types/fluxActions.d.ts index f149a76ff..02d180112 100644 --- a/src/webpack/common/types/fluxActions.d.ts +++ b/src/webpack/common/types/fluxActions.d.ts @@ -54,4 +54,4 @@ export type ExtractAction. */ +import type { SnakeCasedProperties } from "type-fest"; + import type { ExcludeAction, ExtractAction, FluxAction, FluxActionHandlerMap, FluxDispatchBand, FluxDispatcher } from "./utils"; type Defined = Exclude; @@ -54,7 +56,7 @@ export abstract class FluxStore { emitChange(): void; getDispatchToken(): string; getName(): string; - initialize(): void; + initialize(...args: any[]): void; initializeIfNeeded(): void; mustEmitChanges( mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */ @@ -92,6 +94,50 @@ interface GenericConstructor { new (...args: any[]): any; } +export abstract class FluxPersistedStore< + Constructor extends GenericConstructor = GenericConstructor, + State = any, + Action extends FluxAction = FluxAction +> extends FluxStore { + constructor(dispatcher: FluxDispatcher, actionHandlerst: FluxActionHandlerMap); + + static _clearAllPromise: Promise | Nullish; + static _writePromises: Map; // TEMP + static _writeResolvers: Map; // TEMP + static allPersistKeys: Set; + static clearAll(e: any): Promise; // TEMP + static clearPersistQueue(e: any): void; // TEMP + static disableWrite: boolean; + static disableWrites: boolean; + static getAllStates(): Promise; // TEMP + static initializeAll(stateMap: Record): void; // TEMP + static migrateAndReadStoreState(e: any, t: any): { // TEMP + state: any /* | undefined */; // TEMP + requiresPersist: boolean; + }; + static migrations: ((...args: any[]) => any)[] | undefined; + static persistKey: string; // not actually defined on PersistedStore's constructor, but all subclasses are required to have it + static shouldClear(e: any, t: any): boolean; // TEMP + static throttleDelay: number; + static userAgnosticPersistKeys: Set; + + asyncPersist(): Promise; + clear(): void; + getClass(): Constructor; + abstract getState(): State; // TEMP + abstract initialize(state: State): void; // TEMP + initializeFromState(state: State): void; // TEMP + persist(): void; + + _version: number; + callback: (callback: () => void) => void; + throttledCallback: { + (callback: () => void): () => void; + cancel: () => void; + flush: () => () => void; + }; +} + interface FluxSnapshot { data: SnapshotData; version: number; @@ -201,6 +247,14 @@ export const enum Permissions { } */ +export interface ForumTag { + id: string; + emojiId: string | null; + emojiName: string | null; + moderated: boolean; + name: string; +} + export const enum FormLayout { DEFAULT = 0, LIST = 1, @@ -236,18 +290,43 @@ export const enum ThreadMemberFlags { NO_MESSAGES = 1 << 3, } +export interface ChannelMember { + flags: ThreadMemberFlags; + joinTimestamp: string; + muteConfig: { + end_time: string | null; + selected_time_window: number; + } | null; + muted: boolean; +} + export const enum PermissionOverwriteType { ROLE = 0, MEMBER = 1, } -interface PermissionOverwrites { - [roleIdOrUserId: string]: { - allow: /* Permissions */ bigint; - deny: /* Permissions */ bigint; - id: string; - type: PermissionOverwriteType; - }; +export interface PermissionOverwrite { + allow: /* Permissions */ bigint; + deny: /* Permissions */ bigint; + id: string; + type: PermissionOverwriteType; +} + +interface PermissionOverwriteMap { + [roleIdOrUserId: string]: PermissionOverwrite; +} + +export interface ChannelRecipient { + avatar: string | null; + avatar_decoration_data: SnakeCasedProperties | null; + bot?: boolean; + clan: SnakeCasedProperties | null; + discriminator: string; + display_name?: string | null; + global_name: string | null; + id: string; + public_flags: UserFlags; + username: string; } export const enum SafetyWarningTypes { @@ -256,6 +335,20 @@ export const enum SafetyWarningTypes { INAPPROPRIATE_CONVERSATION_TIER_2 = 3, } +export interface SafetyWarning { + type: SafetyWarningTypes; + dismiss_timestamp?: string | Nullish; // TEMP +} + +export interface ThreadMetadata { + archived: boolean; + archiveTimestamp: string; + autoArchiveDuration: number; + createTimestamp: string | Nullish; + invitable: boolean; + locked: boolean; +} + export const enum ChannelTypes { GUILD_TEXT = 0, DM = 1, @@ -309,8 +402,8 @@ export abstract class ChannelRecordBase { isCategory(): this is GuildCategoryChannelRecord; isDM(): this is DMChannelRecord; isDirectory(): this is GuildDirectoryChannelRecord; - isForumChannel(): this is ForumChannelRecord; - isForumLikeChannel(): this is ForumChannelRecord; + isForumChannel(): this is GuildForumChannelRecord; + isForumLikeChannel(): this is ForumChannelRecord; isForumPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 isGroupDM(): this is GroupDMChannelRecord; isGuildStageVoice(): this is GuildStageVoiceChannelRecord; @@ -320,7 +413,7 @@ export abstract class ChannelRecordBase { isListenModeCapable(): this is GuildStageVoiceChannelRecord; isLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 isManaged(): boolean; - isMediaChannel(): this is ForumChannelRecord; + isMediaChannel(): this is GuildMediaChannelRecord; isMediaPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 isMultiUserDM(): this is GroupDMChannelRecord; isNSFW(): boolean; @@ -334,7 +427,7 @@ export abstract class ChannelRecordBase { isVocalThread(): this is ThreadChannelRecord; merge(collection: Partial>): this; get nsfw(): boolean; - get permissionOverwrites(): PermissionOverwrites; + get permissionOverwrites(): PermissionOverwriteMap; get position(): number; get rateLimitPerUser(): number; set(key: Key, value: ChannelRecordOwnProperties[Key]): this; @@ -344,13 +437,7 @@ export abstract class ChannelRecordBase { application_id?: string | undefined; appliedTags?: string[] | undefined; - availableTags?: { - id: string; - emojiId: string | null; - emojiName: string | null; - moderated: boolean; - name: string; - }[] | undefined; + availableTags?: ForumTag[] | undefined; bitrate_?: number | undefined; defaultAutoArchiveDuration?: number | undefined; defaultForumLayout?: FormLayout | undefined; @@ -373,15 +460,7 @@ export abstract class ChannelRecordBase { isSpam?: boolean | undefined; lastMessageId: string | Nullish; lastPinTimestamp: string | Nullish; - member?: { - flags: ThreadMemberFlags; - joinTimestamp: string; - muteConfig: { - end_time: string | null; - selected_time_window: number; - } | null; - muted: boolean; - } | undefined; + member?: ChannelMember | undefined; memberCount?: number | undefined; memberIdsPreview?: string[] | undefined; memberListId?: string | Nullish; @@ -393,26 +472,16 @@ export abstract class ChannelRecordBase { ownerId?: string | undefined; parent_id?: string | Nullish; parentChannelThreadType?: ChannelTypes.GUILD_TEXT | ChannelTypes.GUILD_ANNOUNCEMENT | ChannelTypes.GUILD_FORUM | ChannelTypes.GUILD_MEDIA | undefined; - permissionOverwrites_?: PermissionOverwrites | undefined; + permissionOverwrites_?: PermissionOverwriteMap | undefined; position_?: number | undefined; rateLimitPerUser_?: number | undefined; - rawRecipients?: Record[] | undefined; // TEMP + rawRecipients?: ChannelRecipient[] | undefined; recipients?: string[] | undefined; rtcRegion?: string | Nullish; - safetyWarnings?: { - type: SafetyWarningTypes; - dismiss_timestamp: string | undefined; // TEMP - }[] | undefined; // TEMP + safetyWarnings?: SafetyWarning[] | undefined; template?: string | undefined; themeColor?: number | Nullish; - threadMetadata?: { - archived: boolean; - archiveTimestamp: string; - autoArchiveDuration: number; - createTimestamp: string | Nullish; - invitable: boolean; - locked: boolean; - } | undefined; + threadMetadata?: ThreadMetadata | undefined; topic_?: string | Nullish; totalMessageSent?: number | undefined; type: ChannelTypes; @@ -439,7 +508,7 @@ export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { defaultSortOrder?: undefined; defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; icon?: undefined; - iconEmoji: Defined; + iconEmoji: ChannelRecordBase["iconEmoji"]; isMessageRequest?: undefined; isMessageRequestTimestamp?: undefined; isSpam?: undefined; @@ -448,7 +517,7 @@ export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { member?: undefined; memberCount?: undefined; memberIdsPreview?: undefined; - memberListId: ChannelRecordBase["memberListId"]; + memberListId: ChannelRecordBase["memberListId"]; // TEMP messageCount?: undefined; nicks?: undefined; nsfw_: Defined; @@ -477,15 +546,23 @@ export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { export class GuildTextChannelRecord extends GuildTextualChannelRecordBase { type: ChannelTypes.GUILD_TEXT; -} // TEMP +} export class GuildCategoryChannelRecord extends GuildTextualChannelRecordBase { + defaultAutoArchiveDuration: undefined; + defaultThreadRateLimitPerUser: undefined; + lastMessageId: undefined; + lastPinTimestamp: undefined; + memberListId: undefined; // TEMP + parent_id: Nullish; + themeColor: undefined; // TEMP + topic_: undefined; type: ChannelTypes.GUILD_CATEGORY; -} // TEMP +} export class GuildAnnouncementChannelRecord extends GuildTextualChannelRecordBase { type: ChannelTypes.GUILD_ANNOUNCEMENT; -} // TEMP +} export class GuildStoreChannelRecord extends GuildTextualChannelRecordBase { type: ChannelTypes.GUILD_STORE; @@ -501,7 +578,7 @@ export abstract class PrivateChannelRecordBase extends ChannelRecordBase { constructor(channelProperties: Record); // TEMP static fromServer(channelFromServer: Record): PrivateChannelRecord; - static sortRecipients(recipients: Record[] | Nullish, channelId: string): string[]; // TEMP + static sortRecipients(recipients: ChannelRecipient[] | Nullish, channelId: string): string[]; addRecipient(recipientUserId: string, nickname: string | undefined, currentUserId: string): this; getRecipientId(): string | undefined; @@ -586,7 +663,7 @@ export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { defaultSortOrder?: undefined; defaultThreadRateLimitPerUser?: undefined; icon?: undefined; - iconEmoji: Defined; + iconEmoji: ChannelRecordBase["iconEmoji"]; isMessageRequest?: undefined; isMessageRequestTimestamp?: undefined; isSpam?: undefined; @@ -751,8 +828,50 @@ export class UnknownChannelRecord extends ChannelRecordBase { static fromServer(channelFromServer: Record, guildId?: string | Nullish): UnknownChannelRecord; // TEMP + application_id: ChannelRecordBase["application_id"]; + appliedTags: ChannelRecordBase["appliedTags"]; + availableTags: ChannelRecordBase["availableTags"]; + bitrate_: ChannelRecordBase["bitrate_"]; + defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; + defaultForumLayout: ChannelRecordBase["defaultForumLayout"]; + defaultReactionEmoji: ChannelRecordBase["defaultReactionEmoji"]; + defaultSortOrder: ChannelRecordBase["defaultSortOrder"]; + defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; + icon: ChannelRecordBase["icon"]; + iconEmoji: ChannelRecordBase["iconEmoji"]; + isMessageRequest: ChannelRecordBase["isMessageRequest"]; + isMessageRequestTimestamp: ChannelRecordBase["isMessageRequestTimestamp"]; + isSpam: ChannelRecordBase["isSpam"]; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; + member: ChannelRecordBase["member"]; + memberCount: ChannelRecordBase["memberCount"]; + memberIdsPreview: ChannelRecordBase["memberIdsPreview"]; + memberListId: ChannelRecordBase["memberListId"]; + messageCount: ChannelRecordBase["messageCount"]; + nicks: ChannelRecordBase["nicks"]; + nsfw_: ChannelRecordBase["nsfw_"]; + originChannelId: ChannelRecordBase["originChannelId"]; + ownerId: ChannelRecordBase["ownerId"]; + parent_id: ChannelRecordBase["parent_id"]; + parentChannelThreadType: undefined; + permissionOverwrites_: Defined; + position_: ChannelRecordBase["position_"]; + rateLimitPerUser_: ChannelRecordBase["rateLimitPerUser_"]; + rawRecipients: Defined; + recipients: Defined; + rtcRegion: ChannelRecordBase["rtcRegion"]; + safetyWarnings: ChannelRecordBase["safetyWarnings"]; + template: ChannelRecordBase["template"]; + themeColor: ChannelRecordBase["themeColor"]; + threadMetadata: ChannelRecordBase["threadMetadata"]; + topic_: ChannelRecordBase["topic_"]; + totalMessageSent: ChannelRecordBase["totalMessageSent"]; type: ChannelTypes.UNKNOWN; -} // TEMP + userLimit_: ChannelRecordBase["userLimit_"]; + version: ChannelRecordBase["version"]; + videoQualityMode: ChannelRecordBase["videoQualityMode"]; +} export type GuildChannelRecord = GuildTextualChannelRecord | GuildVocalChannelRecord | ForumChannelRecord; @@ -776,9 +895,9 @@ export class ChannelStore extend getDMUserIds(): string[]; getGuildChannelsVersion(guildId: string): number; getInitialOverlayState(): { [channelId: string]: ChannelRecord; }; - getMutableBasicGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; } | undefined; // TEMP + getMutableBasicGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; // TEMP getMutableDMsByUserIds(): { [userId: string]: string; }; - getMutableGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; } | undefined; + getMutableGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; getMutablePrivateChannels(): { [channelId: string]: PrivateChannelRecord; }; getPrivateChannelsVersion(): number; getSortedPrivateChannels(): PrivateChannelRecord[]; @@ -920,11 +1039,6 @@ export class EmojiStore extends FluxStore { }; } -interface AvatarDecorationData { - asset: string; - skuId: string; -} - export const enum GuildMemberFlags { DID_REJOIN = 1 << 0, COMPLETED_ONBOARDING = 1 << 1, @@ -944,7 +1058,7 @@ export interface GuildMember { avatarDecoration: AvatarDecorationData | undefined; colorRoleId: string | undefined; colorString: string | undefined; - communicationDisabledUntil: string | Nullish; + communicationDisabledUntil: string | null; flags: GuildMemberFlags; fullProfileLoadedTimestamp: number | undefined; guildId: string; @@ -960,14 +1074,14 @@ export interface GuildMember { userId: string; } -type GuildMemberStoreAction = ExtractAction; +type GuildMemberStoreAction = ExtractAction; export class GuildMemberStore extends FluxStore { static displayName: "GuildMemberStore"; getCommunicationDisabledUserMap(): { [userId: string]: string; }; getCommunicationDisabledVersion(): number; - getMember(guildId: string, userId: string): GuildMember | null; // TEMP + getMember(guildId: string, userId: string): GuildMember | null; getMemberIds(guildId?: string | Nullish): string[]; getMemberRoleWithPendingUpdates(guildId: string, userId: string): string[]; getMembers(guildId?: string | Nullish): GuildMember[]; @@ -1020,11 +1134,73 @@ interface IconSource { uri: string; } +export const enum ClanBadgeKind { + SWORD = 0, + WATER_DROP = 1, + SKULL = 2, + TOADSTOOL = 3, + MOON = 4, + LIGHTNING = 5, + LEAF = 6, + HEART = 7, + FIRE = 8, + COMPASS = 9, + CROSSHAIRS = 10, + FLOWER = 11, + FORCE = 12, + GEM = 13, + LAVA = 14, + PSYCHIC = 15, + SMOKE = 16, + SNOW = 17, + SOUND = 18, + SUN = 19, + WIND = 20, +} + +export const enum ClanBannerKind { + NIGHT_SKY = 0, + CASTLE = 1, + WORLD_MAP = 2, + SEA_FOAM = 3, + WARP_TUNNEL = 4, + HOUSE = 5, + HEIGHTMAP = 6, + MESH = 7, + SPATTER = 8, +} + +export const enum ClanPlaystyles { + NONE = 0, + SOCIAL = 1, + CASUAL = 2, + COMPETITIVE = 3, + CREATIVE = 4, + VERY_HARDCORE = 5, +} + export interface Clan { - badge: string | Nullish; - identityEnabled: boolean | undefined; - identityGuildId: string | Nullish; - tag: string | Nullish; + badge: { + badgeKind: ClanBadgeKind; + primaryColor: string; + secondaryColor: string; + }; + banner: ClanBannerKind; + bannerHash: string | null; + branding: { + primaryColor: string; + secondaryColor: string; + }; + description: string | null; + games: string[]; + icon: string | null; + id: string; + memberCount: number; + name: string; + playstyle: ClanPlaystyles; + tag: string; + traits: string[]; + wildcardDescriptors: string[]; } export const enum UserNotificationSettings { @@ -1186,7 +1362,7 @@ export class GuildRecord< afkTimeout: number; application_id: string | null; banner: string | null; - clan: Clan | null; // TEMP + clan: Clan | null; defaultMessageNotifications: UserNotificationSettings; description: string | null; discoverySplash: string | null; @@ -1235,6 +1411,65 @@ export class GuildStore extends Fl isLoaded(): boolean; } +type RelationshipStoreAction = ExtractAction; + +export class RelationshipStore extends FluxStore { + static displayName: "RelationshipStore"; + + getFriendCount(): any; // TEMP + getFriendIDs(): any; // TEMP + getNickname(e?: any): any; // TEMP + getOutgoingCount(): any; // TEMP + getPendingCount(): any; // TEMP + getRelationshipCount(): any; // TEMP + getRelationships(): any; // TEMP + getRelationshipType(e?: any): any; // TEMP + getSince(e?: any): any; // TEMP + getSinces(): any; // TEMP + isBlocked(e?: any): any; // TEMP + isFriend(e?: any): any; // TEMP +} + +type SelectedChannelStoreAction = ExtractAction; + +export class SelectedChannelStore extends FluxStore { + static displayName: "SelectedChannelStore"; + + getChannelId(guildId?: string | Nullish): string | undefined; + getCurrentlySelectedChannelId(guildId?: string | Nullish): string | Nullish; + getLastChannelFollowingDestination(): { + channelId: string; + guildId: string; + }; + getLastSelectedChannelId(arg?: string | Nullish): string | undefined; // TEMP + getLastSelectedChannels(arg: string): string | undefined; // TEMP + getMostRecentSelectedTextChannelId(guildId?: string | Nullish): string | null; + getVoiceChannelId(): string | null; +} + +interface SelectedGuildStoreState { + lastSelectedGuildId: string | null; + selectedGuildId: string | null; + selectedGuildTimestampMillis: { [guildId: string]: number; }; +} + +type SelectedGuildStoreAction = ExtractAction; + +export class SelectedGuildStore< + Constructor extends GenericConstructor = typeof SelectedGuildStore, + State extends SelectedGuildStoreState = SelectedGuildStoreState, + Action extends FluxAction = SelectedGuildStoreAction +> extends FluxPersistedStore { + static displayName: "SelectedGuildStore"; + static persistKey: "SelectedGuildStore"; + + initialize(state: SelectedGuildStoreState): void; + getState(): State; + getGuildId(): string | null; + getLastSelectedGuildId(): string | null; + getLastSelectedTimestamp(guildId: string): number | undefined; +} + export const enum ApplicationFlags { EMBEDDED_RELEASED = 1 << 1, EMBEDDED_IAP = 1 << 3, @@ -1292,18 +1527,82 @@ export const enum OAuth2Scopes { WEBHOOK_INCOMING = "webhook.incoming", } +export interface ApplicationInstallParams { + scopes: OAuth2Scopes[]; + permissions: string; // Permissions serialized as string +} + export const enum ApplicationIntegrationType { GUILD_INSTALL = 0, USER_INSTALL = 1, } -interface ProfileBadge { +export interface Application { + customInstallUrl: string | undefined; + flags: ApplicationFlags; + id: string; + installParams: ApplicationInstallParams | undefined; + integrationTypesConfig: Partial>; + popularApplicationCommandIds: string[] | undefined; + primarySkuId: string | undefined; + storefront_available: boolean; +} + +export interface ApplicationRoleConnection { + metadata: Record; + platform_name: string | null; + platform_username: string | null; +} + +export interface ProfileBadge { description: string; icon: string; id: string; link?: string; } +export const enum PlatformTypes { + AMAZON_MUSIC = "amazon-music", + BATTLENET = "battlenet", + BUNGIE = "bungie", + CONTACTS = "contacts", + CRUNCHYROLL = "crunchyroll", + DOMAIN = "domain", + EBAY = "ebay", + EPIC_GAMES = "epicgames", + FACEBOOK = "facebook", + GITHUB = "github", + INSTAGRAM = "instagram", + LEAGUE_OF_LEGENDS = "leagueoflegends", + 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 interface ConnectedAccount { + id: string; + metadata?: Record; + name: string; + type: PlatformTypes; + verified: boolean; +} + type ProfileThemeColors = [primaryColor: number, accentColor: number]; interface UserProfileFetchFailed { @@ -1323,31 +1622,13 @@ interface UserProfileFetchFailed { } interface UserProfileFetchSucceeded { - application: { - customInstallUrl: string | Nullish; - flags: ApplicationFlags; - id: string; - installParams: { - scopes: OAuth2Scopes[] | Nullish; - permissions: string | Nullish; - } | Nullish; - integrationTypesConfig: Partial> | Nullish; // TEMP - popularApplicationCommandIds: string[] | undefined; - primarySkuId: string | Nullish; - storefront_available: boolean; - } | null; + application: Application | null; accentColor: number | Nullish; - applicationRoleConnections: any[]; // TEMP + applicationRoleConnections: ApplicationRoleConnection[]; badges: ProfileBadge[]; banner: string | Nullish; bio: string; - connectedAccounts: { - id: string; - metadata?: Record; - name: string; - type: string; - verified: boolean; - }[]; + connectedAccounts: ConnectedAccount[]; lastFetched: number; legacyUsername: string | Nullish; popoutAnimationParticleType: any /* | Nullish */; // TEMP @@ -1371,7 +1652,7 @@ export interface GuildMemberProfile { banner: string | Nullish; bio: string | undefined; guildId: string; - popoutAnimationParticleType: Nullish; // TEMP + popoutAnimationParticleType: any /* | Nullish */; // TEMP profileEffectId: string | undefined; pronouns: string; themeColors: ProfileThemeColors | Nullish; @@ -1395,7 +1676,9 @@ interface UserProfileStoreSnapshotData { type UserProfileStoreAction = ExtractAction; -export class UserProfileStore extends FluxSnapshotStore { +export class UserProfileStore< + Constructor extends GenericConstructor = typeof UserProfileStore +> extends FluxSnapshotStore { constructor(); static displayName: "UserProfileStore"; @@ -1422,6 +1705,18 @@ export class UserProfileStore extends FluxSnapshotStore void; } +export interface AvatarDecorationData { + asset: string; + skuId: string; +} + +export interface UserClanData { + badge: string | null; + identityEnabled: boolean | null; + identityGuildId: string | null; + tag: string | null; +} + export const enum UserFlags { STAFF = 1 << 0, PARTNER = 1 << 1, @@ -1503,7 +1798,7 @@ export class UserRecord< avatarDecorationData: AvatarDecorationData | null; banner: string | Nullish; bot: boolean; - clan: Clan | null; + clan: UserClanData | null; desktop: boolean; discriminator: string; email: string | null; @@ -1534,9 +1829,11 @@ interface UserStoreSnapshotData { users: [UserRecord] | []; } -type UserStoreAction = ExtractAction; +type UserStoreAction = ExtractAction; -export class UserStore extends FluxSnapshotStore { +export class UserStore< + Constructor extends GenericConstructor = typeof UserStore +> extends FluxSnapshotStore { constructor(); static displayName: "UserStore"; diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index ca819ae65..90f4db770 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -24,7 +24,7 @@ import type { ReactNode } from "react"; import type { ExcludeAction, ExtractAction, FluxAction, FluxActionType } from "./fluxActions"; import type { i18nMessages } from "./i18nMessages"; -export { ExcludeAction, ExtractAction, FluxAction, FluxActionType }; +export type { ExcludeAction, ExtractAction, FluxAction, FluxActionType }; type Nullish = null | undefined; From 10f3d219ed0f70ed576018843d636651be8dd2fb Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sat, 25 May 2024 18:43:55 -0400 Subject: [PATCH 011/126] Progress --- src/webpack/common/stores.ts | 6 +- src/webpack/common/types/stores.d.ts | 571 ++++++++++++++++++++++++++- 2 files changed, 555 insertions(+), 22 deletions(-) diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index 95307b6c4..e4c27f58b 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -16,8 +16,6 @@ * along with this program. If not, see . */ -import type * as Stores from "discord-types/stores"; - // eslint-disable-next-line path-alias/no-relative import { findByPropsLazy } from "../webpack"; import { waitForStore } from "./internal"; @@ -29,9 +27,7 @@ export type GenericStore = t.FluxStore & Record; export const { DraftType }: { DraftType: typeof t.DraftType; } = findByPropsLazy("DraftType"); -export let MessageStore: Omit & { - getMessages(chanId: string): any; -}; +export let MessageStore: t.MessageStore; // Original name: ChannelActionCreators, this is not actually a FluxStore export const PrivateChannelsStore = findByPropsLazy("openPrivateChannel"); diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index 7065a6c0e..a46dcba9b 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -16,6 +16,7 @@ * along with this program. If not, see . */ +import type { Duration, Moment } from "moment"; import type { SnakeCasedProperties } from "type-fest"; import type { ExcludeAction, ExtractAction, FluxAction, FluxActionHandlerMap, FluxDispatchBand, FluxDispatcher } from "./utils"; @@ -56,7 +57,7 @@ export abstract class FluxStore { emitChange(): void; getDispatchToken(): string; getName(): string; - initialize(...args: any[]): void; + initialize(...args: unknown[]): void; initializeIfNeeded(): void; mustEmitChanges( mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */ @@ -290,7 +291,7 @@ export const enum ThreadMemberFlags { NO_MESSAGES = 1 << 3, } -export interface ChannelMember { +export interface ThreadMember { flags: ThreadMemberFlags; joinTimestamp: string; muteConfig: { @@ -460,7 +461,7 @@ export abstract class ChannelRecordBase { isSpam?: boolean | undefined; lastMessageId: string | Nullish; lastPinTimestamp: string | Nullish; - member?: ChannelMember | undefined; + member?: ThreadMember | undefined; memberCount?: number | undefined; memberIdsPreview?: string[] | undefined; memberListId?: string | Nullish; @@ -902,6 +903,7 @@ export class ChannelStore extend getPrivateChannelsVersion(): number; getSortedPrivateChannels(): PrivateChannelRecord[]; hasChannel(channelId: string): boolean; + initialize(): void; loadAllGuildAndPrivateChannelsFromDisk(): { [channelId: string]: GuildChannelRecord | PrivateChannelRecord; }; } @@ -1096,6 +1098,7 @@ export class GuildMemberStore extends Fl isLoaded(): boolean; } +export const enum MessageAttachmentFlags { + IS_CLIP = 1 << 0, + IS_THUMBNAIL = 1 << 1, + IS_REMIX = 1 << 2, + IS_SPOILER = 1 << 3, + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageAttachment { + content_scan_version?: number; + content_type?: string; + description?: string; + duration_secs?: number; + ephemeral?: boolean; + filename: string; + flags?: MessageAttachmentFlags; + height?: number | null; + id: string; + placeholder?: string; + placeholder_version?: number; + proxy_url: string; + size: number; + spoiler: boolean; + url: string; + waveform?: string; + width?: number | null; +} + +export interface MessageCall { + duration: Duration | null; + endedTimestamp: Moment | null; + participants: string[]; +} + +export const enum CodedLinkType { + ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", + APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", + BUILD_OVERRIDE = "BUILD_OVERRIDE", + CHANNEL_LINK = "CHANNEL_LINK", + EMBEDDED_ACTIVITY_INVITE = "EMBEDDED_ACTIVITY_INVITE", + EVENT = "EVENT", + GUILD_PRODUCT = "GUILD_PRODUCT", + INVITE = "INVITE", + MANUAL_BUILD_OVERRIDE = "MANUAL_BUILD_OVERRIDE", + QUESTS_EMBED = "QUESTS_EMBED", + SERVER_SHOP = "SERVER_SHOP", + TEMPLATE = "TEMPLATE", +} + +export interface CodedLink { + code: string; + type: CodedLinkType; +} + +// Original name: ComponentType, renamed to avoid conflict with ComponentType from React +export const enum MessageComponentType { + ACTION_ROW = 1, + BUTTON = 2, + STRING_SELECT = 3, + INPUT_TEXT = 4, + USER_SELECT = 5, + ROLE_SELECT = 6, + MENTIONABLE_SELECT = 7, + CHANNEL_SELECT = 8, + TEXT = 10, + MEDIA_GALLERY = 12, + SEPARATOR = 14, +} + +/* +export interface MessageActionRowComponent { + type: MessageComponentType.ACTION_ROW; + id: T(r); + components: s; +} + +export interface MessageButtonComponent { + type: MessageComponentType.BUTTON; + id: T(r); + customId: t.custom_id; + style: t.style; + disabled: t.disabled; + url: t.url; + label: t.label; + emoji: e; +} + +export interface MessageStringSelectComponent { + type: MessageComponentType.STRING_SELECT; + id: T(r); + customId: t.custom_id; + disabled: t.disabled; + options: { + type: l.SelectOptionType.STRING; + label: e.label; + value: e.value; + default: e.default; + description: e.description; + emoji: null != e.emoji ? d(e.emoji, m) : void 0; + }[]; + placeholder: null !== (a = t.placeholder) && void 0 !== a ? a : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; + minValues: t.min_values; + maxValues: t.max_values; +} + +export interface MessageTextInputComponent { + type: MessageComponentType.INPUT_TEXT; + id: T(r); + style: t.style; + customId: t.custom_id; + label: t.label; + value: t.value; + placeholder: t.placeholder; + disabled: t.disabled; + required: null !== (_ = t.required) && void 0 !== _ && _; + minLength: t.min_length; + maxLength: t.max_length; +} + +export interface MessageUserSelectComponent { + type: MessageComponentType.USER_SELECT; + id: T(r); + customId: t.custom_id; + disabled: t.disabled; + placeholder: null !== (c = t.placeholder) && void 0 !== c ? c : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; + minValues: t.min_values; + maxValues: t.max_values; + defaultValues: t.default_values; +} + +export interface MessageRoleSelectComponent { + type: MessageComponentType.ROLE_SELECT; + id: T(r); + customId: t.custom_id; + disabled: t.disabled; + placeholder: null !== (I = t.placeholder) && void 0 !== I ? I : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; + minValues: t.min_values; + maxValues: t.max_values; + defaultValues: t.default_values; +} + +export interface MessageMentionableSelectComponent { + type: MessageComponentType.MENTIONABLE_SELECT; + id: T(r); + customId: t.custom_id; + disabled: t.disabled; + placeholder: null !== (f = t.placeholder) && void 0 !== f ? f : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; + minValues: t.min_values; + maxValues: t.max_values; + defaultValues: t.default_values; +} + +export interface MessageChannelSelectComponent { + type: MessageComponentType.CHANNEL_SELECT; + id: T(r); + customId: t.custom_id; + disabled: t.disabled; + placeholder: null !== (S = t.placeholder) && void 0 !== S ? S : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; + minValues: t.min_values; + maxValues: t.max_values; + channelTypes: t.channel_types; + defaultValues: t.default_values; +} + +export interface MessageTextComponent { + type: MessageComponentType.TEXT; + id: T(r); + content: t.content; +} + +export interface MessageMediaGalleryComponent { + type: MessageComponentType.MEDIA_GALLERY; + id: T(r); + items: { + media: (0, s.toUnfurledMediaItem)(e.media); + description: e.description; + spoiler: e.spoiler; + }[]; +} + +export interface MessageSeparatorComponent { + type: MessageComponentType.SEPARATOR; + id: T(r); + divider: null === (h = t.divider) || void 0 === h || h; + spacing: null !== (A = t.spacing) && void 0 !== A ? A : i.SeparatorSpacingSize.SMALL; +} + +export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; +*/ + +export const 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, + 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, +} + +export const enum MessageStates { + SEND_FAILED = "SEND_FAILED", + SENDING = "SENDING", + SENT = "SENT", +} + +export const enum MessageTypes { + DEFAULT = 0, + RECIPIENT_ADD = 1, + RECIPIENT_REMOVE = 2, + CALL = 3, + CHANNEL_NAME_CHANGE = 4, + CHANNEL_ICON_CHANGE = 5, + CHANNEL_PINNED_MESSAGE = 6, + USER_JOIN = 7, + GUILD_BOOST = 8, + GUILD_BOOST_TIER_1 = 9, + GUILD_BOOST_TIER_2 = 10, + GUILD_BOOST_TIER_3 = 11, + CHANNEL_FOLLOW_ADD = 12, + GUILD_STREAM = 13, + GUILD_DISCOVERY_DISQUALIFIED = 14, + GUILD_DISCOVERY_REQUALIFIED = 15, + GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, + GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, + THREAD_CREATED = 18, + REPLY = 19, + CHAT_INPUT_COMMAND = 20, + THREAD_STARTER_MESSAGE = 21, + GUILD_INVITE_REMINDER = 22, + CONTEXT_MENU_COMMAND = 23, + AUTO_MODERATION_ACTION = 24, + ROLE_SUBSCRIPTION_PURCHASE = 25, + INTERACTION_PREMIUM_UPSELL = 26, + STAGE_START = 27, + STAGE_END = 28, + STAGE_SPEAKER = 29, + STAGE_RAISE_HAND = 30, + STAGE_TOPIC = 31, + GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, + PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, + PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, + PREMIUM_REFERRAL = 35, + GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, + GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, + GUILD_INCIDENT_REPORT_RAID = 38, + GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, + GUILD_DEADCHAT_REVIVE_PROMPT = 40, + CUSTOM_GIFT = 41, + GUILD_GAMING_STATS_PROMPT = 42, + PURCHASE_NOTIFICATION = 44, + VOICE_HANGOUT_INVITE = 45, + POLL_RESULT = 46, + CHANGELOG = 47, +} + +type MessageRecordOwnProperties = Pick; + +export class MessageRecord< + OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties +> extends ImmutableRecord { + constructor(messageFromServer: Record); // TEMP + + addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP + addReactionBatch(e?: any, t?: any): any; // TEMP + canDeleteOwnMessage(userId: string): boolean; + getChannelId(): string; + getReaction(e?: any): any; // TEMP + hasFlag(flag: MessageFlags): boolean; + isCommandType(): boolean; + isEdited(): boolean; + isFirstMessageInForumPost(channel: ChannelRecord): boolean; // TEMP + isInteractionPlaceholder(): boolean; + isPoll(): boolean; + isSystemDM(): boolean; + isUIKitComponents(): boolean; + removeReaction(e?: any, t?: any, n?: any): this; // TEMP + removeReactionsForEmoji(e?: any): this; // TEMP + toJS(): OwnProperties & SnakeCasedProperties>; + userHasReactedWithEmoji(e?: any, t?: any): boolean; // TEMP + + activity: any | null; // TEMP + activityInstance: any | null; // TEMP + application: any | null; // TEMP + applicationId: string | null; // TEMP + attachments: MessageAttachment[]; + author: UserRecord; + blocked: boolean; + bot: boolean; + call: MessageCall | null; + changelogId: string | null; + channel_id: string; + codedLinks: CodedLink[]; + colorString: string | undefined; + components: { + components: any[]; // TEMP + id: string; + type: number; + }[]; + content: string; + customRenderedContent: any; // TEMP + editedTimestamp: string | null; // TEMP + embeds: any[]; // TEMP + flags: MessageFlags; + giftCodes: any[]; // TEMP + giftInfo: any; // TEMP + id: string; + interaction: any | null; // TEMP + interactionData: any | null; // TEMP + interactionError: any | null; // TEMP + interactionMetadata: any | null; // TEMP + isSearchHit: boolean; + isUnsupported: boolean; + loggingName: string | null; // TEMP + mentionChannels: any[]; // TEMP + mentionEveryone: boolean; + mentionRoles: any[]; // TEMP + mentioned: boolean; + mentions: any[]; // TEMP + messageReference: any | null; // TEMP + messageSnapshots: any[]; // TEMP + nick: any; // TEMP + nonce: any | null; // TEMP + pinned: boolean; + poll: any; // TEMP + purchaseNotification: any; // TEMP + reactions: any[]; // TEMP + referralTrialOfferId: string | null; // TEMP + roleSubscriptionData: any; // TEMP + state: MessageStates; + stickerItems: any[]; // TEMP + stickers: any[]; // TEMP + timestamp: Date; // TEMP + tts: boolean; + type: MessageTypes; + webhookId: string | null; // TEMP +} + +declare class MessageCache { + constructor(isCacheBefore: boolean); + + cache(e?: any): void; // TEMP + clear(): void; // TEMP + clone(): any; // TEMP + extract(e?: any): any; // TEMP + extractAll(): any; // TEMP + forEach(callback: (value: any, index: number, array: any[]) => void, thisArg?: unknown): void; // TEMP + get(e?: any): any; // TEMP + has(e?: any): boolean; // TEMP + get length(): any; // TEMP + remove(e?: any): void; // TEMP + removeMany(e?: any): void; // TEMP + replace(e?: any, t?: any): void; // TEMP + update(e?: any, t?: any): void; // TEMP + get wasAtEdge(): any; // TEMP + set wasAtEdge(e: any); // TEMP + + _isCacheBefore: boolean; + _map: any; // TEMP + _messages: any[]; // TEMP + _wasAtEdge: boolean; +} + +export const enum JumpTypes { + ANIMATED = "ANIMATED", + INSTANT = "INSTANT", +} + +export class ChannelMessages { + constructor(channelId: string); + + static _channelMessages: any; // TEMP + static clear(e?: any): any; // TEMP + static clearCache(e?: any): any; // TEMP + static commit(e?: any): any; // TEMP + static forEach(e?: any): any; // TEMP + static get(e?: any): any; // TEMP + static getOrCreate(e?: any): any; // TEMP + static hasPresent(e?: any): any; // TEMP + + _clearMessages(): void; + _merge(e?: any): any; // TEMP + addCachedMessages(e?: any, t?: any): any; // TEMP + filter( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => value is T, + thisArg?: unknown + ): T[]; + filter( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, + thisArg?: unknown + ): MessageRecord[]; + findNewest(e?: any): any; // TEMP + findOldest(e?: any): any; // TEMP + first(): MessageRecord | undefined; + focusOnMessage(e?: any): any; // TEMP + forAll( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, + thisArg?: unknown + ): void; + forEach( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, + thisArg?: unknown + ): void; + get(e?: any): any; // TEMP + getAfter(e?: any): any; // TEMP + getByIndex(index: number): any | undefined; // TEMP + getManyAfter(e?: any, t?: any, n?: any): any; // TEMP + getManyBefore(e?: any, t?: any, n?: any): any; // TEMP + has(e?: any): boolean; // TEMP + hasAfterCached(e?: any): any; // TEMP + hasBeforeCached(e?: any): any; // TEMP + hasPresent(): any; // TEMP + indexOf(searchElement: any): number; // TEMP + jumpToMessage(e?: any): any; // TEMP + jumpToPresent(e?: any): any; // TEMP + last(): MessageRecord | undefined; + get length(): number; + loadComplete(e?: any): any; // TEMP + loadFromCache(e?: any, t?: any): any; // TEMP + loadStart(e?: any): any; // TEMP + map( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => T, + thisArg?: unknown + ): T[]; + merge(e?: any): any; // TEMP + mergeDelta(): any; // TEMP + mutate(e?: any): any; // TEMP + receiveMessage(e?: any): any; // TEMP + receivePushNotification(e?: any): any; // TEMP + reduce( + callback: ( + previousValue: MessageRecord, + currentValue: MessageRecord, + currentIndex: number, + array: MessageRecord[] + ) => MessageRecord + ): MessageRecord; + reduce( + callback: ( + previousValue: MessageRecord, + currentValue: MessageRecord, + currentIndex: number, + array: MessageRecord[] + ) => MessageRecord, + initialValue: MessageRecord + ): MessageRecord; + reduce( + callback: ( + previousValue: MessageRecord, + currentValue: T, + currentIndex: number, + array: MessageRecord[] + ) => T, + initialValue: T + ): T; + remove(e?: any): any; // TEMP + removeMany(e?: any): any; // TEMP + replace(e?: any, t?: any): any; // TEMP + reset(e?: any): any; // TEMP + some( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, + thisArg?: unknown + ): boolean; + toArray(): MessageRecord[]; + truncate(e?: any, t?: any): any; // TEMP + truncateBottom(e?: any): any; // TEMP + truncateTop(e?: any): any; // TEMP + update(e?: any, t?: any): any; // TEMP + + _after: MessageCache; + _array: MessageRecord[]; + _before: MessageCache; + _map: { [messageId: string]: MessageRecord; }; + cached: boolean; + channelId: string; + error: boolean; + focusTargetId: any; // TEMP + hasFetched: boolean; + hasMoreAfter: boolean; + hasMoreBefore: boolean; + jumpFlash: boolean; + jumpReturnTargetId: string | null; // TEMP + jumpSequenceId: number; // TEMP + jumpTargetId: string | null; // TEMP + jumpTargetOffset: number; // TEMP + jumpType: JumpTypes; + jumped: boolean; + jumpedToPresent: boolean; + loadingMore: boolean; + ready: boolean; + revealedMessageId: string | null; // TEMP +} + +type MessageStoreAction = ExtractAction; + +export class MessageStore extends FluxStore { + static displayName: "MessageStore"; + + focusedMessageId(e?: any): any; // TEMP + getLastCommandMessage(e?: any): any; // TEMP + getLastEditableMessage(e?: any): any; // TEMP + getLastMessage(e?: any): any; // TEMP + getLastNonCurrentUserMessage(e?: any): any; // TEMP + getMessage(e?: any, t?: any): any; // TEMP + getMessages(guildId?: string | Nullish): any; // TEMP + hasCurrentUserSentMessage(e?: any): any; // TEMP + hasCurrentUserSentMessageSinceAppStart(): any; // TEMP + hasPresent(e?: any): any; // TEMP + initialize(): void; + isLoadingMessages(e?: any): any; // TEMP + isReady(e?: any): any; // TEMP + jumpedMessageId(e?: any): any; // TEMP + whenReady(e?: any, t?: any): any; // TEMP +} + +export const enum RelationshipTypes { + NONE = 0, + FRIEND = 1, + BLOCKED = 2, + PENDING_INCOMING = 3, + PENDING_OUTGOING = 4, + IMPLICIT = 5, + SUGGESTION = 6, +} + type RelationshipStoreAction = ExtractAction; export class RelationshipStore extends FluxStore { static displayName: "RelationshipStore"; - getFriendCount(): any; // TEMP - getFriendIDs(): any; // TEMP - getNickname(e?: any): any; // TEMP - getOutgoingCount(): any; // TEMP - getPendingCount(): any; // TEMP - getRelationshipCount(): any; // TEMP - getRelationships(): any; // TEMP - getRelationshipType(e?: any): any; // TEMP - getSince(e?: any): any; // TEMP - getSinces(): any; // TEMP - isBlocked(e?: any): any; // TEMP - isFriend(e?: any): any; // TEMP + getFriendCount(): number; + getFriendIDs(): string[]; + getNickname(userId: string): string | undefined; + getOutgoingCount(): number; + getPendingCount(): number; + getRelationshipCount(): number; + getRelationships(): { [userId: string]: RelationshipTypes; }; + getRelationshipType(userId: string): RelationshipTypes; + getSince(userId: string): string | undefined; + getSinces(): { [userId: string]: string; }; + initialize(): void; + isBlocked(userId: string): boolean; + isFriend(userId: string): boolean; } type SelectedChannelStoreAction = ExtractAction; @@ -1441,10 +1977,11 @@ export class SelectedChannelStore Date: Sun, 26 May 2024 22:07:21 -0400 Subject: [PATCH 012/126] Progress --- src/webpack/common/types/stores.d.ts | 540 +++++++++++++++++++++------ 1 file changed, 435 insertions(+), 105 deletions(-) diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index a46dcba9b..edeb5af0a 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -951,8 +951,7 @@ export interface CustomEmoji { originalName?: string; require_colons: boolean; roles: string[]; - url: string; - type: "GUILD_EMOJI"; + type: 1; } export interface UnicodeEmoji { @@ -964,7 +963,7 @@ export interface UnicodeEmoji { }; index: number; surrogates: string; - type: "UNICODE"; + type: 0; uniqueName: string; useSpriteSheet: boolean; get allNamesString(): string; @@ -1468,6 +1467,13 @@ export interface CodedLink { type: CodedLinkType; } +export interface MessageComponentEmoji { + animated: boolean | undefined; + id: string | undefined; + src: string | undefined; + name: string | undefined; +} + // Original name: ComponentType, renamed to avoid conflict with ComponentType from React export const enum MessageComponentType { ACTION_ROW = 1, @@ -1483,126 +1489,285 @@ export const enum MessageComponentType { SEPARATOR = 14, } -/* export interface MessageActionRowComponent { type: MessageComponentType.ACTION_ROW; - id: T(r); - components: s; + id: string; + components: Exclude[]; } +export const enum ButtonStyle { + PRIMARY = 1, + SECONDARY = 2, + SUCCESS = 3, + DESTRUCTIVE = 4, + LINK = 5, + PREMIUM = 6, +} + +// TODO: Must have one of either `customId` or `url`, but never both. +// If a button has `url` it must have the `Link` button style. export interface MessageButtonComponent { + customId: string | undefined; + disabled: boolean | undefined; + emoji: MessageComponentEmoji | undefined; + id: string; + label: string | undefined; + style: ButtonStyle; type: MessageComponentType.BUTTON; - id: T(r); - customId: t.custom_id; - style: t.style; - disabled: t.disabled; - url: t.url; - label: t.label; - emoji: e; + url: string | undefined; +} + +export const enum SelectOptionType { + STRING = 1, + USER = 2, + ROLE = 3, + CHANNEL = 4, + GUILD = 5, +} + +export interface SelectMenuOption { + type: OptionType; + label: string; + value: string; + default: boolean | undefined; + description: string | undefined; + emoji: MessageComponentEmoji | undefined; } export interface MessageStringSelectComponent { + customId: string; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + options: SelectMenuOption[]; + placeholder: string; type: MessageComponentType.STRING_SELECT; - id: T(r); - customId: t.custom_id; - disabled: t.disabled; - options: { - type: l.SelectOptionType.STRING; - label: e.label; - value: e.value; - default: e.default; - description: e.description; - emoji: null != e.emoji ? d(e.emoji, m) : void 0; - }[]; - placeholder: null !== (a = t.placeholder) && void 0 !== a ? a : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; - minValues: t.min_values; - maxValues: t.max_values; +} + +export const enum TextComponentStyle { + SMALL = 1, + PARAGRAPH = 2, } export interface MessageTextInputComponent { + customId: string; + disabled: boolean | undefined; + id: string; + label: string; + maxLength: number | undefined; + minLength: number | undefined; + placeholder: string | undefined; + required: boolean; + style: TextComponentStyle; type: MessageComponentType.INPUT_TEXT; - id: T(r); - style: t.style; - customId: t.custom_id; - label: t.label; - value: t.value; - placeholder: t.placeholder; - disabled: t.disabled; - required: null !== (_ = t.required) && void 0 !== _ && _; - minLength: t.min_length; - maxLength: t.max_length; + value: string | undefined; +} + +export const enum SnowflakeSelectDefaultValueTypes { + CHANNEL = "channel", + ROLE = "role", + USER = "user", +} + +export interface SelectMenuDefaultValue { + id: string; + type: DefaultValueType; } export interface MessageUserSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; type: MessageComponentType.USER_SELECT; - id: T(r); - customId: t.custom_id; - disabled: t.disabled; - placeholder: null !== (c = t.placeholder) && void 0 !== c ? c : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; - minValues: t.min_values; - maxValues: t.max_values; - defaultValues: t.default_values; } export interface MessageRoleSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; type: MessageComponentType.ROLE_SELECT; - id: T(r); - customId: t.custom_id; - disabled: t.disabled; - placeholder: null !== (I = t.placeholder) && void 0 !== I ? I : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; - minValues: t.min_values; - maxValues: t.max_values; - defaultValues: t.default_values; } export interface MessageMentionableSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; type: MessageComponentType.MENTIONABLE_SELECT; - id: T(r); - customId: t.custom_id; - disabled: t.disabled; - placeholder: null !== (f = t.placeholder) && void 0 !== f ? f : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; - minValues: t.min_values; - maxValues: t.max_values; - defaultValues: t.default_values; } export interface MessageChannelSelectComponent { + channelTypes: ChannelTypes[] | undefined; + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; type: MessageComponentType.CHANNEL_SELECT; - id: T(r); - customId: t.custom_id; - disabled: t.disabled; - placeholder: null !== (S = t.placeholder) && void 0 !== S ? S : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER; - minValues: t.min_values; - maxValues: t.max_values; - channelTypes: t.channel_types; - defaultValues: t.default_values; } export interface MessageTextComponent { + content: string | undefined; + id: string; type: MessageComponentType.TEXT; - id: T(r); - content: t.content; +} + +export const enum ContentScanFlags { + EXPLICIT = 1, +} + +export interface MediaItem { + contentScanMetadata: { + version: number | undefined; + contentScanFlags: ContentScanFlags | undefined; + } | undefined; + contentType: string | undefined; + height: number | Nullish; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyUrl: string; + url: string; + width: number | Nullish; } export interface MessageMediaGalleryComponent { - type: MessageComponentType.MEDIA_GALLERY; - id: T(r); + id: string; items: { - media: (0, s.toUnfurledMediaItem)(e.media); - description: e.description; - spoiler: e.spoiler; + media: MediaItem; + description: string | undefined; + spoiler: boolean; }[]; + type: MessageComponentType.MEDIA_GALLERY; +} + +export const enum SeparatorSpacingSize { + SMALL = 1, + LARGE = 2, } export interface MessageSeparatorComponent { + divider: boolean; + id: string; + spacing: SeparatorSpacingSize; type: MessageComponentType.SEPARATOR; - id: T(r); - divider: null === (h = t.divider) || void 0 === h || h; - spacing: null !== (A = t.spacing) && void 0 !== A ? A : i.SeparatorSpacingSize.SMALL; } export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; -*/ + +export interface MessageEmbedAuthor { + iconProxyURL: string | undefined; + iconURL: string | undefined; + name: string; + url: string | undefined; +} + +export interface MessageEmbedField { + inline: boolean | undefined; + rawName: string; + rawValue: string; +} + +export const enum MessageEmbedFlags { + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageEmbedFooter { + iconProxyURL: string | undefined; + iconURL: string | undefined; + text: string; +} + +export interface MessageEmbedImage { + height: number | undefined; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number | undefined; +} + +export interface MessageEmbedProvider { + name: string; + url: string | undefined; +} + +// TODO: An embed thumbnail either: +// has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` +// or has only `height`, `url`, and `width`. +export interface MessageEmbedThumbnail { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number; +} + +export const enum MessageEmbedTypes { + APPLICATION_NEWS = "application_news", + ARTICLE = "article", + AUTO_MODERATION_MESSAGE = "auto_moderation_message", + AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", + GAMING_PROFILE = "gaming_profile", + GIFT = "gift", + GIFV = "gifv", + IMAGE = "image", + LINK = "link", + POLL_RESULT = "poll_result", + POST_PREVIEW = "post_preview", + RICH = "rich", + SAFETY_POLICY_NOTICE = "safety_policy_notice", + SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", + TEXT = "text", + TWEET = "tweet", + VIDEO = "video", + VOICE_CHANNEL = "voice_channel", +} + +// TODO: An embed video must have either `proxyURL` or `url`, and having both is possible. +// It might not be possible for an embed video to have `proxyURL` without `url`, though. +export interface MessageEmbedVideo { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string | undefined; + width: number; +} + +export interface MessageEmbed { + author?: MessageEmbedAuthor; + color?: string; + contentScanVersion: number | undefined; + fields: MessageEmbedField[]; + flags: MessageEmbedFlags | undefined; + footer?: MessageEmbedFooter; + id: string; + image?: MessageEmbedImage; + provider?: MessageEmbedProvider; + rawDescription: string | undefined; + rawTitle: string | undefined; + referenceId: string | undefined; + thumbnail?: MessageEmbedThumbnail; + timestamp?: Moment; + type: MessageEmbedTypes | undefined; + url: string | undefined; + video?: MessageEmbedVideo; +} export const enum MessageFlags { CROSSPOSTED = 1 << 0, @@ -1621,12 +1786,181 @@ export const enum MessageFlags { IS_UIKIT_COMPONENTS = 1 << 15, } +export interface MessageGiftInfo { + emoji?: string | null; // TEMP + sound?: string | null; // TEMP +} // TEMP + +export const enum InteractionTypes { + PING = 1, + APPLICATION_COMMAND = 2, + MESSAGE_COMPONENT = 3, + APPLICATION_COMMAND_AUTOCOMPLETE = 4, + MODAL_SUBMIT = 5, +} + +export class InteractionRecord extends ImmutableRecord { + constructor(interaction: Record); // TEMP + + static createFromServer(interactionFromServer: Record): InteractionRecord; // TEMP + + displayName: string; + id: string; + name: string; + type: InteractionTypes; + user: UserRecord; +} + +export interface InteractionData { + application_command: any; // TEMP + guild_id: any; // TEMP + id: any; // TEMP + name: any; // TEMP + options: any; // TEMP + type: any; // TEMP + version: any; // TEMP +} // TEMP + +export interface InteractionMetadata { + authorizing_integration_owners: Partial>; + id: string; + interacted_message_id?: string; + original_response_message_id?: string; + type: InteractionTypes; + triggering_interaction_metadata?: InteractionMetadata; + user: Record; // TEMP: This is not a UserRecord, it's a user object from the API. +} // TEMP + +export interface ChannelMention { + guild_id: string; + id: string; + name: string; + type: ChannelTypes; +} + +export interface MessageReference { + channel_id: string; + guild_id?: string; + message_id?: string; +} + +export const enum PollLayoutTypes { + UNKNOWN = 0, + DEFAULT = 1, + IMAGE_ONLY_ANSWERS = 2, +} + +export interface MessageEmoji { + animated?: boolean; + id: string | null; + name: string | null; +} + +export interface MessagePollMedia { + emoji?: MessageEmoji; + text?: string; +} + +export interface MessagePollAnswer { + answer_id: number; + poll_media: MessagePollMedia; +} + +export interface MessagePollAnswerCount { + count: number; + id: number; + me_voted: boolean; +} + +export interface MessagePollResults { + answer_counts: MessagePollAnswerCount[]; + is_finalized: boolean; +} + +export interface MessagePoll { + allow_multiselect: boolean; + answers: MessagePollAnswer[]; + expiry: Moment; + layout_type: PollLayoutTypes; + question: MessagePollMedia; + results?: MessagePollResults; +} + +export const enum PurchaseNotificationType { + GUILD_PRODUCT = 0, +} + +export interface MessagePurchaseNotification { + guild_product_purchase: { + listing_id?: string | null; // TEMP + product_name?: string | null; // TEMP + } // TEMP + type: PurchaseNotificationType; +} // TEMP + +export interface MessageReactionCountDetails { + burst: number; + normal: number; + vote?: number; +} + +export interface MessageReaction { + burst_colors: string[]; + burst_count: number; + count: number; + count_details: MessageReactionCountDetails; + emoji: MessageEmoji; + me: boolean; + me_burst: boolean; + me_vote?: boolean; +} + +export interface MessageRoleSubscriptionData { + is_renewal?: boolean | null; // TEMP + role_subscription_listing_id?: string | null; // TEMP + tier_name?: string | null; // TEMP + total_months_subscribed?: number | null; // TEMP +} // TEMP + export const enum MessageStates { SEND_FAILED = "SEND_FAILED", SENDING = "SENDING", SENT = "SENT", } +export const enum StickerFormat { + PNG = 1, + APNG = 2, + LOTTIE = 3, + GIF = 4, +} + +export interface MessageStickerItem { + format_type: StickerFormat; + id: string; + name: string; +} + +export const enum MetaStickerType { + STANDARD = 1, + GUILD = 2, +} + +export interface MessageSticker { + asset?: ""; + available?: boolean; + description: string | null; + format_type: StickerFormat; + guild_id?: string; + id: string; + name: string; + pack_id?: string; + sort_value?: number; + tags: string; + type: MetaStickerType; + user?: Record; // TEMP: This is not a UserRecord, it's a user object from the API. +} + export const enum MessageTypes { DEFAULT = 0, RECIPIENT_ADD = 1, @@ -1715,48 +2049,44 @@ export class MessageRecord< channel_id: string; codedLinks: CodedLink[]; colorString: string | undefined; - components: { - components: any[]; // TEMP - id: string; - type: number; - }[]; + components: MessageComponent[]; content: string; - customRenderedContent: any; // TEMP - editedTimestamp: string | null; // TEMP - embeds: any[]; // TEMP + customRenderedContent: any | undefined; // TEMP + editedTimestamp: Date | null; + embeds: MessageEmbed[]; flags: MessageFlags; - giftCodes: any[]; // TEMP - giftInfo: any; // TEMP + giftCodes: string[]; + giftInfo: MessageGiftInfo | undefined; id: string; - interaction: any | null; // TEMP - interactionData: any | null; // TEMP - interactionError: any | null; // TEMP - interactionMetadata: any | null; // TEMP + interaction: InteractionRecord | null; + interactionData: InteractionData | null; + interactionError: string | null; + interactionMetadata: InteractionMetadata | null; isSearchHit: boolean; isUnsupported: boolean; loggingName: string | null; // TEMP - mentionChannels: any[]; // TEMP + mentionChannels: ChannelMention[]; mentionEveryone: boolean; - mentionRoles: any[]; // TEMP + mentionRoles: string[]; mentioned: boolean; - mentions: any[]; // TEMP - messageReference: any | null; // TEMP + mentions: string[]; + messageReference: MessageReference | null; messageSnapshots: any[]; // TEMP - nick: any; // TEMP - nonce: any | null; // TEMP + nick: any | undefined; // TEMP + nonce: string | number | null; pinned: boolean; - poll: any; // TEMP - purchaseNotification: any; // TEMP - reactions: any[]; // TEMP + poll: MessagePoll | undefined; + purchaseNotification: MessagePurchaseNotification | undefined; + reactions: MessageReaction[]; referralTrialOfferId: string | null; // TEMP - roleSubscriptionData: any; // TEMP + roleSubscriptionData: MessageRoleSubscriptionData | undefined; state: MessageStates; - stickerItems: any[]; // TEMP - stickers: any[]; // TEMP - timestamp: Date; // TEMP + stickerItems: MessageStickerItem[]; + stickers: MessageSticker[]; + timestamp: Date; tts: boolean; type: MessageTypes; - webhookId: string | null; // TEMP + webhookId: string | null; } declare class MessageCache { From c8602ef52be0a1171be9506f23ba6208f0be4436 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Wed, 29 May 2024 06:45:44 -0300 Subject: [PATCH 013/126] Fix reporter breaking because of ConsoleShortcuts --- scripts/generateReport.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/generateReport.ts b/scripts/generateReport.ts index 8bb87d812..200aa3f83 100644 --- a/scripts/generateReport.ts +++ b/scripts/generateReport.ts @@ -205,7 +205,12 @@ page.on("console", async e => { } if (isVencord) { - const args = await Promise.all(e.args().map(a => a.jsonValue())); + let args: unknown[] = []; + try { + args = await Promise.all(e.args().map(a => a.jsonValue())); + } catch { + return; + } const [, tag, message] = args as Array; const cause = await maybeGetError(e.args()[3]); From 0c86f1331bea373c5c15c4a6958ccca5e1f8667a Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Wed, 29 May 2024 18:08:53 -0400 Subject: [PATCH 014/126] Moved types to `packages/discord-types` --- .eslintrc.json | 2 +- packages/discord-types/LICENSE | 674 +++++ packages/discord-types/README.md | 1 + packages/discord-types/eslint.config.mjs | 165 + packages/discord-types/package.json | 32 + .../src/flux/FluxDispatcher.d.ts | 85 + .../src/flux/fluxActionHandlers.d.ts | 67 + .../discord-types/src/flux}/fluxActions.d.ts | 99 +- packages/discord-types/src/flux/index.d.ts | 9 + .../src/general/ChannelMessages.d.ts | 155 + packages/discord-types/src/general/Clan.d.ts | 75 + .../src/general/GuildMember.d.ts | 43 + .../src/general/GuildMemberProfile.d.ts | 21 + .../src/general/GuildRecord.d.ts | 210 ++ .../src/general/ImmutableRecord.d.ts | 22 + .../src/general/MessageRecord.d.ts | 693 +++++ packages/discord-types/src/general/Role.d.ts | 89 + .../src/general/UserProfile.d.ts | 187 ++ .../discord-types/src/general/UserRecord.d.ts | 133 + .../src/general/channels/ChannelRecord.d.ts | 267 ++ .../general/channels/ForumChannelRecord.d.ts | 69 + .../channels/GuildTextualChannelRecord.d.ts | 89 + .../channels/GuildVocalChannelRecord.d.ts | 69 + .../channels/PrivateChannelRecord.d.ts | 82 + .../general/channels/ThreadChannelRecord.d.ts | 61 + .../channels/UnknownChannelRecord.d.ts | 58 + .../src/general/channels/index.d.ts | 13 + packages/discord-types/src/general/index.d.ts | 18 + packages/discord-types/src/general/misc.d.ts | 9 + packages/discord-types/src/index.d.ts | 9 + packages/discord-types/src/internal.d.ts | 14 + .../src/stores/ChannelStore.d.ts | 41 + .../src/stores/GuildMemberStore.d.ts | 39 + .../discord-types/src/stores/GuildStore.d.ts | 27 + .../src/stores/MessageStore.d.ts | 31 + .../src/stores/RelationshipStore.d.ts | 39 + .../src/stores/SelectedChannelStore.d.ts | 27 + .../src/stores/SelectedGuildStore.d.ts | 32 + .../src/stores/UserProfileStore.d.ts | 60 + .../discord-types/src/stores/UserStore.d.ts | 43 + .../stores/abstract/FluxPersistedStore.d.ts | 55 + .../stores/abstract/FluxSnapshotStore.d.ts | 36 + .../src/stores/abstract/FluxStore.d.ts | 76 + .../src/stores/abstract/index.d.ts | 9 + packages/discord-types/src/stores/index.d.ts | 17 + packages/discord-types/src/stores/utils.d.ts | 27 + packages/discord-types/tsconfig.eslint.json | 19 + packages/discord-types/tsconfig.json | 30 + src/plugins/index.ts | 6 +- src/utils/types.ts | 4 +- src/webpack/common/stores.ts | 49 +- src/webpack/common/types/fluxEvents.d.ts | 40 + src/webpack/common/types/index.d.ts | 2 +- src/webpack/common/types/stores.d.ts | 2644 +---------------- src/webpack/common/types/utils.d.ts | 216 +- src/webpack/common/utils.ts | 2 +- 56 files changed, 4240 insertions(+), 2851 deletions(-) create mode 100644 packages/discord-types/LICENSE create mode 100644 packages/discord-types/README.md create mode 100644 packages/discord-types/eslint.config.mjs create mode 100644 packages/discord-types/package.json create mode 100644 packages/discord-types/src/flux/FluxDispatcher.d.ts create mode 100644 packages/discord-types/src/flux/fluxActionHandlers.d.ts rename {src/webpack/common/types => packages/discord-types/src/flux}/fluxActions.d.ts (97%) create mode 100644 packages/discord-types/src/flux/index.d.ts create mode 100644 packages/discord-types/src/general/ChannelMessages.d.ts create mode 100644 packages/discord-types/src/general/Clan.d.ts create mode 100644 packages/discord-types/src/general/GuildMember.d.ts create mode 100644 packages/discord-types/src/general/GuildMemberProfile.d.ts create mode 100644 packages/discord-types/src/general/GuildRecord.d.ts create mode 100644 packages/discord-types/src/general/ImmutableRecord.d.ts create mode 100644 packages/discord-types/src/general/MessageRecord.d.ts create mode 100644 packages/discord-types/src/general/Role.d.ts create mode 100644 packages/discord-types/src/general/UserProfile.d.ts create mode 100644 packages/discord-types/src/general/UserRecord.d.ts create mode 100644 packages/discord-types/src/general/channels/ChannelRecord.d.ts create mode 100644 packages/discord-types/src/general/channels/ForumChannelRecord.d.ts create mode 100644 packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts create mode 100644 packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts create mode 100644 packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts create mode 100644 packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts create mode 100644 packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts create mode 100644 packages/discord-types/src/general/channels/index.d.ts create mode 100644 packages/discord-types/src/general/index.d.ts create mode 100644 packages/discord-types/src/general/misc.d.ts create mode 100644 packages/discord-types/src/index.d.ts create mode 100644 packages/discord-types/src/internal.d.ts create mode 100644 packages/discord-types/src/stores/ChannelStore.d.ts create mode 100644 packages/discord-types/src/stores/GuildMemberStore.d.ts create mode 100644 packages/discord-types/src/stores/GuildStore.d.ts create mode 100644 packages/discord-types/src/stores/MessageStore.d.ts create mode 100644 packages/discord-types/src/stores/RelationshipStore.d.ts create mode 100644 packages/discord-types/src/stores/SelectedChannelStore.d.ts create mode 100644 packages/discord-types/src/stores/SelectedGuildStore.d.ts create mode 100644 packages/discord-types/src/stores/UserProfileStore.d.ts create mode 100644 packages/discord-types/src/stores/UserStore.d.ts create mode 100644 packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts create mode 100644 packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts create mode 100644 packages/discord-types/src/stores/abstract/FluxStore.d.ts create mode 100644 packages/discord-types/src/stores/abstract/index.d.ts create mode 100644 packages/discord-types/src/stores/index.d.ts create mode 100644 packages/discord-types/src/stores/utils.d.ts create mode 100644 packages/discord-types/tsconfig.eslint.json create mode 100644 packages/discord-types/tsconfig.json create mode 100644 src/webpack/common/types/fluxEvents.d.ts diff --git a/.eslintrc.json b/.eslintrc.json index 2ee24e8b3..e4c962752 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,7 @@ { "root": true, "parser": "@typescript-eslint/parser", - "ignorePatterns": ["dist", "browser"], + "ignorePatterns": ["dist", "browser", "packages/discord-types"], "plugins": [ "@typescript-eslint", "simple-header", diff --git a/packages/discord-types/LICENSE b/packages/discord-types/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/packages/discord-types/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/packages/discord-types/README.md b/packages/discord-types/README.md new file mode 100644 index 000000000..9cc145bb1 --- /dev/null +++ b/packages/discord-types/README.md @@ -0,0 +1 @@ +discord-types diff --git a/packages/discord-types/eslint.config.mjs b/packages/discord-types/eslint.config.mjs new file mode 100644 index 000000000..b8d7d8961 --- /dev/null +++ b/packages/discord-types/eslint.config.mjs @@ -0,0 +1,165 @@ +import stylistic from "@stylistic/eslint-plugin"; +import eslintPluginHeaders from "eslint-plugin-headers"; +import eslintPluginImport from "eslint-plugin-import-x"; +import simpleImportSort from "eslint-plugin-simple-import-sort"; +import eslintPluginUnicorn from "eslint-plugin-unicorn"; +import tseslint from "typescript-eslint"; + +export default tseslint.config( + { + files: ["**/*.mjs", "**/*.ts"], + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: ["./tsconfig.eslint.json", "./tsconfig.json"], + tsconfigRootDir: import.meta.dirname, + warnOnUnsupportedTypeScriptVersion: false + } + }, + plugins: { + "@stylistic": stylistic, + "@typescript-eslint": tseslint.plugin, + headers: eslintPluginHeaders, + import: eslintPluginImport, + "simple-import-sort": simpleImportSort, + unicorn: eslintPluginUnicorn, + }, + rules: { + "@stylistic/array-bracket-newline": ["error", "consistent"], + "@stylistic/array-bracket-spacing": "error", + "@stylistic/array-element-newline": ["error", "consistent"], + "@stylistic/arrow-parens": ["error", "as-needed"], + "@stylistic/block-spacing": "error", + "@stylistic/brace-style": "error", + "@stylistic/comma-dangle": ["error", "only-multiline"], + "@stylistic/comma-spacing": "error", + "@stylistic/comma-style": "error", + "@stylistic/computed-property-spacing": "error", + "@stylistic/dot-location": ["error", "property"], + "@stylistic/eol-last": "error", + "@stylistic/function-call-argument-newline": ["error", "consistent"], + "@stylistic/function-call-spacing": "error", + "@stylistic/function-paren-newline": ["error", "consistent"], + "@stylistic/indent": "error", + "@stylistic/key-spacing": "error", + "@stylistic/keyword-spacing": "error", + "@stylistic/linebreak-style": "error", + "@stylistic/member-delimiter-style": ["error", { singleline: { requireLast: true } }], + "@stylistic/new-parens": "error", + "@stylistic/no-extra-semi": "error", + "@stylistic/no-floating-decimal": "error", + "@stylistic/no-multi-spaces": "error", + "@stylistic/no-multiple-empty-lines": ["error", { max: 2, maxBOF: 0, maxEOF: 0 }], + "@stylistic/no-trailing-spaces": "error", + "@stylistic/no-whitespace-before-property": "error", + "@stylistic/object-curly-newline": "error", + "@stylistic/object-curly-spacing": ["error", "always"], + "@stylistic/rest-spread-spacing": "error", + "@stylistic/quote-props": ["error", "as-needed"], + "@stylistic/quotes": "error", + "@stylistic/semi": "error", + "@stylistic/semi-spacing": "error", + "@stylistic/semi-style": "error", + "@stylistic/space-before-blocks": "error", + "@stylistic/space-before-function-paren": ["error", { named: "never" }], + "@stylistic/space-in-parens": "error", + "@stylistic/space-infix-ops": "error", + "@stylistic/space-unary-ops": "error", + "@stylistic/spaced-comment": "error", + "@stylistic/switch-colon-spacing": "error", + "@stylistic/template-curly-spacing": "error", + "@stylistic/template-tag-spacing": "error", + "@stylistic/type-annotation-spacing": "error", + "@stylistic/type-generic-spacing": "error", + "@stylistic/type-named-tuple-spacing": "error", + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/ban-types": "error", + "@typescript-eslint/class-literal-property-style": "error", + "@typescript-eslint/consistent-type-definitions": "error", + "@typescript-eslint/consistent-type-exports": ["error", { fixMixedExportsWithInlineTypeSpecifier: true }], + "@typescript-eslint/consistent-type-imports": ["error", { fixStyle: "inline-type-imports" }], + "@typescript-eslint/member-ordering": ["error", { + default: { + memberTypes: [ + "call-signature", + "signature", + "constructor", + ["static-accessor", "static-field", "static-get", "static-method", "static-set"], + ["accessor", "get", "method", "set"], + "field" + ], + order: "alphabetically-case-insensitive" + } + }], + "@typescript-eslint/method-signature-style": "error", + "@typescript-eslint/naming-convention": ["error", { selector: "typeLike", format: ["PascalCase"] }], + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-duplicate-type-constituents": "error", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-redundant-type-constituents": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unused-vars": ["error", { + args: "all", + argsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_" + }], + "@typescript-eslint/no-useless-empty-export": "error", + "@typescript-eslint/prefer-enum-initializers": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", + "import/extensions": "error", + "import/first": "error", + "import/newline-after-import": ["error", { considerComments: true }], + "import/no-absolute-path": "error", + "import/no-duplicates": "error", + "import/no-empty-named-blocks": "error", + "import/no-extraneous-dependencies": "error", + "import/no-relative-packages": "error", + "import/no-self-import": "error", + "import/no-unassigned-import": "error", + "import/no-useless-path-segments": "error", + "simple-import-sort/exports": "error", + "simple-import-sort/imports": ["error", { groups: [["^[^.]"]] }], + "unicorn/escape-case": "error", + "unicorn/filename-case": ["error", { cases: { camelCase: true, pascalCase: true } }], + "unicorn/no-hex-escape": "error", + "unicorn/no-zero-fractions": "error", + "unicorn/number-literal-case": "error", + "unicorn/numeric-separators-style": ["error", { number: { minimumDigits: 0 } }], + "unicorn/prefer-export-from": ["error", { ignoreUsedVariables: true }], + } + }, + { + files: ["src/**/*.ts"], + rules: { + "headers/header-format": ["error", { + source: "string", + content: [ + "discord-types", + "Copyright (C) {year} {author}", + "SPDX-License-Identifier: GPL-3.0-or-later" + ].join("\n"), + blockPrefix: "\n", + trailingNewlines: 2, + variables: { + year: "2024", + author: "Vencord project contributors" + } + }], + "import/no-default-export": "error", + "import/no-unused-modules": "error", + "no-restricted-syntax": ["error", "TSEnumDeclaration[const=false]"], + } + }, +); diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json new file mode 100644 index 000000000..1194ba0f6 --- /dev/null +++ b/packages/discord-types/package.json @@ -0,0 +1,32 @@ +{ + "name": "@vencord/discord-types", + "version": "0.0.0-development", + "description": "", + "license": "GPL-3.0-or-later", + "author": "Vencord", + "repository": { + "type": "git", + "url": "https://github.com/Vendicated/Vencord.git", + "directory": "packages/discord-types" + }, + "files": ["src"], + "sideEffects": false, + "types": "./src/index.d.ts", + "dependencies": { + "@types/events": "~3.0.3", + "dependency-graph": "0.9.0", + "moment": "2.22.2", + "type-fest": "^4.18.3" + }, + "devDependencies": { + "@eslint-types/unicorn": "^52.0.0", + "@stylistic/eslint-plugin": "^2.1.0", + "eslint": "^9.3.0", + "eslint-plugin-headers": "^1.1.2", + "eslint-plugin-import-x": "^0.5.1", + "eslint-plugin-simple-import-sort": "^12.1.0", + "eslint-plugin-unicorn": "^53.0.0", + "typescript": "^5.4.5", + "typescript-eslint": "^8.0.0-alpha.20" + } +} diff --git a/packages/discord-types/src/flux/FluxDispatcher.d.ts b/packages/discord-types/src/flux/FluxDispatcher.d.ts new file mode 100644 index 000000000..75c44960e --- /dev/null +++ b/packages/discord-types/src/flux/FluxDispatcher.d.ts @@ -0,0 +1,85 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; +import type { FluxActionHandler, FluxActionHandlerMap, FluxActionHandlersGraph } from "./fluxActionHandlers"; +import type { ExtractAction, FluxAction, FluxActionLogger, FluxActionType } from "./fluxActions"; + +export const enum FluxDispatchBand { + Early = 0, + Database = 1, + Default = 2, +} + +export interface SentryUtils { + addBreadcrumb: (breadcrumb: { + category?: string | undefined; + data?: any; + level?: string | undefined; + message?: string | undefined; + type?: string | undefined; + }) => void; +} + +/* + * The only reason to make Dispatcher generic with a type parameter for the actions it handles would be to allow plugins + * to create their own Flux stores with their own actions. However, this would require removing all contravariant properties + * from Dispatcher so that plugins could create stores with their own Dispatcher instances. This would be required, since + * the alternative option, allowing plugins to use the main Dispatcher instance, would require removing type information for + * Discord's actions from Dispatcher, and would introduce the potential for action type name conflicts. Both of these + * options would harm the main use case of these types. Furthermore, there are other state management libraries bundled with + * Discord that plugins can use (e.g., Redux, Zustand), and Discord seems to only use one Dispatcher instance (all ~398 + * stores use the same instance), implying that their type for Dispatcher is also not generic. + */ +export class FluxDispatcher { + constructor( + defaultBand?: FluxDispatchBand | undefined /* = FluxDispatchBand.Early */, + actionLogger?: FluxActionLogger | Nullish, + sentryUtils?: SentryUtils | Nullish + ); + + _dispatch( + action: FluxAction, + func: (storeName: string, func: () => T) => T + ): boolean | undefined; + _dispatchWithDevtools(action: FluxAction): void; + _dispatchWithLogging(action: FluxAction): void; + addDependencies(fromDispatchToken: string, toDispatchTokens: string[]): void; + addInterceptor(interceptor: FluxActionHandler): void; + createToken(): string; + dispatch(action: FluxAction): Promise; + flushWaitQueue(): void; + isDispatching(): boolean; + register( + storeName: string, + actionHandlers: FluxActionHandlerMap, + storeDidChange: FluxActionHandler, + dispatchBand?: FluxDispatchBand | Nullish, + dispatchToken?: string | undefined + ): string; + subscribe( + actionType: ActionType, + listener: FluxActionHandler> + ): void; + unsubscribe( + actionType: ActionType, + listener: FluxActionHandler> + ): void; + wait(callback: () => void): void; + + _actionHandlers: FluxActionHandlersGraph; + _currentDispatchActionType: FluxActionType | Nullish; + _defaultBand: FluxDispatchBand; + _interceptors: ((action: FluxAction) => boolean)[]; + _processingWaitQueue: boolean; + _sentryUtils: SentryUtils | Nullish; + _subscriptions: { + [ActionType in FluxActionType]?: Set>> | Nullish; + }; + _waitQueue: (() => void)[]; + actionLogger: FluxActionLogger; + functionCache: FluxActionHandlerMap; +} diff --git a/packages/discord-types/src/flux/fluxActionHandlers.d.ts b/packages/discord-types/src/flux/fluxActionHandlers.d.ts new file mode 100644 index 000000000..58df9df95 --- /dev/null +++ b/packages/discord-types/src/flux/fluxActionHandlers.d.ts @@ -0,0 +1,67 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { DepGraph } from "dependency-graph"; + +import type { Nullish } from "../internal"; +import type { ExtractAction, FluxAction, FluxActionType } from "./fluxActions"; +import type { FluxDispatchBand } from "./FluxDispatcher"; + +/* +export type FluxActionHandler = Action extends FluxAction + ? Exclude, "type"> extends never + ? (action: any) => Return + : (action: Action) => Return + : never; +*/ + +export type FluxActionHandler = (action: Action) => void; + +export type FluxActionHandlerMap + = { [ActionType in Action["type"]]: FluxActionHandler>; }; + +interface FluxActionHandlersGraphNode { + actionHandler: FluxActionHandlerMap; + band: FluxDispatchBand; + name: string; // storeName + storeDidChange: FluxActionHandler; +} + +type FluxOrderedActionHandlers = { + actionHandler: FluxActionHandler; + name: string; // storeName + storeDidChange: FluxActionHandler; +}[]; + +export class FluxActionHandlersGraph { + _addToBand(dispatchToken: string, dispatchBand: FluxDispatchBand): void; + _bandToken(dispatchBand: FluxDispatchBand): string; + _computeOrderedActionHandlers( + actionType: ActionType + ): FluxOrderedActionHandlers>[]; + _computeOrderedCallbackTokens(): string[]; + _invalidateCaches(): void; + _validateDependencies(fromDispatchToken: string, toDispatchToken: string): void; + addDependencies(fromDispatchToken: string, toDispatchTokens: string[]): void; + createToken(): string; + getOrderedActionHandlers({ type }: { + type: ActionType; + }): FluxOrderedActionHandlers>; + register( + storeName: string, + actionHandlers: FluxActionHandlerMap, + storeDidChange: FluxActionHandler, + dispatchBand: FluxDispatchBand, + dispatchToken?: string | undefined + ): string; + + _dependencyGraph: DepGraph; + _lastID: number; + _orderedActionHandlers: { + [ActionType in FluxActionType]?: FluxOrderedActionHandlers> | Nullish; + }; + _orderedCallbackTokens: string[] | Nullish; +} diff --git a/src/webpack/common/types/fluxActions.d.ts b/packages/discord-types/src/flux/fluxActions.d.ts similarity index 97% rename from src/webpack/common/types/fluxActions.d.ts rename to packages/discord-types/src/flux/fluxActions.d.ts index 02d180112..25474c52a 100644 --- a/src/webpack/common/types/fluxActions.d.ts +++ b/packages/discord-types/src/flux/fluxActions.d.ts @@ -1,38 +1,12 @@ /* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2023 Vendicated and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . -*/ + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ -/* -function generateFluxActionType() { - const actionTypes = new Set(); +import type { EventEmitter } from "events"; - const { FluxDispatcher } = Vencord.Webpack.Common; - for (const actionType in FluxDispatcher._subscriptions) - actionTypes.add(actionType); - for (const actionType in FluxDispatcher._actionHandlers._orderedActionHandlers) - actionTypes.add(actionType); - const { nodes } = FluxDispatcher._actionHandlers._dependencyGraph; - for (const dispatchToken in nodes) - for (const actionType in nodes[dispatchToken].actionHandler) - actionTypes.add(actionType); - - return `"${[...actionTypes].sort().join('" | "')}"`; -} -*/ +import type { Nullish } from "../internal"; type FluxGenericAction = ActionType extends unknown ? { type: ActionType; } @@ -54,4 +28,65 @@ export type ExtractAction + = [storeName: string, actionType: ActionType, totalTime: number]; + +export class FluxActionLog { + constructor(actionType: Action["type"]); + + get name(): Action["type"]; + toJSON(): Pick & { + created_at: FluxActionLog["createdAt"]; + }; + + action: Action; + createdAt: Date; + error: Error | undefined; + id: number; + startTime: number; + totalTime: number; + traces: { + name: string; + time: number; + }[]; +} + +export class FluxActionLogger extends EventEmitter { + constructor(options?: { persist?: boolean | undefined; } | undefined); + + getLastActionMetrics( + title: string, + limit?: number | undefined /* = 20 */ + ): FluxActionMetric[]; + getSlowestActions( + actionType?: ActionType | Nullish, + limit?: number | undefined /* = 20 */ + ): FluxActionMetric[]; + log( + action: Action, + callback: (func: (storeName: string, func: () => T) => T) => void + ): FluxActionLog; + + logs: FluxActionLog[]; + persist: boolean; +} + +/* +function generateFluxActionType() { + const actionTypes = new Set(); + + const { FluxDispatcher } = Vencord.Webpack.Common; + for (const actionType in FluxDispatcher._subscriptions) + actionTypes.add(actionType); + for (const actionType in FluxDispatcher._actionHandlers._orderedActionHandlers) + actionTypes.add(actionType); + const { nodes } = FluxDispatcher._actionHandlers._dependencyGraph; + for (const dispatchToken in nodes) + for (const actionType in nodes[dispatchToken].actionHandler) + actionTypes.add(actionType); + + return `"${[...actionTypes].sort().join('" | "')}"`; +} +*/ + export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_START" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETTINGS_FETCH_START" | "CLAN_SETTINGS_FETCH_SUCCESS" | "CLAN_SETTINGS_SUBMIT" | "CLAN_SETTINGS_SUBMIT_ERROR" | "CLAN_SETTINGS_SUBMIT_SUCCESS" | "CLAN_SETTINGS_UPDATE" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_DEBUG_CLEAR_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_LOG_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_TOGGLE_FAST_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_INBOX_STALE" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTENT_INVENTORY_TRACK_ITEM_IMPRESSIONS" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V2" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DELIVERY_OVERRIDE" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRACK" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR" | "USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/packages/discord-types/src/flux/index.d.ts b/packages/discord-types/src/flux/index.d.ts new file mode 100644 index 000000000..21dd8ec26 --- /dev/null +++ b/packages/discord-types/src/flux/index.d.ts @@ -0,0 +1,9 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export * from "./fluxActionHandlers"; +export * from "./fluxActions"; +export * from "./FluxDispatcher"; diff --git a/packages/discord-types/src/general/ChannelMessages.d.ts b/packages/discord-types/src/general/ChannelMessages.d.ts new file mode 100644 index 000000000..730f86317 --- /dev/null +++ b/packages/discord-types/src/general/ChannelMessages.d.ts @@ -0,0 +1,155 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { MessageRecord } from "./MessageRecord"; + +export class ChannelMessages { + constructor(channelId: string); + + static _channelMessages: any; // TEMP + static clear(e?: any): any; // TEMP + static clearCache(e?: any): any; // TEMP + static commit(e?: any): any; // TEMP + static forEach(e?: any): any; // TEMP + static get(e?: any): any; // TEMP + static getOrCreate(e?: any): any; // TEMP + static hasPresent(e?: any): any; // TEMP + + _clearMessages(): void; + _merge(e?: any): any; // TEMP + addCachedMessages(e?: any, t?: any): any; // TEMP + filter( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => value is T, + thisArg?: unknown + ): T[]; + filter( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, + thisArg?: unknown + ): MessageRecord[]; + findNewest(e?: any): any; // TEMP + findOldest(e?: any): any; // TEMP + first(): MessageRecord | undefined; + focusOnMessage(e?: any): any; // TEMP + forAll( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, + thisArg?: unknown + ): void; + forEach( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, + thisArg?: unknown + ): void; + get(e?: any): any; // TEMP + getAfter(e?: any): any; // TEMP + getByIndex(index: number): any /* | undefined */; // TEMP + getManyAfter(e?: any, t?: any, n?: any): any; // TEMP + getManyBefore(e?: any, t?: any, n?: any): any; // TEMP + has(e?: any): boolean; // TEMP + hasAfterCached(e?: any): any; // TEMP + hasBeforeCached(e?: any): any; // TEMP + hasPresent(): any; // TEMP + indexOf(searchElement: any): number; // TEMP + jumpToMessage(e?: any): any; // TEMP + jumpToPresent(e?: any): any; // TEMP + last(): MessageRecord | undefined; + get length(): number; + loadComplete(e?: any): any; // TEMP + loadFromCache(e?: any, t?: any): any; // TEMP + loadStart(e?: any): any; // TEMP + map( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => T, + thisArg?: unknown + ): T[]; + merge(e?: any): any; // TEMP + mergeDelta(): any; // TEMP + mutate(e?: any): any; // TEMP + receiveMessage(e?: any): any; // TEMP + receivePushNotification(e?: any): any; // TEMP + reduce( + callback: ( + previousValue: MessageRecord, + currentValue: MessageRecord, + currentIndex: number, + array: MessageRecord[] + ) => MessageRecord, + initialValue?: MessageRecord | undefined + ): MessageRecord; + reduce( + callback: ( + previousValue: MessageRecord, + currentValue: T, + currentIndex: number, + array: MessageRecord[] + ) => T, + initialValue: T + ): T; + remove(e?: any): any; // TEMP + removeMany(e?: any): any; // TEMP + replace(e?: any, t?: any): any; // TEMP + reset(e?: any): any; // TEMP + some( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, + thisArg?: unknown + ): boolean; + toArray(): MessageRecord[]; + truncate(e?: any, t?: any): any; // TEMP + truncateBottom(e?: any): any; // TEMP + truncateTop(e?: any): any; // TEMP + update(e?: any, t?: any): any; // TEMP + + _after: MessageCache; + _array: MessageRecord[]; + _before: MessageCache; + _map: { [messageId: string]: MessageRecord; }; + cached: boolean; + channelId: string; + error: boolean; + focusTargetId: any; // TEMP + hasFetched: boolean; + hasMoreAfter: boolean; + hasMoreBefore: boolean; + jumped: boolean; + jumpedToPresent: boolean; + jumpFlash: boolean; + jumpReturnTargetId: string | null; // TEMP + jumpSequenceId: number; // TEMP + jumpTargetId: string | null; // TEMP + jumpTargetOffset: number; // TEMP + jumpType: JumpType; + loadingMore: boolean; + ready: boolean; + revealedMessageId: string | null; // TEMP +} + +export class MessageCache { + constructor(isCacheBefore: boolean); + + cache(e?: any): void; // TEMP + clear(): void; // TEMP + clone(): any; // TEMP + extract(e?: any): any; // TEMP + extractAll(): any; // TEMP + forEach(callback: (value: any, index: number, array: any[]) => void, thisArg?: unknown): void; // TEMP + get(e?: any): any; // TEMP + has(e?: any): boolean; // TEMP + get length(): any; // TEMP + remove(e?: any): void; // TEMP + removeMany(e?: any): void; // TEMP + replace(e?: any, t?: any): void; // TEMP + update(e?: any, t?: any): void; // TEMP + get wasAtEdge(): any; // TEMP + set wasAtEdge(e: any); // TEMP + + _isCacheBefore: boolean; + _map: any; // TEMP + _messages: any[]; // TEMP + _wasAtEdge: boolean; +} + +// Original name: JumpTypes +export const enum JumpType { + ANIMATED = "ANIMATED", + INSTANT = "INSTANT", +} diff --git a/packages/discord-types/src/general/Clan.d.ts b/packages/discord-types/src/general/Clan.d.ts new file mode 100644 index 000000000..bed54ad7b --- /dev/null +++ b/packages/discord-types/src/general/Clan.d.ts @@ -0,0 +1,75 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export interface Clan { + badge: { + badgeKind: ClanBadgeKind; + primaryColor: string; + secondaryColor: string; + }; + banner: ClanBannerKind; + bannerHash: string | null; + branding: { + primaryColor: string; + secondaryColor: string; + }; + description: string | null; + games: string[]; + icon: string | null; + id: string; + memberCount: number; + name: string; + playstyle: ClanPlaystyle; + tag: string; + traits: string[]; + wildcardDescriptors: string[]; +} + +export const enum ClanBadgeKind { + SWORD = 0, + WATER_DROP = 1, + SKULL = 2, + TOADSTOOL = 3, + MOON = 4, + LIGHTNING = 5, + LEAF = 6, + HEART = 7, + FIRE = 8, + COMPASS = 9, + CROSSHAIRS = 10, + FLOWER = 11, + FORCE = 12, + GEM = 13, + LAVA = 14, + PSYCHIC = 15, + SMOKE = 16, + SNOW = 17, + SOUND = 18, + SUN = 19, + WIND = 20, +} + +export const enum ClanBannerKind { + NIGHT_SKY = 0, + CASTLE = 1, + WORLD_MAP = 2, + SEA_FOAM = 3, + WARP_TUNNEL = 4, + HOUSE = 5, + HEIGHTMAP = 6, + MESH = 7, + SPATTER = 8, +} + +// Original name: ClanPlaystyles +export const enum ClanPlaystyle { + NONE = 0, + SOCIAL = 1, + CASUAL = 2, + COMPETITIVE = 3, + CREATIVE = 4, + VERY_HARDCORE = 5, +} diff --git a/packages/discord-types/src/general/GuildMember.d.ts b/packages/discord-types/src/general/GuildMember.d.ts new file mode 100644 index 000000000..dd66d25fa --- /dev/null +++ b/packages/discord-types/src/general/GuildMember.d.ts @@ -0,0 +1,43 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; +import type { AvatarDecorationData } from "./UserRecord"; + +export interface GuildMember { + avatar: string | null; + avatarDecoration: AvatarDecorationData | undefined; + colorRoleId: string | undefined; + colorString: string | undefined; + communicationDisabledUntil: string | null; + flags: GuildMemberFlags; + fullProfileLoadedTimestamp: number | undefined; + guildId: string; + highestRoleId: string | undefined; + hoistRoleId: string | undefined; + iconRoleId: string | undefined; + isPending: boolean; + joinedAt: string; + nick: string | null; + premiumSince: string | null; + roles: string[]; + unusualDMActivityUntil: string | Nullish; + userId: string; +} + +export const enum GuildMemberFlags { + DID_REJOIN = 1 << 0, + COMPLETED_ONBOARDING = 1 << 1, + BYPASSES_VERIFICATION = 1 << 2, + STARTED_ONBOARDING = 1 << 3, + IS_GUEST = 1 << 4, + STARTED_HOME_ACTIONS = 1 << 5, + COMPLETED_HOME_ACTIONS = 1 << 6, + AUTOMOD_QUARANTINED_USERNAME_OR_GUILD_NICKNAME = 1 << 7, + AUTOMOD_QUARANTINED_BIO = 1 << 8, + DM_SETTINGS_UPSELL_ACKNOWLEDGED = 1 << 9, + AUTOMOD_QUARANTINED_CLAN_TAG = 1 << 10, +} diff --git a/packages/discord-types/src/general/GuildMemberProfile.d.ts b/packages/discord-types/src/general/GuildMemberProfile.d.ts new file mode 100644 index 000000000..2a1519a3e --- /dev/null +++ b/packages/discord-types/src/general/GuildMemberProfile.d.ts @@ -0,0 +1,21 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; +import type { ProfileBadge, ProfileThemeColors } from "./UserProfile"; + +export interface GuildMemberProfile { + accentColor: number | Nullish; + badges: ProfileBadge[]; + banner: string | Nullish; + bio: string | undefined; + guildId: string; + popoutAnimationParticleType: any /* | Nullish */; // TEMP + profileEffectId: string | undefined; + pronouns: string; + themeColors: ProfileThemeColors | Nullish; + userId: string; +} diff --git a/packages/discord-types/src/general/GuildRecord.d.ts b/packages/discord-types/src/general/GuildRecord.d.ts new file mode 100644 index 000000000..0fd70688d --- /dev/null +++ b/packages/discord-types/src/general/GuildRecord.d.ts @@ -0,0 +1,210 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; +import type { Clan } from "./Clan"; +import type { ImmutableRecord } from "./ImmutableRecord"; +import type { IconSource } from "./misc"; +import type { UserRecord } from "./UserRecord"; + +export type GuildRecordOwnProperties = Pick; + +export class GuildRecord< + OwnProperties extends GuildRecordOwnProperties = GuildRecordOwnProperties +> extends ImmutableRecord { + constructor(guildFromServer: Record); // TEMP + + get acronym(): string; + canHaveRaidActivityAlerts(): boolean; + getApplicationId(): string | null; + getEveryoneRoleId(): string; + getIconSource(iconSize?: number | undefined, canAnimate?: boolean | undefined): IconSource; + getIconURL(iconSize?: number | undefined, canAnimate?: boolean | undefined): string; + getMaxEmojiSlots(): number; + getMaxRoleSubscriptionEmojiSlots(): number; + getMaxSoundboardSlots(): number; + getSafetyAlertsChannelId(): string | null; + hasCommunityInfoSubheader(): boolean; + hasFeature(guildFeature: GuildFeature): boolean; + hasVerificationGate(): boolean; + isCommunity(): boolean; + isLurker(): boolean; + isNew(): boolean; + isOwner(userOrUserId?: UserRecord | string | Nullish): boolean; + isOwnerWithRequiredMfaLevel(userOrUserId?: UserRecord | string | Nullish): boolean; + updateJoinedAt(joinedAt: Date | string): this; + + afkChannelId: string | null; + afkTimeout: number; + application_id: string | null; + banner: string | null; + clan: Clan | null; + defaultMessageNotifications: UserNotificationSetting; + description: string | null; + discoverySplash: string | null; + explicitContentFilter: GuildExplicitContentFilterType; + features: Set; + homeHeader: string | null; + hubType: GuildHubType | null; + icon: string | null; + id: string; + joinedAt: Date; + latestOnboardingQuestionId: string | null; + maxMembers: number; + maxStageVideoChannelUsers: number; + maxVideoChannelUsers: number; + mfaLevel: MFALevel; + name: string; + nsfwLevel: GuildNSFWContentLevel; + ownerId: string | null; + preferredLocale: string; + premiumProgressBarEnabled: boolean; + premiumSubscriberCount: number; + premiumTier: BoostedGuildTier; + publicUpdatesChannelId: string | null; + rulesChannelId: string | null; + safetyAlertsChannelId: string | null; + splash: string | null; + systemChannelFlags: SystemChannelFlags; + systemChannelId: string | null; + vanityURLCode: string | null; + verificationLevel: VerificationLevel; +} + +// Original name: UserNotificationSettings +export const enum UserNotificationSetting { + ALL_MESSAGES = 0, + ONLY_MENTIONS = 1, + NO_MESSAGES = 2, + NULL = 3, +} + +// Original name: GuildExplicitContentFilterTypes +export const enum GuildExplicitContentFilterType { + DISABLED = 0, + MEMBERS_WITHOUT_ROLES = 1, + ALL_MEMBERS = 2, +} + +// Original name: GuildFeatures +export const enum GuildFeature { + ANIMATED_BANNER = "ANIMATED_BANNER", + ANIMATED_ICON = "ANIMATED_ICON", + AUTOMOD_TRIGGER_USER_PROFILE = "AUTOMOD_TRIGGER_USER_PROFILE", + AUTO_MODERATION = "AUTO_MODERATION", + BANNER = "BANNER", + BURST_REACTIONS = "BURST_REACTIONS", + CHANNEL_ICON_EMOJIS_GENERATED = "CHANNEL_ICON_EMOJIS_GENERATED", + CLAN = "CLAN", + CLAN_PILOT_GENSHIN = "CLAN_PILOT_GENSHIN", + CLAN_PILOT_VALORANT = "CLAN_PILOT_VALORANT", + CLYDE_DISABLED = "CLYDE_DISABLED", + CLYDE_ENABLED = "CLYDE_ENABLED", + COMMERCE = "COMMERCE", + COMMUNITY = "COMMUNITY", + CREATOR_MONETIZABLE = "CREATOR_MONETIZABLE", + CREATOR_MONETIZABLE_DISABLED = "CREATOR_MONETIZABLE_DISABLED", + CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING = "CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING", + CREATOR_MONETIZABLE_PROVISIONAL = "CREATOR_MONETIZABLE_PROVISIONAL", + CREATOR_MONETIZABLE_RESTRICTED = "CREATOR_MONETIZABLE_RESTRICTED", + CREATOR_MONETIZABLE_WHITEGLOVE = "CREATOR_MONETIZABLE_WHITEGLOVE", + CREATOR_STORE_PAGE = "CREATOR_STORE_PAGE", + DISCOVERABLE = "DISCOVERABLE", + ENABLED_DISCOVERABLE_BEFORE = "ENABLED_DISCOVERABLE_BEFORE", + ENABLED_MODERATION_EXPERIENCE_FOR_NON_COMMUNITY = "ENABLED_MODERATION_EXPERIENCE_FOR_NON_COMMUNITY", + EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT = "EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT", + FEATURABLE = "FEATURABLE", + GENSHIN_L30 = "GENSHIN_L30", + GUILD_HOME_DEPRECATION_OVERRIDE = "GUILD_HOME_DEPRECATION_OVERRIDE", + GUILD_HOME_OVERRIDE = "GUILD_HOME_OVERRIDE", + GUILD_HOME_TEST = "GUILD_HOME_TEST", + GUILD_ONBOARDING = "GUILD_ONBOARDING", + GUILD_ONBOARDING_EVER_ENABLED = "GUILD_ONBOARDING_EVER_ENABLED", + GUILD_ONBOARDING_HAS_PROMPTS = "GUILD_ONBOARDING_HAS_PROMPTS", + GUILD_PRODUCTS_ALLOW_ARCHIVED_FILE = "GUILD_PRODUCTS_ALLOW_ARCHIVED_FILE", + GUILD_SERVER_GUIDE = "GUILD_SERVER_GUIDE", + GUILD_WEB_PAGE_VANITY_URL = "GUILD_WEB_PAGE_VANITY_URL", + HAS_DIRECTORY_ENTRY = "HAS_DIRECTORY_ENTRY", + HUB = "HUB", + INTERNAL_EMPLOYEE_ONLY = "INTERNAL_EMPLOYEE_ONLY", + INVITES_DISABLED = "INVITES_DISABLED", + INVITE_SPLASH = "INVITE_SPLASH", + LINKED_TO_HUB = "LINKED_TO_HUB", + MEMBER_VERIFICATION_GATE_ENABLED = "MEMBER_VERIFICATION_GATE_ENABLED", + MORE_EMOJI = "MORE_EMOJI", + MORE_STICKERS = "MORE_STICKERS", + NEWS = "NEWS", + NEW_THREAD_PERMISSIONS = "NEW_THREAD_PERMISSIONS", + NON_COMMUNITY_RAID_ALERTS = "NON_COMMUNITY_RAID_ALERTS", + PARTNERED = "PARTNERED", + PREVIEW_ENABLED = "PREVIEW_ENABLED", + PRODUCTS_AVAILABLE_FOR_PURCHASE = "PRODUCTS_AVAILABLE_FOR_PURCHASE", + RAID_ALERTS_DISABLED = "RAID_ALERTS_DISABLED", + ROLE_ICONS = "ROLE_ICONS", + ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE = "ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE", + ROLE_SUBSCRIPTIONS_ENABLED = "ROLE_SUBSCRIPTIONS_ENABLED", + SHARD = "SHARD", + SOUNDBOARD = "SOUNDBOARD", + SUMMARIES_ENABLED_BY_USER = "SUMMARIES_ENABLED_BY_USER", + SUMMARIES_ENABLED_GA = "SUMMARIES_ENABLED_GA", + SUMMARIES_OPT_OUT_EXPERIENCE = "SUMMARIES_OPT_OUT_EXPERIENCE", + TEXT_IN_STAGE_ENABLED = "TEXT_IN_STAGE_ENABLED", + TEXT_IN_VOICE_ENABLED = "TEXT_IN_VOICE_ENABLED", + THREADS_ENABLED = "THREADS_ENABLED", + THREADS_ENABLED_TESTING = "THREADS_ENABLED_TESTING", + VALORANT_L30 = "VALORANT_L30", + VANITY_URL = "VANITY_URL", + VERIFIED = "VERIFIED", + VIP_REGIONS = "VIP_REGIONS", + WELCOME_SCREEN_ENABLED = "WELCOME_SCREEN_ENABLED", +} + +// Original name: GuildHubTypes +export const enum GuildHubType { + DEFAULT = 0, + HIGH_SCHOOL = 1, + COLLEGE = 2, +} + +// Original name: MFALevels +export const enum MFALevel { + NONE = 0, + ELEVATED = 1, +} + +export const enum GuildNSFWContentLevel { + DEFAULT = 0, + EXPLICIT = 1, + SAFE = 2, + AGE_RESTRICTED = 3, +} + +// Original name: BoostedGuildTiers +export const enum BoostedGuildTier { + NONE = 0, + TIER_1 = 1, + TIER_2 = 2, + TIER_3 = 3, +} + +export const enum SystemChannelFlags { + SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0, + SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1, + SUPPRESS_GUILD_REMINDER_NOTIFICATIONS = 1 << 2, + SUPPRESS_JOIN_NOTIFICATION_REPLIES = 1 << 3, + SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS = 1 << 4, + SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES = 1 << 5, + SUPPRESS_CHANNEL_PROMPT_DEADCHAT = 1 << 7, +} + +// Original name: VerificationLevels +export const enum VerificationLevel { + NONE = 0, + LOW = 1, + MEDIUM = 2, + HIGH = 3, + VERY_HIGH = 4, +} diff --git a/packages/discord-types/src/general/ImmutableRecord.d.ts b/packages/discord-types/src/general/ImmutableRecord.d.ts new file mode 100644 index 000000000..9785df86e --- /dev/null +++ b/packages/discord-types/src/general/ImmutableRecord.d.ts @@ -0,0 +1,22 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +// Original name: Record +// Renamed to avoid name conflicts with TypeScripts's Record utility type. +export class ImmutableRecord { + merge(collection: Partial): this; + set(key: Key, value: OwnProperties[Key]): this; + toJS(): OwnProperties; + update( + key: Key, + updater: (value: OwnProperties[Key]) => OwnProperties[Key] + ): this; + update( + key: Key, + notSetValue: OwnProperties[Key], + updater: (value: OwnProperties[Key]) => OwnProperties[Key] + ): this; +} diff --git a/packages/discord-types/src/general/MessageRecord.d.ts b/packages/discord-types/src/general/MessageRecord.d.ts new file mode 100644 index 000000000..730ff4cdc --- /dev/null +++ b/packages/discord-types/src/general/MessageRecord.d.ts @@ -0,0 +1,693 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Duration, Moment } from "moment"; +import type { SnakeCasedProperties } from "type-fest"; + +import type { Nullish } from "../internal"; +import type { ChannelRecord, ChannelType } from "./channels"; +import type { ImmutableRecord } from "./ImmutableRecord"; +import type { ApplicationIntegrationType } from "./UserProfile"; +import type { UserRecord } from "./UserRecord"; + +export type MessageRecordOwnProperties = Pick; + +export class MessageRecord< + OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties +> extends ImmutableRecord { + constructor(messageFromServer: Record); // TEMP + + addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP + addReactionBatch(e?: any, t?: any): any; // TEMP + canDeleteOwnMessage(userId: string): boolean; + getChannelId(): string; + getReaction(e?: any): any; // TEMP + hasFlag(flag: MessageFlags): boolean; + isCommandType(): boolean; + isEdited(): boolean; + isFirstMessageInForumPost(channel: ChannelRecord): boolean; // TEMP + isInteractionPlaceholder(): boolean; + isPoll(): boolean; + isSystemDM(): boolean; + isUIKitComponents(): boolean; + removeReaction(e?: any, t?: any, n?: any): this; // TEMP + removeReactionsForEmoji(e?: any): this; // TEMP + toJS(): OwnProperties & SnakeCasedProperties>; + userHasReactedWithEmoji(e?: any, t?: any): boolean; // TEMP + + activity: any/* | null*/; // TEMP + activityInstance: any/* | null*/; // TEMP + application: any/* | null*/; // TEMP + applicationId: string | null; // TEMP + attachments: MessageAttachment[]; + author: UserRecord; + blocked: boolean; + bot: boolean; + call: MessageCall | null; + changelogId: string | null; + channel_id: string; + codedLinks: CodedLink[]; + colorString: string | undefined; + components: MessageComponent[]; + content: string; + customRenderedContent: any/* | undefined*/; // TEMP + editedTimestamp: Date | null; + embeds: MessageEmbed[]; + flags: MessageFlags; + giftCodes: string[]; + giftInfo: MessageGiftInfo | undefined; + id: string; + interaction: InteractionRecord | null; + interactionData: InteractionData | null; + interactionError: string | null; + interactionMetadata: InteractionMetadata | null; + isSearchHit: boolean; + isUnsupported: boolean; + loggingName: string | null; // TEMP + mentionChannels: ChannelMention[]; + mentioned: boolean; + mentionEveryone: boolean; + mentionRoles: string[]; + mentions: string[]; + messageReference: MessageReference | null; + messageSnapshots: any[]; // TEMP + nick: any/* | undefined */; // TEMP + nonce: string | number | null; + pinned: boolean; + poll: MessagePoll | undefined; + purchaseNotification: MessagePurchaseNotification | undefined; + reactions: MessageReaction[]; + referralTrialOfferId: string | null; // TEMP + roleSubscriptionData: MessageRoleSubscriptionData | undefined; + state: MessageStates; + stickerItems: MessageStickerItem[]; + stickers: MessageSticker[]; + timestamp: Date; + tts: boolean; + type: MessageTypes; + webhookId: string | null; +} + +export const enum MessageAttachmentFlags { + IS_CLIP = 1 << 0, + IS_THUMBNAIL = 1 << 1, + IS_REMIX = 1 << 2, + IS_SPOILER = 1 << 3, + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageAttachment { + content_scan_version?: number; + content_type?: string; + description?: string; + duration_secs?: number; + ephemeral?: boolean; + filename: string; + flags?: MessageAttachmentFlags; + height?: number | null; + id: string; + placeholder?: string; + placeholder_version?: number; + proxy_url: string; + size: number; + spoiler: boolean; + url: string; + waveform?: string; + width?: number | null; +} + +export interface MessageCall { + duration: Duration | null; + endedTimestamp: Moment | null; + participants: string[]; +} + +export const enum CodedLinkType { + ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", + APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", + BUILD_OVERRIDE = "BUILD_OVERRIDE", + CHANNEL_LINK = "CHANNEL_LINK", + EMBEDDED_ACTIVITY_INVITE = "EMBEDDED_ACTIVITY_INVITE", + EVENT = "EVENT", + GUILD_PRODUCT = "GUILD_PRODUCT", + INVITE = "INVITE", + MANUAL_BUILD_OVERRIDE = "MANUAL_BUILD_OVERRIDE", + QUESTS_EMBED = "QUESTS_EMBED", + SERVER_SHOP = "SERVER_SHOP", + TEMPLATE = "TEMPLATE", +} + +export interface CodedLink { + code: string; + type: CodedLinkType; +} + +export interface MessageComponentEmoji { + animated: boolean | undefined; + id: string | undefined; + name: string | undefined; + src: string | undefined; +} + +// Original name: ComponentType +// Renamed to avoid name conflicts with ComponentType from React. +export const enum MessageComponentType { + ACTION_ROW = 1, + BUTTON = 2, + STRING_SELECT = 3, + INPUT_TEXT = 4, + USER_SELECT = 5, + ROLE_SELECT = 6, + MENTIONABLE_SELECT = 7, + CHANNEL_SELECT = 8, + TEXT = 10, + MEDIA_GALLERY = 12, + SEPARATOR = 14, +} + +export interface MessageActionRowComponent { + components: Exclude[]; + id: string; + type: MessageComponentType.ACTION_ROW; +} + +export const enum ButtonStyle { + PRIMARY = 1, + SECONDARY = 2, + SUCCESS = 3, + DESTRUCTIVE = 4, + LINK = 5, + PREMIUM = 6, +} + +// TODO: Must have one of either `customId` or `url`, but never both. +// If a button has `url` it must have the `Link` button style. +export interface MessageButtonComponent { + customId: string | undefined; + disabled: boolean | undefined; + emoji: MessageComponentEmoji | undefined; + id: string; + label: string | undefined; + style: ButtonStyle; + type: MessageComponentType.BUTTON; + url: string | undefined; +} + +export const enum SelectOptionType { + STRING = 1, + USER = 2, + ROLE = 3, + CHANNEL = 4, + GUILD = 5, +} + +export interface SelectMenuOption { + default: boolean | undefined; + description: string | undefined; + emoji: MessageComponentEmoji | undefined; + label: string; + type: OptionType; + value: string; +} + +export interface MessageStringSelectComponent { + customId: string; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + options: SelectMenuOption[]; + placeholder: string; + type: MessageComponentType.STRING_SELECT; +} + +export const enum TextComponentStyle { + SMALL = 1, + PARAGRAPH = 2, +} + +export interface MessageTextInputComponent { + customId: string; + disabled: boolean | undefined; + id: string; + label: string; + maxLength: number | undefined; + minLength: number | undefined; + placeholder: string | undefined; + required: boolean; + style: TextComponentStyle; + type: MessageComponentType.INPUT_TEXT; + value: string | undefined; +} + +// Original name: SnowflakeSelectDefaultValueTypes +export const enum SnowflakeSelectDefaultValueType { + CHANNEL = "channel", + ROLE = "role", + USER = "user", +} + +export interface SelectMenuDefaultValue { + id: string; + type: DefaultValueType; +} + +export interface MessageUserSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.USER_SELECT; +} + +export interface MessageRoleSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.ROLE_SELECT; +} + +export interface MessageMentionableSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.MENTIONABLE_SELECT; +} + +export interface MessageChannelSelectComponent { + channelTypes: ChannelType[] | undefined; + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.CHANNEL_SELECT; +} + +export interface MessageTextComponent { + content: string | undefined; + id: string; + type: MessageComponentType.TEXT; +} + +export const enum ContentScanFlags { + EXPLICIT = 1, +} + +export interface MediaItem { + contentScanMetadata: { + contentScanFlags: ContentScanFlags | undefined; + version: number | undefined; + } | undefined; + contentType: string | undefined; + height: number | Nullish; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyUrl: string; + url: string; + width: number | Nullish; +} + +export interface MessageMediaGalleryComponent { + id: string; + items: { + description: string | undefined; + media: MediaItem; + spoiler: boolean; + }[]; + type: MessageComponentType.MEDIA_GALLERY; +} + +export const enum SeparatorSpacingSize { + SMALL = 1, + LARGE = 2, +} + +export interface MessageSeparatorComponent { + divider: boolean; + id: string; + spacing: SeparatorSpacingSize; + type: MessageComponentType.SEPARATOR; +} + +export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; + +export interface MessageEmbedAuthor { + iconProxyURL: string | undefined; + iconURL: string | undefined; + name: string; + url: string | undefined; +} + +export interface MessageEmbedField { + inline: boolean | undefined; + rawName: string; + rawValue: string; +} + +export const enum MessageEmbedFlags { + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageEmbedFooter { + iconProxyURL: string | undefined; + iconURL: string | undefined; + text: string; +} + +export interface MessageEmbedImage { + height: number | undefined; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number | undefined; +} + +export interface MessageEmbedProvider { + name: string; + url: string | undefined; +} + +// TODO: An embed thumbnail either: +// has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` +// or has only `height`, `url`, and `width`. +export interface MessageEmbedThumbnail { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number; +} + +// Original name: MessageEmbedTypes +export const enum MessageEmbedType { + APPLICATION_NEWS = "application_news", + ARTICLE = "article", + AUTO_MODERATION_MESSAGE = "auto_moderation_message", + AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", + GAMING_PROFILE = "gaming_profile", + GIFT = "gift", + GIFV = "gifv", + IMAGE = "image", + LINK = "link", + POLL_RESULT = "poll_result", + POST_PREVIEW = "post_preview", + RICH = "rich", + SAFETY_POLICY_NOTICE = "safety_policy_notice", + SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", + TEXT = "text", + TWEET = "tweet", + VIDEO = "video", + VOICE_CHANNEL = "voice_channel", +} + +// TODO: An embed video must have either `proxyURL` or `url`, and having both is possible. +// It might not be possible for an embed video to have `proxyURL` without `url`, though. +export interface MessageEmbedVideo { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string | undefined; + width: number; +} + +export interface MessageEmbed { + author?: MessageEmbedAuthor; + color?: string; + contentScanVersion: number | undefined; + fields: MessageEmbedField[]; + flags: MessageEmbedFlags | undefined; + footer?: MessageEmbedFooter; + id: string; + image?: MessageEmbedImage; + provider?: MessageEmbedProvider; + rawDescription: string | undefined; + rawTitle: string | undefined; + referenceId: string | undefined; + thumbnail?: MessageEmbedThumbnail; + timestamp?: Moment; + type: MessageEmbedType | undefined; + url: string | undefined; + video?: MessageEmbedVideo; +} + +export const 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, + 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, +} + +export interface MessageGiftInfo { + emoji?: string | null; // TEMP + sound?: string | null; // TEMP +} // TEMP + +export const enum InteractionTypes { + PING = 1, + APPLICATION_COMMAND = 2, + MESSAGE_COMPONENT = 3, + APPLICATION_COMMAND_AUTOCOMPLETE = 4, + MODAL_SUBMIT = 5, +} + +export class InteractionRecord extends ImmutableRecord { + constructor(interaction: Record); // TEMP + + static createFromServer(interactionFromServer: Record): InteractionRecord; // TEMP + + displayName: string; + id: string; + name: string; + type: InteractionTypes; + user: UserRecord; +} + +export interface InteractionData { + application_command: any; // TEMP + guild_id: any; // TEMP + id: any; // TEMP + name: any; // TEMP + options: any; // TEMP + type: any; // TEMP + version: any; // TEMP +} // TEMP + +export interface InteractionMetadata { + authorizing_integration_owners: Partial>; + id: string; + interacted_message_id?: string; + original_response_message_id?: string; + triggering_interaction_metadata?: InteractionMetadata; + type: InteractionTypes; + user: Record; // TEMP: This is not a UserRecord, it's a user object from the API. +} // TEMP + +export interface ChannelMention { + guild_id: string; + id: string; + name: string; + type: ChannelType; +} + +export interface MessageReference { + channel_id: string; + guild_id?: string; + message_id?: string; +} + +export const enum PollLayoutTypes { + UNKNOWN = 0, + DEFAULT = 1, + IMAGE_ONLY_ANSWERS = 2, +} + +export interface MessageEmoji { + animated?: boolean; + id: string | null; + name: string | null; +} + +export interface MessagePollMedia { + emoji?: MessageEmoji; + text?: string; +} + +export interface MessagePollAnswer { + answer_id: number; + poll_media: MessagePollMedia; +} + +export interface MessagePollAnswerCount { + count: number; + id: number; + me_voted: boolean; +} + +export interface MessagePollResults { + answer_counts: MessagePollAnswerCount[]; + is_finalized: boolean; +} + +export interface MessagePoll { + allow_multiselect: boolean; + answers: MessagePollAnswer[]; + expiry: Moment; + layout_type: PollLayoutTypes; + question: MessagePollMedia; + results?: MessagePollResults; +} + +export const enum PurchaseNotificationType { + GUILD_PRODUCT = 0, +} + +export interface MessagePurchaseNotification { + guild_product_purchase: { + listing_id?: string | null; // TEMP + product_name?: string | null; // TEMP + }; // TEMP + type: PurchaseNotificationType; +} // TEMP + +export interface MessageReactionCountDetails { + burst: number; + normal: number; + vote?: number; +} + +export interface MessageReaction { + burst_colors: string[]; + burst_count: number; + count: number; + count_details: MessageReactionCountDetails; + emoji: MessageEmoji; + me: boolean; + me_burst: boolean; + me_vote?: boolean; +} + +export interface MessageRoleSubscriptionData { + is_renewal?: boolean | null; // TEMP + role_subscription_listing_id?: string | null; // TEMP + tier_name?: string | null; // TEMP + total_months_subscribed?: number | null; // TEMP +} // TEMP + +export const enum MessageStates { + SEND_FAILED = "SEND_FAILED", + SENDING = "SENDING", + SENT = "SENT", +} + +export const enum StickerFormat { + PNG = 1, + APNG = 2, + LOTTIE = 3, + GIF = 4, +} + +export interface MessageStickerItem { + format_type: StickerFormat; + id: string; + name: string; +} + +export const enum MetaStickerType { + STANDARD = 1, + GUILD = 2, +} + +export interface MessageSticker { + asset?: ""; + available?: boolean; + description: string | null; + format_type: StickerFormat; + guild_id?: string; + id: string; + name: string; + pack_id?: string; + sort_value?: number; + tags: string; + type: MetaStickerType; + user?: Record; // TEMP: This is not a UserRecord, it's a user object from the API. +} + +export const enum MessageTypes { + DEFAULT = 0, + RECIPIENT_ADD = 1, + RECIPIENT_REMOVE = 2, + CALL = 3, + CHANNEL_NAME_CHANGE = 4, + CHANNEL_ICON_CHANGE = 5, + CHANNEL_PINNED_MESSAGE = 6, + USER_JOIN = 7, + GUILD_BOOST = 8, + GUILD_BOOST_TIER_1 = 9, + GUILD_BOOST_TIER_2 = 10, + GUILD_BOOST_TIER_3 = 11, + CHANNEL_FOLLOW_ADD = 12, + GUILD_STREAM = 13, + GUILD_DISCOVERY_DISQUALIFIED = 14, + GUILD_DISCOVERY_REQUALIFIED = 15, + GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, + GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, + THREAD_CREATED = 18, + REPLY = 19, + CHAT_INPUT_COMMAND = 20, + THREAD_STARTER_MESSAGE = 21, + GUILD_INVITE_REMINDER = 22, + CONTEXT_MENU_COMMAND = 23, + AUTO_MODERATION_ACTION = 24, + ROLE_SUBSCRIPTION_PURCHASE = 25, + INTERACTION_PREMIUM_UPSELL = 26, + STAGE_START = 27, + STAGE_END = 28, + STAGE_SPEAKER = 29, + STAGE_RAISE_HAND = 30, + STAGE_TOPIC = 31, + GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, + PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, + PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, + PREMIUM_REFERRAL = 35, + GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, + GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, + GUILD_INCIDENT_REPORT_RAID = 38, + GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, + GUILD_DEADCHAT_REVIVE_PROMPT = 40, + CUSTOM_GIFT = 41, + GUILD_GAMING_STATS_PROMPT = 42, + PURCHASE_NOTIFICATION = 44, + VOICE_HANGOUT_INVITE = 45, + POLL_RESULT = 46, + CHANGELOG = 47, +} diff --git a/packages/discord-types/src/general/Role.d.ts b/packages/discord-types/src/general/Role.d.ts new file mode 100644 index 000000000..690883871 --- /dev/null +++ b/packages/discord-types/src/general/Role.d.ts @@ -0,0 +1,89 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export interface Role { + color: number; + colorString: string | null; + flags: RoleFlags; + hoist: boolean; + icon: string | null; + id: string; + managed: boolean; + mentionable: boolean; + name: string; + originalPosition: number; + permissions: /* Permissions */ bigint; + position: number; + tags: { + available_for_purchase?: null; + bot_id?: string; + guild_connections?: null; + integration_id?: string; + premium_subscriber?: null; + subscription_listing_id?: string; + }; + unicodeEmoji: string | null; +} + +export const enum RoleFlags { + IN_PROMPT = 1, +} + +/* +// bigint enums are not yet possible: https://github.com/microsoft/TypeScript/issues/37783 +export const enum 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, + ADD_REACTIONS = 1n << 6n, + VIEW_AUDIT_LOG = 1n << 7n, + PRIORITY_SPEAKER = 1n << 8n, + STREAM = 1n << 9n, + VIEW_CHANNEL = 1n << 10n, + 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, + VIEW_GUILD_ANALYTICS = 1n << 19n, + CONNECT = 1n << 20n, + SPEAK = 1n << 21n, + MUTE_MEMBERS = 1n << 22n, + DEAFEN_MEMBERS = 1n << 23n, + MOVE_MEMBERS = 1n << 24n, + USE_VAD = 1n << 25n, + CHANGE_NICKNAME = 1n << 26n, + MANAGE_NICKNAMES = 1n << 27n, + MANAGE_ROLES = 1n << 28n, + MANAGE_WEBHOOKS = 1n << 29n, + MANAGE_GUILD_EXPRESSIONS = 1n << 30n, + USE_APPLICATION_COMMANDS = 1n << 31n, + REQUEST_TO_SPEAK = 1n << 32n, + MANAGE_EVENTS = 1n << 33n, + 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, + USE_EMBEDDED_ACTIVITIES = 1n << 39n, + MODERATE_MEMBERS = 1n << 40n, + VIEW_CREATOR_MONETIZATION_ANALYTICS = 1n << 41n, + USE_SOUNDBOARD = 1n << 42n, + CREATE_GUILD_EXPRESSIONS = 1n << 43n, + CREATE_EVENTS = 1n << 44n, + USE_EXTERNAL_SOUNDS = 1n << 45n, + SEND_VOICE_MESSAGES = 1n << 46n, + USE_CLYDE_AI = 1n << 47n, + SET_VOICE_CHANNEL_STATUS = 1n << 48n, + SEND_POLLS = 1n << 49n, +} +*/ diff --git a/packages/discord-types/src/general/UserProfile.d.ts b/packages/discord-types/src/general/UserProfile.d.ts new file mode 100644 index 000000000..c0019edba --- /dev/null +++ b/packages/discord-types/src/general/UserProfile.d.ts @@ -0,0 +1,187 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; +import type { UserPremiumType } from "./UserRecord"; + +export type UserProfile = FetchFailed extends true + ? UserProfileFetchFailed + : UserProfileFetchSucceeded; + +export interface UserProfileFetchFailed { + accentColor: null; + application: null; + applicationRoleConnections: []; + banner: null; + bio: ""; + connectedAccounts: []; + lastFetched: number; + legacyUsername: null; + premiumGuildSince: null; + premiumSince: null; + profileFetchFailed: true; + pronouns: ""; + userId: string; +} + +export interface UserProfileFetchSucceeded { + accentColor: number | Nullish; + application: Application | null; + applicationRoleConnections: ApplicationRoleConnection[]; + badges: ProfileBadge[]; + banner: string | Nullish; + bio: string; + connectedAccounts: ConnectedAccount[]; + lastFetched: number; + legacyUsername: string | Nullish; + popoutAnimationParticleType: any /* | Nullish */; // TEMP + premiumGuildSince: Date | null; + premiumSince: Date | null; + premiumType: UserPremiumType | Nullish; + profileEffectId: string | undefined; + profileFetchFailed: false; + pronouns: string; + themeColors: ProfileThemeColors | Nullish; + userId: string; +} + +// TODO: Move application related types to their own file. +export const enum ApplicationFlags { + EMBEDDED_RELEASED = 1 << 1, + EMBEDDED_IAP = 1 << 3, + APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE = 1 << 6, + GATEWAY_PRESENCE = 1 << 12, + GATEWAY_PRESENCE_LIMITED = 1 << 13, + GATEWAY_GUILD_MEMBERS = 1 << 14, + GATEWAY_GUILD_MEMBERS_LIMITED = 1 << 15, + EMBEDDED = 1 << 17, + GATEWAY_MESSAGE_CONTENT = 1 << 18, + GATEWAY_MESSAGE_CONTENT_LIMITED = 1 << 19, + EMBEDDED_FIRST_PARTY = 1 << 20, + APPLICATION_COMMAND_BADGE = 1 << 23, + SOCIAL_LAYER_INTEGRATION = 1 << 27, +} + +// Original name: OAuth2Scopes +export const enum OAuth2Scope { + ACTIVITIES_READ = "activities.read", + ACTIVITIES_WRITE = "activities.write", + APPLICATIONS_BUILDS_READ = "applications.builds.read", + APPLICATIONS_BUILDS_UPLOAD = "applications.builds.upload", + APPLICATIONS_COMMANDS = "applications.commands", + APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE = "applications.commands.permissions.update", + APPLICATIONS_COMMANDS_UPDATE = "applications.commands.update", + APPLICATIONS_ENTITLEMENTS = "applications.entitlements", + APPLICATIONS_STORE_UPDATE = "applications.store.update", + BOT = "bot", + CONNECTIONS = "connections", + DM_CHANNELS_MESSAGES_READ = "dm_channels.messages.read", + DM_CHANNELS_MESSAGES_WRITE = "dm_channels.messages.write", + DM_CHANNELS_READ = "dm_channels.read", + EMAIL = "email", + GDM_JOIN = "gdm.join", + GUILDS = "guilds", + GUILDS_JOIN = "guilds.join", + GUILDS_MEMBERS_READ = "guilds.members.read", + IDENTIFY = "identify", + MESSAGES_READ = "messages.read", + OPENID = "openid", + PRESENCES_READ = "presences.read", + PRESENCES_WRITE = "presences.write", + RELATIONSHIPS_READ = "relationships.read", + RELATIONSHIPS_WRITE = "relationships.write", + ROLE_CONNECTIONS_WRITE = "role_connections.write", + RPC = "rpc", + RPC_ACTIVITIES_WRITE = "rpc.activities.write", + RPC_NOTIFICATIONS_READ = "rpc.notifications.read", + RPC_SCREENSHARE_READ = "rpc.screenshare.read", + RPC_SCREENSHARE_WRITE = "rpc.screenshare.write", + RPC_VIDEO_READ = "rpc.video.read", + RPC_VIDEO_WRITE = "rpc.video.write", + RPC_VOICE_READ = "rpc.voice.read", + RPC_VOICE_WRITE = "rpc.voice.write", + VOICE = "voice", + WEBHOOK_INCOMING = "webhook.incoming", +} + +export interface ApplicationInstallParams { + permissions: string; // Permissions serialized as string + scopes: OAuth2Scope[]; +} + +export const enum ApplicationIntegrationType { + GUILD_INSTALL = 0, + USER_INSTALL = 1, +} + +export interface Application { + customInstallUrl: string | undefined; + flags: ApplicationFlags; + id: string; + installParams: ApplicationInstallParams | undefined; + integrationTypesConfig: Partial>; + popularApplicationCommandIds: string[] | undefined; + primarySkuId: string | undefined; + storefront_available: boolean; +} + +export interface ApplicationRoleConnection { + metadata: Record; + platform_name: string | null; + platform_username: string | null; +} + +export interface ProfileBadge { + description: string; + icon: string; + id: string; + link?: string; +} + +// Original name: PlatformTypes +export const enum PlatformType { + AMAZON_MUSIC = "amazon-music", + BATTLENET = "battlenet", + BUNGIE = "bungie", + CONTACTS = "contacts", + CRUNCHYROLL = "crunchyroll", + DOMAIN = "domain", + EBAY = "ebay", + EPIC_GAMES = "epicgames", + FACEBOOK = "facebook", + GITHUB = "github", + INSTAGRAM = "instagram", + LEAGUE_OF_LEGENDS = "leagueoflegends", + 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 interface ConnectedAccount { + id: string; + metadata?: Record; + name: string; + type: PlatformType; + verified: boolean; +} + +export type ProfileThemeColors = [primaryColor: number, accentColor: number]; diff --git a/packages/discord-types/src/general/UserRecord.d.ts b/packages/discord-types/src/general/UserRecord.d.ts new file mode 100644 index 000000000..cf979ee89 --- /dev/null +++ b/packages/discord-types/src/general/UserRecord.d.ts @@ -0,0 +1,133 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; +import type { ImmutableRecord } from "./ImmutableRecord"; +import type { IconSource } from "./misc"; + +export type UserRecordOwnProperties = Pick; + +export class UserRecord< + OwnProperties extends UserRecordOwnProperties = UserRecordOwnProperties +> extends ImmutableRecord { + constructor(userFromServer: Record); // TEMP + + addGuildAvatarHash(guildId: string, avatarHash: string): this; + get avatarDecoration(): AvatarDecorationData | null; + set avatarDecoration(avatarDecorationData: { + asset: string; + sku_id?: string; + skuId?: string; + } | null); + get createdAt(): Date; + getAvatarSource( + guildId?: string | Nullish, + canAnimate?: boolean | undefined, + avatarSize?: number | undefined + ): IconSource; + getAvatarURL( + guildId?: string | Nullish, + avatarSize?: number | undefined, + canAnimate?: boolean | undefined + ): string; + hasAvatarForGuild(guildId?: string | Nullish): boolean; + hasDisabledPremium(): boolean; + hasFreePremium(): boolean; + hasHadPremium(): boolean; + hasHadSKU(skuId: string): boolean; + hasPremiumUsageFlag(flag: number): boolean; + hasPurchasedFlag(flag: number): boolean; + hasUrgentMessages(): boolean; + hasVerifiedEmailOrPhone(): boolean; + isClaimed(): boolean; + isClyde(): boolean; + isLocalBot(): boolean; + isNonUserBot(): boolean; + isPhoneVerified(): boolean; + isPomelo(): boolean; + isSystemUser(): boolean; + isVerifiedBot(): boolean; + removeGuildAvatarHash(guildId: string): this; + get tag(): string; + + avatar: string | null; + avatarDecorationData: AvatarDecorationData | null; + banner: string | Nullish; + bot: boolean; + clan: UserClanData | null; + desktop: boolean; + discriminator: string; + email: string | null; + flags: UserFlags; + globalName: string | Nullish; + guildMemberAvatars: { [guildId: string]: string; }; + hasAnyStaffLevel: () => boolean; + hasBouncedEmail: boolean; + hasFlag: (flag: number) => boolean; + id: string; + isStaff: () => boolean; + isStaffPersonal: () => boolean; + mfaEnabled: boolean; + mobile: boolean; + nsfwAllowed: boolean; + personalConnectionId: string | null; + phone: string | null; + premiumType: UserPremiumType | Nullish; + premiumUsageFlags: number; + publicFlags: UserFlags; + purchasedFlags: number; + system: boolean; + username: string; + verified: boolean; +} + +export interface AvatarDecorationData { + asset: string; + skuId: string; +} + +export interface UserClanData { + badge: string | null; + identityEnabled: boolean | null; + identityGuildId: string | null; + tag: string | null; +} + +export const 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, + TEAM_PSEUDO_USER = 1 << 10, + 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, + QUARANTINED = 0x10_00_00_00_00_00, + COLLABORATOR = 0x4_00_00_00_00_00_00, + RESTRICTED_COLLABORATOR = 0x8_00_00_00_00_00_00 +} + +// Original name: PremiumTypes +export const enum UserPremiumType { + /** Nitro Classic */ + TIER_1 = 1, + /** Nitro */ + TIER_2 = 2, + /** Nitro Basic */ + TIER_0 = 3, +} diff --git a/packages/discord-types/src/general/channels/ChannelRecord.d.ts b/packages/discord-types/src/general/channels/ChannelRecord.d.ts new file mode 100644 index 000000000..a0603527b --- /dev/null +++ b/packages/discord-types/src/general/channels/ChannelRecord.d.ts @@ -0,0 +1,267 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { SnakeCasedProperties } from "type-fest"; + +import type { Nullish } from "../../internal"; +import type { AvatarDecorationData, UserClanData, UserFlags } from "../UserRecord"; +import type { ForumChannelRecord, GuildForumChannelRecord, GuildMediaChannelRecord } from "./ForumChannelRecord"; +import type { GuildCategoryChannelRecord, GuildDirectoryChannelRecord, GuildTextualChannelRecord } from "./GuildTextualChannelRecord"; +import type { GuildStageVoiceChannelRecord, GuildVocalChannelRecord, GuildVoiceChannelRecord } from "./GuildVocalChannelRecord"; +import type { DMChannelRecord, GroupDMChannelRecord, PrivateChannelRecord } from "./PrivateChannelRecord"; +import type { ThreadChannelRecord } from "./ThreadChannelRecord"; + +export type ChannelRecord = GuildChannelRecord | PrivateChannelRecord | ThreadChannelRecord; + +export type GuildChannelRecord = GuildTextualChannelRecord | GuildVocalChannelRecord | ForumChannelRecord; + +type ChannelRecordOwnPropertyKeys = "application_id" | "appliedTags" | "availableTags" | "bitrate_" | "defaultAutoArchiveDuration" | "defaultForumLayout" | "defaultReactionEmoji" | "defaultSortOrder" | "defaultThreadRateLimitPerUser" | "flags_" | "guild_id" | "icon" | "iconEmoji" | "id" | "isMessageRequest" | "isMessageRequestTimestamp" | "isSpam" | "lastMessageId" | "lastPinTimestamp" | "member" | "memberCount" | "memberIdsPreview" | "memberListId" | "messageCount" | "name" | "nicks" | "nsfw_" | "originChannelId" | "ownerId" | "parentChannelThreadType" | "parent_id" | "permissionOverwrites_" | "position_" | "rateLimitPerUser_" | "rawRecipients" | "recipients" | "rtcRegion" | "safetyWarnings" | "template" | "themeColor" | "threadMetadata" | "topic_" | "totalMessageSent" | "type" | "userLimit_" | "version" | "videoQualityMode"; + +export type ChannelRecordOwnProperties = Pick; + +export abstract class ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + get accessPermissions(): /* Permissions */ bigint; + get bitrate(): number; + computeLurkerPermissionsAllowList(): /* Permissions */ bigint | undefined; + get flags(): ChannelFlags; + getApplicationId(): this["application_id"]; + getDefaultLayout(): FormLayout; + getDefaultSortOrder(): ThreadSortOrder; + getGuildId(): this["guild_id"]; + hasFlag(flag: ChannelFlags): boolean; + isActiveThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isAnnouncementThread(): this is ThreadChannelRecord; + isArchivedLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isArchivedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isBroadcastChannel(): boolean; + isCategory(): this is GuildCategoryChannelRecord; + isDirectory(): this is GuildDirectoryChannelRecord; + isDM(): this is DMChannelRecord; + isForumChannel(): this is GuildForumChannelRecord; + isForumLikeChannel(): this is ForumChannelRecord; + isForumPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isGroupDM(): this is GroupDMChannelRecord; + isGuildStageVoice(): this is GuildStageVoiceChannelRecord; + isGuildVocal(): this is GuildVocalChannelRecord; + isGuildVocalOrThread(): this is GuildVocalChannelRecord | ThreadChannelRecord; + isGuildVoice(): this is GuildVoiceChannelRecord; + isListenModeCapable(): this is GuildStageVoiceChannelRecord; + isLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isManaged(): boolean; + isMediaChannel(): this is GuildMediaChannelRecord; + isMediaPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isMultiUserDM(): this is GroupDMChannelRecord; + isNSFW(): boolean; + isOwner(userId: string): boolean; + isPrivate(): this is PrivateChannelRecord; + isRoleSubscriptionTemplatePreviewChannel(): boolean; + isScheduledForDeletion(): boolean; + isSystemDM(): boolean; + isThread(): this is ThreadChannelRecord; + isVocal(): this is PrivateChannelRecord | GuildVocalChannelRecord | ThreadChannelRecord; + isVocalThread(): this is ThreadChannelRecord; + merge(collection: Partial>): this; + get nsfw(): boolean; + get permissionOverwrites(): PermissionOverwriteMap; + get position(): number; + get rateLimitPerUser(): number; + set(key: Key, value: ChannelRecordOwnProperties[Key]): this; + toJS(): ChannelRecordOwnProperties; + get topic(): string; + get userLimit(): number; + + application_id?: string | undefined; + appliedTags?: string[] | undefined; + availableTags?: ForumTag[] | undefined; + bitrate_?: number | undefined; + defaultAutoArchiveDuration?: number | undefined; + defaultForumLayout?: FormLayout | undefined; + defaultReactionEmoji?: { + emojiId: string | null; + emojiName: string | null; + } | undefined; + defaultSortOrder?: ThreadSortOrder | Nullish; + defaultThreadRateLimitPerUser?: number | undefined; + flags_: ChannelFlags; + guild_id: string | null; + icon?: string | Nullish; + iconEmoji?: { + id: string | null; + name: string; + } | undefined; + id: string; + isMessageRequest?: boolean | undefined; + isMessageRequestTimestamp?: string | Nullish; + isSpam?: boolean | undefined; + lastMessageId: string | Nullish; + lastPinTimestamp: string | Nullish; + member?: ThreadMember | undefined; + memberCount?: number | undefined; + memberIdsPreview?: string[] | undefined; + memberListId?: string | Nullish; + messageCount?: number | undefined; + name: string; + nicks?: { [userId: string]: string; } | undefined; + nsfw_?: boolean | undefined; + originChannelId?: string | Nullish; + ownerId?: string | undefined; + parent_id?: string | Nullish; + parentChannelThreadType?: ChannelType.GUILD_TEXT | ChannelType.GUILD_ANNOUNCEMENT | ChannelType.GUILD_FORUM | ChannelType.GUILD_MEDIA | undefined; + permissionOverwrites_?: PermissionOverwriteMap | undefined; + position_?: number | undefined; + rateLimitPerUser_?: number | undefined; + rawRecipients?: ChannelRecipient[] | undefined; + recipients?: string[] | undefined; + rtcRegion?: string | Nullish; + safetyWarnings?: SafetyWarning[] | undefined; + template?: string | undefined; + themeColor?: number | Nullish; + threadMetadata?: ThreadMetadata | undefined; + topic_?: string | Nullish; + totalMessageSent?: number | undefined; + type: ChannelType; + userLimit_?: number | undefined; + version?: number | undefined; + videoQualityMode?: VideoQualityMode | undefined; + voiceBackgroundDisplay?: { type: VoiceCallBackgroundType.EMPTY; } + | { resourceId: string; type: VoiceCallBackgroundType.GRADIENT; } + | Nullish; +} + +export interface ForumTag { + emojiId: string | null; + emojiName: string | null; + id: string; + moderated: boolean; + name: string; +} + +export const enum FormLayout { + DEFAULT = 0, + LIST = 1, + GRID = 2, +} + +export const enum ThreadSortOrder { + LATEST_ACTIVITY = 0, + CREATION_DATE = 1, +} + +export const enum ChannelFlags { + GUILD_FEED_REMOVED = 1 << 0, + PINNED = 1 << 1, + ACTIVE_CHANNELS_REMOVED = 1 << 2, + REQUIRE_TAG = 1 << 4, + IS_SPAM = 1 << 5, + IS_GUILD_RESOURCE_CHANNEL = 1 << 7, + CLYDE_AI = 1 << 8, + IS_SCHEDULED_FOR_DELETION = 1 << 9, + IS_MEDIA_CHANNEL = 1 << 10, + SUMMARIES_DISABLED = 1 << 11, + IS_ROLE_SUBSCRIPTION_TEMPLATE_PREVIEW_CHANNEL = 1 << 13, + IS_BROADCASTING = 1 << 14, + HIDE_MEDIA_DOWNLOAD_OPTIONS = 1 << 15, + IS_JOIN_REQUEST_INTERVIEW_CHANNEL = 1 << 16, +} + +export const enum ThreadMemberFlags { + HAS_INTERACTED = 1 << 0, + ALL_MESSAGES = 1 << 1, + ONLY_MENTIONS = 1 << 2, + NO_MESSAGES = 1 << 3, +} + +export interface ThreadMember { + flags: ThreadMemberFlags; + joinTimestamp: string; + muteConfig: { + end_time: string | null; + selected_time_window: number; + } | null; + muted: boolean; +} + +export const enum PermissionOverwriteType { + ROLE = 0, + MEMBER = 1, +} + +export interface PermissionOverwrite { + allow: /* Permissions */ bigint; + deny: /* Permissions */ bigint; + id: string; + type: PermissionOverwriteType; +} + +interface PermissionOverwriteMap { + [roleIdOrUserId: string]: PermissionOverwrite; +} + +export interface ChannelRecipient { + avatar: string | null; + avatar_decoration_data: SnakeCasedProperties | null; + bot?: boolean; + clan: SnakeCasedProperties | null; + discriminator: string; + display_name?: string | null; + global_name: string | null; + id: string; + public_flags: UserFlags; + username: string; +} + +// Original name: SafetyWarningTypes +export const enum SafetyWarningType { + STRANGER_DANGER = 1, + INAPPROPRIATE_CONVERSATION_TIER_1 = 2, + INAPPROPRIATE_CONVERSATION_TIER_2 = 3, +} + +export interface SafetyWarning { + dismiss_timestamp?: string | Nullish; // TEMP + type: SafetyWarningType; +} + +export interface ThreadMetadata { + archived: boolean; + archiveTimestamp: string; + autoArchiveDuration: number; + createTimestamp: string | Nullish; + invitable: boolean; + locked: boolean; +} + +// Original name: ChannelTypes +export const enum ChannelType { + GUILD_TEXT = 0, + DM = 1, + GUILD_VOICE = 2, + GROUP_DM = 3, + GUILD_CATEGORY = 4, + GUILD_ANNOUNCEMENT = 5, + GUILD_STORE = 6, + ANNOUNCEMENT_THREAD = 10, + PUBLIC_THREAD = 11, + PRIVATE_THREAD = 12, + GUILD_STAGE_VOICE = 13, + GUILD_DIRECTORY = 14, + GUILD_FORUM = 15, + GUILD_MEDIA = 16, + UNKNOWN = 10_000, +} + +export const enum VideoQualityMode { + AUTO = 1, + FULL = 2, +} + +// Original name: VoiceCallBackgroundTypes +export const enum VoiceCallBackgroundType { + EMPTY = 0, + GRADIENT = 1, +} diff --git a/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts b/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts new file mode 100644 index 000000000..cd426b125 --- /dev/null +++ b/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts @@ -0,0 +1,69 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Defined, Nullish } from "../../internal"; +import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; + +export type ForumChannelRecord = GuildForumChannelRecord | GuildMediaChannelRecord; + +export abstract class ForumChannelRecordBase extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): ForumChannelRecord; // TEMP + + application_id?: undefined; + appliedTags?: undefined; + availableTags: Defined; + bitrate_?: undefined; + defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; + defaultForumLayout: ChannelRecordBase["defaultForumLayout"]; + defaultReactionEmoji: ChannelRecordBase["defaultReactionEmoji"]; + defaultSortOrder: ChannelRecordBase["defaultSortOrder"]; + defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; + icon?: undefined; + iconEmoji: ChannelRecordBase["iconEmoji"]; + isMessageRequest?: undefined; + isMessageRequestTimestamp?: undefined; + isSpam?: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; + member?: undefined; + memberCount?: undefined; + memberIdsPreview?: undefined; + memberListId: ChannelRecordBase["memberListId"]; // TEMP + messageCount?: undefined; + nicks?: undefined; + nsfw_: Defined; + originChannelId?: undefined; + ownerId?: undefined; + parent_id: NonNullable; + parentChannelThreadType?: undefined; + permissionOverwrites_: Defined; + position_: Defined; + rateLimitPerUser_: Defined; + rawRecipients?: undefined; + recipients?: undefined; + rtcRegion?: undefined; + safetyWarnings?: undefined; + template: Defined; + themeColor: ChannelRecordBase["themeColor"]; + threadMetadata?: undefined; + topic_: ChannelRecordBase["topic_"]; + totalMessageSent?: undefined; + type: ChannelType.GUILD_FORUM | ChannelType.GUILD_MEDIA; + userLimit_?: undefined; + version: ChannelRecordBase["version"]; + videoQualityMode?: undefined; + voiceBackgroundDisplay?: undefined; +} + +export class GuildForumChannelRecord extends ForumChannelRecordBase { + type: ChannelType.GUILD_FORUM; +} + +export class GuildMediaChannelRecord extends ForumChannelRecordBase { + type: ChannelType.GUILD_MEDIA; +} diff --git a/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts b/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts new file mode 100644 index 000000000..3edd90dac --- /dev/null +++ b/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts @@ -0,0 +1,89 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Defined, Nullish } from "../../internal"; +import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; + +export type GuildTextualChannelRecord = GuildTextChannelRecord | GuildCategoryChannelRecord | GuildAnnouncementChannelRecord | GuildStoreChannelRecord | GuildDirectoryChannelRecord; + +export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildTextualChannelRecord; // TEMP + + application_id: undefined; + appliedTags?: undefined; + availableTags?: undefined; + bitrate_?: undefined; + defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; + defaultForumLayout?: undefined; + defaultReactionEmoji?: undefined; + defaultSortOrder?: undefined; + defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; + icon?: undefined; + iconEmoji: ChannelRecordBase["iconEmoji"]; + isMessageRequest?: undefined; + isMessageRequestTimestamp?: undefined; + isSpam?: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; + member?: undefined; + memberCount?: undefined; + memberIdsPreview?: undefined; + memberListId: ChannelRecordBase["memberListId"]; // TEMP + messageCount?: undefined; + nicks?: undefined; + nsfw_: Defined; + originChannelId?: undefined; + ownerId?: undefined; + parent_id: ChannelRecordBase["parent_id"]; + parentChannelThreadType?: undefined; + permissionOverwrites_: Defined; + position_: Defined; + rateLimitPerUser_: Defined; + rawRecipients?: undefined; + recipients?: undefined; + rtcRegion?: undefined; + safetyWarnings?: undefined; + template?: undefined; + themeColor: ChannelRecordBase["themeColor"]; + threadMetadata?: undefined; + topic_: ChannelRecordBase["topic_"]; + totalMessageSent?: undefined; + type: ChannelType.GUILD_TEXT | ChannelType.GUILD_CATEGORY | ChannelType.GUILD_ANNOUNCEMENT | ChannelType.GUILD_STORE | ChannelType.GUILD_DIRECTORY; + userLimit_?: undefined; + version: ChannelRecordBase["version"]; + videoQualityMode?: undefined; + voiceBackgroundDisplay?: undefined; +} + +export class GuildTextChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelType.GUILD_TEXT; +} + +export class GuildCategoryChannelRecord extends GuildTextualChannelRecordBase { + defaultAutoArchiveDuration: undefined; + defaultThreadRateLimitPerUser: undefined; + lastMessageId: undefined; + lastPinTimestamp: undefined; + memberListId: undefined; // TEMP + parent_id: Nullish; + themeColor: undefined; // TEMP + topic_: undefined; + type: ChannelType.GUILD_CATEGORY; +} + +export class GuildAnnouncementChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelType.GUILD_ANNOUNCEMENT; +} + +export class GuildStoreChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelType.GUILD_STORE; +} // TEMP + +export class GuildDirectoryChannelRecord extends GuildTextualChannelRecordBase { + type: ChannelType.GUILD_DIRECTORY; +} // TEMP diff --git a/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts b/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts new file mode 100644 index 000000000..4da859fb0 --- /dev/null +++ b/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts @@ -0,0 +1,69 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Defined, Nullish } from "../../internal"; +import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; + +export type GuildVocalChannelRecord = GuildVoiceChannelRecord | GuildStageVoiceChannelRecord; + +export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildVocalChannelRecord; // TEMP + + application_id: undefined; + appliedTags?: undefined; + availableTags?: undefined; + bitrate_: Defined; + defaultAutoArchiveDuration?: undefined; + defaultForumLayout?: undefined; + defaultReactionEmoji?: undefined; + defaultSortOrder?: undefined; + defaultThreadRateLimitPerUser?: undefined; + icon?: undefined; + iconEmoji: ChannelRecordBase["iconEmoji"]; + isMessageRequest?: undefined; + isMessageRequestTimestamp?: undefined; + isSpam?: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: undefined; + member?: undefined; + memberCount?: undefined; + memberIdsPreview?: undefined; + memberListId: ChannelRecordBase["memberListId"]; // TEMP + messageCount?: undefined; + nicks?: undefined; + nsfw_: Defined; + originChannelId: ChannelRecordBase["originChannelId"]; // TEMP + ownerId?: undefined; + parent_id: ChannelRecordBase["parent_id"]; + parentChannelThreadType?: undefined; + permissionOverwrites_: Defined; + position_: Defined; + rateLimitPerUser_: Defined; + rawRecipients?: undefined; + recipients?: undefined; + rtcRegion: Defined; + safetyWarnings?: undefined; + template?: undefined; + themeColor: Nullish; // TEMP + threadMetadata?: undefined; + topic_: Nullish; + totalMessageSent?: undefined; + type: ChannelType.GUILD_VOICE | ChannelType.GUILD_STAGE_VOICE; + userLimit_: Defined; + version: ChannelRecordBase["version"]; + videoQualityMode: ChannelRecordBase["videoQualityMode"]; + voiceBackgroundDisplay: Defined; +} + +export class GuildVoiceChannelRecord extends GuildVocalChannelRecordBase { + type: ChannelType.GUILD_VOICE; +} + +export class GuildStageVoiceChannelRecord extends GuildVocalChannelRecordBase { + type: ChannelType.GUILD_STAGE_VOICE; +} diff --git a/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts b/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts new file mode 100644 index 000000000..2190e505c --- /dev/null +++ b/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts @@ -0,0 +1,82 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Defined, Nullish } from "../../internal"; +import type { ChannelRecipient, ChannelRecordBase, ChannelType } from "./ChannelRecord"; + +export type PrivateChannelRecord = DMChannelRecord | GroupDMChannelRecord; + +export abstract class PrivateChannelRecordBase extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record): PrivateChannelRecord; + static sortRecipients(recipients: ChannelRecipient[] | Nullish, channelId: string): string[]; + + addRecipient(recipientUserId: string, nickname: string | undefined, currentUserId: string): this; + getRecipientId(): string | undefined; + removeRecipient(recipientUserId: string): this; + + application_id: ChannelRecordBase["application_id"]; + appliedTags?: undefined; + availableTags?: undefined; + bitrate_?: undefined; + defaultAutoArchiveDuration?: undefined; + defaultForumLayout?: undefined; + defaultReactionEmoji?: undefined; + defaultSortOrder?: undefined; + defaultThreadRateLimitPerUser?: undefined; + guild_id: null; + icon: ChannelRecordBase["icon"]; + iconEmoji?: undefined; + isMessageRequest: ChannelRecordBase["isMessageRequest"]; + isMessageRequestTimestamp: ChannelRecordBase["isMessageRequestTimestamp"]; + isSpam: Defined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; + member?: undefined; + memberCount?: undefined; + memberIdsPreview?: undefined; + memberListId?: undefined; + messageCount?: undefined; + nicks: Defined; + nsfw_?: undefined; + originChannelId?: undefined; + ownerId: ChannelRecordBase["ownerId"]; + parent_id?: undefined; + parentChannelThreadType?: undefined; + permissionOverwrites_?: undefined; + position_?: undefined; + rateLimitPerUser_?: undefined; + rawRecipients: Defined; + recipients: Defined; + rtcRegion?: undefined; + safetyWarnings: ChannelRecordBase["safetyWarnings"]; + template?: undefined; + themeColor?: undefined; + threadMetadata?: undefined; + topic_?: undefined; + totalMessageSent?: undefined; + type: ChannelType.DM | ChannelType.GROUP_DM; + userLimit_?: undefined; + version?: undefined; + videoQualityMode?: undefined; + voiceBackgroundDisplay?: undefined; +} + +export class DMChannelRecord extends PrivateChannelRecordBase { + application_id: undefined; + icon: undefined; + name: ""; + ownerId: undefined; + type: ChannelType.DM; +} + +export class GroupDMChannelRecord extends PrivateChannelRecordBase { + isMessageRequest: undefined; + isMessageRequestTimestamp: undefined; + ownerId: PrivateChannelRecordBase["ownerId"]; + type: ChannelType.GROUP_DM; +} diff --git a/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts b/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts new file mode 100644 index 000000000..db3ea2b62 --- /dev/null +++ b/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts @@ -0,0 +1,61 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Defined, Nullish } from "../../internal"; +import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; + +type ThreadChannelType = ChannelType.ANNOUNCEMENT_THREAD | ChannelType.PUBLIC_THREAD | ChannelType.PRIVATE_THREAD; + +export class ThreadChannelRecord extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): ThreadChannelRecord; // TEMP + + application_id?: undefined; + appliedTags: Defined; + availableTags?: undefined; + bitrate_: undefined; + defaultAutoArchiveDuration?: undefined; + defaultForumLayout?: undefined; + defaultReactionEmoji?: undefined; + defaultSortOrder?: undefined; + defaultThreadRateLimitPerUser?: undefined; + icon?: undefined; + iconEmoji?: undefined; + isMessageRequest?: undefined; + isMessageRequestTimestamp?: undefined; + isSpam?: undefined; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastMessageId"]; + member: ChannelRecordBase["member"]; + memberCount: Defined; + memberIdsPreview: Defined; + memberListId?: undefined; + messageCount: Defined; + nicks?: undefined; + nsfw_: Defined; + originChannelId?: undefined; + ownerId: Defined; + parent_id: NonNullable; + parentChannelThreadType: Defined; + permissionOverwrites_?: undefined; + position_?: undefined; + rateLimitPerUser_: Defined; + rawRecipients?: undefined; + recipients?: undefined; + rtcRegion: undefined; + safetyWarnings?: undefined; + template?: undefined; + themeColor?: undefined; + threadMetadata: ChannelRecordBase["threadMetadata"]; + topic_?: undefined; + totalMessageSent: ChannelRecordBase["rateLimitPerUser_"]; + type: ChannelType; + userLimit_: undefined; + version?: undefined; + videoQualityMode: undefined; + voiceBackgroundDisplay?: undefined; +} diff --git a/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts b/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts new file mode 100644 index 000000000..5f09f35d9 --- /dev/null +++ b/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts @@ -0,0 +1,58 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Defined, Nullish } from "../../internal"; +import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; + +export class UnknownChannelRecord extends ChannelRecordBase { + constructor(channelProperties: Record); // TEMP + + static fromServer(channelFromServer: Record, guildId?: string | Nullish): UnknownChannelRecord; // TEMP + + application_id: ChannelRecordBase["application_id"]; + appliedTags: ChannelRecordBase["appliedTags"]; + availableTags: ChannelRecordBase["availableTags"]; + bitrate_: ChannelRecordBase["bitrate_"]; + defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; + defaultForumLayout: ChannelRecordBase["defaultForumLayout"]; + defaultReactionEmoji: ChannelRecordBase["defaultReactionEmoji"]; + defaultSortOrder: ChannelRecordBase["defaultSortOrder"]; + defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; + icon: ChannelRecordBase["icon"]; + iconEmoji: ChannelRecordBase["iconEmoji"]; + isMessageRequest: ChannelRecordBase["isMessageRequest"]; + isMessageRequestTimestamp: ChannelRecordBase["isMessageRequestTimestamp"]; + isSpam: ChannelRecordBase["isSpam"]; + lastMessageId: ChannelRecordBase["lastMessageId"]; + lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; + member: ChannelRecordBase["member"]; + memberCount: ChannelRecordBase["memberCount"]; + memberIdsPreview: ChannelRecordBase["memberIdsPreview"]; + memberListId: ChannelRecordBase["memberListId"]; + messageCount: ChannelRecordBase["messageCount"]; + nicks: ChannelRecordBase["nicks"]; + nsfw_: ChannelRecordBase["nsfw_"]; + originChannelId: ChannelRecordBase["originChannelId"]; + ownerId: ChannelRecordBase["ownerId"]; + parent_id: ChannelRecordBase["parent_id"]; + parentChannelThreadType: undefined; + permissionOverwrites_: Defined; + position_: ChannelRecordBase["position_"]; + rateLimitPerUser_: ChannelRecordBase["rateLimitPerUser_"]; + rawRecipients: Defined; + recipients: Defined; + rtcRegion: ChannelRecordBase["rtcRegion"]; + safetyWarnings: ChannelRecordBase["safetyWarnings"]; + template: ChannelRecordBase["template"]; + themeColor: ChannelRecordBase["themeColor"]; + threadMetadata: ChannelRecordBase["threadMetadata"]; + topic_: ChannelRecordBase["topic_"]; + totalMessageSent: ChannelRecordBase["totalMessageSent"]; + type: ChannelType.UNKNOWN; + userLimit_: ChannelRecordBase["userLimit_"]; + version: ChannelRecordBase["version"]; + videoQualityMode: ChannelRecordBase["videoQualityMode"]; +} diff --git a/packages/discord-types/src/general/channels/index.d.ts b/packages/discord-types/src/general/channels/index.d.ts new file mode 100644 index 000000000..31078e0ee --- /dev/null +++ b/packages/discord-types/src/general/channels/index.d.ts @@ -0,0 +1,13 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export * from "./ChannelRecord"; +export * from "./ForumChannelRecord"; +export * from "./GuildTextualChannelRecord"; +export * from "./GuildVocalChannelRecord"; +export * from "./PrivateChannelRecord"; +export * from "./ThreadChannelRecord"; +export * from "./UnknownChannelRecord"; diff --git a/packages/discord-types/src/general/index.d.ts b/packages/discord-types/src/general/index.d.ts new file mode 100644 index 000000000..8c6d0de54 --- /dev/null +++ b/packages/discord-types/src/general/index.d.ts @@ -0,0 +1,18 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export * from "./ChannelMessages"; +export * from "./channels"; +export * from "./Clan"; +export * from "./GuildMember"; +export * from "./GuildMemberProfile"; +export * from "./GuildRecord"; +export * from "./ImmutableRecord"; +export * from "./MessageRecord"; +export * from "./misc"; +export * from "./Role"; +export * from "./UserProfile"; +export * from "./UserRecord"; diff --git a/packages/discord-types/src/general/misc.d.ts b/packages/discord-types/src/general/misc.d.ts new file mode 100644 index 000000000..b42c28d64 --- /dev/null +++ b/packages/discord-types/src/general/misc.d.ts @@ -0,0 +1,9 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export interface IconSource { + uri: string; +} diff --git a/packages/discord-types/src/index.d.ts b/packages/discord-types/src/index.d.ts new file mode 100644 index 000000000..fc316f169 --- /dev/null +++ b/packages/discord-types/src/index.d.ts @@ -0,0 +1,9 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export * from "./flux"; +export * from "./general"; +export * from "./stores"; diff --git a/packages/discord-types/src/internal.d.ts b/packages/discord-types/src/internal.d.ts new file mode 100644 index 000000000..a486565cf --- /dev/null +++ b/packages/discord-types/src/internal.d.ts @@ -0,0 +1,14 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +/** @internal */ +export type Defined = Exclude; + +/** @internal */ +export type GenericConstructor = new (...args: any[]) => any; + +/** @internal */ +export type Nullish = null | undefined; diff --git a/packages/discord-types/src/stores/ChannelStore.d.ts b/packages/discord-types/src/stores/ChannelStore.d.ts new file mode 100644 index 000000000..0415521ee --- /dev/null +++ b/packages/discord-types/src/stores/ChannelStore.d.ts @@ -0,0 +1,41 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { ChannelRecord, GuildChannelRecord } from "../general/channels/ChannelRecord"; +import type { PrivateChannelRecord } from "../general/channels/PrivateChannelRecord"; +import type { ThreadChannelRecord } from "../general/channels/ThreadChannelRecord"; +import type { Nullish } from "../internal"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type ChannelStoreAction = ExtractAction; + +export class ChannelStore extends FluxStore { + static displayName: "ChannelStore"; + + getAllThreadsForParent(channelId: string): ThreadChannelRecord[]; + getBasicChannel(channelId?: string | Nullish): ChannelRecord | null; // TEMP + getChannel(channelId?: string | Nullish): ChannelRecord | undefined; + getChannelIds(guildId?: string | Nullish): string[]; + getDebugInfo(): { + guildSizes: string[]; + loadedGuildIds: string[]; + pendingGuildLoads: any[]; // TEMP + }; + getDMFromUserId(userId?: string | Nullish): string | undefined; + getDMUserIds(): string[]; + getGuildChannelsVersion(guildId: string): number; + getInitialOverlayState(): { [channelId: string]: ChannelRecord; }; + getMutableBasicGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; // TEMP + getMutableDMsByUserIds(): { [userId: string]: string; }; + getMutableGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; + getMutablePrivateChannels(): { [channelId: string]: PrivateChannelRecord; }; + getPrivateChannelsVersion(): number; + getSortedPrivateChannels(): PrivateChannelRecord[]; + hasChannel(channelId: string): boolean; + initialize(): void; + loadAllGuildAndPrivateChannelsFromDisk(): { [channelId: string]: GuildChannelRecord | PrivateChannelRecord; }; +} diff --git a/packages/discord-types/src/stores/GuildMemberStore.d.ts b/packages/discord-types/src/stores/GuildMemberStore.d.ts new file mode 100644 index 000000000..009912ce0 --- /dev/null +++ b/packages/discord-types/src/stores/GuildMemberStore.d.ts @@ -0,0 +1,39 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { GuildMember } from "../general/GuildMember"; +import type { Nullish } from "../internal"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type GuildMemberStoreAction = ExtractAction; + +export class GuildMemberStore extends FluxStore { + static displayName: "GuildMemberStore"; + + getCommunicationDisabledUserMap(): { [userId: string]: string; }; + getCommunicationDisabledVersion(): number; + getMember(guildId: string, userId: string): GuildMember | null; + getMemberIds(guildId?: string | Nullish): string[]; + getMemberRoleWithPendingUpdates(guildId: string, userId: string): string[]; + getMembers(guildId?: string | Nullish): GuildMember[]; + getMemberVersion(): number; + getMutableAllGuildsAndMembers(): { [guildId: string]: { [userId: string]: GuildMember; }; }; + getNick(guildId?: string | Nullish, userId?: string | Nullish): string | null; + getNicknameGuildsMapping(userId: string): { [nickname: string]: string[]; }; + getNicknames(userId: string): string[]; + getPendingRoleUpdates(guildId: string): { + added: string[]; + removed: string[]; + }; + getSelfMember(guildId: string): GuildMember | Nullish; + getTrueMember(guildId: string, userId: string): GuildMember | Nullish; + initialize(): void; + isCurrentUserGuest(guildId?: string | Nullish): boolean; + isGuestOrLurker(guildId?: string | Nullish, userId?: string | Nullish): boolean; + isMember(guildId?: string | Nullish, userId?: string | Nullish): boolean; + memberOf(userId: string): string[]; +} diff --git a/packages/discord-types/src/stores/GuildStore.d.ts b/packages/discord-types/src/stores/GuildStore.d.ts new file mode 100644 index 000000000..2a3d24df9 --- /dev/null +++ b/packages/discord-types/src/stores/GuildStore.d.ts @@ -0,0 +1,27 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { GuildRecord } from "../general/GuildRecord"; +import type { Role } from "../general/Role"; +import type { Nullish } from "../internal"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type GuildStoreAction = ExtractAction; + +export class GuildStore extends FluxStore { + static displayName: "GuildStore"; + + getAllGuildsRoles(): { [guildId: string]: { [roleId: string]: Role; }; }; + getGeoRestrictedGuilds(): { [guildId: string]: GuildRecord; }; + getGuild(guildId?: string | Nullish): GuildRecord | undefined; + getGuildCount(): number; + getGuildIds(): string[]; + getGuilds(): { [guildId: string]: GuildRecord; }; + getRole(guildId: string, roleId: string): Role | undefined; + getRoles(guildId: string): { [roleId: string]: Role; }; + isLoaded(): boolean; +} diff --git a/packages/discord-types/src/stores/MessageStore.d.ts b/packages/discord-types/src/stores/MessageStore.d.ts new file mode 100644 index 000000000..e2568b3c4 --- /dev/null +++ b/packages/discord-types/src/stores/MessageStore.d.ts @@ -0,0 +1,31 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { Nullish } from "../internal"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type MessageStoreAction = ExtractAction; + +export class MessageStore extends FluxStore { + static displayName: "MessageStore"; + + focusedMessageId(e?: any): any; // TEMP + getLastCommandMessage(e?: any): any; // TEMP + getLastEditableMessage(e?: any): any; // TEMP + getLastMessage(e?: any): any; // TEMP + getLastNonCurrentUserMessage(e?: any): any; // TEMP + getMessage(e?: any, t?: any): any; // TEMP + getMessages(guildId?: string | Nullish): any; // TEMP + hasCurrentUserSentMessage(e?: any): any; // TEMP + hasCurrentUserSentMessageSinceAppStart(): any; // TEMP + hasPresent(e?: any): any; // TEMP + initialize(): void; + isLoadingMessages(e?: any): any; // TEMP + isReady(e?: any): any; // TEMP + jumpedMessageId(e?: any): any; // TEMP + whenReady(e?: any, t?: any): any; // TEMP +} diff --git a/packages/discord-types/src/stores/RelationshipStore.d.ts b/packages/discord-types/src/stores/RelationshipStore.d.ts new file mode 100644 index 000000000..e5e9b516a --- /dev/null +++ b/packages/discord-types/src/stores/RelationshipStore.d.ts @@ -0,0 +1,39 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type RelationshipStoreAction = ExtractAction; + +export class RelationshipStore extends FluxStore { + static displayName: "RelationshipStore"; + + getFriendCount(): number; + getFriendIDs(): string[]; + getNickname(userId: string): string | undefined; + getOutgoingCount(): number; + getPendingCount(): number; + getRelationshipCount(): number; + getRelationships(): { [userId: string]: RelationshipType; }; + getRelationshipType(userId: string): RelationshipType; + getSince(userId: string): string | undefined; + getSinces(): { [userId: string]: string; }; + initialize(): void; + isBlocked(userId: string): boolean; + isFriend(userId: string): boolean; +} + +// Original name: RelationshipTypes +export const enum RelationshipType { + NONE = 0, + FRIEND = 1, + BLOCKED = 2, + PENDING_INCOMING = 3, + PENDING_OUTGOING = 4, + IMPLICIT = 5, + SUGGESTION = 6, +} diff --git a/packages/discord-types/src/stores/SelectedChannelStore.d.ts b/packages/discord-types/src/stores/SelectedChannelStore.d.ts new file mode 100644 index 000000000..e96713a0a --- /dev/null +++ b/packages/discord-types/src/stores/SelectedChannelStore.d.ts @@ -0,0 +1,27 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { Nullish } from "../internal"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type SelectedChannelStoreAction = ExtractAction; + +export class SelectedChannelStore extends FluxStore { + static displayName: "SelectedChannelStore"; + + getChannelId(guildId?: string | Nullish): string | undefined; + getCurrentlySelectedChannelId(guildId?: string | Nullish): string | Nullish; + getLastChannelFollowingDestination(): { + channelId: string; + guildId: string; + }; + getLastSelectedChannelId(guildId?: string | Nullish): string | undefined; + getLastSelectedChannels(guildId: string | null): string | undefined; + getMostRecentSelectedTextChannelId(guildId?: string | Nullish): string | null; + getVoiceChannelId(): string | null; + initialize(): void; +} diff --git a/packages/discord-types/src/stores/SelectedGuildStore.d.ts b/packages/discord-types/src/stores/SelectedGuildStore.d.ts new file mode 100644 index 000000000..878a717f8 --- /dev/null +++ b/packages/discord-types/src/stores/SelectedGuildStore.d.ts @@ -0,0 +1,32 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { GenericConstructor } from "../internal"; +import type { FluxPersistedStore } from "./abstract/FluxPersistedStore"; + +export interface SelectedGuildStoreState { + lastSelectedGuildId: string | null; + selectedGuildId: string | null; + selectedGuildTimestampMillis: { [guildId: string]: number; }; +} + +export type SelectedGuildStoreAction = ExtractAction; + +export class SelectedGuildStore< + Constructor extends GenericConstructor = typeof SelectedGuildStore, + State extends SelectedGuildStoreState = SelectedGuildStoreState, + Action extends FluxAction = SelectedGuildStoreAction +> extends FluxPersistedStore { + static displayName: "SelectedGuildStore"; + static persistKey: "SelectedGuildStore"; + + getGuildId(): string | null; + getLastSelectedGuildId(): string | null; + getLastSelectedTimestamp(guildId: string): number | undefined; + getState(): State; + initialize(state: SelectedGuildStoreState): void; +} diff --git a/packages/discord-types/src/stores/UserProfileStore.d.ts b/packages/discord-types/src/stores/UserProfileStore.d.ts new file mode 100644 index 000000000..53794a68b --- /dev/null +++ b/packages/discord-types/src/stores/UserProfileStore.d.ts @@ -0,0 +1,60 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { GuildMemberProfile } from "../general/GuildMemberProfile"; +import type { GuildRecord } from "../general/GuildRecord"; +import type { UserProfile } from "../general/UserProfile"; +import type { UserRecord } from "../general/UserRecord"; +import type { GenericConstructor, Nullish } from "../internal"; +import type { FluxSnapshot, FluxSnapshotStore } from "./abstract/FluxSnapshotStore"; + +export interface UserProfileStoreSnapshotData { + profile: UserProfile | undefined; + userId: string; +} + +export type UserProfileStoreAction = ExtractAction; + +export class UserProfileStore< + Constructor extends GenericConstructor = typeof UserProfileStore +> extends FluxSnapshotStore { + constructor(); + + static displayName: "UserProfileStore"; + static LATEST_SNAPSHOT_VERSION: number; + + getGuildMemberProfile(userId: string, guildId?: string | Nullish): GuildMemberProfile | Nullish; + getIsAccessibilityTooltipViewed(): boolean; + getMutualFriends(userId: string): { + key: string; // userId + status: StatusType; + user: UserRecord; + }[] | undefined; + getMutualFriendsCount(userId: string): number | undefined; + getMutualGuilds(userId: string): { + guild: GuildRecord; + nick: string | null; + }[] | undefined; + getUserProfile(userId: string): UserProfile | undefined; + isFetchingFriends(userId: string): boolean; + isFetchingProfile(userId: string): boolean; + get isSubmitting(): boolean; + takeSnapshot(): FluxSnapshot; + + loadCache: () => void; +} + +// Original name: StatusTypes +export const enum StatusType { + DND = "dnd", + IDLE = "idle", + INVISIBLE = "invisible", + OFFLINE = "offline", + ONLINE = "online", + STREAMING = "streaming", + UNKNOWN = "unknown", +} diff --git a/packages/discord-types/src/stores/UserStore.d.ts b/packages/discord-types/src/stores/UserStore.d.ts new file mode 100644 index 000000000..efdbe4712 --- /dev/null +++ b/packages/discord-types/src/stores/UserStore.d.ts @@ -0,0 +1,43 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { UserRecord } from "../general/UserRecord"; +import type { GenericConstructor, Nullish } from "../internal"; +import type { FluxSnapshot, FluxSnapshotStore } from "./abstract/FluxSnapshotStore"; + +export interface UserStoreSnapshotData { + users: [UserRecord] | []; +} + +export type UserStoreAction = ExtractAction; + +export class UserStore< + Constructor extends GenericConstructor = typeof UserStore +> extends FluxSnapshotStore { + constructor(); + + static displayName: "UserStore"; + static LATEST_SNAPSHOT_VERSION: number; + + filter(predicate: (user: UserRecord) => user is T, sort?: boolean | undefined): T[]; + filter(predicate: (user: UserRecord) => unknown, sort?: boolean | undefined): UserRecord[]; + findByTag(username: string, discriminator?: string | Nullish): UserRecord | undefined; + forEach(callback: (user: UserRecord) => boolean | undefined): void; + /** + * @returns The UserRecord object for the current user. If no USER_UPDATE action has been dispatched for the current user, undefined is returned. + */ + getCurrentUser(): UserRecord | undefined; + getUser(userId?: string | Nullish): UserRecord | undefined; + getUsers(): { [userId: string]: UserRecord; }; + getUserStoreVersion(): number; + handleLoadCache(cache: { + initialGuildChannels: any[]; // TEMP + privateChannels: any[]; // TEMP + users: any[] | Nullish; // TEMP + }): void; + takeSnapshot(): FluxSnapshot; +} diff --git a/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts b/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts new file mode 100644 index 000000000..6bff9deb6 --- /dev/null +++ b/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts @@ -0,0 +1,55 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { FluxActionHandlerMap } from "../../flux/fluxActionHandlers"; +import type { FluxAction } from "../../flux/fluxActions"; +import type { FluxDispatcher } from "../../flux/FluxDispatcher"; +import type { GenericConstructor, Nullish } from "../../internal"; +import type { FluxStore } from "./FluxStore"; + +export abstract class FluxPersistedStore< + Constructor extends GenericConstructor = GenericConstructor, + State = any, + Action extends FluxAction = FluxAction +> extends FluxStore { + constructor(dispatcher: FluxDispatcher, actionHandlers: FluxActionHandlerMap); + + static _clearAllPromise: Promise | Nullish; + static _writePromises: Map; // TEMP + static _writeResolvers: Map; // TEMP + static allPersistKeys: Set; + static clearAll(e: any): Promise; // TEMP + static clearPersistQueue(e: any): void; // TEMP + static disableWrite: boolean; + static disableWrites: boolean; + static getAllStates(): Promise; // TEMP + static initializeAll(stateMap: Record): void; // TEMP + static migrateAndReadStoreState(e: any, t: any): { // TEMP + requiresPersist: boolean; + state: any /* | undefined */; // TEMP + }; + static migrations: ((...args: any[]) => any)[] | undefined; + static persistKey: string; // not actually defined on PersistedStore's constructor, but all subclasses are required to have it + static shouldClear(e: any, t: any): boolean; // TEMP + static throttleDelay: number; + static userAgnosticPersistKeys: Set; + + asyncPersist(): Promise; + clear(): void; + getClass(): Constructor; + abstract getState(): State; // TEMP + abstract initialize(state: State): void; // TEMP + initializeFromState(state: State): void; // TEMP + persist(): void; + + _version: number; + callback: (callback: () => void) => void; + throttledCallback: { + (callback: () => void): () => void; + cancel: () => void; + flush: () => () => void; + }; +} diff --git a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts new file mode 100644 index 000000000..59c614a1a --- /dev/null +++ b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts @@ -0,0 +1,36 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { FluxActionHandlerMap } from "../../flux/fluxActionHandlers"; +import type { ExcludeAction, FluxAction } from "../../flux/fluxActions"; +import type { GenericConstructor } from "../../internal"; +import type { FluxStore } from "./FluxStore"; + +export interface FluxSnapshot { + data: SnapshotData; + version: number; +} + +export type FluxSnapshotStoreAction = ExcludeAction; + +export abstract class FluxSnapshotStore< + Constructor extends GenericConstructor = GenericConstructor, + SnapshotData = any, + Action extends FluxSnapshotStoreAction = FluxSnapshotStoreAction +> extends FluxStore> { + constructor(actionHandlers: FluxActionHandlerMap); + + static allStores: FluxSnapshotStore[]; + static clearAll(): void; + static displayName: string; // not actually defined on SnapshotStore's constructor, but all subclasses are required to have it + + clear(): void; + getClass(): Constructor; + get persistKey(): string; + readSnapshot(version: number): SnapshotData | null; + save(): void; + abstract takeSnapshot(): FluxSnapshot; +} diff --git a/packages/discord-types/src/stores/abstract/FluxStore.d.ts b/packages/discord-types/src/stores/abstract/FluxStore.d.ts new file mode 100644 index 000000000..56bbfd82b --- /dev/null +++ b/packages/discord-types/src/stores/abstract/FluxStore.d.ts @@ -0,0 +1,76 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { FluxActionHandlerMap } from "../../flux/fluxActionHandlers"; +import type { FluxAction } from "../../flux/fluxActions"; +import type { FluxDispatchBand, FluxDispatcher } from "../../flux/FluxDispatcher"; +import type { Nullish } from "../../internal"; + +export abstract class FluxStore { + constructor( + dispatcher: FluxDispatcher, + actionHandlers: FluxActionHandlerMap, + dispatchBand?: FluxDispatchBand | Nullish + ); + + static destroy(): void; + static displayName: string | undefined; // undefined on FluxStore's constructor + static getAll(): FluxStore[]; + static initialize(): void; + static initialized: Promise; + + emitChange(): void; + getDispatchToken(): string; + getName(): string; + initialize(...args: unknown[]): void; + initializeIfNeeded(): void; + mustEmitChanges( + mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */ + ): void; + registerActionHandlers( + actionHandlers: FluxActionHandlerMap, + dispatchBand?: FluxDispatchBand | Nullish + ): void; + syncWith( + stores: FluxStore[], + func: () => boolean | undefined, + timeout?: number | Nullish + ): void; + waitFor(...stores: FluxStore[]): void; + + __getLocalVars: undefined; + _changeCallbacks: FluxChangeListeners; + _dispatcher: FluxDispatcher; + _dispatchToken: string; + _isInitialized: boolean; + _mustEmitChanges: ((action: Action) => boolean) | Nullish; + _reactChangeCallbacks: FluxChangeListeners; + _syncWiths: { + func: () => boolean | undefined; + store: FluxStore; + }[]; + addChangeListener: FluxChangeListeners["add"]; + addConditionalChangeListener: FluxChangeListeners["addConditional"]; + addReactChangeListener: FluxChangeListeners["add"]; + removeChangeListener: FluxChangeListeners["remove"]; + removeReactChangeListener: FluxChangeListeners["remove"]; +} + +export type FluxChangeListener = () => boolean; + +export class FluxChangeListeners { + has(listener: FluxChangeListener): boolean; + hasAny(): boolean; + invokeAll(): void; + + add: (listener: FluxChangeListener) => void; + addConditional: ( + listener: FluxChangeListener, + immediatelyCall?: boolean | undefined /* = true */ + ) => void; + listeners: Set; + remove: (listener: FluxChangeListener) => void; +} diff --git a/packages/discord-types/src/stores/abstract/index.d.ts b/packages/discord-types/src/stores/abstract/index.d.ts new file mode 100644 index 000000000..1c408f3b6 --- /dev/null +++ b/packages/discord-types/src/stores/abstract/index.d.ts @@ -0,0 +1,9 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export * from "./FluxPersistedStore"; +export * from "./FluxSnapshotStore"; +export * from "./FluxStore"; diff --git a/packages/discord-types/src/stores/index.d.ts b/packages/discord-types/src/stores/index.d.ts new file mode 100644 index 000000000..c554253c5 --- /dev/null +++ b/packages/discord-types/src/stores/index.d.ts @@ -0,0 +1,17 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export * from "./abstract"; +export * from "./ChannelStore"; +export * from "./GuildMemberStore"; +export * from "./GuildStore"; +export * from "./MessageStore"; +export * from "./RelationshipStore"; +export * from "./SelectedChannelStore"; +export * from "./SelectedGuildStore"; +export * from "./UserProfileStore"; +export * from "./UserStore"; +export * from "./utils"; diff --git a/packages/discord-types/src/stores/utils.d.ts b/packages/discord-types/src/stores/utils.d.ts new file mode 100644 index 000000000..d8b280ab1 --- /dev/null +++ b/packages/discord-types/src/stores/utils.d.ts @@ -0,0 +1,27 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type UseStateFromStoresHook = ( + stores: FluxStore[], + getStateFromStores: () => State, + dependencies?: unknown[] | Nullish, + areStatesEqual?: ((prevState: State, currState: State) => boolean) | undefined +) => State; + +export type UseStateFromStoresArrayHook = ( + stores: FluxStore[], + getStateFromStores: () => State, + dependencies?: unknown[] | Nullish +) => State; + +export type UseStateFromStoresObjectHook = ( + stores: FluxStore[], + getStateFromStores: () => State, + dependencies?: unknown[] | Nullish +) => State; diff --git a/packages/discord-types/tsconfig.eslint.json b/packages/discord-types/tsconfig.eslint.json new file mode 100644 index 000000000..7d1f4e555 --- /dev/null +++ b/packages/discord-types/tsconfig.eslint.json @@ -0,0 +1,19 @@ +{ + "exclude": ["src"], + + "compilerOptions": { + "exactOptionalPropertyTypes": true, + "noUncheckedIndexedAccess": true, + "strict": true, + + "module": "NodeNext", + "typeRoots": ["./node_modules/@eslint-types", "./node_modules/@types"], + + "noEmit": true, + + "allowJs": true, + "checkJs": true, + + "target": "ESNext" + } +} diff --git a/packages/discord-types/tsconfig.json b/packages/discord-types/tsconfig.json new file mode 100644 index 000000000..e6f271c81 --- /dev/null +++ b/packages/discord-types/tsconfig.json @@ -0,0 +1,30 @@ +{ + "include": ["src"], + + "compilerOptions": { + "exactOptionalPropertyTypes": true, + "strict": true, + + "module": "Node16", + "types": ["events"], + + "noEmit": true, + + "lib": [ + "DOM", + "ES2019", + "ES2020.BigInt", + "ES2020.Date", + "ES2020.Intl", + "ES2020.Number", + "ES2020.Promise", + "ES2020.String", + "ES2021.String", + "ES2022.Array", + "ES2022.Object", + "ES2022.String", + "ES2023.Array" + ], + "target": "ES2020" + } +} diff --git a/src/plugins/index.ts b/src/plugins/index.ts index c34a8572d..a434b4a6f 100644 --- a/src/plugins/index.ts +++ b/src/plugins/index.ts @@ -23,7 +23,7 @@ import { Logger } from "@utils/Logger"; import { canonicalizeFind } from "@utils/patches"; import { Patch, Plugin, StartAt } from "@utils/types"; import { FluxDispatcher } from "@webpack/common"; -import type { FluxActionType } from "@webpack/types"; +import { FluxEvents } from "@webpack/types"; import Plugins from "~plugins"; @@ -134,7 +134,7 @@ export function subscribePluginFluxEvents(p: Plugin, fluxDispatcher: typeof Flux logger.debug("Subscribing to flux events of plugin", p.name); for (const [event, handler] of Object.entries(p.flux)) { - fluxDispatcher.subscribe(event as FluxActionType, handler); + fluxDispatcher.subscribe(event as FluxEvents, handler); } } } @@ -145,7 +145,7 @@ export function unsubscribePluginFluxEvents(p: Plugin, fluxDispatcher: typeof Fl logger.debug("Unsubscribing from flux events of plugin", p.name); for (const [event, handler] of Object.entries(p.flux)) { - fluxDispatcher.unsubscribe(event as FluxActionType, handler); + fluxDispatcher.unsubscribe(event as FluxEvents, handler); } } } diff --git a/src/utils/types.ts b/src/utils/types.ts index ea77f3826..6e1524196 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -18,7 +18,7 @@ import { Command } from "@api/Commands"; import { NavContextMenuPatchCallback } from "@api/ContextMenu"; -import type { FluxActionType } from "@webpack/types"; +import { FluxEvents } from "@webpack/types"; import { Promisable } from "type-fest"; // exists to export default definePlugin({...}) @@ -120,7 +120,7 @@ export interface PluginDef { * Allows you to subscribe to Flux events */ flux?: { - [E in FluxActionType]?: (event: any) => void; + [E in FluxEvents]?: (event: any) => void; }; /** * Allows you to manipulate context menus diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index e4c27f58b..123c62b05 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -16,6 +16,8 @@ * along with this program. If not, see . */ +import type * as Stores from "discord-types/stores"; + // eslint-disable-next-line path-alias/no-relative import { findByPropsLazy } from "../webpack"; import { waitForStore } from "./internal"; @@ -27,9 +29,11 @@ export type GenericStore = t.FluxStore & Record; export const { DraftType }: { DraftType: typeof t.DraftType; } = findByPropsLazy("DraftType"); -export let MessageStore: t.MessageStore; +export let MessageStore: Omit & { + getMessages(chanId: string): any; +}; -// Original name: ChannelActionCreators, this is not actually a FluxStore +// this is not actually a FluxStore export const PrivateChannelsStore = findByPropsLazy("openPrivateChannel"); export let PermissionStore: GenericStore; export let GuildChannelStore: GenericStore; @@ -37,13 +41,16 @@ export let ReadStateStore: GenericStore; export let PresenceStore: GenericStore; export let GuildStore: t.GuildStore; -export let UserStore: t.UserStore; -export let UserProfileStore: t.UserProfileStore; -export let SelectedChannelStore: t.SelectedChannelStore; -export let SelectedGuildStore: t.SelectedGuildStore; -export let ChannelStore: t.ChannelStore; -export let GuildMemberStore: t.GuildMemberStore; -export let RelationshipStore: t.RelationshipStore; +export let UserStore: Stores.UserStore & t.FluxStore; +export let UserProfileStore: GenericStore; +export let SelectedChannelStore: Stores.SelectedChannelStore & t.FluxStore; +export let SelectedGuildStore: t.FluxStore & Record; +export let ChannelStore: Stores.ChannelStore & t.FluxStore; +export let GuildMemberStore: Stores.GuildMemberStore & t.FluxStore; +export let RelationshipStore: Stores.RelationshipStore & t.FluxStore & { + /** Get the date (as a string) that the relationship was created */ + getSince(userId: string): string; +}; export let EmojiStore: t.EmojiStore; export let WindowStore: t.WindowStore; @@ -53,28 +60,28 @@ export let DraftStore: t.DraftStore; * React hook that returns stateful data for one or more stores * You might need a custom comparator (4th argument) if your store data is an object * @param stores The stores to listen to - * @param getStateFromStores A function that returns the data you need + * @param mapper A function that returns the data you need * @param dependencies An array of reactive values which the hook depends on. Use this if your mapper or equality function depends on the value of another hook - * @param areStatesEqual A custom comparator for the data returned by mapper + * @param isEqual A custom comparator for the data returned by mapper * * @example const user = useStateFromStores([UserStore], () => UserStore.getCurrentUser(), null, (old, current) => old.id === current.id); */ // eslint-disable-next-line prefer-destructuring export const useStateFromStores: t.useStateFromStores = findByPropsLazy("useStateFromStores").useStateFromStores; -waitForStore("ChannelStore", m => ChannelStore = m); waitForStore("DraftStore", s => DraftStore = s); -waitForStore("EmojiStore", m => EmojiStore = m); -waitForStore("GuildChannelStore", m => GuildChannelStore = m); -waitForStore("GuildMemberStore", m => GuildMemberStore = m); +waitForStore("UserStore", s => UserStore = s); +waitForStore("UserProfileStore", m => UserProfileStore = m); +waitForStore("ChannelStore", m => ChannelStore = m); +waitForStore("SelectedChannelStore", m => SelectedChannelStore = m); +waitForStore("SelectedGuildStore", m => SelectedGuildStore = m); waitForStore("GuildStore", m => GuildStore = m); -waitForStore("MessageStore", m => MessageStore = m); +waitForStore("GuildMemberStore", m => GuildMemberStore = m); +waitForStore("RelationshipStore", m => RelationshipStore = m); waitForStore("PermissionStore", m => PermissionStore = m); waitForStore("PresenceStore", m => PresenceStore = m); waitForStore("ReadStateStore", m => ReadStateStore = m); -waitForStore("RelationshipStore", m => RelationshipStore = m); -waitForStore("SelectedChannelStore", m => SelectedChannelStore = m); -waitForStore("SelectedGuildStore", m => SelectedGuildStore = m); -waitForStore("UserProfileStore", m => UserProfileStore = m); -waitForStore("UserStore", s => UserStore = s); +waitForStore("GuildChannelStore", m => GuildChannelStore = m); +waitForStore("MessageStore", m => MessageStore = m); waitForStore("WindowStore", m => WindowStore = m); +waitForStore("EmojiStore", m => EmojiStore = m); diff --git a/src/webpack/common/types/fluxEvents.d.ts b/src/webpack/common/types/fluxEvents.d.ts new file mode 100644 index 000000000..36bcb2cde --- /dev/null +++ b/src/webpack/common/types/fluxEvents.d.ts @@ -0,0 +1,40 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +/* +function makeFluxEventList() { + // prefill MESSAGE_CREATE so that typescript infers this is a String Set + // without explicitly typing so that this function is also valid javascript + const events = new Set(["MESSAGE_CREATE"]); + + const { nodes } = Vencord.Webpack.Common.FluxDispatcher._actionHandlers._dependencyGraph; + for (const nodeId in nodes) { + for (const event in nodes[nodeId].actionHandler) { + events.add(event); + } + } + for (const event in Vencord.Webpack.Common.FluxDispatcher._subscriptions) { + events.add(event); + } + + return Array.from(events, e => JSON.stringify(e)).sort().join("|"); +} +*/ + +// 46kb worth of events ??????? +export type FluxEvents = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_DETECTION_MODAL_SEEN" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SUPPORT_CHANGED" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PIP_MODE_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "ALLOW_SPAM_MESSAGES_FOR_USER" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMANDS_FETCH" | "APPLICATION_COMMANDS_FETCH_FOR_APPLICATION" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_FETCH" | "APPLICATION_COMMAND_REGISTRY_UPDATE" | "APPLICATION_COMMAND_SEARCH_STORE_QUERY" | "APPLICATION_COMMAND_SEARCH_STORE_UI_UPDATE" | "APPLICATION_COMMAND_SEARCH_STORE_UPDATE" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_DIRECTORY_FETCH_SUCCESS" | "APPLICATION_STORE_DIRECTORY_MUTE" | "APPLICATION_STORE_DIRECTORY_UNMUTE" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_ERROR" | "BILLING_USER_PREMIUM_LIKELIHOOD_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ADD" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_REMOVE" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_CLOSE" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_OPEN" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_HIGHLIGHTS_FETCH_START" | "CHANNEL_HIGHLIGHTS_FETCH_SUCCESS" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MESSAGE_PREVIEW_LOAD_MESSAGES" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_MUSIC_MUTED" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_GUILD_CACHE" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_SAVE_CLIP" | "CLIPS_SETTINGS_UPDATE" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CREATE_PENDING_REPLY" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_ENABLED" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISCOVER_GUILDS_FETCH_FAILURE" | "DISCOVER_GUILDS_FETCH_START" | "DISCOVER_GUILDS_FETCH_SUCCESS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_NITRODUCTION_TOOLTIP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_FREE_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_FREE_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_INBOUND_UPDATE" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMOJI_DELETE" | "EMOJI_FETCH_FAILURE" | "EMOJI_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "EMOJI_UPLOAD_START" | "EMOJI_UPLOAD_STOP" | "ENABLE_AUTOMATIC_ACK" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "EXPERIMENT_TRIGGER" | "FETCH_AUTH_SESSIONS_SUCCESS" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_ICON_UPDATE" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_SUCCESS" | "GUILD_ANALYTICS_MEMBER_INSIGHTS_FETCH_SUCCESS" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_DISABLE_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_STATUS" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE" | "GUILD_MOVE_BY_ID" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTIONS_CONFIGURATIONS_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_RESET" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_FAILED" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SUBMIT" | "GUILD_SETTINGS_DEFAULT_CHANNELS_TOGGLE" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INTEGRATIONS_WITH_COMMANDS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_EDUCATION_UPSELL_DISMISSED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_EDIT" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_ERRORS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_FAILED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SUBMIT" | "GUILD_SETTINGS_ONBOARDING_STEP" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS" | "GUILD_SETTINGS_ROLES_EDIT_SECTION_UPDATE" | "GUILD_SETTINGS_ROLES_INIT" | "GUILD_SETTINGS_ROLES_SAVE_FAIL" | "GUILD_SETTINGS_ROLES_SAVE_SUCCESS" | "GUILD_SETTINGS_ROLES_SORT_UPDATE" | "GUILD_SETTINGS_ROLES_SUBMITTING" | "GUILD_SETTINGS_ROLES_UPDATE_COLOR" | "GUILD_SETTINGS_ROLES_UPDATE_DESCRIPTION" | "GUILD_SETTINGS_ROLES_UPDATE_NAME" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSION_SET" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_CONNECTION_CONFIGURATIONS" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_ICON" | "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SETTINGS_VANITY_URL_CLOSE" | "GUILD_SETTINGS_VANITY_URL_ERROR" | "GUILD_SETTINGS_VANITY_URL_RESET" | "GUILD_SETTINGS_VANITY_URL_SET" | "GUILD_SOUNDBOARD_DELETE_SUCCESS" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_FETCH_FAILURE" | "GUILD_SOUNDBOARD_FETCH_SUCCESS" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_UPDATE_SUCCESS" | "GUILD_SOUNDBOARD_UPLOAD_SUCCESS" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_TOP_READ_CHANNELS_FETCH_SUCCESS" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UNREADS_SET_LAST_CLEARED" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIDE_SPAM_MESSAGES_FOR_USER" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_APPLICATION_PERMISSIONS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_CLEAR" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_COMMAND_UPDATE" | "INTEGRATION_PERMISSION_SETTINGS_EDIT" | "INTEGRATION_PERMISSION_SETTINGS_INIT" | "INTEGRATION_PERMISSION_SETTINGS_RESET" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_COMMAND" | "INTEGRATION_SETTINGS_START_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_COMMAND" | "INTEGRATION_SETTINGS_STOP_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_INTEGRATION" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOBBY_CONNECT" | "LOBBY_CREATE" | "LOBBY_DELETE" | "LOBBY_DISCONNECT" | "LOBBY_MEMBER_CONNECT" | "LOBBY_MEMBER_DISCONNECT" | "LOBBY_MEMBER_UPDATE" | "LOBBY_MESSAGE" | "LOBBY_UPDATE" | "LOBBY_VOICE_CONNECT" | "LOBBY_VOICE_DISCONNECT" | "LOBBY_VOICE_SERVER_UPDATE" | "LOBBY_VOICE_STATE_UPDATE" | "LOCAL_ACTIVITY_UPDATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_MFA_WEBAUTHN" | "LOGIN_MFA_WEBAUTHN_TO_TOTP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGOUT" | "LOGOUT_AUTH_SESSIONS_SUCCESS" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_ENABLE_SOUNDSHARE" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_AV1" | "MEDIA_ENGINE_SET_DESKTOP_SOURCE" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_TODO_ADD" | "MESSAGE_TODO_CLEANUP" | "MESSAGE_TODO_COMPLETE" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MFA_CLEAR_BACKUP_CODES" | "MFA_DISABLE_SUCCESS" | "MFA_ENABLE_SUCCESS" | "MFA_SEND_VERIFICATION_KEY" | "MFA_SMS_TOGGLE" | "MFA_SMS_TOGGLE_COMPLETE" | "MFA_VIEW_BACKUP_CODES" | "MFA_WEBAUTHN_CREDENTIALS_LOADED" | "MFA_WEBAUTHN_CREDENTIALS_LOADING" | "MFA_WEBAUTHN_CREDENTIAL_CREATE" | "MFA_WEBAUTHN_CREDENTIAL_DELETE" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NITRODUCTION_PERSISTENT_ONBOARDING_TOGGLE_COLLAPSE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_GAMES_CHANGE" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_START_SESSION" | "PARTNER_REQUIREMENTS_FETCH_FAILURE" | "PARTNER_REQUIREMENTS_FETCH_START" | "PARTNER_REQUIREMENTS_FETCH_SUCCESS" | "PASSIVE_UPDATE_V1" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_PANEL_TOGGLE_SECTION" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECENT_MENTION_DELETE" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_FORUM_UNREADS" | "RESET_ALL_NITRODUCTION_TOOLTIPS" | "RESET_HAS_COMPLETED_STEP" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HAS_COMPLETED_STEP" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SOUNDPACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_ADD_FAVORITE_SOUND" | "SOUNDBOARD_REMOVE_FAVORITE_SOUND" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_APPLICATION_INTERACTION_FAKE_USER" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPDATE_APP_COLORS" | "UPDATE_AVAILABLE" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HAS_FLOW_START_EVENT_BEEN_EMITTED" | "UPDATE_MANUALLY" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_DISABLE_SUBMIT" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SETTINGS_THEME_OVERRIDE" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SETTINGS_CLEAR" | "WELCOME_SCREEN_SETTINGS_RESET" | "WELCOME_SCREEN_SETTINGS_UPDATE" | "WELCOME_SCREEN_SUBMIT" | "WELCOME_SCREEN_SUBMIT_FAILURE" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD"; diff --git a/src/webpack/common/types/index.d.ts b/src/webpack/common/types/index.d.ts index 707594427..01c968553 100644 --- a/src/webpack/common/types/index.d.ts +++ b/src/webpack/common/types/index.d.ts @@ -18,7 +18,7 @@ export * from "./classes"; export * from "./components"; -export * from "./fluxActions"; +export * from "./fluxEvents"; export * from "./i18nMessages"; export * from "./menu"; export * from "./settingsStores"; diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index edeb5af0a..059924f5a 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -16,930 +16,42 @@ * along with this program. If not, see . */ -import type { Duration, Moment } from "moment"; -import type { SnakeCasedProperties } from "type-fest"; +import { DraftType } from "@webpack/common"; +import { Channel, Guild, Role } from "discord-types/general"; -import type { ExcludeAction, ExtractAction, FluxAction, FluxActionHandlerMap, FluxDispatchBand, FluxDispatcher } from "./utils"; +import { FluxDispatcher, FluxEvents } from "./utils"; -type Defined = Exclude; +type GenericFunction = (...args: any[]) => any; -type Nullish = null | undefined; - -type FluxChangeListener = () => boolean; - -declare class FluxChangeListeners { - has(listener: FluxChangeListener): boolean; - hasAny(): boolean; - invokeAll(): void; - - add: (listener: FluxChangeListener) => void; - addConditional: ( - listener: FluxChangeListener, - immediatelyCall?: boolean | undefined /* = true */ - ) => void; - listeners: Set; - remove: (listener: FluxChangeListener) => void; -} - -export abstract class FluxStore { - constructor( - dispatcher: FluxDispatcher, - actionHandlers: FluxActionHandlerMap, - dispatchBand?: FluxDispatchBand | Nullish - ); - - static displayName: string | undefined; // undefined on FluxStore's constructor - static destroy(): void; - static getAll(): FluxStore[]; - static initialize(): void; - static initialized: Promise; +export class FluxStore { + constructor(dispatcher: FluxDispatcher, eventHandlers?: Partial void>>); + addChangeListener(callback: () => void): void; + addReactChangeListener(callback: () => void): void; + removeChangeListener(callback: () => void): void; + removeReactChangeListener(callback: () => void): void; emitChange(): void; getDispatchToken(): string; getName(): string; - initialize(...args: unknown[]): void; + initialize(): void; initializeIfNeeded(): void; - mustEmitChanges( - mustEmitChanges?: ((action: Action) => boolean) | Nullish /* = () => true */ - ): void; - registerActionHandlers( - actionHandlers: FluxActionHandlerMap, - dispatchBand?: FluxDispatchBand | Nullish - ): void; - syncWith( - stores: FluxStore[], - func: () => boolean | void, - timeout?: number | Nullish - ): void; - waitFor(...stores: FluxStore[]): void; - - __getLocalVars: undefined; - _changeCallbacks: FluxChangeListeners; - _dispatcher: FluxDispatcher; - _dispatchToken: string; - _isInitialized: boolean; - _mustEmitChanges: ((action: Action) => boolean) | Nullish; - _reactChangeCallbacks: FluxChangeListeners; - _syncWiths: { - func: () => boolean | void; - store: FluxStore; - }[]; - addChangeListener: FluxChangeListeners["add"]; - addConditionalChangeListener: FluxChangeListeners["addConditional"]; - addReactChangeListener: FluxChangeListeners["add"]; - removeChangeListener: FluxChangeListeners["remove"]; - removeReactChangeListener: FluxChangeListeners["remove"]; -} - -interface GenericConstructor { - new (...args: any[]): any; -} - -export abstract class FluxPersistedStore< - Constructor extends GenericConstructor = GenericConstructor, - State = any, - Action extends FluxAction = FluxAction -> extends FluxStore { - constructor(dispatcher: FluxDispatcher, actionHandlerst: FluxActionHandlerMap); - - static _clearAllPromise: Promise | Nullish; - static _writePromises: Map; // TEMP - static _writeResolvers: Map; // TEMP - static allPersistKeys: Set; - static clearAll(e: any): Promise; // TEMP - static clearPersistQueue(e: any): void; // TEMP - static disableWrite: boolean; - static disableWrites: boolean; - static getAllStates(): Promise; // TEMP - static initializeAll(stateMap: Record): void; // TEMP - static migrateAndReadStoreState(e: any, t: any): { // TEMP - state: any /* | undefined */; // TEMP - requiresPersist: boolean; - }; - static migrations: ((...args: any[]) => any)[] | undefined; - static persistKey: string; // not actually defined on PersistedStore's constructor, but all subclasses are required to have it - static shouldClear(e: any, t: any): boolean; // TEMP - static throttleDelay: number; - static userAgnosticPersistKeys: Set; - - asyncPersist(): Promise; - clear(): void; - getClass(): Constructor; - abstract getState(): State; // TEMP - abstract initialize(state: State): void; // TEMP - initializeFromState(state: State): void; // TEMP - persist(): void; - - _version: number; - callback: (callback: () => void) => void; - throttledCallback: { - (callback: () => void): () => void; - cancel: () => void; - flush: () => () => void; - }; -} - -interface FluxSnapshot { - data: SnapshotData; - version: number; -} - -type FluxSnapshotStoreAction = ExcludeAction; - -export abstract class FluxSnapshotStore< - Constructor extends GenericConstructor = GenericConstructor, - SnapshotData = any, - Action extends FluxSnapshotStoreAction = FluxSnapshotStoreAction -> extends FluxStore> { - constructor(actionHandlers: FluxActionHandlerMap); - - static allStores: FluxSnapshotStore[]; - static displayName: string; // not actually defined on SnapshotStore's constructor, but all subclasses are required to have it - static clearAll(): void; - - clear(): void; - getClass(): Constructor; - get persistKey(): string; - readSnapshot(version: number): SnapshotData | null; - save(): void; - abstract takeSnapshot(): FluxSnapshot; + registerActionHandlers: GenericFunction; + syncWith: GenericFunction; + waitFor: GenericFunction; + __getLocalVars(): Record; } export interface Flux { Store: typeof FluxStore; } -export type useStateFromStores = ( - stores: FluxStore[], - getStateFromStores: () => State, - dependencies?: unknown[] | Nullish, - areStatesEqual?: ((prevState: State, currState: State) => boolean) | undefined -) => State; - -// Original name: Record, renamed to avoid conflict with the Record util type -export class ImmutableRecord> { - merge(collection: Partial): this; - set(key: Key, value: OwnProperties[Key]): this; - toJS(): OwnProperties; - update( - key: Key, - updater: (value: OwnProperties[Key]) => OwnProperties[Key] - ): this; - update( - key: Key, - notSetValue: OwnProperties[Key], - updater: (value: OwnProperties[Key]) => OwnProperties[Key] - ): this; -} - -/* -// bigint enums are not yet possible: https://github.com/microsoft/TypeScript/issues/37783 -export const enum 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, - ADD_REACTIONS = 1n << 6n, - VIEW_AUDIT_LOG = 1n << 7n, - PRIORITY_SPEAKER = 1n << 8n, - STREAM = 1n << 9n, - VIEW_CHANNEL = 1n << 10n, - 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, - VIEW_GUILD_ANALYTICS = 1n << 19n, - CONNECT = 1n << 20n, - SPEAK = 1n << 21n, - MUTE_MEMBERS = 1n << 22n, - DEAFEN_MEMBERS = 1n << 23n, - MOVE_MEMBERS = 1n << 24n, - USE_VAD = 1n << 25n, - CHANGE_NICKNAME = 1n << 26n, - MANAGE_NICKNAMES = 1n << 27n, - MANAGE_ROLES = 1n << 28n, - MANAGE_WEBHOOKS = 1n << 29n, - MANAGE_GUILD_EXPRESSIONS = 1n << 30n, - USE_APPLICATION_COMMANDS = 1n << 31n, - REQUEST_TO_SPEAK = 1n << 32n, - MANAGE_EVENTS = 1n << 33n, - 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, - USE_EMBEDDED_ACTIVITIES = 1n << 39n, - MODERATE_MEMBERS = 1n << 40n, - VIEW_CREATOR_MONETIZATION_ANALYTICS = 1n << 41n, - USE_SOUNDBOARD = 1n << 42n, - CREATE_GUILD_EXPRESSIONS = 1n << 43n, - CREATE_EVENTS = 1n << 44n, - USE_EXTERNAL_SOUNDS = 1n << 45n, - SEND_VOICE_MESSAGES = 1n << 46n, - USE_CLYDE_AI = 1n << 47n, - SET_VOICE_CHANNEL_STATUS = 1n << 48n, - SEND_POLLS = 1n << 49n, -} -*/ - -export interface ForumTag { - id: string; - emojiId: string | null; - emojiName: string | null; - moderated: boolean; - name: string; -} - -export const enum FormLayout { - DEFAULT = 0, - LIST = 1, - GRID = 2, -} - -export const enum ThreadSortOrder { - LATEST_ACTIVITY = 0, - CREATION_DATE = 1, -} - -export const enum ChannelFlags { - GUILD_FEED_REMOVED = 1 << 0, - PINNED = 1 << 1, - ACTIVE_CHANNELS_REMOVED = 1 << 2, - REQUIRE_TAG = 1 << 4, - IS_SPAM = 1 << 5, - IS_GUILD_RESOURCE_CHANNEL = 1 << 7, - CLYDE_AI = 1 << 8, - IS_SCHEDULED_FOR_DELETION = 1 << 9, - IS_MEDIA_CHANNEL = 1 << 10, - SUMMARIES_DISABLED = 1 << 11, - IS_ROLE_SUBSCRIPTION_TEMPLATE_PREVIEW_CHANNEL = 1 << 13, - IS_BROADCASTING = 1 << 14, - HIDE_MEDIA_DOWNLOAD_OPTIONS = 1 << 15, - IS_JOIN_REQUEST_INTERVIEW_CHANNEL = 1 << 16, -} - -export const enum ThreadMemberFlags { - HAS_INTERACTED = 1 << 0, - ALL_MESSAGES = 1 << 1, - ONLY_MENTIONS = 1 << 2, - NO_MESSAGES = 1 << 3, -} - -export interface ThreadMember { - flags: ThreadMemberFlags; - joinTimestamp: string; - muteConfig: { - end_time: string | null; - selected_time_window: number; - } | null; - muted: boolean; -} - -export const enum PermissionOverwriteType { - ROLE = 0, - MEMBER = 1, -} - -export interface PermissionOverwrite { - allow: /* Permissions */ bigint; - deny: /* Permissions */ bigint; - id: string; - type: PermissionOverwriteType; -} - -interface PermissionOverwriteMap { - [roleIdOrUserId: string]: PermissionOverwrite; -} - -export interface ChannelRecipient { - avatar: string | null; - avatar_decoration_data: SnakeCasedProperties | null; - bot?: boolean; - clan: SnakeCasedProperties | null; - discriminator: string; - display_name?: string | null; - global_name: string | null; - id: string; - public_flags: UserFlags; - username: string; -} - -export const enum SafetyWarningTypes { - STRANGER_DANGER = 1, - INAPPROPRIATE_CONVERSATION_TIER_1 = 2, - INAPPROPRIATE_CONVERSATION_TIER_2 = 3, -} - -export interface SafetyWarning { - type: SafetyWarningTypes; - dismiss_timestamp?: string | Nullish; // TEMP -} - -export interface ThreadMetadata { - archived: boolean; - archiveTimestamp: string; - autoArchiveDuration: number; - createTimestamp: string | Nullish; - invitable: boolean; - locked: boolean; -} - -export const enum ChannelTypes { - GUILD_TEXT = 0, - DM = 1, - GUILD_VOICE = 2, - GROUP_DM = 3, - GUILD_CATEGORY = 4, - GUILD_ANNOUNCEMENT = 5, - GUILD_STORE = 6, - ANNOUNCEMENT_THREAD = 10, - PUBLIC_THREAD = 11, - PRIVATE_THREAD = 12, - GUILD_STAGE_VOICE = 13, - GUILD_DIRECTORY = 14, - GUILD_FORUM = 15, - GUILD_MEDIA = 16, - UNKNOWN = 10_000, -} - -export const enum VideoQualityMode { - AUTO = 1, - FULL = 2, -} - -export const enum VoiceCallBackgroundTypes { - EMPTY = 0, - GRADIENT = 1, -} - -type ChannelRecordOwnPropertyKeys = "application_id" | "appliedTags" | "availableTags" | "bitrate_" | "defaultAutoArchiveDuration" | "defaultForumLayout" | "defaultReactionEmoji" | "defaultSortOrder" | "defaultThreadRateLimitPerUser" | "flags_" | "guild_id" | "icon" | "iconEmoji" | "id" | "isMessageRequest" | "isMessageRequestTimestamp" | "isSpam" | "lastMessageId" | "lastPinTimestamp" | "member" | "memberCount" | "memberIdsPreview" | "memberListId" | "messageCount" | "name" | "nicks" | "nsfw_" | "originChannelId" | "ownerId" | "parentChannelThreadType" | "parent_id" | "permissionOverwrites_" | "position_" | "rateLimitPerUser_" | "rawRecipients" | "recipients" | "rtcRegion" | "safetyWarnings" | "template" | "themeColor" | "threadMetadata" | "topic_" | "totalMessageSent" | "type" | "userLimit_" | "version" | "videoQualityMode"; - -type ChannelRecordOwnProperties = Pick; - -// does not extend ImmutableRecord -export abstract class ChannelRecordBase { - constructor(channelProperties: Record); // TEMP - - get accessPermissions(): /* Permissions */ bigint; - get bitrate(): number; - computeLurkerPermissionsAllowList(): /* Permissions */ bigint | undefined; - get flags(): ChannelFlags; - getApplicationId(): this["application_id"]; - getDefaultLayout(): FormLayout; - getDefaultSortOrder(): ThreadSortOrder; - getGuildId(): this["guild_id"]; - hasFlag(flag: ChannelFlags): boolean; - isActiveThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 - isAnnouncementThread(): this is ThreadChannelRecord; - isArchivedLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 - isArchivedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 - isBroadcastChannel(): boolean; - isCategory(): this is GuildCategoryChannelRecord; - isDM(): this is DMChannelRecord; - isDirectory(): this is GuildDirectoryChannelRecord; - isForumChannel(): this is GuildForumChannelRecord; - isForumLikeChannel(): this is ForumChannelRecord; - isForumPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 - isGroupDM(): this is GroupDMChannelRecord; - isGuildStageVoice(): this is GuildStageVoiceChannelRecord; - isGuildVocal(): this is GuildVocalChannelRecord; - isGuildVocalOrThread(): this is GuildVocalChannelRecord | ThreadChannelRecord; - isGuildVoice(): this is GuildVoiceChannelRecord; - isListenModeCapable(): this is GuildStageVoiceChannelRecord; - isLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 - isManaged(): boolean; - isMediaChannel(): this is GuildMediaChannelRecord; - isMediaPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 - isMultiUserDM(): this is GroupDMChannelRecord; - isNSFW(): boolean; - isOwner(userId: string): boolean; - isPrivate(): this is PrivateChannelRecord; - isRoleSubscriptionTemplatePreviewChannel(): boolean; - isScheduledForDeletion(): boolean; - isSystemDM(): boolean; - isThread(): this is ThreadChannelRecord; - isVocal(): this is PrivateChannelRecord | GuildVocalChannelRecord | ThreadChannelRecord; - isVocalThread(): this is ThreadChannelRecord; - merge(collection: Partial>): this; - get nsfw(): boolean; - get permissionOverwrites(): PermissionOverwriteMap; - get position(): number; - get rateLimitPerUser(): number; - set(key: Key, value: ChannelRecordOwnProperties[Key]): this; - toJS(): ChannelRecordOwnProperties; - get topic(): string; - get userLimit(): number; - - application_id?: string | undefined; - appliedTags?: string[] | undefined; - availableTags?: ForumTag[] | undefined; - bitrate_?: number | undefined; - defaultAutoArchiveDuration?: number | undefined; - defaultForumLayout?: FormLayout | undefined; - defaultReactionEmoji?: { - emojiId: string | null; - emojiName: string | null; - } | undefined; - defaultSortOrder?: ThreadSortOrder | Nullish; - defaultThreadRateLimitPerUser?: number | undefined; - flags_: ChannelFlags; - guild_id: string | null; - icon?: string | Nullish; - iconEmoji?: { - id: string | null; - name: string; - } | undefined; - id: string; - isMessageRequest?: boolean | undefined; - isMessageRequestTimestamp?: string | Nullish; - isSpam?: boolean | undefined; - lastMessageId: string | Nullish; - lastPinTimestamp: string | Nullish; - member?: ThreadMember | undefined; - memberCount?: number | undefined; - memberIdsPreview?: string[] | undefined; - memberListId?: string | Nullish; - messageCount?: number | undefined; - name: string; - nicks?: { [userId: string]: string; } | undefined; - nsfw_?: boolean | undefined; - originChannelId?: string | Nullish; - ownerId?: string | undefined; - parent_id?: string | Nullish; - parentChannelThreadType?: ChannelTypes.GUILD_TEXT | ChannelTypes.GUILD_ANNOUNCEMENT | ChannelTypes.GUILD_FORUM | ChannelTypes.GUILD_MEDIA | undefined; - permissionOverwrites_?: PermissionOverwriteMap | undefined; - position_?: number | undefined; - rateLimitPerUser_?: number | undefined; - rawRecipients?: ChannelRecipient[] | undefined; - recipients?: string[] | undefined; - rtcRegion?: string | Nullish; - safetyWarnings?: SafetyWarning[] | undefined; - template?: string | undefined; - themeColor?: number | Nullish; - threadMetadata?: ThreadMetadata | undefined; - topic_?: string | Nullish; - totalMessageSent?: number | undefined; - type: ChannelTypes; - userLimit_?: number | undefined; - version?: number | undefined; - videoQualityMode?: VideoQualityMode | undefined; - voiceBackgroundDisplay?: { type: VoiceCallBackgroundTypes.EMPTY; } - | { type: VoiceCallBackgroundTypes.GRADIENT; resourceId: string; } - | Nullish; -} - -export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP - - static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildTextualChannelRecord; // TEMP - - application_id: undefined; - appliedTags?: undefined; - availableTags?: undefined; - bitrate_?: undefined; - defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; - defaultForumLayout?: undefined; - defaultReactionEmoji?: undefined; - defaultSortOrder?: undefined; - defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; - icon?: undefined; - iconEmoji: ChannelRecordBase["iconEmoji"]; - isMessageRequest?: undefined; - isMessageRequestTimestamp?: undefined; - isSpam?: undefined; - lastMessageId: ChannelRecordBase["lastMessageId"]; - lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; - member?: undefined; - memberCount?: undefined; - memberIdsPreview?: undefined; - memberListId: ChannelRecordBase["memberListId"]; // TEMP - messageCount?: undefined; - nicks?: undefined; - nsfw_: Defined; - originChannelId?: undefined; - ownerId?: undefined; - parent_id: ChannelRecordBase["parent_id"]; - parentChannelThreadType?: undefined; - permissionOverwrites_: Defined; - position_: Defined; - rateLimitPerUser_: Defined; - rawRecipients?: undefined; - recipients?: undefined; - rtcRegion?: undefined; - safetyWarnings?: undefined; - template?: undefined; - themeColor: ChannelRecordBase["themeColor"]; - threadMetadata?: undefined; - topic_: ChannelRecordBase["topic_"]; - totalMessageSent?: undefined; - type: ChannelTypes.GUILD_TEXT | ChannelTypes.GUILD_CATEGORY | ChannelTypes.GUILD_ANNOUNCEMENT | ChannelTypes.GUILD_STORE | ChannelTypes.GUILD_DIRECTORY; - userLimit_?: undefined; - version: ChannelRecordBase["version"]; - videoQualityMode?: undefined; - voiceBackgroundDisplay?: undefined; -} - -export class GuildTextChannelRecord extends GuildTextualChannelRecordBase { - type: ChannelTypes.GUILD_TEXT; -} - -export class GuildCategoryChannelRecord extends GuildTextualChannelRecordBase { - defaultAutoArchiveDuration: undefined; - defaultThreadRateLimitPerUser: undefined; - lastMessageId: undefined; - lastPinTimestamp: undefined; - memberListId: undefined; // TEMP - parent_id: Nullish; - themeColor: undefined; // TEMP - topic_: undefined; - type: ChannelTypes.GUILD_CATEGORY; -} - -export class GuildAnnouncementChannelRecord extends GuildTextualChannelRecordBase { - type: ChannelTypes.GUILD_ANNOUNCEMENT; -} - -export class GuildStoreChannelRecord extends GuildTextualChannelRecordBase { - type: ChannelTypes.GUILD_STORE; -} // TEMP - -export class GuildDirectoryChannelRecord extends GuildTextualChannelRecordBase { - type: ChannelTypes.GUILD_DIRECTORY; -} // TEMP - -export type GuildTextualChannelRecord = GuildTextChannelRecord | GuildCategoryChannelRecord | GuildAnnouncementChannelRecord | GuildStoreChannelRecord | GuildDirectoryChannelRecord; - -export abstract class PrivateChannelRecordBase extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP - - static fromServer(channelFromServer: Record): PrivateChannelRecord; - static sortRecipients(recipients: ChannelRecipient[] | Nullish, channelId: string): string[]; - - addRecipient(recipientUserId: string, nickname: string | undefined, currentUserId: string): this; - getRecipientId(): string | undefined; - removeRecipient(recipientUserId: string): this; - - application_id: ChannelRecordBase["application_id"]; - appliedTags?: undefined; - availableTags?: undefined; - bitrate_?: undefined; - defaultAutoArchiveDuration?: undefined; - defaultForumLayout?: undefined; - defaultReactionEmoji?: undefined; - defaultSortOrder?: undefined; - defaultThreadRateLimitPerUser?: undefined; - guild_id: null; - icon: ChannelRecordBase["icon"]; - iconEmoji?: undefined; - isMessageRequest: ChannelRecordBase["isMessageRequest"]; - isMessageRequestTimestamp: ChannelRecordBase["isMessageRequestTimestamp"]; - isSpam: Defined; - lastMessageId: ChannelRecordBase["lastMessageId"]; - lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; - member?: undefined; - memberCount?: undefined; - memberIdsPreview?: undefined; - memberListId?: undefined; - messageCount?: undefined; - nicks: Defined; - nsfw_?: undefined; - originChannelId?: undefined; - ownerId: ChannelRecordBase["ownerId"]; - parent_id?: undefined; - parentChannelThreadType?: undefined; - permissionOverwrites_?: undefined; - position_?: undefined; - rateLimitPerUser_?: undefined; - rawRecipients: Defined; - recipients: Defined; - rtcRegion?: undefined; - safetyWarnings: ChannelRecordBase["safetyWarnings"]; - template?: undefined; - themeColor?: undefined; - threadMetadata?: undefined; - topic_?: undefined; - totalMessageSent?: undefined; - type: ChannelTypes.DM | ChannelTypes.GROUP_DM; - userLimit_?: undefined; - version?: undefined; - videoQualityMode?: undefined; - voiceBackgroundDisplay?: undefined; -} - -export class DMChannelRecord extends PrivateChannelRecordBase { - application_id: undefined; - icon: undefined; - name: ""; - ownerId: undefined; - type: ChannelTypes.DM; -} - -export class GroupDMChannelRecord extends PrivateChannelRecordBase { - isMessageRequest: undefined; - isMessageRequestTimestamp: undefined; - ownerId: PrivateChannelRecordBase["ownerId"]; - type: ChannelTypes.GROUP_DM; -} - -export type PrivateChannelRecord = DMChannelRecord | GroupDMChannelRecord; - -export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP - - static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildVocalChannelRecord; // TEMP - - application_id: undefined; - appliedTags?: undefined; - availableTags?: undefined; - bitrate_: Defined; - defaultAutoArchiveDuration?: undefined; - defaultForumLayout?: undefined; - defaultReactionEmoji?: undefined; - defaultSortOrder?: undefined; - defaultThreadRateLimitPerUser?: undefined; - icon?: undefined; - iconEmoji: ChannelRecordBase["iconEmoji"]; - isMessageRequest?: undefined; - isMessageRequestTimestamp?: undefined; - isSpam?: undefined; - lastMessageId: ChannelRecordBase["lastMessageId"]; - lastPinTimestamp: undefined; - member?: undefined; - memberCount?: undefined; - memberIdsPreview?: undefined; - memberListId: ChannelRecordBase["memberListId"]; // TEMP - messageCount?: undefined; - nicks?: undefined; - nsfw_: Defined; - originChannelId: ChannelRecordBase["originChannelId"]; // TEMP - ownerId?: undefined; - parent_id: ChannelRecordBase["parent_id"]; - parentChannelThreadType?: undefined; - permissionOverwrites_: Defined; - position_: Defined; - rateLimitPerUser_: Defined; - rawRecipients?: undefined; - recipients?: undefined; - rtcRegion: Defined; - safetyWarnings?: undefined; - template?: undefined; - themeColor: Nullish; // TEMP - threadMetadata?: undefined; - topic_: Nullish; - totalMessageSent?: undefined; - type: ChannelTypes.GUILD_VOICE | ChannelTypes.GUILD_STAGE_VOICE; - userLimit_: Defined; - version: ChannelRecordBase["version"]; - videoQualityMode: ChannelRecordBase["videoQualityMode"]; - voiceBackgroundDisplay: Defined; -} - -export class GuildVoiceChannelRecord extends GuildVocalChannelRecordBase { - type: ChannelTypes.GUILD_VOICE; -} - -export class GuildStageVoiceChannelRecord extends GuildVocalChannelRecordBase { - type: ChannelTypes.GUILD_STAGE_VOICE; -} - -export type GuildVocalChannelRecord = GuildVoiceChannelRecord | GuildStageVoiceChannelRecord; - -type ThreadChannelType = ChannelTypes.ANNOUNCEMENT_THREAD | ChannelTypes.PUBLIC_THREAD | ChannelTypes.PRIVATE_THREAD; - -export class ThreadChannelRecord extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP - - static fromServer(channelFromServer: Record, guildId?: string | Nullish): ThreadChannelRecord; // TEMP - - application_id?: undefined; - appliedTags: Defined; - availableTags?: undefined; - bitrate_: undefined; - defaultAutoArchiveDuration?: undefined; - defaultForumLayout?: undefined; - defaultReactionEmoji?: undefined; - defaultSortOrder?: undefined; - defaultThreadRateLimitPerUser?: undefined; - icon?: undefined; - iconEmoji?: undefined; - isMessageRequest?: undefined; - isMessageRequestTimestamp?: undefined; - isSpam?: undefined; - lastMessageId: ChannelRecordBase["lastMessageId"]; - lastPinTimestamp: ChannelRecordBase["lastMessageId"]; - member: ChannelRecordBase["member"]; - memberCount: Defined; - memberIdsPreview: Defined; - memberListId?: undefined; - messageCount: Defined; - nicks?: undefined; - nsfw_: Defined; - originChannelId?: undefined; - ownerId: Defined; - parentChannelThreadType: Defined; - parent_id: NonNullable; - permissionOverwrites_?: undefined; - position_?: undefined; - rateLimitPerUser_: Defined; - rawRecipients?: undefined; - recipients?: undefined; - rtcRegion: undefined; - safetyWarnings?: undefined; - template?: undefined; - themeColor?: undefined; - threadMetadata: ChannelRecordBase["threadMetadata"]; - topic_?: undefined; - totalMessageSent: ChannelRecordBase["rateLimitPerUser_"]; - type: ChannelType; - userLimit_: undefined; - version?: undefined; - videoQualityMode: undefined; - voiceBackgroundDisplay?: undefined; -} - -export abstract class ForumChannelRecordBase extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP - - static fromServer(channelFromServer: Record, guildId?: string | Nullish): ForumChannelRecord; // TEMP - - application_id?: undefined; - appliedTags?: undefined; - availableTags: Defined; - bitrate_?: undefined; - defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; - defaultForumLayout: ChannelRecordBase["defaultForumLayout"]; - defaultReactionEmoji: ChannelRecordBase["defaultReactionEmoji"]; - defaultSortOrder: ChannelRecordBase["defaultSortOrder"]; - defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; - icon?: undefined; - iconEmoji: ChannelRecordBase["iconEmoji"]; - isMessageRequest?: undefined; - isMessageRequestTimestamp?: undefined; - isSpam?: undefined; - lastMessageId: ChannelRecordBase["lastMessageId"]; - lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; - member?: undefined; - memberCount?: undefined; - memberIdsPreview?: undefined; - memberListId: ChannelRecordBase["memberListId"]; // TEMP - messageCount?: undefined; - nicks?: undefined; - nsfw_: Defined; - originChannelId?: undefined; - ownerId?: undefined; - parentChannelThreadType?: undefined; - parent_id: NonNullable; - permissionOverwrites_: Defined; - position_: Defined; - rateLimitPerUser_: Defined; - rawRecipients?: undefined; - recipients?: undefined; - rtcRegion?: undefined; - safetyWarnings?: undefined; - template: Defined; - themeColor: ChannelRecordBase["themeColor"]; - threadMetadata?: undefined; - topic_: ChannelRecordBase["topic_"]; - totalMessageSent?: undefined; - type: ChannelTypes.GUILD_FORUM | ChannelTypes.GUILD_MEDIA; - userLimit_?: undefined; - version: ChannelRecordBase["version"]; - videoQualityMode?: undefined; - voiceBackgroundDisplay?: undefined; -} - -export class GuildForumChannelRecord extends ForumChannelRecordBase { - type: ChannelTypes.GUILD_FORUM; -} - -export class GuildMediaChannelRecord extends ForumChannelRecordBase { - type: ChannelTypes.GUILD_MEDIA; -} - -export type ForumChannelRecord = GuildForumChannelRecord | GuildMediaChannelRecord; - -export class UnknownChannelRecord extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP - - static fromServer(channelFromServer: Record, guildId?: string | Nullish): UnknownChannelRecord; // TEMP - - application_id: ChannelRecordBase["application_id"]; - appliedTags: ChannelRecordBase["appliedTags"]; - availableTags: ChannelRecordBase["availableTags"]; - bitrate_: ChannelRecordBase["bitrate_"]; - defaultAutoArchiveDuration: ChannelRecordBase["defaultAutoArchiveDuration"]; - defaultForumLayout: ChannelRecordBase["defaultForumLayout"]; - defaultReactionEmoji: ChannelRecordBase["defaultReactionEmoji"]; - defaultSortOrder: ChannelRecordBase["defaultSortOrder"]; - defaultThreadRateLimitPerUser: ChannelRecordBase["defaultThreadRateLimitPerUser"]; - icon: ChannelRecordBase["icon"]; - iconEmoji: ChannelRecordBase["iconEmoji"]; - isMessageRequest: ChannelRecordBase["isMessageRequest"]; - isMessageRequestTimestamp: ChannelRecordBase["isMessageRequestTimestamp"]; - isSpam: ChannelRecordBase["isSpam"]; - lastMessageId: ChannelRecordBase["lastMessageId"]; - lastPinTimestamp: ChannelRecordBase["lastPinTimestamp"]; - member: ChannelRecordBase["member"]; - memberCount: ChannelRecordBase["memberCount"]; - memberIdsPreview: ChannelRecordBase["memberIdsPreview"]; - memberListId: ChannelRecordBase["memberListId"]; - messageCount: ChannelRecordBase["messageCount"]; - nicks: ChannelRecordBase["nicks"]; - nsfw_: ChannelRecordBase["nsfw_"]; - originChannelId: ChannelRecordBase["originChannelId"]; - ownerId: ChannelRecordBase["ownerId"]; - parent_id: ChannelRecordBase["parent_id"]; - parentChannelThreadType: undefined; - permissionOverwrites_: Defined; - position_: ChannelRecordBase["position_"]; - rateLimitPerUser_: ChannelRecordBase["rateLimitPerUser_"]; - rawRecipients: Defined; - recipients: Defined; - rtcRegion: ChannelRecordBase["rtcRegion"]; - safetyWarnings: ChannelRecordBase["safetyWarnings"]; - template: ChannelRecordBase["template"]; - themeColor: ChannelRecordBase["themeColor"]; - threadMetadata: ChannelRecordBase["threadMetadata"]; - topic_: ChannelRecordBase["topic_"]; - totalMessageSent: ChannelRecordBase["totalMessageSent"]; - type: ChannelTypes.UNKNOWN; - userLimit_: ChannelRecordBase["userLimit_"]; - version: ChannelRecordBase["version"]; - videoQualityMode: ChannelRecordBase["videoQualityMode"]; -} - -export type GuildChannelRecord = GuildTextualChannelRecord | GuildVocalChannelRecord | ForumChannelRecord; - -export type ChannelRecord = GuildChannelRecord | PrivateChannelRecord | ThreadChannelRecord; - -type ChannelStoreAction = ExtractAction; - -export class ChannelStore extends FluxStore { - static displayName: "ChannelStore"; - - getAllThreadsForParent(channelId: string): ThreadChannelRecord[]; - getBasicChannel(channelId?: string | Nullish): ChannelRecord | null; // TEMP - getChannel(channelId?: string | Nullish): ChannelRecord | undefined; - getChannelIds(guildId?: string | Nullish): string[]; - getDebugInfo(): { - loadedGuildIds: string[]; - pendingGuildLoads: any[]; // TEMP - guildSizes: string[]; - }; - getDMFromUserId(userId?: string | Nullish): string | undefined; - getDMUserIds(): string[]; - getGuildChannelsVersion(guildId: string): number; - getInitialOverlayState(): { [channelId: string]: ChannelRecord; }; - getMutableBasicGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; // TEMP - getMutableDMsByUserIds(): { [userId: string]: string; }; - getMutableGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; - getMutablePrivateChannels(): { [channelId: string]: PrivateChannelRecord; }; - getPrivateChannelsVersion(): number; - getSortedPrivateChannels(): PrivateChannelRecord[]; - hasChannel(channelId: string): boolean; - initialize(): void; - loadAllGuildAndPrivateChannelsFromDisk(): { [channelId: string]: GuildChannelRecord | PrivateChannelRecord; }; -} - -export interface DraftObject { - channelId: string; - timestamp: number; - draft: string; -} - -export enum DraftType { - ChannelMessage, - ThreadSettings, - FirstThreadMessage, - ApplicationLauncherCommand, - Poll, - SlashCommand, -} - -interface DraftState { - [userId: string]: { - [channelId: string]: { - [key in DraftType]?: Omit; - } | undefined; - } | undefined; -} - -export class DraftStore extends FluxStore { - getDraft(channelId: string, type: DraftType): string; - getRecentlyEditedDrafts(type: DraftType): DraftObject[]; - getState(): DraftState; - getThreadDraftWithParentMessageId?(arg: any): any; - getThreadSettings(channelId: string): any | null; +export class WindowStore extends FluxStore { + isElementFullScreen(): boolean; + isFocused(): boolean; + windowSize(): Record<"width" | "height", number>; } type Emoji = CustomEmoji | UnicodeEmoji; - export interface CustomEmoji { allNamesString: string; animated: boolean; @@ -951,7 +63,7 @@ export interface CustomEmoji { originalName?: string; require_colons: boolean; roles: string[]; - type: 1; + type: "GUILD_EMOJI"; } export interface UnicodeEmoji { @@ -963,7 +75,7 @@ export interface UnicodeEmoji { }; index: number; surrogates: string; - type: 0; + type: "UNICODE"; uniqueName: string; useSpriteSheet: boolean; get allNamesString(): string; @@ -1010,7 +122,6 @@ export class EmojiStore extends FluxStore { pendingUsages: { key: string, timestamp: number; }[]; }; searchWithoutFetchingLatest(data: { - // @ts-expect-error: TODO channel: Channel, query: string; count?: number; @@ -1040,1690 +151,51 @@ export class EmojiStore extends FluxStore { }; } -export const enum GuildMemberFlags { - DID_REJOIN = 1 << 0, - COMPLETED_ONBOARDING = 1 << 1, - BYPASSES_VERIFICATION = 1 << 2, - STARTED_ONBOARDING = 1 << 3, - IS_GUEST = 1 << 4, - STARTED_HOME_ACTIONS = 1 << 5, - COMPLETED_HOME_ACTIONS = 1 << 6, - AUTOMOD_QUARANTINED_USERNAME_OR_GUILD_NICKNAME = 1 << 7, - AUTOMOD_QUARANTINED_BIO = 1 << 8, - DM_SETTINGS_UPSELL_ACKNOWLEDGED = 1 << 9, - AUTOMOD_QUARANTINED_CLAN_TAG = 1 << 10, -} - -export interface GuildMember { - avatar: string | null; - avatarDecoration: AvatarDecorationData | undefined; - colorRoleId: string | undefined; - colorString: string | undefined; - communicationDisabledUntil: string | null; - flags: GuildMemberFlags; - fullProfileLoadedTimestamp: number | undefined; - guildId: string; - highestRoleId: string | undefined; - hoistRoleId: string | undefined; - iconRoleId: string | undefined; - isPending: boolean; - joinedAt: string; - nick: string | null; - premiumSince: string | null; - roles: string[]; - unusualDMActivityUntil: string | Nullish; - userId: string; -} - -type GuildMemberStoreAction = ExtractAction; - -export class GuildMemberStore extends FluxStore { - static displayName: "GuildMemberStore"; - - getCommunicationDisabledUserMap(): { [userId: string]: string; }; - getCommunicationDisabledVersion(): number; - getMember(guildId: string, userId: string): GuildMember | null; - getMemberIds(guildId?: string | Nullish): string[]; - getMemberRoleWithPendingUpdates(guildId: string, userId: string): string[]; - getMembers(guildId?: string | Nullish): GuildMember[]; - getMemberVersion(): number; - getMutableAllGuildsAndMembers(): { [guildId: string]: { [userId: string]: GuildMember; }; }; - getNick(guildId?: string | Nullish, userId?: string | Nullish): string | null; - getNicknameGuildsMapping(userId: string): { [nickname: string]: string[]; }; - getNicknames(userId: string): string[]; - getPendingRoleUpdates(guildId: string): { - added: string[] - removed: string[] - }; - getSelfMember(guildId: string): GuildMember | Nullish; - getTrueMember(guildId: string, userId: string): GuildMember | Nullish; - initialize(): void; - isCurrentUserGuest(guildId?: string | Nullish): boolean; - isGuestOrLurker(guildId?: string | Nullish, userId?: string | Nullish): boolean; - isMember(guildId?: string | Nullish, userId?: string | Nullish): boolean; - memberOf(userId: string): string[]; -} - -export const enum RoleFlags { - IN_PROMPT = 1, -} - -export interface Role { - color: number; - colorString: string | null; - flags: RoleFlags; - hoist: boolean; - icon: string | null; - id: string; - managed: boolean; - mentionable: boolean; - name: string; - originalPosition: number; - permissions: /* Permissions */ bigint; - position: number; - tags: { - available_for_purchase?: null; - bot_id?: string; - guild_connections?: null; - integration_id?: string; - premium_subscriber?: null; - subscription_listing_id?: string; - }; - unicodeEmoji: string | null; -} - -interface IconSource { - uri: string; -} - -export const enum ClanBadgeKind { - SWORD = 0, - WATER_DROP = 1, - SKULL = 2, - TOADSTOOL = 3, - MOON = 4, - LIGHTNING = 5, - LEAF = 6, - HEART = 7, - FIRE = 8, - COMPASS = 9, - CROSSHAIRS = 10, - FLOWER = 11, - FORCE = 12, - GEM = 13, - LAVA = 14, - PSYCHIC = 15, - SMOKE = 16, - SNOW = 17, - SOUND = 18, - SUN = 19, - WIND = 20, -} - -export const enum ClanBannerKind { - NIGHT_SKY = 0, - CASTLE = 1, - WORLD_MAP = 2, - SEA_FOAM = 3, - WARP_TUNNEL = 4, - HOUSE = 5, - HEIGHTMAP = 6, - MESH = 7, - SPATTER = 8, -} - -export const enum ClanPlaystyles { - NONE = 0, - SOCIAL = 1, - CASUAL = 2, - COMPETITIVE = 3, - CREATIVE = 4, - VERY_HARDCORE = 5, -} - -export interface Clan { - badge: { - badgeKind: ClanBadgeKind; - primaryColor: string; - secondaryColor: string; - }; - banner: ClanBannerKind; - bannerHash: string | null; - branding: { - primaryColor: string; - secondaryColor: string; - }; - description: string | null; - games: string[]; - icon: string | null; - id: string; - memberCount: number; - name: string; - playstyle: ClanPlaystyles; - tag: string; - traits: string[]; - wildcardDescriptors: string[]; -} - -export const enum UserNotificationSettings { - ALL_MESSAGES = 0, - ONLY_MENTIONS = 1, - NO_MESSAGES = 2, - NULL = 3, -} - -export const enum GuildExplicitContentFilterTypes { - DISABLED = 0, - MEMBERS_WITHOUT_ROLES = 1, - ALL_MEMBERS = 2, -} - -export const enum GuildFeatures { - ANIMATED_BANNER = "ANIMATED_BANNER", - ANIMATED_ICON = "ANIMATED_ICON", - AUTOMOD_TRIGGER_USER_PROFILE = "AUTOMOD_TRIGGER_USER_PROFILE", - AUTO_MODERATION = "AUTO_MODERATION", - BANNER = "BANNER", - BURST_REACTIONS = "BURST_REACTIONS", - CHANNEL_ICON_EMOJIS_GENERATED = "CHANNEL_ICON_EMOJIS_GENERATED", - CLAN = "CLAN", - CLAN_PILOT_GENSHIN = "CLAN_PILOT_GENSHIN", - CLAN_PILOT_VALORANT = "CLAN_PILOT_VALORANT", - CLYDE_DISABLED = "CLYDE_DISABLED", - CLYDE_ENABLED = "CLYDE_ENABLED", - COMMERCE = "COMMERCE", - COMMUNITY = "COMMUNITY", - CREATOR_MONETIZABLE = "CREATOR_MONETIZABLE", - CREATOR_MONETIZABLE_DISABLED = "CREATOR_MONETIZABLE_DISABLED", - CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING = "CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING", - CREATOR_MONETIZABLE_PROVISIONAL = "CREATOR_MONETIZABLE_PROVISIONAL", - CREATOR_MONETIZABLE_RESTRICTED = "CREATOR_MONETIZABLE_RESTRICTED", - CREATOR_MONETIZABLE_WHITEGLOVE = "CREATOR_MONETIZABLE_WHITEGLOVE", - CREATOR_STORE_PAGE = "CREATOR_STORE_PAGE", - DISCOVERABLE = "DISCOVERABLE", - ENABLED_DISCOVERABLE_BEFORE = "ENABLED_DISCOVERABLE_BEFORE", - ENABLED_MODERATION_EXPERIENCE_FOR_NON_COMMUNITY = "ENABLED_MODERATION_EXPERIENCE_FOR_NON_COMMUNITY", - EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT = "EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT", - FEATURABLE = "FEATURABLE", - GENSHIN_L30 = "GENSHIN_L30", - GUILD_HOME_DEPRECATION_OVERRIDE = "GUILD_HOME_DEPRECATION_OVERRIDE", - GUILD_HOME_OVERRIDE = "GUILD_HOME_OVERRIDE", - GUILD_HOME_TEST = "GUILD_HOME_TEST", - GUILD_ONBOARDING = "GUILD_ONBOARDING", - GUILD_ONBOARDING_EVER_ENABLED = "GUILD_ONBOARDING_EVER_ENABLED", - GUILD_ONBOARDING_HAS_PROMPTS = "GUILD_ONBOARDING_HAS_PROMPTS", - GUILD_PRODUCTS_ALLOW_ARCHIVED_FILE = "GUILD_PRODUCTS_ALLOW_ARCHIVED_FILE", - GUILD_SERVER_GUIDE = "GUILD_SERVER_GUIDE", - GUILD_WEB_PAGE_VANITY_URL = "GUILD_WEB_PAGE_VANITY_URL", - HAS_DIRECTORY_ENTRY = "HAS_DIRECTORY_ENTRY", - HUB = "HUB", - INTERNAL_EMPLOYEE_ONLY = "INTERNAL_EMPLOYEE_ONLY", - INVITES_DISABLED = "INVITES_DISABLED", - INVITE_SPLASH = "INVITE_SPLASH", - LINKED_TO_HUB = "LINKED_TO_HUB", - MEMBER_VERIFICATION_GATE_ENABLED = "MEMBER_VERIFICATION_GATE_ENABLED", - MORE_EMOJI = "MORE_EMOJI", - MORE_STICKERS = "MORE_STICKERS", - NEWS = "NEWS", - NEW_THREAD_PERMISSIONS = "NEW_THREAD_PERMISSIONS", - NON_COMMUNITY_RAID_ALERTS = "NON_COMMUNITY_RAID_ALERTS", - PARTNERED = "PARTNERED", - PREVIEW_ENABLED = "PREVIEW_ENABLED", - PRODUCTS_AVAILABLE_FOR_PURCHASE = "PRODUCTS_AVAILABLE_FOR_PURCHASE", - RAID_ALERTS_DISABLED = "RAID_ALERTS_DISABLED", - ROLE_ICONS = "ROLE_ICONS", - ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE = "ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE", - ROLE_SUBSCRIPTIONS_ENABLED = "ROLE_SUBSCRIPTIONS_ENABLED", - SHARD = "SHARD", - SOUNDBOARD = "SOUNDBOARD", - SUMMARIES_ENABLED_BY_USER = "SUMMARIES_ENABLED_BY_USER", - SUMMARIES_ENABLED_GA = "SUMMARIES_ENABLED_GA", - SUMMARIES_OPT_OUT_EXPERIENCE = "SUMMARIES_OPT_OUT_EXPERIENCE", - TEXT_IN_STAGE_ENABLED = "TEXT_IN_STAGE_ENABLED", - TEXT_IN_VOICE_ENABLED = "TEXT_IN_VOICE_ENABLED", - THREADS_ENABLED = "THREADS_ENABLED", - THREADS_ENABLED_TESTING = "THREADS_ENABLED_TESTING", - VALORANT_L30 = "VALORANT_L30", - VANITY_URL = "VANITY_URL", - VERIFIED = "VERIFIED", - VIP_REGIONS = "VIP_REGIONS", - WELCOME_SCREEN_ENABLED = "WELCOME_SCREEN_ENABLED", -} - -export const enum GuildHubTypes { - DEFAULT = 0, - HIGH_SCHOOL = 1, - COLLEGE = 2, -} - -export const enum MFALevels { - NONE = 0, - ELEVATED = 1, -} - -export const enum GuildNSFWContentLevel { - DEFAULT = 0, - EXPLICIT = 1, - SAFE = 2, - AGE_RESTRICTED = 3, -} - -export const enum BoostedGuildTiers { - NONE = 0, - TIER_1 = 1, - TIER_2 = 2, - TIER_3 = 3, -} - -export const enum SystemChannelFlags { - SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0, - SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1, - SUPPRESS_GUILD_REMINDER_NOTIFICATIONS = 1 << 2, - SUPPRESS_JOIN_NOTIFICATION_REPLIES = 1 << 3, - SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS = 1 << 4, - SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES = 1 << 5, - SUPPRESS_CHANNEL_PROMPT_DEADCHAT = 1 << 7, -} - -export const enum VerificationLevels { - NONE = 0, - LOW = 1, - MEDIUM = 2, - HIGH = 3, - VERY_HIGH = 4, -} - -type GuildRecordOwnProperties = Pick; - -export class GuildRecord< - OwnProperties extends GuildRecordOwnProperties = GuildRecordOwnProperties -> extends ImmutableRecord { - constructor(guildFromServer: Record); // TEMP - - get acronym(): string; - canHaveRaidActivityAlerts(): boolean; - getApplicationId(): string | null; - getEveryoneRoleId(): string; - getIconSource(iconSize?: number | undefined, canAnimate?: boolean | undefined): IconSource; - getIconURL(iconSize?: number | undefined, canAnimate?: boolean | undefined): string; - getMaxEmojiSlots(): number; - getMaxRoleSubscriptionEmojiSlots(): number; - getMaxSoundboardSlots(): number; - getSafetyAlertsChannelId(): string | null; - isCommunity(): boolean; - isLurker(): boolean; - isNew(): boolean; - isOwner(userOrUserId?: UserRecord | string | Nullish): boolean; - isOwnerWithRequiredMfaLevel(userOrUserId?: UserRecord | string | Nullish): boolean; - hasCommunityInfoSubheader(): boolean; - hasFeature(guildFeature: GuildFeatures): boolean; - hasVerificationGate(): boolean; - updateJoinedAt(joinedAt: Date | string): this; - - afkChannelId: string | null; - afkTimeout: number; - application_id: string | null; - banner: string | null; - clan: Clan | null; - defaultMessageNotifications: UserNotificationSettings; - description: string | null; - discoverySplash: string | null; - explicitContentFilter: GuildExplicitContentFilterTypes; - features: Set; - homeHeader: string | null; - hubType: GuildHubTypes | null; - icon: string | null; - id: string; - joinedAt: Date; - latestOnboardingQuestionId: string | null; - maxMembers: number; - maxStageVideoChannelUsers: number; - maxVideoChannelUsers: number; - mfaLevel: MFALevels; - name: string; - nsfwLevel: GuildNSFWContentLevel; - ownerId: string | null; - preferredLocale: string; - premiumProgressBarEnabled: boolean; - premiumSubscriberCount: number; - premiumTier: BoostedGuildTiers; - publicUpdatesChannelId: string | null; - rulesChannelId: string | null; - safetyAlertsChannelId: string | null; - splash: string | null; - systemChannelFlags: SystemChannelFlags; - systemChannelId: string | null; - vanityURLCode: string | null; - verificationLevel: VerificationLevels; -} - -type GuildStoreAction = ExtractAction; - -export class GuildStore extends FluxStore { - static displayName: "GuildStore"; - - getAllGuildsRoles(): { [guildId: string]: { [roleId: string]: Role; }; }; - getGeoRestrictedGuilds(): { [guildId: string]: GuildRecord; }; - getGuild(guildId?: string | Nullish): GuildRecord | undefined; - getGuildCount(): number; - getGuildIds(): string[]; - getGuilds(): { [guildId: string]: GuildRecord; }; - getRole(guildId: string, roleId: string): Role | undefined; - getRoles(guildId: string): { [roleId: string]: Role; }; - isLoaded(): boolean; -} - -export const enum MessageAttachmentFlags { - IS_CLIP = 1 << 0, - IS_THUMBNAIL = 1 << 1, - IS_REMIX = 1 << 2, - IS_SPOILER = 1 << 3, - CONTAINS_EXPLICIT_MEDIA = 1 << 4, -} - -export interface MessageAttachment { - content_scan_version?: number; - content_type?: string; - description?: string; - duration_secs?: number; - ephemeral?: boolean; - filename: string; - flags?: MessageAttachmentFlags; - height?: number | null; - id: string; - placeholder?: string; - placeholder_version?: number; - proxy_url: string; - size: number; - spoiler: boolean; - url: string; - waveform?: string; - width?: number | null; -} - -export interface MessageCall { - duration: Duration | null; - endedTimestamp: Moment | null; - participants: string[]; -} - -export const enum CodedLinkType { - ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", - APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", - BUILD_OVERRIDE = "BUILD_OVERRIDE", - CHANNEL_LINK = "CHANNEL_LINK", - EMBEDDED_ACTIVITY_INVITE = "EMBEDDED_ACTIVITY_INVITE", - EVENT = "EVENT", - GUILD_PRODUCT = "GUILD_PRODUCT", - INVITE = "INVITE", - MANUAL_BUILD_OVERRIDE = "MANUAL_BUILD_OVERRIDE", - QUESTS_EMBED = "QUESTS_EMBED", - SERVER_SHOP = "SERVER_SHOP", - TEMPLATE = "TEMPLATE", -} - -export interface CodedLink { - code: string; - type: CodedLinkType; -} - -export interface MessageComponentEmoji { - animated: boolean | undefined; - id: string | undefined; - src: string | undefined; - name: string | undefined; -} - -// Original name: ComponentType, renamed to avoid conflict with ComponentType from React -export const enum MessageComponentType { - ACTION_ROW = 1, - BUTTON = 2, - STRING_SELECT = 3, - INPUT_TEXT = 4, - USER_SELECT = 5, - ROLE_SELECT = 6, - MENTIONABLE_SELECT = 7, - CHANNEL_SELECT = 8, - TEXT = 10, - MEDIA_GALLERY = 12, - SEPARATOR = 14, -} - -export interface MessageActionRowComponent { - type: MessageComponentType.ACTION_ROW; - id: string; - components: Exclude[]; -} - -export const enum ButtonStyle { - PRIMARY = 1, - SECONDARY = 2, - SUCCESS = 3, - DESTRUCTIVE = 4, - LINK = 5, - PREMIUM = 6, -} - -// TODO: Must have one of either `customId` or `url`, but never both. -// If a button has `url` it must have the `Link` button style. -export interface MessageButtonComponent { - customId: string | undefined; - disabled: boolean | undefined; - emoji: MessageComponentEmoji | undefined; - id: string; - label: string | undefined; - style: ButtonStyle; - type: MessageComponentType.BUTTON; - url: string | undefined; -} - -export const enum SelectOptionType { - STRING = 1, - USER = 2, - ROLE = 3, - CHANNEL = 4, - GUILD = 5, -} - -export interface SelectMenuOption { - type: OptionType; - label: string; - value: string; - default: boolean | undefined; - description: string | undefined; - emoji: MessageComponentEmoji | undefined; -} - -export interface MessageStringSelectComponent { - customId: string; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - options: SelectMenuOption[]; - placeholder: string; - type: MessageComponentType.STRING_SELECT; -} - -export const enum TextComponentStyle { - SMALL = 1, - PARAGRAPH = 2, -} - -export interface MessageTextInputComponent { - customId: string; - disabled: boolean | undefined; - id: string; - label: string; - maxLength: number | undefined; - minLength: number | undefined; - placeholder: string | undefined; - required: boolean; - style: TextComponentStyle; - type: MessageComponentType.INPUT_TEXT; - value: string | undefined; -} - -export const enum SnowflakeSelectDefaultValueTypes { - CHANNEL = "channel", - ROLE = "role", - USER = "user", -} - -export interface SelectMenuDefaultValue { - id: string; - type: DefaultValueType; -} - -export interface MessageUserSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.USER_SELECT; -} - -export interface MessageRoleSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.ROLE_SELECT; -} - -export interface MessageMentionableSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.MENTIONABLE_SELECT; -} - -export interface MessageChannelSelectComponent { - channelTypes: ChannelTypes[] | undefined; - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.CHANNEL_SELECT; -} - -export interface MessageTextComponent { - content: string | undefined; - id: string; - type: MessageComponentType.TEXT; -} - -export const enum ContentScanFlags { - EXPLICIT = 1, -} - -export interface MediaItem { - contentScanMetadata: { - version: number | undefined; - contentScanFlags: ContentScanFlags | undefined; - } | undefined; - contentType: string | undefined; - height: number | Nullish; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyUrl: string; - url: string; - width: number | Nullish; -} - -export interface MessageMediaGalleryComponent { - id: string; - items: { - media: MediaItem; - description: string | undefined; - spoiler: boolean; - }[]; - type: MessageComponentType.MEDIA_GALLERY; -} - -export const enum SeparatorSpacingSize { - SMALL = 1, - LARGE = 2, -} - -export interface MessageSeparatorComponent { - divider: boolean; - id: string; - spacing: SeparatorSpacingSize; - type: MessageComponentType.SEPARATOR; -} - -export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; - -export interface MessageEmbedAuthor { - iconProxyURL: string | undefined; - iconURL: string | undefined; - name: string; - url: string | undefined; -} - -export interface MessageEmbedField { - inline: boolean | undefined; - rawName: string; - rawValue: string; -} - -export const enum MessageEmbedFlags { - CONTAINS_EXPLICIT_MEDIA = 1 << 4, -} - -export interface MessageEmbedFooter { - iconProxyURL: string | undefined; - iconURL: string | undefined; - text: string; -} - -export interface MessageEmbedImage { - height: number | undefined; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string; - width: number | undefined; -} - -export interface MessageEmbedProvider { - name: string; - url: string | undefined; -} - -// TODO: An embed thumbnail either: -// has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` -// or has only `height`, `url`, and `width`. -export interface MessageEmbedThumbnail { - height: number; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string; - width: number; -} - -export const enum MessageEmbedTypes { - APPLICATION_NEWS = "application_news", - ARTICLE = "article", - AUTO_MODERATION_MESSAGE = "auto_moderation_message", - AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", - GAMING_PROFILE = "gaming_profile", - GIFT = "gift", - GIFV = "gifv", - IMAGE = "image", - LINK = "link", - POLL_RESULT = "poll_result", - POST_PREVIEW = "post_preview", - RICH = "rich", - SAFETY_POLICY_NOTICE = "safety_policy_notice", - SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", - TEXT = "text", - TWEET = "tweet", - VIDEO = "video", - VOICE_CHANNEL = "voice_channel", -} - -// TODO: An embed video must have either `proxyURL` or `url`, and having both is possible. -// It might not be possible for an embed video to have `proxyURL` without `url`, though. -export interface MessageEmbedVideo { - height: number; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string | undefined; - width: number; -} - -export interface MessageEmbed { - author?: MessageEmbedAuthor; - color?: string; - contentScanVersion: number | undefined; - fields: MessageEmbedField[]; - flags: MessageEmbedFlags | undefined; - footer?: MessageEmbedFooter; - id: string; - image?: MessageEmbedImage; - provider?: MessageEmbedProvider; - rawDescription: string | undefined; - rawTitle: string | undefined; - referenceId: string | undefined; - thumbnail?: MessageEmbedThumbnail; - timestamp?: Moment; - type: MessageEmbedTypes | undefined; - url: string | undefined; - video?: MessageEmbedVideo; -} - -export const 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, - 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, -} - -export interface MessageGiftInfo { - emoji?: string | null; // TEMP - sound?: string | null; // TEMP -} // TEMP - -export const enum InteractionTypes { - PING = 1, - APPLICATION_COMMAND = 2, - MESSAGE_COMPONENT = 3, - APPLICATION_COMMAND_AUTOCOMPLETE = 4, - MODAL_SUBMIT = 5, -} - -export class InteractionRecord extends ImmutableRecord { - constructor(interaction: Record); // TEMP - - static createFromServer(interactionFromServer: Record): InteractionRecord; // TEMP - - displayName: string; - id: string; - name: string; - type: InteractionTypes; - user: UserRecord; -} - -export interface InteractionData { - application_command: any; // TEMP - guild_id: any; // TEMP - id: any; // TEMP - name: any; // TEMP - options: any; // TEMP - type: any; // TEMP - version: any; // TEMP -} // TEMP - -export interface InteractionMetadata { - authorizing_integration_owners: Partial>; - id: string; - interacted_message_id?: string; - original_response_message_id?: string; - type: InteractionTypes; - triggering_interaction_metadata?: InteractionMetadata; - user: Record; // TEMP: This is not a UserRecord, it's a user object from the API. -} // TEMP - -export interface ChannelMention { - guild_id: string; - id: string; - name: string; - type: ChannelTypes; -} - -export interface MessageReference { - channel_id: string; - guild_id?: string; - message_id?: string; -} - -export const enum PollLayoutTypes { - UNKNOWN = 0, - DEFAULT = 1, - IMAGE_ONLY_ANSWERS = 2, -} - -export interface MessageEmoji { - animated?: boolean; - id: string | null; - name: string | null; -} - -export interface MessagePollMedia { - emoji?: MessageEmoji; - text?: string; -} - -export interface MessagePollAnswer { - answer_id: number; - poll_media: MessagePollMedia; -} - -export interface MessagePollAnswerCount { - count: number; - id: number; - me_voted: boolean; -} - -export interface MessagePollResults { - answer_counts: MessagePollAnswerCount[]; - is_finalized: boolean; -} - -export interface MessagePoll { - allow_multiselect: boolean; - answers: MessagePollAnswer[]; - expiry: Moment; - layout_type: PollLayoutTypes; - question: MessagePollMedia; - results?: MessagePollResults; -} - -export const enum PurchaseNotificationType { - GUILD_PRODUCT = 0, -} - -export interface MessagePurchaseNotification { - guild_product_purchase: { - listing_id?: string | null; // TEMP - product_name?: string | null; // TEMP - } // TEMP - type: PurchaseNotificationType; -} // TEMP - -export interface MessageReactionCountDetails { - burst: number; - normal: number; - vote?: number; -} - -export interface MessageReaction { - burst_colors: string[]; - burst_count: number; - count: number; - count_details: MessageReactionCountDetails; - emoji: MessageEmoji; - me: boolean; - me_burst: boolean; - me_vote?: boolean; -} - -export interface MessageRoleSubscriptionData { - is_renewal?: boolean | null; // TEMP - role_subscription_listing_id?: string | null; // TEMP - tier_name?: string | null; // TEMP - total_months_subscribed?: number | null; // TEMP -} // TEMP - -export const enum MessageStates { - SEND_FAILED = "SEND_FAILED", - SENDING = "SENDING", - SENT = "SENT", -} - -export const enum StickerFormat { - PNG = 1, - APNG = 2, - LOTTIE = 3, - GIF = 4, -} - -export interface MessageStickerItem { - format_type: StickerFormat; - id: string; - name: string; -} - -export const enum MetaStickerType { - STANDARD = 1, - GUILD = 2, -} - -export interface MessageSticker { - asset?: ""; - available?: boolean; - description: string | null; - format_type: StickerFormat; - guild_id?: string; - id: string; - name: string; - pack_id?: string; - sort_value?: number; - tags: string; - type: MetaStickerType; - user?: Record; // TEMP: This is not a UserRecord, it's a user object from the API. -} - -export const enum MessageTypes { - DEFAULT = 0, - RECIPIENT_ADD = 1, - RECIPIENT_REMOVE = 2, - CALL = 3, - CHANNEL_NAME_CHANGE = 4, - CHANNEL_ICON_CHANGE = 5, - CHANNEL_PINNED_MESSAGE = 6, - USER_JOIN = 7, - GUILD_BOOST = 8, - GUILD_BOOST_TIER_1 = 9, - GUILD_BOOST_TIER_2 = 10, - GUILD_BOOST_TIER_3 = 11, - CHANNEL_FOLLOW_ADD = 12, - GUILD_STREAM = 13, - GUILD_DISCOVERY_DISQUALIFIED = 14, - GUILD_DISCOVERY_REQUALIFIED = 15, - GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, - GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, - THREAD_CREATED = 18, - REPLY = 19, - CHAT_INPUT_COMMAND = 20, - THREAD_STARTER_MESSAGE = 21, - GUILD_INVITE_REMINDER = 22, - CONTEXT_MENU_COMMAND = 23, - AUTO_MODERATION_ACTION = 24, - ROLE_SUBSCRIPTION_PURCHASE = 25, - INTERACTION_PREMIUM_UPSELL = 26, - STAGE_START = 27, - STAGE_END = 28, - STAGE_SPEAKER = 29, - STAGE_RAISE_HAND = 30, - STAGE_TOPIC = 31, - GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, - PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, - PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, - PREMIUM_REFERRAL = 35, - GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, - GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, - GUILD_INCIDENT_REPORT_RAID = 38, - GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, - GUILD_DEADCHAT_REVIVE_PROMPT = 40, - CUSTOM_GIFT = 41, - GUILD_GAMING_STATS_PROMPT = 42, - PURCHASE_NOTIFICATION = 44, - VOICE_HANGOUT_INVITE = 45, - POLL_RESULT = 46, - CHANGELOG = 47, -} - -type MessageRecordOwnProperties = Pick; - -export class MessageRecord< - OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties -> extends ImmutableRecord { - constructor(messageFromServer: Record); // TEMP - - addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP - addReactionBatch(e?: any, t?: any): any; // TEMP - canDeleteOwnMessage(userId: string): boolean; - getChannelId(): string; - getReaction(e?: any): any; // TEMP - hasFlag(flag: MessageFlags): boolean; - isCommandType(): boolean; - isEdited(): boolean; - isFirstMessageInForumPost(channel: ChannelRecord): boolean; // TEMP - isInteractionPlaceholder(): boolean; - isPoll(): boolean; - isSystemDM(): boolean; - isUIKitComponents(): boolean; - removeReaction(e?: any, t?: any, n?: any): this; // TEMP - removeReactionsForEmoji(e?: any): this; // TEMP - toJS(): OwnProperties & SnakeCasedProperties>; - userHasReactedWithEmoji(e?: any, t?: any): boolean; // TEMP - - activity: any | null; // TEMP - activityInstance: any | null; // TEMP - application: any | null; // TEMP - applicationId: string | null; // TEMP - attachments: MessageAttachment[]; - author: UserRecord; - blocked: boolean; - bot: boolean; - call: MessageCall | null; - changelogId: string | null; - channel_id: string; - codedLinks: CodedLink[]; - colorString: string | undefined; - components: MessageComponent[]; - content: string; - customRenderedContent: any | undefined; // TEMP - editedTimestamp: Date | null; - embeds: MessageEmbed[]; - flags: MessageFlags; - giftCodes: string[]; - giftInfo: MessageGiftInfo | undefined; - id: string; - interaction: InteractionRecord | null; - interactionData: InteractionData | null; - interactionError: string | null; - interactionMetadata: InteractionMetadata | null; - isSearchHit: boolean; - isUnsupported: boolean; - loggingName: string | null; // TEMP - mentionChannels: ChannelMention[]; - mentionEveryone: boolean; - mentionRoles: string[]; - mentioned: boolean; - mentions: string[]; - messageReference: MessageReference | null; - messageSnapshots: any[]; // TEMP - nick: any | undefined; // TEMP - nonce: string | number | null; - pinned: boolean; - poll: MessagePoll | undefined; - purchaseNotification: MessagePurchaseNotification | undefined; - reactions: MessageReaction[]; - referralTrialOfferId: string | null; // TEMP - roleSubscriptionData: MessageRoleSubscriptionData | undefined; - state: MessageStates; - stickerItems: MessageStickerItem[]; - stickers: MessageSticker[]; - timestamp: Date; - tts: boolean; - type: MessageTypes; - webhookId: string | null; -} - -declare class MessageCache { - constructor(isCacheBefore: boolean); - - cache(e?: any): void; // TEMP - clear(): void; // TEMP - clone(): any; // TEMP - extract(e?: any): any; // TEMP - extractAll(): any; // TEMP - forEach(callback: (value: any, index: number, array: any[]) => void, thisArg?: unknown): void; // TEMP - get(e?: any): any; // TEMP - has(e?: any): boolean; // TEMP - get length(): any; // TEMP - remove(e?: any): void; // TEMP - removeMany(e?: any): void; // TEMP - replace(e?: any, t?: any): void; // TEMP - update(e?: any, t?: any): void; // TEMP - get wasAtEdge(): any; // TEMP - set wasAtEdge(e: any); // TEMP - - _isCacheBefore: boolean; - _map: any; // TEMP - _messages: any[]; // TEMP - _wasAtEdge: boolean; -} - -export const enum JumpTypes { - ANIMATED = "ANIMATED", - INSTANT = "INSTANT", -} - -export class ChannelMessages { - constructor(channelId: string); - - static _channelMessages: any; // TEMP - static clear(e?: any): any; // TEMP - static clearCache(e?: any): any; // TEMP - static commit(e?: any): any; // TEMP - static forEach(e?: any): any; // TEMP - static get(e?: any): any; // TEMP - static getOrCreate(e?: any): any; // TEMP - static hasPresent(e?: any): any; // TEMP - - _clearMessages(): void; - _merge(e?: any): any; // TEMP - addCachedMessages(e?: any, t?: any): any; // TEMP - filter( - predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => value is T, - thisArg?: unknown - ): T[]; - filter( - predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, - thisArg?: unknown - ): MessageRecord[]; - findNewest(e?: any): any; // TEMP - findOldest(e?: any): any; // TEMP - first(): MessageRecord | undefined; - focusOnMessage(e?: any): any; // TEMP - forAll( - callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, - thisArg?: unknown - ): void; - forEach( - callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, - thisArg?: unknown - ): void; - get(e?: any): any; // TEMP - getAfter(e?: any): any; // TEMP - getByIndex(index: number): any | undefined; // TEMP - getManyAfter(e?: any, t?: any, n?: any): any; // TEMP - getManyBefore(e?: any, t?: any, n?: any): any; // TEMP - has(e?: any): boolean; // TEMP - hasAfterCached(e?: any): any; // TEMP - hasBeforeCached(e?: any): any; // TEMP - hasPresent(): any; // TEMP - indexOf(searchElement: any): number; // TEMP - jumpToMessage(e?: any): any; // TEMP - jumpToPresent(e?: any): any; // TEMP - last(): MessageRecord | undefined; - get length(): number; - loadComplete(e?: any): any; // TEMP - loadFromCache(e?: any, t?: any): any; // TEMP - loadStart(e?: any): any; // TEMP - map( - callback: (value: MessageRecord, index: number, array: MessageRecord[]) => T, - thisArg?: unknown - ): T[]; - merge(e?: any): any; // TEMP - mergeDelta(): any; // TEMP - mutate(e?: any): any; // TEMP - receiveMessage(e?: any): any; // TEMP - receivePushNotification(e?: any): any; // TEMP - reduce( - callback: ( - previousValue: MessageRecord, - currentValue: MessageRecord, - currentIndex: number, - array: MessageRecord[] - ) => MessageRecord - ): MessageRecord; - reduce( - callback: ( - previousValue: MessageRecord, - currentValue: MessageRecord, - currentIndex: number, - array: MessageRecord[] - ) => MessageRecord, - initialValue: MessageRecord - ): MessageRecord; - reduce( - callback: ( - previousValue: MessageRecord, - currentValue: T, - currentIndex: number, - array: MessageRecord[] - ) => T, - initialValue: T - ): T; - remove(e?: any): any; // TEMP - removeMany(e?: any): any; // TEMP - replace(e?: any, t?: any): any; // TEMP - reset(e?: any): any; // TEMP - some( - predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, - thisArg?: unknown - ): boolean; - toArray(): MessageRecord[]; - truncate(e?: any, t?: any): any; // TEMP - truncateBottom(e?: any): any; // TEMP - truncateTop(e?: any): any; // TEMP - update(e?: any, t?: any): any; // TEMP - - _after: MessageCache; - _array: MessageRecord[]; - _before: MessageCache; - _map: { [messageId: string]: MessageRecord; }; - cached: boolean; +export interface DraftObject { channelId: string; - error: boolean; - focusTargetId: any; // TEMP - hasFetched: boolean; - hasMoreAfter: boolean; - hasMoreBefore: boolean; - jumpFlash: boolean; - jumpReturnTargetId: string | null; // TEMP - jumpSequenceId: number; // TEMP - jumpTargetId: string | null; // TEMP - jumpTargetOffset: number; // TEMP - jumpType: JumpTypes; - jumped: boolean; - jumpedToPresent: boolean; - loadingMore: boolean; - ready: boolean; - revealedMessageId: string | null; // TEMP + timestamp: number; + draft: string; } -type MessageStoreAction = ExtractAction; - -export class MessageStore extends FluxStore { - static displayName: "MessageStore"; - - focusedMessageId(e?: any): any; // TEMP - getLastCommandMessage(e?: any): any; // TEMP - getLastEditableMessage(e?: any): any; // TEMP - getLastMessage(e?: any): any; // TEMP - getLastNonCurrentUserMessage(e?: any): any; // TEMP - getMessage(e?: any, t?: any): any; // TEMP - getMessages(guildId?: string | Nullish): any; // TEMP - hasCurrentUserSentMessage(e?: any): any; // TEMP - hasCurrentUserSentMessageSinceAppStart(): any; // TEMP - hasPresent(e?: any): any; // TEMP - initialize(): void; - isLoadingMessages(e?: any): any; // TEMP - isReady(e?: any): any; // TEMP - jumpedMessageId(e?: any): any; // TEMP - whenReady(e?: any, t?: any): any; // TEMP +interface DraftState { + [userId: string]: { + [channelId: string]: { + [key in DraftType]?: Omit; + } | undefined; + } | undefined; } -export const enum RelationshipTypes { - NONE = 0, - FRIEND = 1, - BLOCKED = 2, - PENDING_INCOMING = 3, - PENDING_OUTGOING = 4, - IMPLICIT = 5, - SUGGESTION = 6, + +export class DraftStore extends FluxStore { + getDraft(channelId: string, type: DraftType): string; + getRecentlyEditedDrafts(type: DraftType): DraftObject[]; + getState(): DraftState; + getThreadDraftWithParentMessageId?(arg: any): any; + getThreadSettings(channelId: string): any | null; } -type RelationshipStoreAction = ExtractAction; - -export class RelationshipStore extends FluxStore { - static displayName: "RelationshipStore"; - - getFriendCount(): number; - getFriendIDs(): string[]; - getNickname(userId: string): string | undefined; - getOutgoingCount(): number; - getPendingCount(): number; - getRelationshipCount(): number; - getRelationships(): { [userId: string]: RelationshipTypes; }; - getRelationshipType(userId: string): RelationshipTypes; - getSince(userId: string): string | undefined; - getSinces(): { [userId: string]: string; }; - initialize(): void; - isBlocked(userId: string): boolean; - isFriend(userId: string): boolean; +export enum DraftType { + ChannelMessage, + ThreadSettings, + FirstThreadMessage, + ApplicationLauncherCommand, + Poll, + SlashCommand, } -type SelectedChannelStoreAction = ExtractAction; - -export class SelectedChannelStore extends FluxStore { - static displayName: "SelectedChannelStore"; - - getChannelId(guildId?: string | Nullish): string | undefined; - getCurrentlySelectedChannelId(guildId?: string | Nullish): string | Nullish; - getLastChannelFollowingDestination(): { - channelId: string; - guildId: string; - }; - getLastSelectedChannelId(guildId?: string | Nullish): string | undefined; - getLastSelectedChannels(guildId: string | null): string | undefined; - getMostRecentSelectedTextChannelId(guildId?: string | Nullish): string | null; - getVoiceChannelId(): string | null; - initialize(): void; +export class GuildStore extends FluxStore { + getGuild(guildId: string): Guild; + getGuildCount(): number; + getGuilds(): Record; + getGuildIds(): string[]; + getRole(guildId: string, roleId: string): Role; + getRoles(guildId: string): Record; + getAllGuildRoles(): Record>; } -interface SelectedGuildStoreState { - lastSelectedGuildId: string | null; - selectedGuildId: string | null; - selectedGuildTimestampMillis: { [guildId: string]: number; }; -} - -type SelectedGuildStoreAction = ExtractAction; - -export class SelectedGuildStore< - Constructor extends GenericConstructor = typeof SelectedGuildStore, - State extends SelectedGuildStoreState = SelectedGuildStoreState, - Action extends FluxAction = SelectedGuildStoreAction -> extends FluxPersistedStore { - static displayName: "SelectedGuildStore"; - static persistKey: "SelectedGuildStore"; - - initialize(state: SelectedGuildStoreState): void; - getState(): State; - getGuildId(): string | null; - getLastSelectedGuildId(): string | null; - getLastSelectedTimestamp(guildId: string): number | undefined; -} - -export const enum ApplicationFlags { - EMBEDDED_RELEASED = 1 << 1, - EMBEDDED_IAP = 1 << 3, - APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE = 1 << 6, - GATEWAY_PRESENCE = 1 << 12, - GATEWAY_PRESENCE_LIMITED = 1 << 13, - GATEWAY_GUILD_MEMBERS = 1 << 14, - GATEWAY_GUILD_MEMBERS_LIMITED = 1 << 15, - EMBEDDED = 1 << 17, - GATEWAY_MESSAGE_CONTENT = 1 << 18, - GATEWAY_MESSAGE_CONTENT_LIMITED = 1 << 19, - EMBEDDED_FIRST_PARTY = 1 << 20, - APPLICATION_COMMAND_BADGE = 1 << 23, - SOCIAL_LAYER_INTEGRATION = 1 << 27, -} - -export const enum OAuth2Scopes { - ACTIVITIES_READ = "activities.read", - ACTIVITIES_WRITE = "activities.write", - APPLICATIONS_BUILDS_READ = "applications.builds.read", - APPLICATIONS_BUILDS_UPLOAD = "applications.builds.upload", - APPLICATIONS_COMMANDS = "applications.commands", - APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE = "applications.commands.permissions.update", - APPLICATIONS_COMMANDS_UPDATE = "applications.commands.update", - APPLICATIONS_ENTITLEMENTS = "applications.entitlements", - APPLICATIONS_STORE_UPDATE = "applications.store.update", - BOT = "bot", - CONNECTIONS = "connections", - DM_CHANNELS_MESSAGES_READ = "dm_channels.messages.read", - DM_CHANNELS_MESSAGES_WRITE = "dm_channels.messages.write", - DM_CHANNELS_READ = "dm_channels.read", - EMAIL = "email", - GDM_JOIN = "gdm.join", - GUILDS = "guilds", - GUILDS_JOIN = "guilds.join", - GUILDS_MEMBERS_READ = "guilds.members.read", - IDENTIFY = "identify", - MESSAGES_READ = "messages.read", - OPENID = "openid", - PRESENCES_READ = "presences.read", - PRESENCES_WRITE = "presences.write", - RELATIONSHIPS_READ = "relationships.read", - RELATIONSHIPS_WRITE = "relationships.write", - ROLE_CONNECTIONS_WRITE = "role_connections.write", - RPC = "rpc", - RPC_ACTIVITIES_WRITE = "rpc.activities.write", - RPC_NOTIFICATIONS_READ = "rpc.notifications.read", - RPC_SCREENSHARE_READ = "rpc.screenshare.read", - RPC_SCREENSHARE_WRITE = "rpc.screenshare.write", - RPC_VIDEO_READ = "rpc.video.read", - RPC_VIDEO_WRITE = "rpc.video.write", - RPC_VOICE_READ = "rpc.voice.read", - RPC_VOICE_WRITE = "rpc.voice.write", - VOICE = "voice", - WEBHOOK_INCOMING = "webhook.incoming", -} - -export interface ApplicationInstallParams { - scopes: OAuth2Scopes[]; - permissions: string; // Permissions serialized as string -} - -export const enum ApplicationIntegrationType { - GUILD_INSTALL = 0, - USER_INSTALL = 1, -} - -export interface Application { - customInstallUrl: string | undefined; - flags: ApplicationFlags; - id: string; - installParams: ApplicationInstallParams | undefined; - integrationTypesConfig: Partial>; - popularApplicationCommandIds: string[] | undefined; - primarySkuId: string | undefined; - storefront_available: boolean; -} - -export interface ApplicationRoleConnection { - metadata: Record; - platform_name: string | null; - platform_username: string | null; -} - -export interface ProfileBadge { - description: string; - icon: string; - id: string; - link?: string; -} - -export const enum PlatformTypes { - AMAZON_MUSIC = "amazon-music", - BATTLENET = "battlenet", - BUNGIE = "bungie", - CONTACTS = "contacts", - CRUNCHYROLL = "crunchyroll", - DOMAIN = "domain", - EBAY = "ebay", - EPIC_GAMES = "epicgames", - FACEBOOK = "facebook", - GITHUB = "github", - INSTAGRAM = "instagram", - LEAGUE_OF_LEGENDS = "leagueoflegends", - 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 interface ConnectedAccount { - id: string; - metadata?: Record; - name: string; - type: PlatformTypes; - verified: boolean; -} - -type ProfileThemeColors = [primaryColor: number, accentColor: number]; - -interface UserProfileFetchFailed { - accentColor: null; - application: null; - applicationRoleConnections: []; - banner: null; - bio: ""; - connectedAccounts: []; - lastFetched: number; - legacyUsername: null; - premiumGuildSince: null; - premiumSince: null; - profileFetchFailed: true; - pronouns: ""; - userId: string; -} - -interface UserProfileFetchSucceeded { - application: Application | null; - accentColor: number | Nullish; - applicationRoleConnections: ApplicationRoleConnection[]; - badges: ProfileBadge[]; - banner: string | Nullish; - bio: string; - connectedAccounts: ConnectedAccount[]; - lastFetched: number; - legacyUsername: string | Nullish; - popoutAnimationParticleType: any /* | Nullish */; // TEMP - premiumGuildSince: Date | null; - premiumSince: Date | null; - premiumType: PremiumTypes | Nullish; - profileEffectId: string | undefined; - profileFetchFailed: false; - pronouns: string; - themeColors: ProfileThemeColors | Nullish; - userId: string; -} - -export type UserProfile = FetchFailed extends true - ? UserProfileFetchFailed - : UserProfileFetchSucceeded; - -export interface GuildMemberProfile { - accentColor: number | Nullish; - badges: ProfileBadge[]; - banner: string | Nullish; - bio: string | undefined; - guildId: string; - popoutAnimationParticleType: any /* | Nullish */; // TEMP - profileEffectId: string | undefined; - pronouns: string; - themeColors: ProfileThemeColors | Nullish; - userId: string; -} - -export const enum StatusTypes { - DND = "dnd", - IDLE = "idle", - INVISIBLE = "invisible", - OFFLINE = "offline", - ONLINE = "online", - STREAMING = "streaming", - UNKNOWN = "unknown", -} - -interface UserProfileStoreSnapshotData { - userId: string; - profile: UserProfile | undefined; -} - -type UserProfileStoreAction = ExtractAction; - -export class UserProfileStore< - Constructor extends GenericConstructor = typeof UserProfileStore -> extends FluxSnapshotStore { - constructor(); - - static displayName: "UserProfileStore"; - static LATEST_SNAPSHOT_VERSION: number; - - getUserProfile(userId: string): UserProfile | undefined; - getGuildMemberProfile(userId: string, guildId?: string | Nullish): GuildMemberProfile | Nullish; - getIsAccessibilityTooltipViewed(): boolean; - getMutualFriends(userId: string): { - key: string; // userId - status: StatusTypes; - user: UserRecord; - }[] | undefined; - getMutualFriendsCount(userId: string): number | undefined; - getMutualGuilds(userId: string): { - guild: GuildRecord; - nick: string | null; - }[] | undefined; - isFetchingFriends(userId: string): boolean; - isFetchingProfile(userId: string): boolean; - get isSubmitting(): boolean; - takeSnapshot(): FluxSnapshot; - - loadCache: () => void; -} - -export interface AvatarDecorationData { - asset: string; - skuId: string; -} - -export interface UserClanData { - badge: string | null; - identityEnabled: boolean | null; - identityGuildId: string | null; - tag: string | null; -} - -export const 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, - TEAM_PSEUDO_USER = 1 << 10, - 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, - QUARANTINED = 0x100_000_000_000, - COLLABORATOR = 0x4_000_000_000_000, - RESTRICTED_COLLABORATOR = 0x8_000_000_000_000 -} - -export const enum PremiumTypes { - TIER_1 = 1, // Nitro Classic - TIER_2 = 2, // Nitro - TIER_0 = 3, // Nitro Basic -} - -type UserRecordOwnProperties = Pick; - -export class UserRecord< - OwnProperties extends UserRecordOwnProperties = UserRecordOwnProperties -> extends ImmutableRecord { - constructor(userFromServer: Record); // TEMP - - addGuildAvatarHash(guildId: string, avatarHash: string): this; - get avatarDecoration(): AvatarDecorationData | null; - set avatarDecoration(avatarDecorationData: { - asset: string; - skuId?: string; - sku_id?: string; - } | null); - get createdAt(): Date; - getAvatarSource( - guildId?: string | Nullish, - canAnimate?: boolean | undefined, - avatarSize?: number | undefined - ): IconSource; - getAvatarURL( - guildId?: string | Nullish, - avatarSize?: number | undefined, - canAnimate?: boolean | undefined - ): string; - hasAvatarForGuild(guildId?: string | Nullish): boolean; - hasDisabledPremium(): boolean; - hasFreePremium(): boolean; - hasHadPremium(): boolean; - hasHadSKU(skuId: string): boolean; - hasPremiumUsageFlag(flag: number): boolean; - hasPurchasedFlag(flag: number): boolean; - hasUrgentMessages(): boolean; - hasVerifiedEmailOrPhone(): boolean; - isClaimed(): boolean; - isClyde(): boolean; - isLocalBot(): boolean; - isNonUserBot(): boolean; - isPhoneVerified(): boolean; - isPomelo(): boolean; - isSystemUser(): boolean; - isVerifiedBot(): boolean; - removeGuildAvatarHash(guildId: string): this; - get tag(): string; - - avatar: string | null; - avatarDecorationData: AvatarDecorationData | null; - banner: string | Nullish; - bot: boolean; - clan: UserClanData | null; - desktop: boolean; - discriminator: string; - email: string | null; - flags: UserFlags; - globalName: string | Nullish; - guildMemberAvatars: { [guildId: string]: string; }; - hasAnyStaffLevel: () => boolean; - hasBouncedEmail: boolean; - hasFlag: (flag: number) => boolean; - id: string; - isStaff: () => boolean; - isStaffPersonal: () => boolean; - mfaEnabled: boolean; - mobile: boolean; - nsfwAllowed: boolean; - personalConnectionId: string | null; - phone: string | null; - premiumType: PremiumTypes | Nullish; // discord seems to have recently made it so that premiumType is undefined for every UserRecord except for that of the current user - premiumUsageFlags: number; - publicFlags: UserFlags; - purchasedFlags: number; - system: boolean; - username: string; - verified: boolean; -} - -interface UserStoreSnapshotData { - users: [UserRecord] | []; -} - -type UserStoreAction = ExtractAction; - -export class UserStore< - Constructor extends GenericConstructor = typeof UserStore -> extends FluxSnapshotStore { - constructor(); - - static displayName: "UserStore"; - static LATEST_SNAPSHOT_VERSION: number; - - filter(predicate: (user: UserRecord) => user is T, sort?: boolean | undefined): T[]; - filter(predicate: (user: UserRecord) => unknown, sort?: boolean | undefined): UserRecord[]; - findByTag(username: string, discriminator?: string | Nullish): UserRecord | undefined; - forEach(callback: (user: UserRecord) => boolean | void): void; - getCurrentUser(): UserRecord | undefined; // returns undefined if called before the first USER_UPDATE action for the current user. discord seems to always check != null too - getUser(userId?: string | Nullish): UserRecord | undefined; - getUsers(): { [userId: string]: UserRecord; }; - getUserStoreVersion(): number; - handleLoadCache(cache: { - initialGuildChannels: any[]; // TEMP - privateChannels: any[]; // TEMP - users: any[] | Nullish; // TEMP - }): void; - takeSnapshot(): FluxSnapshot; -} - -export class WindowStore extends FluxStore { - isElementFullScreen(): boolean; - isFocused(): boolean; - windowSize(): Record<"width" | "height", number>; -} +export type useStateFromStores = ( + stores: t.FluxStore[], + mapper: () => T, + dependencies?: any, + isEqual?: (old: T, newer: T) => boolean +) => T; diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 90f4db770..39af843c5 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -16,213 +16,22 @@ * along with this program. If not, see . */ -import type { Guild, GuildMember } from "discord-types/general"; // TODO -import type { EventEmitter } from "events"; // Discord uses a polyfill for Node's EventEmitter +import { Guild, GuildMember } from "discord-types/general"; import type { ReactNode } from "react"; -// import type { OmitIndexSignature } from "type-fest"; -import type { ExcludeAction, ExtractAction, FluxAction, FluxActionType } from "./fluxActions"; -import type { i18nMessages } from "./i18nMessages"; +import type { FluxEvents } from "./fluxEvents"; +import { i18nMessages } from "./i18nMessages"; -export type { ExcludeAction, ExtractAction, FluxAction, FluxActionType }; +export { FluxEvents }; -type Nullish = null | undefined; - -declare class DepGraph { - constructor(options?: { circular?: boolean | undefined; } | undefined); - - addDependency(from: string, to: string): void; - addNode(name: string, data/* ?*/: Data/* | undefined*/): void; - clone(): DepGraph; - dependantsOf(name: string, leavesOnly?: boolean | undefined): string[]; - dependenciesOf(name: string, leavesOnly?: boolean | undefined): string[]; - getNodeData(name: string): Data; - hasNode(name: string): Data; - overallOrder(leavesOnly?: boolean | undefined): string[]; - removeDependency(from: string, to: string): void; - removeNode(name: string): void; - setNodeData(name: string, data/* ?*/: Data/* | undefined*/): void; - size(): number; - - circular: boolean | undefined; - nodes: Record; - outgoingEdges: Record; - incomingEdges: Record; -} - -export const enum FluxDispatchBand { - Early = 0, - Database = 1, - Default = 2 -} - -/* -export type FluxActionHandler = Action extends FluxAction - ? Exclude, "type"> extends never - ? (action: any) => Return - : (action: Action) => Return - : never; -*/ - -export type FluxActionHandler = (action: Action) => void; - -export type FluxActionHandlerMap - = { [ActionType in Action["type"]]: FluxActionHandler>; }; - -interface FluxActionHandlersGraphNode { - name: string; // storeName - band: FluxDispatchBand; - actionHandler: FluxActionHandlerMap; - storeDidChange: FluxActionHandler; -} - -type FluxOrderedActionHandlers = { - name: string; // storeName - actionHandler: FluxActionHandler; - storeDidChange: FluxActionHandler; -}[]; - -declare class FluxActionHandlersGraph { - _addToBand(dispatchToken: string, dispatchBand: FluxDispatchBand): void; - _bandToken(dispatchBand: FluxDispatchBand): string; - _computeOrderedActionHandlers( - actionType: ActionType - ): FluxOrderedActionHandlers>[]; - _computeOrderedCallbackTokens(): string[]; - _invalidateCaches(): void; - _validateDependencies(fromDispatchToken: string, toDispatchToken: string): void; - addDependencies(fromDispatchToken: string, toDispatchTokens: string[]): void; - createToken(): string; - getOrderedActionHandlers({ type }: { - type: ActionType; - }): FluxOrderedActionHandlers>; - register( - storeName: string, - actionHandlers: FluxActionHandlerMap, - storeDidChange: FluxActionHandler, - dispatchBand: FluxDispatchBand, - dispatchToken?: string | undefined - ): string; - - _dependencyGraph: DepGraph; - _lastID: number; - _orderedActionHandlers: { - [ActionType in FluxActionType]?: FluxOrderedActionHandlers> | Nullish; - }; - _orderedCallbackTokens: string[] | Nullish; -} - -interface SentryUtils { - addBreadcrumb: (breadcrumb: { - category?: string | undefined; - data?: any; - level?: string | undefined; - message?: string | undefined; - type?: string | undefined; - }) => void; -} - -type FluxActionMetric - = [storeName: string, actionType: ActionType, totalTime: number]; - -declare class FluxActionLog { - constructor(actionType: Action["type"]); - - get name(): Action["type"]; - toJSON(): Pick & { - created_at: FluxActionLog["createdAt"]; - }; - - action: Action; - createdAt: Date; - error: Error | undefined; - id: number; - startTime: number; - totalTime: number; - traces: { - name: string; - time: number; - }[]; -} - -declare class FluxActionLogger extends EventEmitter { - constructor(options?: { persist?: boolean | undefined; } | undefined); - - getLastActionMetrics( - title: string, - limit?: number | undefined /* = 20 */ - ): FluxActionMetric[]; - getSlowestActions( - actionType?: ActionType | Nullish, - limit?: number | undefined /* = 20 */ - ): FluxActionMetric[]; - log( - action: Action, - callback: (func: (storeName: string, func: () => T) => T) => void - ): FluxActionLog; - - logs: FluxActionLog[]; - persist: boolean; -} - -/* - * The only reason to make Dispatcher generic with a type parameter for the actions it handles would be to allow plugins - * to create their own Flux stores with their own actions. However, this would require removing all contravariant properties - * from Dispatcher so that plugins could create stores with their own Dispatcher instances. This would be required, since - * the alternative option, allowing plugins to use the main Dispatcher instance, would require removing type information for - * Discord's actions from Dispatcher, and would introduce the potential for action type name conflicts. Both of these - * options would harm the main use case of these types. Furthermore, there are other state management libraries bundled with - * Discord that plugins can use (e.g., Redux, Zustand), and Discord seems to only use one Dispatcher instance (all ~398 - * stores use the same instance), implying that their type for Dispatcher is also not generic. - */ -export class FluxDispatcher { - constructor( - defaultBand?: FluxDispatchBand | undefined /* = FluxDispatchBand.Early */, - actionLogger?: FluxActionLogger | Nullish, - sentryUtils?: SentryUtils | Nullish - ); - - _dispatch( - action: FluxAction, - func: (storeName: string, func: () => T) => T - ): boolean | void; - _dispatchWithDevtools(action: FluxAction): void; - _dispatchWithLogging(action: FluxAction): void; - addDependencies(fromDispatchToken: string, toDispatchTokens: string[]): void; - addInterceptor(interceptor: FluxActionHandler): void; - createToken(): string; - dispatch(action: FluxAction): Promise; - flushWaitQueue(): void; +export interface FluxDispatcher { + _actionHandlers: any; + _subscriptions: any; + dispatch(event: { [key: string]: unknown; type: FluxEvents; }): Promise; isDispatching(): boolean; - register( - storeName: string, - actionHandlers: FluxActionHandlerMap, - storeDidChange: FluxActionHandler, - dispatchBand?: FluxDispatchBand | Nullish, - dispatchToken?: string | undefined - ): string; - subscribe( - actionType: ActionType, - listener: FluxActionHandler> - ): void; - unsubscribe( - actionType: ActionType, - listener: FluxActionHandler> - ): void; + subscribe(event: FluxEvents, callback: (data: any) => void): void; + unsubscribe(event: FluxEvents, callback: (data: any) => void): void; wait(callback: () => void): void; - - _actionHandlers: FluxActionHandlersGraph; - _currentDispatchActionType: FluxActionType | Nullish; - _defaultBand: FluxDispatchBand; - _interceptors: ((action: FluxAction) => boolean)[]; - _processingWaitQueue: boolean; - _sentryUtils: SentryUtils | Nullish; - _subscriptions: { - [ActionType in FluxActionType]?: Set>> | Nullish; - }; - _waitQueue: (() => void)[]; - actionLogger: FluxActionLogger; - functionCache: FluxActionHandlerMap; } export type Parser = Record< @@ -274,7 +83,7 @@ interface RestRequestData { export type RestAPI = Record<"delete" | "get" | "patch" | "post" | "put", (data: RestRequestData) => Promise>; -export type PermissionKeys = "CREATE_INSTANT_INVITE" +export type Permissions = "CREATE_INSTANT_INVITE" | "KICK_MEMBERS" | "BAN_MEMBERS" | "ADMINISTRATOR" @@ -322,7 +131,7 @@ export type PermissionKeys = "CREATE_INSTANT_INVITE" | "MANAGE_EVENTS" | "CREATE_EVENTS"; -export type Permissions = Record; +export type PermissionsBits = Record; export interface Locale { name: string; @@ -373,7 +182,6 @@ export interface NavigationRouter { } export interface IconUtils { - // @ts-expect-error: TODO getUserAvatarURL(user: User, canAnimate?: boolean, size?: number, format?: string): string; getDefaultAvatarURL(id: string, discriminator?: string): string; getUserBannerURL(data: { id: string, banner: string, canAnimate?: boolean, size: number; }): string | undefined; diff --git a/src/webpack/common/utils.ts b/src/webpack/common/utils.ts index 83d55cf51..72a71f31c 100644 --- a/src/webpack/common/utils.ts +++ b/src/webpack/common/utils.ts @@ -136,7 +136,7 @@ export const NavigationRouter: t.NavigationRouter = findByPropsLazy("transitionT export let SettingsRouter: any; waitFor(["open", "saveAccountChanges"], m => SettingsRouter = m); -export const { Permissions: PermissionsBits } = findLazy(m => typeof m.Permissions?.ADMINISTRATOR === "bigint") as { Permissions: t.Permissions; }; +export const { Permissions: PermissionsBits } = findLazy(m => typeof m.Permissions?.ADMINISTRATOR === "bigint") as { Permissions: t.PermissionsBits; }; export const zustandCreate = findByCodeLazy("will be removed in v4"); From 0c951e87002d05287e0a9f9daaea13e0b5be03ef Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Thu, 30 May 2024 23:47:12 -0400 Subject: [PATCH 015/126] Progress --- packages/discord-types/package.json | 2 +- .../src/flux/FluxDispatcher.d.ts | 37 ++-- .../discord-types/src/flux/FluxEmitter.d.ts | 30 +++ .../src/flux/fluxActionHandlers.d.ts | 1 + .../discord-types/src/flux/fluxActions.d.ts | 48 +++-- packages/discord-types/src/flux/index.d.ts | 1 + .../src/general/ApplicationRecord.d.ts | 204 ++++++++++++++++++ .../src/general/CompanyRecord.d.ts | 20 ++ packages/discord-types/src/general/Draft.d.ts | 43 ++++ .../src/general/GuildRecord.d.ts | 2 +- .../src/general/MessageRecord.d.ts | 33 ++- .../src/general/UserProfile.d.ts | 138 +++--------- .../discord-types/src/general/UserRecord.d.ts | 2 +- .../src/general/channels/ChannelRecord.d.ts | 34 +-- packages/discord-types/src/general/index.d.ts | 3 + .../src/stores/ApplicationStore.d.ts | 25 +++ .../discord-types/src/stores/DraftStore.d.ts | 38 ++++ .../discord-types/src/stores/EmojiStore.d.ts | 46 ++++ .../discord-types/src/stores/WindowStore.d.ts | 31 +++ .../stores/abstract/FluxPersistedStore.d.ts | 1 + .../stores/abstract/FluxSnapshotStore.d.ts | 1 + .../src/stores/abstract/FluxStore.d.ts | 10 +- packages/discord-types/src/stores/index.d.ts | 4 + packages/discord-types/tsconfig.json | 1 + 24 files changed, 576 insertions(+), 179 deletions(-) create mode 100644 packages/discord-types/src/flux/FluxEmitter.d.ts create mode 100644 packages/discord-types/src/general/ApplicationRecord.d.ts create mode 100644 packages/discord-types/src/general/CompanyRecord.d.ts create mode 100644 packages/discord-types/src/general/Draft.d.ts create mode 100644 packages/discord-types/src/stores/ApplicationStore.d.ts create mode 100644 packages/discord-types/src/stores/DraftStore.d.ts create mode 100644 packages/discord-types/src/stores/EmojiStore.d.ts create mode 100644 packages/discord-types/src/stores/WindowStore.d.ts diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index 1194ba0f6..21f830a0a 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -27,6 +27,6 @@ "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-unicorn": "^53.0.0", "typescript": "^5.4.5", - "typescript-eslint": "^8.0.0-alpha.20" + "typescript-eslint": "^8.0.0-alpha.24" } } diff --git a/packages/discord-types/src/flux/FluxDispatcher.d.ts b/packages/discord-types/src/flux/FluxDispatcher.d.ts index 75c44960e..7270661ac 100644 --- a/packages/discord-types/src/flux/FluxDispatcher.d.ts +++ b/packages/discord-types/src/flux/FluxDispatcher.d.ts @@ -8,22 +8,6 @@ import type { Nullish } from "../internal"; import type { FluxActionHandler, FluxActionHandlerMap, FluxActionHandlersGraph } from "./fluxActionHandlers"; import type { ExtractAction, FluxAction, FluxActionLogger, FluxActionType } from "./fluxActions"; -export const enum FluxDispatchBand { - Early = 0, - Database = 1, - Default = 2, -} - -export interface SentryUtils { - addBreadcrumb: (breadcrumb: { - category?: string | undefined; - data?: any; - level?: string | undefined; - message?: string | undefined; - type?: string | undefined; - }) => void; -} - /* * The only reason to make Dispatcher generic with a type parameter for the actions it handles would be to allow plugins * to create their own Flux stores with their own actions. However, this would require removing all contravariant properties @@ -34,9 +18,10 @@ export interface SentryUtils { * Discord that plugins can use (e.g., Redux, Zustand), and Discord seems to only use one Dispatcher instance (all ~398 * stores use the same instance), implying that their type for Dispatcher is also not generic. */ +// Original name: Dispatcher export class FluxDispatcher { constructor( - defaultBand?: FluxDispatchBand | undefined /* = FluxDispatchBand.Early */, + defaultBand?: FluxDispatchBand | undefined /* = FluxDispatchBand.EARLY */, actionLogger?: FluxActionLogger | Nullish, sentryUtils?: SentryUtils | Nullish ); @@ -83,3 +68,21 @@ export class FluxDispatcher { actionLogger: FluxActionLogger; functionCache: FluxActionHandlerMap; } + +// Original name: DispatchBand +// Enum keys made screaming snake case for consistency. +export const enum FluxDispatchBand { + EARLY = 0, + DATABASE = 1, + DEFAULT = 2, +} + +export interface SentryUtils { + addBreadcrumb: (breadcrumb: { + category?: string | undefined; + data?: any; + level?: string | undefined; + message?: string | undefined; + type?: string | undefined; + }) => void; +} diff --git a/packages/discord-types/src/flux/FluxEmitter.d.ts b/packages/discord-types/src/flux/FluxEmitter.d.ts new file mode 100644 index 000000000..6b81e293b --- /dev/null +++ b/packages/discord-types/src/flux/FluxEmitter.d.ts @@ -0,0 +1,30 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { FluxStore, FluxSyncWithFunction } from "../stores/abstract/FluxStore"; + +// Original name: Emitter +export class FluxEmitter { + batched(callback: () => T): T; + destroy(): void; + emit(): void; + emitNonReactOnce(syncWiths: Set, changedStores: Set): void; + emitReactOnce(): void; + getChangeSentinel(): number; + getIsPaused(): boolean; + injectBatchEmitChanges(batchEmitChanges: () => unknown): void; + markChanged(store: FluxStore): void; + pause(timeout?: number | undefined): void; + resume(shouldEmit?: boolean | undefined): void; + + changedStores: Set; + changeSentinel: number; + isBatchEmitting: boolean; + isDispatching: boolean; + isPaused: boolean; + pauseTimer: number | null; + reactChangedStores: Set; +} diff --git a/packages/discord-types/src/flux/fluxActionHandlers.d.ts b/packages/discord-types/src/flux/fluxActionHandlers.d.ts index 58df9df95..64fc1f8c9 100644 --- a/packages/discord-types/src/flux/fluxActionHandlers.d.ts +++ b/packages/discord-types/src/flux/fluxActionHandlers.d.ts @@ -36,6 +36,7 @@ type FluxOrderedActionHandlers = { storeDidChange: FluxActionHandler; }[]; +// Original name: ActionHandlersGraph export class FluxActionHandlersGraph { _addToBand(dispatchToken: string, dispatchBand: FluxDispatchBand): void; _bandToken(dispatchBand: FluxDispatchBand): string; diff --git a/packages/discord-types/src/flux/fluxActions.d.ts b/packages/discord-types/src/flux/fluxActions.d.ts index 25474c52a..2835acfc4 100644 --- a/packages/discord-types/src/flux/fluxActions.d.ts +++ b/packages/discord-types/src/flux/fluxActions.d.ts @@ -28,29 +28,7 @@ export type ExtractAction - = [storeName: string, actionType: ActionType, totalTime: number]; - -export class FluxActionLog { - constructor(actionType: Action["type"]); - - get name(): Action["type"]; - toJSON(): Pick & { - created_at: FluxActionLog["createdAt"]; - }; - - action: Action; - createdAt: Date; - error: Error | undefined; - id: number; - startTime: number; - totalTime: number; - traces: { - name: string; - time: number; - }[]; -} - +// Original name: ActionLogger export class FluxActionLogger extends EventEmitter { constructor(options?: { persist?: boolean | undefined; } | undefined); @@ -71,6 +49,30 @@ export class FluxActionLogger extends EventEmitter { persist: boolean; } +export type FluxActionMetric + = [storeName: string, actionType: ActionType, totalTime: number]; + +// Original name: ActionLog +export class FluxActionLog { + constructor(actionType: Action["type"]); + + get name(): Action["type"]; + toJSON(): Pick & { + created_at: FluxActionLog["createdAt"]; + }; + + action: Action; + createdAt: Date; + error: Error | undefined; + id: number; + startTime: number; + totalTime: number; + traces: { + name: string; + time: number; + }[]; +} + /* function generateFluxActionType() { const actionTypes = new Set(); diff --git a/packages/discord-types/src/flux/index.d.ts b/packages/discord-types/src/flux/index.d.ts index 21dd8ec26..0262f50d3 100644 --- a/packages/discord-types/src/flux/index.d.ts +++ b/packages/discord-types/src/flux/index.d.ts @@ -7,3 +7,4 @@ export * from "./fluxActionHandlers"; export * from "./fluxActions"; export * from "./FluxDispatcher"; +export * from "./FluxEmitter"; diff --git a/packages/discord-types/src/general/ApplicationRecord.d.ts b/packages/discord-types/src/general/ApplicationRecord.d.ts new file mode 100644 index 000000000..847809809 --- /dev/null +++ b/packages/discord-types/src/general/ApplicationRecord.d.ts @@ -0,0 +1,204 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; +import type { CompanyRecord } from "./CompanyRecord"; +import type { ImmutableRecord } from "./ImmutableRecord"; +import type { IconSource } from "./misc"; +import type { UserRecord } from "./UserRecord"; + +export type ApplicationRecordOwnProperties = Pick; + +export class ApplicationRecord< + OwnProperties extends ApplicationRecordOwnProperties = ApplicationRecordOwnProperties +> extends ImmutableRecord { + constructor(applicationProperties: Record); // TEMP + + static createFromServer(applicationFromServer: Record): ApplicationRecord; // TEMP + static supportsOutOfProcessOverlay(overlayMethods?: ApplicationOverlayMethodFlags | Nullish): boolean; + + get destinationSkuId(): string | undefined; + getCoverImageURL(imageSize?: number | undefined): string | null; + getIconSource(iconSize?: number | undefined, iconFormat?: string | Nullish): IconSource | null; + getIconURL(iconSize?: number | undefined, iconFormat?: string | Nullish): string | null; + getMaxParticipants(): number; + getSplashURL(splashSize?: number | undefined, splashFormat?: string | Nullish): string | null; + supportsIntegrationTypes(...integrationTypes: ApplicationIntegrationType[]): boolean; + get supportsOutOfProcessOverlay(): boolean; + + aliases: string[]; + bot: UserRecord | null; + coverImage: string | null; + description: string | null; + developers: CompanyRecord[]; + embeddedActivityConfig: EmbeddedActivityConfig | undefined; + eulaId: string | null; + executables: ApplicationExecutable[]; + flags: ApplicationFlags; + /** @todo This is not a GuildRecord; it's a guild object from the API. */ + guild: Record | null; + guildId: string | null; + hashes: string[]; + hook: boolean; + icon: string | null; + id: string; + integrationTypesConfig: Partial> | null; + isMonetized: boolean; + maxParticipants: number | undefined; + name: string; + overlay: boolean; + overlayCompatibilityHook: boolean; + overlayMethods: ApplicationOverlayMethodFlags; + overlayWarn: boolean; + primarySkuId: string | undefined; + privacyPolicyUrl: string | undefined; + publishers: CompanyRecord[]; + roleConnectionsVerificationUrl: string | undefined; + slug: string | null; + splash: string | null; + storefront_available: boolean | undefined; + storeListingSkuId: string | undefined; + tags: string[]; + /** @todo This is a team object from the API. */ + team: Record | null; + termsOfServiceUrl: string | undefined; + thirdPartySkus: string[]; + type: ApplicationType | null; +} + +/** @todo Some properties may not actually be optional or unlikely may also be null. */ +export interface EmbeddedActivityConfig { + application_id: string; + client_platform_config: Partial>; + default_orientation_lock_state?: OrientationLockState; + displays_advertisements?: boolean; + has_csp_exception?: boolean; + requires_age_gate?: boolean; + shelf_rank?: number; + supported_platforms?: EmbeddedActivitySupportedPlatform[]; + tablet_default_orientation_lock_state?: OrientationLockState; +} + +// Original name: EmbeddedActivitySupportedPlatforms +export const enum EmbeddedActivitySupportedPlatform { + ANDROID = "android", + IOS = "ios", + WEB = "web", +} + +/** @todo Some properties may not actually be optional or unlikely may also be null. */ +export interface EmbeddedActivityClientPlatformConfig { + label_type?: EmbeddedActivityLabelType; + label_until?: string | null; + release_phase: string; +} + +// Original name: EmbeddedActivityLabelTypes +export const enum EmbeddedActivityLabelType { + NONE = 0, + NEW = 1, + UPDATED = 2, +} + +export const enum OrientationLockState { + UNLOCKED = 1, + PORTRAIT = 2, + LANDSCAPE = 3, +} + +export interface ApplicationExecutable { + arguments?: string[]; + isLauncher?: boolean; + name: string; + os: string; +} + +export const enum ApplicationIntegrationType { + GUILD_INSTALL = 0, + USER_INSTALL = 1, +} + +export interface ApplicationIntegrationTypeConfig { + oauth2InstallParams: ApplicationInstallParams | undefined; +} + +// Original name: OAuth2Scopes +export const enum OAuth2Scope { + ACTIVITIES_READ = "activities.read", + ACTIVITIES_WRITE = "activities.write", + APPLICATIONS_BUILDS_READ = "applications.builds.read", + APPLICATIONS_BUILDS_UPLOAD = "applications.builds.upload", + APPLICATIONS_COMMANDS = "applications.commands", + APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE = "applications.commands.permissions.update", + APPLICATIONS_COMMANDS_UPDATE = "applications.commands.update", + APPLICATIONS_ENTITLEMENTS = "applications.entitlements", + APPLICATIONS_STORE_UPDATE = "applications.store.update", + BOT = "bot", + CONNECTIONS = "connections", + DM_CHANNELS_MESSAGES_READ = "dm_channels.messages.read", + DM_CHANNELS_MESSAGES_WRITE = "dm_channels.messages.write", + DM_CHANNELS_READ = "dm_channels.read", + EMAIL = "email", + GDM_JOIN = "gdm.join", + GUILDS = "guilds", + GUILDS_JOIN = "guilds.join", + GUILDS_MEMBERS_READ = "guilds.members.read", + IDENTIFY = "identify", + MESSAGES_READ = "messages.read", + OPENID = "openid", + PRESENCES_READ = "presences.read", + PRESENCES_WRITE = "presences.write", + RELATIONSHIPS_READ = "relationships.read", + RELATIONSHIPS_WRITE = "relationships.write", + ROLE_CONNECTIONS_WRITE = "role_connections.write", + RPC = "rpc", + RPC_ACTIVITIES_WRITE = "rpc.activities.write", + RPC_NOTIFICATIONS_READ = "rpc.notifications.read", + RPC_SCREENSHARE_READ = "rpc.screenshare.read", + RPC_SCREENSHARE_WRITE = "rpc.screenshare.write", + RPC_VIDEO_READ = "rpc.video.read", + RPC_VIDEO_WRITE = "rpc.video.write", + RPC_VOICE_READ = "rpc.voice.read", + RPC_VOICE_WRITE = "rpc.voice.write", + VOICE = "voice", + WEBHOOK_INCOMING = "webhook.incoming", +} + +export interface ApplicationInstallParams { + /** + * Permissions serialized as a string. + */ + permissions: string; + scopes: OAuth2Scope[]; +} + +export const enum ApplicationFlags { + EMBEDDED_RELEASED = 1 << 1, + EMBEDDED_IAP = 1 << 3, + APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE = 1 << 6, + GATEWAY_PRESENCE = 1 << 12, + GATEWAY_PRESENCE_LIMITED = 1 << 13, + GATEWAY_GUILD_MEMBERS = 1 << 14, + GATEWAY_GUILD_MEMBERS_LIMITED = 1 << 15, + EMBEDDED = 1 << 17, + GATEWAY_MESSAGE_CONTENT = 1 << 18, + GATEWAY_MESSAGE_CONTENT_LIMITED = 1 << 19, + EMBEDDED_FIRST_PARTY = 1 << 20, + APPLICATION_COMMAND_BADGE = 1 << 23, + SOCIAL_LAYER_INTEGRATION = 1 << 27, +} + +export const enum ApplicationOverlayMethodFlags { + DEFAULT = 0, + OUT_OF_PROCESS = 1 << 0, +} + +// Original name: ApplicationTypes +export const enum ApplicationType { + GAME = 1, + TICKETED_EVENTS = 3, + GUILD_ROLE_SUBSCRIPTIONS = 4, +} diff --git a/packages/discord-types/src/general/CompanyRecord.d.ts b/packages/discord-types/src/general/CompanyRecord.d.ts new file mode 100644 index 000000000..81f403ab3 --- /dev/null +++ b/packages/discord-types/src/general/CompanyRecord.d.ts @@ -0,0 +1,20 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ImmutableRecord } from "./ImmutableRecord"; + +export type CompanyRecordOwnProperties = Pick; + +export class CompanyRecord< + OwnProperties extends CompanyRecordOwnProperties = CompanyRecordOwnProperties +> extends ImmutableRecord { + constructor(companyProperties: CompanyRecordOwnProperties); + + static createFromServer(companyFromServer: CompanyRecordOwnProperties): CompanyRecord; + + id: string; + name: string; +} diff --git a/packages/discord-types/src/general/Draft.d.ts b/packages/discord-types/src/general/Draft.d.ts new file mode 100644 index 000000000..9ea78aecb --- /dev/null +++ b/packages/discord-types/src/general/Draft.d.ts @@ -0,0 +1,43 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +// The other DraftTypes are either not handled by DraftStore or not yet implemented. +export type Draft + = Type extends DraftType.CHANNEL_MESSAGE | DraftType.FIRST_THREAD_MESSAGE ? DraftMessage + : Type extends DraftType.THREAD_SETTINGS ? DraftThreadSettings + : never; + +// Enum keys made screaming snake case for consistency. +export const enum DraftType { + CHANNEL_MESSAGE = 0, + THREAD_SETTINGS = 1, + FIRST_THREAD_MESSAGE = 2, + APPLICATION_LAUNCHER_COMMAND = 3, + POLL = 4, + SLASH_COMMAND = 5, +} + +export interface DraftMessage { + draft: string; + timestamp: number; +} + +export type DraftThreadSettings = DraftForumThreadSettings | DraftNonForumThreadSettings; + +export interface DraftForumThreadSettings { + appliedTags: Set; + name: string; + parentChannelId: string; + timestamp: number; +} + +export interface DraftNonForumThreadSettings { + isPrivate: boolean; + location?: any; // TEMP + parentChannelId: string; + parentMessageId: string | undefined; + timestamp: number; +} diff --git a/packages/discord-types/src/general/GuildRecord.d.ts b/packages/discord-types/src/general/GuildRecord.d.ts index 0fd70688d..ec0297f23 100644 --- a/packages/discord-types/src/general/GuildRecord.d.ts +++ b/packages/discord-types/src/general/GuildRecord.d.ts @@ -15,7 +15,7 @@ export type GuildRecordOwnProperties = Pick extends ImmutableRecord { - constructor(guildFromServer: Record); // TEMP + constructor(guildProperties: Record); // TEMP get acronym(): string; canHaveRaidActivityAlerts(): boolean; diff --git a/packages/discord-types/src/general/MessageRecord.d.ts b/packages/discord-types/src/general/MessageRecord.d.ts index 730ff4cdc..d65ba6f0d 100644 --- a/packages/discord-types/src/general/MessageRecord.d.ts +++ b/packages/discord-types/src/general/MessageRecord.d.ts @@ -8,9 +8,9 @@ import type { Duration, Moment } from "moment"; import type { SnakeCasedProperties } from "type-fest"; import type { Nullish } from "../internal"; +import type { ApplicationIntegrationType } from "./ApplicationRecord"; import type { ChannelRecord, ChannelType } from "./channels"; import type { ImmutableRecord } from "./ImmutableRecord"; -import type { ApplicationIntegrationType } from "./UserProfile"; import type { UserRecord } from "./UserRecord"; export type MessageRecordOwnProperties = Pick; @@ -18,7 +18,7 @@ export type MessageRecordOwnProperties = Pick extends ImmutableRecord { - constructor(messageFromServer: Record); // TEMP + constructor(messageProperties: Record); // TEMP addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP addReactionBatch(e?: any, t?: any): any; // TEMP @@ -183,8 +183,11 @@ export const enum ButtonStyle { PREMIUM = 6, } -// TODO: Must have one of either `customId` or `url`, but never both. -// If a button has `url` it must have the `Link` button style. +/** + * @todo + * Must have one of either `customId` or `url`, but never both. + * If a button has `url` it must have the `Link` button style. + */ export interface MessageButtonComponent { customId: string | undefined; disabled: boolean | undefined; @@ -385,9 +388,12 @@ export interface MessageEmbedProvider { url: string | undefined; } -// TODO: An embed thumbnail either: -// has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` -// or has only `height`, `url`, and `width`. +/** + * @todo + * An embed thumbnail either + * has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` + * or has only `height`, `url`, and `width`. + */ export interface MessageEmbedThumbnail { height: number; placeholder: string | undefined; @@ -419,8 +425,11 @@ export const enum MessageEmbedType { VOICE_CHANNEL = "voice_channel", } -// TODO: An embed video must have either `proxyURL` or `url`, and having both is possible. -// It might not be possible for an embed video to have `proxyURL` without `url`, though. +/** + * @todo + * An embed video must have either `proxyURL` or `url`, and having both is possible. + * It might not be possible for an embed video to have `proxyURL` without `url`, though. + */ export interface MessageEmbedVideo { height: number; placeholder: string | undefined; @@ -509,7 +518,8 @@ export interface InteractionMetadata { original_response_message_id?: string; triggering_interaction_metadata?: InteractionMetadata; type: InteractionTypes; - user: Record; // TEMP: This is not a UserRecord, it's a user object from the API. + /** @todo This is not a UserRecord; it's a user object from the API. */ + user: Record; } // TEMP export interface ChannelMention { @@ -639,7 +649,8 @@ export interface MessageSticker { sort_value?: number; tags: string; type: MetaStickerType; - user?: Record; // TEMP: This is not a UserRecord, it's a user object from the API. + /** @todo This is not a UserRecord; it's a user object from the API. */ + user?: Record; } export const enum MessageTypes { diff --git a/packages/discord-types/src/general/UserProfile.d.ts b/packages/discord-types/src/general/UserProfile.d.ts index c0019edba..3c2a271d6 100644 --- a/packages/discord-types/src/general/UserProfile.d.ts +++ b/packages/discord-types/src/general/UserProfile.d.ts @@ -5,12 +5,34 @@ */ import type { Nullish } from "../internal"; +import type { ApplicationInstallParams, ApplicationIntegrationType, ApplicationRecord } from "./ApplicationRecord"; import type { UserPremiumType } from "./UserRecord"; export type UserProfile = FetchFailed extends true ? UserProfileFetchFailed : UserProfileFetchSucceeded; +export interface UserProfileFetchSucceeded { + accentColor: number | Nullish; + application: ProfileApplicationData | null; + applicationRoleConnections: ProfileApplicationRoleConnectionData[]; + badges: ProfileBadge[]; + banner: string | Nullish; + bio: string; + connectedAccounts: ProfileConnectedAccountData[]; + lastFetched: number; + legacyUsername: string | Nullish; + popoutAnimationParticleType: any /* | Nullish */; // TEMP + premiumGuildSince: Date | null; + premiumSince: Date | null; + premiumType: UserPremiumType | Nullish; + profileEffectId: string | undefined; + profileFetchFailed: false; + pronouns: string; + themeColors: ProfileThemeColors | Nullish; + userId: string; +} + export interface UserProfileFetchFailed { accentColor: null; application: null; @@ -27,111 +49,17 @@ export interface UserProfileFetchFailed { userId: string; } -export interface UserProfileFetchSucceeded { - accentColor: number | Nullish; - application: Application | null; - applicationRoleConnections: ApplicationRoleConnection[]; - badges: ProfileBadge[]; - banner: string | Nullish; - bio: string; - connectedAccounts: ConnectedAccount[]; - lastFetched: number; - legacyUsername: string | Nullish; - popoutAnimationParticleType: any /* | Nullish */; // TEMP - premiumGuildSince: Date | null; - premiumSince: Date | null; - premiumType: UserPremiumType | Nullish; - profileEffectId: string | undefined; - profileFetchFailed: false; - pronouns: string; - themeColors: ProfileThemeColors | Nullish; - userId: string; -} - -// TODO: Move application related types to their own file. -export const enum ApplicationFlags { - EMBEDDED_RELEASED = 1 << 1, - EMBEDDED_IAP = 1 << 3, - APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE = 1 << 6, - GATEWAY_PRESENCE = 1 << 12, - GATEWAY_PRESENCE_LIMITED = 1 << 13, - GATEWAY_GUILD_MEMBERS = 1 << 14, - GATEWAY_GUILD_MEMBERS_LIMITED = 1 << 15, - EMBEDDED = 1 << 17, - GATEWAY_MESSAGE_CONTENT = 1 << 18, - GATEWAY_MESSAGE_CONTENT_LIMITED = 1 << 19, - EMBEDDED_FIRST_PARTY = 1 << 20, - APPLICATION_COMMAND_BADGE = 1 << 23, - SOCIAL_LAYER_INTEGRATION = 1 << 27, -} - -// Original name: OAuth2Scopes -export const enum OAuth2Scope { - ACTIVITIES_READ = "activities.read", - ACTIVITIES_WRITE = "activities.write", - APPLICATIONS_BUILDS_READ = "applications.builds.read", - APPLICATIONS_BUILDS_UPLOAD = "applications.builds.upload", - APPLICATIONS_COMMANDS = "applications.commands", - APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE = "applications.commands.permissions.update", - APPLICATIONS_COMMANDS_UPDATE = "applications.commands.update", - APPLICATIONS_ENTITLEMENTS = "applications.entitlements", - APPLICATIONS_STORE_UPDATE = "applications.store.update", - BOT = "bot", - CONNECTIONS = "connections", - DM_CHANNELS_MESSAGES_READ = "dm_channels.messages.read", - DM_CHANNELS_MESSAGES_WRITE = "dm_channels.messages.write", - DM_CHANNELS_READ = "dm_channels.read", - EMAIL = "email", - GDM_JOIN = "gdm.join", - GUILDS = "guilds", - GUILDS_JOIN = "guilds.join", - GUILDS_MEMBERS_READ = "guilds.members.read", - IDENTIFY = "identify", - MESSAGES_READ = "messages.read", - OPENID = "openid", - PRESENCES_READ = "presences.read", - PRESENCES_WRITE = "presences.write", - RELATIONSHIPS_READ = "relationships.read", - RELATIONSHIPS_WRITE = "relationships.write", - ROLE_CONNECTIONS_WRITE = "role_connections.write", - RPC = "rpc", - RPC_ACTIVITIES_WRITE = "rpc.activities.write", - RPC_NOTIFICATIONS_READ = "rpc.notifications.read", - RPC_SCREENSHARE_READ = "rpc.screenshare.read", - RPC_SCREENSHARE_WRITE = "rpc.screenshare.write", - RPC_VIDEO_READ = "rpc.video.read", - RPC_VIDEO_WRITE = "rpc.video.write", - RPC_VOICE_READ = "rpc.voice.read", - RPC_VOICE_WRITE = "rpc.voice.write", - VOICE = "voice", - WEBHOOK_INCOMING = "webhook.incoming", -} - -export interface ApplicationInstallParams { - permissions: string; // Permissions serialized as string - scopes: OAuth2Scope[]; -} - -export const enum ApplicationIntegrationType { - GUILD_INSTALL = 0, - USER_INSTALL = 1, -} - -export interface Application { +export interface ProfileApplicationData extends Pick { customInstallUrl: string | undefined; - flags: ApplicationFlags; - id: string; installParams: ApplicationInstallParams | undefined; integrationTypesConfig: Partial>; popularApplicationCommandIds: string[] | undefined; - primarySkuId: string | undefined; - storefront_available: boolean; } -export interface ApplicationRoleConnection { - metadata: Record; +export interface ProfileApplicationRoleConnectionData { + metadata: Record; platform_name: string | null; platform_username: string | null; } @@ -143,6 +71,14 @@ export interface ProfileBadge { link?: string; } +export interface ProfileConnectedAccountData { + id: string; + metadata?: Record; + name: string; + type: PlatformType; + verified: boolean; +} + // Original name: PlatformTypes export const enum PlatformType { AMAZON_MUSIC = "amazon-music", @@ -176,12 +112,4 @@ export const enum PlatformType { YOUTUBE = "youtube", } -export interface ConnectedAccount { - id: string; - metadata?: Record; - name: string; - type: PlatformType; - verified: boolean; -} - export type ProfileThemeColors = [primaryColor: number, accentColor: number]; diff --git a/packages/discord-types/src/general/UserRecord.d.ts b/packages/discord-types/src/general/UserRecord.d.ts index cf979ee89..d8a64b186 100644 --- a/packages/discord-types/src/general/UserRecord.d.ts +++ b/packages/discord-types/src/general/UserRecord.d.ts @@ -13,7 +13,7 @@ export type UserRecordOwnProperties = Pick extends ImmutableRecord { - constructor(userFromServer: Record); // TEMP + constructor(userPropertiesOrUserFromServer: Record); // TEMP addGuildAvatarHash(guildId: string, avatarHash: string): this; get avatarDecoration(): AvatarDecorationData | null; diff --git a/packages/discord-types/src/general/channels/ChannelRecord.d.ts b/packages/discord-types/src/general/channels/ChannelRecord.d.ts index a0603527b..53b3f379d 100644 --- a/packages/discord-types/src/general/channels/ChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ChannelRecord.d.ts @@ -169,13 +169,6 @@ export const enum ChannelFlags { IS_JOIN_REQUEST_INTERVIEW_CHANNEL = 1 << 16, } -export const enum ThreadMemberFlags { - HAS_INTERACTED = 1 << 0, - ALL_MESSAGES = 1 << 1, - ONLY_MENTIONS = 1 << 2, - NO_MESSAGES = 1 << 3, -} - export interface ThreadMember { flags: ThreadMemberFlags; joinTimestamp: string; @@ -186,9 +179,15 @@ export interface ThreadMember { muted: boolean; } -export const enum PermissionOverwriteType { - ROLE = 0, - MEMBER = 1, +export const enum ThreadMemberFlags { + HAS_INTERACTED = 1 << 0, + ALL_MESSAGES = 1 << 1, + ONLY_MENTIONS = 1 << 2, + NO_MESSAGES = 1 << 3, +} + +interface PermissionOverwriteMap { + [roleIdOrUserId: string]: PermissionOverwrite; } export interface PermissionOverwrite { @@ -198,8 +197,9 @@ export interface PermissionOverwrite { type: PermissionOverwriteType; } -interface PermissionOverwriteMap { - [roleIdOrUserId: string]: PermissionOverwrite; +export const enum PermissionOverwriteType { + ROLE = 0, + MEMBER = 1, } export interface ChannelRecipient { @@ -215,6 +215,11 @@ export interface ChannelRecipient { username: string; } +export interface SafetyWarning { + dismiss_timestamp?: string | Nullish; // TEMP + type: SafetyWarningType; +} + // Original name: SafetyWarningTypes export const enum SafetyWarningType { STRANGER_DANGER = 1, @@ -222,11 +227,6 @@ export const enum SafetyWarningType { INAPPROPRIATE_CONVERSATION_TIER_2 = 3, } -export interface SafetyWarning { - dismiss_timestamp?: string | Nullish; // TEMP - type: SafetyWarningType; -} - export interface ThreadMetadata { archived: boolean; archiveTimestamp: string; diff --git a/packages/discord-types/src/general/index.d.ts b/packages/discord-types/src/general/index.d.ts index 8c6d0de54..660284427 100644 --- a/packages/discord-types/src/general/index.d.ts +++ b/packages/discord-types/src/general/index.d.ts @@ -4,9 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +export * from "./ApplicationRecord"; export * from "./ChannelMessages"; export * from "./channels"; export * from "./Clan"; +export * from "./CompanyRecord"; +export * from "./Draft"; export * from "./GuildMember"; export * from "./GuildMemberProfile"; export * from "./GuildRecord"; diff --git a/packages/discord-types/src/stores/ApplicationStore.d.ts b/packages/discord-types/src/stores/ApplicationStore.d.ts new file mode 100644 index 000000000..f884afee8 --- /dev/null +++ b/packages/discord-types/src/stores/ApplicationStore.d.ts @@ -0,0 +1,25 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { ApplicationRecord, ApplicationType } from "../general/ApplicationRecord"; +import type { Nullish } from "../internal"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type ApplicationStoreAction = ExtractAction; + +export class ApplicationStore extends FluxStore { + static displayName: "ApplicationStore"; + + _getAllApplications(): ApplicationRecord[]; + didFetchingApplicationFail(applicationId: string): boolean; + getApplication(applicationId: string): ApplicationRecord | undefined; + getApplicationByName(applicationName?: string | Nullish): ApplicationRecord | undefined; + getFetchingOrFailedFetchingIds(): string[]; + getGuildApplication(guildId: string | Nullish, applicationType: ApplicationType): ApplicationRecord | undefined; + getGuildApplicationIds(guildId?: string | Nullish): string[]; + isFetchingApplication(applicationId: string): boolean; +} diff --git a/packages/discord-types/src/stores/DraftStore.d.ts b/packages/discord-types/src/stores/DraftStore.d.ts new file mode 100644 index 000000000..cfe92914b --- /dev/null +++ b/packages/discord-types/src/stores/DraftStore.d.ts @@ -0,0 +1,38 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { Draft, DraftForumThreadSettings, DraftNonForumThreadSettings, DraftType } from "../general/Draft"; +import type { GenericConstructor, Nullish } from "../internal"; +import type { FluxPersistedStore } from "./abstract/FluxPersistedStore"; + +export interface DraftStoreState { + [userId: string]: { [channelId: string]: { [Type in DraftType]?: Draft; }; }; +} + +export type DraftStoreAction = ExtractAction; + +export class DraftStore< + Constructor extends GenericConstructor = typeof DraftStore, + State extends DraftStoreState = DraftStoreState, + Action extends FluxAction = DraftStoreAction +> extends FluxPersistedStore { + static displayName: "DraftStore"; + static migrations: any; // TEMP + static persistKey: "DraftStore"; + + getDraft(channelId: string, draftType: DraftType): string; + getRecentlyEditedDrafts(draftType: Type): { + channelId: string; + draft: "draft" extends keyof Draft ? string : undefined; + timestamp: number; + }; + getState(): State; + getThreadDraftWithParentMessageId(messageId: string): DraftNonForumThreadSettings | Nullish; + getThreadSettings(threadId: string): + (ForumThread extends true ? DraftForumThreadSettings : DraftNonForumThreadSettings) | Nullish; + initialize(state: State): void; +} diff --git a/packages/discord-types/src/stores/EmojiStore.d.ts b/packages/discord-types/src/stores/EmojiStore.d.ts new file mode 100644 index 000000000..219d8d5a4 --- /dev/null +++ b/packages/discord-types/src/stores/EmojiStore.d.ts @@ -0,0 +1,46 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { GenericConstructor } from "../internal"; +import type { FluxPersistedStore } from "./abstract/FluxPersistedStore"; + +export interface EmojiStoreState { + [key: string]: any; // TEMP +} + +export type EmojiStoreAction = ExtractAction; + +export class EmojiStore< + Constructor extends GenericConstructor = typeof EmojiStore, + State extends EmojiStoreState = EmojiStoreState, + Action extends FluxAction = EmojiStoreAction +> extends FluxPersistedStore { + static displayName: "EmojiStore"; + static persistKey: "EmojiStoreV2"; + + get categories(): any; // TEMP + get diversitySurrogate(): any; // TEMP + get emojiFrecencyWithoutFetchingLatest(): any; // TEMP + getCustomEmojiById(e?: any): any; // TEMP + getDisambiguatedEmojiContext(e?: any): any; // TEMP + getEmojiAutosuggestion(e?: any): any; // TEMP + getGuildEmoji(e?: any): any; // TEMP + getGuilds(): any; // TEMP + getNewlyAddedEmoji(e?: any): any; // TEMP + getSearchResultsOrder(e?: any, t?: any, n?: any): any; // TEMP + getState(): State; + getTopEmoji(e?: any): any; // TEMP + getTopEmojisMetadata(e?: any): any; // TEMP + getUsableCustomEmojiById(e?: any): any; // TEMP + getUsableGuildEmoji(e?: any): any; // TEMP + hasFavoriteEmojis(e?: any): any; // TEMP + hasPendingUsage(): any; // TEMP + hasUsableEmojiInAnyGuild(): any; // TEMP + initialize(state: State): void; + get loadState(): any; // TEMP + searchWithoutFetchingLatest(e?: any): any; // TEMP +} diff --git a/packages/discord-types/src/stores/WindowStore.d.ts b/packages/discord-types/src/stores/WindowStore.d.ts new file mode 100644 index 000000000..fd55b58e6 --- /dev/null +++ b/packages/discord-types/src/stores/WindowStore.d.ts @@ -0,0 +1,31 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type WindowStoreAction = ExtractAction; + +export class WindowStore extends FluxStore { + static displayName: "WindowStore"; + + getFocusedWindowId(): string | null; + getLastFocusedWindowId(): string | null; + isElementFullScreen(windowId?: string | undefined): boolean; + isFocused(windowId?: string | undefined): boolean; + isVisible(windowId?: string | undefined): boolean; + windowSize(windowId?: string | undefined): Window["windowSize"]; +} + +export interface Window { + focused: boolean; + isElementFullscreen: boolean; + visible: boolean; + windowSize: { + height: number; + width: number; + }; +} diff --git a/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts b/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts index 6bff9deb6..1b4f0f29c 100644 --- a/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts @@ -10,6 +10,7 @@ import type { FluxDispatcher } from "../../flux/FluxDispatcher"; import type { GenericConstructor, Nullish } from "../../internal"; import type { FluxStore } from "./FluxStore"; +// Original name: PersistedStore export abstract class FluxPersistedStore< Constructor extends GenericConstructor = GenericConstructor, State = any, diff --git a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts index 59c614a1a..6c3063d08 100644 --- a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts @@ -16,6 +16,7 @@ export interface FluxSnapshot { export type FluxSnapshotStoreAction = ExcludeAction; +// Original name: SnapshotStore export abstract class FluxSnapshotStore< Constructor extends GenericConstructor = GenericConstructor, SnapshotData = any, diff --git a/packages/discord-types/src/stores/abstract/FluxStore.d.ts b/packages/discord-types/src/stores/abstract/FluxStore.d.ts index 56bbfd82b..1bdc79859 100644 --- a/packages/discord-types/src/stores/abstract/FluxStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxStore.d.ts @@ -9,6 +9,7 @@ import type { FluxAction } from "../../flux/fluxActions"; import type { FluxDispatchBand, FluxDispatcher } from "../../flux/FluxDispatcher"; import type { Nullish } from "../../internal"; +// Original name: Store export abstract class FluxStore { constructor( dispatcher: FluxDispatcher, @@ -36,7 +37,7 @@ export abstract class FluxStore { ): void; syncWith( stores: FluxStore[], - func: () => boolean | undefined, + func: FluxSyncWithFunction, timeout?: number | Nullish ): void; waitFor(...stores: FluxStore[]): void; @@ -49,7 +50,7 @@ export abstract class FluxStore { _mustEmitChanges: ((action: Action) => boolean) | Nullish; _reactChangeCallbacks: FluxChangeListeners; _syncWiths: { - func: () => boolean | undefined; + func: FluxSyncWithFunction; store: FluxStore; }[]; addChangeListener: FluxChangeListeners["add"]; @@ -59,8 +60,9 @@ export abstract class FluxStore { removeReactChangeListener: FluxChangeListeners["remove"]; } -export type FluxChangeListener = () => boolean; +export type FluxSyncWithFunction = () => boolean | undefined; +// Original name: ChangeListeners export class FluxChangeListeners { has(listener: FluxChangeListener): boolean; hasAny(): boolean; @@ -74,3 +76,5 @@ export class FluxChangeListeners { listeners: Set; remove: (listener: FluxChangeListener) => void; } + +export type FluxChangeListener = () => boolean; diff --git a/packages/discord-types/src/stores/index.d.ts b/packages/discord-types/src/stores/index.d.ts index c554253c5..1eae0b435 100644 --- a/packages/discord-types/src/stores/index.d.ts +++ b/packages/discord-types/src/stores/index.d.ts @@ -5,7 +5,10 @@ */ export * from "./abstract"; +export * from "./ApplicationStore"; export * from "./ChannelStore"; +export * from "./DraftStore"; +export * from "./EmojiStore"; export * from "./GuildMemberStore"; export * from "./GuildStore"; export * from "./MessageStore"; @@ -15,3 +18,4 @@ export * from "./SelectedGuildStore"; export * from "./UserProfileStore"; export * from "./UserStore"; export * from "./utils"; +export * from "./WindowStore"; diff --git a/packages/discord-types/tsconfig.json b/packages/discord-types/tsconfig.json index e6f271c81..28a50012c 100644 --- a/packages/discord-types/tsconfig.json +++ b/packages/discord-types/tsconfig.json @@ -3,6 +3,7 @@ "compilerOptions": { "exactOptionalPropertyTypes": true, + "noUncheckedIndexedAccess": true, "strict": true, "module": "Node16", From f183b773af44516f24bea9067c017cc38f123424 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Fri, 31 May 2024 23:24:14 -0400 Subject: [PATCH 016/126] Progress --- packages/discord-types/eslint.config.mjs | 6 +- packages/discord-types/package.json | 2 +- .../discord-types/src/flux/fluxActions.d.ts | 2 +- .../src/general/channels/ChannelRecord.d.ts | 2 + packages/discord-types/src/internal.d.ts | 2 +- .../discord-types/src/stores/DraftStore.d.ts | 1 - .../src/stores/GuildChannelStore.d.ts | 88 +++++++++++++++++++ .../src/stores/PermissionStore.d.ts | 55 ++++++++++++ .../src/stores/PresenceStore.d.ts | 36 ++++++++ .../src/stores/ReadStateStore.d.ts | 41 +++++++++ .../discord-types/src/stores/WindowStore.d.ts | 52 +++++------ .../stores/abstract/FluxPersistedStore.d.ts | 57 ++++++++---- .../stores/abstract/FluxSnapshotStore.d.ts | 12 +-- .../src/stores/abstract/FluxStore.d.ts | 2 +- packages/discord-types/src/stores/index.d.ts | 4 + 15 files changed, 303 insertions(+), 59 deletions(-) create mode 100644 packages/discord-types/src/stores/GuildChannelStore.d.ts create mode 100644 packages/discord-types/src/stores/PermissionStore.d.ts create mode 100644 packages/discord-types/src/stores/PresenceStore.d.ts create mode 100644 packages/discord-types/src/stores/ReadStateStore.d.ts diff --git a/packages/discord-types/eslint.config.mjs b/packages/discord-types/eslint.config.mjs index b8d7d8961..05fc249e3 100644 --- a/packages/discord-types/eslint.config.mjs +++ b/packages/discord-types/eslint.config.mjs @@ -159,7 +159,11 @@ export default tseslint.config( }], "import/no-default-export": "error", "import/no-unused-modules": "error", - "no-restricted-syntax": ["error", "TSEnumDeclaration[const=false]"], + "no-restricted-syntax": [ + "error", + "ImportDeclaration[importKind=value]", + "TSEnumDeclaration[const=false]", + ], } }, ); diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index 21f830a0a..ec5d9ade6 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -21,7 +21,7 @@ "devDependencies": { "@eslint-types/unicorn": "^52.0.0", "@stylistic/eslint-plugin": "^2.1.0", - "eslint": "^9.3.0", + "eslint": "^9.4.0", "eslint-plugin-headers": "^1.1.2", "eslint-plugin-import-x": "^0.5.1", "eslint-plugin-simple-import-sort": "^12.1.0", diff --git a/packages/discord-types/src/flux/fluxActions.d.ts b/packages/discord-types/src/flux/fluxActions.d.ts index 2835acfc4..320086461 100644 --- a/packages/discord-types/src/flux/fluxActions.d.ts +++ b/packages/discord-types/src/flux/fluxActions.d.ts @@ -91,4 +91,4 @@ function generateFluxActionType() { } */ -export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_START" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETTINGS_FETCH_START" | "CLAN_SETTINGS_FETCH_SUCCESS" | "CLAN_SETTINGS_SUBMIT" | "CLAN_SETTINGS_SUBMIT_ERROR" | "CLAN_SETTINGS_SUBMIT_SUCCESS" | "CLAN_SETTINGS_UPDATE" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_DEBUG_CLEAR_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_LOG_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_TOGGLE_FAST_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_INBOX_STALE" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTENT_INVENTORY_TRACK_ITEM_IMPRESSIONS" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V2" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PURCHASE_CONFIRMATION_MODAL_CLOSE" | "PURCHASE_CONFIRMATION_MODAL_OPEN" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DELIVERY_OVERRIDE" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRACK" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR" | "USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; +export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_HIDE_TAGS" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETTINGS_FETCH_START" | "CLAN_SETTINGS_FETCH_SUCCESS" | "CLAN_SETTINGS_SUBMIT" | "CLAN_SETTINGS_SUBMIT_ERROR" | "CLAN_SETTINGS_SUBMIT_SUCCESS" | "CLAN_SETTINGS_UPDATE" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_DEBUG_CLEAR_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_LOG_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_TOGGLE_FAST_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_INBOX_STALE" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FEED_STATE" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTENT_INVENTORY_TRACK_ITEM_IMPRESSIONS" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_FAILURE" | "FETCH_STATIC_CLAN_LIST_START" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REQUEST_ACK" | "MESSAGE_REQUEST_CLEAR_ACK" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V2" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DELIVERY_OVERRIDE" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRACK" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR" | "USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/packages/discord-types/src/general/channels/ChannelRecord.d.ts b/packages/discord-types/src/general/channels/ChannelRecord.d.ts index 53b3f379d..7f925b439 100644 --- a/packages/discord-types/src/general/channels/ChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ChannelRecord.d.ts @@ -18,6 +18,8 @@ export type ChannelRecord = GuildChannelRecord | PrivateChannelRecord | ThreadCh export type GuildChannelRecord = GuildTextualChannelRecord | GuildVocalChannelRecord | ForumChannelRecord; +export type GuildSelectableChannelRecord = Exclude; + type ChannelRecordOwnPropertyKeys = "application_id" | "appliedTags" | "availableTags" | "bitrate_" | "defaultAutoArchiveDuration" | "defaultForumLayout" | "defaultReactionEmoji" | "defaultSortOrder" | "defaultThreadRateLimitPerUser" | "flags_" | "guild_id" | "icon" | "iconEmoji" | "id" | "isMessageRequest" | "isMessageRequestTimestamp" | "isSpam" | "lastMessageId" | "lastPinTimestamp" | "member" | "memberCount" | "memberIdsPreview" | "memberListId" | "messageCount" | "name" | "nicks" | "nsfw_" | "originChannelId" | "ownerId" | "parentChannelThreadType" | "parent_id" | "permissionOverwrites_" | "position_" | "rateLimitPerUser_" | "rawRecipients" | "recipients" | "rtcRegion" | "safetyWarnings" | "template" | "themeColor" | "threadMetadata" | "topic_" | "totalMessageSent" | "type" | "userLimit_" | "version" | "videoQualityMode"; export type ChannelRecordOwnProperties = Pick; diff --git a/packages/discord-types/src/internal.d.ts b/packages/discord-types/src/internal.d.ts index a486565cf..b653cbd85 100644 --- a/packages/discord-types/src/internal.d.ts +++ b/packages/discord-types/src/internal.d.ts @@ -8,7 +8,7 @@ export type Defined = Exclude; /** @internal */ -export type GenericConstructor = new (...args: any[]) => any; +export type GenericConstructor = new (...args: any[]) => unknown; /** @internal */ export type Nullish = null | undefined; diff --git a/packages/discord-types/src/stores/DraftStore.d.ts b/packages/discord-types/src/stores/DraftStore.d.ts index cfe92914b..44f0196ee 100644 --- a/packages/discord-types/src/stores/DraftStore.d.ts +++ b/packages/discord-types/src/stores/DraftStore.d.ts @@ -21,7 +21,6 @@ export class DraftStore< Action extends FluxAction = DraftStoreAction > extends FluxPersistedStore { static displayName: "DraftStore"; - static migrations: any; // TEMP static persistKey: "DraftStore"; getDraft(channelId: string, draftType: DraftType): string; diff --git a/packages/discord-types/src/stores/GuildChannelStore.d.ts b/packages/discord-types/src/stores/GuildChannelStore.d.ts new file mode 100644 index 000000000..2658da3be --- /dev/null +++ b/packages/discord-types/src/stores/GuildChannelStore.d.ts @@ -0,0 +1,88 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { ChannelType, GuildChannelRecord, GuildSelectableChannelRecord } from "../general/channels/ChannelRecord"; +import type { GuildCategoryChannelRecord } from "../general/channels/GuildTextualChannelRecord"; +import type { GuildVocalChannelRecord } from "../general/channels/GuildVocalChannelRecord"; +import type { Nullish } from "../internal"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type GuildChannelStoreAction = ExtractAction; + +export class GuildChannelStore extends FluxStore { + static displayName: "GuildChannelStore"; + + getAllGuilds(): { [guildId: string]: GuildChannels | undefined; }; + getChannels(guildId?: string | Nullish): GuildChannels; + getDefaultChannel( + guild: string, + searchVocal?: SearchVocal, /* = false */ + permissions?: /* Permissions */ bigint | undefined /* = Permissions.VIEW_CHANNEL */ + ): GuildChannelFromSearchVocal; + getDirectoryChannelIds(guildId: string): string[]; + getFirstChannel( + guildId: string, + predicate: ( + value: GuildChannelFromSearchVocal, + index: number, + array: GuildChannelFromSearchVocal[] + ) => unknown, + searchVocal?: SearchVocal /* = false */ + ): GuildChannelFromSearchVocal | null; + getFirstChannelOfType( + guildId: string, + predicate: ( + value: GuildChannelFromType, + index: number, + array: GuildChannelFromType[] + ) => unknown, + type: Type + ): GuildChannelFromType | null; + getSelectableChannelIds(guildId: string): string[]; + getSelectableChannels(guildId: string): GuildChannel[]; + getSFWDefaultChannel( + guild: string, + searchVocal?: SearchVocal, /* = false */ + permissions?: /* Permissions */ bigint | undefined /* = Permissions.VIEW_CHANNEL */ + ): GuildChannelFromSearchVocal; + getTextChannelNameDisambiguations(guildId?: string | Nullish): { + [channelId: string]: { id: string; name: string; }; + }; + getVocalChannelIds(guildId: string): string[]; + hasCategories(guildId: string): boolean; + hasChannels(guildId: string): boolean; + hasElevatedPermissions(guildId: string): boolean; + hasSelectableChannel(guildId: string, channelId: string): boolean; +} + +export interface GuildChannels { + count: number; + [GuildChannelType.CATEGORY]: GuildChannel[]; + [GuildChannelType.SELECTABLE]: GuildChannel[]; + [GuildChannelType.VOCAL]: GuildChannel[]; + id: string; // guildId +} + +// Does not actually exist. +export const enum GuildChannelType { + CATEGORY = ChannelType.GUILD_CATEGORY, + SELECTABLE = "SELECTABLE", + VOCAL = "VOCAL", +} + +export interface GuildChannel { + channel: Channel; + comparator: number; +} + +type GuildChannelFromSearchVocal + = GuildChannel | (SearchVocal extends true + ? GuildChannel + : never); + +type GuildChannelFromType + = GuildChannels[Type] extends (infer Channel)[] ? Channel : never; diff --git a/packages/discord-types/src/stores/PermissionStore.d.ts b/packages/discord-types/src/stores/PermissionStore.d.ts new file mode 100644 index 000000000..25621851b --- /dev/null +++ b/packages/discord-types/src/stores/PermissionStore.d.ts @@ -0,0 +1,55 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { ChannelRecord } from "../general/channels/ChannelRecord"; +import type { GuildRecord } from "../general/GuildRecord"; +import type { Role } from "../general/Role"; +import type { UserRecord } from "../general/UserRecord"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type PermissionStoreAction = ExtractAction; + +export class PermissionStore extends FluxStore { + static displayName: "PermissionStore"; + + can(e?: any, t?: any, n?: any, i?: any, r?: any): boolean; // TEMP + canAccessGuildSettings(guild: GuildRecord): boolean; + canAccessMemberSafetyPage(guild: GuildRecord): boolean; + canBasicChannel(e?: any, t?: any, n?: any, i?: any, r?: any): boolean; // TEMP + canImpersonateRole(guild: GuildRecord, role: Role): boolean; + canManageUser( + permissions: /* Permissions */ bigint, + userOrUserId: UserRecord | string, + guild: GuildRecord + ): boolean; + canWithPartialContext(e?: any, t?: any): boolean; // TEMP + computeBasicPermissions(arg: Record): /* Permissions */ bigint; // TEMP + computePermissions(guildOrChannel: GuildRecord | ChannelRecord, t?: any, n?: any, i?: any): any; // TEMP + getChannelPermissions(channel: ChannelRecord): /* Permissions */ bigint; + getChannelsVersion(): number; + getGuildPermissionProps(guild: GuildRecord): { + canAccessMembersPage: boolean; + canManageBans: boolean; + canManageChannels: boolean; + canManageGuild: boolean; + canManageGuildExpressions: boolean; + canManageNicknames: boolean; + canManageRoles: boolean; + canManageWebhooks: boolean; + canViewAuditLog: boolean; + canViewAuditLogV2: boolean; + canViewGuildAnalytics: boolean; + guild: GuildRecord; + isGuildAdmin: boolean; + isOwner: boolean; + isOwnerWithRequiredMfaLevel: boolean; + }; + getGuildPermissions(guild: GuildRecord): /* Permissions */ bigint; + getGuildVersion(guildId: string): number; + getHighestRole(guild: GuildRecord): Role; + isRoleHigher(guild: GuildRecord, roleA: Role, roleB: Role): boolean; +} diff --git a/packages/discord-types/src/stores/PresenceStore.d.ts b/packages/discord-types/src/stores/PresenceStore.d.ts new file mode 100644 index 000000000..0dd55e6e5 --- /dev/null +++ b/packages/discord-types/src/stores/PresenceStore.d.ts @@ -0,0 +1,36 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type PresenceStoreAction = ExtractAction; + +// Does not extend PersistedStore. +export class PresenceStore extends FluxStore { + static displayName: "PresenceStore"; + + findActivity(e?: any, t?: any): any; // TEMP + getActivities(e?: any): any; // TEMP + getActivityMetadata(e?: any): any; // TEMP + getAllApplicationActivities(e?: any): any; // TEMP + getApplicationActivity(e?: any, t?: any): any; // TEMP + getClientStatus(e?: any): any; // TEMP + getLastOnlineTimestamp(e?: any): any; // TEMP + getPrimaryActivity(e?: any): any; // TEMP + getState(): { + activities: any; // TEMP + activityMetadata: any; // TEMP + clientStatuses: any; // TEMP + lastOnlineTimestamps: any; // TEMP + presencesForGuilds: any; // TEMP + statuses: any; // TEMP + }; // TEMP + getStatus(e?: any): any; // TEMP + getUserIds(): any; // TEMP + isMobileOnline(e?: any): any; // TEMP + setCurrentUserOnConnectionOpen(e?: any, t?: any): any; // TEMP +} diff --git a/packages/discord-types/src/stores/ReadStateStore.d.ts b/packages/discord-types/src/stores/ReadStateStore.d.ts new file mode 100644 index 000000000..d34a2d8cc --- /dev/null +++ b/packages/discord-types/src/stores/ReadStateStore.d.ts @@ -0,0 +1,41 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type ReadStateStoreAction = ExtractAction; + +export class ReadStateStore extends FluxStore { + static displayName: "ReadStateStore"; + + ackMessageId(e?: any): any; // TEMP + getAllReadStates(e?: any): any; // TEMP + getForDebugging(e?: any): any; // TEMP + getGuildChannelUnreadState(e?: any, t?: any, n?: any, i?: any, r?: any): any; // TEMP + getGuildUnreadsSentinel(e?: any): any; // TEMP + getMentionChannelIds(): any; // TEMP + getMentionCount(e?: any): any; // TEMP + getNonChannelAckId(e?: any): any; // TEMP + getNotifCenterReadState(e?: any): any; // TEMP + getOldestUnreadMessageId(e?: any): any; // TEMP + getOldestUnreadTimestamp(e?: any): any; // TEMP + getReadStatesByChannel(): any; // TEMP + getSnapshot(e?: any, t?: any): any; // TEMP + getTrackedAckMessageId(e?: any): any; // TEMP + getUnreadCount(e?: any): any; // TEMP + hasOpenedThread(e?: any): any; // TEMP + hasRecentlyVisitedAndRead(e?: any): any; // TEMP + hasTrackedUnread(e?: any): any; // TEMP + hasUnread(e?: any): any; // TEMP + hasUnreadPins(e?: any): any; // TEMP + isEstimated(e?: any): any; // TEMP + isForumPostUnread(e?: any): any; // TEMP + isNewForumThread(e?: any, t?: any, n?: any): any; // TEMP + lastMessageId(e?: any): any; // TEMP + lastMessageTimestamp(e?: any): any; // TEMP + lastPinTimestamp(e?: any): any; // TEMP +} diff --git a/packages/discord-types/src/stores/WindowStore.d.ts b/packages/discord-types/src/stores/WindowStore.d.ts index fd55b58e6..a9fa79c65 100644 --- a/packages/discord-types/src/stores/WindowStore.d.ts +++ b/packages/discord-types/src/stores/WindowStore.d.ts @@ -1,31 +1,21 @@ -/* - * discord-types - * Copyright (C) 2024 Vencord project contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import type { ExtractAction, FluxAction } from "../flux"; -import type { FluxStore } from "./abstract/FluxStore"; - -export type WindowStoreAction = ExtractAction; - -export class WindowStore extends FluxStore { - static displayName: "WindowStore"; - - getFocusedWindowId(): string | null; - getLastFocusedWindowId(): string | null; - isElementFullScreen(windowId?: string | undefined): boolean; - isFocused(windowId?: string | undefined): boolean; - isVisible(windowId?: string | undefined): boolean; - windowSize(windowId?: string | undefined): Window["windowSize"]; -} - -export interface Window { - focused: boolean; - isElementFullscreen: boolean; - visible: boolean; - windowSize: { - height: number; - width: number; - }; -} +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ExtractAction, FluxAction } from "../flux"; +import type { FluxStore } from "./abstract/FluxStore"; + +export type WindowStoreAction = ExtractAction; + +export class WindowStore extends FluxStore { + static displayName: "WindowStore"; + + getFocusedWindowId(): string | null; + getLastFocusedWindowId(): string | null; + isElementFullScreen(windowId?: string | undefined): boolean; + isFocused(windowId?: string | undefined): boolean; + isVisible(windowId?: string | undefined): boolean; + windowSize(windowId?: string | undefined): { height: number; width: number; }; +} diff --git a/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts b/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts index 1b4f0f29c..5f7a93550 100644 --- a/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts @@ -13,37 +13,40 @@ import type { FluxStore } from "./FluxStore"; // Original name: PersistedStore export abstract class FluxPersistedStore< Constructor extends GenericConstructor = GenericConstructor, - State = any, + State = unknown, Action extends FluxAction = FluxAction > extends FluxStore { constructor(dispatcher: FluxDispatcher, actionHandlers: FluxActionHandlerMap); static _clearAllPromise: Promise | Nullish; - static _writePromises: Map; // TEMP - static _writeResolvers: Map; // TEMP + static _writePromises: Map>; + static _writeResolvers: Map void, callbackId: number]>; static allPersistKeys: Set; - static clearAll(e: any): Promise; // TEMP - static clearPersistQueue(e: any): void; // TEMP + static clearAll(options: FluxPersistedStoreClearOptions): Promise; + static clearPersistQueue(options: FluxPersistedStoreClearOptions): void; static disableWrite: boolean; static disableWrites: boolean; - static getAllStates(): Promise; // TEMP - static initializeAll(stateMap: Record): void; // TEMP - static migrateAndReadStoreState(e: any, t: any): { // TEMP - requiresPersist: boolean; - state: any /* | undefined */; // TEMP - }; - static migrations: ((...args: any[]) => any)[] | undefined; - static persistKey: string; // not actually defined on PersistedStore's constructor, but all subclasses are required to have it - static shouldClear(e: any, t: any): boolean; // TEMP + static getAllStates(): Promise<{ [persistKey: string]: unknown; }>; + static initializeAll(stateMap: { [persistKey: string]: unknown; }): void; + /** + * If {@link clearAll} has been called for the specified persist key, state in the returned object will be undefined. + */ + static migrateAndReadStoreState( + persistKey: string, + migrations?: FluxPersistedStoreMigrations<[...OldStates, NewestState]> | Nullish + ): { requiresPersist: boolean; state: NewestState; } | { requiresPersist: false; state: undefined; }; + static migrations: ((oldState: any) => unknown)[] | undefined; + static persistKey: string; // abstract + static shouldClear(options: FluxPersistedStoreClearOptions, persistKey: string): boolean; static throttleDelay: number; static userAgnosticPersistKeys: Set; asyncPersist(): Promise; clear(): void; getClass(): Constructor; - abstract getState(): State; // TEMP - abstract initialize(state: State): void; // TEMP - initializeFromState(state: State): void; // TEMP + abstract getState(): State; + abstract initialize(state: State): void; + initializeFromState(state: State): void; persist(): void; _version: number; @@ -54,3 +57,23 @@ export abstract class FluxPersistedStore< flush: () => () => void; }; } + +export interface FluxPersistedStoreClearOptions { + /** Array of persist keys. */ + omit?: string[] | Nullish; + type: "all" | "user-data-only"; +} + +type MigrationsFromTuple + = States extends [infer OldState, infer NewState, ...infer NewerStates] + ? [(oldState: OldState) => NewState, ...MigrationsFromTuple<[NewState, ...NewerStates]>] + : []; + +export type FluxPersistedStoreMigrations + = States extends [infer OldState, ...infer NewerStates] + ? NewerStates extends [] + ? [(oldState: OldState) => unknown] + : MigrationsFromTuple + : States extends (infer T)[] + ? ((oldState: T) => T)[] + : never; diff --git a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts index 6c3063d08..ca00b7944 100644 --- a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts @@ -5,7 +5,7 @@ */ import type { FluxActionHandlerMap } from "../../flux/fluxActionHandlers"; -import type { ExcludeAction, FluxAction } from "../../flux/fluxActions"; +import type { ExcludeAction, ExtractAction, FluxAction } from "../../flux/fluxActions"; import type { GenericConstructor } from "../../internal"; import type { FluxStore } from "./FluxStore"; @@ -14,19 +14,21 @@ export interface FluxSnapshot { version: number; } -export type FluxSnapshotStoreAction = ExcludeAction; +type CacheActionType = "CLEAR_CACHES" | "WRITE_CACHES"; + +export type FluxSnapshotStoreAction = ExcludeAction; // Original name: SnapshotStore export abstract class FluxSnapshotStore< Constructor extends GenericConstructor = GenericConstructor, - SnapshotData = any, + SnapshotData = unknown, Action extends FluxSnapshotStoreAction = FluxSnapshotStoreAction -> extends FluxStore> { +> extends FluxStore> { constructor(actionHandlers: FluxActionHandlerMap); static allStores: FluxSnapshotStore[]; static clearAll(): void; - static displayName: string; // not actually defined on SnapshotStore's constructor, but all subclasses are required to have it + static displayName: string; // abstract clear(): void; getClass(): Constructor; diff --git a/packages/discord-types/src/stores/abstract/FluxStore.d.ts b/packages/discord-types/src/stores/abstract/FluxStore.d.ts index 1bdc79859..685ed31a0 100644 --- a/packages/discord-types/src/stores/abstract/FluxStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxStore.d.ts @@ -21,7 +21,7 @@ export abstract class FluxStore { static displayName: string | undefined; // undefined on FluxStore's constructor static getAll(): FluxStore[]; static initialize(): void; - static initialized: Promise; + static initialized: Promise; emitChange(): void; getDispatchToken(): string; diff --git a/packages/discord-types/src/stores/index.d.ts b/packages/discord-types/src/stores/index.d.ts index 1eae0b435..7c0b5e50b 100644 --- a/packages/discord-types/src/stores/index.d.ts +++ b/packages/discord-types/src/stores/index.d.ts @@ -9,9 +9,13 @@ export * from "./ApplicationStore"; export * from "./ChannelStore"; export * from "./DraftStore"; export * from "./EmojiStore"; +export * from "./GuildChannelStore"; export * from "./GuildMemberStore"; export * from "./GuildStore"; export * from "./MessageStore"; +export * from "./PermissionStore"; +export * from "./PresenceStore"; +export * from "./ReadStateStore"; export * from "./RelationshipStore"; export * from "./SelectedChannelStore"; export * from "./SelectedGuildStore"; From 78fd37a4c682ccc54085e5eb91f51b03a6b952ef Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sat, 1 Jun 2024 19:13:27 +0200 Subject: [PATCH 017/126] fix(css): brand-experiment is now brand-500 --- src/api/Notifications/NotificationComponent.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/Notifications/NotificationComponent.tsx b/src/api/Notifications/NotificationComponent.tsx index caa4b64ef..d07143c45 100644 --- a/src/api/Notifications/NotificationComponent.tsx +++ b/src/api/Notifications/NotificationComponent.tsx @@ -113,7 +113,7 @@ export default ErrorBoundary.wrap(function NotificationComponent({ {timeout !== 0 && !permanent && (
)} From d8524b087c850443cee954d8582f18de98a6806e Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Sat, 1 Jun 2024 18:39:01 -0300 Subject: [PATCH 018/126] Add shortcut for lazy loading chunks --- scripts/generateReport.ts | 13 +- src/api/Settings.ts | 2 +- src/debug/loadLazyChunks.ts | 167 ++++++++++++++++++++++++++ src/debug/runReporter.ts | 163 ++----------------------- src/plugins/consoleShortcuts/index.ts | 2 + src/plugins/index.ts | 1 - src/plugins/partyMode/index.ts | 3 +- src/utils/Logger.ts | 2 +- 8 files changed, 191 insertions(+), 162 deletions(-) create mode 100644 src/debug/loadLazyChunks.ts diff --git a/scripts/generateReport.ts b/scripts/generateReport.ts index 0fde48637..cf4210779 100644 --- a/scripts/generateReport.ts +++ b/scripts/generateReport.ts @@ -241,17 +241,26 @@ page.on("console", async e => { error: await maybeGetError(e.args()[3]) ?? "Unknown error" }); + break; + case "LazyChunkLoader:": + console.error(await getText()); + + switch (message) { + case "A fatal error occurred:": + process.exit(1); + } + break; case "Reporter:": console.error(await getText()); switch (message) { + case "A fatal error occurred:": + process.exit(1); case "Webpack Find Fail:": process.exitCode = 1; report.badWebpackFinds.push(otherMessage); break; - case "A fatal error occurred:": - process.exit(1); case "Finished test": await browser.close(); await printReport(); diff --git a/src/api/Settings.ts b/src/api/Settings.ts index b94e6a3fd..70ba0bd4a 100644 --- a/src/api/Settings.ts +++ b/src/api/Settings.ts @@ -129,7 +129,7 @@ export const SettingsStore = new SettingsStoreClass(settings, { if (path === "plugins" && key in plugins) return target[key] = { - enabled: plugins[key].required ?? plugins[key].enabledByDefault ?? false + enabled: IS_REPORTER ?? plugins[key].required ?? plugins[key].enabledByDefault ?? false }; // Since the property is not set, check if this is a plugin's setting and if so, try to resolve diff --git a/src/debug/loadLazyChunks.ts b/src/debug/loadLazyChunks.ts new file mode 100644 index 000000000..d8f84335c --- /dev/null +++ b/src/debug/loadLazyChunks.ts @@ -0,0 +1,167 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2024 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { Logger } from "@utils/Logger"; +import { canonicalizeMatch } from "@utils/patches"; +import * as Webpack from "@webpack"; +import { wreq } from "@webpack"; + +const LazyChunkLoaderLogger = new Logger("LazyChunkLoader"); + +export async function loadLazyChunks() { + try { + LazyChunkLoaderLogger.log("Loading all chunks..."); + + const validChunks = new Set(); + const invalidChunks = new Set(); + const deferredRequires = new Set(); + + let chunksSearchingResolve: (value: void | PromiseLike) => void; + const chunksSearchingDone = new Promise(r => chunksSearchingResolve = r); + + // True if resolved, false otherwise + const chunksSearchPromises = [] as Array<() => boolean>; + + const LazyChunkRegex = canonicalizeMatch(/(?:(?:Promise\.all\(\[)?(\i\.e\("[^)]+?"\)[^\]]*?)(?:\]\))?)\.then\(\i\.bind\(\i,"([^)]+?)"\)\)/g); + + async function searchAndLoadLazyChunks(factoryCode: string) { + const lazyChunks = factoryCode.matchAll(LazyChunkRegex); + const validChunkGroups = new Set<[chunkIds: string[], entryPoint: string]>(); + + // Workaround for a chunk that depends on the ChannelMessage component but may be be force loaded before + // the chunk containing the component + const shouldForceDefer = factoryCode.includes(".Messages.GUILD_FEED_UNFEATURE_BUTTON_TEXT"); + + await Promise.all(Array.from(lazyChunks).map(async ([, rawChunkIds, entryPoint]) => { + const chunkIds = rawChunkIds ? Array.from(rawChunkIds.matchAll(Webpack.ChunkIdsRegex)).map(m => m[1]) : []; + + if (chunkIds.length === 0) { + return; + } + + let invalidChunkGroup = false; + + for (const id of chunkIds) { + if (wreq.u(id) == null || wreq.u(id) === "undefined.js") continue; + + const isWasm = await fetch(wreq.p + wreq.u(id)) + .then(r => r.text()) + .then(t => (IS_WEB && t.includes(".module.wasm")) || !t.includes("(this.webpackChunkdiscord_app=this.webpackChunkdiscord_app||[]).push")); + + if (isWasm && IS_WEB) { + invalidChunks.add(id); + invalidChunkGroup = true; + continue; + } + + validChunks.add(id); + } + + if (!invalidChunkGroup) { + validChunkGroups.add([chunkIds, entryPoint]); + } + })); + + // Loads all found valid chunk groups + await Promise.all( + Array.from(validChunkGroups) + .map(([chunkIds]) => + Promise.all(chunkIds.map(id => wreq.e(id as any).catch(() => { }))) + ) + ); + + // Requires the entry points for all valid chunk groups + for (const [, entryPoint] of validChunkGroups) { + try { + if (shouldForceDefer) { + deferredRequires.add(entryPoint); + continue; + } + + if (wreq.m[entryPoint]) wreq(entryPoint as any); + } catch (err) { + console.error(err); + } + } + + // setImmediate to only check if all chunks were loaded after this function resolves + // We check if all chunks were loaded every time a factory is loaded + // If we are still looking for chunks in the other factories, the array will have that factory's chunk search promise not resolved + // But, if all chunk search promises are resolved, this means we found every lazy chunk loaded by Discord code and manually loaded them + setTimeout(() => { + let allResolved = true; + + for (let i = 0; i < chunksSearchPromises.length; i++) { + const isResolved = chunksSearchPromises[i](); + + if (isResolved) { + // Remove finished promises to avoid having to iterate through a huge array everytime + chunksSearchPromises.splice(i--, 1); + } else { + allResolved = false; + } + } + + if (allResolved) chunksSearchingResolve(); + }, 0); + } + + Webpack.factoryListeners.add(factory => { + let isResolved = false; + searchAndLoadLazyChunks(factory.toString()).then(() => isResolved = true); + + chunksSearchPromises.push(() => isResolved); + }); + + for (const factoryId in wreq.m) { + let isResolved = false; + searchAndLoadLazyChunks(wreq.m[factoryId].toString()).then(() => isResolved = true); + + chunksSearchPromises.push(() => isResolved); + } + + await chunksSearchingDone; + + // Require deferred entry points + for (const deferredRequire of deferredRequires) { + wreq!(deferredRequire as any); + } + + // All chunks Discord has mapped to asset files, even if they are not used anymore + const allChunks = [] as string[]; + + // Matches "id" or id: + for (const currentMatch of wreq!.u.toString().matchAll(/(?:"(\d+?)")|(?:(\d+?):)/g)) { + const id = currentMatch[1] ?? currentMatch[2]; + if (id == null) continue; + + allChunks.push(id); + } + + if (allChunks.length === 0) throw new Error("Failed to get all chunks"); + + // Chunks that are not loaded (not used) by Discord code anymore + const chunksLeft = allChunks.filter(id => { + return !(validChunks.has(id) || invalidChunks.has(id)); + }); + + await Promise.all(chunksLeft.map(async id => { + const isWasm = await fetch(wreq.p + wreq.u(id)) + .then(r => r.text()) + .then(t => (IS_WEB && t.includes(".module.wasm")) || !t.includes("(this.webpackChunkdiscord_app=this.webpackChunkdiscord_app||[]).push")); + + // Loads and requires a chunk + if (!isWasm) { + await wreq.e(id as any); + if (wreq.m[id]) wreq(id as any); + } + })); + + LazyChunkLoaderLogger.log("Finished loading all chunks!"); + } catch (e) { + LazyChunkLoaderLogger.log("A fatal error occurred:", e); + } +} diff --git a/src/debug/runReporter.ts b/src/debug/runReporter.ts index 61c9f162b..6c7a2a03f 100644 --- a/src/debug/runReporter.ts +++ b/src/debug/runReporter.ts @@ -5,171 +5,22 @@ */ import { Logger } from "@utils/Logger"; -import { canonicalizeMatch } from "@utils/patches"; import * as Webpack from "@webpack"; -import { wreq } from "@webpack"; import { patches } from "plugins"; +import { loadLazyChunks } from "./loadLazyChunks"; + const ReporterLogger = new Logger("Reporter"); async function runReporter() { - ReporterLogger.log("Starting test..."); - try { - const validChunks = new Set(); - const invalidChunks = new Set(); - const deferredRequires = new Set(); + ReporterLogger.log("Starting test..."); - let chunksSearchingResolve: (value: void | PromiseLike) => void; - const chunksSearchingDone = new Promise(r => chunksSearchingResolve = r); + let loadLazyChunksResolve: (value: void | PromiseLike) => void; + const loadLazyChunksDone = new Promise(r => loadLazyChunksResolve = r); - // True if resolved, false otherwise - const chunksSearchPromises = [] as Array<() => boolean>; - - const LazyChunkRegex = canonicalizeMatch(/(?:(?:Promise\.all\(\[)?(\i\.e\("[^)]+?"\)[^\]]*?)(?:\]\))?)\.then\(\i\.bind\(\i,"([^)]+?)"\)\)/g); - - async function searchAndLoadLazyChunks(factoryCode: string) { - const lazyChunks = factoryCode.matchAll(LazyChunkRegex); - const validChunkGroups = new Set<[chunkIds: string[], entryPoint: string]>(); - - // Workaround for a chunk that depends on the ChannelMessage component but may be be force loaded before - // the chunk containing the component - const shouldForceDefer = factoryCode.includes(".Messages.GUILD_FEED_UNFEATURE_BUTTON_TEXT"); - - await Promise.all(Array.from(lazyChunks).map(async ([, rawChunkIds, entryPoint]) => { - const chunkIds = rawChunkIds ? Array.from(rawChunkIds.matchAll(Webpack.ChunkIdsRegex)).map(m => m[1]) : []; - - if (chunkIds.length === 0) { - return; - } - - let invalidChunkGroup = false; - - for (const id of chunkIds) { - if (wreq.u(id) == null || wreq.u(id) === "undefined.js") continue; - - const isWasm = await fetch(wreq.p + wreq.u(id)) - .then(r => r.text()) - .then(t => (IS_WEB && t.includes(".module.wasm")) || !t.includes("(this.webpackChunkdiscord_app=this.webpackChunkdiscord_app||[]).push")); - - if (isWasm && IS_WEB) { - invalidChunks.add(id); - invalidChunkGroup = true; - continue; - } - - validChunks.add(id); - } - - if (!invalidChunkGroup) { - validChunkGroups.add([chunkIds, entryPoint]); - } - })); - - // Loads all found valid chunk groups - await Promise.all( - Array.from(validChunkGroups) - .map(([chunkIds]) => - Promise.all(chunkIds.map(id => wreq.e(id as any).catch(() => { }))) - ) - ); - - // Requires the entry points for all valid chunk groups - for (const [, entryPoint] of validChunkGroups) { - try { - if (shouldForceDefer) { - deferredRequires.add(entryPoint); - continue; - } - - if (wreq.m[entryPoint]) wreq(entryPoint as any); - } catch (err) { - console.error(err); - } - } - - // setImmediate to only check if all chunks were loaded after this function resolves - // We check if all chunks were loaded every time a factory is loaded - // If we are still looking for chunks in the other factories, the array will have that factory's chunk search promise not resolved - // But, if all chunk search promises are resolved, this means we found every lazy chunk loaded by Discord code and manually loaded them - setTimeout(() => { - let allResolved = true; - - for (let i = 0; i < chunksSearchPromises.length; i++) { - const isResolved = chunksSearchPromises[i](); - - if (isResolved) { - // Remove finished promises to avoid having to iterate through a huge array everytime - chunksSearchPromises.splice(i--, 1); - } else { - allResolved = false; - } - } - - if (allResolved) chunksSearchingResolve(); - }, 0); - } - - Webpack.beforeInitListeners.add(async () => { - ReporterLogger.log("Loading all chunks..."); - - Webpack.factoryListeners.add(factory => { - let isResolved = false; - searchAndLoadLazyChunks(factory.toString()).then(() => isResolved = true); - - chunksSearchPromises.push(() => isResolved); - }); - - // setImmediate to only search the initial factories after Discord initialized the app - // our beforeInitListeners are called before Discord initializes the app - setTimeout(() => { - for (const factoryId in wreq.m) { - let isResolved = false; - searchAndLoadLazyChunks(wreq.m[factoryId].toString()).then(() => isResolved = true); - - chunksSearchPromises.push(() => isResolved); - } - }, 0); - }); - - await chunksSearchingDone; - - // Require deferred entry points - for (const deferredRequire of deferredRequires) { - wreq!(deferredRequire as any); - } - - // All chunks Discord has mapped to asset files, even if they are not used anymore - const allChunks = [] as string[]; - - // Matches "id" or id: - for (const currentMatch of wreq!.u.toString().matchAll(/(?:"(\d+?)")|(?:(\d+?):)/g)) { - const id = currentMatch[1] ?? currentMatch[2]; - if (id == null) continue; - - allChunks.push(id); - } - - if (allChunks.length === 0) throw new Error("Failed to get all chunks"); - - // Chunks that are not loaded (not used) by Discord code anymore - const chunksLeft = allChunks.filter(id => { - return !(validChunks.has(id) || invalidChunks.has(id)); - }); - - await Promise.all(chunksLeft.map(async id => { - const isWasm = await fetch(wreq.p + wreq.u(id)) - .then(r => r.text()) - .then(t => (IS_WEB && t.includes(".module.wasm")) || !t.includes("(this.webpackChunkdiscord_app=this.webpackChunkdiscord_app||[]).push")); - - // Loads and requires a chunk - if (!isWasm) { - await wreq.e(id as any); - if (wreq.m[id]) wreq(id as any); - } - })); - - ReporterLogger.log("Finished loading all chunks!"); + Webpack.beforeInitListeners.add(() => loadLazyChunks().then((loadLazyChunksResolve))); + await loadLazyChunksDone; for (const patch of patches) { if (!patch.all) { diff --git a/src/plugins/consoleShortcuts/index.ts b/src/plugins/consoleShortcuts/index.ts index ee86b5fcf..0a1323e75 100644 --- a/src/plugins/consoleShortcuts/index.ts +++ b/src/plugins/consoleShortcuts/index.ts @@ -25,6 +25,7 @@ import definePlugin, { PluginNative, StartAt } from "@utils/types"; import * as Webpack from "@webpack"; import { extract, filters, findAll, findModuleId, search } from "@webpack"; import * as Common from "@webpack/common"; +import { loadLazyChunks } from "debug/loadLazyChunks"; import type { ComponentType } from "react"; const DESKTOP_ONLY = (f: string) => () => { @@ -82,6 +83,7 @@ function makeShortcuts() { wpsearch: search, wpex: extract, wpexs: (code: string) => extract(findModuleId(code)!), + loadLazyChunks: IS_DEV ? loadLazyChunks : () => { throw new Error("loadLazyChunks is dev only."); }, find, findAll: findAll, findByProps, diff --git a/src/plugins/index.ts b/src/plugins/index.ts index 53ab7983a..32bfe7e97 100644 --- a/src/plugins/index.ts +++ b/src/plugins/index.ts @@ -44,7 +44,6 @@ const settings = Settings.plugins; export function isPluginEnabled(p: string) { return ( - IS_REPORTER || Plugins[p]?.required || Plugins[p]?.isDependency || settings[p]?.enabled diff --git a/src/plugins/partyMode/index.ts b/src/plugins/partyMode/index.ts index 56c19c02c..c40f2e3c7 100644 --- a/src/plugins/partyMode/index.ts +++ b/src/plugins/partyMode/index.ts @@ -18,7 +18,7 @@ import { definePluginSettings, migratePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; -import definePlugin, { OptionType } from "@utils/types"; +import definePlugin, { OptionType, ReporterTestable } from "@utils/types"; import { FluxDispatcher } from "@webpack/common"; const enum Intensity { @@ -46,6 +46,7 @@ export default definePlugin({ name: "PartyMode", description: "Allows you to use party mode cause the party never ends ✨", authors: [Devs.UwUDev], + reporterTestable: ReporterTestable.None, settings, start() { diff --git a/src/utils/Logger.ts b/src/utils/Logger.ts index 5296184d4..22a381360 100644 --- a/src/utils/Logger.ts +++ b/src/utils/Logger.ts @@ -32,7 +32,7 @@ export class Logger { constructor(public name: string, public color: string = "white") { } private _log(level: "log" | "error" | "warn" | "info" | "debug", levelColor: string, args: any[], customFmt = "") { - if (IS_REPORTER) { + if (IS_REPORTER && IS_WEB) { console[level]("[Vencord]", this.name + ":", ...args); return; } From 66b0e724bd4d611b4243f840bab5525f58d6e98b Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:07:54 -0400 Subject: [PATCH 019/126] Progress --- .../workflows/test-packages-discord-types.yml | 38 + .github/workflows/test.yml | 6 +- package.json | 29 +- packages/discord-types/package.json | 6 + .../src/general/Permissions.d.ts | 77 ++ packages/discord-types/src/general/Role.d.ts | 56 - .../src/general/channels/ChannelRecord.d.ts | 17 +- .../src/stores/PermissionStore.d.ts | 36 +- .../src/stores/PresenceStore.d.ts | 49 +- .../src/stores/UserProfileStore.d.ts | 12 +- patches/eslint-plugin-path-alias@1.0.0.patch | 13 - patches/eslint-plugin-path-alias@1.1.0.patch | 22 + ...slint@8.46.0.patch => eslint@8.57.0.patch} | 10 +- pnpm-lock.yaml | 1175 +++++++++++++---- 14 files changed, 1183 insertions(+), 363 deletions(-) create mode 100644 .github/workflows/test-packages-discord-types.yml create mode 100644 packages/discord-types/src/general/Permissions.d.ts delete mode 100644 patches/eslint-plugin-path-alias@1.0.0.patch create mode 100644 patches/eslint-plugin-path-alias@1.1.0.patch rename patches/{eslint@8.46.0.patch => eslint@8.57.0.patch} (94%) diff --git a/.github/workflows/test-packages-discord-types.yml b/.github/workflows/test-packages-discord-types.yml new file mode 100644 index 000000000..16df58483 --- /dev/null +++ b/.github/workflows/test-packages-discord-types.yml @@ -0,0 +1,38 @@ +name: Test packages/discord-types +on: + pull_request: + paths: + - packages/discord-types/** + push: + paths: + - packages/discord-types/** +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: packages/discord-types + sparse-checkout-cone-mode: false + + - uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: ^20.11.0 + cache: pnpm + + - name: Move packages/discord-types to root + run: | + mv packages/discord-types . + rm -rf packages + + - name: Install dependencies + run: pnpm install --no-frozen-lockfile + + - name: Check for TypeScript errors and lint + run: pnpm test diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7a2b320bf..68eaca4c8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,17 +1,21 @@ name: test on: push: + paths-ignore: + - packages/discord-types pull_request: branches: - main - dev + paths-ignore: + - packages/discord-types jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 # Install pnpm using packageManager key in package.json + - uses: pnpm/action-setup@v4 # Install pnpm using packageManager key in package.json - name: Use Node.js 20 uses: actions/setup-node@v4 diff --git a/package.json b/package.json index 01fe3552b..5bf9c05c7 100644 --- a/package.json +++ b/package.json @@ -50,40 +50,41 @@ "devDependencies": { "@types/chrome": "^0.0.246", "@types/diff": "^5.0.3", - "@types/lodash": "^4.14.194", + "@types/lodash": "~4.17.4", "@types/node": "^18.16.3", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.1", + "@types/react": "~18.2.21", + "@types/react-dom": "~18.2.7", "@types/yazl": "^2.4.2", - "@typescript-eslint/eslint-plugin": "^5.59.1", - "@typescript-eslint/parser": "^5.59.1", + "@typescript-eslint/eslint-plugin": "^7.11.0", + "@typescript-eslint/parser": "^7.11.0", + "@vencord/discord-types": "workspace:^", "diff": "^5.1.0", "discord-types": "^1.3.26", "esbuild": "^0.15.18", - "eslint": "^8.46.0", + "eslint": "^8.57.0", "eslint-import-resolver-alias": "^1.1.2", - "eslint-plugin-path-alias": "^1.0.0", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-unused-imports": "^2.0.0", + "eslint-plugin-path-alias": "^1.1.0", + "eslint-plugin-simple-import-sort": "^12.1.0", + "eslint-plugin-unused-imports": "^3.2.0", "highlight.js": "10.6.0", "html-minifier-terser": "^7.2.0", - "moment": "^2.29.4", + "moment": "2.22.2", "puppeteer-core": "^19.11.1", "standalone-electron-types": "^1.0.0", "stylelint": "^15.6.0", "stylelint-config-standard": "^33.0.0", "ts-patch": "^3.1.2", "tsx": "^3.12.7", - "type-fest": "^3.9.0", + "type-fest": "^4.18.3", "typescript": "^5.4.5", "typescript-transform-paths": "^3.4.7", "zip-local": "^0.3.5" }, - "packageManager": "pnpm@9.1.0", + "packageManager": "pnpm@9.1.4", "pnpm": { "patchedDependencies": { - "eslint-plugin-path-alias@1.0.0": "patches/eslint-plugin-path-alias@1.0.0.patch", - "eslint@8.46.0": "patches/eslint@8.46.0.patch" + "eslint@8.57.0": "patches/eslint@8.57.0.patch", + "eslint-plugin-path-alias@1.1.0": "patches/eslint-plugin-path-alias@1.1.0.patch" }, "peerDependencyRules": { "ignoreMissing": [ diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index ec5d9ade6..985b6a492 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -10,6 +10,12 @@ "directory": "packages/discord-types" }, "files": ["src"], + "scripts": { + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "test": "tsc --noEmit && eslint .", + "test-ts": "tsc --noEmit" + }, "sideEffects": false, "types": "./src/index.d.ts", "dependencies": { diff --git a/packages/discord-types/src/general/Permissions.d.ts b/packages/discord-types/src/general/Permissions.d.ts new file mode 100644 index 000000000..2ea586076 --- /dev/null +++ b/packages/discord-types/src/general/Permissions.d.ts @@ -0,0 +1,77 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +/* +// bigint enums are not yet possible: https://github.com/microsoft/TypeScript/issues/37783 +export const enum 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, + ADD_REACTIONS = 1n << 6n, + VIEW_AUDIT_LOG = 1n << 7n, + PRIORITY_SPEAKER = 1n << 8n, + STREAM = 1n << 9n, + VIEW_CHANNEL = 1n << 10n, + 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, + VIEW_GUILD_ANALYTICS = 1n << 19n, + CONNECT = 1n << 20n, + SPEAK = 1n << 21n, + MUTE_MEMBERS = 1n << 22n, + DEAFEN_MEMBERS = 1n << 23n, + MOVE_MEMBERS = 1n << 24n, + USE_VAD = 1n << 25n, + CHANGE_NICKNAME = 1n << 26n, + MANAGE_NICKNAMES = 1n << 27n, + MANAGE_ROLES = 1n << 28n, + MANAGE_WEBHOOKS = 1n << 29n, + MANAGE_GUILD_EXPRESSIONS = 1n << 30n, + USE_APPLICATION_COMMANDS = 1n << 31n, + REQUEST_TO_SPEAK = 1n << 32n, + MANAGE_EVENTS = 1n << 33n, + 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, + USE_EMBEDDED_ACTIVITIES = 1n << 39n, + MODERATE_MEMBERS = 1n << 40n, + VIEW_CREATOR_MONETIZATION_ANALYTICS = 1n << 41n, + USE_SOUNDBOARD = 1n << 42n, + CREATE_GUILD_EXPRESSIONS = 1n << 43n, + CREATE_EVENTS = 1n << 44n, + USE_EXTERNAL_SOUNDS = 1n << 45n, + SEND_VOICE_MESSAGES = 1n << 46n, + USE_CLYDE_AI = 1n << 47n, + SET_VOICE_CHANNEL_STATUS = 1n << 48n, + SEND_POLLS = 1n << 49n, +} +*/ + +export interface PermissionOverwriteMap { + [roleIdOrUserId: string]: PermissionOverwrite; +} + +export interface PermissionOverwrite { + allow: /* Permissions */ bigint; + deny: /* Permissions */ bigint; + id: string; + type: PermissionOverwriteType; +} + +export const enum PermissionOverwriteType { + ROLE = 0, + MEMBER = 1, +} diff --git a/packages/discord-types/src/general/Role.d.ts b/packages/discord-types/src/general/Role.d.ts index 690883871..af9950ad4 100644 --- a/packages/discord-types/src/general/Role.d.ts +++ b/packages/discord-types/src/general/Role.d.ts @@ -31,59 +31,3 @@ export interface Role { export const enum RoleFlags { IN_PROMPT = 1, } - -/* -// bigint enums are not yet possible: https://github.com/microsoft/TypeScript/issues/37783 -export const enum 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, - ADD_REACTIONS = 1n << 6n, - VIEW_AUDIT_LOG = 1n << 7n, - PRIORITY_SPEAKER = 1n << 8n, - STREAM = 1n << 9n, - VIEW_CHANNEL = 1n << 10n, - 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, - VIEW_GUILD_ANALYTICS = 1n << 19n, - CONNECT = 1n << 20n, - SPEAK = 1n << 21n, - MUTE_MEMBERS = 1n << 22n, - DEAFEN_MEMBERS = 1n << 23n, - MOVE_MEMBERS = 1n << 24n, - USE_VAD = 1n << 25n, - CHANGE_NICKNAME = 1n << 26n, - MANAGE_NICKNAMES = 1n << 27n, - MANAGE_ROLES = 1n << 28n, - MANAGE_WEBHOOKS = 1n << 29n, - MANAGE_GUILD_EXPRESSIONS = 1n << 30n, - USE_APPLICATION_COMMANDS = 1n << 31n, - REQUEST_TO_SPEAK = 1n << 32n, - MANAGE_EVENTS = 1n << 33n, - 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, - USE_EMBEDDED_ACTIVITIES = 1n << 39n, - MODERATE_MEMBERS = 1n << 40n, - VIEW_CREATOR_MONETIZATION_ANALYTICS = 1n << 41n, - USE_SOUNDBOARD = 1n << 42n, - CREATE_GUILD_EXPRESSIONS = 1n << 43n, - CREATE_EVENTS = 1n << 44n, - USE_EXTERNAL_SOUNDS = 1n << 45n, - SEND_VOICE_MESSAGES = 1n << 46n, - USE_CLYDE_AI = 1n << 47n, - SET_VOICE_CHANNEL_STATUS = 1n << 48n, - SEND_POLLS = 1n << 49n, -} -*/ diff --git a/packages/discord-types/src/general/channels/ChannelRecord.d.ts b/packages/discord-types/src/general/channels/ChannelRecord.d.ts index 7f925b439..f6c8fffb4 100644 --- a/packages/discord-types/src/general/channels/ChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ChannelRecord.d.ts @@ -7,6 +7,7 @@ import type { SnakeCasedProperties } from "type-fest"; import type { Nullish } from "../../internal"; +import type { PermissionOverwriteMap } from "../Permissions"; import type { AvatarDecorationData, UserClanData, UserFlags } from "../UserRecord"; import type { ForumChannelRecord, GuildForumChannelRecord, GuildMediaChannelRecord } from "./ForumChannelRecord"; import type { GuildCategoryChannelRecord, GuildDirectoryChannelRecord, GuildTextualChannelRecord } from "./GuildTextualChannelRecord"; @@ -188,22 +189,6 @@ export const enum ThreadMemberFlags { NO_MESSAGES = 1 << 3, } -interface PermissionOverwriteMap { - [roleIdOrUserId: string]: PermissionOverwrite; -} - -export interface PermissionOverwrite { - allow: /* Permissions */ bigint; - deny: /* Permissions */ bigint; - id: string; - type: PermissionOverwriteType; -} - -export const enum PermissionOverwriteType { - ROLE = 0, - MEMBER = 1, -} - export interface ChannelRecipient { avatar: string | null; avatar_decoration_data: SnakeCasedProperties | null; diff --git a/packages/discord-types/src/stores/PermissionStore.d.ts b/packages/discord-types/src/stores/PermissionStore.d.ts index 25621851b..188eed93f 100644 --- a/packages/discord-types/src/stores/PermissionStore.d.ts +++ b/packages/discord-types/src/stores/PermissionStore.d.ts @@ -7,8 +7,10 @@ import type { ExtractAction, FluxAction } from "../flux/fluxActions"; import type { ChannelRecord } from "../general/channels/ChannelRecord"; import type { GuildRecord } from "../general/GuildRecord"; +import type { PermissionOverwriteMap } from "../general/Permissions"; import type { Role } from "../general/Role"; import type { UserRecord } from "../general/UserRecord"; +import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; export type PermissionStoreAction = ExtractAction; @@ -16,19 +18,39 @@ export type PermissionStoreAction = ExtractAction extends FluxStore { static displayName: "PermissionStore"; - can(e?: any, t?: any, n?: any, i?: any, r?: any): boolean; // TEMP + can( + permissions: /* Permissions */ bigint, + context?: GuildRecord | ChannelRecord | Nullish, + overwrites?: PermissionOverwriteMap | Nullish, + roles?: { [roleId: string]: Role; } | Nullish, + excludeGuildPermissions?: boolean | undefined /* = false */ + ): boolean; canAccessGuildSettings(guild: GuildRecord): boolean; canAccessMemberSafetyPage(guild: GuildRecord): boolean; - canBasicChannel(e?: any, t?: any, n?: any, i?: any, r?: any): boolean; // TEMP + canBasicChannel( + permissions: Context extends BasicPermissionsObject ? /* Permissions */ bigint : Parameters[0], + context: Context, + overwrites?: PermissionOverwriteMap | Nullish, + roles?: { [roleId: string]: Role; } | Nullish, + excludeGuildPermissions?: boolean | undefined /* = false */ + ): boolean; canImpersonateRole(guild: GuildRecord, role: Role): boolean; canManageUser( permissions: /* Permissions */ bigint, userOrUserId: UserRecord | string, guild: GuildRecord ): boolean; - canWithPartialContext(e?: any, t?: any): boolean; // TEMP - computeBasicPermissions(arg: Record): /* Permissions */ bigint; // TEMP - computePermissions(guildOrChannel: GuildRecord | ChannelRecord, t?: any, n?: any, i?: any): any; // TEMP + canWithPartialContext( + context: { guildId: string; } | { channelId: string; }, + permissions: /* Permissions */ bigint + ): boolean; + computeBasicPermissions(context: BasicPermissionsObject): /* Permissions */ bigint; + computePermissions( + context?: GuildRecord | ChannelRecord | Nullish, + overwrites?: PermissionOverwriteMap | Nullish, + roles?: { [roleId: string]: Role; } | Nullish, + excludeGuildPermissions?: boolean | undefined /* = false */ + ): /* Permissions */ bigint; getChannelPermissions(channel: ChannelRecord): /* Permissions */ bigint; getChannelsVersion(): number; getGuildPermissionProps(guild: GuildRecord): { @@ -53,3 +75,7 @@ export class PermissionStore getHighestRole(guild: GuildRecord): Role; isRoleHigher(guild: GuildRecord, roleA: Role, roleB: Role): boolean; } + +interface BasicPermissionsObject { + basicPermissions: bigint; +} diff --git a/packages/discord-types/src/stores/PresenceStore.d.ts b/packages/discord-types/src/stores/PresenceStore.d.ts index 0dd55e6e5..b352d9b97 100644 --- a/packages/discord-types/src/stores/PresenceStore.d.ts +++ b/packages/discord-types/src/stores/PresenceStore.d.ts @@ -18,8 +18,8 @@ export class PresenceStore exte getActivityMetadata(e?: any): any; // TEMP getAllApplicationActivities(e?: any): any; // TEMP getApplicationActivity(e?: any, t?: any): any; // TEMP - getClientStatus(e?: any): any; // TEMP - getLastOnlineTimestamp(e?: any): any; // TEMP + getClientStatus(userId: string): Partial> | undefined; + getLastOnlineTimestamp(userId: string): number | undefined; getPrimaryActivity(e?: any): any; // TEMP getState(): { activities: any; // TEMP @@ -30,7 +30,48 @@ export class PresenceStore exte statuses: any; // TEMP }; // TEMP getStatus(e?: any): any; // TEMP - getUserIds(): any; // TEMP - isMobileOnline(e?: any): any; // TEMP + getUserIds(): string[]; + isMobileOnline(userId: string): boolean; setCurrentUserOnConnectionOpen(e?: any, t?: any): any; // TEMP } + +/** @todo Might have more properties. */ +export interface Activity { + application_id: any; // TEMP + assets: any; // TEMP + buttons: any; // TEMP + created_at: any; // TEMP + details: any; // TEMP + emoji: any; // TEMP + flags: any; // TEMP + id: any; // TEMP + name: any; // TEMP + party: any; // TEMP + platform: any; // TEMP + session_id: any; // TEMP + state: any; // TEMP + supported_platforms: any; // TEMP + sync_id: any; // TEMP + timestamps: any; // TEMP + type: any; // TEMP + url: any; // TEMP +} + +// Original name: ClientTypes +export const enum ClientType { + DESKTOP = "desktop", + MOBILE = "mobile", + UNKNOWN = "unknown", + WEB = "web", +} + +// Original name: StatusTypes +export const enum StatusType { + DND = "dnd", + IDLE = "idle", + INVISIBLE = "invisible", + OFFLINE = "offline", + ONLINE = "online", + STREAMING = "streaming", + UNKNOWN = "unknown", +} diff --git a/packages/discord-types/src/stores/UserProfileStore.d.ts b/packages/discord-types/src/stores/UserProfileStore.d.ts index 53794a68b..5f9afad4d 100644 --- a/packages/discord-types/src/stores/UserProfileStore.d.ts +++ b/packages/discord-types/src/stores/UserProfileStore.d.ts @@ -11,6 +11,7 @@ import type { UserProfile } from "../general/UserProfile"; import type { UserRecord } from "../general/UserRecord"; import type { GenericConstructor, Nullish } from "../internal"; import type { FluxSnapshot, FluxSnapshotStore } from "./abstract/FluxSnapshotStore"; +import type { StatusType } from "./PresenceStore"; export interface UserProfileStoreSnapshotData { profile: UserProfile | undefined; @@ -47,14 +48,3 @@ export class UserProfileStore< loadCache: () => void; } - -// Original name: StatusTypes -export const enum StatusType { - DND = "dnd", - IDLE = "idle", - INVISIBLE = "invisible", - OFFLINE = "offline", - ONLINE = "online", - STREAMING = "streaming", - UNKNOWN = "unknown", -} diff --git a/patches/eslint-plugin-path-alias@1.0.0.patch b/patches/eslint-plugin-path-alias@1.0.0.patch deleted file mode 100644 index 49c46b3dd..000000000 --- a/patches/eslint-plugin-path-alias@1.0.0.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/lib/rules/no-relative.js b/lib/rules/no-relative.js -index 71594c83f1f4f733ffcc6047d7f7084348335dbe..d8623d87c89499c442171db3272cba07c9efabbe 100644 ---- a/lib/rules/no-relative.js -+++ b/lib/rules/no-relative.js -@@ -41,7 +41,7 @@ module.exports = { - ImportDeclaration(node) { - const importPath = node.source.value; - -- if (!/^(\.?\.\/)/.test(importPath)) { -+ if (!/^(\.\.\/)/.test(importPath)) { - return; - } - \ No newline at end of file diff --git a/patches/eslint-plugin-path-alias@1.1.0.patch b/patches/eslint-plugin-path-alias@1.1.0.patch new file mode 100644 index 000000000..0fbaff953 --- /dev/null +++ b/patches/eslint-plugin-path-alias@1.1.0.patch @@ -0,0 +1,22 @@ +diff --git a/lib/rules/no-relative.js b/lib/rules/no-relative.js +index a5f0f9d42b255077d10bacfe226ee2ddc0348991..6b7dfd90d2a2aeff77b115d2798f8a8080721d62 100644 +--- a/lib/rules/no-relative.js ++++ b/lib/rules/no-relative.js +@@ -43,7 +43,7 @@ module.exports = { + ImportExpression(node) { + const importPath = node.source.value; + +- if (!/^(\.?\.\/)/.test(importPath)) { ++ if (!/^(\.\.\/)/.test(importPath)) { + return; + } + +@@ -69,7 +69,7 @@ module.exports = { + ImportDeclaration(node) { + const importPath = node.source.value; + +- if (!/^(\.?\.\/)/.test(importPath)) { ++ if (!/^(\.\.\/)/.test(importPath)) { + return; + } + diff --git a/patches/eslint@8.46.0.patch b/patches/eslint@8.57.0.patch similarity index 94% rename from patches/eslint@8.46.0.patch rename to patches/eslint@8.57.0.patch index c91e45d56..ed2d15b3c 100644 --- a/patches/eslint@8.46.0.patch +++ b/patches/eslint@8.57.0.patch @@ -1,11 +1,11 @@ diff --git a/lib/rules/no-useless-escape.js b/lib/rules/no-useless-escape.js -index 0e0f6f09f2c35f3276173c08f832cde9f2cf56a0..7dc22851715f3574d935f513c1b5e35552985711 100644 +index 0e0f6f09f2c35f3276173c08f832cde9f2cf56a0..f764ac7ab6eebbdab22a4d0b12c4fd3919f56368 100644 --- a/lib/rules/no-useless-escape.js +++ b/lib/rules/no-useless-escape.js @@ -65,13 +65,31 @@ module.exports = { escapeBackslash: "Replace the `\\` with `\\\\` to include the actual backslash character." }, - + - schema: [] + schema: [{ + type: "object", @@ -22,13 +22,13 @@ index 0e0f6f09f2c35f3276173c08f832cde9f2cf56a0..7dc22851715f3574d935f513c1b5e355 + additionalProperties: false + }] }, - + create(context) { + const options = context.options[0] || {}; + const { extra, extraCharClass } = options; const sourceCode = context.sourceCode; const parser = new RegExpParser(); - + + const NON_CHARCLASS_ESCAPES = union(REGEX_NON_CHARCLASS_ESCAPES, new Set(extra)); + const CHARCLASS_ESCAPES = union(REGEX_GENERAL_ESCAPES, new Set(extraCharClass)); + @@ -37,7 +37,7 @@ index 0e0f6f09f2c35f3276173c08f832cde9f2cf56a0..7dc22851715f3574d935f513c1b5e355 * @param {ASTNode} node The node to report @@ -200,9 +218,9 @@ module.exports = { let allowedEscapes; - + if (characterClassStack.length) { - allowedEscapes = unicodeSets ? REGEX_CLASSSET_CHARACTER_ESCAPES : REGEX_GENERAL_ESCAPES; + allowedEscapes = unicodeSets ? REGEX_CLASSSET_CHARACTER_ESCAPES : CHARCLASS_ESCAPES; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b03585799..5e030bf0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,12 +5,12 @@ settings: excludeLinksFromLockfile: false patchedDependencies: - eslint-plugin-path-alias@1.0.0: - hash: m6sma4g6bh67km3q6igf6uxaja - path: patches/eslint-plugin-path-alias@1.0.0.patch - eslint@8.46.0: - hash: xm46kqcmdgzlmm4aifkfpxaho4 - path: patches/eslint@8.46.0.patch + eslint-plugin-path-alias@1.1.0: + hash: yphe5vyevzdqcgyxunass7sxwe + path: patches/eslint-plugin-path-alias@1.1.0.patch + eslint@8.57.0: + hash: wy5a2dwvtxac2ygzwebqqjurgi + path: patches/eslint@8.57.0.patch importers: @@ -51,26 +51,29 @@ importers: specifier: ^5.0.3 version: 5.0.3 '@types/lodash': - specifier: ^4.14.194 - version: 4.14.194 + specifier: ~4.17.4 + version: 4.17.4 '@types/node': specifier: ^18.16.3 version: 18.16.3 '@types/react': - specifier: ^18.2.0 - version: 18.2.0 + specifier: ~18.2.21 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.1 - version: 18.2.1 + specifier: ~18.2.7 + version: 18.2.25 '@types/yazl': specifier: ^2.4.2 version: 2.4.2 '@typescript-eslint/eslint-plugin': - specifier: ^5.59.1 - version: 5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) + specifier: ^7.11.0 + version: 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^5.59.1 - version: 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) + specifier: ^7.11.0 + version: 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@vencord/discord-types': + specifier: workspace:^ + version: link:packages/discord-types diff: specifier: ^5.1.0 version: 5.1.0 @@ -81,20 +84,20 @@ importers: specifier: ^0.15.18 version: 0.15.18 eslint: - specifier: ^8.46.0 - version: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + specifier: ^8.57.0 + version: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))) + version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))) eslint-plugin-path-alias: - specifier: ^1.0.0 - version: 1.0.0(patch_hash=m6sma4g6bh67km3q6igf6uxaja)(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + specifier: ^1.1.0 + version: 1.1.0(patch_hash=yphe5vyevzdqcgyxunass7sxwe)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) eslint-plugin-simple-import-sort: - specifier: ^10.0.0 - version: 10.0.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + specifier: ^12.1.0 + version: 12.1.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) eslint-plugin-unused-imports: - specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + specifier: ^3.2.0 + version: 3.2.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) highlight.js: specifier: 10.6.0 version: 10.6.0 @@ -102,8 +105,8 @@ importers: specifier: ^7.2.0 version: 7.2.0 moment: - specifier: ^2.29.4 - version: 2.29.4 + specifier: 2.22.2 + version: 2.22.2 puppeteer-core: specifier: ^19.11.1 version: 19.11.1(typescript@5.4.5) @@ -123,8 +126,8 @@ importers: specifier: ^3.12.7 version: 3.12.7 type-fest: - specifier: ^3.9.0 - version: 3.9.0 + specifier: ^4.18.3 + version: 4.18.3 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -135,6 +138,49 @@ importers: specifier: ^0.3.5 version: 0.3.5 + packages/discord-types: + dependencies: + '@types/events': + specifier: ~3.0.3 + version: 3.0.3 + dependency-graph: + specifier: 0.9.0 + version: 0.9.0 + moment: + specifier: 2.22.2 + version: 2.22.2 + type-fest: + specifier: ^4.18.3 + version: 4.18.3 + devDependencies: + '@eslint-types/unicorn': + specifier: ^52.0.0 + version: 52.0.0 + '@stylistic/eslint-plugin': + specifier: ^2.1.0 + version: 2.1.0(eslint@9.4.0)(typescript@5.4.5) + eslint: + specifier: ^9.4.0 + version: 9.4.0 + eslint-plugin-headers: + specifier: ^1.1.2 + version: 1.1.2(eslint@9.4.0) + eslint-plugin-import-x: + specifier: ^0.5.1 + version: 0.5.1(eslint@9.4.0)(typescript@5.4.5) + eslint-plugin-simple-import-sort: + specifier: ^12.1.0 + version: 12.1.0(eslint@9.4.0) + eslint-plugin-unicorn: + specifier: ^53.0.0 + version: 53.0.0(eslint@9.4.0) + typescript: + specifier: ^5.4.5 + version: 5.4.5 + typescript-eslint: + specifier: ^8.0.0-alpha.24 + version: 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + packages/vencord-types: dependencies: '@types/lodash': @@ -183,6 +229,10 @@ packages: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.6': + resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.18.6': resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} @@ -369,32 +419,55 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.5.1': - resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint-community/regexpp@4.6.2': resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.1': - resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} + '@eslint-types/unicorn@52.0.0': + resolution: {integrity: sha512-1+Om/IekT0AwlPiARvhbtKsSgVMu3ZAtP99YCzhHkDSnF5f8sQegh8/3ZmMhlCnKipa7/x8qEC7Bn4rbaagnSA==} + + '@eslint/config-array@0.15.1': + resolution: {integrity: sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.46.0': - resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@humanwhocodes/config-array@0.11.10': - resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + '@eslint/js@9.4.0': + resolution: {integrity: sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.3': + resolution: {integrity: sha512-HAbhAYKfsAC2EkTqve00ibWIZlaU74Z1EHwAjYr4PXF0YU2VEA1zSIKSSpKszRLRWwHzzRZXvK632u+uXzvsvw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@1.2.1': - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} @@ -442,12 +515,50 @@ packages: '@sapphi-red/web-noise-suppressor@0.3.3': resolution: {integrity: sha512-gAC33DCXYwNTI/k1PxOVHmbbzakUSMbb/DHpoV6rn4pKZtPI1dduULSmAAm/y1ipgIlArnk2JcnQzw4n2tCZHw==} + '@stylistic/eslint-plugin-js@2.1.0': + resolution: {integrity: sha512-gdXUjGNSsnY6nPyqxu6lmDTtVrwCOjun4x8PUn0x04d5ucLI74N3MT1Q0UhdcOR9No3bo5PGDyBgXK+KmD787A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@stylistic/eslint-plugin-jsx@2.1.0': + resolution: {integrity: sha512-mMD7S+IndZo2vxmwpHVTCwx2O1VdtE5tmpeNwgaEcXODzWV1WTWpnsc/PECQKIr/mkLPFWiSIqcuYNhQ/3l6AQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@stylistic/eslint-plugin-plus@2.1.0': + resolution: {integrity: sha512-S5QAlgYXESJaSBFhBSBLZy9o36gXrXQwWSt6QkO+F0SrT9vpV5JF/VKoh+ojO7tHzd8Ckmyouq02TT9Sv2B0zQ==} + peerDependencies: + eslint: '*' + + '@stylistic/eslint-plugin-ts@2.1.0': + resolution: {integrity: sha512-2ioFibufHYBALx2TBrU4KXovCkN8qCqcb9yIHc0fyOfTaO5jw4d56WW7YRcF3Zgde6qFyXwAN6z/+w4pnmos1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@stylistic/eslint-plugin@2.1.0': + resolution: {integrity: sha512-cBBowKP2u/+uE5CzgH5w8pE9VKqcM7BXdIDPIbGt2rmLJGnA6MJPr9vYGaqgMoJFs7R/FzsMQerMvvEP40g2uw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + '@types/chrome@0.0.246': resolution: {integrity: sha512-MxGxEomGxsJiL9xe/7ZwVgwdn8XVKWbPvxpVQl3nWOjrS0Ce63JsfzxUc4aU3GvRcUPYsfufHmJ17BFyKxeA4g==} '@types/diff@5.0.3': resolution: {integrity: sha512-amrLbRqTU9bXMCc6uX0sWpxsQzRIo9z6MJPkH1pkez/qOxuqSZVuryJAWoBRq94CeG8JxY+VK4Le9HtjQR5T9A==} + '@types/eslint@8.56.10': + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/events@3.0.3': + resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==} + '@types/filesystem@0.0.33': resolution: {integrity: sha512-2KedRPzwu2K528vFkoXnnWdsG0MtUwPjuA7pRy4vKxlxHEe8qUDZibYHXJKZZr2Cl/ELdCWYqyb/MKwsUuzBWw==} @@ -472,6 +583,9 @@ packages: '@types/lodash@4.14.194': resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==} + '@types/lodash@4.17.4': + resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} + '@types/minimist@1.2.2': resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} @@ -487,81 +601,144 @@ packages: '@types/react-dom@18.2.1': resolution: {integrity: sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w==} + '@types/react-dom@18.2.25': + resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==} + '@types/react@17.0.2': resolution: {integrity: sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==} '@types/react@18.2.0': resolution: {integrity: sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA==} + '@types/react@18.2.79': + resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} + '@types/scheduler@0.16.3': resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - '@types/semver@7.3.13': - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} - '@types/yauzl@2.10.0': resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} '@types/yazl@2.4.2': resolution: {integrity: sha512-T+9JH8O2guEjXNxqmybzQ92mJUh2oCwDDMSSimZSe1P+pceZiFROZLYmcbqkzV5EUwz6VwcKXCO2S2yUpra6XQ==} - '@typescript-eslint/eslint-plugin@5.59.1': - resolution: {integrity: sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/eslint-plugin@7.11.0': + resolution: {integrity: sha512-P+qEahbgeHW4JQ/87FuItjBj8O3MYv5gELDzr8QaQ7fsll1gSMTYb6j87MYyxwf3DtD7uGFB9ShwgmCJB5KmaQ==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@5.59.1': - resolution: {integrity: sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/eslint-plugin@8.0.0-alpha.24': + resolution: {integrity: sha512-14rK2L+ayITgprWmtaoI7ImzAZtHpnzQ7ujKJDQP6FrLSpd2Xv9ndViiG1XvhXYnwH1ppHGRZDzOkOMmDgp3Mg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/scope-manager@5.59.1': - resolution: {integrity: sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/type-utils@5.59.1': - resolution: {integrity: sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/parser@7.11.0': + resolution: {integrity: sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: '*' + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/types@5.59.1': - resolution: {integrity: sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/parser@8.0.0-alpha.24': + resolution: {integrity: sha512-Dpt40m3taG7Eidv6F1WLvMmt3mGDNib8l/rYiY+7CwjijgXYmwsX95W/P2+fW6LeBvB8ATIEcbSbdX7TUmcg5Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/typescript-estree@5.59.1': - resolution: {integrity: sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@7.11.0': + resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/scope-manager@8.0.0-alpha.24': + resolution: {integrity: sha512-ATe1bLKAyJ3alyrAoC0Wel1mnBThFB0/OBoXHp9GKoiTHdqJAhs2cCgZOgQWyJmWLiLFQHLyJj3EIFpoaDOX+Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@7.11.0': + resolution: {integrity: sha512-WmppUEgYy+y1NTseNMJ6mCFxt03/7jTOy08bcg7bxJJdsM4nuhnchyBbE8vryveaJUf62noH7LodPSo5Z0WUCg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/type-utils@8.0.0-alpha.24': + resolution: {integrity: sha512-jNh21K0/2aTekfPQAONImIEi0yTsLLH/dmOjuXLEX56QniTPoMKFrO9JYVUfjTRIlEHl8/F8VDv9yTINNcx/2w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/utils@5.59.1': - resolution: {integrity: sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/types@7.11.0': + resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==} + engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@5.59.1': - resolution: {integrity: sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@8.0.0-alpha.24': + resolution: {integrity: sha512-MwBAoDe8nf1KrquszS586fHp+b9LV4jd2zEzwB6FdfLmJavyHrJGVFmCVSoDNZ40MqCQklgY78px6TXnKulCfg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@7.11.0': + resolution: {integrity: sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.0.0-alpha.24': + resolution: {integrity: sha512-d/WTeR5eG9BboB9rPdcv7o8fZV4Jyy643Xxb9s0O9xX2X5oZrj5lqD7O/J+9aT9l/iE4U81sp1bceQKoUDJq0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@7.11.0': + resolution: {integrity: sha512-xlAWwPleNRHwF37AhrZurOxA1wyXowW4PqVXZVUNCLjB48CqdPJoJWkrpH2nij9Q3Lb7rtWindtoXwxjxlKKCA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/utils@8.0.0-alpha.24': + resolution: {integrity: sha512-Ph3Mvh+KRlf8zPmhyFqSpDVCyfcCfNd7mLujLWzXo/TgJfXbdjjs7CLv8yc+tmB7zwgiv/XIeul1iyYUVKjMEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@7.11.0': + resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/visitor-keys@8.0.0-alpha.24': + resolution: {integrity: sha512-9gu8YsifuPFXC1ZDPEXroGon1/IbSXD5bYFs6mmE8GwVo++Z1UTaO3tjTp+k/b85d8MBRkhetgBSFKKsIWetTw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} '@vap/core@0.0.12': resolution: {integrity: sha512-3csHpkE1zUSRTZwl7xIf2uXg1cD4IhhtUm0F6K/dWydc95R5Nj+krB4OTNATuqkewIv/ViCbwjPfkafAgvZQSg==} @@ -579,6 +756,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -687,10 +869,18 @@ packages: brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} + browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -700,6 +890,10 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + cache-base@1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} @@ -723,6 +917,9 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} + caniuse-lite@1.0.30001625: + resolution: {integrity: sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w==} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -739,6 +936,10 @@ packages: peerDependencies: devtools-protocol: '*' + ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} + class-utils@0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} @@ -747,6 +948,10 @@ packages: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -788,6 +993,9 @@ packages: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} + core-js-compat@3.37.1: + resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} + cosmiconfig@8.1.3: resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} engines: {node: '>=14'} @@ -887,6 +1095,10 @@ packages: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} + dependency-graph@0.9.0: + resolution: {integrity: sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==} + engines: {node: '>= 0.6.0'} + devtools-protocol@0.0.1107588: resolution: {integrity: sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==} @@ -912,6 +1124,9 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + electron-to-chromium@1.4.788: + resolution: {integrity: sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1086,6 +1301,10 @@ packages: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -1124,6 +1343,18 @@ packages: eslint-import-resolver-webpack: optional: true + eslint-plugin-headers@1.1.2: + resolution: {integrity: sha512-4A2B52MESwiv/pWrjNEEFI/bghbBGuDxUapjiwqJy8wC3lnginrOFKZ3cPLS9YyYbCr1R+/IeomF5ogfpyKEGA==} + engines: {node: ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + + eslint-plugin-import-x@0.5.1: + resolution: {integrity: sha512-2JK8bbFOLes+gG6tgdnM8safCxMAj4u2wjX8X1BRFPfnY7Ct2hFYESoIcVwABX/DDcdpQFLGtKmzbNEWJZD9iQ==} + engines: {node: '>=16'} + peerDependencies: + eslint: ^8.56.0 || ^9.0.0-0 + eslint-plugin-import@2.29.1: resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} @@ -1134,25 +1365,31 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-path-alias@1.0.0: - resolution: {integrity: sha512-FXus57yC+Zd3sMv46pbloXYwFeNVNHJqlACr9V68FG/IzGFBBokGJpmjDbEjpt8ZCeVSndUubeDWWl2A8sCNVQ==} + eslint-plugin-path-alias@1.1.0: + resolution: {integrity: sha512-fDsuIsB11cvZ+5LDaOMEn1CkLFeOLXdvp9Mqi/9ZL2sAnVlRPKlMH3UPT7onFTWcFrNllYwrQ/+7LbzagGOA9A==} peerDependencies: eslint: ^7 eslint-plugin-simple-header@1.0.2: resolution: {integrity: sha512-K1EJ/ueBIjPRA8qR44Ymo+GDmPYYmfoODtainGxVr7PSbX6QiaY+pTuGCrOhO+AtVsYJs8GLSVdGUTXyAxAtOA==} - eslint-plugin-simple-import-sort@10.0.0: - resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + eslint-plugin-simple-import-sort@12.1.0: + resolution: {integrity: sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==} peerDependencies: eslint: '>=5.0.0' - eslint-plugin-unused-imports@2.0.0: - resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + eslint-plugin-unicorn@53.0.0: + resolution: {integrity: sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==} + engines: {node: '>=18.18'} + peerDependencies: + eslint: '>=8.56.0' + + eslint-plugin-unused-imports@3.2.0: + resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 - eslint: ^8.0.0 + '@typescript-eslint/eslint-plugin': 6 - 7 + eslint: '8' peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true @@ -1161,27 +1398,40 @@ packages: resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} engines: {node: '>=4.0.0'} - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.2: resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.46.0: - resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true + eslint@9.4.0: + resolution: {integrity: sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + + espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1194,10 +1444,6 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -1252,6 +1498,10 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -1268,9 +1518,16 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -1329,6 +1586,9 @@ packages: get-tsconfig@4.5.0: resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} + get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} @@ -1360,6 +1620,10 @@ packages: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -1377,9 +1641,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1467,6 +1728,10 @@ packages: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -1499,10 +1764,12 @@ packages: is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} + deprecated: Please upgrade to v0.1.7 is-accessor-descriptor@1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} + deprecated: Please upgrade to v1.0.1 is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} @@ -1521,6 +1788,10 @@ packages: is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -1534,10 +1805,12 @@ packages: is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} + deprecated: Please upgrade to v0.1.5 is-data-descriptor@1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} + deprecated: Please upgrade to v1.0.1 is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} @@ -1658,6 +1931,18 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -1683,6 +1968,9 @@ packages: jszip@2.7.0: resolution: {integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} @@ -1771,6 +2059,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -1788,6 +2080,9 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + moment@2.22.2: + resolution: {integrity: sha512-LRvkBHaJGnrcWvqsElsOhHCzj8mU39wLx5pQ0pc6s153GynCTsPdGdqsVNKAQD9sKnWj11iF7TZx9fpLwdD3fw==} + moment@2.29.4: resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} @@ -1817,9 +2112,6 @@ packages: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -1835,6 +2127,9 @@ packages: encoding: optional: true + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -1954,10 +2249,21 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -2043,10 +2349,18 @@ packages: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -2067,14 +2381,13 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated - resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -2116,11 +2429,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.0: - resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} @@ -2324,6 +2632,12 @@ packages: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + ts-patch@3.1.2: resolution: {integrity: sha512-n58F5AqjUMdp9RAKq+E1YBkmONltPVbt1nN+wrmZXoYZek6QcvaTuqvKMhYhr5BxtC53kD/exxIPA1cP1RQxsA==} hasBin: true @@ -2331,18 +2645,9 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tsx@3.12.7: resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==} hasBin: true @@ -2371,6 +2676,10 @@ packages: resolution: {integrity: sha512-hR8JP2e8UiH7SME5JZjsobBlEiatFoxpzCP+R3ZeCo7kAaG1jXQE5X/buLzogM6GJu8le9Y4OcfNuIQX0rZskA==} engines: {node: '>=14.16'} + type-fest@4.18.3: + resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} + engines: {node: '>=16'} + typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -2387,6 +2696,15 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} + typescript-eslint@8.0.0-alpha.24: + resolution: {integrity: sha512-YZD7Uz/8oze7Eal4REHRrltl7I7dg6A05sIVzZnkppRXvmUPTSBOPNwKoEkmAursQiVMasjAIYHR166t6IS/2w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + typescript-transform-paths@3.4.7: resolution: {integrity: sha512-1Us1kdkdfKd2unbkBAOV2HHRmbRBYpSuk9nJ7cLD2hP4QmfToiM/VpxNlhJc1eezVwVqSKSBjNSzZsK/fWR/9A==} peerDependencies: @@ -2415,6 +2733,12 @@ packages: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2528,6 +2852,8 @@ snapshots: '@babel/helper-validator-identifier@7.19.1': {} + '@babel/helper-validator-identifier@7.24.6': {} + '@babel/highlight@7.18.6': dependencies: '@babel/helper-validator-identifier': 7.19.1 @@ -2636,21 +2962,50 @@ snapshots: '@esbuild/win32-x64@0.17.18': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))': + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))': dependencies: - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-visitor-keys: 3.4.2 - '@eslint-community/regexpp@4.5.1': {} + '@eslint-community/eslint-utils@4.4.0(eslint@9.4.0)': + dependencies: + eslint: 9.4.0 + eslint-visitor-keys: 3.4.2 + + '@eslint-community/regexpp@4.10.0': {} '@eslint-community/regexpp@4.6.2': {} - '@eslint/eslintrc@2.1.1': + '@eslint-types/unicorn@52.0.0': {} + + '@eslint/config-array@0.15.1': + dependencies: + '@eslint/object-schema': 2.1.3 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 globals: 13.20.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 10.0.1 + globals: 14.0.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -2659,11 +3014,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.46.0': {} + '@eslint/js@8.57.0': {} - '@humanwhocodes/config-array@0.11.10': + '@eslint/js@9.4.0': {} + + '@eslint/object-schema@2.1.3': {} + + '@humanwhocodes/config-array@0.11.14': dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -2671,7 +3030,9 @@ snapshots: '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@1.2.1': {} + '@humanwhocodes/object-schema@2.0.3': {} + + '@humanwhocodes/retry@0.3.0': {} '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -2724,6 +3085,53 @@ snapshots: '@sapphi-red/web-noise-suppressor@0.3.3': {} + '@stylistic/eslint-plugin-js@2.1.0(eslint@9.4.0)': + dependencies: + '@types/eslint': 8.56.10 + acorn: 8.11.3 + eslint: 9.4.0 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 + + '@stylistic/eslint-plugin-jsx@2.1.0(eslint@9.4.0)': + dependencies: + '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) + '@types/eslint': 8.56.10 + eslint: 9.4.0 + estraverse: 5.3.0 + picomatch: 4.0.2 + + '@stylistic/eslint-plugin-plus@2.1.0(eslint@9.4.0)(typescript@5.4.5)': + dependencies: + '@types/eslint': 8.56.10 + '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + eslint: 9.4.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@stylistic/eslint-plugin-ts@2.1.0(eslint@9.4.0)(typescript@5.4.5)': + dependencies: + '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) + '@types/eslint': 8.56.10 + '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + eslint: 9.4.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@stylistic/eslint-plugin@2.1.0(eslint@9.4.0)(typescript@5.4.5)': + dependencies: + '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) + '@stylistic/eslint-plugin-jsx': 2.1.0(eslint@9.4.0) + '@stylistic/eslint-plugin-plus': 2.1.0(eslint@9.4.0)(typescript@5.4.5) + '@stylistic/eslint-plugin-ts': 2.1.0(eslint@9.4.0)(typescript@5.4.5) + '@types/eslint': 8.56.10 + eslint: 9.4.0 + transitivePeerDependencies: + - supports-color + - typescript + '@types/chrome@0.0.246': dependencies: '@types/filesystem': 0.0.33 @@ -2731,6 +3139,15 @@ snapshots: '@types/diff@5.0.3': {} + '@types/eslint@8.56.10': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.11 + + '@types/estree@1.0.5': {} + + '@types/events@3.0.3': {} + '@types/filesystem@0.0.33': dependencies: '@types/filewriter': 0.0.30 @@ -2754,6 +3171,8 @@ snapshots: '@types/lodash@4.14.194': {} + '@types/lodash@4.17.4': {} + '@types/minimist@1.2.2': {} '@types/node@18.16.3': {} @@ -2766,6 +3185,10 @@ snapshots: dependencies: '@types/react': 18.2.0 + '@types/react-dom@18.2.25': + dependencies: + '@types/react': 18.2.79 + '@types/react@17.0.2': dependencies: '@types/prop-types': 15.7.5 @@ -2777,9 +3200,12 @@ snapshots: '@types/scheduler': 0.16.3 csstype: 3.1.2 - '@types/scheduler@0.16.3': {} + '@types/react@18.2.79': + dependencies: + '@types/prop-types': 15.7.5 + csstype: 3.1.2 - '@types/semver@7.3.13': {} + '@types/scheduler@0.16.3': {} '@types/yauzl@2.10.0': dependencies: @@ -2790,89 +3216,180 @@ snapshots: dependencies: '@types/node': 18.16.3 - '@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: - '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) - '@typescript-eslint/scope-manager': 5.59.1 - '@typescript-eslint/type-utils': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) - '@typescript-eslint/utils': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) - debug: 4.3.4 - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.5.0 - tsutils: 3.21.0(typescript@5.4.5) + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.11.0 + '@typescript-eslint/type-utils': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.11.0 + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.0.0-alpha.24(@typescript-eslint/parser@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 5.59.1 - '@typescript-eslint/types': 5.59.1 - '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.4.5) - debug: 4.3.4 - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.24 + '@typescript-eslint/type-utils': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.24 + eslint: 9.4.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@5.59.1': + '@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 5.59.1 - '@typescript-eslint/visitor-keys': 5.59.1 - - '@typescript-eslint/type-utils@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5)': - dependencies: - '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.4.5) - '@typescript-eslint/utils': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.11.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.11.0 debug: 4.3.4 - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) - tsutils: 3.21.0(typescript@5.4.5) + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@5.59.1': {} - - '@typescript-eslint/typescript-estree@5.59.1(typescript@5.4.5)': + '@typescript-eslint/parser@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 5.59.1 - '@typescript-eslint/visitor-keys': 5.59.1 + '@typescript-eslint/scope-manager': 8.0.0-alpha.24 + '@typescript-eslint/types': 8.0.0-alpha.24 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.24(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.24 + debug: 4.3.4 + eslint: 9.4.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.11.0': + dependencies: + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/visitor-keys': 7.11.0 + + '@typescript-eslint/scope-manager@8.0.0-alpha.24': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.24 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.24 + + '@typescript-eslint/type-utils@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 8.0.0-alpha.24(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + debug: 4.3.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@7.11.0': {} + + '@typescript-eslint/types@8.0.0-alpha.24': {} + + '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/visitor-keys': 7.11.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.0 - tsutils: 3.21.0(typescript@5.4.5) + minimatch: 9.0.4 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.0.0-alpha.24(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.59.1 - '@typescript-eslint/types': 5.59.1 - '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.4.5) - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) - eslint-scope: 5.1.1 - semver: 7.5.0 + '@typescript-eslint/types': 8.0.0-alpha.24 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.24 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + '@typescript-eslint/scope-manager': 7.11.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@5.59.1': + '@typescript-eslint/utils@7.11.0(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 5.59.1 - eslint-visitor-keys: 3.4.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) + '@typescript-eslint/scope-manager': 7.11.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) + eslint: 9.4.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) + '@typescript-eslint/scope-manager': 8.0.0-alpha.24 + '@typescript-eslint/types': 8.0.0-alpha.24 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.24(typescript@5.4.5) + eslint: 9.4.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@7.11.0': + dependencies: + '@typescript-eslint/types': 7.11.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.0.0-alpha.24': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.24 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} '@vap/core@0.0.12': dependencies: @@ -2884,12 +3401,14 @@ snapshots: vscode-oniguruma: 1.7.0 vscode-textmate: 5.2.0 - acorn-jsx@5.3.2(acorn@8.10.0): + acorn-jsx@5.3.2(acorn@8.11.3): dependencies: - acorn: 8.10.0 + acorn: 8.11.3 acorn@8.10.0: {} + acorn@8.11.3: {} + agent-base@6.0.2: dependencies: debug: 4.3.4 @@ -3019,10 +3538,21 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + braces@3.0.2: dependencies: fill-range: 7.0.1 + browserslist@4.23.0: + dependencies: + caniuse-lite: 1.0.30001625 + electron-to-chromium: 1.4.788 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.0) + buffer-crc32@0.2.13: {} buffer-from@1.1.2: {} @@ -3032,6 +3562,8 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builtin-modules@3.3.0: {} + cache-base@1.0.1: dependencies: collection-visit: 1.0.0 @@ -3067,6 +3599,8 @@ snapshots: camelcase@5.3.1: {} + caniuse-lite@1.0.30001625: {} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -3085,6 +3619,8 @@ snapshots: devtools-protocol: 0.0.1107588 mitt: 3.0.0 + ci-info@4.0.0: {} + class-utils@0.3.6: dependencies: arr-union: 3.1.0 @@ -3096,6 +3632,10 @@ snapshots: dependencies: source-map: 0.6.1 + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -3131,6 +3671,10 @@ snapshots: copy-descriptor@0.1.1: {} + core-js-compat@3.37.1: + dependencies: + browserslist: 4.23.0 + cosmiconfig@8.1.3: dependencies: import-fresh: 3.3.0 @@ -3227,6 +3771,8 @@ snapshots: is-descriptor: 1.0.2 isobject: 3.0.1 + dependency-graph@0.9.0: {} + devtools-protocol@0.0.1107588: {} diff@5.1.0: {} @@ -3253,6 +3799,8 @@ snapshots: no-case: 3.0.4 tslib: 2.6.2 + electron-to-chromium@1.4.788: {} + emoji-regex@8.0.0: {} end-of-stream@1.4.4: @@ -3452,13 +4000,15 @@ snapshots: escalade@3.1.1: {} + escalade@3.1.2: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))): dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) eslint-import-resolver-node@0.3.9: dependencies: @@ -3468,17 +4018,37 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + '@typescript-eslint/parser': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-plugin-headers@1.1.2(eslint@9.4.0): + dependencies: + eslint: 9.4.0 + + eslint-plugin-import-x@0.5.1(eslint@9.4.0)(typescript@5.4.5): + dependencies: + '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + debug: 4.3.4 + doctrine: 3.0.0 + eslint: 9.4.0 + eslint-import-resolver-node: 0.3.9 + get-tsconfig: 4.7.5 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.2 + tslib: 2.6.2 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -3486,9 +4056,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3499,57 +4069,86 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) + '@typescript-eslint/parser': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-path-alias@1.0.0(patch_hash=m6sma4g6bh67km3q6igf6uxaja)(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-plugin-path-alias@1.1.0(patch_hash=yphe5vyevzdqcgyxunass7sxwe)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) nanomatch: 1.2.13 transitivePeerDependencies: - supports-color eslint-plugin-simple-header@1.0.2: {} - eslint-plugin-simple-import-sort@10.0.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-plugin-simple-import-sort@12.1.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) - eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-plugin-simple-import-sort@12.1.0(eslint@9.4.0): dependencies: - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.4.0 + + eslint-plugin-unicorn@53.0.0(eslint@9.4.0): + dependencies: + '@babel/helper-validator-identifier': 7.24.6 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) + '@eslint/eslintrc': 3.1.0 + ci-info: 4.0.0 + clean-regexp: 1.0.0 + core-js-compat: 3.37.1 + eslint: 9.4.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.6.2 + strip-indent: 3.0.0 + transitivePeerDependencies: + - supports-color + + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): + dependencies: + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-rule-composer: 0.3.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.59.1(@typescript-eslint/parser@5.59.1(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5))(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) eslint-rule-composer@0.3.0: {} - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-visitor-keys@3.4.0: {} + eslint-scope@8.0.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 eslint-visitor-keys@3.4.2: {} - eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4): + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) - '@eslint-community/regexpp': 4.6.2 - '@eslint/eslintrc': 2.1.1 - '@eslint/js': 8.46.0 - '@humanwhocodes/config-array': 0.11.10 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -3557,7 +4156,7 @@ snapshots: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 @@ -3567,7 +4166,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.20.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3583,11 +4182,56 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@9.4.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/config-array': 0.15.1 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.4.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.0.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 4.0.0 + espree@9.6.1: dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.2 + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 esquery@1.5.0: dependencies: @@ -3597,8 +4241,6 @@ snapshots: dependencies: estraverse: 5.3.0 - estraverse@4.3.0: {} - estraverse@5.3.0: {} esutils@2.0.3: {} @@ -3654,6 +4296,10 @@ snapshots: dependencies: flat-cache: 3.0.4 + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 @@ -3673,8 +4319,15 @@ snapshots: flatted: 3.2.7 rimraf: 3.0.2 + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + flatted@3.2.7: {} + flatted@3.3.1: {} + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -3733,6 +4386,10 @@ snapshots: get-tsconfig@4.5.0: {} + get-tsconfig@4.7.5: + dependencies: + resolve-pkg-maps: 1.0.0 + get-value@2.0.6: {} gifenc@https://codeload.github.com/mattdesl/gifenc/tar.gz/64842fca317b112a8590f8fef2bf3825da8f6fe3: {} @@ -3768,6 +4425,8 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@14.0.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -3778,7 +4437,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.4 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 @@ -3790,8 +4449,6 @@ snapshots: graceful-fs@4.2.11: {} - grapheme-splitter@1.0.4: {} - graphemer@1.4.0: {} hard-rejection@2.1.0: {} @@ -3872,6 +4529,8 @@ snapshots: ignore@5.2.4: {} + ignore@5.3.1: {} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -3924,6 +4583,10 @@ snapshots: is-buffer@1.1.6: {} + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + is-callable@1.2.7: {} is-core-module@2.12.0: @@ -4043,6 +4706,12 @@ snapshots: dependencies: argparse: 2.0.1 + jsesc@0.5.0: {} + + jsesc@3.0.2: {} + + json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} @@ -4067,6 +4736,10 @@ snapshots: dependencies: pako: 1.0.11 + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kind-of@3.2.2: dependencies: is-buffer: 1.1.6 @@ -4150,6 +4823,10 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + minimist-options@4.1.0: dependencies: arrify: 1.0.1 @@ -4167,6 +4844,8 @@ snapshots: mkdirp-classic@0.5.3: {} + moment@2.22.2: {} + moment@2.29.4: {} monaco-editor@0.43.0: {} @@ -4197,8 +4876,6 @@ snapshots: transitivePeerDependencies: - supports-color - natural-compare-lite@1.4.0: {} - natural-compare@1.4.0: {} no-case@3.0.4: @@ -4210,10 +4887,12 @@ snapshots: dependencies: whatwg-url: 5.0.0 + node-releases@2.0.14: {} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.2 + resolve: 1.22.8 semver: 5.7.1 validate-npm-package-license: 3.0.4 @@ -4221,7 +4900,7 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.12.0 - semver: 7.5.0 + semver: 7.6.2 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -4340,8 +5019,14 @@ snapshots: picocolors@1.0.0: {} + picocolors@1.0.1: {} + picomatch@2.3.1: {} + picomatch@4.0.2: {} + + pluralize@8.0.0: {} + possible-typed-array-names@1.0.0: {} postcss-media-query-parser@0.2.3: {} @@ -4434,6 +5119,8 @@ snapshots: extend-shallow: 3.0.2 safe-regex: 1.1.0 + regexp-tree@0.1.27: {} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 @@ -4441,6 +5128,10 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 + regjsparser@0.10.0: + dependencies: + jsesc: 0.5.0 + relateurl@0.2.7: {} require-directory@2.1.1: {} @@ -4451,13 +5142,9 @@ snapshots: resolve-from@5.0.0: {} - resolve-url@0.2.1: {} + resolve-pkg-maps@1.0.0: {} - resolve@1.22.2: - dependencies: - is-core-module: 2.12.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + resolve-url@0.2.1: {} resolve@1.22.8: dependencies: @@ -4500,10 +5187,6 @@ snapshots: semver@6.3.1: {} - semver@7.5.0: - dependencies: - lru-cache: 6.0.0 - semver@7.6.2: {} set-function-length@1.2.2: @@ -4782,6 +5465,10 @@ snapshots: trim-newlines@3.0.1: {} + ts-api-utils@1.3.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + ts-patch@3.1.2: dependencies: chalk: 4.1.2 @@ -4798,15 +5485,8 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} - tslib@2.6.2: {} - tsutils@3.21.0(typescript@5.4.5): - dependencies: - tslib: 1.14.1 - typescript: 5.4.5 - tsx@3.12.7: dependencies: '@esbuild-kit/cjs-loader': 2.4.2 @@ -4829,6 +5509,8 @@ snapshots: type-fest@3.9.0: {} + type-fest@4.18.3: {} + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 @@ -4861,6 +5543,17 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + typescript-eslint@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5): + dependencies: + '@typescript-eslint/eslint-plugin': 8.0.0-alpha.24(@typescript-eslint/parser@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/parser': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - eslint + - supports-color + typescript-transform-paths@3.4.7(typescript@5.4.5): dependencies: minimatch: 3.1.2 @@ -4894,6 +5587,12 @@ snapshots: has-value: 0.3.1 isobject: 3.0.1 + update-browserslist-db@1.0.16(browserslist@4.23.0): + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.1 + uri-js@4.4.1: dependencies: punycode: 2.1.1 From 6e1d32d55a7981a6d6718b6c5416feaec0d947e8 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:14:06 -0400 Subject: [PATCH 020/126] Fixed workflow --- .../workflows/test-packages-discord-types.yml | 75 +++++++++---------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/.github/workflows/test-packages-discord-types.yml b/.github/workflows/test-packages-discord-types.yml index 16df58483..7fd28d8f5 100644 --- a/.github/workflows/test-packages-discord-types.yml +++ b/.github/workflows/test-packages-discord-types.yml @@ -1,38 +1,37 @@ -name: Test packages/discord-types -on: - pull_request: - paths: - - packages/discord-types/** - push: - paths: - - packages/discord-types/** -jobs: - test: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - sparse-checkout: packages/discord-types - sparse-checkout-cone-mode: false - - - uses: pnpm/action-setup@v4 - with: - version: 9 - - - name: Use Node.js 20 - uses: actions/setup-node@v4 - with: - node-version: ^20.11.0 - cache: pnpm - - - name: Move packages/discord-types to root - run: | - mv packages/discord-types . - rm -rf packages - - - name: Install dependencies - run: pnpm install --no-frozen-lockfile - - - name: Check for TypeScript errors and lint - run: pnpm test +name: Test packages/discord-types +on: + pull_request: + paths: + - packages/discord-types/** + push: + paths: + - packages/discord-types/** +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: packages/discord-types + sparse-checkout-cone-mode: false + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: ^20.11.0 + + - uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: Move packages/discord-types to root + run: | + mv packages/discord-types . + rm -rf packages + + - name: Install dependencies + run: pnpm install --no-frozen-lockfile + + - name: Check for TypeScript errors and lint + run: pnpm test From ef8d490adfeac6c9b8e733ee9aa05c89ef220593 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:22:11 -0400 Subject: [PATCH 021/126] Hopefully actually fixed workflow this time --- .github/workflows/test-packages-discord-types.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-packages-discord-types.yml b/.github/workflows/test-packages-discord-types.yml index 7fd28d8f5..63844d239 100644 --- a/.github/workflows/test-packages-discord-types.yml +++ b/.github/workflows/test-packages-discord-types.yml @@ -27,7 +27,8 @@ jobs: - name: Move packages/discord-types to root run: | - mv packages/discord-types . + shopt -s dotglob + mv packages/discord-types/* . rm -rf packages - name: Install dependencies From 6e6ee4db689808c380662de17f5ae9ed0d28036e Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Sat, 1 Jun 2024 23:39:58 -0300 Subject: [PATCH 022/126] NoPendingCount: Fix for message requests --- src/plugins/noPendingCount/index.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/plugins/noPendingCount/index.ts b/src/plugins/noPendingCount/index.ts index 29458df9d..57a65f52c 100644 --- a/src/plugins/noPendingCount/index.ts +++ b/src/plugins/noPendingCount/index.ts @@ -62,6 +62,16 @@ export default definePlugin({ replace: "return 0;" } }, + // New message requests hook + { + find: "useNewMessageRequestsCount:", + predicate: () => settings.store.hideMessageRequestsCount, + replacement: { + match: /getNonChannelAckId\(\i\.\i\.MESSAGE_REQUESTS\).+?return /, + replace: "$&0;" + } + }, + // Old message requests hook { find: "getMessageRequestsCount(){", predicate: () => settings.store.hideMessageRequestsCount, From ba4db259d6f67f8433a88aaf072caab7f270690d Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sun, 2 Jun 2024 22:32:03 -0400 Subject: [PATCH 023/126] Progress --- packages/discord-types/package.json | 2 +- .../discord-types/src/general/Activity.d.ts | 94 ++++++++++ .../discord-types/src/general/ReadState.d.ts | 160 ++++++++++++++++++ packages/discord-types/src/general/index.d.ts | 2 + .../src/stores/PresenceStore.d.ts | 92 +++++----- .../src/stores/ReadStateStore.d.ts | 59 ++++--- pnpm-lock.yaml | 102 +++++------ 7 files changed, 399 insertions(+), 112 deletions(-) create mode 100644 packages/discord-types/src/general/Activity.d.ts create mode 100644 packages/discord-types/src/general/ReadState.d.ts diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index 985b6a492..b270afa8c 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -33,6 +33,6 @@ "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-unicorn": "^53.0.0", "typescript": "^5.4.5", - "typescript-eslint": "^8.0.0-alpha.24" + "typescript-eslint": "^8.0.0-alpha.25" } } diff --git a/packages/discord-types/src/general/Activity.d.ts b/packages/discord-types/src/general/Activity.d.ts new file mode 100644 index 000000000..251d68893 --- /dev/null +++ b/packages/discord-types/src/general/Activity.d.ts @@ -0,0 +1,94 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +/** @todo Might have more properties. */ +export interface Activity { + application_id?: string | number; + assets?: ActivityAssets; + buttons?: string[]; + created_at: number; + details?: string; + emoji?: ActivityEmoji; + flags?: ActivityFlags; + id: string; + name: string; + party?: ActivityParty; + platform?: ActivityGamePlatform; + session_id?: string; + state?: string; + supported_platforms?: ActivityPlatform[]; + sync_id?: string; + timestamps?: ActivityTimestamps; + type: ActivityType; + url?: string; +} + +export interface ActivityAssets { + large_image?: string; + large_text?: string; + small_image?: string; + small_text?: string; +} + +export type ActivityEmoji = ActivityCustomEmoji | ActivityUnicodeEmoji; + +export interface ActivityCustomEmoji { + animated: boolean; + id: string; + name: string; +} + +export interface ActivityUnicodeEmoji { + name: string; +} + +export const 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 interface ActivityParty { + id?: string; + size?: [minimumSize: number, maximumSize: number]; +} + +// Original name: ActivityGamePlatforms +export const enum ActivityGamePlatform { + ANDROID = "android", + DESKTOP = "desktop", + EMBEDDED = "embedded", + IOS = "ios", + PS4 = "ps4", + PS5 = "ps5", + SAMSUNG = "samsung", + XBOX = "xbox", +} + +export const enum ActivityPlatform { + DESKTOP = "desktop", + MOBILE = "mobile", +} + +export interface ActivityTimestamps { + end?: number; + start?: number; +} + +// Original name: ActivityTypes +export const enum ActivityType { + PLAYING = 0, + STREAMING = 1, + LISTENING = 2, + WATCHING = 3, + CUSTOM_STATUS = 4, + COMPETING = 5, + HANG_STATUS = 6, +} diff --git a/packages/discord-types/src/general/ReadState.d.ts b/packages/discord-types/src/general/ReadState.d.ts new file mode 100644 index 000000000..18edc555d --- /dev/null +++ b/packages/discord-types/src/general/ReadState.d.ts @@ -0,0 +1,160 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export class ReadState { + constructor( + channelId?: string | undefined, + readStateType?: ReadStateType | undefined /* = ReadStateType.CHANNEL */ + ); + + static clear(e?: any, t?: any): any; // TEMP + static clearAll(): void; + static forEach(e?: any): void; // TEMP + static get(e?: any, t?: any): any; // TEMP + static getGuildSentinels(e?: any): any; // TEMP + static getIfExists(e?: any, t?: any): any; // TEMP + static getMentionChannelIds(): any; // TEMP + static getValue(e?: any, t?: any, n?: any, i?: any): any; // TEMP + static resetGuildSentinels(): void; + + _ack(e?: any, t?: any): void; // TEMP + _nonChannelAck(): void; + _shouldAck(e?: any, t?: any, n?: any): boolean; // TEMP + ack(e?: any): boolean; // TEMP + get ackMessageId(): any; // TEMP + set ackMessageId(e: any); // TEMP + ackPins(t?: any): boolean; // TEMP + canBeUnread(): boolean; + canHaveMentions(): boolean; + canTrackUnreads(): boolean; + clearOutgoingAck(): void; + delete(t?: any): void; // TEMP + deserializeForOverlay(e?: any): any; // TEMP + getAckTimestamp(): any; // TEMP + getGuildChannelUnreadState(e?: any, t?: any, n?: any, i?: any, r?: any): any; // TEMP + getMentionCount(): number; + guessAckMessageId(): any; // TEMP + get guildId(): any; // TEMP + handleGuildEventRemoval(e?: any, t?: any): void; // TEMP + hasMentions(): boolean; + hasRecentlyVisitedAndRead(): boolean; + hasUnread(): boolean; + hasUnreadOrMentions(): boolean; + incrementGuildUnreadsSentinel(): void; + isForumPostUnread(): boolean; + isPrivate(): boolean; + get lastMessageId(): any; // TEMP + set lastMessageId(e: any); // TEMP + get lastMessageTimestamp(): any; // TEMP + get mentionCount(): any; // TEMP + set mentionCount(e: any); // TEMP + get oldestUnreadMessageId(): any; // TEMP + set oldestUnreadMessageId(e: any); // TEMP + get oldestUnreadTimestamp(): number; + rebuildChannelState(e?: any, t?: any, n?: any): void; // TEMP + recalculateFlags(): ReadStateFlags | undefined; + recordLastViewedTime(): void; + serialize(e?: any): any; // TEMP + shouldDeleteReadState(e?: any): boolean; + syncThreadSettings(): boolean; + takeSnapshot(): ReadStateSnapshot; + get unreadCount(): any; // TEMP + set unreadCount(e: any); // TEMP + + _ackMessageId: string | number | null; + _ackMessageTimestamp: number; + _guildId: string | null; + _isActiveThread: boolean; + _isJoinedThread: boolean; + _isResourceChannel: boolean; + _isThread: boolean; + _lastMessageId: string | null; + _lastMessageTimestamp: number; + _mentionCount: number; + _oldestUnreadMessageId: string | null; + _persisted: boolean; + _unreadCount: number; + ackedWhileCached: undefined; + ackMessageIdAtChannelSelect: string | number | null; + ackPinTimestamp: number; + channelId: string | undefined; + estimated: boolean; + flags: ReadStateFlags | undefined; + isManualAck: boolean; + lastPinTimestamp: number; + lastViewed: number | undefined; + loadedMessages: boolean; + oldestUnreadMessageIdStale: boolean; + outgoingAck: any/* | null */; // TEMP + outgoingAckTimer: any/* | null */; // TEMP + snapshot: ReadStateSnapshot | undefined; + type: ReadStateType; +} + +export interface ReadStateSnapshot { + guildMentionCount: number; + guildUnread: boolean; + mentionCount: number; + takenAt: number; + unread: boolean; +} + +/** @todo Come up with a name for each union member. */ +export type SerializedReadState = { + _ackMessageId: string | number | null; + _ackMessageTimestamp: number; + _guildId: string | null; + _isActiveThread?: boolean; + _isJoinedThread?: boolean; + _isThread?: boolean; + _lastMessageId: string | null; + _lastMessageTimestamp: number; + _mentionCount: number; + _persisted: boolean; + ackPinTimestamp: number; + channelId: string | undefined; + flags: ReadStateFlags | undefined; + lastPinTimestamp: number; + lastViewed?: number; + type: ReadStateType; +} | { + _ackMessageId: string | number | null; + _ackMessageTimestamp: number; + _guildId: string | null; + _isActiveThread: boolean; + _isJoinedThread: boolean; + _isThread: boolean; + _lastMessageId: string | null; + _lastMessageTimestamp: number; + _mentionCount: number; + _oldestUnreadMessageId: string | null; + _persisted: boolean; + ackPinTimestamp: number; + channelId: string | undefined; + estimated: boolean; + flags: ReadStateFlags | undefined; + isManualAck: boolean; + lastPinTimestamp: number; + lastViewed: number | undefined; + loadedMessages: boolean; + oldestUnreadMessageIdStale: boolean; + type: ReadStateType; +}; + +export const enum ReadStateFlags { + IS_GUILD_CHANNEL = 1 << 0, + IS_THREAD = 1 << 1, +} + +// Original name: ReadStateTypes +export const enum ReadStateType { + CHANNEL = 0, + GUILD_EVENT = 1, + NOTIFICATION_CENTER = 2, + GUILD_HOME = 3, + GUILD_ONBOARDING_QUESTION = 4, + MESSAGE_REQUESTS = 5, +} diff --git a/packages/discord-types/src/general/index.d.ts b/packages/discord-types/src/general/index.d.ts index 660284427..16c33f613 100644 --- a/packages/discord-types/src/general/index.d.ts +++ b/packages/discord-types/src/general/index.d.ts @@ -4,6 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +export * from "./Activity"; export * from "./ApplicationRecord"; export * from "./ChannelMessages"; export * from "./channels"; @@ -16,6 +17,7 @@ export * from "./GuildRecord"; export * from "./ImmutableRecord"; export * from "./MessageRecord"; export * from "./misc"; +export * from "./ReadState"; export * from "./Role"; export * from "./UserProfile"; export * from "./UserRecord"; diff --git a/packages/discord-types/src/stores/PresenceStore.d.ts b/packages/discord-types/src/stores/PresenceStore.d.ts index b352d9b97..57440e571 100644 --- a/packages/discord-types/src/stores/PresenceStore.d.ts +++ b/packages/discord-types/src/stores/PresenceStore.d.ts @@ -5,57 +5,66 @@ */ import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { Activity } from "../general/Activity"; +import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; export type PresenceStoreAction = ExtractAction; -// Does not extend PersistedStore. export class PresenceStore extends FluxStore { static displayName: "PresenceStore"; - findActivity(e?: any, t?: any): any; // TEMP - getActivities(e?: any): any; // TEMP - getActivityMetadata(e?: any): any; // TEMP - getAllApplicationActivities(e?: any): any; // TEMP - getApplicationActivity(e?: any, t?: any): any; // TEMP - getClientStatus(userId: string): Partial> | undefined; + findActivity( + userId: string, + predicate: ( + value: Activity, + index: number, + array: Activity[] + ) => value is T, + guildId?: string | Nullish /* = null */ + ): T | undefined; + findActivity( + userId: string, + predicate: ( + value: Activity, + index: number, + array: Activity[] + ) => unknown, + guildId?: string | Nullish /* = null */ + ): Activity | undefined; + getActivities(userId: string, guildId?: string | Nullish /* = null */): Activity[]; + getActivityMetadata(userId: string): Record | undefined; + getAllApplicationActivities(applicationId?: Activity["application_id"]): { + activity: Activity; + userId: string; + }[]; + getApplicationActivity( + userId: string, + applicationId?: Activity["application_id"], + guildId?: string | Nullish /* = null */ + ): Activity | undefined; + getClientStatus(userId: string): ClientStatusMap | undefined; getLastOnlineTimestamp(userId: string): number | undefined; - getPrimaryActivity(e?: any): any; // TEMP + getPrimaryActivity(userId: string, guildId?: string | Nullish /* = null */): Activity | undefined; getState(): { - activities: any; // TEMP - activityMetadata: any; // TEMP - clientStatuses: any; // TEMP - lastOnlineTimestamps: any; // TEMP - presencesForGuilds: any; // TEMP - statuses: any; // TEMP - }; // TEMP - getStatus(e?: any): any; // TEMP + activities: { [userId: string]: Activity[]; }; + activityMetadata: { [userId: string]: Record; }; + clientStatuses: { [userId: string]: ClientStatusMap; }; + lastOnlineTimestamps: { [userId: string]: number; }; + presencesForGuilds: { [userId: string]: { [guildId: string]: GuildPresence; }; }; + statuses: { [userId: string]: StatusType; }; + }; + getStatus( + userId: string, + guildId?: string | Nullish /* = null */, + defaultStatus?: StatusType | undefined /* = StatusType.OFFLINE */ + ): StatusType; getUserIds(): string[]; isMobileOnline(userId: string): boolean; - setCurrentUserOnConnectionOpen(e?: any, t?: any): any; // TEMP + setCurrentUserOnConnectionOpen(status: StatusType, activities: Activity[]): void; } -/** @todo Might have more properties. */ -export interface Activity { - application_id: any; // TEMP - assets: any; // TEMP - buttons: any; // TEMP - created_at: any; // TEMP - details: any; // TEMP - emoji: any; // TEMP - flags: any; // TEMP - id: any; // TEMP - name: any; // TEMP - party: any; // TEMP - platform: any; // TEMP - session_id: any; // TEMP - state: any; // TEMP - supported_platforms: any; // TEMP - sync_id: any; // TEMP - timestamps: any; // TEMP - type: any; // TEMP - url: any; // TEMP -} +export type ClientStatusMap = Partial>; // Original name: ClientTypes export const enum ClientType { @@ -75,3 +84,10 @@ export const enum StatusType { STREAMING = "streaming", UNKNOWN = "unknown", } + +export interface GuildPresence { + activities: Activity[]; + clientStatus: ClientStatusMap; + status: StatusType; + timestamp: number; +} diff --git a/packages/discord-types/src/stores/ReadStateStore.d.ts b/packages/discord-types/src/stores/ReadStateStore.d.ts index d34a2d8cc..82f806e56 100644 --- a/packages/discord-types/src/stores/ReadStateStore.d.ts +++ b/packages/discord-types/src/stores/ReadStateStore.d.ts @@ -5,6 +5,9 @@ */ import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { GuildRecord } from "../general"; +import type { ReadState, ReadStateSnapshot, ReadStateType, SerializedReadState } from "../general/ReadState"; +import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; export type ReadStateStoreAction = ExtractAction; @@ -12,30 +15,42 @@ export type ReadStateStoreAction = ExtractAction extends FluxStore { static displayName: "ReadStateStore"; - ackMessageId(e?: any): any; // TEMP - getAllReadStates(e?: any): any; // TEMP - getForDebugging(e?: any): any; // TEMP + ackMessageId(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): any; // TEMP + getAllReadStates(e?: any): SerializedReadState; // TEMP + getForDebugging(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): ReadState; getGuildChannelUnreadState(e?: any, t?: any, n?: any, i?: any, r?: any): any; // TEMP getGuildUnreadsSentinel(e?: any): any; // TEMP - getMentionChannelIds(): any; // TEMP - getMentionCount(e?: any): any; // TEMP + getMentionChannelIds(): string[]; + getMentionCount(channelId: string): number; getNonChannelAckId(e?: any): any; // TEMP getNotifCenterReadState(e?: any): any; // TEMP - getOldestUnreadMessageId(e?: any): any; // TEMP - getOldestUnreadTimestamp(e?: any): any; // TEMP - getReadStatesByChannel(): any; // TEMP - getSnapshot(e?: any, t?: any): any; // TEMP - getTrackedAckMessageId(e?: any): any; // TEMP - getUnreadCount(e?: any): any; // TEMP - hasOpenedThread(e?: any): any; // TEMP - hasRecentlyVisitedAndRead(e?: any): any; // TEMP - hasTrackedUnread(e?: any): any; // TEMP - hasUnread(e?: any): any; // TEMP - hasUnreadPins(e?: any): any; // TEMP - isEstimated(e?: any): any; // TEMP - isForumPostUnread(e?: any): any; // TEMP - isNewForumThread(e?: any, t?: any, n?: any): any; // TEMP - lastMessageId(e?: any): any; // TEMP - lastMessageTimestamp(e?: any): any; // TEMP - lastPinTimestamp(e?: any): any; // TEMP + getOldestUnreadMessageId(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): any; // TEMP + getOldestUnreadTimestamp(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): any; // TEMP + getReadStatesByChannel(): { [channelId: string]: ReadState; }; + getSnapshot(e?: any, t?: any): ReadStateSnapshot; // TEMP + getTrackedAckMessageId(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): any; // TEMP + getUnreadCount(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): number; + hasOpenedThread(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + hasRecentlyVisitedAndRead(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; // TEMP + hasTrackedUnread(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; // TEMP + hasUnread(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + hasUnreadPins(channelId: string): boolean; + isEstimated(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + isForumPostUnread(threadId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + isNewForumThread(forumThreadId: string, forumId: string, guild?: GuildRecord | Nullish): boolean; + /** + * Returns the ID of the last message in the channel associated with the specified ID. + * @returns The ID of the channel's last message or null if no messages have ever been sent in the channel. If the channel has not been fetched, null is returned. + */ + lastMessageId(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): string | null; + /** + * Returns the timestamp of the last message in the channel associated with the specified ID. + * @returns The timestamp of the channel's last message or 0 if no messages have ever been sent in the channel. If the channel has not been fetched, 0 is returned. + */ + lastMessageTimestamp(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): number; + /** + * Returns the timestamp of the last pin in the channel associated with the specified ID. + * @returns The timestamp of the channel's last pin or 0 if the channel has no pins. If the channel has not been fetched, null is returned. + */ + lastPinTimestamp(channelId: string): number | null; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e030bf0e..03090e9e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -178,8 +178,8 @@ importers: specifier: ^5.4.5 version: 5.4.5 typescript-eslint: - specifier: ^8.0.0-alpha.24 - version: 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + specifier: ^8.0.0-alpha.25 + version: 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) packages/vencord-types: dependencies: @@ -633,8 +633,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.0.0-alpha.24': - resolution: {integrity: sha512-14rK2L+ayITgprWmtaoI7ImzAZtHpnzQ7ujKJDQP6FrLSpd2Xv9ndViiG1XvhXYnwH1ppHGRZDzOkOMmDgp3Mg==} + '@typescript-eslint/eslint-plugin@8.0.0-alpha.25': + resolution: {integrity: sha512-IixQVZhrJ6rVd5Rx/WFGoIKLSXcMsueWa4bmnGlGTKSb4l+E+ORtEEY7RiXXeWK4mPgVpHHWZEElSdfflznpxA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -654,8 +654,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.0.0-alpha.24': - resolution: {integrity: sha512-Dpt40m3taG7Eidv6F1WLvMmt3mGDNib8l/rYiY+7CwjijgXYmwsX95W/P2+fW6LeBvB8ATIEcbSbdX7TUmcg5Q==} + '@typescript-eslint/parser@8.0.0-alpha.25': + resolution: {integrity: sha512-7CU44JP/FlZL/2dXwmU3BJ5tY1755FD190yCiiRYs41ds+CXdLlwkFD5PYVYPu+SFDT6trBnPo6d35ttHiDNnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -668,8 +668,8 @@ packages: resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.0.0-alpha.24': - resolution: {integrity: sha512-ATe1bLKAyJ3alyrAoC0Wel1mnBThFB0/OBoXHp9GKoiTHdqJAhs2cCgZOgQWyJmWLiLFQHLyJj3EIFpoaDOX+Q==} + '@typescript-eslint/scope-manager@8.0.0-alpha.25': + resolution: {integrity: sha512-QPaOIVNwL7rl8QDK/GszySHARQ++QCBYooIRb3UnqaIzZrQPPx0ZqkiYdvi6NZOMxqOKo02jEelGYiqbdEAPDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@7.11.0': @@ -682,8 +682,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.0.0-alpha.24': - resolution: {integrity: sha512-jNh21K0/2aTekfPQAONImIEi0yTsLLH/dmOjuXLEX56QniTPoMKFrO9JYVUfjTRIlEHl8/F8VDv9yTINNcx/2w==} + '@typescript-eslint/type-utils@8.0.0-alpha.25': + resolution: {integrity: sha512-s5Y32/BL8qIfGMTyN0IQ5ZvYu8nVBzqjjUQncWKOHcqXrjQxgRteBScNgLXsJ20cjTgaEmPjMRvnR0k3Zcslvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -695,8 +695,8 @@ packages: resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.0.0-alpha.24': - resolution: {integrity: sha512-MwBAoDe8nf1KrquszS586fHp+b9LV4jd2zEzwB6FdfLmJavyHrJGVFmCVSoDNZ40MqCQklgY78px6TXnKulCfg==} + '@typescript-eslint/types@8.0.0-alpha.25': + resolution: {integrity: sha512-9C5VuCWi75jcgr/hQ/+9HVHjXv/7IyKHM5DMPZDWXrfvXS39UGYyDUx77PMHl+rre6Iz9kR/8TQUJdBX33iwzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.11.0': @@ -708,8 +708,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.0.0-alpha.24': - resolution: {integrity: sha512-d/WTeR5eG9BboB9rPdcv7o8fZV4Jyy643Xxb9s0O9xX2X5oZrj5lqD7O/J+9aT9l/iE4U81sp1bceQKoUDJq0A==} + '@typescript-eslint/typescript-estree@8.0.0-alpha.25': + resolution: {integrity: sha512-+gThr9Q6t8aoiRn0PKGo79Vj/fvfFaCi31ugsoSzzccs0lO1f/zKSOXQAuqBiAVF/TuiuTA2FNAn1mO+UhnQqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -723,8 +723,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.0.0-alpha.24': - resolution: {integrity: sha512-Ph3Mvh+KRlf8zPmhyFqSpDVCyfcCfNd7mLujLWzXo/TgJfXbdjjs7CLv8yc+tmB7zwgiv/XIeul1iyYUVKjMEw==} + '@typescript-eslint/utils@8.0.0-alpha.25': + resolution: {integrity: sha512-L129Op2k+Rx9SIY03yAXu5unfvQDLZIHDZnRiKBYSEI8HTPhhe36v0EQebZxvbkfkoAU8+M5T7SKc1cP4L2yJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -733,8 +733,8 @@ packages: resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.0.0-alpha.24': - resolution: {integrity: sha512-9gu8YsifuPFXC1ZDPEXroGon1/IbSXD5bYFs6mmE8GwVo++Z1UTaO3tjTp+k/b85d8MBRkhetgBSFKKsIWetTw==} + '@typescript-eslint/visitor-keys@8.0.0-alpha.25': + resolution: {integrity: sha512-9vnWmeuzFWpPhHsY+eBZQl1TA9MXAXwSTp84X4fcff2cqytaXw1hyK2+M/qrza5FSTdyl41c4hv2XSYkRC9HVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -2696,8 +2696,8 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript-eslint@8.0.0-alpha.24: - resolution: {integrity: sha512-YZD7Uz/8oze7Eal4REHRrltl7I7dg6A05sIVzZnkppRXvmUPTSBOPNwKoEkmAursQiVMasjAIYHR166t6IS/2w==} + typescript-eslint@8.0.0-alpha.25: + resolution: {integrity: sha512-gQsFB1mdtxduwOCXpgKTIDyyZ38iaam443/Kf8LYbKbt8rMCgz3HRYVR8sp8QF9H26MgTrYE7jGqfWXWYowTcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3234,14 +3234,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.0.0-alpha.24(@typescript-eslint/parser@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.0.0-alpha.25(@typescript-eslint/parser@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.0.0-alpha.24 - '@typescript-eslint/type-utils': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.24 + '@typescript-eslint/parser': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.25 + '@typescript-eslint/type-utils': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.25 eslint: 9.4.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -3265,12 +3265,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/parser@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.0.0-alpha.24 - '@typescript-eslint/types': 8.0.0-alpha.24 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.24(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.24 + '@typescript-eslint/scope-manager': 8.0.0-alpha.25 + '@typescript-eslint/types': 8.0.0-alpha.25 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.25(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.25 debug: 4.3.4 eslint: 9.4.0 optionalDependencies: @@ -3283,10 +3283,10 @@ snapshots: '@typescript-eslint/types': 7.11.0 '@typescript-eslint/visitor-keys': 7.11.0 - '@typescript-eslint/scope-manager@8.0.0-alpha.24': + '@typescript-eslint/scope-manager@8.0.0-alpha.25': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.24 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.24 + '@typescript-eslint/types': 8.0.0-alpha.25 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.25 '@typescript-eslint/type-utils@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: @@ -3300,10 +3300,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.0-alpha.24(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.0.0-alpha.25(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) debug: 4.3.4 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -3314,7 +3314,7 @@ snapshots: '@typescript-eslint/types@7.11.0': {} - '@typescript-eslint/types@8.0.0-alpha.24': {} + '@typescript-eslint/types@8.0.0-alpha.25': {} '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': dependencies: @@ -3331,10 +3331,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.0.0-alpha.24(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.0.0-alpha.25(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.24 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.24 + '@typescript-eslint/types': 8.0.0-alpha.25 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.25 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3368,12 +3368,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) - '@typescript-eslint/scope-manager': 8.0.0-alpha.24 - '@typescript-eslint/types': 8.0.0-alpha.24 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.24(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.25 + '@typescript-eslint/types': 8.0.0-alpha.25 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.25(typescript@5.4.5) eslint: 9.4.0 transitivePeerDependencies: - supports-color @@ -3384,9 +3384,9 @@ snapshots: '@typescript-eslint/types': 7.11.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.0.0-alpha.24': + '@typescript-eslint/visitor-keys@8.0.0-alpha.25': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.24 + '@typescript-eslint/types': 8.0.0-alpha.25 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -5543,11 +5543,11 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript-eslint@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5): + typescript-eslint@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0-alpha.24(@typescript-eslint/parser@8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/parser': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.24(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.0.0-alpha.25(@typescript-eslint/parser@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/parser': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: From 2c9b6e9af3b0396d52b1cbefec1b37612072cd80 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:25:08 -0400 Subject: [PATCH 024/126] Progress --- package.json | 8 +- packages/LICENSE | 674 ++++++++++++++++++ packages/discord-types/package.json | 3 +- .../discord-types/src/general/Frecency.d.ts | 55 ++ .../discord-types/src/general/ReadState.d.ts | 6 +- .../src/general/emojis/Emoji.d.ts | 78 ++ .../general/emojis/EmojiDisambiguations.d.ts | 60 ++ .../src/general/emojis/GuildEmojis.d.ts | 35 + .../src/general/emojis/index.d.ts | 9 + packages/discord-types/src/general/index.d.ts | 2 + .../discord-types/src/stores/EmojiStore.d.ts | 81 ++- packages/discord-types/tsconfig.json | 3 +- packages/vencord-types/.gitignore | 1 + packages/vencord-types/package.json | 35 +- pnpm-lock.yaml | 607 +++++++++++----- 15 files changed, 1452 insertions(+), 205 deletions(-) create mode 100644 packages/LICENSE create mode 100644 packages/discord-types/src/general/Frecency.d.ts create mode 100644 packages/discord-types/src/general/emojis/Emoji.d.ts create mode 100644 packages/discord-types/src/general/emojis/EmojiDisambiguations.d.ts create mode 100644 packages/discord-types/src/general/emojis/GuildEmojis.d.ts create mode 100644 packages/discord-types/src/general/emojis/index.d.ts diff --git a/package.json b/package.json index 5bf9c05c7..c2857abb2 100644 --- a/package.json +++ b/package.json @@ -51,12 +51,12 @@ "@types/chrome": "^0.0.246", "@types/diff": "^5.0.3", "@types/lodash": "~4.17.4", - "@types/node": "^18.16.3", + "@types/node": "^18.19.33", "@types/react": "~18.2.21", "@types/react-dom": "~18.2.7", "@types/yazl": "^2.4.2", - "@typescript-eslint/eslint-plugin": "^7.11.0", - "@typescript-eslint/parser": "^7.11.0", + "@typescript-eslint/eslint-plugin": "^7.12.0", + "@typescript-eslint/parser": "^7.12.0", "@vencord/discord-types": "workspace:^", "diff": "^5.1.0", "discord-types": "^1.3.26", @@ -66,7 +66,7 @@ "eslint-plugin-path-alias": "^1.1.0", "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-unused-imports": "^3.2.0", - "highlight.js": "10.6.0", + "highlight.js": "11.7.0", "html-minifier-terser": "^7.2.0", "moment": "2.22.2", "puppeteer-core": "^19.11.1", diff --git a/packages/LICENSE b/packages/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/packages/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index b270afa8c..08efb0352 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -20,6 +20,7 @@ "types": "./src/index.d.ts", "dependencies": { "@types/events": "~3.0.3", + "@types/lodash": "~4.17.4", "dependency-graph": "0.9.0", "moment": "2.22.2", "type-fest": "^4.18.3" @@ -33,6 +34,6 @@ "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-unicorn": "^53.0.0", "typescript": "^5.4.5", - "typescript-eslint": "^8.0.0-alpha.25" + "typescript-eslint": "^8.0.0-alpha.26" } } diff --git a/packages/discord-types/src/general/Frecency.d.ts b/packages/discord-types/src/general/Frecency.d.ts new file mode 100644 index 000000000..0fc3b2a08 --- /dev/null +++ b/packages/discord-types/src/general/Frecency.d.ts @@ -0,0 +1,55 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../internal"; + +export class Frecency { + constructor(options: { + afterCompute: Frecency["afterCompute"]; + computeBonus: Frecency["computeBonus"]; + computeWeight: Frecency["computeWeight"]; + lookupKey: Frecency["lookupKey"]; + maxSamples?: number | undefined /* = 10 */; + numFrequentlyItems?: number | undefined /* = 32 */; + }); + + compute(): void; + get frequently(): Value[]; + set frequently(values: Value[]); + getEntry(key?: Key | Nullish): FrecencyUsageHistory | Nullish; + getFrecency(key?: Key | Nullish): number | null; + getScore(key?: Key | Nullish): number | null; + isDirty(): boolean; + markDirty(): void; + overwriteHistory( + usageHistory?: Omit | Nullish, + track?: { + key?: Key | Nullish; + timestamp?: number | Nullish; + }[] | Nullish + ): void; + track(key?: Key | Nullish, timestamp?: number | Nullish): void; + + _frequently: Value[]; + afterCompute: ( + usageHistory: Frecency["usageHistory"], + frequently: Frecency["frequently"] + ) => void; + computeBonus: (key: Key) => number; + computeWeight: (daysSinceUsage: number) => number; + dirty: boolean; + lookupKey: (key: Key) => Value; + maxSamples: number; + numFrequentlyItems: number; + usageHistory: Record; +} + +export interface FrecencyUsageHistory { + frecency: number; + recentUses: number[]; + score: number; + totalUses: number; +} diff --git a/packages/discord-types/src/general/ReadState.d.ts b/packages/discord-types/src/general/ReadState.d.ts index 18edc555d..9025fe83c 100644 --- a/packages/discord-types/src/general/ReadState.d.ts +++ b/packages/discord-types/src/general/ReadState.d.ts @@ -57,12 +57,12 @@ export class ReadState { rebuildChannelState(e?: any, t?: any, n?: any): void; // TEMP recalculateFlags(): ReadStateFlags | undefined; recordLastViewedTime(): void; - serialize(e?: any): any; // TEMP + serialize(e?: any): SerializedReadState; // TEMP shouldDeleteReadState(e?: any): boolean; syncThreadSettings(): boolean; takeSnapshot(): ReadStateSnapshot; - get unreadCount(): any; // TEMP - set unreadCount(e: any); // TEMP + get unreadCount(): number; + set unreadCount(count: number); // TEMP _ackMessageId: string | number | null; _ackMessageTimestamp: number; diff --git a/packages/discord-types/src/general/emojis/Emoji.d.ts b/packages/discord-types/src/general/emojis/Emoji.d.ts new file mode 100644 index 000000000..a4d78bb62 --- /dev/null +++ b/packages/discord-types/src/general/emojis/Emoji.d.ts @@ -0,0 +1,78 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../../internal"; + +export type Emoji = UnicodeEmoji | GuildEmoji; + +export interface GuildEmoji { + allNamesString: string; + animated: boolean; + available: boolean; + guildId: string; + id: string; + managed: false; + name: string; + originalName?: string; + /** False for emoticons. */ + require_colons: boolean; + roles: string[]; + type: EmojiType.GUILD; +} + +// Original name: Emoji +export class UnicodeEmoji { + constructor(emojiObject: UnicodeEmojiObject | UnicodeEmojiObjectDiversityChild); + + get allNamesString(): string; + get animated(): false; + get defaultDiversityChild(): UnicodeEmojiObjectDiversityChild | Nullish; + forEachDiversity(callback: (value: string, index: number, array: string[]) => unknown): any; + forEachName(callback: (value: string, index: number, array: string[]) => unknown): void; + get hasDiversity(): UnicodeEmojiObject["hasDiversity"]; + get hasDiversityParent(): UnicodeEmojiObjectDiversityChild["hasDiversityParent"]; + get hasMultiDiversity(): UnicodeEmojiObject["hasMultiDiversity"]; + get hasMultiDiversityParent(): UnicodeEmojiObjectDiversityChild["hasMultiDiversityParent"]; + get managed(): true; + get name(): string; + get names(): UnicodeEmojiObject["names"]; + get optionallyDiverseSequence(): string; + setSpriteSheetIndex(index: number): void; + get unicodeVersion(): number; + get url(): string; + + diversityChildren: { [diversity: string]: UnicodeEmojiObjectDiversityChild; }; + emojiObject: UnicodeEmojiObject; + guildId: undefined; + id: undefined; + index: number | undefined; + originalName: string | undefined; + surrogates: string; + type: EmojiType.UNICODE; + uniqueName: string; + useSpriteSheet: boolean | undefined; +} + +export interface UnicodeEmojiObject { + diversityChildren?: UnicodeEmojiObjectDiversityChild[]; + hasDiversity?: boolean; + hasMultiDiversity?: boolean; + names: [string, ...string[]]; + surrogates: string; + unicodeVersion?: number; +} + +export interface UnicodeEmojiObjectDiversityChild extends Pick { + diversity: [string, string?]; + hasDiversityParent?: boolean; + hasMultiDiversityParent?: boolean; +} + +// Original name: EmojiTypes +export const enum EmojiType { + UNICODE = 0, + GUILD = 1, +} diff --git a/packages/discord-types/src/general/emojis/EmojiDisambiguations.d.ts b/packages/discord-types/src/general/emojis/EmojiDisambiguations.d.ts new file mode 100644 index 000000000..44d22e372 --- /dev/null +++ b/packages/discord-types/src/general/emojis/EmojiDisambiguations.d.ts @@ -0,0 +1,60 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { CollectionChain } from "lodash"; + +import type { Defined, Nullish } from "../../internal"; +import type { Emoji, EmojiType, GuildEmoji, UnicodeEmoji } from "./Emoji"; + +export class EmojiDisambiguations { + constructor(guildId: string | null); + + static _lastInstance: EmojiDisambiguations | null; + static clear(guildId: string): void; + static get(guildId?: string | Nullish): EmojiDisambiguations; + static reset(): void; + static resetFavorites(): void; + static resetFrequentlyUsed(): void; + + _buildDisambiguatedCustomEmoji(): void; + ensureDisambiguated(): void; + get favoriteEmojisWithoutFetchingLatest(): Emoji[]; + getById(emojiId: string): GuildEmoji | undefined; + getByName(emojiName: string): + (Type extends EmojiType.GUILD ? GuildEmoji : UnicodeEmoji) | undefined; + getCustomEmoji(): Defined; + getCustomEmoticonRegex(): RegExp | null; + getDisambiguatedEmoji(): Emoji[]; + getEmojiInPriorityOrderWithoutFetchingLatest(): Emoji[]; + getEmoticonByName(emoticonName: string): GuildEmoji | undefined; + getEscapedCustomEmoticonNames(): string; + getFrequentlyUsedEmojisWithoutFetchingLatest(): Emoji[]; + getGroupedCustomEmoji(): Defined; + getNewlyAddedEmojiForGuild(guildId: string): GuildEmoji[]; + getTopEmojiWithoutFetchingLatest(guildId: string): GuildEmoji[]; + nameMatchesChain(predicate: (value: string, index: number, array: string[]) => unknown): CollectionChain; + rebuildFavoriteEmojisWithoutFetchingLatest(): { + favoriteNamesAndIds: Set; + favorites: Emoji[]; + }; + + customEmojis: { [emojiName: string]: GuildEmoji; } | undefined; + disambiguatedEmoji: Emoji[] | null; + emojisById: { [emojiId: string]: GuildEmoji; } | undefined; + emojisByName: { [emojiName: string]: Emoji; } | undefined; + emoticonRegex: RegExp | null; + emoticonsByName: { [emoticonName: string]: GuildEmoji; } | undefined; + escapedEmoticonNames: string | null; + favoriteNamesAndIds: Set | null; + favorites: Emoji[] | null; + frequentlyUsed: Emoji[] | null; + groupedCustomEmojis: { [guildId: string]: GuildEmoji; } | undefined; + guildId: string | null; + isFavoriteEmojiWithoutFetchingLatest: (emoji?: Emoji | Nullish) => boolean; + newlyAddedEmoji: { [guildId: string]: GuildEmoji; } | null; + topEmojis: GuildEmoji[] | null; + unicodeAliases: Record | undefined; +} diff --git a/packages/discord-types/src/general/emojis/GuildEmojis.d.ts b/packages/discord-types/src/general/emojis/GuildEmojis.d.ts new file mode 100644 index 000000000..a7761f684 --- /dev/null +++ b/packages/discord-types/src/general/emojis/GuildEmojis.d.ts @@ -0,0 +1,35 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { GuildEmoji } from "./Emoji"; + +export class GuildEmojis { + constructor( + guildId: string, + userId: string, + emojis: GuildEmoji[], + canSeeServerSubIAP?: boolean | undefined /* = false */ + ); + + build(): void; + get emojis(): GuildEmoji[]; + get emoticons(): GuildEmoji[]; + getEmoji(emojiId: string): GuildEmoji | undefined; + getUsableEmoji(emojiId: string): GuildEmoji | null; + isUsable(emoji: GuildEmoji): boolean; + get rawEmojis(): GuildEmoji[]; + get usableEmojis(): GuildEmoji[]; + + _canSeeServerSubIAP: boolean; + _dirty: boolean; + _emojiMap: { [emojiId: string]: GuildEmoji; }; + _emojis: GuildEmoji[]; + _emoticons: GuildEmoji[]; + _totalUsable: number; + _usableEmojis: GuildEmoji[]; + _userId: string; + id: string; +} diff --git a/packages/discord-types/src/general/emojis/index.d.ts b/packages/discord-types/src/general/emojis/index.d.ts new file mode 100644 index 000000000..3683db1ce --- /dev/null +++ b/packages/discord-types/src/general/emojis/index.d.ts @@ -0,0 +1,9 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export * from "./Emoji"; +export * from "./EmojiDisambiguations"; +export * from "./GuildEmojis"; diff --git a/packages/discord-types/src/general/index.d.ts b/packages/discord-types/src/general/index.d.ts index 16c33f613..4250de7ed 100644 --- a/packages/discord-types/src/general/index.d.ts +++ b/packages/discord-types/src/general/index.d.ts @@ -11,6 +11,8 @@ export * from "./channels"; export * from "./Clan"; export * from "./CompanyRecord"; export * from "./Draft"; +export * from "./emojis"; +export * from "./Frecency"; export * from "./GuildMember"; export * from "./GuildMemberProfile"; export * from "./GuildRecord"; diff --git a/packages/discord-types/src/stores/EmojiStore.d.ts b/packages/discord-types/src/stores/EmojiStore.d.ts index 219d8d5a4..b291c707e 100644 --- a/packages/discord-types/src/stores/EmojiStore.d.ts +++ b/packages/discord-types/src/stores/EmojiStore.d.ts @@ -5,11 +5,19 @@ */ import type { ExtractAction, FluxAction } from "../flux/fluxActions"; -import type { GenericConstructor } from "../internal"; +import type { ChannelRecord } from "../general/channels/ChannelRecord"; +import type { Emoji, GuildEmoji } from "../general/emojis/Emoji"; +import type { EmojiDisambiguations } from "../general/emojis/EmojiDisambiguations"; +import type { GuildEmojis } from "../general/emojis/GuildEmojis"; +import type { Frecency } from "../general/Frecency"; +import type { GenericConstructor, Nullish } from "../internal"; import type { FluxPersistedStore } from "./abstract/FluxPersistedStore"; export interface EmojiStoreState { - [key: string]: any; // TEMP + pendingUsages: { + key: string; + timestamp: number; + }[]; } export type EmojiStoreAction = ExtractAction; @@ -22,25 +30,56 @@ export class EmojiStore< static displayName: "EmojiStore"; static persistKey: "EmojiStoreV2"; - get categories(): any; // TEMP - get diversitySurrogate(): any; // TEMP - get emojiFrecencyWithoutFetchingLatest(): any; // TEMP - getCustomEmojiById(e?: any): any; // TEMP - getDisambiguatedEmojiContext(e?: any): any; // TEMP - getEmojiAutosuggestion(e?: any): any; // TEMP - getGuildEmoji(e?: any): any; // TEMP - getGuilds(): any; // TEMP - getNewlyAddedEmoji(e?: any): any; // TEMP - getSearchResultsOrder(e?: any, t?: any, n?: any): any; // TEMP + get categories(): string[]; + get diversitySurrogate(): string; + get emojiFrecencyWithoutFetchingLatest(): Frecency; + getCustomEmojiById(emojiId: string): GuildEmoji | undefined; + getDisambiguatedEmojiContext(guildId?: string | Nullish): EmojiDisambiguations | undefined; + getEmojiAutosuggestion(channel?: ChannelRecord): Emoji[]; + getGuildEmoji(guildId: string): GuildEmoji[]; + getGuilds(): { [guildId: string]: GuildEmojis; }; + getNewlyAddedEmoji(guildId?: string | Nullish): GuildEmoji[]; + /** If count is less than or equal to 0, all results will be returned. */ + getSearchResultsOrder(emojis: Emoji[], query: string, count: number): Emoji[]; getState(): State; - getTopEmoji(e?: any): any; // TEMP - getTopEmojisMetadata(e?: any): any; // TEMP - getUsableCustomEmojiById(e?: any): any; // TEMP - getUsableGuildEmoji(e?: any): any; // TEMP - hasFavoriteEmojis(e?: any): any; // TEMP - hasPendingUsage(): any; // TEMP - hasUsableEmojiInAnyGuild(): any; // TEMP + getTopEmoji(guildId?: string | Nullish): GuildEmoji[]; + getTopEmojisMetadata(guildId: string): GuildTopEmojisMetadata | undefined; + getUsableCustomEmojiById(emojiId: string): GuildEmoji | undefined; + getUsableGuildEmoji(guildId: string): GuildEmoji[]; + hasFavoriteEmojis(guildId?: string | Nullish): boolean; + hasPendingUsage(): boolean; + hasUsableEmojiInAnyGuild(): boolean; initialize(state: State): void; - get loadState(): any; // TEMP - searchWithoutFetchingLatest(e?: any): any; // TEMP + get loadState(): number; + /** If count is less than or equal to 0, all unlocked results will be returned. */ + searchWithoutFetchingLatest(options: { + channel?: ChannelRecord | Nullish; + count?: number | undefined /* = 0 */; + includeExternalGuilds?: boolean | undefined /* = true */; + intention: EmojiIntention; + matchComparator?: ((value: string, index: number, array: string[]) => unknown) | Nullish; + query: string; + }): { + locked: GuildEmoji[]; + unlocked: Emoji[]; + }; +} + +export interface GuildTopEmojisMetadata { + emojiIds: string[]; + topEmojisTTL: number; +} + +export const enum EmojiIntention { + REACTION = 0, + STATUS = 1, + COMMUNITY_CONTENT = 2, + CHAT = 3, + GUILD_STICKER_RELATED_EMOJI = 4, + GUILD_ROLE_BENEFIT_EMOJI = 5, + SOUNDBOARD = 6, + VOICE_CHANNEL_TOPIC = 7, + GIFT = 8, + AUTO_SUGGESTION = 9, + POLLS = 10, } diff --git a/packages/discord-types/tsconfig.json b/packages/discord-types/tsconfig.json index 28a50012c..4c695c2b7 100644 --- a/packages/discord-types/tsconfig.json +++ b/packages/discord-types/tsconfig.json @@ -7,12 +7,11 @@ "strict": true, "module": "Node16", - "types": ["events"], + "types": ["events", "lodash"], "noEmit": true, "lib": [ - "DOM", "ES2019", "ES2020.BigInt", "ES2020.Date", diff --git a/packages/vencord-types/.gitignore b/packages/vencord-types/.gitignore index bc23f8b6a..f643e5b2f 100644 --- a/packages/vencord-types/.gitignore +++ b/packages/vencord-types/.gitignore @@ -5,3 +5,4 @@ !prepare.ts !index.d.ts !globals.d.ts +!LICENSE diff --git a/packages/vencord-types/package.json b/packages/vencord-types/package.json index 8f9d852e4..ff3dd9e62 100644 --- a/packages/vencord-types/package.json +++ b/packages/vencord-types/package.json @@ -1,28 +1,33 @@ { "name": "@vencord/types", - "private": false, "version": "0.1.3", "description": "", - "types": "index.d.ts", + "license": "GPL-3.0-or-later", + "author": "Vencord", + "repository": { + "type": "git", + "url": "https://github.com/Vendicated/Vencord.git", + "directory": "packages/vencord-types" + }, "scripts": { "prepublishOnly": "tsx ./prepare.ts", "test": "echo \"Error: no test specified\" && exit 1" }, - "keywords": [], - "author": "Vencord", - "license": "GPL-3.0", + "sideEffects": false, + "types": "./index.d.ts", + "dependencies": { + "@types/lodash": "~4.17.4", + "@types/node": "^18.19.33", + "@types/react": "~18.2.21", + "@types/react-dom": "~18.2.7", + "@vencord/discord-types": "workspace:^", + "discord-types": "^1.3.26", + "standalone-electron-types": "^1.0.0", + "type-fest": "^4.18.3" + }, "devDependencies": { "@types/fs-extra": "^11.0.4", "fs-extra": "^11.2.0", - "tsx": "^3.12.6" - }, - "dependencies": { - "@types/lodash": "^4.14.191", - "@types/node": "^18.11.18", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.0.10", - "discord-types": "^1.3.26", - "standalone-electron-types": "^1.0.0", - "type-fest": "^3.5.3" + "tsx": "^4.11.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03090e9e0..3e01cd426 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ importers: specifier: ~4.17.4 version: 4.17.4 '@types/node': - specifier: ^18.16.3 - version: 18.16.3 + specifier: ^18.19.33 + version: 18.19.33 '@types/react': specifier: ~18.2.21 version: 18.2.79 @@ -66,11 +66,11 @@ importers: specifier: ^2.4.2 version: 2.4.2 '@typescript-eslint/eslint-plugin': - specifier: ^7.11.0 - version: 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + specifier: ^7.12.0 + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^7.11.0 - version: 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + specifier: ^7.12.0 + version: 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) '@vencord/discord-types': specifier: workspace:^ version: link:packages/discord-types @@ -88,7 +88,7 @@ importers: version: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))) + version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))) eslint-plugin-path-alias: specifier: ^1.1.0 version: 1.1.0(patch_hash=yphe5vyevzdqcgyxunass7sxwe)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) @@ -97,10 +97,10 @@ importers: version: 12.1.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) eslint-plugin-unused-imports: specifier: ^3.2.0 - version: 3.2.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + version: 3.2.0(@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) highlight.js: - specifier: 10.6.0 - version: 10.6.0 + specifier: 11.7.0 + version: 11.7.0 html-minifier-terser: specifier: ^7.2.0 version: 7.2.0 @@ -143,6 +143,9 @@ importers: '@types/events': specifier: ~3.0.3 version: 3.0.3 + '@types/lodash': + specifier: ~4.17.4 + version: 4.17.4 dependency-graph: specifier: 0.9.0 version: 0.9.0 @@ -178,23 +181,26 @@ importers: specifier: ^5.4.5 version: 5.4.5 typescript-eslint: - specifier: ^8.0.0-alpha.25 - version: 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) + specifier: ^8.0.0-alpha.26 + version: 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) packages/vencord-types: dependencies: '@types/lodash': - specifier: ^4.14.191 - version: 4.14.194 + specifier: ~4.17.4 + version: 4.17.4 '@types/node': - specifier: ^18.11.18 - version: 18.16.3 + specifier: ^18.19.33 + version: 18.19.33 '@types/react': - specifier: ^18.2.0 - version: 18.2.0 + specifier: ~18.2.21 + version: 18.2.79 '@types/react-dom': - specifier: ^18.0.10 - version: 18.2.1 + specifier: ~18.2.7 + version: 18.2.25 + '@vencord/discord-types': + specifier: workspace:^ + version: link:../discord-types discord-types: specifier: ^1.3.26 version: 1.3.26 @@ -202,8 +208,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 type-fest: - specifier: ^3.5.3 - version: 3.9.0 + specifier: ^4.18.3 + version: 4.18.3 devDependencies: '@types/fs-extra': specifier: ^11.0.4 @@ -212,8 +218,8 @@ importers: specifier: ^11.2.0 version: 11.2.0 tsx: - specifier: ^3.12.6 - version: 3.12.7 + specifier: ^4.11.2 + version: 4.11.2 packages: @@ -269,12 +275,24 @@ packages: '@esbuild-kit/esm-loader@2.5.5': resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} + '@esbuild/aix-ppc64@0.20.2': + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.17.18': resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.20.2': + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.15.18': resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} @@ -287,54 +305,108 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.20.2': + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.17.18': resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.20.2': + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.17.18': resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.20.2': + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.17.18': resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.20.2': + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.17.18': resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.20.2': + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.17.18': resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.20.2': + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.17.18': resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.20.2': + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.17.18': resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.20.2': + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.17.18': resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.20.2': + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.15.18': resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} @@ -347,72 +419,144 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.20.2': + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.17.18': resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.20.2': + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.17.18': resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.20.2': + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.17.18': resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.20.2': + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.17.18': resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.20.2': + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.17.18': resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.20.2': + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.17.18': resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.20.2': + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-x64@0.17.18': resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.20.2': + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.17.18': resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.20.2': + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.17.18': resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.20.2': + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.17.18': resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.20.2': + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.17.18': resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} engines: {node: '>=12'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.20.2': + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -580,17 +724,14 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - '@types/lodash@4.14.194': - resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==} - '@types/lodash@4.17.4': resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} '@types/minimist@1.2.2': resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - '@types/node@18.16.3': - resolution: {integrity: sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==} + '@types/node@18.19.33': + resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==} '@types/normalize-package-data@2.4.1': resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -598,32 +739,23 @@ packages: '@types/prop-types@15.7.5': resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - '@types/react-dom@18.2.1': - resolution: {integrity: sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w==} - '@types/react-dom@18.2.25': resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==} '@types/react@17.0.2': resolution: {integrity: sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==} - '@types/react@18.2.0': - resolution: {integrity: sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA==} - '@types/react@18.2.79': resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} - '@types/scheduler@0.16.3': - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - '@types/yauzl@2.10.0': resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} '@types/yazl@2.4.2': resolution: {integrity: sha512-T+9JH8O2guEjXNxqmybzQ92mJUh2oCwDDMSSimZSe1P+pceZiFROZLYmcbqkzV5EUwz6VwcKXCO2S2yUpra6XQ==} - '@typescript-eslint/eslint-plugin@7.11.0': - resolution: {integrity: sha512-P+qEahbgeHW4JQ/87FuItjBj8O3MYv5gELDzr8QaQ7fsll1gSMTYb6j87MYyxwf3DtD7uGFB9ShwgmCJB5KmaQ==} + '@typescript-eslint/eslint-plugin@7.12.0': + resolution: {integrity: sha512-7F91fcbuDf/d3S8o21+r3ZncGIke/+eWk0EpO21LXhDfLahriZF9CGj4fbAetEjlaBdjdSm9a6VeXbpbT6Z40Q==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -633,8 +765,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.0.0-alpha.25': - resolution: {integrity: sha512-IixQVZhrJ6rVd5Rx/WFGoIKLSXcMsueWa4bmnGlGTKSb4l+E+ORtEEY7RiXXeWK4mPgVpHHWZEElSdfflznpxA==} + '@typescript-eslint/eslint-plugin@8.0.0-alpha.26': + resolution: {integrity: sha512-25oYeFw55ZDU+yReSEA8aWekSYwArgs0lNICMK/kCASD0Dk37MiBf9NJnA2RxtN8YUljtXKfzv6HbWjzXWAuWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -644,8 +776,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.11.0': - resolution: {integrity: sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==} + '@typescript-eslint/parser@7.12.0': + resolution: {integrity: sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -654,8 +786,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.0.0-alpha.25': - resolution: {integrity: sha512-7CU44JP/FlZL/2dXwmU3BJ5tY1755FD190yCiiRYs41ds+CXdLlwkFD5PYVYPu+SFDT6trBnPo6d35ttHiDNnQ==} + '@typescript-eslint/parser@8.0.0-alpha.26': + resolution: {integrity: sha512-fSrBlmbFfIZHp/blR6EA+AfeFfWDqY5s44mQ3eIZL/kvJJeIsHzToDbSCW6DbgmFgHDxoW4VmFqDdY3uXyx1IA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -668,12 +800,16 @@ packages: resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.0.0-alpha.25': - resolution: {integrity: sha512-QPaOIVNwL7rl8QDK/GszySHARQ++QCBYooIRb3UnqaIzZrQPPx0ZqkiYdvi6NZOMxqOKo02jEelGYiqbdEAPDg==} + '@typescript-eslint/scope-manager@7.12.0': + resolution: {integrity: sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/scope-manager@8.0.0-alpha.26': + resolution: {integrity: sha512-qOL1MEDHXJn2egI9tj0YJ3j/9QUK6tSO/nNY/zmArZu8DS+nDQGKf/qSy0GuqOeIdMHu0h0jTo5pDanOURgWlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.11.0': - resolution: {integrity: sha512-WmppUEgYy+y1NTseNMJ6mCFxt03/7jTOy08bcg7bxJJdsM4nuhnchyBbE8vryveaJUf62noH7LodPSo5Z0WUCg==} + '@typescript-eslint/type-utils@7.12.0': + resolution: {integrity: sha512-lib96tyRtMhLxwauDWUp/uW3FMhLA6D0rJ8T7HmH7x23Gk1Gwwu8UZ94NMXBvOELn6flSPiBrCKlehkiXyaqwA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -682,8 +818,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.0.0-alpha.25': - resolution: {integrity: sha512-s5Y32/BL8qIfGMTyN0IQ5ZvYu8nVBzqjjUQncWKOHcqXrjQxgRteBScNgLXsJ20cjTgaEmPjMRvnR0k3Zcslvg==} + '@typescript-eslint/type-utils@8.0.0-alpha.26': + resolution: {integrity: sha512-LUNlz/sYwbXR3cL7dAfULweSP9dibynFqTuHWrokhhOH6hr/pgRrfudqjvxqAK7bMMxvrTzCYOtlcPQYvF8quQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -695,8 +831,12 @@ packages: resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.0.0-alpha.25': - resolution: {integrity: sha512-9C5VuCWi75jcgr/hQ/+9HVHjXv/7IyKHM5DMPZDWXrfvXS39UGYyDUx77PMHl+rre6Iz9kR/8TQUJdBX33iwzQ==} + '@typescript-eslint/types@7.12.0': + resolution: {integrity: sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/types@8.0.0-alpha.26': + resolution: {integrity: sha512-kO+wa+n1q1oh2xzjSYlXub/AsiV8Hi+gVC5FHleEIREZpwzTHLiJyZiSDWWjQfuq6XVyPxusWhQpjH8dIcOzwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.11.0': @@ -708,8 +848,17 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.0.0-alpha.25': - resolution: {integrity: sha512-+gThr9Q6t8aoiRn0PKGo79Vj/fvfFaCi31ugsoSzzccs0lO1f/zKSOXQAuqBiAVF/TuiuTA2FNAn1mO+UhnQqg==} + '@typescript-eslint/typescript-estree@7.12.0': + resolution: {integrity: sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.0.0-alpha.26': + resolution: {integrity: sha512-XGljoEEK6Z9X4Okx1VwPlgotcZsZg5Kzm8yoGhRxIX/FyenJTtHEFlhz+tIajW20Ez/gToPdzPJmVaEzEwwzKw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -723,8 +872,14 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.0.0-alpha.25': - resolution: {integrity: sha512-L129Op2k+Rx9SIY03yAXu5unfvQDLZIHDZnRiKBYSEI8HTPhhe36v0EQebZxvbkfkoAU8+M5T7SKc1cP4L2yJw==} + '@typescript-eslint/utils@7.12.0': + resolution: {integrity: sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/utils@8.0.0-alpha.26': + resolution: {integrity: sha512-1nSZmX3HOva66uC0UrtXWNd+IK76iNp6nXIgUF3xzOdMZ6E6HeqrXT+T+O+mQT2BRS6TYgMPg9cp28BQtwT6Fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -733,8 +888,12 @@ packages: resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.0.0-alpha.25': - resolution: {integrity: sha512-9vnWmeuzFWpPhHsY+eBZQl1TA9MXAXwSTp84X4fcff2cqytaXw1hyK2+M/qrza5FSTdyl41c4hv2XSYkRC9HVQ==} + '@typescript-eslint/visitor-keys@7.12.0': + resolution: {integrity: sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/visitor-keys@8.0.0-alpha.26': + resolution: {integrity: sha512-5QLzjFiNqkFV5AuQRCc1Q4OA3AdhcFjMTz9/9+FgrFI6L0vuEmm+V9dOOZocMeD0+SwajUqodTKyhSJ89YleOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -1297,6 +1456,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -1554,6 +1718,11 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} @@ -1583,9 +1752,6 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.5.0: - resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} - get-tsconfig@4.7.5: resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} @@ -1698,8 +1864,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - highlight.js@10.6.0: - resolution: {integrity: sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==} + highlight.js@11.7.0: + resolution: {integrity: sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==} + engines: {node: '>=12.0.0'} hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -2652,6 +2819,11 @@ packages: resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==} hasBin: true + tsx@4.11.2: + resolution: {integrity: sha512-V5DL5v1BuItjsQ2FN9+4OjR7n5cr8hSgN+VGmm/fd2/0cgQdBIWHcQ3bFYm/5ZTmyxkTDBUIaRuW2divgfPe0A==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2672,10 +2844,6 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@3.9.0: - resolution: {integrity: sha512-hR8JP2e8UiH7SME5JZjsobBlEiatFoxpzCP+R3ZeCo7kAaG1jXQE5X/buLzogM6GJu8le9Y4OcfNuIQX0rZskA==} - engines: {node: '>=14.16'} - type-fest@4.18.3: resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} engines: {node: '>=16'} @@ -2696,8 +2864,8 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript-eslint@8.0.0-alpha.25: - resolution: {integrity: sha512-gQsFB1mdtxduwOCXpgKTIDyyZ38iaam443/Kf8LYbKbt8rMCgz3HRYVR8sp8QF9H26MgTrYE7jGqfWXWYowTcQ==} + typescript-eslint@8.0.0-alpha.26: + resolution: {integrity: sha512-J42oz1vXxiglijmq5cERYNFekBcExcCRKjueXkFF0LsZNK89uN1SZACICOkS75PT8NQ+qwdW3lMd6wIbCS4DLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2721,6 +2889,9 @@ packages: unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} @@ -2878,7 +3049,7 @@ snapshots: '@esbuild-kit/cjs-loader@2.4.2': dependencies: '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.5.0 + get-tsconfig: 4.7.5 '@esbuild-kit/core-utils@3.1.0': dependencies: @@ -2888,80 +3059,149 @@ snapshots: '@esbuild-kit/esm-loader@2.5.5': dependencies: '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.5.0 + get-tsconfig: 4.7.5 + + '@esbuild/aix-ppc64@0.20.2': + optional: true '@esbuild/android-arm64@0.17.18': optional: true + '@esbuild/android-arm64@0.20.2': + optional: true + '@esbuild/android-arm@0.15.18': optional: true '@esbuild/android-arm@0.17.18': optional: true + '@esbuild/android-arm@0.20.2': + optional: true + '@esbuild/android-x64@0.17.18': optional: true + '@esbuild/android-x64@0.20.2': + optional: true + '@esbuild/darwin-arm64@0.17.18': optional: true + '@esbuild/darwin-arm64@0.20.2': + optional: true + '@esbuild/darwin-x64@0.17.18': optional: true + '@esbuild/darwin-x64@0.20.2': + optional: true + '@esbuild/freebsd-arm64@0.17.18': optional: true + '@esbuild/freebsd-arm64@0.20.2': + optional: true + '@esbuild/freebsd-x64@0.17.18': optional: true + '@esbuild/freebsd-x64@0.20.2': + optional: true + '@esbuild/linux-arm64@0.17.18': optional: true + '@esbuild/linux-arm64@0.20.2': + optional: true + '@esbuild/linux-arm@0.17.18': optional: true + '@esbuild/linux-arm@0.20.2': + optional: true + '@esbuild/linux-ia32@0.17.18': optional: true + '@esbuild/linux-ia32@0.20.2': + optional: true + '@esbuild/linux-loong64@0.15.18': optional: true '@esbuild/linux-loong64@0.17.18': optional: true + '@esbuild/linux-loong64@0.20.2': + optional: true + '@esbuild/linux-mips64el@0.17.18': optional: true + '@esbuild/linux-mips64el@0.20.2': + optional: true + '@esbuild/linux-ppc64@0.17.18': optional: true + '@esbuild/linux-ppc64@0.20.2': + optional: true + '@esbuild/linux-riscv64@0.17.18': optional: true + '@esbuild/linux-riscv64@0.20.2': + optional: true + '@esbuild/linux-s390x@0.17.18': optional: true + '@esbuild/linux-s390x@0.20.2': + optional: true + '@esbuild/linux-x64@0.17.18': optional: true + '@esbuild/linux-x64@0.20.2': + optional: true + '@esbuild/netbsd-x64@0.17.18': optional: true + '@esbuild/netbsd-x64@0.20.2': + optional: true + '@esbuild/openbsd-x64@0.17.18': optional: true + '@esbuild/openbsd-x64@0.20.2': + optional: true + '@esbuild/sunos-x64@0.17.18': optional: true + '@esbuild/sunos-x64@0.20.2': + optional: true + '@esbuild/win32-arm64@0.17.18': optional: true + '@esbuild/win32-arm64@0.20.2': + optional: true + '@esbuild/win32-ia32@0.17.18': optional: true + '@esbuild/win32-ia32@0.20.2': + optional: true + '@esbuild/win32-x64@0.17.18': optional: true + '@esbuild/win32-x64@0.20.2': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))': dependencies: eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) @@ -3157,7 +3397,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 18.16.3 + '@types/node': 18.19.33 '@types/har-format@1.2.13': {} @@ -3167,24 +3407,20 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 18.16.3 - - '@types/lodash@4.14.194': {} + '@types/node': 18.19.33 '@types/lodash@4.17.4': {} '@types/minimist@1.2.2': {} - '@types/node@18.16.3': {} + '@types/node@18.19.33': + dependencies: + undici-types: 5.26.5 '@types/normalize-package-data@2.4.1': {} '@types/prop-types@15.7.5': {} - '@types/react-dom@18.2.1': - dependencies: - '@types/react': 18.2.0 - '@types/react-dom@18.2.25': dependencies: '@types/react': 18.2.79 @@ -3194,36 +3430,28 @@ snapshots: '@types/prop-types': 15.7.5 csstype: 3.1.2 - '@types/react@18.2.0': - dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 - '@types/react@18.2.79': dependencies: '@types/prop-types': 15.7.5 csstype: 3.1.2 - '@types/scheduler@0.16.3': {} - '@types/yauzl@2.10.0': dependencies: - '@types/node': 18.16.3 + '@types/node': 18.19.33 optional: true '@types/yazl@2.4.2': dependencies: - '@types/node': 18.16.3 + '@types/node': 18.19.33 - '@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.11.0 - '@typescript-eslint/type-utils': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) - '@typescript-eslint/utils': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.11.0 + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.12.0 + '@typescript-eslint/type-utils': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/utils': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.12.0 eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) graphemer: 1.4.0 ignore: 5.3.1 @@ -3234,14 +3462,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.0.0-alpha.25(@typescript-eslint/parser@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.0.0-alpha.26(@typescript-eslint/parser@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.0.0-alpha.25 - '@typescript-eslint/type-utils': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.25 + '@typescript-eslint/parser': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.26 + '@typescript-eslint/type-utils': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.26 eslint: 9.4.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -3252,12 +3480,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + '@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.11.0 - '@typescript-eslint/types': 7.11.0 - '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.11.0 + '@typescript-eslint/scope-manager': 7.12.0 + '@typescript-eslint/types': 7.12.0 + '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.12.0 debug: 4.3.4 eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) optionalDependencies: @@ -3265,12 +3493,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/parser@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.0.0-alpha.25 - '@typescript-eslint/types': 8.0.0-alpha.25 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.25(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.25 + '@typescript-eslint/scope-manager': 8.0.0-alpha.26 + '@typescript-eslint/types': 8.0.0-alpha.26 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.26(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.26 debug: 4.3.4 eslint: 9.4.0 optionalDependencies: @@ -3283,15 +3511,20 @@ snapshots: '@typescript-eslint/types': 7.11.0 '@typescript-eslint/visitor-keys': 7.11.0 - '@typescript-eslint/scope-manager@8.0.0-alpha.25': + '@typescript-eslint/scope-manager@7.12.0': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.25 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.25 + '@typescript-eslint/types': 7.12.0 + '@typescript-eslint/visitor-keys': 7.12.0 - '@typescript-eslint/type-utils@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + '@typescript-eslint/scope-manager@8.0.0-alpha.26': dependencies: - '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/types': 8.0.0-alpha.26 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.26 + + '@typescript-eslint/type-utils@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) ts-api-utils: 1.3.0(typescript@5.4.5) @@ -3300,10 +3533,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.0-alpha.25(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.0.0-alpha.26(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) debug: 4.3.4 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -3314,7 +3547,9 @@ snapshots: '@typescript-eslint/types@7.11.0': {} - '@typescript-eslint/types@8.0.0-alpha.25': {} + '@typescript-eslint/types@7.12.0': {} + + '@typescript-eslint/types@8.0.0-alpha.26': {} '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': dependencies: @@ -3331,10 +3566,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.0.0-alpha.25(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.12.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.25 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.25 + '@typescript-eslint/types': 7.12.0 + '@typescript-eslint/visitor-keys': 7.12.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3346,16 +3581,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.0.0-alpha.26(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) - '@typescript-eslint/scope-manager': 7.11.0 - '@typescript-eslint/types': 7.11.0 - '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) - eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) + '@typescript-eslint/types': 8.0.0-alpha.26 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.26 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - - typescript '@typescript-eslint/utils@7.11.0(eslint@9.4.0)(typescript@5.4.5)': dependencies: @@ -3368,12 +3607,23 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + '@typescript-eslint/scope-manager': 7.12.0 + '@typescript-eslint/types': 7.12.0 + '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) + eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) - '@typescript-eslint/scope-manager': 8.0.0-alpha.25 - '@typescript-eslint/types': 8.0.0-alpha.25 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.25(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.26 + '@typescript-eslint/types': 8.0.0-alpha.26 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.26(typescript@5.4.5) eslint: 9.4.0 transitivePeerDependencies: - supports-color @@ -3384,9 +3634,14 @@ snapshots: '@typescript-eslint/types': 7.11.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.0.0-alpha.25': + '@typescript-eslint/visitor-keys@7.12.0': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.25 + '@typescript-eslint/types': 7.12.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.0.0-alpha.26': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.26 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -3998,6 +4253,32 @@ snapshots: '@esbuild/win32-ia32': 0.17.18 '@esbuild/win32-x64': 0.17.18 + esbuild@0.20.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + escalade@3.1.1: {} escalade@3.1.2: {} @@ -4006,9 +4287,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))): dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) eslint-import-resolver-node@0.3.9: dependencies: @@ -4018,11 +4299,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -4048,7 +4329,7 @@ snapshots: - supports-color - typescript - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -4058,7 +4339,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -4069,7 +4350,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -4114,12 +4395,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-rule-composer: 0.3.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) eslint-rule-composer@0.3.0: {} @@ -4351,6 +4632,9 @@ snapshots: fsevents@2.3.2: optional: true + fsevents@2.3.3: + optional: true + function-bind@1.1.1: {} function-bind@1.1.2: {} @@ -4384,8 +4668,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.5.0: {} - get-tsconfig@4.7.5: dependencies: resolve-pkg-maps: 1.0.0 @@ -4498,7 +4780,7 @@ snapshots: dependencies: function-bind: 1.1.2 - highlight.js@10.6.0: {} + highlight.js@11.7.0: {} hosted-git-info@2.8.9: {} @@ -5289,7 +5571,7 @@ snapshots: standalone-electron-types@1.0.0: dependencies: - '@types/node': 18.16.3 + '@types/node': 18.19.33 static-extend@0.1.2: dependencies: @@ -5495,6 +5777,13 @@ snapshots: optionalDependencies: fsevents: 2.3.2 + tsx@4.11.2: + dependencies: + esbuild: 0.20.2 + get-tsconfig: 4.7.5 + optionalDependencies: + fsevents: 2.3.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -5507,8 +5796,6 @@ snapshots: type-fest@0.8.1: {} - type-fest@3.9.0: {} - type-fest@4.18.3: {} typed-array-buffer@1.0.2: @@ -5543,11 +5830,11 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript-eslint@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5): + typescript-eslint@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0-alpha.25(@typescript-eslint/parser@8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/parser': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.25(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.0.0-alpha.26(@typescript-eslint/parser@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/parser': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: @@ -5573,6 +5860,8 @@ snapshots: buffer: 5.7.1 through: 2.3.8 + undici-types@5.26.5: {} + union-value@1.0.1: dependencies: arr-union: 3.1.0 From 4bab6cc08dbdef2751e89b2cdfe2650c23302ec0 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:26:22 -0400 Subject: [PATCH 025/126] Fixed file in wrong folder --- packages/{ => vencord-types}/LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/{ => vencord-types}/LICENSE (100%) diff --git a/packages/LICENSE b/packages/vencord-types/LICENSE similarity index 100% rename from packages/LICENSE rename to packages/vencord-types/LICENSE From 2a07a5ffe5c9b460f56451576f6f4a80a5d284c5 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:50:29 -0400 Subject: [PATCH 026/126] Fixes --- package.json | 4 +- .../src/general/emojis/Emoji.d.ts | 156 +++++++++--------- 2 files changed, 80 insertions(+), 80 deletions(-) diff --git a/package.json b/package.json index c2857abb2..bd229b1b7 100644 --- a/package.json +++ b/package.json @@ -83,8 +83,8 @@ "packageManager": "pnpm@9.1.4", "pnpm": { "patchedDependencies": { - "eslint@8.57.0": "patches/eslint@8.57.0.patch", - "eslint-plugin-path-alias@1.1.0": "patches/eslint-plugin-path-alias@1.1.0.patch" + "eslint-plugin-path-alias@1.1.0": "patches/eslint-plugin-path-alias@1.1.0.patch", + "eslint@8.57.0": "patches/eslint@8.57.0.patch" }, "peerDependencyRules": { "ignoreMissing": [ diff --git a/packages/discord-types/src/general/emojis/Emoji.d.ts b/packages/discord-types/src/general/emojis/Emoji.d.ts index a4d78bb62..c1c6978d1 100644 --- a/packages/discord-types/src/general/emojis/Emoji.d.ts +++ b/packages/discord-types/src/general/emojis/Emoji.d.ts @@ -1,78 +1,78 @@ -/* - * discord-types - * Copyright (C) 2024 Vencord project contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import type { Nullish } from "../../internal"; - -export type Emoji = UnicodeEmoji | GuildEmoji; - -export interface GuildEmoji { - allNamesString: string; - animated: boolean; - available: boolean; - guildId: string; - id: string; - managed: false; - name: string; - originalName?: string; - /** False for emoticons. */ - require_colons: boolean; - roles: string[]; - type: EmojiType.GUILD; -} - -// Original name: Emoji -export class UnicodeEmoji { - constructor(emojiObject: UnicodeEmojiObject | UnicodeEmojiObjectDiversityChild); - - get allNamesString(): string; - get animated(): false; - get defaultDiversityChild(): UnicodeEmojiObjectDiversityChild | Nullish; - forEachDiversity(callback: (value: string, index: number, array: string[]) => unknown): any; - forEachName(callback: (value: string, index: number, array: string[]) => unknown): void; - get hasDiversity(): UnicodeEmojiObject["hasDiversity"]; - get hasDiversityParent(): UnicodeEmojiObjectDiversityChild["hasDiversityParent"]; - get hasMultiDiversity(): UnicodeEmojiObject["hasMultiDiversity"]; - get hasMultiDiversityParent(): UnicodeEmojiObjectDiversityChild["hasMultiDiversityParent"]; - get managed(): true; - get name(): string; - get names(): UnicodeEmojiObject["names"]; - get optionallyDiverseSequence(): string; - setSpriteSheetIndex(index: number): void; - get unicodeVersion(): number; - get url(): string; - - diversityChildren: { [diversity: string]: UnicodeEmojiObjectDiversityChild; }; - emojiObject: UnicodeEmojiObject; - guildId: undefined; - id: undefined; - index: number | undefined; - originalName: string | undefined; - surrogates: string; - type: EmojiType.UNICODE; - uniqueName: string; - useSpriteSheet: boolean | undefined; -} - -export interface UnicodeEmojiObject { - diversityChildren?: UnicodeEmojiObjectDiversityChild[]; - hasDiversity?: boolean; - hasMultiDiversity?: boolean; - names: [string, ...string[]]; - surrogates: string; - unicodeVersion?: number; -} - -export interface UnicodeEmojiObjectDiversityChild extends Pick { - diversity: [string, string?]; - hasDiversityParent?: boolean; - hasMultiDiversityParent?: boolean; -} - -// Original name: EmojiTypes -export const enum EmojiType { - UNICODE = 0, - GUILD = 1, -} +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../../internal"; + +export type Emoji = UnicodeEmoji | GuildEmoji; + +export interface GuildEmoji { + allNamesString: string; + animated: boolean; + available: boolean; + guildId: string; + id: string; + managed: false; + name: string; + originalName?: string; + /** False for emoticons. */ + require_colons: boolean; + roles: string[]; + type: EmojiType.GUILD; +} + +// Original name: Emoji +export class UnicodeEmoji { + constructor(emojiObject: UnicodeEmojiObject | UnicodeEmojiObjectDiversityChild); + + get allNamesString(): string; + get animated(): false; + get defaultDiversityChild(): UnicodeEmojiObjectDiversityChild | Nullish; + forEachDiversity(callback: (value: string, index: number, array: string[]) => unknown): any; + forEachName(callback: (value: string, index: number, array: string[]) => unknown): void; + get hasDiversity(): UnicodeEmojiObject["hasDiversity"]; + get hasDiversityParent(): UnicodeEmojiObjectDiversityChild["hasDiversityParent"]; + get hasMultiDiversity(): UnicodeEmojiObject["hasMultiDiversity"]; + get hasMultiDiversityParent(): UnicodeEmojiObjectDiversityChild["hasMultiDiversityParent"]; + get managed(): true; + get name(): string; + get names(): UnicodeEmojiObject["names"]; + get optionallyDiverseSequence(): string; + setSpriteSheetIndex(index: number): void; + get unicodeVersion(): number; + get url(): string; + + diversityChildren: { [diversity: string]: UnicodeEmojiObjectDiversityChild; }; + emojiObject: UnicodeEmojiObject; + guildId: undefined; + id: undefined; + index: number | undefined; + originalName: string | undefined; + surrogates: string; + type: EmojiType.UNICODE; + uniqueName: string; + useSpriteSheet: boolean | undefined; +} + +export interface UnicodeEmojiObject { + diversityChildren?: UnicodeEmojiObjectDiversityChild[]; + hasDiversity?: boolean; + hasMultiDiversity?: boolean; + names: [string, ...string[]]; + surrogates: string; + unicodeVersion?: number; +} + +export interface UnicodeEmojiObjectDiversityChild extends Pick { + diversity: [string, string?]; + hasDiversityParent?: boolean; + hasMultiDiversityParent?: boolean; +} + +// Original name: EmojiTypes +export const enum EmojiType { + UNICODE = 0, + GUILD = 1, +} From fecb9c54e210d1a641b772a8f145e50fcb55b7c1 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Tue, 4 Jun 2024 22:56:03 -0400 Subject: [PATCH 027/126] Progress --- package.json | 10 +- packages/discord-types/eslint.config.mjs | 2 +- packages/discord-types/package.json | 4 +- .../discord-types/src/general/ReadState.d.ts | 239 ++++++---- packages/discord-types/src/internal.d.ts | 4 + .../src/stores/PermissionStore.d.ts | 2 +- packages/vencord-types/package.json | 8 +- pnpm-lock.yaml | 428 ++++-------------- 8 files changed, 249 insertions(+), 448 deletions(-) diff --git a/package.json b/package.json index bd229b1b7..f565ee141 100644 --- a/package.json +++ b/package.json @@ -51,9 +51,9 @@ "@types/chrome": "^0.0.246", "@types/diff": "^5.0.3", "@types/lodash": "~4.17.4", - "@types/node": "^18.19.33", - "@types/react": "~18.2.21", - "@types/react-dom": "~18.2.7", + "@types/node": "^18.19.34", + "@types/react": "~18.2.79", + "@types/react-dom": "~18.2.24", "@types/yazl": "^2.4.2", "@typescript-eslint/eslint-plugin": "^7.12.0", "@typescript-eslint/parser": "^7.12.0", @@ -74,8 +74,8 @@ "stylelint": "^15.6.0", "stylelint-config-standard": "^33.0.0", "ts-patch": "^3.1.2", - "tsx": "^3.12.7", - "type-fest": "^4.18.3", + "tsx": "^4.11.2", + "type-fest": "^4.19.0", "typescript": "^5.4.5", "typescript-transform-paths": "^3.4.7", "zip-local": "^0.3.5" diff --git a/packages/discord-types/eslint.config.mjs b/packages/discord-types/eslint.config.mjs index 05fc249e3..22989d761 100644 --- a/packages/discord-types/eslint.config.mjs +++ b/packages/discord-types/eslint.config.mjs @@ -117,7 +117,7 @@ export default tseslint.config( "@typescript-eslint/prefer-enum-initializers": "error", "@typescript-eslint/prefer-function-type": "error", "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/unified-signatures": ["error", { ignoreDifferentlyNamedParameters: true }], "import/extensions": "error", "import/first": "error", "import/newline-after-import": ["error", { considerComments: true }], diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index 08efb0352..3181d96dc 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -23,7 +23,7 @@ "@types/lodash": "~4.17.4", "dependency-graph": "0.9.0", "moment": "2.22.2", - "type-fest": "^4.18.3" + "type-fest": "^4.19.0" }, "devDependencies": { "@eslint-types/unicorn": "^52.0.0", @@ -34,6 +34,6 @@ "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-unicorn": "^53.0.0", "typescript": "^5.4.5", - "typescript-eslint": "^8.0.0-alpha.26" + "typescript-eslint": "^8.0.0-alpha.27" } } diff --git a/packages/discord-types/src/general/ReadState.d.ts b/packages/discord-types/src/general/ReadState.d.ts index 9025fe83c..1d83de9ee 100644 --- a/packages/discord-types/src/general/ReadState.d.ts +++ b/packages/discord-types/src/general/ReadState.d.ts @@ -4,41 +4,104 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -export class ReadState { - constructor( - channelId?: string | undefined, - readStateType?: ReadStateType | undefined /* = ReadStateType.CHANNEL */ - ); +import type { Nullish, Overwrite } from "../internal"; +import type { BasicPermissionsObject } from "../stores/PermissionStore"; +import type { GuildChannelRecord } from "./channels/ChannelRecord"; - static clear(e?: any, t?: any): any; // TEMP +export class ReadState { + constructor(channelId: string, type?: ChannelIdType | undefined); + constructor(userId: string, type: UserIdType); + constructor(guildId: string, type: GuildIdType); + + static _guildReadStateSentinels: { [guildId: string]: { unreadsSentinel: number; }; }; + static _mentionChannels: Set; + static _readStates: { [T in ChannelIdType]?: { [channelId: string]: ReadState; }; } + & { [T in UserIdType]?: { [userId: string]: ReadState; }; } + & { [T in GuildIdType]?: { [guildId: string]: ReadState; }; }; + static clear(channelId: string, type?: T): boolean; + static clear(userId: string, type: T): boolean; + static clear(guildId: string, type: T): boolean; static clearAll(): void; - static forEach(e?: any): void; // TEMP - static get(e?: any, t?: any): any; // TEMP - static getGuildSentinels(e?: any): any; // TEMP - static getIfExists(e?: any, t?: any): any; // TEMP - static getMentionChannelIds(): any; // TEMP - static getValue(e?: any, t?: any, n?: any, i?: any): any; // TEMP + static forEach(callback: (value: ReadState) => unknown): void; + static get(channelId: string, type?: T): ReadState; + static get(userId: string, type: T): ReadState; + static get(guildId: string, type: T): ReadState; + static getGuildSentinels(guildId: string): typeof ReadState["_guildReadStateSentinels"]; + static getIfExists(channelId: string, type?: T): ReadState | undefined; + static getIfExists(userId: string, type: T): ReadState | undefined; + static getIfExists(guildId: string, type: T): ReadState | undefined; + static getMentionChannelIds(): string[]; + static getValue( + channelId: string, + type: T, + getter: (readState: ReadState | undefined) => GetterReturn, + defaultValue?: DefaultValue + ): GetterReturn | DefaultValue; + static getValue( + userId: string, + type: T, + getter: (readState: ReadState | undefined) => GetterReturn, + defaultValue?: DefaultValue + ): GetterReturn | DefaultValue; + static getValue( + guildId: string, + type: T, + getter: (readState: ReadState | undefined) => GetterReturn, + defaultValue?: DefaultValue + ): GetterReturn | DefaultValue; static resetGuildSentinels(): void; - _ack(e?: any, t?: any): void; // TEMP + _ack(location: string, trackAnalytics: boolean): void; _nonChannelAck(): void; - _shouldAck(e?: any, t?: any, n?: any): boolean; // TEMP - ack(e?: any): boolean; // TEMP - get ackMessageId(): any; // TEMP - set ackMessageId(e: any); // TEMP - ackPins(t?: any): boolean; // TEMP + _shouldAck( + force?: boolean | undefined, + local?: boolean | undefined, + isExplicitUserAction?: boolean | undefined + ): boolean; + ack(options: { + force?: boolean | undefined; /* = false */ + immediate?: boolean | undefined; /* = false */ + isExplicitUserAction?: boolean | undefined; /* = false */ + local?: boolean | undefined; /* = false */ + location?: { section: string; }; /* = { section: AnalyticsSections.CHANNEL } */ + messageId?: string | Nullish; /* = this.lastMessageId */ + trackAnalytics?: boolean | undefined; /* = true */ + }): boolean; + get ackMessageId(): this["_ackMessageId"]; + set ackMessageId(messageId: this["_ackMessageId"]); + ackPins(isoTimestamp?: string | Nullish): boolean; canBeUnread(): boolean; canHaveMentions(): boolean; canTrackUnreads(): boolean; clearOutgoingAck(): void; - delete(t?: any): void; // TEMP - deserializeForOverlay(e?: any): any; // TEMP - getAckTimestamp(): any; // TEMP - getGuildChannelUnreadState(e?: any, t?: any, n?: any, i?: any, r?: any): any; // TEMP + delete(remote?: boolean | undefined): void; + deserializeForOverlay(serlizedReadState: Overwrite, { + _isActiveJoinedThread?: boolean | Nullish; + _isJoinedThread?: boolean | Nullish; + _unreadCount?: number | Nullish; + estimated?: boolean | Nullish; + isActiveThread?: boolean | Nullish; + isManualAck?: boolean | Nullish; + isThread?: boolean | Nullish; + loadedMessages?: boolean | Nullish; + oldestUnreadMessageIdStale?: boolean | Nullish; + type?: ReadStateType | Nullish; + }>): void; + getAckTimestamp(): number; + getGuildChannelUnreadState( + guildChannel: BasicPermissionsObject | GuildChannelRecord, + isOptInEnabled: boolean, + guildChannelOverrides: { [channelId: string]: GuildChannelOverride; }, + isChannelMuted: boolean, + isReadStateTypeUnread?: boolean | undefined + ): { + mentionCount: number; + unread: boolean; + }; getMentionCount(): number; - guessAckMessageId(): any; // TEMP - get guildId(): any; // TEMP - handleGuildEventRemoval(e?: any, t?: any): void; // TEMP + guessAckMessageId(): string | null; + get guildId(): GuildIdFromReadStateType; + handleGuildEventRemoval(guildId: string, guildEventId: string): void; hasMentions(): boolean; hasRecentlyVisitedAndRead(): boolean; hasUnread(): boolean; @@ -46,27 +109,31 @@ export class ReadState { incrementGuildUnreadsSentinel(): void; isForumPostUnread(): boolean; isPrivate(): boolean; - get lastMessageId(): any; // TEMP - set lastMessageId(e: any); // TEMP - get lastMessageTimestamp(): any; // TEMP - get mentionCount(): any; // TEMP - set mentionCount(e: any); // TEMP - get oldestUnreadMessageId(): any; // TEMP - set oldestUnreadMessageId(e: any); // TEMP + get lastMessageId(): this["_lastMessageId"]; + set lastMessageId(messageId: this["_lastMessageId"] | Nullish); + get lastMessageTimestamp(): this["_lastMessageTimestamp"]; + get mentionCount(): this["_mentionCount"]; + set mentionCount(count: this["_mentionCount"]); + get oldestUnreadMessageId(): this["_oldestUnreadMessageId"]; + set oldestUnreadMessageId(messageId: this["_oldestUnreadMessageId"]); get oldestUnreadTimestamp(): number; - rebuildChannelState(e?: any, t?: any, n?: any): void; // TEMP + rebuildChannelState( + ackMessageId?: string | Nullish, + resetMentionCount?: boolean | undefined, /* = false */ + newMentionCount?: number | Nullish + ): void; recalculateFlags(): ReadStateFlags | undefined; recordLastViewedTime(): void; - serialize(e?: any): SerializedReadState; // TEMP - shouldDeleteReadState(e?: any): boolean; + serialize(forCache: ForCache): SerializedReadState; + shouldDeleteReadState(expirationTimestamp: string): boolean; syncThreadSettings(): boolean; takeSnapshot(): ReadStateSnapshot; get unreadCount(): number; - set unreadCount(count: number); // TEMP + set unreadCount(count: number); - _ackMessageId: string | number | null; + _ackMessageId: string | null; _ackMessageTimestamp: number; - _guildId: string | null; + _guildId: GuildIdFromReadStateType | null; _isActiveThread: boolean; _isJoinedThread: boolean; _isResourceChannel: boolean; @@ -78,9 +145,13 @@ export class ReadState { _persisted: boolean; _unreadCount: number; ackedWhileCached: undefined; - ackMessageIdAtChannelSelect: string | number | null; + ackMessageIdAtChannelSelect: string | null; ackPinTimestamp: number; - channelId: string | undefined; + /** + * Not always a channel ID. + * @see {@link ReadState} + */ + channelId: string; estimated: boolean; flags: ReadStateFlags | undefined; isManualAck: boolean; @@ -88,10 +159,42 @@ export class ReadState { lastViewed: number | undefined; loadedMessages: boolean; oldestUnreadMessageIdStale: boolean; - outgoingAck: any/* | null */; // TEMP - outgoingAckTimer: any/* | null */; // TEMP + outgoingAck: string | null; + outgoingAckTimer: number | null; snapshot: ReadStateSnapshot | undefined; - type: ReadStateType; + type: Type; +} + +export type SerializedReadState + = ForCache extends true + ? SerializedForCache + : Serialized; + +type SerializedForCache = Pick, "_ackMessageId" | "_ackMessageTimestamp" | "_guildId" | "_isActiveThread" | "_isJoinedThread" | "_isThread" | "_lastMessageId" | "_lastMessageTimestamp" | "_mentionCount" | "_persisted" | "ackPinTimestamp" | "channelId" | "flags" | "lastPinTimestamp" | "lastViewed" | "type">; + +type Serialized = SerializedForCache & Pick, "_oldestUnreadMessageId" | "estimated" | "isManualAck" | "loadedMessages" | "oldestUnreadMessageIdStale">; + +export interface GuildChannelOverride { + channel_id: string; + collapsed: boolean; + flags?: ChannelNotificationSettingsFlags; + message_notifications: number; + mute_config: GuildChannelOverrideMuteConfig | null; + muted: boolean; +} + +export const enum ChannelNotificationSettingsFlags { + UNREADS_ONLY_MENTIONS = 1 << 9, + UNREADS_ALL_MESSAGES = 1 << 10, + FAVORITED = 1 << 11, + OPT_IN_ENABLED = 1 << 12, + NEW_FORUM_THREADS_OFF = 1 << 13, + NEW_FORUM_THREADS_ON = 1 << 14, +} + +export interface GuildChannelOverrideMuteConfig { + end_time: string | null; + selected_time_window: number | null; } export interface ReadStateSnapshot { @@ -102,48 +205,6 @@ export interface ReadStateSnapshot { unread: boolean; } -/** @todo Come up with a name for each union member. */ -export type SerializedReadState = { - _ackMessageId: string | number | null; - _ackMessageTimestamp: number; - _guildId: string | null; - _isActiveThread?: boolean; - _isJoinedThread?: boolean; - _isThread?: boolean; - _lastMessageId: string | null; - _lastMessageTimestamp: number; - _mentionCount: number; - _persisted: boolean; - ackPinTimestamp: number; - channelId: string | undefined; - flags: ReadStateFlags | undefined; - lastPinTimestamp: number; - lastViewed?: number; - type: ReadStateType; -} | { - _ackMessageId: string | number | null; - _ackMessageTimestamp: number; - _guildId: string | null; - _isActiveThread: boolean; - _isJoinedThread: boolean; - _isThread: boolean; - _lastMessageId: string | null; - _lastMessageTimestamp: number; - _mentionCount: number; - _oldestUnreadMessageId: string | null; - _persisted: boolean; - ackPinTimestamp: number; - channelId: string | undefined; - estimated: boolean; - flags: ReadStateFlags | undefined; - isManualAck: boolean; - lastPinTimestamp: number; - lastViewed: number | undefined; - loadedMessages: boolean; - oldestUnreadMessageIdStale: boolean; - type: ReadStateType; -}; - export const enum ReadStateFlags { IS_GUILD_CHANNEL = 1 << 0, IS_THREAD = 1 << 1, @@ -158,3 +219,11 @@ export const enum ReadStateType { GUILD_ONBOARDING_QUESTION = 4, MESSAGE_REQUESTS = 5, } + +type ChannelIdType = ReadStateType.CHANNEL; + +type UserIdType = ReadStateType.NOTIFICATION_CENTER | ReadStateType.MESSAGE_REQUESTS; + +type GuildIdType = ReadStateType.GUILD_EVENT | ReadStateType.GUILD_HOME | ReadStateType.GUILD_ONBOARDING_QUESTION; + +type GuildIdFromReadStateType = Type extends UserIdType ? null : string; diff --git a/packages/discord-types/src/internal.d.ts b/packages/discord-types/src/internal.d.ts index b653cbd85..e6d282f65 100644 --- a/packages/discord-types/src/internal.d.ts +++ b/packages/discord-types/src/internal.d.ts @@ -12,3 +12,7 @@ export type GenericConstructor = new (...args: any[]) => unknown; /** @internal */ export type Nullish = null | undefined; + +/** @internal */ +export type Overwrite + = Omit & Source; diff --git a/packages/discord-types/src/stores/PermissionStore.d.ts b/packages/discord-types/src/stores/PermissionStore.d.ts index 188eed93f..455142355 100644 --- a/packages/discord-types/src/stores/PermissionStore.d.ts +++ b/packages/discord-types/src/stores/PermissionStore.d.ts @@ -76,6 +76,6 @@ export class PermissionStore isRoleHigher(guild: GuildRecord, roleA: Role, roleB: Role): boolean; } -interface BasicPermissionsObject { +export interface BasicPermissionsObject { basicPermissions: bigint; } diff --git a/packages/vencord-types/package.json b/packages/vencord-types/package.json index ff3dd9e62..a9cc8baa9 100644 --- a/packages/vencord-types/package.json +++ b/packages/vencord-types/package.json @@ -17,13 +17,13 @@ "types": "./index.d.ts", "dependencies": { "@types/lodash": "~4.17.4", - "@types/node": "^18.19.33", - "@types/react": "~18.2.21", - "@types/react-dom": "~18.2.7", + "@types/node": "^18.19.34", + "@types/react": "~18.2.79", + "@types/react-dom": "~18.2.24", "@vencord/discord-types": "workspace:^", "discord-types": "^1.3.26", "standalone-electron-types": "^1.0.0", - "type-fest": "^4.18.3" + "type-fest": "^4.19.0" }, "devDependencies": { "@types/fs-extra": "^11.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e01cd426..f471d3c4b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,13 +54,13 @@ importers: specifier: ~4.17.4 version: 4.17.4 '@types/node': - specifier: ^18.19.33 - version: 18.19.33 + specifier: ^18.19.34 + version: 18.19.34 '@types/react': - specifier: ~18.2.21 + specifier: ~18.2.79 version: 18.2.79 '@types/react-dom': - specifier: ~18.2.7 + specifier: ~18.2.24 version: 18.2.25 '@types/yazl': specifier: ^2.4.2 @@ -123,11 +123,11 @@ importers: specifier: ^3.1.2 version: 3.1.2 tsx: - specifier: ^3.12.7 - version: 3.12.7 + specifier: ^4.11.2 + version: 4.11.2 type-fest: - specifier: ^4.18.3 - version: 4.18.3 + specifier: ^4.19.0 + version: 4.19.0 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -153,8 +153,8 @@ importers: specifier: 2.22.2 version: 2.22.2 type-fest: - specifier: ^4.18.3 - version: 4.18.3 + specifier: ^4.19.0 + version: 4.19.0 devDependencies: '@eslint-types/unicorn': specifier: ^52.0.0 @@ -181,8 +181,8 @@ importers: specifier: ^5.4.5 version: 5.4.5 typescript-eslint: - specifier: ^8.0.0-alpha.26 - version: 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) + specifier: ^8.0.0-alpha.27 + version: 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) packages/vencord-types: dependencies: @@ -190,13 +190,13 @@ importers: specifier: ~4.17.4 version: 4.17.4 '@types/node': - specifier: ^18.19.33 - version: 18.19.33 + specifier: ^18.19.34 + version: 18.19.34 '@types/react': - specifier: ~18.2.21 + specifier: ~18.2.79 version: 18.2.79 '@types/react-dom': - specifier: ~18.2.7 + specifier: ~18.2.24 version: 18.2.25 '@vencord/discord-types': specifier: workspace:^ @@ -208,8 +208,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 type-fest: - specifier: ^4.18.3 - version: 4.18.3 + specifier: ^4.19.0 + version: 4.19.0 devDependencies: '@types/fs-extra': specifier: ^11.0.4 @@ -266,27 +266,12 @@ packages: peerDependencies: postcss-selector-parser: ^6.0.10 - '@esbuild-kit/cjs-loader@2.4.2': - resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} - - '@esbuild-kit/core-utils@3.1.0': - resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} - - '@esbuild-kit/esm-loader@2.5.5': - resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} - '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.17.18': - resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.20.2': resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} @@ -299,108 +284,54 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.17.18': - resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.20.2': resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.17.18': - resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.20.2': resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.17.18': - resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.20.2': resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.17.18': - resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.20.2': resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.17.18': - resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.20.2': resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.17.18': - resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.17.18': - resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.20.2': resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.17.18': - resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.20.2': resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.17.18': - resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.20.2': resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} @@ -413,144 +344,72 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.17.18': - resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.20.2': resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.17.18': - resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.20.2': resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.17.18': - resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.20.2': resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.17.18': - resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.20.2': resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.17.18': - resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.20.2': resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.17.18': - resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.20.2': resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.17.18': - resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.20.2': resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.17.18': - resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.20.2': resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.17.18': - resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.20.2': resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.17.18': - resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.20.2': resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.17.18': - resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.20.2': resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.17.18': - resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.20.2': resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} @@ -730,8 +589,8 @@ packages: '@types/minimist@1.2.2': resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - '@types/node@18.19.33': - resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==} + '@types/node@18.19.34': + resolution: {integrity: sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==} '@types/normalize-package-data@2.4.1': resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -765,8 +624,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.0.0-alpha.26': - resolution: {integrity: sha512-25oYeFw55ZDU+yReSEA8aWekSYwArgs0lNICMK/kCASD0Dk37MiBf9NJnA2RxtN8YUljtXKfzv6HbWjzXWAuWQ==} + '@typescript-eslint/eslint-plugin@8.0.0-alpha.27': + resolution: {integrity: sha512-HepmIGj1W4aBd5e9HEfMlw2RuEH+c66KGrqZ14onwsToQhTXD4ZxEVYCZnHlFjluOKUzU98is310UZrB90d4Tg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -786,8 +645,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.0.0-alpha.26': - resolution: {integrity: sha512-fSrBlmbFfIZHp/blR6EA+AfeFfWDqY5s44mQ3eIZL/kvJJeIsHzToDbSCW6DbgmFgHDxoW4VmFqDdY3uXyx1IA==} + '@typescript-eslint/parser@8.0.0-alpha.27': + resolution: {integrity: sha512-1exQE52lVo2CNbit0PmFd0eIeNcbn5mgrK+lvrGNsYIGpkImVNovpRcjoKCK8xwM8ixWCavk5t6VgXH4e6meVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -804,8 +663,8 @@ packages: resolution: {integrity: sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.0.0-alpha.26': - resolution: {integrity: sha512-qOL1MEDHXJn2egI9tj0YJ3j/9QUK6tSO/nNY/zmArZu8DS+nDQGKf/qSy0GuqOeIdMHu0h0jTo5pDanOURgWlw==} + '@typescript-eslint/scope-manager@8.0.0-alpha.27': + resolution: {integrity: sha512-EVXL2YusRd470P5BFADQ4uKlydQua8ifzPnDik0Im42RECDXUs2B0jFfQbsgVQ0prY5gOtakk7a4JbxQLvqQZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@7.12.0': @@ -818,8 +677,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.0.0-alpha.26': - resolution: {integrity: sha512-LUNlz/sYwbXR3cL7dAfULweSP9dibynFqTuHWrokhhOH6hr/pgRrfudqjvxqAK7bMMxvrTzCYOtlcPQYvF8quQ==} + '@typescript-eslint/type-utils@8.0.0-alpha.27': + resolution: {integrity: sha512-T8AIBZV+dVR7Asf1M2IAihe/L5CVp+gMJf4D+2ESAt4Lv0Yi9E35cY7S5kkvU83/8qsKQO/yRIZyRMLx9SGEPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -835,8 +694,8 @@ packages: resolution: {integrity: sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.0.0-alpha.26': - resolution: {integrity: sha512-kO+wa+n1q1oh2xzjSYlXub/AsiV8Hi+gVC5FHleEIREZpwzTHLiJyZiSDWWjQfuq6XVyPxusWhQpjH8dIcOzwg==} + '@typescript-eslint/types@8.0.0-alpha.27': + resolution: {integrity: sha512-L9w7s4ACzvsd7dr8iGGdz5YSVEHOjC3FLY0NvMvn+CfdWop2jubnb2zios6jhsttKu0lViNE6+D+bKzyHOKJQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.11.0': @@ -857,8 +716,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.0.0-alpha.26': - resolution: {integrity: sha512-XGljoEEK6Z9X4Okx1VwPlgotcZsZg5Kzm8yoGhRxIX/FyenJTtHEFlhz+tIajW20Ez/gToPdzPJmVaEzEwwzKw==} + '@typescript-eslint/typescript-estree@8.0.0-alpha.27': + resolution: {integrity: sha512-/BZv7UgL5ck1xAORdDG3scXuLzBgGGQBoRCo8M6AxzeGtrC6mIxFW2/1bePnbT3AiWWTeDk0xvjcu2gydjIu9w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -878,8 +737,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.0.0-alpha.26': - resolution: {integrity: sha512-1nSZmX3HOva66uC0UrtXWNd+IK76iNp6nXIgUF3xzOdMZ6E6HeqrXT+T+O+mQT2BRS6TYgMPg9cp28BQtwT6Fg==} + '@typescript-eslint/utils@8.0.0-alpha.27': + resolution: {integrity: sha512-6bi93eaESc8Z+emTkoQWEMPz8DV2/2T5mQ/BDGq+TdBOX3CmJoauMoPyYu5Nao5G/b8IEa+iXzT9fhOHKHKJOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -892,8 +751,8 @@ packages: resolution: {integrity: sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.0.0-alpha.26': - resolution: {integrity: sha512-5QLzjFiNqkFV5AuQRCc1Q4OA3AdhcFjMTz9/9+FgrFI6L0vuEmm+V9dOOZocMeD0+SwajUqodTKyhSJ89YleOA==} + '@typescript-eslint/visitor-keys@8.0.0-alpha.27': + resolution: {integrity: sha512-bwEVlTWtzHaqaedug01Jll3gVZKxK/QpS7/iXqciI6EngfjthwXE3inM/J+6CtxHrTBkcX75ShzNYDrClKn4jw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -1451,11 +1310,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.17.18: - resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} @@ -1713,11 +1567,6 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2815,10 +2664,6 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsx@3.12.7: - resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==} - hasBin: true - tsx@4.11.2: resolution: {integrity: sha512-V5DL5v1BuItjsQ2FN9+4OjR7n5cr8hSgN+VGmm/fd2/0cgQdBIWHcQ3bFYm/5ZTmyxkTDBUIaRuW2divgfPe0A==} engines: {node: '>=18.0.0'} @@ -2844,8 +2689,8 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@4.18.3: - resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} + type-fest@4.19.0: + resolution: {integrity: sha512-CN2l+hWACRiejlnr68vY0/7734Kzu+9+TOslUXbSCQ1ruY9XIHDBSceVXCcHm/oXrdzhtLMMdJEKfemf1yXiZQ==} engines: {node: '>=16'} typed-array-buffer@1.0.2: @@ -2864,8 +2709,8 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript-eslint@8.0.0-alpha.26: - resolution: {integrity: sha512-J42oz1vXxiglijmq5cERYNFekBcExcCRKjueXkFF0LsZNK89uN1SZACICOkS75PT8NQ+qwdW3lMd6wIbCS4DLA==} + typescript-eslint@8.0.0-alpha.27: + resolution: {integrity: sha512-33OLepILfCgcbHIEH+JBgJWGP1fv+XO6KctFa8cvFqNOy4oX5clIg5fp+/p9NBNvNQh9IXrXltjsj2BuquHX8g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3046,159 +2891,78 @@ snapshots: dependencies: postcss-selector-parser: 6.0.12 - '@esbuild-kit/cjs-loader@2.4.2': - dependencies: - '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.7.5 - - '@esbuild-kit/core-utils@3.1.0': - dependencies: - esbuild: 0.17.18 - source-map-support: 0.5.21 - - '@esbuild-kit/esm-loader@2.5.5': - dependencies: - '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.7.5 - '@esbuild/aix-ppc64@0.20.2': optional: true - '@esbuild/android-arm64@0.17.18': - optional: true - '@esbuild/android-arm64@0.20.2': optional: true '@esbuild/android-arm@0.15.18': optional: true - '@esbuild/android-arm@0.17.18': - optional: true - '@esbuild/android-arm@0.20.2': optional: true - '@esbuild/android-x64@0.17.18': - optional: true - '@esbuild/android-x64@0.20.2': optional: true - '@esbuild/darwin-arm64@0.17.18': - optional: true - '@esbuild/darwin-arm64@0.20.2': optional: true - '@esbuild/darwin-x64@0.17.18': - optional: true - '@esbuild/darwin-x64@0.20.2': optional: true - '@esbuild/freebsd-arm64@0.17.18': - optional: true - '@esbuild/freebsd-arm64@0.20.2': optional: true - '@esbuild/freebsd-x64@0.17.18': - optional: true - '@esbuild/freebsd-x64@0.20.2': optional: true - '@esbuild/linux-arm64@0.17.18': - optional: true - '@esbuild/linux-arm64@0.20.2': optional: true - '@esbuild/linux-arm@0.17.18': - optional: true - '@esbuild/linux-arm@0.20.2': optional: true - '@esbuild/linux-ia32@0.17.18': - optional: true - '@esbuild/linux-ia32@0.20.2': optional: true '@esbuild/linux-loong64@0.15.18': optional: true - '@esbuild/linux-loong64@0.17.18': - optional: true - '@esbuild/linux-loong64@0.20.2': optional: true - '@esbuild/linux-mips64el@0.17.18': - optional: true - '@esbuild/linux-mips64el@0.20.2': optional: true - '@esbuild/linux-ppc64@0.17.18': - optional: true - '@esbuild/linux-ppc64@0.20.2': optional: true - '@esbuild/linux-riscv64@0.17.18': - optional: true - '@esbuild/linux-riscv64@0.20.2': optional: true - '@esbuild/linux-s390x@0.17.18': - optional: true - '@esbuild/linux-s390x@0.20.2': optional: true - '@esbuild/linux-x64@0.17.18': - optional: true - '@esbuild/linux-x64@0.20.2': optional: true - '@esbuild/netbsd-x64@0.17.18': - optional: true - '@esbuild/netbsd-x64@0.20.2': optional: true - '@esbuild/openbsd-x64@0.17.18': - optional: true - '@esbuild/openbsd-x64@0.20.2': optional: true - '@esbuild/sunos-x64@0.17.18': - optional: true - '@esbuild/sunos-x64@0.20.2': optional: true - '@esbuild/win32-arm64@0.17.18': - optional: true - '@esbuild/win32-arm64@0.20.2': optional: true - '@esbuild/win32-ia32@0.17.18': - optional: true - '@esbuild/win32-ia32@0.20.2': optional: true - '@esbuild/win32-x64@0.17.18': - optional: true - '@esbuild/win32-x64@0.20.2': optional: true @@ -3397,7 +3161,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 18.19.33 + '@types/node': 18.19.34 '@types/har-format@1.2.13': {} @@ -3407,13 +3171,13 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.34 '@types/lodash@4.17.4': {} '@types/minimist@1.2.2': {} - '@types/node@18.19.33': + '@types/node@18.19.34': dependencies: undici-types: 5.26.5 @@ -3437,12 +3201,12 @@ snapshots: '@types/yauzl@2.10.0': dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.34 optional: true '@types/yazl@2.4.2': dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.34 '@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: @@ -3462,14 +3226,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.0.0-alpha.26(@typescript-eslint/parser@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.0.0-alpha.27(@typescript-eslint/parser@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.0.0-alpha.26 - '@typescript-eslint/type-utils': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.26 + '@typescript-eslint/parser': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.27 + '@typescript-eslint/type-utils': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.27 eslint: 9.4.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -3493,12 +3257,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/parser@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.0.0-alpha.26 - '@typescript-eslint/types': 8.0.0-alpha.26 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.26(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.26 + '@typescript-eslint/scope-manager': 8.0.0-alpha.27 + '@typescript-eslint/types': 8.0.0-alpha.27 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.27(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.27 debug: 4.3.4 eslint: 9.4.0 optionalDependencies: @@ -3516,10 +3280,10 @@ snapshots: '@typescript-eslint/types': 7.12.0 '@typescript-eslint/visitor-keys': 7.12.0 - '@typescript-eslint/scope-manager@8.0.0-alpha.26': + '@typescript-eslint/scope-manager@8.0.0-alpha.27': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.26 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.26 + '@typescript-eslint/types': 8.0.0-alpha.27 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.27 '@typescript-eslint/type-utils@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: @@ -3533,10 +3297,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.0-alpha.26(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.0.0-alpha.27(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) debug: 4.3.4 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -3549,7 +3313,7 @@ snapshots: '@typescript-eslint/types@7.12.0': {} - '@typescript-eslint/types@8.0.0-alpha.26': {} + '@typescript-eslint/types@8.0.0-alpha.27': {} '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': dependencies: @@ -3581,10 +3345,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.0.0-alpha.26(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.0.0-alpha.27(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.26 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.26 + '@typescript-eslint/types': 8.0.0-alpha.27 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.27 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3618,12 +3382,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) - '@typescript-eslint/scope-manager': 8.0.0-alpha.26 - '@typescript-eslint/types': 8.0.0-alpha.26 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.26(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.27 + '@typescript-eslint/types': 8.0.0-alpha.27 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.27(typescript@5.4.5) eslint: 9.4.0 transitivePeerDependencies: - supports-color @@ -3639,9 +3403,9 @@ snapshots: '@typescript-eslint/types': 7.12.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.0.0-alpha.26': + '@typescript-eslint/visitor-keys@8.0.0-alpha.27': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.26 + '@typescript-eslint/types': 8.0.0-alpha.27 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -4228,31 +3992,6 @@ snapshots: esbuild-windows-64: 0.15.18 esbuild-windows-arm64: 0.15.18 - esbuild@0.17.18: - optionalDependencies: - '@esbuild/android-arm': 0.17.18 - '@esbuild/android-arm64': 0.17.18 - '@esbuild/android-x64': 0.17.18 - '@esbuild/darwin-arm64': 0.17.18 - '@esbuild/darwin-x64': 0.17.18 - '@esbuild/freebsd-arm64': 0.17.18 - '@esbuild/freebsd-x64': 0.17.18 - '@esbuild/linux-arm': 0.17.18 - '@esbuild/linux-arm64': 0.17.18 - '@esbuild/linux-ia32': 0.17.18 - '@esbuild/linux-loong64': 0.17.18 - '@esbuild/linux-mips64el': 0.17.18 - '@esbuild/linux-ppc64': 0.17.18 - '@esbuild/linux-riscv64': 0.17.18 - '@esbuild/linux-s390x': 0.17.18 - '@esbuild/linux-x64': 0.17.18 - '@esbuild/netbsd-x64': 0.17.18 - '@esbuild/openbsd-x64': 0.17.18 - '@esbuild/sunos-x64': 0.17.18 - '@esbuild/win32-arm64': 0.17.18 - '@esbuild/win32-ia32': 0.17.18 - '@esbuild/win32-x64': 0.17.18 - esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -4629,9 +4368,6 @@ snapshots: fs.realpath@1.0.0: {} - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true @@ -5571,7 +5307,7 @@ snapshots: standalone-electron-types@1.0.0: dependencies: - '@types/node': 18.19.33 + '@types/node': 18.19.34 static-extend@0.1.2: dependencies: @@ -5769,14 +5505,6 @@ snapshots: tslib@2.6.2: {} - tsx@3.12.7: - dependencies: - '@esbuild-kit/cjs-loader': 2.4.2 - '@esbuild-kit/core-utils': 3.1.0 - '@esbuild-kit/esm-loader': 2.5.5 - optionalDependencies: - fsevents: 2.3.2 - tsx@4.11.2: dependencies: esbuild: 0.20.2 @@ -5796,7 +5524,7 @@ snapshots: type-fest@0.8.1: {} - type-fest@4.18.3: {} + type-fest@4.19.0: {} typed-array-buffer@1.0.2: dependencies: @@ -5830,11 +5558,11 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript-eslint@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5): + typescript-eslint@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0-alpha.26(@typescript-eslint/parser@8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/parser': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.26(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.0.0-alpha.27(@typescript-eslint/parser@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/parser': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: From 0cc59f185940d973fcbf7ca499de2abf23c5309b Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Wed, 5 Jun 2024 22:12:51 -0400 Subject: [PATCH 028/126] Progress --- package.json | 2 +- packages/discord-types/package.json | 2 +- .../discord-types/src/general/Activity.d.ts | 4 +- .../src/general/ChannelMessages.d.ts | 155 -- .../discord-types/src/general/ReadState.d.ts | 68 +- packages/discord-types/src/general/index.d.ts | 3 +- .../src/general/messages/ChannelMessages.d.ts | 190 +++ .../src/general/messages/MessageCache.d.ts | 35 + .../general/{ => messages}/MessageRecord.d.ts | 1408 ++++++++--------- .../src/general/messages/index.d.ts | 9 + packages/discord-types/src/internal.d.ts | 3 + .../src/stores/GuildChannelStore.d.ts | 4 +- .../src/stores/ReadStateStore.d.ts | 61 +- pnpm-lock.yaml | 102 +- 14 files changed, 1070 insertions(+), 976 deletions(-) delete mode 100644 packages/discord-types/src/general/ChannelMessages.d.ts create mode 100644 packages/discord-types/src/general/messages/ChannelMessages.d.ts create mode 100644 packages/discord-types/src/general/messages/MessageCache.d.ts rename packages/discord-types/src/general/{ => messages}/MessageRecord.d.ts (95%) create mode 100644 packages/discord-types/src/general/messages/index.d.ts diff --git a/package.json b/package.json index f565ee141..572335eec 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "typescript-transform-paths": "^3.4.7", "zip-local": "^0.3.5" }, - "packageManager": "pnpm@9.1.4", + "packageManager": "pnpm@9.2.0", "pnpm": { "patchedDependencies": { "eslint-plugin-path-alias@1.1.0": "patches/eslint-plugin-path-alias@1.1.0.patch", diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index 3181d96dc..1f22881ee 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -34,6 +34,6 @@ "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-unicorn": "^53.0.0", "typescript": "^5.4.5", - "typescript-eslint": "^8.0.0-alpha.27" + "typescript-eslint": "^8.0.0-alpha.28" } } diff --git a/packages/discord-types/src/general/Activity.d.ts b/packages/discord-types/src/general/Activity.d.ts index 251d68893..a36c47a08 100644 --- a/packages/discord-types/src/general/Activity.d.ts +++ b/packages/discord-types/src/general/Activity.d.ts @@ -33,9 +33,9 @@ export interface ActivityAssets { small_text?: string; } -export type ActivityEmoji = ActivityCustomEmoji | ActivityUnicodeEmoji; +export type ActivityEmoji = ActivityGuildEmoji | ActivityUnicodeEmoji; -export interface ActivityCustomEmoji { +export interface ActivityGuildEmoji { animated: boolean; id: string; name: string; diff --git a/packages/discord-types/src/general/ChannelMessages.d.ts b/packages/discord-types/src/general/ChannelMessages.d.ts deleted file mode 100644 index 730f86317..000000000 --- a/packages/discord-types/src/general/ChannelMessages.d.ts +++ /dev/null @@ -1,155 +0,0 @@ -/* - * discord-types - * Copyright (C) 2024 Vencord project contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import type { MessageRecord } from "./MessageRecord"; - -export class ChannelMessages { - constructor(channelId: string); - - static _channelMessages: any; // TEMP - static clear(e?: any): any; // TEMP - static clearCache(e?: any): any; // TEMP - static commit(e?: any): any; // TEMP - static forEach(e?: any): any; // TEMP - static get(e?: any): any; // TEMP - static getOrCreate(e?: any): any; // TEMP - static hasPresent(e?: any): any; // TEMP - - _clearMessages(): void; - _merge(e?: any): any; // TEMP - addCachedMessages(e?: any, t?: any): any; // TEMP - filter( - predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => value is T, - thisArg?: unknown - ): T[]; - filter( - predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, - thisArg?: unknown - ): MessageRecord[]; - findNewest(e?: any): any; // TEMP - findOldest(e?: any): any; // TEMP - first(): MessageRecord | undefined; - focusOnMessage(e?: any): any; // TEMP - forAll( - callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, - thisArg?: unknown - ): void; - forEach( - callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, - thisArg?: unknown - ): void; - get(e?: any): any; // TEMP - getAfter(e?: any): any; // TEMP - getByIndex(index: number): any /* | undefined */; // TEMP - getManyAfter(e?: any, t?: any, n?: any): any; // TEMP - getManyBefore(e?: any, t?: any, n?: any): any; // TEMP - has(e?: any): boolean; // TEMP - hasAfterCached(e?: any): any; // TEMP - hasBeforeCached(e?: any): any; // TEMP - hasPresent(): any; // TEMP - indexOf(searchElement: any): number; // TEMP - jumpToMessage(e?: any): any; // TEMP - jumpToPresent(e?: any): any; // TEMP - last(): MessageRecord | undefined; - get length(): number; - loadComplete(e?: any): any; // TEMP - loadFromCache(e?: any, t?: any): any; // TEMP - loadStart(e?: any): any; // TEMP - map( - callback: (value: MessageRecord, index: number, array: MessageRecord[]) => T, - thisArg?: unknown - ): T[]; - merge(e?: any): any; // TEMP - mergeDelta(): any; // TEMP - mutate(e?: any): any; // TEMP - receiveMessage(e?: any): any; // TEMP - receivePushNotification(e?: any): any; // TEMP - reduce( - callback: ( - previousValue: MessageRecord, - currentValue: MessageRecord, - currentIndex: number, - array: MessageRecord[] - ) => MessageRecord, - initialValue?: MessageRecord | undefined - ): MessageRecord; - reduce( - callback: ( - previousValue: MessageRecord, - currentValue: T, - currentIndex: number, - array: MessageRecord[] - ) => T, - initialValue: T - ): T; - remove(e?: any): any; // TEMP - removeMany(e?: any): any; // TEMP - replace(e?: any, t?: any): any; // TEMP - reset(e?: any): any; // TEMP - some( - predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, - thisArg?: unknown - ): boolean; - toArray(): MessageRecord[]; - truncate(e?: any, t?: any): any; // TEMP - truncateBottom(e?: any): any; // TEMP - truncateTop(e?: any): any; // TEMP - update(e?: any, t?: any): any; // TEMP - - _after: MessageCache; - _array: MessageRecord[]; - _before: MessageCache; - _map: { [messageId: string]: MessageRecord; }; - cached: boolean; - channelId: string; - error: boolean; - focusTargetId: any; // TEMP - hasFetched: boolean; - hasMoreAfter: boolean; - hasMoreBefore: boolean; - jumped: boolean; - jumpedToPresent: boolean; - jumpFlash: boolean; - jumpReturnTargetId: string | null; // TEMP - jumpSequenceId: number; // TEMP - jumpTargetId: string | null; // TEMP - jumpTargetOffset: number; // TEMP - jumpType: JumpType; - loadingMore: boolean; - ready: boolean; - revealedMessageId: string | null; // TEMP -} - -export class MessageCache { - constructor(isCacheBefore: boolean); - - cache(e?: any): void; // TEMP - clear(): void; // TEMP - clone(): any; // TEMP - extract(e?: any): any; // TEMP - extractAll(): any; // TEMP - forEach(callback: (value: any, index: number, array: any[]) => void, thisArg?: unknown): void; // TEMP - get(e?: any): any; // TEMP - has(e?: any): boolean; // TEMP - get length(): any; // TEMP - remove(e?: any): void; // TEMP - removeMany(e?: any): void; // TEMP - replace(e?: any, t?: any): void; // TEMP - update(e?: any, t?: any): void; // TEMP - get wasAtEdge(): any; // TEMP - set wasAtEdge(e: any); // TEMP - - _isCacheBefore: boolean; - _map: any; // TEMP - _messages: any[]; // TEMP - _wasAtEdge: boolean; -} - -// Original name: JumpTypes -export const enum JumpType { - ANIMATED = "ANIMATED", - INSTANT = "INSTANT", -} diff --git a/packages/discord-types/src/general/ReadState.d.ts b/packages/discord-types/src/general/ReadState.d.ts index 1d83de9ee..e84a1e30d 100644 --- a/packages/discord-types/src/general/ReadState.d.ts +++ b/packages/discord-types/src/general/ReadState.d.ts @@ -9,41 +9,41 @@ import type { BasicPermissionsObject } from "../stores/PermissionStore"; import type { GuildChannelRecord } from "./channels/ChannelRecord"; export class ReadState { - constructor(channelId: string, type?: ChannelIdType | undefined); - constructor(userId: string, type: UserIdType); - constructor(guildId: string, type: GuildIdType); + constructor(channelId: string, type?: ChannelIdReadStateType | undefined); + constructor(userId: string, type: UserIdReadStateType); + constructor(guildId: string, type: GuildIdReadStateType); static _guildReadStateSentinels: { [guildId: string]: { unreadsSentinel: number; }; }; static _mentionChannels: Set; - static _readStates: { [T in ChannelIdType]?: { [channelId: string]: ReadState; }; } - & { [T in UserIdType]?: { [userId: string]: ReadState; }; } - & { [T in GuildIdType]?: { [guildId: string]: ReadState; }; }; - static clear(channelId: string, type?: T): boolean; - static clear(userId: string, type: T): boolean; - static clear(guildId: string, type: T): boolean; + static _readStates: { [T in ChannelIdReadStateType]?: { [channelId: string]: ReadState; }; } + & { [T in UserIdReadStateType]?: { [userId: string]: ReadState; }; } + & { [T in GuildIdReadStateType]?: { [guildId: string]: ReadState; }; }; + static clear(channelId: string, type?: T): boolean; + static clear(userId: string, type: T): boolean; + static clear(guildId: string, type: T): boolean; static clearAll(): void; static forEach(callback: (value: ReadState) => unknown): void; - static get(channelId: string, type?: T): ReadState; - static get(userId: string, type: T): ReadState; - static get(guildId: string, type: T): ReadState; + static get(channelId: string, type?: T): ReadState; + static get(userId: string, type: T): ReadState; + static get(guildId: string, type: T): ReadState; static getGuildSentinels(guildId: string): typeof ReadState["_guildReadStateSentinels"]; - static getIfExists(channelId: string, type?: T): ReadState | undefined; - static getIfExists(userId: string, type: T): ReadState | undefined; - static getIfExists(guildId: string, type: T): ReadState | undefined; + static getIfExists(channelId: string, type?: T): ReadState | undefined; + static getIfExists(userId: string, type: T): ReadState | undefined; + static getIfExists(guildId: string, type: T): ReadState | undefined; static getMentionChannelIds(): string[]; - static getValue( + static getValue( channelId: string, type: T, - getter: (readState: ReadState | undefined) => GetterReturn, + getter: (readState: ReadState | undefined) => GetterReturn, defaultValue?: DefaultValue ): GetterReturn | DefaultValue; - static getValue( + static getValue( userId: string, type: T, getter: (readState: ReadState | undefined) => GetterReturn, defaultValue?: DefaultValue ): GetterReturn | DefaultValue; - static getValue( + static getValue( guildId: string, type: T, getter: (readState: ReadState | undefined) => GetterReturn, @@ -59,13 +59,13 @@ export class ReadState { isExplicitUserAction?: boolean | undefined ): boolean; ack(options: { - force?: boolean | undefined; /* = false */ - immediate?: boolean | undefined; /* = false */ - isExplicitUserAction?: boolean | undefined; /* = false */ - local?: boolean | undefined; /* = false */ - location?: { section: string; }; /* = { section: AnalyticsSections.CHANNEL } */ - messageId?: string | Nullish; /* = this.lastMessageId */ - trackAnalytics?: boolean | undefined; /* = true */ + force?: boolean | undefined /* = false */; + immediate?: boolean | undefined /* = false */; + isExplicitUserAction?: boolean | undefined /* = false */; + local?: boolean | undefined /* = false */; + location?: { section: string; } /* = { section: AnalyticsSections.CHANNEL } */; + messageId?: string | Nullish /* = this.lastMessageId */; + trackAnalytics?: boolean | undefined /* = true */; }): boolean; get ackMessageId(): this["_ackMessageId"]; set ackMessageId(messageId: this["_ackMessageId"]); @@ -119,7 +119,7 @@ export class ReadState { get oldestUnreadTimestamp(): number; rebuildChannelState( ackMessageId?: string | Nullish, - resetMentionCount?: boolean | undefined, /* = false */ + resetMentionCount?: boolean | undefined /* = false */, newMentionCount?: number | Nullish ): void; recalculateFlags(): ReadStateFlags | undefined; @@ -210,6 +210,12 @@ export const enum ReadStateFlags { IS_THREAD = 1 << 1, } +export type ChannelIdReadStateType = ReadStateType.CHANNEL; + +export type UserIdReadStateType = ReadStateType.NOTIFICATION_CENTER | ReadStateType.MESSAGE_REQUESTS; + +export type GuildIdReadStateType = ReadStateType.GUILD_EVENT | ReadStateType.GUILD_HOME | ReadStateType.GUILD_ONBOARDING_QUESTION; + // Original name: ReadStateTypes export const enum ReadStateType { CHANNEL = 0, @@ -220,10 +226,4 @@ export const enum ReadStateType { MESSAGE_REQUESTS = 5, } -type ChannelIdType = ReadStateType.CHANNEL; - -type UserIdType = ReadStateType.NOTIFICATION_CENTER | ReadStateType.MESSAGE_REQUESTS; - -type GuildIdType = ReadStateType.GUILD_EVENT | ReadStateType.GUILD_HOME | ReadStateType.GUILD_ONBOARDING_QUESTION; - -type GuildIdFromReadStateType = Type extends UserIdType ? null : string; +type GuildIdFromReadStateType = Type extends UserIdReadStateType ? null : string; diff --git a/packages/discord-types/src/general/index.d.ts b/packages/discord-types/src/general/index.d.ts index 4250de7ed..1e7314fb9 100644 --- a/packages/discord-types/src/general/index.d.ts +++ b/packages/discord-types/src/general/index.d.ts @@ -6,7 +6,6 @@ export * from "./Activity"; export * from "./ApplicationRecord"; -export * from "./ChannelMessages"; export * from "./channels"; export * from "./Clan"; export * from "./CompanyRecord"; @@ -17,7 +16,7 @@ export * from "./GuildMember"; export * from "./GuildMemberProfile"; export * from "./GuildRecord"; export * from "./ImmutableRecord"; -export * from "./MessageRecord"; +export * from "./messages"; export * from "./misc"; export * from "./ReadState"; export * from "./Role"; diff --git a/packages/discord-types/src/general/messages/ChannelMessages.d.ts b/packages/discord-types/src/general/messages/ChannelMessages.d.ts new file mode 100644 index 000000000..4a6b73015 --- /dev/null +++ b/packages/discord-types/src/general/messages/ChannelMessages.d.ts @@ -0,0 +1,190 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish, Optional } from "../../internal"; +import type { MessageCache } from "./MessageCache"; +import type { MessageRecord } from "./MessageRecord"; + +export type ChannelMessagesOwnProperties = Pick; + +export class ChannelMessages { + constructor(channelId: string); + + static _channelMessages: { [channelId: string]: ChannelMessages; }; + static clear(channelId: string): void; + static clearCache(channelId: string): void; + static commit(channelMessages: ChannelMessages): void; + static forEach(callback: (value: ChannelMessages, index: number, array: ChannelMessages[]) => unknown): void; + static get(channelId: string): ChannelMessages | undefined; + static getOrCreate(channelId: string): ChannelMessages; + static hasPresent(channelId: string): boolean; + + _clearMessages(): void; + _merge( + messages: MessageRecord[], + isBefore?: boolean | undefined /* = false */, + clearCache?: boolean | undefined /* = false */ + ): void; + addCachedMessages(messages: MessageRecord[], cached: boolean): ChannelMessages; + filter( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => value is T, + thisArg?: unknown + ): T[]; + filter( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, + thisArg?: unknown + ): MessageRecord[]; + findNewest( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => value is T + ): T | undefined; + findNewest( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown + ): MessageRecord | undefined; + findOldest( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => value is T + ): T | undefined; + findOldest( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown + ): MessageRecord | undefined; + first(): MessageRecord | undefined; + focusOnMessage(messageId: string): ChannelMessages; + forAll( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, + thisArg?: unknown + ): void; + forEach( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => + [BreakOnReturnFalse] extends [false | undefined] + // https://github.com/typescript-eslint/typescript-eslint/issues/8113 + // eslint-disable-next-line @typescript-eslint/no-invalid-void-type + ? void + : unknown, + thisArg?: unknown, + breakOnReturnFalse?: BreakOnReturnFalse + ): void; + get(messageId: string, searchCaches?: boolean | undefined /* = false */): MessageRecord | undefined; + getAfter(messageId: string): MessageRecord | null; + getByIndex(index: number): MessageRecord | undefined; + /** If count is -1, all results will be returned. */ + getManyAfter( + messageId: string, + count: number, + callback?: ((message: MessageRecord) => void) | Nullish + ): MessageRecord[] | null; + /** If count is -1, all results will be returned. */ + getManyBefore( + messageId: string, + count: number, + callback?: ((message: MessageRecord) => void) | Nullish + ): MessageRecord[] | null; + has(messageId: string, searchCaches?: boolean | undefined): boolean; + hasAfterCached(messageId: string): boolean; + hasBeforeCached(messageId: string): boolean; + hasPresent(): boolean; + indexOf(messageId: string): number; + jumpToMessage( + messageId: string | null, + jumpFlash?: boolean | undefined /* = true */, + jumpTargetOffset?: number | Nullish, + jumpReturnTargetId?: string | Nullish, + jumpType?: JumpType | Nullish /* = JumpType.ANIMATED */ + ): ChannelMessages; + jumpToPresent(countFromPresent: number): ChannelMessages; + last(): MessageRecord | undefined; + get length(): number; + loadComplete(messageProperties: Record): ChannelMessages; // TEMP + loadFromCache(isBefore: boolean, extractCount: number): ChannelMessages; + loadStart(jumpConfig?: { + messageId?: string | Nullish; + offset?: number | Nullish; + present?: boolean | Nullish; + returnMessageId?: string | Nullish; + } | Nullish): ChannelMessages; + map( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => T, + thisArg?: unknown + ): T[]; + merge( + messages: MessageRecord[], + isBefore?: boolean | undefined /* = false */, + clearCache?: boolean | undefined /* = false */ + ): ChannelMessages; + mergeDelta( + messages?: MessageRecord[] | undefined /* = [] */, + messageProperties?: Record[] | undefined /* = [] */, // TEMP + excludedMessageIds?: string[] /* = [] */ + ): ChannelMessages; + mutate( + mutaterOrObject?: ((channelMessages: ChannelMessages) => void) + | Optional>, + deep?: boolean | undefined /* = false */ + ): ChannelMessages; + receiveMessage( + messageProperties: Record, // TEMP + truncateTop?: boolean | undefined /* = true */ + ): ChannelMessages | this; + receivePushNotification(messageProperties: Record): ChannelMessages | this; // TEMP + reduce( + callback: ( + previousValue: MessageRecord, + currentValue: MessageRecord, + currentIndex: number, + array: MessageRecord[] + ) => MessageRecord, + initialValue?: MessageRecord | undefined + ): MessageRecord; + reduce( + callback: ( + previousValue: MessageRecord, + currentValue: T, + currentIndex: number, + array: MessageRecord[] + ) => T, + initialValue: T + ): T; + remove(messageId: string): ChannelMessages; + removeMany(messageIds: string[]): ChannelMessages | this; + replace(messageId: string, message: MessageRecord): ChannelMessages | this; + reset(messages: MessageRecord[]): ChannelMessages; + some( + predicate: (value: MessageRecord, index: number, array: MessageRecord[]) => unknown, + thisArg?: unknown + ): boolean; + toArray(): MessageRecord[]; + truncate(count: number, mutateDeep?: boolean | undefined /* = true */): ChannelMessages | this; + truncateBottom(count: number, mutateDeep?: boolean | undefined /* = true */): ChannelMessages | this; + truncateTop(count: number, mutateDeep?: boolean | undefined /* = true */): ChannelMessages | this; + update(messageId: string, updater: (message: MessageRecord) => MessageRecord): ChannelMessages | this; + + _after: MessageCache; + _array: MessageRecord[]; + _before: MessageCache; + _map: { [messageId: string]: MessageRecord; }; + cached: boolean; + channelId: string; + error: boolean; + focusTargetId: string | undefined; + hasFetched: boolean; + hasMoreAfter: boolean; + hasMoreBefore: boolean; + jumped: boolean; + jumpedToPresent: boolean; + jumpFlash: boolean; + jumpReturnTargetId: string | Nullish; + jumpSequenceId: number; + jumpTargetId: string | null; + jumpTargetOffset: number; + jumpType: JumpType; + loadingMore: boolean; + ready: boolean; + revealedMessageId: string | null; +} + +// Original name: JumpTypes +export const enum JumpType { + ANIMATED = "ANIMATED", + INSTANT = "INSTANT", +} diff --git a/packages/discord-types/src/general/messages/MessageCache.d.ts b/packages/discord-types/src/general/messages/MessageCache.d.ts new file mode 100644 index 000000000..2dfe0fcc9 --- /dev/null +++ b/packages/discord-types/src/general/messages/MessageCache.d.ts @@ -0,0 +1,35 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { MessageRecord } from "./MessageRecord"; + +export class MessageCache { + constructor(isCacheBefore: boolean); + + cache(messages: MessageRecord[], wasAtEdge?: boolean | undefined /* = false */): void; + clear(): void; + clone(): MessageCache; + extract(count: number): MessageRecord[]; + extractAll(): MessageRecord[]; + forEach( + callback: (value: MessageRecord, index: number, array: MessageRecord[]) => void, + thisArg?: unknown + ): void; + get(messageId: string): MessageRecord | undefined; + has(messageId: string): boolean; + get length(): number; + remove(messageId: string): void; + removeMany(messageIds: string[]): void; + replace(messageId: string, message: MessageRecord): void; + update(messageId: string, updater: (message: MessageRecord) => MessageRecord): void; + get wasAtEdge(): boolean; + set wasAtEdge(wasAtEdge: boolean); + + _isCacheBefore: boolean; + _map: { [messageId: string]: MessageRecord; }; + _messages: MessageRecord[]; + _wasAtEdge: boolean; +} diff --git a/packages/discord-types/src/general/MessageRecord.d.ts b/packages/discord-types/src/general/messages/MessageRecord.d.ts similarity index 95% rename from packages/discord-types/src/general/MessageRecord.d.ts rename to packages/discord-types/src/general/messages/MessageRecord.d.ts index d65ba6f0d..ddfa26772 100644 --- a/packages/discord-types/src/general/MessageRecord.d.ts +++ b/packages/discord-types/src/general/messages/MessageRecord.d.ts @@ -1,704 +1,704 @@ -/* - * discord-types - * Copyright (C) 2024 Vencord project contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import type { Duration, Moment } from "moment"; -import type { SnakeCasedProperties } from "type-fest"; - -import type { Nullish } from "../internal"; -import type { ApplicationIntegrationType } from "./ApplicationRecord"; -import type { ChannelRecord, ChannelType } from "./channels"; -import type { ImmutableRecord } from "./ImmutableRecord"; -import type { UserRecord } from "./UserRecord"; - -export type MessageRecordOwnProperties = Pick; - -export class MessageRecord< - OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties -> extends ImmutableRecord { - constructor(messageProperties: Record); // TEMP - - addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP - addReactionBatch(e?: any, t?: any): any; // TEMP - canDeleteOwnMessage(userId: string): boolean; - getChannelId(): string; - getReaction(e?: any): any; // TEMP - hasFlag(flag: MessageFlags): boolean; - isCommandType(): boolean; - isEdited(): boolean; - isFirstMessageInForumPost(channel: ChannelRecord): boolean; // TEMP - isInteractionPlaceholder(): boolean; - isPoll(): boolean; - isSystemDM(): boolean; - isUIKitComponents(): boolean; - removeReaction(e?: any, t?: any, n?: any): this; // TEMP - removeReactionsForEmoji(e?: any): this; // TEMP - toJS(): OwnProperties & SnakeCasedProperties>; - userHasReactedWithEmoji(e?: any, t?: any): boolean; // TEMP - - activity: any/* | null*/; // TEMP - activityInstance: any/* | null*/; // TEMP - application: any/* | null*/; // TEMP - applicationId: string | null; // TEMP - attachments: MessageAttachment[]; - author: UserRecord; - blocked: boolean; - bot: boolean; - call: MessageCall | null; - changelogId: string | null; - channel_id: string; - codedLinks: CodedLink[]; - colorString: string | undefined; - components: MessageComponent[]; - content: string; - customRenderedContent: any/* | undefined*/; // TEMP - editedTimestamp: Date | null; - embeds: MessageEmbed[]; - flags: MessageFlags; - giftCodes: string[]; - giftInfo: MessageGiftInfo | undefined; - id: string; - interaction: InteractionRecord | null; - interactionData: InteractionData | null; - interactionError: string | null; - interactionMetadata: InteractionMetadata | null; - isSearchHit: boolean; - isUnsupported: boolean; - loggingName: string | null; // TEMP - mentionChannels: ChannelMention[]; - mentioned: boolean; - mentionEveryone: boolean; - mentionRoles: string[]; - mentions: string[]; - messageReference: MessageReference | null; - messageSnapshots: any[]; // TEMP - nick: any/* | undefined */; // TEMP - nonce: string | number | null; - pinned: boolean; - poll: MessagePoll | undefined; - purchaseNotification: MessagePurchaseNotification | undefined; - reactions: MessageReaction[]; - referralTrialOfferId: string | null; // TEMP - roleSubscriptionData: MessageRoleSubscriptionData | undefined; - state: MessageStates; - stickerItems: MessageStickerItem[]; - stickers: MessageSticker[]; - timestamp: Date; - tts: boolean; - type: MessageTypes; - webhookId: string | null; -} - -export const enum MessageAttachmentFlags { - IS_CLIP = 1 << 0, - IS_THUMBNAIL = 1 << 1, - IS_REMIX = 1 << 2, - IS_SPOILER = 1 << 3, - CONTAINS_EXPLICIT_MEDIA = 1 << 4, -} - -export interface MessageAttachment { - content_scan_version?: number; - content_type?: string; - description?: string; - duration_secs?: number; - ephemeral?: boolean; - filename: string; - flags?: MessageAttachmentFlags; - height?: number | null; - id: string; - placeholder?: string; - placeholder_version?: number; - proxy_url: string; - size: number; - spoiler: boolean; - url: string; - waveform?: string; - width?: number | null; -} - -export interface MessageCall { - duration: Duration | null; - endedTimestamp: Moment | null; - participants: string[]; -} - -export const enum CodedLinkType { - ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", - APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", - BUILD_OVERRIDE = "BUILD_OVERRIDE", - CHANNEL_LINK = "CHANNEL_LINK", - EMBEDDED_ACTIVITY_INVITE = "EMBEDDED_ACTIVITY_INVITE", - EVENT = "EVENT", - GUILD_PRODUCT = "GUILD_PRODUCT", - INVITE = "INVITE", - MANUAL_BUILD_OVERRIDE = "MANUAL_BUILD_OVERRIDE", - QUESTS_EMBED = "QUESTS_EMBED", - SERVER_SHOP = "SERVER_SHOP", - TEMPLATE = "TEMPLATE", -} - -export interface CodedLink { - code: string; - type: CodedLinkType; -} - -export interface MessageComponentEmoji { - animated: boolean | undefined; - id: string | undefined; - name: string | undefined; - src: string | undefined; -} - -// Original name: ComponentType -// Renamed to avoid name conflicts with ComponentType from React. -export const enum MessageComponentType { - ACTION_ROW = 1, - BUTTON = 2, - STRING_SELECT = 3, - INPUT_TEXT = 4, - USER_SELECT = 5, - ROLE_SELECT = 6, - MENTIONABLE_SELECT = 7, - CHANNEL_SELECT = 8, - TEXT = 10, - MEDIA_GALLERY = 12, - SEPARATOR = 14, -} - -export interface MessageActionRowComponent { - components: Exclude[]; - id: string; - type: MessageComponentType.ACTION_ROW; -} - -export const enum ButtonStyle { - PRIMARY = 1, - SECONDARY = 2, - SUCCESS = 3, - DESTRUCTIVE = 4, - LINK = 5, - PREMIUM = 6, -} - -/** - * @todo - * Must have one of either `customId` or `url`, but never both. - * If a button has `url` it must have the `Link` button style. - */ -export interface MessageButtonComponent { - customId: string | undefined; - disabled: boolean | undefined; - emoji: MessageComponentEmoji | undefined; - id: string; - label: string | undefined; - style: ButtonStyle; - type: MessageComponentType.BUTTON; - url: string | undefined; -} - -export const enum SelectOptionType { - STRING = 1, - USER = 2, - ROLE = 3, - CHANNEL = 4, - GUILD = 5, -} - -export interface SelectMenuOption { - default: boolean | undefined; - description: string | undefined; - emoji: MessageComponentEmoji | undefined; - label: string; - type: OptionType; - value: string; -} - -export interface MessageStringSelectComponent { - customId: string; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - options: SelectMenuOption[]; - placeholder: string; - type: MessageComponentType.STRING_SELECT; -} - -export const enum TextComponentStyle { - SMALL = 1, - PARAGRAPH = 2, -} - -export interface MessageTextInputComponent { - customId: string; - disabled: boolean | undefined; - id: string; - label: string; - maxLength: number | undefined; - minLength: number | undefined; - placeholder: string | undefined; - required: boolean; - style: TextComponentStyle; - type: MessageComponentType.INPUT_TEXT; - value: string | undefined; -} - -// Original name: SnowflakeSelectDefaultValueTypes -export const enum SnowflakeSelectDefaultValueType { - CHANNEL = "channel", - ROLE = "role", - USER = "user", -} - -export interface SelectMenuDefaultValue { - id: string; - type: DefaultValueType; -} - -export interface MessageUserSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.USER_SELECT; -} - -export interface MessageRoleSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.ROLE_SELECT; -} - -export interface MessageMentionableSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.MENTIONABLE_SELECT; -} - -export interface MessageChannelSelectComponent { - channelTypes: ChannelType[] | undefined; - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.CHANNEL_SELECT; -} - -export interface MessageTextComponent { - content: string | undefined; - id: string; - type: MessageComponentType.TEXT; -} - -export const enum ContentScanFlags { - EXPLICIT = 1, -} - -export interface MediaItem { - contentScanMetadata: { - contentScanFlags: ContentScanFlags | undefined; - version: number | undefined; - } | undefined; - contentType: string | undefined; - height: number | Nullish; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyUrl: string; - url: string; - width: number | Nullish; -} - -export interface MessageMediaGalleryComponent { - id: string; - items: { - description: string | undefined; - media: MediaItem; - spoiler: boolean; - }[]; - type: MessageComponentType.MEDIA_GALLERY; -} - -export const enum SeparatorSpacingSize { - SMALL = 1, - LARGE = 2, -} - -export interface MessageSeparatorComponent { - divider: boolean; - id: string; - spacing: SeparatorSpacingSize; - type: MessageComponentType.SEPARATOR; -} - -export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; - -export interface MessageEmbedAuthor { - iconProxyURL: string | undefined; - iconURL: string | undefined; - name: string; - url: string | undefined; -} - -export interface MessageEmbedField { - inline: boolean | undefined; - rawName: string; - rawValue: string; -} - -export const enum MessageEmbedFlags { - CONTAINS_EXPLICIT_MEDIA = 1 << 4, -} - -export interface MessageEmbedFooter { - iconProxyURL: string | undefined; - iconURL: string | undefined; - text: string; -} - -export interface MessageEmbedImage { - height: number | undefined; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string; - width: number | undefined; -} - -export interface MessageEmbedProvider { - name: string; - url: string | undefined; -} - -/** - * @todo - * An embed thumbnail either - * has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` - * or has only `height`, `url`, and `width`. - */ -export interface MessageEmbedThumbnail { - height: number; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string; - width: number; -} - -// Original name: MessageEmbedTypes -export const enum MessageEmbedType { - APPLICATION_NEWS = "application_news", - ARTICLE = "article", - AUTO_MODERATION_MESSAGE = "auto_moderation_message", - AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", - GAMING_PROFILE = "gaming_profile", - GIFT = "gift", - GIFV = "gifv", - IMAGE = "image", - LINK = "link", - POLL_RESULT = "poll_result", - POST_PREVIEW = "post_preview", - RICH = "rich", - SAFETY_POLICY_NOTICE = "safety_policy_notice", - SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", - TEXT = "text", - TWEET = "tweet", - VIDEO = "video", - VOICE_CHANNEL = "voice_channel", -} - -/** - * @todo - * An embed video must have either `proxyURL` or `url`, and having both is possible. - * It might not be possible for an embed video to have `proxyURL` without `url`, though. - */ -export interface MessageEmbedVideo { - height: number; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string | undefined; - width: number; -} - -export interface MessageEmbed { - author?: MessageEmbedAuthor; - color?: string; - contentScanVersion: number | undefined; - fields: MessageEmbedField[]; - flags: MessageEmbedFlags | undefined; - footer?: MessageEmbedFooter; - id: string; - image?: MessageEmbedImage; - provider?: MessageEmbedProvider; - rawDescription: string | undefined; - rawTitle: string | undefined; - referenceId: string | undefined; - thumbnail?: MessageEmbedThumbnail; - timestamp?: Moment; - type: MessageEmbedType | undefined; - url: string | undefined; - video?: MessageEmbedVideo; -} - -export const 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, - 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, -} - -export interface MessageGiftInfo { - emoji?: string | null; // TEMP - sound?: string | null; // TEMP -} // TEMP - -export const enum InteractionTypes { - PING = 1, - APPLICATION_COMMAND = 2, - MESSAGE_COMPONENT = 3, - APPLICATION_COMMAND_AUTOCOMPLETE = 4, - MODAL_SUBMIT = 5, -} - -export class InteractionRecord extends ImmutableRecord { - constructor(interaction: Record); // TEMP - - static createFromServer(interactionFromServer: Record): InteractionRecord; // TEMP - - displayName: string; - id: string; - name: string; - type: InteractionTypes; - user: UserRecord; -} - -export interface InteractionData { - application_command: any; // TEMP - guild_id: any; // TEMP - id: any; // TEMP - name: any; // TEMP - options: any; // TEMP - type: any; // TEMP - version: any; // TEMP -} // TEMP - -export interface InteractionMetadata { - authorizing_integration_owners: Partial>; - id: string; - interacted_message_id?: string; - original_response_message_id?: string; - triggering_interaction_metadata?: InteractionMetadata; - type: InteractionTypes; - /** @todo This is not a UserRecord; it's a user object from the API. */ - user: Record; -} // TEMP - -export interface ChannelMention { - guild_id: string; - id: string; - name: string; - type: ChannelType; -} - -export interface MessageReference { - channel_id: string; - guild_id?: string; - message_id?: string; -} - -export const enum PollLayoutTypes { - UNKNOWN = 0, - DEFAULT = 1, - IMAGE_ONLY_ANSWERS = 2, -} - -export interface MessageEmoji { - animated?: boolean; - id: string | null; - name: string | null; -} - -export interface MessagePollMedia { - emoji?: MessageEmoji; - text?: string; -} - -export interface MessagePollAnswer { - answer_id: number; - poll_media: MessagePollMedia; -} - -export interface MessagePollAnswerCount { - count: number; - id: number; - me_voted: boolean; -} - -export interface MessagePollResults { - answer_counts: MessagePollAnswerCount[]; - is_finalized: boolean; -} - -export interface MessagePoll { - allow_multiselect: boolean; - answers: MessagePollAnswer[]; - expiry: Moment; - layout_type: PollLayoutTypes; - question: MessagePollMedia; - results?: MessagePollResults; -} - -export const enum PurchaseNotificationType { - GUILD_PRODUCT = 0, -} - -export interface MessagePurchaseNotification { - guild_product_purchase: { - listing_id?: string | null; // TEMP - product_name?: string | null; // TEMP - }; // TEMP - type: PurchaseNotificationType; -} // TEMP - -export interface MessageReactionCountDetails { - burst: number; - normal: number; - vote?: number; -} - -export interface MessageReaction { - burst_colors: string[]; - burst_count: number; - count: number; - count_details: MessageReactionCountDetails; - emoji: MessageEmoji; - me: boolean; - me_burst: boolean; - me_vote?: boolean; -} - -export interface MessageRoleSubscriptionData { - is_renewal?: boolean | null; // TEMP - role_subscription_listing_id?: string | null; // TEMP - tier_name?: string | null; // TEMP - total_months_subscribed?: number | null; // TEMP -} // TEMP - -export const enum MessageStates { - SEND_FAILED = "SEND_FAILED", - SENDING = "SENDING", - SENT = "SENT", -} - -export const enum StickerFormat { - PNG = 1, - APNG = 2, - LOTTIE = 3, - GIF = 4, -} - -export interface MessageStickerItem { - format_type: StickerFormat; - id: string; - name: string; -} - -export const enum MetaStickerType { - STANDARD = 1, - GUILD = 2, -} - -export interface MessageSticker { - asset?: ""; - available?: boolean; - description: string | null; - format_type: StickerFormat; - guild_id?: string; - id: string; - name: string; - pack_id?: string; - sort_value?: number; - tags: string; - type: MetaStickerType; - /** @todo This is not a UserRecord; it's a user object from the API. */ - user?: Record; -} - -export const enum MessageTypes { - DEFAULT = 0, - RECIPIENT_ADD = 1, - RECIPIENT_REMOVE = 2, - CALL = 3, - CHANNEL_NAME_CHANGE = 4, - CHANNEL_ICON_CHANGE = 5, - CHANNEL_PINNED_MESSAGE = 6, - USER_JOIN = 7, - GUILD_BOOST = 8, - GUILD_BOOST_TIER_1 = 9, - GUILD_BOOST_TIER_2 = 10, - GUILD_BOOST_TIER_3 = 11, - CHANNEL_FOLLOW_ADD = 12, - GUILD_STREAM = 13, - GUILD_DISCOVERY_DISQUALIFIED = 14, - GUILD_DISCOVERY_REQUALIFIED = 15, - GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, - GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, - THREAD_CREATED = 18, - REPLY = 19, - CHAT_INPUT_COMMAND = 20, - THREAD_STARTER_MESSAGE = 21, - GUILD_INVITE_REMINDER = 22, - CONTEXT_MENU_COMMAND = 23, - AUTO_MODERATION_ACTION = 24, - ROLE_SUBSCRIPTION_PURCHASE = 25, - INTERACTION_PREMIUM_UPSELL = 26, - STAGE_START = 27, - STAGE_END = 28, - STAGE_SPEAKER = 29, - STAGE_RAISE_HAND = 30, - STAGE_TOPIC = 31, - GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, - PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, - PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, - PREMIUM_REFERRAL = 35, - GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, - GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, - GUILD_INCIDENT_REPORT_RAID = 38, - GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, - GUILD_DEADCHAT_REVIVE_PROMPT = 40, - CUSTOM_GIFT = 41, - GUILD_GAMING_STATS_PROMPT = 42, - PURCHASE_NOTIFICATION = 44, - VOICE_HANGOUT_INVITE = 45, - POLL_RESULT = 46, - CHANGELOG = 47, -} +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Duration, Moment } from "moment"; +import type { SnakeCasedProperties } from "type-fest"; + +import type { Nullish } from "../../internal"; +import type { ApplicationIntegrationType } from "../ApplicationRecord"; +import type { ChannelRecord, ChannelType } from "../channels"; +import type { ImmutableRecord } from "../ImmutableRecord"; +import type { UserRecord } from "../UserRecord"; + +export type MessageRecordOwnProperties = Pick; + +export class MessageRecord< + OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties +> extends ImmutableRecord { + constructor(messageProperties: Record); // TEMP + + addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP + addReactionBatch(e?: any, t?: any): any; // TEMP + canDeleteOwnMessage(userId: string): boolean; + getChannelId(): string; + getReaction(e?: any): any; // TEMP + hasFlag(flag: MessageFlags): boolean; + isCommandType(): boolean; + isEdited(): boolean; + isFirstMessageInForumPost(channel: ChannelRecord): boolean; // TEMP + isInteractionPlaceholder(): boolean; + isPoll(): boolean; + isSystemDM(): boolean; + isUIKitComponents(): boolean; + removeReaction(e?: any, t?: any, n?: any): this; // TEMP + removeReactionsForEmoji(e?: any): this; // TEMP + toJS(): OwnProperties & SnakeCasedProperties>; + userHasReactedWithEmoji(e?: any, t?: any): boolean; // TEMP + + activity: any/* | null*/; // TEMP + activityInstance: any/* | null*/; // TEMP + application: any/* | null*/; // TEMP + applicationId: string | null; // TEMP + attachments: MessageAttachment[]; + author: UserRecord; + blocked: boolean; + bot: boolean; + call: MessageCall | null; + changelogId: string | null; + channel_id: string; + codedLinks: CodedLink[]; + colorString: string | undefined; + components: MessageComponent[]; + content: string; + customRenderedContent: any/* | undefined*/; // TEMP + editedTimestamp: Date | null; + embeds: MessageEmbed[]; + flags: MessageFlags; + giftCodes: string[]; + giftInfo: MessageGiftInfo | undefined; + id: string; + interaction: InteractionRecord | null; + interactionData: InteractionData | null; + interactionError: string | null; + interactionMetadata: InteractionMetadata | null; + isSearchHit: boolean; + isUnsupported: boolean; + loggingName: string | null; // TEMP + mentionChannels: ChannelMention[]; + mentioned: boolean; + mentionEveryone: boolean; + mentionRoles: string[]; + mentions: string[]; + messageReference: MessageReference | null; + messageSnapshots: any[]; // TEMP + nick: any/* | undefined */; // TEMP + nonce: string | number | null; + pinned: boolean; + poll: MessagePoll | undefined; + purchaseNotification: MessagePurchaseNotification | undefined; + reactions: MessageReaction[]; + referralTrialOfferId: string | null; // TEMP + roleSubscriptionData: MessageRoleSubscriptionData | undefined; + state: MessageStates; + stickerItems: MessageStickerItem[]; + stickers: MessageSticker[]; + timestamp: Date; + tts: boolean; + type: MessageTypes; + webhookId: string | null; +} + +export const enum MessageAttachmentFlags { + IS_CLIP = 1 << 0, + IS_THUMBNAIL = 1 << 1, + IS_REMIX = 1 << 2, + IS_SPOILER = 1 << 3, + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageAttachment { + content_scan_version?: number; + content_type?: string; + description?: string; + duration_secs?: number; + ephemeral?: boolean; + filename: string; + flags?: MessageAttachmentFlags; + height?: number | null; + id: string; + placeholder?: string; + placeholder_version?: number; + proxy_url: string; + size: number; + spoiler: boolean; + url: string; + waveform?: string; + width?: number | null; +} + +export interface MessageCall { + duration: Duration | null; + endedTimestamp: Moment | null; + participants: string[]; +} + +export const enum CodedLinkType { + ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", + APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", + BUILD_OVERRIDE = "BUILD_OVERRIDE", + CHANNEL_LINK = "CHANNEL_LINK", + EMBEDDED_ACTIVITY_INVITE = "EMBEDDED_ACTIVITY_INVITE", + EVENT = "EVENT", + GUILD_PRODUCT = "GUILD_PRODUCT", + INVITE = "INVITE", + MANUAL_BUILD_OVERRIDE = "MANUAL_BUILD_OVERRIDE", + QUESTS_EMBED = "QUESTS_EMBED", + SERVER_SHOP = "SERVER_SHOP", + TEMPLATE = "TEMPLATE", +} + +export interface CodedLink { + code: string; + type: CodedLinkType; +} + +export interface MessageComponentEmoji { + animated: boolean | undefined; + id: string | undefined; + name: string | undefined; + src: string | undefined; +} + +// Original name: ComponentType +// Renamed to avoid name conflicts with ComponentType from React. +export const enum MessageComponentType { + ACTION_ROW = 1, + BUTTON = 2, + STRING_SELECT = 3, + INPUT_TEXT = 4, + USER_SELECT = 5, + ROLE_SELECT = 6, + MENTIONABLE_SELECT = 7, + CHANNEL_SELECT = 8, + TEXT = 10, + MEDIA_GALLERY = 12, + SEPARATOR = 14, +} + +export interface MessageActionRowComponent { + components: Exclude[]; + id: string; + type: MessageComponentType.ACTION_ROW; +} + +export const enum ButtonStyle { + PRIMARY = 1, + SECONDARY = 2, + SUCCESS = 3, + DESTRUCTIVE = 4, + LINK = 5, + PREMIUM = 6, +} + +/** + * @todo + * Must have one of either `customId` or `url`, but never both. + * If a button has `url` it must have the `Link` button style. + */ +export interface MessageButtonComponent { + customId: string | undefined; + disabled: boolean | undefined; + emoji: MessageComponentEmoji | undefined; + id: string; + label: string | undefined; + style: ButtonStyle; + type: MessageComponentType.BUTTON; + url: string | undefined; +} + +export const enum SelectOptionType { + STRING = 1, + USER = 2, + ROLE = 3, + CHANNEL = 4, + GUILD = 5, +} + +export interface SelectMenuOption { + default: boolean | undefined; + description: string | undefined; + emoji: MessageComponentEmoji | undefined; + label: string; + type: OptionType; + value: string; +} + +export interface MessageStringSelectComponent { + customId: string; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + options: SelectMenuOption[]; + placeholder: string; + type: MessageComponentType.STRING_SELECT; +} + +export const enum TextComponentStyle { + SMALL = 1, + PARAGRAPH = 2, +} + +export interface MessageTextInputComponent { + customId: string; + disabled: boolean | undefined; + id: string; + label: string; + maxLength: number | undefined; + minLength: number | undefined; + placeholder: string | undefined; + required: boolean; + style: TextComponentStyle; + type: MessageComponentType.INPUT_TEXT; + value: string | undefined; +} + +// Original name: SnowflakeSelectDefaultValueTypes +export const enum SnowflakeSelectDefaultValueType { + CHANNEL = "channel", + ROLE = "role", + USER = "user", +} + +export interface SelectMenuDefaultValue { + id: string; + type: DefaultValueType; +} + +export interface MessageUserSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.USER_SELECT; +} + +export interface MessageRoleSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.ROLE_SELECT; +} + +export interface MessageMentionableSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.MENTIONABLE_SELECT; +} + +export interface MessageChannelSelectComponent { + channelTypes: ChannelType[] | undefined; + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.CHANNEL_SELECT; +} + +export interface MessageTextComponent { + content: string | undefined; + id: string; + type: MessageComponentType.TEXT; +} + +export const enum ContentScanFlags { + EXPLICIT = 1, +} + +export interface MediaItem { + contentScanMetadata: { + contentScanFlags: ContentScanFlags | undefined; + version: number | undefined; + } | undefined; + contentType: string | undefined; + height: number | Nullish; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyUrl: string; + url: string; + width: number | Nullish; +} + +export interface MessageMediaGalleryComponent { + id: string; + items: { + description: string | undefined; + media: MediaItem; + spoiler: boolean; + }[]; + type: MessageComponentType.MEDIA_GALLERY; +} + +export const enum SeparatorSpacingSize { + SMALL = 1, + LARGE = 2, +} + +export interface MessageSeparatorComponent { + divider: boolean; + id: string; + spacing: SeparatorSpacingSize; + type: MessageComponentType.SEPARATOR; +} + +export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; + +export interface MessageEmbedAuthor { + iconProxyURL: string | undefined; + iconURL: string | undefined; + name: string; + url: string | undefined; +} + +export interface MessageEmbedField { + inline: boolean | undefined; + rawName: string; + rawValue: string; +} + +export const enum MessageEmbedFlags { + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageEmbedFooter { + iconProxyURL: string | undefined; + iconURL: string | undefined; + text: string; +} + +export interface MessageEmbedImage { + height: number | undefined; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number | undefined; +} + +export interface MessageEmbedProvider { + name: string; + url: string | undefined; +} + +/** + * @todo + * An embed thumbnail either + * has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` + * or has only `height`, `url`, and `width`. + */ +export interface MessageEmbedThumbnail { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number; +} + +// Original name: MessageEmbedTypes +export const enum MessageEmbedType { + APPLICATION_NEWS = "application_news", + ARTICLE = "article", + AUTO_MODERATION_MESSAGE = "auto_moderation_message", + AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", + GAMING_PROFILE = "gaming_profile", + GIFT = "gift", + GIFV = "gifv", + IMAGE = "image", + LINK = "link", + POLL_RESULT = "poll_result", + POST_PREVIEW = "post_preview", + RICH = "rich", + SAFETY_POLICY_NOTICE = "safety_policy_notice", + SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", + TEXT = "text", + TWEET = "tweet", + VIDEO = "video", + VOICE_CHANNEL = "voice_channel", +} + +/** + * @todo + * An embed video must have either `proxyURL` or `url`, and having both is possible. + * It might not be possible for an embed video to have `proxyURL` without `url`, though. + */ +export interface MessageEmbedVideo { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string | undefined; + width: number; +} + +export interface MessageEmbed { + author?: MessageEmbedAuthor; + color?: string; + contentScanVersion: number | undefined; + fields: MessageEmbedField[]; + flags: MessageEmbedFlags | undefined; + footer?: MessageEmbedFooter; + id: string; + image?: MessageEmbedImage; + provider?: MessageEmbedProvider; + rawDescription: string | undefined; + rawTitle: string | undefined; + referenceId: string | undefined; + thumbnail?: MessageEmbedThumbnail; + timestamp?: Moment; + type: MessageEmbedType | undefined; + url: string | undefined; + video?: MessageEmbedVideo; +} + +export const 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, + 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, +} + +export interface MessageGiftInfo { + emoji?: string | null; // TEMP + sound?: string | null; // TEMP +} // TEMP + +export const enum InteractionTypes { + PING = 1, + APPLICATION_COMMAND = 2, + MESSAGE_COMPONENT = 3, + APPLICATION_COMMAND_AUTOCOMPLETE = 4, + MODAL_SUBMIT = 5, +} + +export class InteractionRecord extends ImmutableRecord { + constructor(interaction: Record); // TEMP + + static createFromServer(interactionFromServer: Record): InteractionRecord; // TEMP + + displayName: string; + id: string; + name: string; + type: InteractionTypes; + user: UserRecord; +} + +export interface InteractionData { + application_command: any; // TEMP + guild_id: any; // TEMP + id: any; // TEMP + name: any; // TEMP + options: any; // TEMP + type: any; // TEMP + version: any; // TEMP +} // TEMP + +export interface InteractionMetadata { + authorizing_integration_owners: Partial>; + id: string; + interacted_message_id?: string; + original_response_message_id?: string; + triggering_interaction_metadata?: InteractionMetadata; + type: InteractionTypes; + /** @todo This is not a UserRecord; it's a user object from the API. */ + user: Record; +} // TEMP + +export interface ChannelMention { + guild_id: string; + id: string; + name: string; + type: ChannelType; +} + +export interface MessageReference { + channel_id: string; + guild_id?: string; + message_id?: string; +} + +export const enum PollLayoutTypes { + UNKNOWN = 0, + DEFAULT = 1, + IMAGE_ONLY_ANSWERS = 2, +} + +export interface MessageEmoji { + animated?: boolean; + id: string | null; + name: string | null; +} + +export interface MessagePollMedia { + emoji?: MessageEmoji; + text?: string; +} + +export interface MessagePollAnswer { + answer_id: number; + poll_media: MessagePollMedia; +} + +export interface MessagePollAnswerCount { + count: number; + id: number; + me_voted: boolean; +} + +export interface MessagePollResults { + answer_counts: MessagePollAnswerCount[]; + is_finalized: boolean; +} + +export interface MessagePoll { + allow_multiselect: boolean; + answers: MessagePollAnswer[]; + expiry: Moment; + layout_type: PollLayoutTypes; + question: MessagePollMedia; + results?: MessagePollResults; +} + +export const enum PurchaseNotificationType { + GUILD_PRODUCT = 0, +} + +export interface MessagePurchaseNotification { + guild_product_purchase: { + listing_id?: string | null; // TEMP + product_name?: string | null; // TEMP + }; // TEMP + type: PurchaseNotificationType; +} // TEMP + +export interface MessageReactionCountDetails { + burst: number; + normal: number; + vote?: number; +} + +export interface MessageReaction { + burst_colors: string[]; + burst_count: number; + count: number; + count_details: MessageReactionCountDetails; + emoji: MessageEmoji; + me: boolean; + me_burst: boolean; + me_vote?: boolean; +} + +export interface MessageRoleSubscriptionData { + is_renewal?: boolean | null; // TEMP + role_subscription_listing_id?: string | null; // TEMP + tier_name?: string | null; // TEMP + total_months_subscribed?: number | null; // TEMP +} // TEMP + +export const enum MessageStates { + SEND_FAILED = "SEND_FAILED", + SENDING = "SENDING", + SENT = "SENT", +} + +export const enum StickerFormat { + PNG = 1, + APNG = 2, + LOTTIE = 3, + GIF = 4, +} + +export interface MessageStickerItem { + format_type: StickerFormat; + id: string; + name: string; +} + +export const enum MetaStickerType { + STANDARD = 1, + GUILD = 2, +} + +export interface MessageSticker { + asset?: ""; + available?: boolean; + description: string | null; + format_type: StickerFormat; + guild_id?: string; + id: string; + name: string; + pack_id?: string; + sort_value?: number; + tags: string; + type: MetaStickerType; + /** @todo This is not a UserRecord; it's a user object from the API. */ + user?: Record; +} + +export const enum MessageTypes { + DEFAULT = 0, + RECIPIENT_ADD = 1, + RECIPIENT_REMOVE = 2, + CALL = 3, + CHANNEL_NAME_CHANGE = 4, + CHANNEL_ICON_CHANGE = 5, + CHANNEL_PINNED_MESSAGE = 6, + USER_JOIN = 7, + GUILD_BOOST = 8, + GUILD_BOOST_TIER_1 = 9, + GUILD_BOOST_TIER_2 = 10, + GUILD_BOOST_TIER_3 = 11, + CHANNEL_FOLLOW_ADD = 12, + GUILD_STREAM = 13, + GUILD_DISCOVERY_DISQUALIFIED = 14, + GUILD_DISCOVERY_REQUALIFIED = 15, + GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, + GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, + THREAD_CREATED = 18, + REPLY = 19, + CHAT_INPUT_COMMAND = 20, + THREAD_STARTER_MESSAGE = 21, + GUILD_INVITE_REMINDER = 22, + CONTEXT_MENU_COMMAND = 23, + AUTO_MODERATION_ACTION = 24, + ROLE_SUBSCRIPTION_PURCHASE = 25, + INTERACTION_PREMIUM_UPSELL = 26, + STAGE_START = 27, + STAGE_END = 28, + STAGE_SPEAKER = 29, + STAGE_RAISE_HAND = 30, + STAGE_TOPIC = 31, + GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, + PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, + PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, + PREMIUM_REFERRAL = 35, + GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, + GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, + GUILD_INCIDENT_REPORT_RAID = 38, + GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, + GUILD_DEADCHAT_REVIVE_PROMPT = 40, + CUSTOM_GIFT = 41, + GUILD_GAMING_STATS_PROMPT = 42, + PURCHASE_NOTIFICATION = 44, + VOICE_HANGOUT_INVITE = 45, + POLL_RESULT = 46, + CHANGELOG = 47, +} diff --git a/packages/discord-types/src/general/messages/index.d.ts b/packages/discord-types/src/general/messages/index.d.ts new file mode 100644 index 000000000..79d900fa3 --- /dev/null +++ b/packages/discord-types/src/general/messages/index.d.ts @@ -0,0 +1,9 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export * from "./ChannelMessages"; +export * from "./MessageCache"; +export * from "./MessageRecord"; diff --git a/packages/discord-types/src/internal.d.ts b/packages/discord-types/src/internal.d.ts index e6d282f65..dcdeb7e81 100644 --- a/packages/discord-types/src/internal.d.ts +++ b/packages/discord-types/src/internal.d.ts @@ -13,6 +13,9 @@ export type GenericConstructor = new (...args: any[]) => unknown; /** @internal */ export type Nullish = null | undefined; +/** @internal */ +export type Optional = { [Key in keyof T]?: T[Key] | U; }; + /** @internal */ export type Overwrite = Omit & Source; diff --git a/packages/discord-types/src/stores/GuildChannelStore.d.ts b/packages/discord-types/src/stores/GuildChannelStore.d.ts index 2658da3be..2fa3ee260 100644 --- a/packages/discord-types/src/stores/GuildChannelStore.d.ts +++ b/packages/discord-types/src/stores/GuildChannelStore.d.ts @@ -20,7 +20,7 @@ export class GuildChannelStore( guild: string, - searchVocal?: SearchVocal, /* = false */ + searchVocal?: SearchVocal /* = false */, permissions?: /* Permissions */ bigint | undefined /* = Permissions.VIEW_CHANNEL */ ): GuildChannelFromSearchVocal; getDirectoryChannelIds(guildId: string): string[]; @@ -46,7 +46,7 @@ export class GuildChannelStore[]; getSFWDefaultChannel( guild: string, - searchVocal?: SearchVocal, /* = false */ + searchVocal?: SearchVocal /* = false */, permissions?: /* Permissions */ bigint | undefined /* = Permissions.VIEW_CHANNEL */ ): GuildChannelFromSearchVocal; getTextChannelNameDisambiguations(guildId?: string | Nullish): { diff --git a/packages/discord-types/src/stores/ReadStateStore.d.ts b/packages/discord-types/src/stores/ReadStateStore.d.ts index 82f806e56..9a7a435d4 100644 --- a/packages/discord-types/src/stores/ReadStateStore.d.ts +++ b/packages/discord-types/src/stores/ReadStateStore.d.ts @@ -5,49 +5,62 @@ */ import type { ExtractAction, FluxAction } from "../flux/fluxActions"; -import type { GuildRecord } from "../general"; -import type { ReadState, ReadStateSnapshot, ReadStateType, SerializedReadState } from "../general/ReadState"; +import type { GuildChannelRecord } from "../general/channels/ChannelRecord"; +import type { GuildRecord } from "../general/GuildRecord"; +import type { ChannelIdReadStateType, GuildChannelOverride, GuildIdReadStateType, ReadState, ReadStateSnapshot, ReadStateType, SerializedReadState, UserIdReadStateType } from "../general/ReadState"; import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; +import type { BasicPermissionsObject } from "./PermissionStore"; export type ReadStateStoreAction = ExtractAction; export class ReadStateStore extends FluxStore { static displayName: "ReadStateStore"; - ackMessageId(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): any; // TEMP - getAllReadStates(e?: any): SerializedReadState; // TEMP - getForDebugging(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): ReadState; - getGuildChannelUnreadState(e?: any, t?: any, n?: any, i?: any, r?: any): any; // TEMP - getGuildUnreadsSentinel(e?: any): any; // TEMP + ackMessageId(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): string | null; + getAllReadStates(forCache: ForCache): SerializedReadState; + getForDebugging(channelId: string, type?: Type): ReadState | undefined; + getForDebugging(userId: string, type: Type): ReadState | undefined; + getForDebugging(guildId: string, type: Type): ReadState | undefined; + getGuildChannelUnreadState( + guildChannel: BasicPermissionsObject | GuildChannelRecord, + isOptInEnabled: boolean, + guildChannelOverrides: { [channelId: string]: GuildChannelOverride; }, + isChannelMuted: boolean, + isReadStateTypeUnread?: boolean | undefined + ): { + mentionCount: boolean; + unread: boolean; + }; + getGuildUnreadsSentinel(guildId: string): typeof ReadState["_guildReadStateSentinels"]; getMentionChannelIds(): string[]; - getMentionCount(channelId: string): number; - getNonChannelAckId(e?: any): any; // TEMP - getNotifCenterReadState(e?: any): any; // TEMP - getOldestUnreadMessageId(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): any; // TEMP - getOldestUnreadTimestamp(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): any; // TEMP - getReadStatesByChannel(): { [channelId: string]: ReadState; }; - getSnapshot(e?: any, t?: any): ReadStateSnapshot; // TEMP - getTrackedAckMessageId(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): any; // TEMP - getUnreadCount(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): number; - hasOpenedThread(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; - hasRecentlyVisitedAndRead(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; // TEMP - hasTrackedUnread(e?: any, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; // TEMP - hasUnread(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + getMentionCount(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): number; + getNonChannelAckId(type: ReadStateType.NOTIFICATION_CENTER | ReadStateType.MESSAGE_REQUESTS): string | null; + getNotifCenterReadState(userId: string): ReadState; + getOldestUnreadMessageId(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): string | null; + getOldestUnreadTimestamp(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): number; + getReadStatesByChannel(): { [channelId: string]: ReadState; }; + getSnapshot(id: string, snapshotTTL: number): ReadStateSnapshot; + getTrackedAckMessageId(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): string | null; + getUnreadCount(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): number; + hasOpenedThread(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + hasRecentlyVisitedAndRead(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + hasTrackedUnread(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + hasUnread(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; hasUnreadPins(channelId: string): boolean; - isEstimated(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; - isForumPostUnread(threadId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + isEstimated(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; + isForumPostUnread(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; isNewForumThread(forumThreadId: string, forumId: string, guild?: GuildRecord | Nullish): boolean; /** * Returns the ID of the last message in the channel associated with the specified ID. * @returns The ID of the channel's last message or null if no messages have ever been sent in the channel. If the channel has not been fetched, null is returned. */ - lastMessageId(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): string | null; + lastMessageId(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): string | null; /** * Returns the timestamp of the last message in the channel associated with the specified ID. * @returns The timestamp of the channel's last message or 0 if no messages have ever been sent in the channel. If the channel has not been fetched, 0 is returned. */ - lastMessageTimestamp(channelId: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): number; + lastMessageTimestamp(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): number; /** * Returns the timestamp of the last pin in the channel associated with the specified ID. * @returns The timestamp of the channel's last pin or 0 if the channel has no pins. If the channel has not been fetched, null is returned. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f471d3c4b..576c3916f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -181,8 +181,8 @@ importers: specifier: ^5.4.5 version: 5.4.5 typescript-eslint: - specifier: ^8.0.0-alpha.27 - version: 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) + specifier: ^8.0.0-alpha.28 + version: 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) packages/vencord-types: dependencies: @@ -624,8 +624,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.0.0-alpha.27': - resolution: {integrity: sha512-HepmIGj1W4aBd5e9HEfMlw2RuEH+c66KGrqZ14onwsToQhTXD4ZxEVYCZnHlFjluOKUzU98is310UZrB90d4Tg==} + '@typescript-eslint/eslint-plugin@8.0.0-alpha.28': + resolution: {integrity: sha512-LsTbTdXiF7rP/H/ni85ia+01WmLBkkOq5sAi60OqHRa7mv7FTbwmiPwQ3hcHmXWxZFkHVy7hXXfBhwZzbbsaIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -645,8 +645,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.0.0-alpha.27': - resolution: {integrity: sha512-1exQE52lVo2CNbit0PmFd0eIeNcbn5mgrK+lvrGNsYIGpkImVNovpRcjoKCK8xwM8ixWCavk5t6VgXH4e6meVw==} + '@typescript-eslint/parser@8.0.0-alpha.28': + resolution: {integrity: sha512-44N1MlwmhMUJ0jyrGuWe093wywcCIVu7I7Ge1H15HXCRIB7ptpSf3GJZRCDpumuEUKkVxoL8rdLixMnVDWyT2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -663,8 +663,8 @@ packages: resolution: {integrity: sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.0.0-alpha.27': - resolution: {integrity: sha512-EVXL2YusRd470P5BFADQ4uKlydQua8ifzPnDik0Im42RECDXUs2B0jFfQbsgVQ0prY5gOtakk7a4JbxQLvqQZQ==} + '@typescript-eslint/scope-manager@8.0.0-alpha.28': + resolution: {integrity: sha512-Iq8QFmJ2DH2tx7jfOraMZM1Y1axRfWh4t29JXRgbzvgiDQ2uHRHcaXqTulqsZXzJ0+vERNvNkOIPcQYGsNeGVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@7.12.0': @@ -677,8 +677,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.0.0-alpha.27': - resolution: {integrity: sha512-T8AIBZV+dVR7Asf1M2IAihe/L5CVp+gMJf4D+2ESAt4Lv0Yi9E35cY7S5kkvU83/8qsKQO/yRIZyRMLx9SGEPQ==} + '@typescript-eslint/type-utils@8.0.0-alpha.28': + resolution: {integrity: sha512-Ta7vf3DtAakaeLEFGEnMGcfRtFV38PSLD+PvLT2xkof3vz5exKv4KYMyjAlNJmrhLzHwGWvHbt6IN8HoWwYnCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -694,8 +694,8 @@ packages: resolution: {integrity: sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.0.0-alpha.27': - resolution: {integrity: sha512-L9w7s4ACzvsd7dr8iGGdz5YSVEHOjC3FLY0NvMvn+CfdWop2jubnb2zios6jhsttKu0lViNE6+D+bKzyHOKJQw==} + '@typescript-eslint/types@8.0.0-alpha.28': + resolution: {integrity: sha512-HYg+e0EWVShx0FEX0MAjDinYLmd+wD6nGMpbaddB1iACYwqaJFbf7vw0l+hdLTJvQC6UY8ndRkaEsL68QEoIZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.11.0': @@ -716,8 +716,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.0.0-alpha.27': - resolution: {integrity: sha512-/BZv7UgL5ck1xAORdDG3scXuLzBgGGQBoRCo8M6AxzeGtrC6mIxFW2/1bePnbT3AiWWTeDk0xvjcu2gydjIu9w==} + '@typescript-eslint/typescript-estree@8.0.0-alpha.28': + resolution: {integrity: sha512-I/5ODd4XJ+TO0XrKwDaB4tVGVi6kz2LAlN3WPd7mZVVtW21HHByCILRhOF9RbC69gJQ/TGHFpWCmAcsq2RZisg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -737,8 +737,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.0.0-alpha.27': - resolution: {integrity: sha512-6bi93eaESc8Z+emTkoQWEMPz8DV2/2T5mQ/BDGq+TdBOX3CmJoauMoPyYu5Nao5G/b8IEa+iXzT9fhOHKHKJOg==} + '@typescript-eslint/utils@8.0.0-alpha.28': + resolution: {integrity: sha512-PnIz94+nbyjJisMI+KZqXMfw0wfIHvbyh0MGEx2M314wqm6SUWcxB5I8zduGQgJbRB0YFnboPS+MeSlBYPWrBQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -751,8 +751,8 @@ packages: resolution: {integrity: sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.0.0-alpha.27': - resolution: {integrity: sha512-bwEVlTWtzHaqaedug01Jll3gVZKxK/QpS7/iXqciI6EngfjthwXE3inM/J+6CtxHrTBkcX75ShzNYDrClKn4jw==} + '@typescript-eslint/visitor-keys@8.0.0-alpha.28': + resolution: {integrity: sha512-+ewAOeKDycydKMlnfmW8zAURTA8PR5Csyvxy6PJt4XRYjoquode9/eWaMt9Sp4Rz1FGMSVU9KxDRR83ASH/xkQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -2709,8 +2709,8 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript-eslint@8.0.0-alpha.27: - resolution: {integrity: sha512-33OLepILfCgcbHIEH+JBgJWGP1fv+XO6KctFa8cvFqNOy4oX5clIg5fp+/p9NBNvNQh9IXrXltjsj2BuquHX8g==} + typescript-eslint@8.0.0-alpha.28: + resolution: {integrity: sha512-hCJMQp3fOwt7o3V8ETQoMK+6yctfN++Rq9rQ8cukTfu/oCLkUycuez2TqBbkkkGxT/prqRNteU72RxiregqgWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3226,14 +3226,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.0.0-alpha.27(@typescript-eslint/parser@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.0.0-alpha.28(@typescript-eslint/parser@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.0.0-alpha.27 - '@typescript-eslint/type-utils': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.27 + '@typescript-eslint/parser': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.28 + '@typescript-eslint/type-utils': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 eslint: 9.4.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -3257,12 +3257,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/parser@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.0.0-alpha.27 - '@typescript-eslint/types': 8.0.0-alpha.27 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.27(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.27 + '@typescript-eslint/scope-manager': 8.0.0-alpha.28 + '@typescript-eslint/types': 8.0.0-alpha.28 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.28(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 debug: 4.3.4 eslint: 9.4.0 optionalDependencies: @@ -3280,10 +3280,10 @@ snapshots: '@typescript-eslint/types': 7.12.0 '@typescript-eslint/visitor-keys': 7.12.0 - '@typescript-eslint/scope-manager@8.0.0-alpha.27': + '@typescript-eslint/scope-manager@8.0.0-alpha.28': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.27 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.27 + '@typescript-eslint/types': 8.0.0-alpha.28 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 '@typescript-eslint/type-utils@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: @@ -3297,10 +3297,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.0-alpha.27(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.0.0-alpha.28(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) debug: 4.3.4 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -3313,7 +3313,7 @@ snapshots: '@typescript-eslint/types@7.12.0': {} - '@typescript-eslint/types@8.0.0-alpha.27': {} + '@typescript-eslint/types@8.0.0-alpha.28': {} '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': dependencies: @@ -3345,10 +3345,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.0.0-alpha.27(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.0.0-alpha.28(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.27 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.27 + '@typescript-eslint/types': 8.0.0-alpha.28 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3382,12 +3382,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) - '@typescript-eslint/scope-manager': 8.0.0-alpha.27 - '@typescript-eslint/types': 8.0.0-alpha.27 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.27(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.28 + '@typescript-eslint/types': 8.0.0-alpha.28 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.28(typescript@5.4.5) eslint: 9.4.0 transitivePeerDependencies: - supports-color @@ -3403,9 +3403,9 @@ snapshots: '@typescript-eslint/types': 7.12.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.0.0-alpha.27': + '@typescript-eslint/visitor-keys@8.0.0-alpha.28': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.27 + '@typescript-eslint/types': 8.0.0-alpha.28 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -5558,11 +5558,11 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript-eslint@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5): + typescript-eslint@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0-alpha.27(@typescript-eslint/parser@8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/parser': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.27(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.0.0-alpha.28(@typescript-eslint/parser@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/parser': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: From 8d2abbea48310e5b4027bc7ddf80c7ed6665c6cd Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Wed, 5 Jun 2024 22:15:41 -0400 Subject: [PATCH 029/126] Fixes --- .../src/general/messages/MessageRecord.d.ts | 1408 ++++++++--------- 1 file changed, 704 insertions(+), 704 deletions(-) diff --git a/packages/discord-types/src/general/messages/MessageRecord.d.ts b/packages/discord-types/src/general/messages/MessageRecord.d.ts index ddfa26772..702e61243 100644 --- a/packages/discord-types/src/general/messages/MessageRecord.d.ts +++ b/packages/discord-types/src/general/messages/MessageRecord.d.ts @@ -1,704 +1,704 @@ -/* - * discord-types - * Copyright (C) 2024 Vencord project contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import type { Duration, Moment } from "moment"; -import type { SnakeCasedProperties } from "type-fest"; - -import type { Nullish } from "../../internal"; -import type { ApplicationIntegrationType } from "../ApplicationRecord"; -import type { ChannelRecord, ChannelType } from "../channels"; -import type { ImmutableRecord } from "../ImmutableRecord"; -import type { UserRecord } from "../UserRecord"; - -export type MessageRecordOwnProperties = Pick; - -export class MessageRecord< - OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties -> extends ImmutableRecord { - constructor(messageProperties: Record); // TEMP - - addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP - addReactionBatch(e?: any, t?: any): any; // TEMP - canDeleteOwnMessage(userId: string): boolean; - getChannelId(): string; - getReaction(e?: any): any; // TEMP - hasFlag(flag: MessageFlags): boolean; - isCommandType(): boolean; - isEdited(): boolean; - isFirstMessageInForumPost(channel: ChannelRecord): boolean; // TEMP - isInteractionPlaceholder(): boolean; - isPoll(): boolean; - isSystemDM(): boolean; - isUIKitComponents(): boolean; - removeReaction(e?: any, t?: any, n?: any): this; // TEMP - removeReactionsForEmoji(e?: any): this; // TEMP - toJS(): OwnProperties & SnakeCasedProperties>; - userHasReactedWithEmoji(e?: any, t?: any): boolean; // TEMP - - activity: any/* | null*/; // TEMP - activityInstance: any/* | null*/; // TEMP - application: any/* | null*/; // TEMP - applicationId: string | null; // TEMP - attachments: MessageAttachment[]; - author: UserRecord; - blocked: boolean; - bot: boolean; - call: MessageCall | null; - changelogId: string | null; - channel_id: string; - codedLinks: CodedLink[]; - colorString: string | undefined; - components: MessageComponent[]; - content: string; - customRenderedContent: any/* | undefined*/; // TEMP - editedTimestamp: Date | null; - embeds: MessageEmbed[]; - flags: MessageFlags; - giftCodes: string[]; - giftInfo: MessageGiftInfo | undefined; - id: string; - interaction: InteractionRecord | null; - interactionData: InteractionData | null; - interactionError: string | null; - interactionMetadata: InteractionMetadata | null; - isSearchHit: boolean; - isUnsupported: boolean; - loggingName: string | null; // TEMP - mentionChannels: ChannelMention[]; - mentioned: boolean; - mentionEveryone: boolean; - mentionRoles: string[]; - mentions: string[]; - messageReference: MessageReference | null; - messageSnapshots: any[]; // TEMP - nick: any/* | undefined */; // TEMP - nonce: string | number | null; - pinned: boolean; - poll: MessagePoll | undefined; - purchaseNotification: MessagePurchaseNotification | undefined; - reactions: MessageReaction[]; - referralTrialOfferId: string | null; // TEMP - roleSubscriptionData: MessageRoleSubscriptionData | undefined; - state: MessageStates; - stickerItems: MessageStickerItem[]; - stickers: MessageSticker[]; - timestamp: Date; - tts: boolean; - type: MessageTypes; - webhookId: string | null; -} - -export const enum MessageAttachmentFlags { - IS_CLIP = 1 << 0, - IS_THUMBNAIL = 1 << 1, - IS_REMIX = 1 << 2, - IS_SPOILER = 1 << 3, - CONTAINS_EXPLICIT_MEDIA = 1 << 4, -} - -export interface MessageAttachment { - content_scan_version?: number; - content_type?: string; - description?: string; - duration_secs?: number; - ephemeral?: boolean; - filename: string; - flags?: MessageAttachmentFlags; - height?: number | null; - id: string; - placeholder?: string; - placeholder_version?: number; - proxy_url: string; - size: number; - spoiler: boolean; - url: string; - waveform?: string; - width?: number | null; -} - -export interface MessageCall { - duration: Duration | null; - endedTimestamp: Moment | null; - participants: string[]; -} - -export const enum CodedLinkType { - ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", - APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", - BUILD_OVERRIDE = "BUILD_OVERRIDE", - CHANNEL_LINK = "CHANNEL_LINK", - EMBEDDED_ACTIVITY_INVITE = "EMBEDDED_ACTIVITY_INVITE", - EVENT = "EVENT", - GUILD_PRODUCT = "GUILD_PRODUCT", - INVITE = "INVITE", - MANUAL_BUILD_OVERRIDE = "MANUAL_BUILD_OVERRIDE", - QUESTS_EMBED = "QUESTS_EMBED", - SERVER_SHOP = "SERVER_SHOP", - TEMPLATE = "TEMPLATE", -} - -export interface CodedLink { - code: string; - type: CodedLinkType; -} - -export interface MessageComponentEmoji { - animated: boolean | undefined; - id: string | undefined; - name: string | undefined; - src: string | undefined; -} - -// Original name: ComponentType -// Renamed to avoid name conflicts with ComponentType from React. -export const enum MessageComponentType { - ACTION_ROW = 1, - BUTTON = 2, - STRING_SELECT = 3, - INPUT_TEXT = 4, - USER_SELECT = 5, - ROLE_SELECT = 6, - MENTIONABLE_SELECT = 7, - CHANNEL_SELECT = 8, - TEXT = 10, - MEDIA_GALLERY = 12, - SEPARATOR = 14, -} - -export interface MessageActionRowComponent { - components: Exclude[]; - id: string; - type: MessageComponentType.ACTION_ROW; -} - -export const enum ButtonStyle { - PRIMARY = 1, - SECONDARY = 2, - SUCCESS = 3, - DESTRUCTIVE = 4, - LINK = 5, - PREMIUM = 6, -} - -/** - * @todo - * Must have one of either `customId` or `url`, but never both. - * If a button has `url` it must have the `Link` button style. - */ -export interface MessageButtonComponent { - customId: string | undefined; - disabled: boolean | undefined; - emoji: MessageComponentEmoji | undefined; - id: string; - label: string | undefined; - style: ButtonStyle; - type: MessageComponentType.BUTTON; - url: string | undefined; -} - -export const enum SelectOptionType { - STRING = 1, - USER = 2, - ROLE = 3, - CHANNEL = 4, - GUILD = 5, -} - -export interface SelectMenuOption { - default: boolean | undefined; - description: string | undefined; - emoji: MessageComponentEmoji | undefined; - label: string; - type: OptionType; - value: string; -} - -export interface MessageStringSelectComponent { - customId: string; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - options: SelectMenuOption[]; - placeholder: string; - type: MessageComponentType.STRING_SELECT; -} - -export const enum TextComponentStyle { - SMALL = 1, - PARAGRAPH = 2, -} - -export interface MessageTextInputComponent { - customId: string; - disabled: boolean | undefined; - id: string; - label: string; - maxLength: number | undefined; - minLength: number | undefined; - placeholder: string | undefined; - required: boolean; - style: TextComponentStyle; - type: MessageComponentType.INPUT_TEXT; - value: string | undefined; -} - -// Original name: SnowflakeSelectDefaultValueTypes -export const enum SnowflakeSelectDefaultValueType { - CHANNEL = "channel", - ROLE = "role", - USER = "user", -} - -export interface SelectMenuDefaultValue { - id: string; - type: DefaultValueType; -} - -export interface MessageUserSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.USER_SELECT; -} - -export interface MessageRoleSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.ROLE_SELECT; -} - -export interface MessageMentionableSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.MENTIONABLE_SELECT; -} - -export interface MessageChannelSelectComponent { - channelTypes: ChannelType[] | undefined; - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.CHANNEL_SELECT; -} - -export interface MessageTextComponent { - content: string | undefined; - id: string; - type: MessageComponentType.TEXT; -} - -export const enum ContentScanFlags { - EXPLICIT = 1, -} - -export interface MediaItem { - contentScanMetadata: { - contentScanFlags: ContentScanFlags | undefined; - version: number | undefined; - } | undefined; - contentType: string | undefined; - height: number | Nullish; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyUrl: string; - url: string; - width: number | Nullish; -} - -export interface MessageMediaGalleryComponent { - id: string; - items: { - description: string | undefined; - media: MediaItem; - spoiler: boolean; - }[]; - type: MessageComponentType.MEDIA_GALLERY; -} - -export const enum SeparatorSpacingSize { - SMALL = 1, - LARGE = 2, -} - -export interface MessageSeparatorComponent { - divider: boolean; - id: string; - spacing: SeparatorSpacingSize; - type: MessageComponentType.SEPARATOR; -} - -export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; - -export interface MessageEmbedAuthor { - iconProxyURL: string | undefined; - iconURL: string | undefined; - name: string; - url: string | undefined; -} - -export interface MessageEmbedField { - inline: boolean | undefined; - rawName: string; - rawValue: string; -} - -export const enum MessageEmbedFlags { - CONTAINS_EXPLICIT_MEDIA = 1 << 4, -} - -export interface MessageEmbedFooter { - iconProxyURL: string | undefined; - iconURL: string | undefined; - text: string; -} - -export interface MessageEmbedImage { - height: number | undefined; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string; - width: number | undefined; -} - -export interface MessageEmbedProvider { - name: string; - url: string | undefined; -} - -/** - * @todo - * An embed thumbnail either - * has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` - * or has only `height`, `url`, and `width`. - */ -export interface MessageEmbedThumbnail { - height: number; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string; - width: number; -} - -// Original name: MessageEmbedTypes -export const enum MessageEmbedType { - APPLICATION_NEWS = "application_news", - ARTICLE = "article", - AUTO_MODERATION_MESSAGE = "auto_moderation_message", - AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", - GAMING_PROFILE = "gaming_profile", - GIFT = "gift", - GIFV = "gifv", - IMAGE = "image", - LINK = "link", - POLL_RESULT = "poll_result", - POST_PREVIEW = "post_preview", - RICH = "rich", - SAFETY_POLICY_NOTICE = "safety_policy_notice", - SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", - TEXT = "text", - TWEET = "tweet", - VIDEO = "video", - VOICE_CHANNEL = "voice_channel", -} - -/** - * @todo - * An embed video must have either `proxyURL` or `url`, and having both is possible. - * It might not be possible for an embed video to have `proxyURL` without `url`, though. - */ -export interface MessageEmbedVideo { - height: number; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string | undefined; - width: number; -} - -export interface MessageEmbed { - author?: MessageEmbedAuthor; - color?: string; - contentScanVersion: number | undefined; - fields: MessageEmbedField[]; - flags: MessageEmbedFlags | undefined; - footer?: MessageEmbedFooter; - id: string; - image?: MessageEmbedImage; - provider?: MessageEmbedProvider; - rawDescription: string | undefined; - rawTitle: string | undefined; - referenceId: string | undefined; - thumbnail?: MessageEmbedThumbnail; - timestamp?: Moment; - type: MessageEmbedType | undefined; - url: string | undefined; - video?: MessageEmbedVideo; -} - -export const 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, - 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, -} - -export interface MessageGiftInfo { - emoji?: string | null; // TEMP - sound?: string | null; // TEMP -} // TEMP - -export const enum InteractionTypes { - PING = 1, - APPLICATION_COMMAND = 2, - MESSAGE_COMPONENT = 3, - APPLICATION_COMMAND_AUTOCOMPLETE = 4, - MODAL_SUBMIT = 5, -} - -export class InteractionRecord extends ImmutableRecord { - constructor(interaction: Record); // TEMP - - static createFromServer(interactionFromServer: Record): InteractionRecord; // TEMP - - displayName: string; - id: string; - name: string; - type: InteractionTypes; - user: UserRecord; -} - -export interface InteractionData { - application_command: any; // TEMP - guild_id: any; // TEMP - id: any; // TEMP - name: any; // TEMP - options: any; // TEMP - type: any; // TEMP - version: any; // TEMP -} // TEMP - -export interface InteractionMetadata { - authorizing_integration_owners: Partial>; - id: string; - interacted_message_id?: string; - original_response_message_id?: string; - triggering_interaction_metadata?: InteractionMetadata; - type: InteractionTypes; - /** @todo This is not a UserRecord; it's a user object from the API. */ - user: Record; -} // TEMP - -export interface ChannelMention { - guild_id: string; - id: string; - name: string; - type: ChannelType; -} - -export interface MessageReference { - channel_id: string; - guild_id?: string; - message_id?: string; -} - -export const enum PollLayoutTypes { - UNKNOWN = 0, - DEFAULT = 1, - IMAGE_ONLY_ANSWERS = 2, -} - -export interface MessageEmoji { - animated?: boolean; - id: string | null; - name: string | null; -} - -export interface MessagePollMedia { - emoji?: MessageEmoji; - text?: string; -} - -export interface MessagePollAnswer { - answer_id: number; - poll_media: MessagePollMedia; -} - -export interface MessagePollAnswerCount { - count: number; - id: number; - me_voted: boolean; -} - -export interface MessagePollResults { - answer_counts: MessagePollAnswerCount[]; - is_finalized: boolean; -} - -export interface MessagePoll { - allow_multiselect: boolean; - answers: MessagePollAnswer[]; - expiry: Moment; - layout_type: PollLayoutTypes; - question: MessagePollMedia; - results?: MessagePollResults; -} - -export const enum PurchaseNotificationType { - GUILD_PRODUCT = 0, -} - -export interface MessagePurchaseNotification { - guild_product_purchase: { - listing_id?: string | null; // TEMP - product_name?: string | null; // TEMP - }; // TEMP - type: PurchaseNotificationType; -} // TEMP - -export interface MessageReactionCountDetails { - burst: number; - normal: number; - vote?: number; -} - -export interface MessageReaction { - burst_colors: string[]; - burst_count: number; - count: number; - count_details: MessageReactionCountDetails; - emoji: MessageEmoji; - me: boolean; - me_burst: boolean; - me_vote?: boolean; -} - -export interface MessageRoleSubscriptionData { - is_renewal?: boolean | null; // TEMP - role_subscription_listing_id?: string | null; // TEMP - tier_name?: string | null; // TEMP - total_months_subscribed?: number | null; // TEMP -} // TEMP - -export const enum MessageStates { - SEND_FAILED = "SEND_FAILED", - SENDING = "SENDING", - SENT = "SENT", -} - -export const enum StickerFormat { - PNG = 1, - APNG = 2, - LOTTIE = 3, - GIF = 4, -} - -export interface MessageStickerItem { - format_type: StickerFormat; - id: string; - name: string; -} - -export const enum MetaStickerType { - STANDARD = 1, - GUILD = 2, -} - -export interface MessageSticker { - asset?: ""; - available?: boolean; - description: string | null; - format_type: StickerFormat; - guild_id?: string; - id: string; - name: string; - pack_id?: string; - sort_value?: number; - tags: string; - type: MetaStickerType; - /** @todo This is not a UserRecord; it's a user object from the API. */ - user?: Record; -} - -export const enum MessageTypes { - DEFAULT = 0, - RECIPIENT_ADD = 1, - RECIPIENT_REMOVE = 2, - CALL = 3, - CHANNEL_NAME_CHANGE = 4, - CHANNEL_ICON_CHANGE = 5, - CHANNEL_PINNED_MESSAGE = 6, - USER_JOIN = 7, - GUILD_BOOST = 8, - GUILD_BOOST_TIER_1 = 9, - GUILD_BOOST_TIER_2 = 10, - GUILD_BOOST_TIER_3 = 11, - CHANNEL_FOLLOW_ADD = 12, - GUILD_STREAM = 13, - GUILD_DISCOVERY_DISQUALIFIED = 14, - GUILD_DISCOVERY_REQUALIFIED = 15, - GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, - GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, - THREAD_CREATED = 18, - REPLY = 19, - CHAT_INPUT_COMMAND = 20, - THREAD_STARTER_MESSAGE = 21, - GUILD_INVITE_REMINDER = 22, - CONTEXT_MENU_COMMAND = 23, - AUTO_MODERATION_ACTION = 24, - ROLE_SUBSCRIPTION_PURCHASE = 25, - INTERACTION_PREMIUM_UPSELL = 26, - STAGE_START = 27, - STAGE_END = 28, - STAGE_SPEAKER = 29, - STAGE_RAISE_HAND = 30, - STAGE_TOPIC = 31, - GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, - PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, - PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, - PREMIUM_REFERRAL = 35, - GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, - GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, - GUILD_INCIDENT_REPORT_RAID = 38, - GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, - GUILD_DEADCHAT_REVIVE_PROMPT = 40, - CUSTOM_GIFT = 41, - GUILD_GAMING_STATS_PROMPT = 42, - PURCHASE_NOTIFICATION = 44, - VOICE_HANGOUT_INVITE = 45, - POLL_RESULT = 46, - CHANGELOG = 47, -} +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Duration, Moment } from "moment"; +import type { SnakeCasedProperties } from "type-fest"; + +import type { Nullish } from "../../internal"; +import type { ApplicationIntegrationType } from "../ApplicationRecord"; +import type { ChannelRecord, ChannelType } from "../channels"; +import type { ImmutableRecord } from "../ImmutableRecord"; +import type { UserRecord } from "../UserRecord"; + +export type MessageRecordOwnProperties = Pick; + +export class MessageRecord< + OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties +> extends ImmutableRecord { + constructor(messageProperties: Record); // TEMP + + addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP + addReactionBatch(e?: any, t?: any): any; // TEMP + canDeleteOwnMessage(userId: string): boolean; + getChannelId(): string; + getReaction(e?: any): any; // TEMP + hasFlag(flag: MessageFlags): boolean; + isCommandType(): boolean; + isEdited(): boolean; + isFirstMessageInForumPost(channel: ChannelRecord): boolean; // TEMP + isInteractionPlaceholder(): boolean; + isPoll(): boolean; + isSystemDM(): boolean; + isUIKitComponents(): boolean; + removeReaction(e?: any, t?: any, n?: any): this; // TEMP + removeReactionsForEmoji(e?: any): this; // TEMP + toJS(): OwnProperties & SnakeCasedProperties>; + userHasReactedWithEmoji(e?: any, t?: any): boolean; // TEMP + + activity: any/* | null*/; // TEMP + activityInstance: any/* | null*/; // TEMP + application: any/* | null*/; // TEMP + applicationId: string | null; // TEMP + attachments: MessageAttachment[]; + author: UserRecord; + blocked: boolean; + bot: boolean; + call: MessageCall | null; + changelogId: string | null; + channel_id: string; + codedLinks: CodedLink[]; + colorString: string | undefined; + components: MessageComponent[]; + content: string; + customRenderedContent: any/* | undefined*/; // TEMP + editedTimestamp: Date | null; + embeds: MessageEmbed[]; + flags: MessageFlags; + giftCodes: string[]; + giftInfo: MessageGiftInfo | undefined; + id: string; + interaction: InteractionRecord | null; + interactionData: InteractionData | null; + interactionError: string | null; + interactionMetadata: InteractionMetadata | null; + isSearchHit: boolean; + isUnsupported: boolean; + loggingName: string | null; // TEMP + mentionChannels: ChannelMention[]; + mentioned: boolean; + mentionEveryone: boolean; + mentionRoles: string[]; + mentions: string[]; + messageReference: MessageReference | null; + messageSnapshots: any[]; // TEMP + nick: any/* | undefined */; // TEMP + nonce: string | number | null; + pinned: boolean; + poll: MessagePoll | undefined; + purchaseNotification: MessagePurchaseNotification | undefined; + reactions: MessageReaction[]; + referralTrialOfferId: string | null; // TEMP + roleSubscriptionData: MessageRoleSubscriptionData | undefined; + state: MessageStates; + stickerItems: MessageStickerItem[]; + stickers: MessageSticker[]; + timestamp: Date; + tts: boolean; + type: MessageTypes; + webhookId: string | null; +} + +export const enum MessageAttachmentFlags { + IS_CLIP = 1 << 0, + IS_THUMBNAIL = 1 << 1, + IS_REMIX = 1 << 2, + IS_SPOILER = 1 << 3, + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageAttachment { + content_scan_version?: number; + content_type?: string; + description?: string; + duration_secs?: number; + ephemeral?: boolean; + filename: string; + flags?: MessageAttachmentFlags; + height?: number | null; + id: string; + placeholder?: string; + placeholder_version?: number; + proxy_url: string; + size: number; + spoiler: boolean; + url: string; + waveform?: string; + width?: number | null; +} + +export interface MessageCall { + duration: Duration | null; + endedTimestamp: Moment | null; + participants: string[]; +} + +export const enum CodedLinkType { + ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", + APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", + BUILD_OVERRIDE = "BUILD_OVERRIDE", + CHANNEL_LINK = "CHANNEL_LINK", + EMBEDDED_ACTIVITY_INVITE = "EMBEDDED_ACTIVITY_INVITE", + EVENT = "EVENT", + GUILD_PRODUCT = "GUILD_PRODUCT", + INVITE = "INVITE", + MANUAL_BUILD_OVERRIDE = "MANUAL_BUILD_OVERRIDE", + QUESTS_EMBED = "QUESTS_EMBED", + SERVER_SHOP = "SERVER_SHOP", + TEMPLATE = "TEMPLATE", +} + +export interface CodedLink { + code: string; + type: CodedLinkType; +} + +export interface MessageComponentEmoji { + animated: boolean | undefined; + id: string | undefined; + name: string | undefined; + src: string | undefined; +} + +// Original name: ComponentType +// Renamed to avoid name conflicts with ComponentType from React. +export const enum MessageComponentType { + ACTION_ROW = 1, + BUTTON = 2, + STRING_SELECT = 3, + INPUT_TEXT = 4, + USER_SELECT = 5, + ROLE_SELECT = 6, + MENTIONABLE_SELECT = 7, + CHANNEL_SELECT = 8, + TEXT = 10, + MEDIA_GALLERY = 12, + SEPARATOR = 14, +} + +export interface MessageActionRowComponent { + components: Exclude[]; + id: string; + type: MessageComponentType.ACTION_ROW; +} + +export const enum ButtonStyle { + PRIMARY = 1, + SECONDARY = 2, + SUCCESS = 3, + DESTRUCTIVE = 4, + LINK = 5, + PREMIUM = 6, +} + +/** + * @todo + * Must have one of either `customId` or `url`, but never both. + * If a button has `url` it must have the `Link` button style. + */ +export interface MessageButtonComponent { + customId: string | undefined; + disabled: boolean | undefined; + emoji: MessageComponentEmoji | undefined; + id: string; + label: string | undefined; + style: ButtonStyle; + type: MessageComponentType.BUTTON; + url: string | undefined; +} + +export const enum SelectOptionType { + STRING = 1, + USER = 2, + ROLE = 3, + CHANNEL = 4, + GUILD = 5, +} + +export interface SelectMenuOption { + default: boolean | undefined; + description: string | undefined; + emoji: MessageComponentEmoji | undefined; + label: string; + type: OptionType; + value: string; +} + +export interface MessageStringSelectComponent { + customId: string; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + options: SelectMenuOption[]; + placeholder: string; + type: MessageComponentType.STRING_SELECT; +} + +export const enum TextComponentStyle { + SMALL = 1, + PARAGRAPH = 2, +} + +export interface MessageTextInputComponent { + customId: string; + disabled: boolean | undefined; + id: string; + label: string; + maxLength: number | undefined; + minLength: number | undefined; + placeholder: string | undefined; + required: boolean; + style: TextComponentStyle; + type: MessageComponentType.INPUT_TEXT; + value: string | undefined; +} + +// Original name: SnowflakeSelectDefaultValueTypes +export const enum SnowflakeSelectDefaultValueType { + CHANNEL = "channel", + ROLE = "role", + USER = "user", +} + +export interface SelectMenuDefaultValue { + id: string; + type: DefaultValueType; +} + +export interface MessageUserSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.USER_SELECT; +} + +export interface MessageRoleSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.ROLE_SELECT; +} + +export interface MessageMentionableSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.MENTIONABLE_SELECT; +} + +export interface MessageChannelSelectComponent { + channelTypes: ChannelType[] | undefined; + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.CHANNEL_SELECT; +} + +export interface MessageTextComponent { + content: string | undefined; + id: string; + type: MessageComponentType.TEXT; +} + +export const enum ContentScanFlags { + EXPLICIT = 1, +} + +export interface MediaItem { + contentScanMetadata: { + contentScanFlags: ContentScanFlags | undefined; + version: number | undefined; + } | undefined; + contentType: string | undefined; + height: number | Nullish; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyUrl: string; + url: string; + width: number | Nullish; +} + +export interface MessageMediaGalleryComponent { + id: string; + items: { + description: string | undefined; + media: MediaItem; + spoiler: boolean; + }[]; + type: MessageComponentType.MEDIA_GALLERY; +} + +export const enum SeparatorSpacingSize { + SMALL = 1, + LARGE = 2, +} + +export interface MessageSeparatorComponent { + divider: boolean; + id: string; + spacing: SeparatorSpacingSize; + type: MessageComponentType.SEPARATOR; +} + +export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; + +export interface MessageEmbedAuthor { + iconProxyURL: string | undefined; + iconURL: string | undefined; + name: string; + url: string | undefined; +} + +export interface MessageEmbedField { + inline: boolean | undefined; + rawName: string; + rawValue: string; +} + +export const enum MessageEmbedFlags { + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageEmbedFooter { + iconProxyURL: string | undefined; + iconURL: string | undefined; + text: string; +} + +export interface MessageEmbedImage { + height: number | undefined; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number | undefined; +} + +export interface MessageEmbedProvider { + name: string; + url: string | undefined; +} + +/** + * @todo + * An embed thumbnail either + * has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` + * or has only `height`, `url`, and `width`. + */ +export interface MessageEmbedThumbnail { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number; +} + +// Original name: MessageEmbedTypes +export const enum MessageEmbedType { + APPLICATION_NEWS = "application_news", + ARTICLE = "article", + AUTO_MODERATION_MESSAGE = "auto_moderation_message", + AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", + GAMING_PROFILE = "gaming_profile", + GIFT = "gift", + GIFV = "gifv", + IMAGE = "image", + LINK = "link", + POLL_RESULT = "poll_result", + POST_PREVIEW = "post_preview", + RICH = "rich", + SAFETY_POLICY_NOTICE = "safety_policy_notice", + SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", + TEXT = "text", + TWEET = "tweet", + VIDEO = "video", + VOICE_CHANNEL = "voice_channel", +} + +/** + * @todo + * An embed video must have either `proxyURL` or `url`, and having both is possible. + * It might not be possible for an embed video to have `proxyURL` without `url`, though. + */ +export interface MessageEmbedVideo { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string | undefined; + width: number; +} + +export interface MessageEmbed { + author?: MessageEmbedAuthor; + color?: string; + contentScanVersion: number | undefined; + fields: MessageEmbedField[]; + flags: MessageEmbedFlags | undefined; + footer?: MessageEmbedFooter; + id: string; + image?: MessageEmbedImage; + provider?: MessageEmbedProvider; + rawDescription: string | undefined; + rawTitle: string | undefined; + referenceId: string | undefined; + thumbnail?: MessageEmbedThumbnail; + timestamp?: Moment; + type: MessageEmbedType | undefined; + url: string | undefined; + video?: MessageEmbedVideo; +} + +export const 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, + 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, +} + +export interface MessageGiftInfo { + emoji?: string | null; // TEMP + sound?: string | null; // TEMP +} // TEMP + +export const enum InteractionTypes { + PING = 1, + APPLICATION_COMMAND = 2, + MESSAGE_COMPONENT = 3, + APPLICATION_COMMAND_AUTOCOMPLETE = 4, + MODAL_SUBMIT = 5, +} + +export class InteractionRecord extends ImmutableRecord { + constructor(interaction: Record); // TEMP + + static createFromServer(interactionFromServer: Record): InteractionRecord; // TEMP + + displayName: string; + id: string; + name: string; + type: InteractionTypes; + user: UserRecord; +} + +export interface InteractionData { + application_command: any; // TEMP + guild_id: any; // TEMP + id: any; // TEMP + name: any; // TEMP + options: any; // TEMP + type: any; // TEMP + version: any; // TEMP +} // TEMP + +export interface InteractionMetadata { + authorizing_integration_owners: Partial>; + id: string; + interacted_message_id?: string; + original_response_message_id?: string; + triggering_interaction_metadata?: InteractionMetadata; + type: InteractionTypes; + /** @todo This is not a UserRecord; it's a user object from the API. */ + user: Record; +} // TEMP + +export interface ChannelMention { + guild_id: string; + id: string; + name: string; + type: ChannelType; +} + +export interface MessageReference { + channel_id: string; + guild_id?: string; + message_id?: string; +} + +export const enum PollLayoutTypes { + UNKNOWN = 0, + DEFAULT = 1, + IMAGE_ONLY_ANSWERS = 2, +} + +export interface MessageEmoji { + animated?: boolean; + id: string | null; + name: string | null; +} + +export interface MessagePollMedia { + emoji?: MessageEmoji; + text?: string; +} + +export interface MessagePollAnswer { + answer_id: number; + poll_media: MessagePollMedia; +} + +export interface MessagePollAnswerCount { + count: number; + id: number; + me_voted: boolean; +} + +export interface MessagePollResults { + answer_counts: MessagePollAnswerCount[]; + is_finalized: boolean; +} + +export interface MessagePoll { + allow_multiselect: boolean; + answers: MessagePollAnswer[]; + expiry: Moment; + layout_type: PollLayoutTypes; + question: MessagePollMedia; + results?: MessagePollResults; +} + +export const enum PurchaseNotificationType { + GUILD_PRODUCT = 0, +} + +export interface MessagePurchaseNotification { + guild_product_purchase: { + listing_id?: string | null; // TEMP + product_name?: string | null; // TEMP + }; // TEMP + type: PurchaseNotificationType; +} // TEMP + +export interface MessageReactionCountDetails { + burst: number; + normal: number; + vote?: number; +} + +export interface MessageReaction { + burst_colors: string[]; + burst_count: number; + count: number; + count_details: MessageReactionCountDetails; + emoji: MessageEmoji; + me: boolean; + me_burst: boolean; + me_vote?: boolean; +} + +export interface MessageRoleSubscriptionData { + is_renewal?: boolean | null; // TEMP + role_subscription_listing_id?: string | null; // TEMP + tier_name?: string | null; // TEMP + total_months_subscribed?: number | null; // TEMP +} // TEMP + +export const enum MessageStates { + SEND_FAILED = "SEND_FAILED", + SENDING = "SENDING", + SENT = "SENT", +} + +export const enum StickerFormat { + PNG = 1, + APNG = 2, + LOTTIE = 3, + GIF = 4, +} + +export interface MessageStickerItem { + format_type: StickerFormat; + id: string; + name: string; +} + +export const enum MetaStickerType { + STANDARD = 1, + GUILD = 2, +} + +export interface MessageSticker { + asset?: ""; + available?: boolean; + description: string | null; + format_type: StickerFormat; + guild_id?: string; + id: string; + name: string; + pack_id?: string; + sort_value?: number; + tags: string; + type: MetaStickerType; + /** @todo This is not a UserRecord; it's a user object from the API. */ + user?: Record; +} + +export const enum MessageTypes { + DEFAULT = 0, + RECIPIENT_ADD = 1, + RECIPIENT_REMOVE = 2, + CALL = 3, + CHANNEL_NAME_CHANGE = 4, + CHANNEL_ICON_CHANGE = 5, + CHANNEL_PINNED_MESSAGE = 6, + USER_JOIN = 7, + GUILD_BOOST = 8, + GUILD_BOOST_TIER_1 = 9, + GUILD_BOOST_TIER_2 = 10, + GUILD_BOOST_TIER_3 = 11, + CHANNEL_FOLLOW_ADD = 12, + GUILD_STREAM = 13, + GUILD_DISCOVERY_DISQUALIFIED = 14, + GUILD_DISCOVERY_REQUALIFIED = 15, + GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, + GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, + THREAD_CREATED = 18, + REPLY = 19, + CHAT_INPUT_COMMAND = 20, + THREAD_STARTER_MESSAGE = 21, + GUILD_INVITE_REMINDER = 22, + CONTEXT_MENU_COMMAND = 23, + AUTO_MODERATION_ACTION = 24, + ROLE_SUBSCRIPTION_PURCHASE = 25, + INTERACTION_PREMIUM_UPSELL = 26, + STAGE_START = 27, + STAGE_END = 28, + STAGE_SPEAKER = 29, + STAGE_RAISE_HAND = 30, + STAGE_TOPIC = 31, + GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, + PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, + PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, + PREMIUM_REFERRAL = 35, + GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, + GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, + GUILD_INCIDENT_REPORT_RAID = 38, + GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, + GUILD_DEADCHAT_REVIVE_PROMPT = 40, + CUSTOM_GIFT = 41, + GUILD_GAMING_STATS_PROMPT = 42, + PURCHASE_NOTIFICATION = 44, + VOICE_HANGOUT_INVITE = 45, + POLL_RESULT = 46, + CHANGELOG = 47, +} From b99045734cc680039321a30f6e9270e3652c1ade Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Thu, 6 Jun 2024 23:28:22 -0400 Subject: [PATCH 030/126] Progress --- package.json | 2 +- packages/discord-types/eslint.config.mjs | 1 + packages/discord-types/package.json | 1 + .../discord-types/src/general/Activity.d.ts | 10 +- .../discord-types/src/general/ReadState.d.ts | 14 +- .../src/general/emojis/Emoji.d.ts | 30 +- .../src/general/messages/ChannelMessages.d.ts | 10 +- .../src/general/messages/MessageRecord.d.ts | 609 ++++-------------- .../messages/MessageSnapshotRecord.d.ts | 23 + .../messages/MinimalMessageRecord.d.ts | 441 +++++++++++++ .../src/general/messages/index.d.ts | 2 + packages/discord-types/src/internal.d.ts | 19 +- packages/discord-types/tsconfig.json | 2 +- packages/vencord-types/package.json | 2 +- pnpm-lock.yaml | 17 +- 15 files changed, 645 insertions(+), 538 deletions(-) create mode 100644 packages/discord-types/src/general/messages/MessageSnapshotRecord.d.ts create mode 100644 packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts diff --git a/package.json b/package.json index 572335eec..bf94365e9 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "stylelint": "^15.6.0", "stylelint-config-standard": "^33.0.0", "ts-patch": "^3.1.2", - "tsx": "^4.11.2", + "tsx": "^4.13.0", "type-fest": "^4.19.0", "typescript": "^5.4.5", "typescript-transform-paths": "^3.4.7", diff --git a/packages/discord-types/eslint.config.mjs b/packages/discord-types/eslint.config.mjs index 22989d761..bd43a8fa1 100644 --- a/packages/discord-types/eslint.config.mjs +++ b/packages/discord-types/eslint.config.mjs @@ -159,6 +159,7 @@ export default tseslint.config( }], "import/no-default-export": "error", "import/no-unused-modules": "error", + "no-restricted-globals": ["error", "_", "JSX", "React"], "no-restricted-syntax": [ "error", "ImportDeclaration[importKind=value]", diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index 1f22881ee..800146d0d 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -21,6 +21,7 @@ "dependencies": { "@types/events": "~3.0.3", "@types/lodash": "~4.17.4", + "@types/react": "~18.2.79", "dependency-graph": "0.9.0", "moment": "2.22.2", "type-fest": "^4.19.0" diff --git a/packages/discord-types/src/general/Activity.d.ts b/packages/discord-types/src/general/Activity.d.ts index a36c47a08..51c60f3ce 100644 --- a/packages/discord-types/src/general/Activity.d.ts +++ b/packages/discord-types/src/general/Activity.d.ts @@ -33,7 +33,11 @@ export interface ActivityAssets { small_text?: string; } -export type ActivityEmoji = ActivityGuildEmoji | ActivityUnicodeEmoji; +export type ActivityEmoji = ActivityUnicodeEmoji | ActivityGuildEmoji; + +export interface ActivityUnicodeEmoji { + name: string; +} export interface ActivityGuildEmoji { animated: boolean; @@ -41,10 +45,6 @@ export interface ActivityGuildEmoji { name: string; } -export interface ActivityUnicodeEmoji { - name: string; -} - export const enum ActivityFlags { INSTANCE = 1 << 0, JOIN = 1 << 1, diff --git a/packages/discord-types/src/general/ReadState.d.ts b/packages/discord-types/src/general/ReadState.d.ts index e84a1e30d..c9cd72ec9 100644 --- a/packages/discord-types/src/general/ReadState.d.ts +++ b/packages/discord-types/src/general/ReadState.d.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import type { Nullish, Overwrite } from "../internal"; +import type { Nullish, Optional } from "../internal"; import type { BasicPermissionsObject } from "../stores/PermissionStore"; import type { GuildChannelRecord } from "./channels/ChannelRecord"; @@ -75,18 +75,10 @@ export class ReadState { canTrackUnreads(): boolean; clearOutgoingAck(): void; delete(remote?: boolean | undefined): void; - deserializeForOverlay(serlizedReadState: Overwrite, { + deserializeForOverlay(serlizedReadState: Optional, Nullish, "_isJoinedThread" | "estimated" | "_isActiveThread" | "isManualAck" | "_isThread" | "loadedMessages" | "oldestUnreadMessageIdStale" | "type"> & { _isActiveJoinedThread?: boolean | Nullish; - _isJoinedThread?: boolean | Nullish; _unreadCount?: number | Nullish; - estimated?: boolean | Nullish; - isActiveThread?: boolean | Nullish; - isManualAck?: boolean | Nullish; - isThread?: boolean | Nullish; - loadedMessages?: boolean | Nullish; - oldestUnreadMessageIdStale?: boolean | Nullish; - type?: ReadStateType | Nullish; - }>): void; + }): void; getAckTimestamp(): number; getGuildChannelUnreadState( guildChannel: BasicPermissionsObject | GuildChannelRecord, diff --git a/packages/discord-types/src/general/emojis/Emoji.d.ts b/packages/discord-types/src/general/emojis/Emoji.d.ts index c1c6978d1..25c4014d6 100644 --- a/packages/discord-types/src/general/emojis/Emoji.d.ts +++ b/packages/discord-types/src/general/emojis/Emoji.d.ts @@ -8,21 +8,6 @@ import type { Nullish } from "../../internal"; export type Emoji = UnicodeEmoji | GuildEmoji; -export interface GuildEmoji { - allNamesString: string; - animated: boolean; - available: boolean; - guildId: string; - id: string; - managed: false; - name: string; - originalName?: string; - /** False for emoticons. */ - require_colons: boolean; - roles: string[]; - type: EmojiType.GUILD; -} - // Original name: Emoji export class UnicodeEmoji { constructor(emojiObject: UnicodeEmojiObject | UnicodeEmojiObjectDiversityChild); @@ -71,6 +56,21 @@ export interface UnicodeEmojiObjectDiversityChild extends Pick; @@ -95,7 +95,7 @@ export class ChannelMessages { jumpToPresent(countFromPresent: number): ChannelMessages; last(): MessageRecord | undefined; get length(): number; - loadComplete(messageProperties: Record): ChannelMessages; // TEMP + loadComplete(messageProperties: MessageProperties): ChannelMessages; loadFromCache(isBefore: boolean, extractCount: number): ChannelMessages; loadStart(jumpConfig?: { messageId?: string | Nullish; @@ -114,7 +114,7 @@ export class ChannelMessages { ): ChannelMessages; mergeDelta( messages?: MessageRecord[] | undefined /* = [] */, - messageProperties?: Record[] | undefined /* = [] */, // TEMP + messageProperties?: MessageProperties[] | undefined /* = [] */, excludedMessageIds?: string[] /* = [] */ ): ChannelMessages; mutate( @@ -123,10 +123,10 @@ export class ChannelMessages { deep?: boolean | undefined /* = false */ ): ChannelMessages; receiveMessage( - messageProperties: Record, // TEMP + messageProperties: MessageProperties, truncateTop?: boolean | undefined /* = true */ ): ChannelMessages | this; - receivePushNotification(messageProperties: Record): ChannelMessages | this; // TEMP + receivePushNotification(messageProperties: MessageProperties): ChannelMessages | this; reduce( callback: ( previousValue: MessageRecord, diff --git a/packages/discord-types/src/general/messages/MessageRecord.d.ts b/packages/discord-types/src/general/messages/MessageRecord.d.ts index 702e61243..5594d3fd5 100644 --- a/packages/discord-types/src/general/messages/MessageRecord.d.ts +++ b/packages/discord-types/src/general/messages/MessageRecord.d.ts @@ -5,58 +5,68 @@ */ import type { Duration, Moment } from "moment"; +import type { ReactNode } from "react"; import type { SnakeCasedProperties } from "type-fest"; -import type { Nullish } from "../../internal"; +import type { Nullish, Optional } from "../../internal"; import type { ApplicationIntegrationType } from "../ApplicationRecord"; -import type { ChannelRecord, ChannelType } from "../channels"; +import type { ChannelRecord, ChannelType } from "../channels/ChannelRecord"; import type { ImmutableRecord } from "../ImmutableRecord"; import type { UserRecord } from "../UserRecord"; +import type { MessageSnapshotRecord } from "./MessageSnapshotRecord"; +import type { MessageFlags, MinimalMessageRecord, MinimalMessageRecordOwnProperties } from "./MinimalMessageRecord"; -export type MessageRecordOwnProperties = Pick; +export type MessageRecordOwnProperties = MinimalMessageRecordOwnProperties & Pick; + +export type MessageProperties = Optional + & SnakeCasedProperties, Nullish>> + & ({ gift_info?: MessageRecordOwnProperties["giftInfo"] | Nullish; giftInfo: MessageRecordOwnProperties["giftInfo"]; } + | { gift_info: MessageRecordOwnProperties["giftInfo"]; giftInfo?: MessageRecordOwnProperties["giftInfo"] | Nullish; }); export class MessageRecord< OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties -> extends ImmutableRecord { - constructor(messageProperties: Record); // TEMP +> extends MinimalMessageRecord { + constructor(messageProperties: MessageProperties); - addReaction(e?: any, t?: any, n?: any, r?: any): this; // TEMP - addReactionBatch(e?: any, t?: any): any; // TEMP + addReaction( + emoji: MessageReactionEmoji, + me?: boolean | undefined /* = false */, + burstColors?: string[] | undefined /* = [] */, + type?: ReactionType | undefined /* = ReactionType.NORMAL */ + ): this; + addReactionBatch(reactions: { emoji: MessageReactionEmoji; users: string[]; }, meId: string): this; canDeleteOwnMessage(userId: string): boolean; getChannelId(): string; - getReaction(e?: any): any; // TEMP + getReaction(emoji: MessageReactionEmoji): MessageReaction | undefined; hasFlag(flag: MessageFlags): boolean; isCommandType(): boolean; isEdited(): boolean; - isFirstMessageInForumPost(channel: ChannelRecord): boolean; // TEMP + isFirstMessageInForumPost(channel: ChannelRecord): boolean; isInteractionPlaceholder(): boolean; isPoll(): boolean; isSystemDM(): boolean; isUIKitComponents(): boolean; - removeReaction(e?: any, t?: any, n?: any): this; // TEMP - removeReactionsForEmoji(e?: any): this; // TEMP + removeReaction( + emoji: MessageReactionEmoji, + me?: boolean | undefined /* = false */, + type?: ReactionType | undefined /* = ReactionType.NORMAL */ + ): this; + removeReactionsForEmoji(emoji: MessageReactionEmoji): this; toJS(): OwnProperties & SnakeCasedProperties>; - userHasReactedWithEmoji(e?: any, t?: any): boolean; // TEMP - - activity: any/* | null*/; // TEMP - activityInstance: any/* | null*/; // TEMP - application: any/* | null*/; // TEMP - applicationId: string | null; // TEMP - attachments: MessageAttachment[]; + userHasReactedWithEmoji(emoji: MessageReactionEmoji, burst?: boolean | undefined /* = false */): boolean; + activity: MessageActivity | null; + activityInstance: { id: string; } | null; + /** @todo This is not an ApplicationRecord; it's an application object from the API. */ + application: Record | null; + applicationId: string | null; author: UserRecord; blocked: boolean; bot: boolean; call: MessageCall | null; changelogId: string | null; - channel_id: string; codedLinks: CodedLink[]; colorString: string | undefined; - components: MessageComponent[]; - content: string; - customRenderedContent: any/* | undefined*/; // TEMP - editedTimestamp: Date | null; - embeds: MessageEmbed[]; - flags: MessageFlags; + customRenderedContent: MessageCustomRenderedContent | Nullish; giftCodes: string[]; giftInfo: MessageGiftInfo | undefined; id: string; @@ -66,57 +76,41 @@ export class MessageRecord< interactionMetadata: InteractionMetadata | null; isSearchHit: boolean; isUnsupported: boolean; - loggingName: string | null; // TEMP + loggingName: string | null; mentionChannels: ChannelMention[]; mentioned: boolean; mentionEveryone: boolean; mentionRoles: string[]; mentions: string[]; messageReference: MessageReference | null; - messageSnapshots: any[]; // TEMP - nick: any/* | undefined */; // TEMP + messageSnapshots: MessageSnapshotRecord[]; + nick: string | undefined; nonce: string | number | null; pinned: boolean; poll: MessagePoll | undefined; purchaseNotification: MessagePurchaseNotification | undefined; reactions: MessageReaction[]; - referralTrialOfferId: string | null; // TEMP + referralTrialOfferId: string | null; roleSubscriptionData: MessageRoleSubscriptionData | undefined; state: MessageStates; stickerItems: MessageStickerItem[]; stickers: MessageSticker[]; - timestamp: Date; tts: boolean; - type: MessageTypes; webhookId: string | null; } -export const enum MessageAttachmentFlags { - IS_CLIP = 1 << 0, - IS_THUMBNAIL = 1 << 1, - IS_REMIX = 1 << 2, - IS_SPOILER = 1 << 3, - CONTAINS_EXPLICIT_MEDIA = 1 << 4, +export interface MessageActivity { + party_id?: string; + type: ActivityActionType; } -export interface MessageAttachment { - content_scan_version?: number; - content_type?: string; - description?: string; - duration_secs?: number; - ephemeral?: boolean; - filename: string; - flags?: MessageAttachmentFlags; - height?: number | null; - id: string; - placeholder?: string; - placeholder_version?: number; - proxy_url: string; - size: number; - spoiler: boolean; - url: string; - waveform?: string; - width?: number | null; +// Original name: ActivityActionTypes +export const enum ActivityActionType { + JOIN = 1, + SPECTATE = 2, + LISTEN = 3, + WATCH = 4, + JOIN_REQUEST = 5, } export interface MessageCall { @@ -125,6 +119,11 @@ export interface MessageCall { participants: string[]; } +export interface CodedLink { + code: string; + type: CodedLinkType; +} + export const enum CodedLinkType { ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", @@ -140,340 +139,9 @@ export const enum CodedLinkType { TEMPLATE = "TEMPLATE", } -export interface CodedLink { - code: string; - type: CodedLinkType; -} - -export interface MessageComponentEmoji { - animated: boolean | undefined; - id: string | undefined; - name: string | undefined; - src: string | undefined; -} - -// Original name: ComponentType -// Renamed to avoid name conflicts with ComponentType from React. -export const enum MessageComponentType { - ACTION_ROW = 1, - BUTTON = 2, - STRING_SELECT = 3, - INPUT_TEXT = 4, - USER_SELECT = 5, - ROLE_SELECT = 6, - MENTIONABLE_SELECT = 7, - CHANNEL_SELECT = 8, - TEXT = 10, - MEDIA_GALLERY = 12, - SEPARATOR = 14, -} - -export interface MessageActionRowComponent { - components: Exclude[]; - id: string; - type: MessageComponentType.ACTION_ROW; -} - -export const enum ButtonStyle { - PRIMARY = 1, - SECONDARY = 2, - SUCCESS = 3, - DESTRUCTIVE = 4, - LINK = 5, - PREMIUM = 6, -} - -/** - * @todo - * Must have one of either `customId` or `url`, but never both. - * If a button has `url` it must have the `Link` button style. - */ -export interface MessageButtonComponent { - customId: string | undefined; - disabled: boolean | undefined; - emoji: MessageComponentEmoji | undefined; - id: string; - label: string | undefined; - style: ButtonStyle; - type: MessageComponentType.BUTTON; - url: string | undefined; -} - -export const enum SelectOptionType { - STRING = 1, - USER = 2, - ROLE = 3, - CHANNEL = 4, - GUILD = 5, -} - -export interface SelectMenuOption { - default: boolean | undefined; - description: string | undefined; - emoji: MessageComponentEmoji | undefined; - label: string; - type: OptionType; - value: string; -} - -export interface MessageStringSelectComponent { - customId: string; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - options: SelectMenuOption[]; - placeholder: string; - type: MessageComponentType.STRING_SELECT; -} - -export const enum TextComponentStyle { - SMALL = 1, - PARAGRAPH = 2, -} - -export interface MessageTextInputComponent { - customId: string; - disabled: boolean | undefined; - id: string; - label: string; - maxLength: number | undefined; - minLength: number | undefined; - placeholder: string | undefined; - required: boolean; - style: TextComponentStyle; - type: MessageComponentType.INPUT_TEXT; - value: string | undefined; -} - -// Original name: SnowflakeSelectDefaultValueTypes -export const enum SnowflakeSelectDefaultValueType { - CHANNEL = "channel", - ROLE = "role", - USER = "user", -} - -export interface SelectMenuDefaultValue { - id: string; - type: DefaultValueType; -} - -export interface MessageUserSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.USER_SELECT; -} - -export interface MessageRoleSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.ROLE_SELECT; -} - -export interface MessageMentionableSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.MENTIONABLE_SELECT; -} - -export interface MessageChannelSelectComponent { - channelTypes: ChannelType[] | undefined; - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; - type: MessageComponentType.CHANNEL_SELECT; -} - -export interface MessageTextComponent { - content: string | undefined; - id: string; - type: MessageComponentType.TEXT; -} - -export const enum ContentScanFlags { - EXPLICIT = 1, -} - -export interface MediaItem { - contentScanMetadata: { - contentScanFlags: ContentScanFlags | undefined; - version: number | undefined; - } | undefined; - contentType: string | undefined; - height: number | Nullish; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyUrl: string; - url: string; - width: number | Nullish; -} - -export interface MessageMediaGalleryComponent { - id: string; - items: { - description: string | undefined; - media: MediaItem; - spoiler: boolean; - }[]; - type: MessageComponentType.MEDIA_GALLERY; -} - -export const enum SeparatorSpacingSize { - SMALL = 1, - LARGE = 2, -} - -export interface MessageSeparatorComponent { - divider: boolean; - id: string; - spacing: SeparatorSpacingSize; - type: MessageComponentType.SEPARATOR; -} - -export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; - -export interface MessageEmbedAuthor { - iconProxyURL: string | undefined; - iconURL: string | undefined; - name: string; - url: string | undefined; -} - -export interface MessageEmbedField { - inline: boolean | undefined; - rawName: string; - rawValue: string; -} - -export const enum MessageEmbedFlags { - CONTAINS_EXPLICIT_MEDIA = 1 << 4, -} - -export interface MessageEmbedFooter { - iconProxyURL: string | undefined; - iconURL: string | undefined; - text: string; -} - -export interface MessageEmbedImage { - height: number | undefined; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string; - width: number | undefined; -} - -export interface MessageEmbedProvider { - name: string; - url: string | undefined; -} - -/** - * @todo - * An embed thumbnail either - * has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` - * or has only `height`, `url`, and `width`. - */ -export interface MessageEmbedThumbnail { - height: number; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string; - width: number; -} - -// Original name: MessageEmbedTypes -export const enum MessageEmbedType { - APPLICATION_NEWS = "application_news", - ARTICLE = "article", - AUTO_MODERATION_MESSAGE = "auto_moderation_message", - AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", - GAMING_PROFILE = "gaming_profile", - GIFT = "gift", - GIFV = "gifv", - IMAGE = "image", - LINK = "link", - POLL_RESULT = "poll_result", - POST_PREVIEW = "post_preview", - RICH = "rich", - SAFETY_POLICY_NOTICE = "safety_policy_notice", - SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", - TEXT = "text", - TWEET = "tweet", - VIDEO = "video", - VOICE_CHANNEL = "voice_channel", -} - -/** - * @todo - * An embed video must have either `proxyURL` or `url`, and having both is possible. - * It might not be possible for an embed video to have `proxyURL` without `url`, though. - */ -export interface MessageEmbedVideo { - height: number; - placeholder: string | undefined; - placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string | undefined; - width: number; -} - -export interface MessageEmbed { - author?: MessageEmbedAuthor; - color?: string; - contentScanVersion: number | undefined; - fields: MessageEmbedField[]; - flags: MessageEmbedFlags | undefined; - footer?: MessageEmbedFooter; - id: string; - image?: MessageEmbedImage; - provider?: MessageEmbedProvider; - rawDescription: string | undefined; - rawTitle: string | undefined; - referenceId: string | undefined; - thumbnail?: MessageEmbedThumbnail; - timestamp?: Moment; - type: MessageEmbedType | undefined; - url: string | undefined; - video?: MessageEmbedVideo; -} - -export const 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, - 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, +export interface MessageCustomRenderedContent { + content: ReactNode; + hasSpoilerEmbeds: boolean; } export interface MessageGiftInfo { @@ -481,14 +149,6 @@ export interface MessageGiftInfo { sound?: string | null; // TEMP } // TEMP -export const enum InteractionTypes { - PING = 1, - APPLICATION_COMMAND = 2, - MESSAGE_COMPONENT = 3, - APPLICATION_COMMAND_AUTOCOMPLETE = 4, - MODAL_SUBMIT = 5, -} - export class InteractionRecord extends ImmutableRecord { constructor(interaction: Record); // TEMP @@ -497,7 +157,7 @@ export class InteractionRecord extends ImmutableRecord { displayName: string; id: string; name: string; - type: InteractionTypes; + type: InteractionType; user: UserRecord; } @@ -517,11 +177,20 @@ export interface InteractionMetadata { interacted_message_id?: string; original_response_message_id?: string; triggering_interaction_metadata?: InteractionMetadata; - type: InteractionTypes; + type: InteractionType; /** @todo This is not a UserRecord; it's a user object from the API. */ user: Record; } // TEMP +// Original name: InteractionTypes +export const enum InteractionType { + PING = 1, + APPLICATION_COMMAND = 2, + MESSAGE_COMPONENT = 3, + APPLICATION_COMMAND_AUTOCOMPLETE = 4, + MODAL_SUBMIT = 5, +} + export interface ChannelMention { guild_id: string; id: string; @@ -535,21 +204,20 @@ export interface MessageReference { message_id?: string; } -export const enum PollLayoutTypes { +// Original name: PollLayoutTypes +export const enum PollLayoutType { UNKNOWN = 0, DEFAULT = 1, IMAGE_ONLY_ANSWERS = 2, } -export interface MessageEmoji { - animated?: boolean; - id: string | null; - name: string | null; -} - -export interface MessagePollMedia { - emoji?: MessageEmoji; - text?: string; +export interface MessagePoll { + allow_multiselect: boolean; + answers: MessagePollAnswer[]; + expiry: Moment; + layout_type: PollLayoutType; + question: MessagePollMedia; + results?: MessagePollResults; } export interface MessagePollAnswer { @@ -557,10 +225,9 @@ export interface MessagePollAnswer { poll_media: MessagePollMedia; } -export interface MessagePollAnswerCount { - count: number; - id: number; - me_voted: boolean; +export interface MessagePollMedia { + emoji?: MessageReactionEmoji; + text?: string; } export interface MessagePollResults { @@ -568,17 +235,10 @@ export interface MessagePollResults { is_finalized: boolean; } -export interface MessagePoll { - allow_multiselect: boolean; - answers: MessagePollAnswer[]; - expiry: Moment; - layout_type: PollLayoutTypes; - question: MessagePollMedia; - results?: MessagePollResults; -} - -export const enum PurchaseNotificationType { - GUILD_PRODUCT = 0, +export interface MessagePollAnswerCount { + count: number; + id: number; + me_voted: boolean; } export interface MessagePurchaseNotification { @@ -589,10 +249,8 @@ export interface MessagePurchaseNotification { type: PurchaseNotificationType; } // TEMP -export interface MessageReactionCountDetails { - burst: number; - normal: number; - vote?: number; +export const enum PurchaseNotificationType { + GUILD_PRODUCT = 0, } export interface MessageReaction { @@ -600,12 +258,39 @@ export interface MessageReaction { burst_count: number; count: number; count_details: MessageReactionCountDetails; - emoji: MessageEmoji; + emoji: MessageReactionEmoji; me: boolean; me_burst: boolean; me_vote?: boolean; } +export type MessageReactionEmoji = MessageReactionUnicodeEmoji | MessageReactionGuildEmoji; + +export interface MessageReactionUnicodeEmoji { + animated?: false; + id?: null; + name: string; +} + +export interface MessageReactionGuildEmoji { + animated?: boolean; + id: string; + name: string; +} + +export interface MessageReactionCountDetails { + burst: number; + normal: number; + vote?: number; +} + +// Original name: ReactionTypes +export const enum ReactionType { + NORMAL = 0, + BURST = 1, + VOTE = 2, +} + export interface MessageRoleSubscriptionData { is_renewal?: boolean | null; // TEMP role_subscription_listing_id?: string | null; // TEMP @@ -619,22 +304,17 @@ export const enum MessageStates { SENT = "SENT", } -export const enum StickerFormat { - PNG = 1, - APNG = 2, - LOTTIE = 3, - GIF = 4, -} - export interface MessageStickerItem { format_type: StickerFormat; id: string; name: string; } -export const enum MetaStickerType { - STANDARD = 1, - GUILD = 2, +export const enum StickerFormat { + PNG = 1, + APNG = 2, + LOTTIE = 3, + GIF = 4, } export interface MessageSticker { @@ -653,52 +333,7 @@ export interface MessageSticker { user?: Record; } -export const enum MessageTypes { - DEFAULT = 0, - RECIPIENT_ADD = 1, - RECIPIENT_REMOVE = 2, - CALL = 3, - CHANNEL_NAME_CHANGE = 4, - CHANNEL_ICON_CHANGE = 5, - CHANNEL_PINNED_MESSAGE = 6, - USER_JOIN = 7, - GUILD_BOOST = 8, - GUILD_BOOST_TIER_1 = 9, - GUILD_BOOST_TIER_2 = 10, - GUILD_BOOST_TIER_3 = 11, - CHANNEL_FOLLOW_ADD = 12, - GUILD_STREAM = 13, - GUILD_DISCOVERY_DISQUALIFIED = 14, - GUILD_DISCOVERY_REQUALIFIED = 15, - GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, - GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, - THREAD_CREATED = 18, - REPLY = 19, - CHAT_INPUT_COMMAND = 20, - THREAD_STARTER_MESSAGE = 21, - GUILD_INVITE_REMINDER = 22, - CONTEXT_MENU_COMMAND = 23, - AUTO_MODERATION_ACTION = 24, - ROLE_SUBSCRIPTION_PURCHASE = 25, - INTERACTION_PREMIUM_UPSELL = 26, - STAGE_START = 27, - STAGE_END = 28, - STAGE_SPEAKER = 29, - STAGE_RAISE_HAND = 30, - STAGE_TOPIC = 31, - GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, - PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, - PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, - PREMIUM_REFERRAL = 35, - GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, - GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, - GUILD_INCIDENT_REPORT_RAID = 38, - GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, - GUILD_DEADCHAT_REVIVE_PROMPT = 40, - CUSTOM_GIFT = 41, - GUILD_GAMING_STATS_PROMPT = 42, - PURCHASE_NOTIFICATION = 44, - VOICE_HANGOUT_INVITE = 45, - POLL_RESULT = 46, - CHANGELOG = 47, +export const enum MetaStickerType { + STANDARD = 1, + GUILD = 2, } diff --git a/packages/discord-types/src/general/messages/MessageSnapshotRecord.d.ts b/packages/discord-types/src/general/messages/MessageSnapshotRecord.d.ts new file mode 100644 index 000000000..3ab688709 --- /dev/null +++ b/packages/discord-types/src/general/messages/MessageSnapshotRecord.d.ts @@ -0,0 +1,23 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ImmutableRecord } from "../ImmutableRecord"; +import type { MinimalMessageProperties, MinimalMessageRecord } from "./MinimalMessageRecord"; + +export type MessageSnapshotRecordOwnProperties = Pick; + +export type MessageSnapshotProperties = Pick + & { message: MinimalMessageProperties; }; + +export class MessageSnapshotRecord< + OwnProperties extends MessageSnapshotRecordOwnProperties = MessageSnapshotRecordOwnProperties +> extends ImmutableRecord { + constructor(messageSnapshotProperties: MessageSnapshotProperties); + + /** @todo This is not a GuildRecord; it's a guild object from the API. */ + guild: Record; + message: MinimalMessageRecord; +} diff --git a/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts b/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts new file mode 100644 index 000000000..8b8321263 --- /dev/null +++ b/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts @@ -0,0 +1,441 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Moment } from "moment"; + +import type { Nullish, Optional } from "../../internal"; +import type { ChannelType } from "../channels/ChannelRecord"; +import type { ImmutableRecord } from "../ImmutableRecord"; + +export type MinimalMessageRecordOwnProperties = Pick; + +export type MinimalMessageProperties = Optional; + +export class MinimalMessageRecord< + OwnProperties extends MinimalMessageRecordOwnProperties = MinimalMessageRecordOwnProperties +> extends ImmutableRecord { + constructor(minimalMessageProperties: MinimalMessageProperties); + + attachments: MessageAttachment[]; + channel_id: string; + components: MessageComponent[]; + content: string; + editedTimestamp: Date | null; + embeds: MessageEmbed[]; + flags: MessageFlags; + timestamp: Date; + type: MessageType; +} + +export interface MessageAttachment { + content_scan_version?: number; + content_type?: string; + description?: string; + duration_secs?: number; + ephemeral?: boolean; + filename: string; + flags?: MessageAttachmentFlags; + height?: number | null; + id: string; + placeholder?: string; + placeholder_version?: number; + proxy_url: string; + size: number; + spoiler: boolean; + url: string; + waveform?: string; + width?: number | null; +} + +export const enum MessageAttachmentFlags { + IS_CLIP = 1 << 0, + IS_THUMBNAIL = 1 << 1, + IS_REMIX = 1 << 2, + IS_SPOILER = 1 << 3, + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; + +export interface MessageActionRowComponent { + components: Exclude[]; + id: string; + type: MessageComponentType.ACTION_ROW; +} + +/** + * @todo + * Must have one of either `customId` or `url`, but never both. + * If a button has `url` it must have the `Link` button style. + */ +export interface MessageButtonComponent { + customId: string | undefined; + disabled: boolean | undefined; + emoji: MessageComponentEmoji | undefined; + id: string; + label: string | undefined; + style: ButtonStyle; + type: MessageComponentType.BUTTON; + url: string | undefined; +} + +export interface MessageComponentEmoji { + animated: boolean | undefined; + id: string | undefined; + name: string | undefined; + src: string | undefined; +} + +export const enum ButtonStyle { + PRIMARY = 1, + SECONDARY = 2, + SUCCESS = 3, + DESTRUCTIVE = 4, + LINK = 5, + PREMIUM = 6, +} + +export interface SelectMenuOption { + default: boolean | undefined; + description: string | undefined; + emoji: MessageComponentEmoji | undefined; + label: string; + type: OptionType; + value: string; +} + +export interface MessageStringSelectComponent { + customId: string; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + options: SelectMenuOption[]; + placeholder: string; + type: MessageComponentType.STRING_SELECT; +} + +export const enum SelectOptionType { + STRING = 1, + USER = 2, + ROLE = 3, + CHANNEL = 4, + GUILD = 5, +} + +export const enum TextComponentStyle { + SMALL = 1, + PARAGRAPH = 2, +} + +export interface MessageTextInputComponent { + customId: string; + disabled: boolean | undefined; + id: string; + label: string; + maxLength: number | undefined; + minLength: number | undefined; + placeholder: string | undefined; + required: boolean; + style: TextComponentStyle; + type: MessageComponentType.INPUT_TEXT; + value: string | undefined; +} + +export interface MessageUserSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.USER_SELECT; +} + +export interface MessageRoleSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.ROLE_SELECT; +} + +export interface MessageMentionableSelectComponent { + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.MENTIONABLE_SELECT; +} + +export interface MessageChannelSelectComponent { + channelTypes: ChannelType[] | undefined; + customId: string; + defaultValues: SelectMenuDefaultValue[]; + disabled: boolean | undefined; + id: string; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.CHANNEL_SELECT; +} + +export interface SelectMenuDefaultValue { + id: string; + type: DefaultValueType; +} + +// Original name: SnowflakeSelectDefaultValueTypes +export const enum SnowflakeSelectDefaultValueType { + CHANNEL = "channel", + ROLE = "role", + USER = "user", +} + +export interface MessageTextComponent { + content: string | undefined; + id: string; + type: MessageComponentType.TEXT; +} + +export interface MediaItem { + contentScanMetadata: { + contentScanFlags: ContentScanFlags | undefined; + version: number | undefined; + } | undefined; + contentType: string | undefined; + height: number | Nullish; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyUrl: string; + url: string; + width: number | Nullish; +} + +export const enum ContentScanFlags { + EXPLICIT = 1, +} + +export interface MessageMediaGalleryComponent { + id: string; + items: { + description: string | undefined; + media: MediaItem; + spoiler: boolean; + }[]; + type: MessageComponentType.MEDIA_GALLERY; +} + +export interface MessageSeparatorComponent { + divider: boolean; + id: string; + spacing: SeparatorSpacingSize; + type: MessageComponentType.SEPARATOR; +} + +export const enum SeparatorSpacingSize { + SMALL = 1, + LARGE = 2, +} + +// Original name: ComponentType +// Renamed to avoid name conflicts with ComponentType from React. +export const enum MessageComponentType { + ACTION_ROW = 1, + BUTTON = 2, + STRING_SELECT = 3, + INPUT_TEXT = 4, + USER_SELECT = 5, + ROLE_SELECT = 6, + MENTIONABLE_SELECT = 7, + CHANNEL_SELECT = 8, + TEXT = 10, + MEDIA_GALLERY = 12, + SEPARATOR = 14, +} + +export interface MessageEmbed { + author?: MessageEmbedAuthor; + color?: string; + contentScanVersion: number | undefined; + fields: MessageEmbedField[]; + flags: MessageEmbedFlags | undefined; + footer?: MessageEmbedFooter; + id: string; + image?: MessageEmbedImage; + provider?: MessageEmbedProvider; + rawDescription: string | undefined; + rawTitle: string | undefined; + referenceId: string | undefined; + thumbnail?: MessageEmbedThumbnail; + timestamp?: Moment; + type: MessageEmbedType | undefined; + url: string | undefined; + video?: MessageEmbedVideo; +} + +export interface MessageEmbedAuthor { + iconProxyURL: string | undefined; + iconURL: string | undefined; + name: string; + url: string | undefined; +} + +export interface MessageEmbedField { + inline: boolean | undefined; + rawName: string; + rawValue: string; +} + +export const enum MessageEmbedFlags { + CONTAINS_EXPLICIT_MEDIA = 1 << 4, +} + +export interface MessageEmbedFooter { + iconProxyURL: string | undefined; + iconURL: string | undefined; + text: string; +} + +export interface MessageEmbedImage { + height: number | undefined; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number | undefined; +} + +export interface MessageEmbedProvider { + name: string; + url: string | undefined; +} + +/** + * @todo + * An embed thumbnail either + * has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` + * or has only `height`, `url`, and `width`. + */ +export interface MessageEmbedThumbnail { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string; + width: number; +} + +// Original name: MessageEmbedTypes +export const enum MessageEmbedType { + APPLICATION_NEWS = "application_news", + ARTICLE = "article", + AUTO_MODERATION_MESSAGE = "auto_moderation_message", + AUTO_MODERATION_NOTIFICATION = "auto_moderation_notification", + GAMING_PROFILE = "gaming_profile", + GIFT = "gift", + GIFV = "gifv", + IMAGE = "image", + LINK = "link", + POLL_RESULT = "poll_result", + POST_PREVIEW = "post_preview", + RICH = "rich", + SAFETY_POLICY_NOTICE = "safety_policy_notice", + SAFETY_SYSTEM_NOTIFICATION = "safety_system_notification", + TEXT = "text", + TWEET = "tweet", + VIDEO = "video", + VOICE_CHANNEL = "voice_channel", +} + +/** + * @todo + * An embed video must have either `proxyURL` or `url`, and having both is possible. + * It might not be possible for an embed video to have `proxyURL` without `url`, though. + */ +export interface MessageEmbedVideo { + height: number; + placeholder: string | undefined; + placeholderVersion: number | undefined; + proxyURL: string | undefined; + url: string | undefined; + width: number; +} + +export const 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, + 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, +} + +// Original name: MessageTypes +export const enum MessageType { + DEFAULT = 0, + RECIPIENT_ADD = 1, + RECIPIENT_REMOVE = 2, + CALL = 3, + CHANNEL_NAME_CHANGE = 4, + CHANNEL_ICON_CHANGE = 5, + CHANNEL_PINNED_MESSAGE = 6, + USER_JOIN = 7, + GUILD_BOOST = 8, + GUILD_BOOST_TIER_1 = 9, + GUILD_BOOST_TIER_2 = 10, + GUILD_BOOST_TIER_3 = 11, + CHANNEL_FOLLOW_ADD = 12, + GUILD_STREAM = 13, + GUILD_DISCOVERY_DISQUALIFIED = 14, + GUILD_DISCOVERY_REQUALIFIED = 15, + GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING = 16, + GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING = 17, + THREAD_CREATED = 18, + REPLY = 19, + CHAT_INPUT_COMMAND = 20, + THREAD_STARTER_MESSAGE = 21, + GUILD_INVITE_REMINDER = 22, + CONTEXT_MENU_COMMAND = 23, + AUTO_MODERATION_ACTION = 24, + ROLE_SUBSCRIPTION_PURCHASE = 25, + INTERACTION_PREMIUM_UPSELL = 26, + STAGE_START = 27, + STAGE_END = 28, + STAGE_SPEAKER = 29, + STAGE_RAISE_HAND = 30, + STAGE_TOPIC = 31, + GUILD_APPLICATION_PREMIUM_SUBSCRIPTION = 32, + PRIVATE_CHANNEL_INTEGRATION_ADDED = 33, + PRIVATE_CHANNEL_INTEGRATION_REMOVED = 34, + PREMIUM_REFERRAL = 35, + GUILD_INCIDENT_ALERT_MODE_ENABLED = 36, + GUILD_INCIDENT_ALERT_MODE_DISABLED = 37, + GUILD_INCIDENT_REPORT_RAID = 38, + GUILD_INCIDENT_REPORT_FALSE_ALARM = 39, + GUILD_DEADCHAT_REVIVE_PROMPT = 40, + CUSTOM_GIFT = 41, + GUILD_GAMING_STATS_PROMPT = 42, + PURCHASE_NOTIFICATION = 44, + VOICE_HANGOUT_INVITE = 45, + POLL_RESULT = 46, + CHANGELOG = 47, +} diff --git a/packages/discord-types/src/general/messages/index.d.ts b/packages/discord-types/src/general/messages/index.d.ts index 79d900fa3..c7ecac990 100644 --- a/packages/discord-types/src/general/messages/index.d.ts +++ b/packages/discord-types/src/general/messages/index.d.ts @@ -7,3 +7,5 @@ export * from "./ChannelMessages"; export * from "./MessageCache"; export * from "./MessageRecord"; +export * from "./MessageSnapshotRecord"; +export * from "./MinimalMessageRecord"; diff --git a/packages/discord-types/src/internal.d.ts b/packages/discord-types/src/internal.d.ts index dcdeb7e81..6cc04fdda 100644 --- a/packages/discord-types/src/internal.d.ts +++ b/packages/discord-types/src/internal.d.ts @@ -10,12 +10,21 @@ export type Defined = Exclude; /** @internal */ export type GenericConstructor = new (...args: any[]) => unknown; +type IsOptional + = T extends Record ? False : True; + +/** @internal */ +export type MergeUnion>> + = Pick> + & Pick> + & { [Key in keyof T & keyof U as IsOptional & IsOptional]: T[Key] | U[Key]; } + & { [Key in keyof T & keyof U as IsOptional | IsOptional]?: T[Key] | U[Key]; }; + /** @internal */ export type Nullish = null | undefined; /** @internal */ -export type Optional = { [Key in keyof T]?: T[Key] | U; }; - -/** @internal */ -export type Overwrite - = Omit & Source; +export type Optional + = ExcludeKeys extends true + ? Pick & { [Key in Exclude]?: T[Key] | Value; } + : { [Key in Keys]?: T[Key] | Value; }; diff --git a/packages/discord-types/tsconfig.json b/packages/discord-types/tsconfig.json index 4c695c2b7..e7f02b99f 100644 --- a/packages/discord-types/tsconfig.json +++ b/packages/discord-types/tsconfig.json @@ -7,7 +7,7 @@ "strict": true, "module": "Node16", - "types": ["events", "lodash"], + "types": ["events", "lodash", "react"], "noEmit": true, diff --git a/packages/vencord-types/package.json b/packages/vencord-types/package.json index a9cc8baa9..dd8b6952f 100644 --- a/packages/vencord-types/package.json +++ b/packages/vencord-types/package.json @@ -28,6 +28,6 @@ "devDependencies": { "@types/fs-extra": "^11.0.4", "fs-extra": "^11.2.0", - "tsx": "^4.11.2" + "tsx": "^4.13.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 576c3916f..58f0bb931 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,8 +123,8 @@ importers: specifier: ^3.1.2 version: 3.1.2 tsx: - specifier: ^4.11.2 - version: 4.11.2 + specifier: ^4.13.0 + version: 4.13.0 type-fest: specifier: ^4.19.0 version: 4.19.0 @@ -146,6 +146,9 @@ importers: '@types/lodash': specifier: ~4.17.4 version: 4.17.4 + '@types/react': + specifier: ~18.2.79 + version: 18.2.79 dependency-graph: specifier: 0.9.0 version: 0.9.0 @@ -218,8 +221,8 @@ importers: specifier: ^11.2.0 version: 11.2.0 tsx: - specifier: ^4.11.2 - version: 4.11.2 + specifier: ^4.13.0 + version: 4.13.0 packages: @@ -2664,8 +2667,8 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsx@4.11.2: - resolution: {integrity: sha512-V5DL5v1BuItjsQ2FN9+4OjR7n5cr8hSgN+VGmm/fd2/0cgQdBIWHcQ3bFYm/5ZTmyxkTDBUIaRuW2divgfPe0A==} + tsx@4.13.0: + resolution: {integrity: sha512-kNY70P2aLMdVBii1Err5ENxDhQ6Vz2PbQGX68DcvzY2/PWK5NLBO6vI7lPr1/2xG3IKSt2MN+KOAyWDQSRlbCA==} engines: {node: '>=18.0.0'} hasBin: true @@ -5505,7 +5508,7 @@ snapshots: tslib@2.6.2: {} - tsx@4.11.2: + tsx@4.13.0: dependencies: esbuild: 0.20.2 get-tsconfig: 4.7.5 From f5bed654bad33ea9c3044817577dad5749f8e5aa Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sat, 8 Jun 2024 00:35:13 -0400 Subject: [PATCH 031/126] Progress --- package.json | 6 +- packages/discord-types/eslint.config.mjs | 2 +- packages/discord-types/package.json | 2 +- .../src/flux/FluxDispatcher.d.ts | 10 - .../src/flux/fluxActionHandlers.d.ts | 6 +- .../discord-types/src/flux/fluxActions.d.ts | 2 +- .../discord-types/src/general/Activity.d.ts | 2 +- .../src/general/ApplicationCommand.d.ts | 140 +++++++++ .../src/general/ApplicationRecord.d.ts | 10 +- packages/discord-types/src/general/Draft.d.ts | 5 +- .../src/general/GuildMemberProfile.d.ts | 3 +- .../src/general/GuildRecord.d.ts | 3 +- .../src/general/UserProfile.d.ts | 3 +- .../discord-types/src/general/UserRecord.d.ts | 3 +- .../src/general/channels/ChannelRecord.d.ts | 18 +- .../general/channels/ForumChannelRecord.d.ts | 9 +- .../channels/GuildTextualChannelRecord.d.ts | 17 +- .../channels/GuildVocalChannelRecord.d.ts | 14 +- .../channels/PrivateChannelRecord.d.ts | 4 +- .../general/channels/ThreadChannelRecord.d.ts | 6 +- .../channels/UnknownChannelRecord.d.ts | 6 +- packages/discord-types/src/general/index.d.ts | 1 + .../general/messages/InteractionRecord.d.ts | 42 +++ .../src/general/messages/MessageRecord.d.ts | 119 ++++---- .../messages/MinimalMessageRecord.d.ts | 268 ++++++++++-------- .../src/general/messages/index.d.ts | 1 + packages/discord-types/src/internal.d.ts | 5 +- .../src/stores/ChannelStore.d.ts | 9 +- .../src/stores/GuildChannelStore.d.ts | 4 +- .../src/stores/MessageStore.d.ts | 30 +- .../src/stores/PermissionStore.d.ts | 1 + .../src/stores/PresenceStore.d.ts | 1 + .../src/stores/ReadStateStore.d.ts | 1 + .../src/stores/UserProfileStore.d.ts | 4 +- .../discord-types/src/stores/UserStore.d.ts | 10 +- .../stores/abstract/FluxSnapshotStore.d.ts | 3 +- .../src/stores/abstract/FluxStore.d.ts | 3 +- packages/vencord-types/package.json | 6 +- pnpm-lock.yaml | 36 +-- 39 files changed, 523 insertions(+), 292 deletions(-) create mode 100644 packages/discord-types/src/general/ApplicationCommand.d.ts create mode 100644 packages/discord-types/src/general/messages/InteractionRecord.d.ts diff --git a/package.json b/package.json index bf94365e9..8504026a0 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@types/lodash": "~4.17.4", "@types/node": "^18.19.34", "@types/react": "~18.2.79", - "@types/react-dom": "~18.2.24", + "@types/react-dom": "~18.2.25", "@types/yazl": "^2.4.2", "@typescript-eslint/eslint-plugin": "^7.12.0", "@typescript-eslint/parser": "^7.12.0", @@ -74,8 +74,8 @@ "stylelint": "^15.6.0", "stylelint-config-standard": "^33.0.0", "ts-patch": "^3.1.2", - "tsx": "^4.13.0", - "type-fest": "^4.19.0", + "tsx": "^4.13.3", + "type-fest": "^4.20.0", "typescript": "^5.4.5", "typescript-transform-paths": "^3.4.7", "zip-local": "^0.3.5" diff --git a/packages/discord-types/eslint.config.mjs b/packages/discord-types/eslint.config.mjs index bd43a8fa1..820c196b6 100644 --- a/packages/discord-types/eslint.config.mjs +++ b/packages/discord-types/eslint.config.mjs @@ -114,7 +114,6 @@ export default tseslint.config( varsIgnorePattern: "^_" }], "@typescript-eslint/no-useless-empty-export": "error", - "@typescript-eslint/prefer-enum-initializers": "error", "@typescript-eslint/prefer-function-type": "error", "@typescript-eslint/triple-slash-reference": "error", "@typescript-eslint/unified-signatures": ["error", { ignoreDifferentlyNamedParameters: true }], @@ -143,6 +142,7 @@ export default tseslint.config( { files: ["src/**/*.ts"], rules: { + "@typescript-eslint/prefer-enum-initializers": "error", "headers/header-format": ["error", { source: "string", content: [ diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index 800146d0d..2acc52bd1 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -24,7 +24,7 @@ "@types/react": "~18.2.79", "dependency-graph": "0.9.0", "moment": "2.22.2", - "type-fest": "^4.19.0" + "type-fest": "^4.20.0" }, "devDependencies": { "@eslint-types/unicorn": "^52.0.0", diff --git a/packages/discord-types/src/flux/FluxDispatcher.d.ts b/packages/discord-types/src/flux/FluxDispatcher.d.ts index 7270661ac..c903d404c 100644 --- a/packages/discord-types/src/flux/FluxDispatcher.d.ts +++ b/packages/discord-types/src/flux/FluxDispatcher.d.ts @@ -8,16 +8,6 @@ import type { Nullish } from "../internal"; import type { FluxActionHandler, FluxActionHandlerMap, FluxActionHandlersGraph } from "./fluxActionHandlers"; import type { ExtractAction, FluxAction, FluxActionLogger, FluxActionType } from "./fluxActions"; -/* - * The only reason to make Dispatcher generic with a type parameter for the actions it handles would be to allow plugins - * to create their own Flux stores with their own actions. However, this would require removing all contravariant properties - * from Dispatcher so that plugins could create stores with their own Dispatcher instances. This would be required, since - * the alternative option, allowing plugins to use the main Dispatcher instance, would require removing type information for - * Discord's actions from Dispatcher, and would introduce the potential for action type name conflicts. Both of these - * options would harm the main use case of these types. Furthermore, there are other state management libraries bundled with - * Discord that plugins can use (e.g., Redux, Zustand), and Discord seems to only use one Dispatcher instance (all ~398 - * stores use the same instance), implying that their type for Dispatcher is also not generic. - */ // Original name: Dispatcher export class FluxDispatcher { constructor( diff --git a/packages/discord-types/src/flux/fluxActionHandlers.d.ts b/packages/discord-types/src/flux/fluxActionHandlers.d.ts index 64fc1f8c9..20d6de8e3 100644 --- a/packages/discord-types/src/flux/fluxActionHandlers.d.ts +++ b/packages/discord-types/src/flux/fluxActionHandlers.d.ts @@ -26,13 +26,15 @@ export type FluxActionHandlerMap interface FluxActionHandlersGraphNode { actionHandler: FluxActionHandlerMap; band: FluxDispatchBand; - name: string; // storeName + /** Name of a store. */ + name: string; storeDidChange: FluxActionHandler; } type FluxOrderedActionHandlers = { actionHandler: FluxActionHandler; - name: string; // storeName + /** Name of a store. */ + name: string; storeDidChange: FluxActionHandler; }[]; diff --git a/packages/discord-types/src/flux/fluxActions.d.ts b/packages/discord-types/src/flux/fluxActions.d.ts index 320086461..221e0af51 100644 --- a/packages/discord-types/src/flux/fluxActions.d.ts +++ b/packages/discord-types/src/flux/fluxActions.d.ts @@ -91,4 +91,4 @@ function generateFluxActionType() { } */ -export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_HIDE_TAGS" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETTINGS_FETCH_START" | "CLAN_SETTINGS_FETCH_SUCCESS" | "CLAN_SETTINGS_SUBMIT" | "CLAN_SETTINGS_SUBMIT_ERROR" | "CLAN_SETTINGS_SUBMIT_SUCCESS" | "CLAN_SETTINGS_UPDATE" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_DEBUG_CLEAR_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_LOG_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_TOGGLE_FAST_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_INBOX_STALE" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FEED_STATE" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TOGGLE_REPLY_MODE" | "CONTENT_INVENTORY_TRACK_ITEM_IMPRESSIONS" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_TRACK_USAGE" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENT_REGISTER_LEGACY" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_FAILURE" | "FETCH_STATIC_CLAN_LIST_START" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REQUEST_ACK" | "MESSAGE_REQUEST_CLEAR_ACK" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V2" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DELIVERY_OVERRIDE" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRACK" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR" | "USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; +export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_HIDE_TAGS" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "ADYEN_CREATE_CASH_APP_PAY_COMPONENT_SUCCESS" | "ADYEN_CREATE_CLIENT_SUCCESS" | "ADYEN_TEARDOWN_CLIENT" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTHENTICATOR_CREATE" | "AUTHENTICATOR_DELETE" | "AUTHENTICATOR_UPDATE" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_START" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETTINGS_FETCH_START" | "CLAN_SETTINGS_FETCH_SUCCESS" | "CLAN_SETTINGS_SUBMIT" | "CLAN_SETTINGS_SUBMIT_ERROR" | "CLAN_SETTINGS_SUBMIT_SUCCESS" | "CLAN_SETTINGS_UPDATE" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_DEBUG_CLEAR_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_LOG_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_TOGGLE_FAST_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_INBOX_STALE" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FEED_STATE" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TRACK_ITEM_IMPRESSIONS" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISCOVER_GUILDS_FETCH_FAILURE" | "DISCOVER_GUILDS_FETCH_START" | "DISCOVER_GUILDS_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_DELETE" | "EMOJI_FETCH_FAILURE" | "EMOJI_FETCH_SUCCESS" | "EMOJI_INTERACTION_INITIATED" | "EMOJI_TRACK_USAGE" | "EMOJI_UPLOAD_START" | "EMOJI_UPLOAD_STOP" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_AUTH_SESSIONS_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_FAILURE" | "FETCH_STATIC_CLAN_LIST_START" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_SUCCESS" | "GUILD_ANALYTICS_MEMBER_INSIGHTS_FETCH_SUCCESS" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_FAIL" | "GUILD_HOME_SETTINGS_UPDATE_START" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTIONS_CONFIGURATIONS_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_START" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_RESET" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_FAILED" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SUBMIT" | "GUILD_SETTINGS_DEFAULT_CHANNELS_TOGGLE" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_ADD_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_ADD_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_DELETE_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_DELETE_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_DISMISS_RESOURCE_CHANNEL_SUGGESTION" | "GUILD_SETTINGS_ONBOARDING_EDUCATION_UPSELL_DISMISSED" | "GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_EDIT" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_ERRORS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_FAILED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SUBMIT" | "GUILD_SETTINGS_ONBOARDING_REORDER_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_REORDER_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_ONBOARDING_STEP" | "GUILD_SETTINGS_ONBOARDING_UPDATE_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_UPDATE_NEW_MEMBER_ACTION_ICON_DATA" | "GUILD_SETTINGS_ONBOARDING_UPDATE_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_UPDATE_WELCOME_MESSAGE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS" | "GUILD_SETTINGS_ROLES_EDIT_SECTION_UPDATE" | "GUILD_SETTINGS_ROLES_INIT" | "GUILD_SETTINGS_ROLES_SAVE_FAIL" | "GUILD_SETTINGS_ROLES_SAVE_SUCCESS" | "GUILD_SETTINGS_ROLES_SORT_UPDATE" | "GUILD_SETTINGS_ROLES_SUBMITTING" | "GUILD_SETTINGS_ROLES_UPDATE_COLOR" | "GUILD_SETTINGS_ROLES_UPDATE_DESCRIPTION" | "GUILD_SETTINGS_ROLES_UPDATE_NAME" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSION_SET" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_CONNECTION_CONFIGURATIONS" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_ICON" | "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAFETY_PAGE" | "GUILD_SETTINGS_SAFETY_SET_SUBSECTION" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SETTINGS_VANITY_URL_CLOSE" | "GUILD_SETTINGS_VANITY_URL_ERROR" | "GUILD_SETTINGS_VANITY_URL_RESET" | "GUILD_SETTINGS_VANITY_URL_SET" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_TOP_READ_CHANNELS_FETCH_SUCCESS" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_PERMISSION_SETTINGS_APPLICATION_PERMISSIONS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_CLEAR" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_COMMAND_UPDATE" | "INTEGRATION_PERMISSION_SETTINGS_EDIT" | "INTEGRATION_PERMISSION_SETTINGS_INIT" | "INTEGRATION_PERMISSION_SETTINGS_RESET" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_COMMAND" | "INTEGRATION_SETTINGS_START_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_COMMAND" | "INTEGRATION_SETTINGS_STOP_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_INTEGRATION" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "INVITE_SUGGESTIONS_SEARCH" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_INVITE_SUGGESTIONS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "LOGOUT_AUTH_SESSIONS_SUCCESS" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REQUEST_ACK" | "MESSAGE_REQUEST_CLEAR_ACK" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MFA_CLEAR_BACKUP_CODES" | "MFA_DISABLE_SUCCESS" | "MFA_ENABLE_EMAIL_TOKEN" | "MFA_ENABLE_SUCCESS" | "MFA_SEEN_BACKUP_CODE_PROMPT" | "MFA_SEND_VERIFICATION_KEY" | "MFA_SMS_TOGGLE" | "MFA_SMS_TOGGLE_COMPLETE" | "MFA_VIEW_BACKUP_CODES" | "MFA_WEBAUTHN_CREDENTIALS_LOADED" | "MFA_WEBAUTHN_CREDENTIALS_LOADING" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V2" | "PASSWORDLESS_FAILURE" | "PASSWORDLESS_START" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DELIVERY_OVERRIDE" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUESTS_USER_STATUS_UPDATE" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_CLIENT_DISCONNECT" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_DEBUG_SET_SIMULCAST_OVERRIDE" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAFETY_HUB_APPEAL_CLOSE" | "SAFETY_HUB_APPEAL_OPEN" | "SAFETY_HUB_APPEAL_SIGNAL_CUSTOM_INPUT_CHANGE" | "SAFETY_HUB_APPEAL_SIGNAL_SELECT" | "SAFETY_HUB_FETCH_CLASSIFICATION_FAILURE" | "SAFETY_HUB_FETCH_CLASSIFICATION_START" | "SAFETY_HUB_FETCH_CLASSIFICATION_SUCCESS" | "SAFETY_HUB_FETCH_FAILURE" | "SAFETY_HUB_FETCH_START" | "SAFETY_HUB_FETCH_SUCCESS" | "SAFETY_HUB_REQUEST_REVIEW_FAILURE" | "SAFETY_HUB_REQUEST_REVIEW_START" | "SAFETY_HUB_REQUEST_REVIEW_SUCCESS" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPEED_TEST_CREATE" | "SPEED_TEST_DELETE" | "SPEED_TEST_SERVER_UPDATE" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRACK" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR" | "USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SETTINGS_CLEAR" | "WELCOME_SCREEN_SETTINGS_RESET" | "WELCOME_SCREEN_SETTINGS_UPDATE" | "WELCOME_SCREEN_SUBMIT" | "WELCOME_SCREEN_SUBMIT_FAILURE" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/packages/discord-types/src/general/Activity.d.ts b/packages/discord-types/src/general/Activity.d.ts index 51c60f3ce..a8b865daa 100644 --- a/packages/discord-types/src/general/Activity.d.ts +++ b/packages/discord-types/src/general/Activity.d.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -/** @todo Might have more properties. */ +/** @todo May have more properties. */ export interface Activity { application_id?: string | number; assets?: ActivityAssets; diff --git a/packages/discord-types/src/general/ApplicationCommand.d.ts b/packages/discord-types/src/general/ApplicationCommand.d.ts new file mode 100644 index 000000000..6ac061b59 --- /dev/null +++ b/packages/discord-types/src/general/ApplicationCommand.d.ts @@ -0,0 +1,140 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { ApplicationIntegrationType } from "./ApplicationRecord"; +import type { ChannelType } from "./channels/ChannelRecord"; + +export type ApplicationCommand = { + application_id: string; + contexts?: InteractionContextType[] | null; + /** Permissions serialized as a string. */ + default_member_permissions: string | null; + default_permission?: boolean | null; + description: CommandType extends ApplicationCommandType.CHAT ? string : ""; + description_localizations?: { [locale: string]: string; } | null; + dm_permission?: boolean; + guild_id?: string; + id: string; + integration_types?: ApplicationIntegrationType[]; + name: string; + name_localizations?: { [locale: string]: string; } | null; + nsfw?: boolean; + type?: ApplicationCommandType; + version: string; +} & (CommandType extends ApplicationCommandType.CHAT ? { options?: ApplicationCommandOption[]; } : {}); + +export const enum InteractionContextType { + GUILD = 0, + BOT_DM = 1, + PRIVATE_CHANNEL = 2, +} + +export const enum ApplicationCommandType { + CHAT = 1, + USER = 2, + MESSAGE = 3, + PRIMARY_ENTRY_POINT = 4, +} + +export type ApplicationCommandOption = ApplicationCommandSubcommandOption | ApplicationCommandSubcommandGroupOption | ApplicationCommandNonSubOption; + +export interface ApplicationCommandOptionBase extends Pick { + type: ApplicationCommandOptionType; +} + +export interface ApplicationCommandSubcommandOption extends ApplicationCommandOptionBase { + options?: ApplicationCommandNonSubOption[]; + type: ApplicationCommandOptionType.SUB_COMMAND; +} + +export interface ApplicationCommandSubcommandGroupOption extends ApplicationCommandOptionBase { + options?: ApplicationCommandOption[]; + type: ApplicationCommandOptionType.SUB_COMMAND; +} + +export type ApplicationCommandNonSubOption = ApplicationCommandChoicesOption | ApplicationCommandBooleanOption | ApplicationCommandUserOption | ApplicationCommandChannelOption | ApplicationCommandRoleOption | ApplicationCommandMentionableOption | ApplicationCommandAttachmentOption; + +export interface ApplicationCommandNonSubOptionBase extends ApplicationCommandOptionBase { + required?: boolean; +} + +type ApplicationCommandChoiceOptionType = ApplicationCommandOptionType.STRING | ApplicationCommandOptionType.INTEGER | ApplicationCommandOptionType.NUMBER; + +export type ApplicationCommandChoicesOption = ApplicationCommandStringOption | ApplicationCommandNumericOption; + +export type ApplicationCommandChoicesOptionBase = ApplicationCommandNonSubOptionBase + & { type: ApplicationCommandChoiceOptionType; } + & ({ autocomplete?: false; choice: ApplicationCommandOptionChoice[]; } + | { autocomplete?: boolean; }); + +export interface ApplicationCommandOptionChoice< + OptionType extends ApplicationCommandChoiceOptionType = ApplicationCommandChoiceOptionType +> extends Pick { + value: OptionType extends ApplicationCommandOptionType.STRING ? string + : OptionType extends ApplicationCommandOptionType.INTEGER | ApplicationCommandOptionType.NUMBER ? number + : never; +} + +export type ApplicationCommandStringOption = ApplicationCommandChoicesOptionBase & { + max_length?: number; + min_length?: number; + type: ApplicationCommandOptionType.STRING; +}; + +export type ApplicationCommandNumericOption = ApplicationCommandIntegerOption | ApplicationCommandNumberOption; + +export type ApplicationCommandNumericOptionBase = ApplicationCommandChoicesOptionBase & { + max_value?: number; + min_value?: number; + type: ApplicationCommandOptionType.INTEGER | ApplicationCommandOptionType.NUMBER; +}; + +export type ApplicationCommandIntegerOption = ApplicationCommandNumericOptionBase & { + type: ApplicationCommandOptionType.INTEGER; +}; + +export type ApplicationCommandNumberOption = ApplicationCommandNumericOptionBase & { + type: ApplicationCommandOptionType.NUMBER; +}; + +export interface ApplicationCommandBooleanOption extends ApplicationCommandNonSubOptionBase { + type: ApplicationCommandOptionType.BOOLEAN; +} + +export interface ApplicationCommandUserOption extends ApplicationCommandNonSubOptionBase { + type: ApplicationCommandOptionType.USER; +} + +export interface ApplicationCommandChannelOption extends ApplicationCommandNonSubOptionBase { + channel_types?: ChannelType[]; + type: ApplicationCommandOptionType.CHANNEL; +} + +export interface ApplicationCommandRoleOption extends ApplicationCommandNonSubOptionBase { + type: ApplicationCommandOptionType.ROLE; +} + +export interface ApplicationCommandMentionableOption extends ApplicationCommandNonSubOptionBase { + type: ApplicationCommandOptionType.MENTIONABLE; +} + +export interface ApplicationCommandAttachmentOption extends ApplicationCommandNonSubOptionBase { + type: ApplicationCommandOptionType.ATTACHMENT; +} + +export const enum ApplicationCommandOptionType { + SUB_COMMAND = 1, + SUB_COMMAND_GROUP = 2, + STRING = 3, + INTEGER = 4, + BOOLEAN = 5, + USER = 6, + CHANNEL = 7, + ROLE = 8, + MENTIONABLE = 9, + NUMBER = 10, + ATTACHMENT = 11, +} diff --git a/packages/discord-types/src/general/ApplicationRecord.d.ts b/packages/discord-types/src/general/ApplicationRecord.d.ts index 847809809..636a494d7 100644 --- a/packages/discord-types/src/general/ApplicationRecord.d.ts +++ b/packages/discord-types/src/general/ApplicationRecord.d.ts @@ -15,9 +15,11 @@ export type ApplicationRecordOwnProperties = Pick extends ImmutableRecord { - constructor(applicationProperties: Record); // TEMP + /** @todo */ + constructor(applicationProperties: Record); - static createFromServer(applicationFromServer: Record): ApplicationRecord; // TEMP + /** @todo */ + static createFromServer(applicationFromServer: Record): ApplicationRecord; static supportsOutOfProcessOverlay(overlayMethods?: ApplicationOverlayMethodFlags | Nullish): boolean; get destinationSkuId(): string | undefined; @@ -168,9 +170,7 @@ export const enum OAuth2Scope { } export interface ApplicationInstallParams { - /** - * Permissions serialized as a string. - */ + /** Permissions serialized as a string. */ permissions: string; scopes: OAuth2Scope[]; } diff --git a/packages/discord-types/src/general/Draft.d.ts b/packages/discord-types/src/general/Draft.d.ts index 9ea78aecb..b53ce0f67 100644 --- a/packages/discord-types/src/general/Draft.d.ts +++ b/packages/discord-types/src/general/Draft.d.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -// The other DraftTypes are either not handled by DraftStore or not yet implemented. +/** @todo It seems that the other DraftTypes are either not handled by DraftStore or not yet implemented. */ export type Draft = Type extends DraftType.CHANNEL_MESSAGE | DraftType.FIRST_THREAD_MESSAGE ? DraftMessage : Type extends DraftType.THREAD_SETTINGS ? DraftThreadSettings @@ -36,7 +36,8 @@ export interface DraftForumThreadSettings { export interface DraftNonForumThreadSettings { isPrivate: boolean; - location?: any; // TEMP + /** @todo */ + location?: any; parentChannelId: string; parentMessageId: string | undefined; timestamp: number; diff --git a/packages/discord-types/src/general/GuildMemberProfile.d.ts b/packages/discord-types/src/general/GuildMemberProfile.d.ts index 2a1519a3e..e01430d89 100644 --- a/packages/discord-types/src/general/GuildMemberProfile.d.ts +++ b/packages/discord-types/src/general/GuildMemberProfile.d.ts @@ -13,7 +13,8 @@ export interface GuildMemberProfile { banner: string | Nullish; bio: string | undefined; guildId: string; - popoutAnimationParticleType: any /* | Nullish */; // TEMP + /** @todo Does not seem to be implemented. */ + popoutAnimationParticleType: any /* | Nullish */; profileEffectId: string | undefined; pronouns: string; themeColors: ProfileThemeColors | Nullish; diff --git a/packages/discord-types/src/general/GuildRecord.d.ts b/packages/discord-types/src/general/GuildRecord.d.ts index ec0297f23..3395813dc 100644 --- a/packages/discord-types/src/general/GuildRecord.d.ts +++ b/packages/discord-types/src/general/GuildRecord.d.ts @@ -15,7 +15,8 @@ export type GuildRecordOwnProperties = Pick extends ImmutableRecord { - constructor(guildProperties: Record); // TEMP + /** @todo */ + constructor(guildProperties: Record); get acronym(): string; canHaveRaidActivityAlerts(): boolean; diff --git a/packages/discord-types/src/general/UserProfile.d.ts b/packages/discord-types/src/general/UserProfile.d.ts index 3c2a271d6..a60b05f5d 100644 --- a/packages/discord-types/src/general/UserProfile.d.ts +++ b/packages/discord-types/src/general/UserProfile.d.ts @@ -22,7 +22,8 @@ export interface UserProfileFetchSucceeded { connectedAccounts: ProfileConnectedAccountData[]; lastFetched: number; legacyUsername: string | Nullish; - popoutAnimationParticleType: any /* | Nullish */; // TEMP + /** @todo Does not seem to be implemented. */ + popoutAnimationParticleType: any /* | Nullish */; premiumGuildSince: Date | null; premiumSince: Date | null; premiumType: UserPremiumType | Nullish; diff --git a/packages/discord-types/src/general/UserRecord.d.ts b/packages/discord-types/src/general/UserRecord.d.ts index d8a64b186..4d03e6a5b 100644 --- a/packages/discord-types/src/general/UserRecord.d.ts +++ b/packages/discord-types/src/general/UserRecord.d.ts @@ -13,7 +13,8 @@ export type UserRecordOwnProperties = Pick extends ImmutableRecord { - constructor(userPropertiesOrUserFromServer: Record); // TEMP + /** @todo */ + constructor(userPropertiesOrUserFromServer: Record); addGuildAvatarHash(guildId: string, avatarHash: string): this; get avatarDecoration(): AvatarDecorationData | null; diff --git a/packages/discord-types/src/general/channels/ChannelRecord.d.ts b/packages/discord-types/src/general/channels/ChannelRecord.d.ts index f6c8fffb4..6f8bb81f8 100644 --- a/packages/discord-types/src/general/channels/ChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ChannelRecord.d.ts @@ -26,7 +26,8 @@ type ChannelRecordOwnPropertyKeys = "application_id" | "appliedTags" | "availabl export type ChannelRecordOwnProperties = Pick; export abstract class ChannelRecordBase { - constructor(channelProperties: Record); // TEMP + /** @todo */ + constructor(channelProperties: Record); get accessPermissions(): /* Permissions */ bigint; get bitrate(): number; @@ -37,27 +38,27 @@ export abstract class ChannelRecordBase { getDefaultSortOrder(): ThreadSortOrder; getGuildId(): this["guild_id"]; hasFlag(flag: ChannelFlags): boolean; - isActiveThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isActiveThread(): boolean; isAnnouncementThread(): this is ThreadChannelRecord; - isArchivedLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 - isArchivedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isArchivedLockedThread(): boolean; + isArchivedThread(): boolean; isBroadcastChannel(): boolean; isCategory(): this is GuildCategoryChannelRecord; isDirectory(): this is GuildDirectoryChannelRecord; isDM(): this is DMChannelRecord; isForumChannel(): this is GuildForumChannelRecord; isForumLikeChannel(): this is ForumChannelRecord; - isForumPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isForumPost(): boolean; isGroupDM(): this is GroupDMChannelRecord; isGuildStageVoice(): this is GuildStageVoiceChannelRecord; isGuildVocal(): this is GuildVocalChannelRecord; isGuildVocalOrThread(): this is GuildVocalChannelRecord | ThreadChannelRecord; isGuildVoice(): this is GuildVoiceChannelRecord; isListenModeCapable(): this is GuildStageVoiceChannelRecord; - isLockedThread(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isLockedThread(): boolean; isManaged(): boolean; isMediaChannel(): this is GuildMediaChannelRecord; - isMediaPost(): boolean; // requires https://github.com/microsoft/TypeScript/issues/15048 + isMediaPost(): boolean; isMultiUserDM(): this is GroupDMChannelRecord; isNSFW(): boolean; isOwner(userId: string): boolean; @@ -203,7 +204,8 @@ export interface ChannelRecipient { } export interface SafetyWarning { - dismiss_timestamp?: string | Nullish; // TEMP + /** @todo May not be null or optional. */ + dismiss_timestamp?: string | null; type: SafetyWarningType; } diff --git a/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts b/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts index cd426b125..554e37bd3 100644 --- a/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts @@ -10,9 +10,11 @@ import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; export type ForumChannelRecord = GuildForumChannelRecord | GuildMediaChannelRecord; export abstract class ForumChannelRecordBase extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP + /** @todo */ + constructor(channelProperties: Record); - static fromServer(channelFromServer: Record, guildId?: string | Nullish): ForumChannelRecord; // TEMP + /** @todo */ + static fromServer(channelFromServer: Record, guildId?: string | Nullish): ForumChannelRecord; application_id?: undefined; appliedTags?: undefined; @@ -33,7 +35,8 @@ export abstract class ForumChannelRecordBase extends ChannelRecordBase { member?: undefined; memberCount?: undefined; memberIdsPreview?: undefined; - memberListId: ChannelRecordBase["memberListId"]; // TEMP + /** @todo May only be nullish. */ + memberListId: ChannelRecordBase["memberListId"]; messageCount?: undefined; nicks?: undefined; nsfw_: Defined; diff --git a/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts b/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts index 3edd90dac..88f3854b9 100644 --- a/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts @@ -10,9 +10,11 @@ import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; export type GuildTextualChannelRecord = GuildTextChannelRecord | GuildCategoryChannelRecord | GuildAnnouncementChannelRecord | GuildStoreChannelRecord | GuildDirectoryChannelRecord; export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP + /** @todo */ + constructor(channelProperties: Record); - static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildTextualChannelRecord; // TEMP + /** @todo */ + static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildTextualChannelRecord; application_id: undefined; appliedTags?: undefined; @@ -33,7 +35,8 @@ export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { member?: undefined; memberCount?: undefined; memberIdsPreview?: undefined; - memberListId: ChannelRecordBase["memberListId"]; // TEMP + /** @todo May only be nullish. */ + memberListId: ChannelRecordBase["memberListId"]; messageCount?: undefined; nicks?: undefined; nsfw_: Defined; @@ -69,9 +72,9 @@ export class GuildCategoryChannelRecord extends GuildTextualChannelRecordBase { defaultThreadRateLimitPerUser: undefined; lastMessageId: undefined; lastPinTimestamp: undefined; - memberListId: undefined; // TEMP + memberListId: undefined; parent_id: Nullish; - themeColor: undefined; // TEMP + themeColor: undefined; topic_: undefined; type: ChannelType.GUILD_CATEGORY; } @@ -82,8 +85,8 @@ export class GuildAnnouncementChannelRecord extends GuildTextualChannelRecordBas export class GuildStoreChannelRecord extends GuildTextualChannelRecordBase { type: ChannelType.GUILD_STORE; -} // TEMP +} export class GuildDirectoryChannelRecord extends GuildTextualChannelRecordBase { type: ChannelType.GUILD_DIRECTORY; -} // TEMP +} diff --git a/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts b/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts index 4da859fb0..c723c0eb9 100644 --- a/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts @@ -10,9 +10,11 @@ import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; export type GuildVocalChannelRecord = GuildVoiceChannelRecord | GuildStageVoiceChannelRecord; export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP + /** @todo */ + constructor(channelProperties: Record); - static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildVocalChannelRecord; // TEMP + /** @todo */ + static fromServer(channelFromServer: Record, guildId?: string | Nullish): GuildVocalChannelRecord; application_id: undefined; appliedTags?: undefined; @@ -33,11 +35,13 @@ export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { member?: undefined; memberCount?: undefined; memberIdsPreview?: undefined; - memberListId: ChannelRecordBase["memberListId"]; // TEMP + /** @todo May only be nullish. */ + memberListId: ChannelRecordBase["memberListId"]; messageCount?: undefined; nicks?: undefined; nsfw_: Defined; - originChannelId: ChannelRecordBase["originChannelId"]; // TEMP + /** @todo May only be nullish. */ + originChannelId: ChannelRecordBase["originChannelId"]; ownerId?: undefined; parent_id: ChannelRecordBase["parent_id"]; parentChannelThreadType?: undefined; @@ -49,7 +53,7 @@ export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { rtcRegion: Defined; safetyWarnings?: undefined; template?: undefined; - themeColor: Nullish; // TEMP + themeColor: Nullish; threadMetadata?: undefined; topic_: Nullish; totalMessageSent?: undefined; diff --git a/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts b/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts index 2190e505c..8c74d2059 100644 --- a/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts @@ -10,8 +10,10 @@ import type { ChannelRecipient, ChannelRecordBase, ChannelType } from "./Channel export type PrivateChannelRecord = DMChannelRecord | GroupDMChannelRecord; export abstract class PrivateChannelRecordBase extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP + /** @todo */ + constructor(channelProperties: Record); + /** @todo */ static fromServer(channelFromServer: Record): PrivateChannelRecord; static sortRecipients(recipients: ChannelRecipient[] | Nullish, channelId: string): string[]; diff --git a/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts b/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts index db3ea2b62..7551fa9c4 100644 --- a/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts @@ -10,9 +10,11 @@ import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; type ThreadChannelType = ChannelType.ANNOUNCEMENT_THREAD | ChannelType.PUBLIC_THREAD | ChannelType.PRIVATE_THREAD; export class ThreadChannelRecord extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP + /** @todo */ + constructor(channelProperties: Record); - static fromServer(channelFromServer: Record, guildId?: string | Nullish): ThreadChannelRecord; // TEMP + /** @todo */ + static fromServer(channelFromServer: Record, guildId?: string | Nullish): ThreadChannelRecord; application_id?: undefined; appliedTags: Defined; diff --git a/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts b/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts index 5f09f35d9..f43bd6790 100644 --- a/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts @@ -8,9 +8,11 @@ import type { Defined, Nullish } from "../../internal"; import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; export class UnknownChannelRecord extends ChannelRecordBase { - constructor(channelProperties: Record); // TEMP + /** @todo */ + constructor(channelProperties: Record); - static fromServer(channelFromServer: Record, guildId?: string | Nullish): UnknownChannelRecord; // TEMP + /** @todo */ + static fromServer(channelFromServer: Record, guildId?: string | Nullish): UnknownChannelRecord; application_id: ChannelRecordBase["application_id"]; appliedTags: ChannelRecordBase["appliedTags"]; diff --git a/packages/discord-types/src/general/index.d.ts b/packages/discord-types/src/general/index.d.ts index 1e7314fb9..fe4ca2419 100644 --- a/packages/discord-types/src/general/index.d.ts +++ b/packages/discord-types/src/general/index.d.ts @@ -5,6 +5,7 @@ */ export * from "./Activity"; +export * from "./ApplicationCommand"; export * from "./ApplicationRecord"; export * from "./channels"; export * from "./Clan"; diff --git a/packages/discord-types/src/general/messages/InteractionRecord.d.ts b/packages/discord-types/src/general/messages/InteractionRecord.d.ts new file mode 100644 index 000000000..949615556 --- /dev/null +++ b/packages/discord-types/src/general/messages/InteractionRecord.d.ts @@ -0,0 +1,42 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { Nullish } from "../../internal"; +import type { ImmutableRecord } from "../ImmutableRecord"; +import type { UserRecord } from "../UserRecord"; + +export type InteractionRecordOwnProperties = Pick; + +export type InteractionProperties = Omit + & { name_localized?: string | Nullish; }; + +export class InteractionRecord< + OwnProperties extends InteractionRecordOwnProperties = InteractionRecordOwnProperties +> extends ImmutableRecord { + constructor(interaction: InteractionProperties); + + static createFromServer( + interactionFromServer: Omit & { + /** @todo This is not a UserRecord; it's a user object from the API. */ + user: Record; + } + ): InteractionRecord; + + displayName: string; + id: string; + name: string; + type: InteractionType; + user: UserRecord; +} + +// Original name: InteractionTypes +export const enum InteractionType { + PING = 1, + APPLICATION_COMMAND = 2, + MESSAGE_COMPONENT = 3, + APPLICATION_COMMAND_AUTOCOMPLETE = 4, + MODAL_SUBMIT = 5, +} diff --git a/packages/discord-types/src/general/messages/MessageRecord.d.ts b/packages/discord-types/src/general/messages/MessageRecord.d.ts index 5594d3fd5..0875b9a0f 100644 --- a/packages/discord-types/src/general/messages/MessageRecord.d.ts +++ b/packages/discord-types/src/general/messages/MessageRecord.d.ts @@ -9,19 +9,19 @@ import type { ReactNode } from "react"; import type { SnakeCasedProperties } from "type-fest"; import type { Nullish, Optional } from "../../internal"; +import type { ApplicationCommand, ApplicationCommandType } from "../ApplicationCommand"; import type { ApplicationIntegrationType } from "../ApplicationRecord"; import type { ChannelRecord, ChannelType } from "../channels/ChannelRecord"; -import type { ImmutableRecord } from "../ImmutableRecord"; import type { UserRecord } from "../UserRecord"; +import type { InteractionRecord, InteractionType } from "./InteractionRecord"; import type { MessageSnapshotRecord } from "./MessageSnapshotRecord"; import type { MessageFlags, MinimalMessageRecord, MinimalMessageRecordOwnProperties } from "./MinimalMessageRecord"; export type MessageRecordOwnProperties = MinimalMessageRecordOwnProperties & Pick; export type MessageProperties = Optional - & SnakeCasedProperties, Nullish>> - & ({ gift_info?: MessageRecordOwnProperties["giftInfo"] | Nullish; giftInfo: MessageRecordOwnProperties["giftInfo"]; } - | { gift_info: MessageRecordOwnProperties["giftInfo"]; giftInfo?: MessageRecordOwnProperties["giftInfo"] | Nullish; }); + & SnakeCasedProperties, Nullish>> + & Partial>; export class MessageRecord< OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties @@ -54,6 +54,7 @@ export class MessageRecord< removeReactionsForEmoji(emoji: MessageReactionEmoji): this; toJS(): OwnProperties & SnakeCasedProperties>; userHasReactedWithEmoji(emoji: MessageReactionEmoji, burst?: boolean | undefined /* = false */): boolean; + activity: MessageActivity | null; activityInstance: { id: string; } | null; /** @todo This is not an ApplicationRecord; it's an application object from the API. */ @@ -71,9 +72,9 @@ export class MessageRecord< giftInfo: MessageGiftInfo | undefined; id: string; interaction: InteractionRecord | null; - interactionData: InteractionData | null; + interactionData: MessageInteractionData | null; interactionError: string | null; - interactionMetadata: InteractionMetadata | null; + interactionMetadata: MessageInteractionMetadata | null; isSearchHit: boolean; isUnsupported: boolean; loggingName: string | null; @@ -82,6 +83,7 @@ export class MessageRecord< mentionEveryone: boolean; mentionRoles: string[]; mentions: string[]; + /** Only present for MessageRecords with type MessageType.REPLY or MessageType.THREAD_STARTER_MESSAGE. */ messageReference: MessageReference | null; messageSnapshots: MessageSnapshotRecord[]; nick: string | undefined; @@ -144,51 +146,27 @@ export interface MessageCustomRenderedContent { hasSpoilerEmbeds: boolean; } +/** @todo Some properties may either not be nullable or not be optional. */ export interface MessageGiftInfo { - emoji?: string | null; // TEMP - sound?: string | null; // TEMP -} // TEMP - -export class InteractionRecord extends ImmutableRecord { - constructor(interaction: Record); // TEMP - - static createFromServer(interactionFromServer: Record): InteractionRecord; // TEMP - - displayName: string; - id: string; - name: string; - type: InteractionType; - user: UserRecord; + emoji?: MessageReactionEmoji | null; + /** @todo May have more properties. */ + sound?: { id: string; } | null; } -export interface InteractionData { - application_command: any; // TEMP - guild_id: any; // TEMP - id: any; // TEMP - name: any; // TEMP - options: any; // TEMP - type: any; // TEMP - version: any; // TEMP -} // TEMP +export interface MessageInteractionData extends Pick, "id" | "name" | "options" | "type"> { + /** @todo May not be nullable or optional. */ + application_command?: ApplicationCommand | null; +} -export interface InteractionMetadata { +export interface MessageInteractionMetadata { authorizing_integration_owners: Partial>; id: string; interacted_message_id?: string; original_response_message_id?: string; - triggering_interaction_metadata?: InteractionMetadata; + triggering_interaction_metadata?: MessageInteractionMetadata; type: InteractionType; /** @todo This is not a UserRecord; it's a user object from the API. */ user: Record; -} // TEMP - -// Original name: InteractionTypes -export const enum InteractionType { - PING = 1, - APPLICATION_COMMAND = 2, - MESSAGE_COMPONENT = 3, - APPLICATION_COMMAND_AUTOCOMPLETE = 4, - MODAL_SUBMIT = 5, } export interface ChannelMention { @@ -204,13 +182,6 @@ export interface MessageReference { message_id?: string; } -// Original name: PollLayoutTypes -export const enum PollLayoutType { - UNKNOWN = 0, - DEFAULT = 1, - IMAGE_ONLY_ANSWERS = 2, -} - export interface MessagePoll { allow_multiselect: boolean; answers: MessagePollAnswer[]; @@ -225,6 +196,13 @@ export interface MessagePollAnswer { poll_media: MessagePollMedia; } +// Original name: PollLayoutTypes +export const enum PollLayoutType { + UNKNOWN = 0, + DEFAULT = 1, + IMAGE_ONLY_ANSWERS = 2, +} + export interface MessagePollMedia { emoji?: MessageReactionEmoji; text?: string; @@ -241,27 +219,39 @@ export interface MessagePollAnswerCount { me_voted: boolean; } +/** @todo May have more properties. Some properties may either not be nullable or not be optional. */ export interface MessagePurchaseNotification { - guild_product_purchase: { - listing_id?: string | null; // TEMP - product_name?: string | null; // TEMP - }; // TEMP + guild_product_purchase?: { + listing_id?: string | null; + product_name?: string | null; + } | null; type: PurchaseNotificationType; -} // TEMP +} export const enum PurchaseNotificationType { GUILD_PRODUCT = 0, } -export interface MessageReaction { - burst_colors: string[]; +export type MessageReaction = MessageNonVoteReaction | MessageVoteReaction; + +export interface MessageReactionBase { burst_count: number; count: number; count_details: MessageReactionCountDetails; emoji: MessageReactionEmoji; me: boolean; me_burst: boolean; - me_vote?: boolean; +} + +export interface MessageNonVoteReaction extends MessageReactionBase { + burst_colors: string[]; + burst_me?: boolean; + count_details: MessageNonVoteReactionCountDetails; +} + +export interface MessageVoteReaction extends MessageReactionBase { + count_details: MessageVoteReactionCountDetails; + me_vote: boolean; } export type MessageReactionEmoji = MessageReactionUnicodeEmoji | MessageReactionGuildEmoji; @@ -278,10 +268,15 @@ export interface MessageReactionGuildEmoji { name: string; } -export interface MessageReactionCountDetails { +export type MessageReactionCountDetails = MessageNonVoteReactionCountDetails | MessageVoteReactionCountDetails; + +export interface MessageNonVoteReactionCountDetails { burst: number; normal: number; - vote?: number; +} + +export interface MessageVoteReactionCountDetails { + vote: number; } // Original name: ReactionTypes @@ -292,11 +287,11 @@ export const enum ReactionType { } export interface MessageRoleSubscriptionData { - is_renewal?: boolean | null; // TEMP - role_subscription_listing_id?: string | null; // TEMP - tier_name?: string | null; // TEMP - total_months_subscribed?: number | null; // TEMP -} // TEMP + is_renewal: boolean; + role_subscription_listing_id: string; + tier_name: string; + total_months_subscribed: number; +} export const enum MessageStates { SEND_FAILED = "SEND_FAILED", diff --git a/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts b/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts index 8b8321263..4ab967586 100644 --- a/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts +++ b/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts @@ -58,38 +58,44 @@ export const enum MessageAttachmentFlags { CONTAINS_EXPLICIT_MEDIA = 1 << 4, } -export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageStringSelectComponent | MessageTextInputComponent | MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; +export type MessageComponent = MessageActionRowComponent | MessageButtonComponent | MessageSelectComponent | MessageTextInputComponent | MessageTextComponent | MessageMediaGalleryComponent | MessageSeparatorComponent; -export interface MessageActionRowComponent { - components: Exclude[]; +export interface MessageComponentBase { id: string; + type: MessageComponentType; +} + +export interface MessageActionRowComponent extends MessageComponentBase { + components: Exclude[]; type: MessageComponentType.ACTION_ROW; } -/** - * @todo - * Must have one of either `customId` or `url`, but never both. - * If a button has `url` it must have the `Link` button style. - */ -export interface MessageButtonComponent { +export type MessageButtonComponent = MessageNonLinkButtonComponent | MessageLinkButtonComponent; + +export interface MessageButtonComponentBase extends MessageComponentBase { customId: string | undefined; disabled: boolean | undefined; emoji: MessageComponentEmoji | undefined; - id: string; label: string | undefined; - style: ButtonStyle; + style: MessageButtonComponentStyle; type: MessageComponentType.BUTTON; url: string | undefined; } -export interface MessageComponentEmoji { - animated: boolean | undefined; - id: string | undefined; - name: string | undefined; - src: string | undefined; +export interface MessageNonLinkButtonComponent extends MessageButtonComponentBase { + customId: string; + style: Exclude; + url: undefined; } -export const enum ButtonStyle { +export interface MessageLinkButtonComponent extends MessageButtonComponentBase { + customId: undefined; + style: MessageButtonComponentStyle.LINK; + url: string; +} + +// Original name: ButtonStyle +export const enum MessageButtonComponentStyle { PRIMARY = 1, SECONDARY = 2, SUCCESS = 3, @@ -98,7 +104,25 @@ export const enum ButtonStyle { PREMIUM = 6, } -export interface SelectMenuOption { +export type MessageSelectComponent = MessageStringSelectComponent | MessageSnowflakeSelectComponent; + +export interface MessageSelectComponentBase extends MessageComponentBase { + customId: string; + disabled: boolean | undefined; + maxValues: number | undefined; + minValues: number | undefined; + placeholder: string; + type: MessageComponentType.STRING_SELECT | MessageComponentType.USER_SELECT | MessageComponentType.ROLE_SELECT | MessageComponentType.MENTIONABLE_SELECT | MessageComponentType.CHANNEL_SELECT; +} + +export interface MessageStringSelectComponent extends MessageSelectComponentBase { + options: MessageSelectComponentMenuOption[]; + type: MessageComponentType.STRING_SELECT; +} + +export interface MessageSelectComponentMenuOption< + OptionType extends MessageSelectComponentOptionType = MessageSelectComponentOptionType +> { default: boolean | undefined; description: string | undefined; emoji: MessageComponentEmoji | undefined; @@ -107,18 +131,8 @@ export interface SelectMenuOption[]; - placeholder: string; - type: MessageComponentType.STRING_SELECT; -} - -export const enum SelectOptionType { +// Original name: SelectOptionType +export const enum MessageSelectComponentOptionType { STRING = 1, USER = 2, ROLE = 3, @@ -126,119 +140,105 @@ export const enum SelectOptionType { GUILD = 5, } -export const enum TextComponentStyle { - SMALL = 1, - PARAGRAPH = 2, +export type MessageSnowflakeSelectComponent = MessageUserSelectComponent | MessageRoleSelectComponent | MessageMentionableSelectComponent | MessageChannelSelectComponent; + +export interface MessageSnowflakeSelectComponentBase extends MessageSelectComponentBase { + defaultValues: MessageSelectComponentDefaultValue[]; + type: MessageComponentType.USER_SELECT | MessageComponentType.ROLE_SELECT | MessageComponentType.MENTIONABLE_SELECT | MessageComponentType.CHANNEL_SELECT; } -export interface MessageTextInputComponent { - customId: string; - disabled: boolean | undefined; - id: string; - label: string; - maxLength: number | undefined; - minLength: number | undefined; - placeholder: string | undefined; - required: boolean; - style: TextComponentStyle; - type: MessageComponentType.INPUT_TEXT; - value: string | undefined; -} - -export interface MessageUserSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; +export interface MessageUserSelectComponent extends MessageSnowflakeSelectComponentBase { + defaultValues: MessageSelectComponentDefaultValue[]; type: MessageComponentType.USER_SELECT; } -export interface MessageRoleSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; +export interface MessageRoleSelectComponent extends MessageSnowflakeSelectComponentBase { + defaultValues: MessageSelectComponentDefaultValue[]; type: MessageComponentType.ROLE_SELECT; } -export interface MessageMentionableSelectComponent { - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; +export interface MessageMentionableSelectComponent extends MessageSnowflakeSelectComponentBase { + defaultValues: MessageSelectComponentDefaultValue[]; type: MessageComponentType.MENTIONABLE_SELECT; } -export interface MessageChannelSelectComponent { +export interface MessageChannelSelectComponent extends MessageSnowflakeSelectComponentBase { channelTypes: ChannelType[] | undefined; - customId: string; - defaultValues: SelectMenuDefaultValue[]; - disabled: boolean | undefined; - id: string; - maxValues: number | undefined; - minValues: number | undefined; - placeholder: string; + defaultValues: MessageSelectComponentDefaultValue[]; type: MessageComponentType.CHANNEL_SELECT; } -export interface SelectMenuDefaultValue { +export interface MessageSelectComponentDefaultValue< + DefaultValueType extends MessageSelectComponentDefaultValueType = MessageSelectComponentDefaultValueType +> { id: string; type: DefaultValueType; } // Original name: SnowflakeSelectDefaultValueTypes -export const enum SnowflakeSelectDefaultValueType { +export const enum MessageSelectComponentDefaultValueType { CHANNEL = "channel", ROLE = "role", USER = "user", } -export interface MessageTextComponent { +export interface MessageTextInputComponent extends MessageComponentBase { + customId: string; + disabled: boolean | undefined; + label: string; + maxLength: number | undefined; + minLength: number | undefined; + placeholder: string | undefined; + required: boolean; + style: MessageTextInputComponentStyle; + type: MessageComponentType.INPUT_TEXT; + value: string | undefined; +} + +// Original name: TextComponentStyle +export const enum MessageTextInputComponentStyle { + SMALL = 1, + PARAGRAPH = 2, +} + +export interface MessageTextComponent extends MessageComponentBase { + /** @todo May not be undefined. */ content: string | undefined; - id: string; type: MessageComponentType.TEXT; } -export interface MediaItem { +export interface MessageMediaGalleryComponent extends MessageComponentBase { + items: { + /** @todo May not be undefined. */ + description: string | undefined; + media: MessageMediaGalleryComponentItem; + /** @todo May not be undefined. */ + spoiler: boolean | undefined; + }[]; + type: MessageComponentType.MEDIA_GALLERY; +} +export interface MessageMediaGalleryComponentItem { contentScanMetadata: { - contentScanFlags: ContentScanFlags | undefined; + contentScanFlags: ContentScanFlags; + /** @todo May not be undefined. */ version: number | undefined; } | undefined; - contentType: string | undefined; - height: number | Nullish; + contentType: string; + height: number; placeholder: string | undefined; + /** @todo May not be undefined. */ placeholderVersion: number | undefined; proxyUrl: string; url: string; - width: number | Nullish; + width: number; } export const enum ContentScanFlags { EXPLICIT = 1, } -export interface MessageMediaGalleryComponent { - id: string; - items: { - description: string | undefined; - media: MediaItem; - spoiler: boolean; - }[]; - type: MessageComponentType.MEDIA_GALLERY; -} - -export interface MessageSeparatorComponent { +export interface MessageSeparatorComponent extends MessageComponentBase { divider: boolean; - id: string; spacing: SeparatorSpacingSize; type: MessageComponentType.SEPARATOR; } @@ -248,6 +248,22 @@ export const enum SeparatorSpacingSize { LARGE = 2, } +export type MessageComponentEmoji = MessageComponentUnicodeEmoji | MessageComponentGuildEmoji; + +export interface MessageComponentUnicodeEmoji { + animated: false | undefined; + id: undefined; + name: string; + src: undefined; +} + +export interface MessageComponentGuildEmoji { + animated: boolean | undefined; + id: string; + name: string; + src: string | undefined; +} + // Original name: ComponentType // Renamed to avoid name conflicts with ComponentType from React. export const enum MessageComponentType { @@ -264,9 +280,10 @@ export const enum MessageComponentType { SEPARATOR = 14, } -export interface MessageEmbed { +export type MessageEmbed = { author?: MessageEmbedAuthor; color?: string; + /** @todo May not be undefined. */ contentScanVersion: number | undefined; fields: MessageEmbedField[]; flags: MessageEmbedFlags | undefined; @@ -281,8 +298,11 @@ export interface MessageEmbed { timestamp?: Moment; type: MessageEmbedType | undefined; url: string | undefined; - video?: MessageEmbedVideo; -} +} & ({} | { + provider: MessageEmbedProvider; + thumbnail: MessageEmbedThumbnail; + video: MessageEmbedVideo; +}); export interface MessageEmbedAuthor { iconProxyURL: string | undefined; @@ -308,12 +328,14 @@ export interface MessageEmbedFooter { } export interface MessageEmbedImage { - height: number | undefined; + /** Always greater than 0. */ + height: number; placeholder: string | undefined; placeholderVersion: number | undefined; proxyURL: string | undefined; url: string; - width: number | undefined; + /** Always greater than 0. */ + width: number; } export interface MessageEmbedProvider { @@ -321,20 +343,17 @@ export interface MessageEmbedProvider { url: string | undefined; } -/** - * @todo - * An embed thumbnail either - * has `height`, `placeholder`, `placeholderVersion`, `proxyURL`, `url`, and `width` - * or has only `height`, `url`, and `width`. - */ -export interface MessageEmbedThumbnail { +export type MessageEmbedThumbnail = { + /** Always greater than 0. */ height: number; + url: string; + /** Always greater than 0. */ + width: number; +} & ({} | { placeholder: string | undefined; placeholderVersion: number | undefined; proxyURL: string | undefined; - url: string; - width: number; -} +}); // Original name: MessageEmbedTypes export const enum MessageEmbedType { @@ -358,19 +377,20 @@ export const enum MessageEmbedType { VOICE_CHANNEL = "voice_channel", } -/** - * @todo - * An embed video must have either `proxyURL` or `url`, and having both is possible. - * It might not be possible for an embed video to have `proxyURL` without `url`, though. - */ -export interface MessageEmbedVideo { +export type MessageEmbedVideo = { + /** Always greater than 0. */ height: number; placeholder: string | undefined; placeholderVersion: number | undefined; - proxyURL: string | undefined; - url: string | undefined; + /** Always greater than 0. */ width: number; -} +} & ({ + proxyURL: string; + url: string | undefined; +} | { + proxyURL: string | undefined; + url: string; +}); export const enum MessageFlags { CROSSPOSTED = 1 << 0, diff --git a/packages/discord-types/src/general/messages/index.d.ts b/packages/discord-types/src/general/messages/index.d.ts index c7ecac990..2764190d6 100644 --- a/packages/discord-types/src/general/messages/index.d.ts +++ b/packages/discord-types/src/general/messages/index.d.ts @@ -5,6 +5,7 @@ */ export * from "./ChannelMessages"; +export * from "./InteractionRecord"; export * from "./MessageCache"; export * from "./MessageRecord"; export * from "./MessageSnapshotRecord"; diff --git a/packages/discord-types/src/internal.d.ts b/packages/discord-types/src/internal.d.ts index 6cc04fdda..e992901c6 100644 --- a/packages/discord-types/src/internal.d.ts +++ b/packages/discord-types/src/internal.d.ts @@ -14,9 +14,8 @@ type IsOptional = T extends Record ? False : True; /** @internal */ -export type MergeUnion>> - = Pick> - & Pick> +export type MergeUnion + = Pick> & Pick> & { [Key in keyof T & keyof U as IsOptional & IsOptional]: T[Key] | U[Key]; } & { [Key in keyof T & keyof U as IsOptional | IsOptional]?: T[Key] | U[Key]; }; diff --git a/packages/discord-types/src/stores/ChannelStore.d.ts b/packages/discord-types/src/stores/ChannelStore.d.ts index 0415521ee..ea49dcf43 100644 --- a/packages/discord-types/src/stores/ChannelStore.d.ts +++ b/packages/discord-types/src/stores/ChannelStore.d.ts @@ -17,19 +17,22 @@ export class ChannelStore extend static displayName: "ChannelStore"; getAllThreadsForParent(channelId: string): ThreadChannelRecord[]; - getBasicChannel(channelId?: string | Nullish): ChannelRecord | null; // TEMP + /** @todo May not return a ChannelRecord. */ + getBasicChannel(channelId?: string | Nullish): ChannelRecord | null; getChannel(channelId?: string | Nullish): ChannelRecord | undefined; getChannelIds(guildId?: string | Nullish): string[]; getDebugInfo(): { guildSizes: string[]; loadedGuildIds: string[]; - pendingGuildLoads: any[]; // TEMP + /** @todo */ + pendingGuildLoads: any[]; }; getDMFromUserId(userId?: string | Nullish): string | undefined; getDMUserIds(): string[]; getGuildChannelsVersion(guildId: string): number; getInitialOverlayState(): { [channelId: string]: ChannelRecord; }; - getMutableBasicGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; // TEMP + /** @todo The returned object may not have ChannelRecords. */ + getMutableBasicGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; getMutableDMsByUserIds(): { [userId: string]: string; }; getMutableGuildChannelsForGuild(guildId: string): { [channelId: string]: GuildChannelRecord; }; getMutablePrivateChannels(): { [channelId: string]: PrivateChannelRecord; }; diff --git a/packages/discord-types/src/stores/GuildChannelStore.d.ts b/packages/discord-types/src/stores/GuildChannelStore.d.ts index 2fa3ee260..337e405ea 100644 --- a/packages/discord-types/src/stores/GuildChannelStore.d.ts +++ b/packages/discord-types/src/stores/GuildChannelStore.d.ts @@ -57,6 +57,7 @@ export class GuildChannelStore[]; [GuildChannelType.SELECTABLE]: GuildChannel[]; [GuildChannelType.VOCAL]: GuildChannel[]; - id: string; // guildId + /** The ID of the guild. */ + id: string; } // Does not actually exist. diff --git a/packages/discord-types/src/stores/MessageStore.d.ts b/packages/discord-types/src/stores/MessageStore.d.ts index e2568b3c4..f15f01b23 100644 --- a/packages/discord-types/src/stores/MessageStore.d.ts +++ b/packages/discord-types/src/stores/MessageStore.d.ts @@ -5,6 +5,8 @@ */ import type { ExtractAction, FluxAction } from "../flux/fluxActions"; +import type { ChannelMessages } from "../general/messages/ChannelMessages"; +import type { MessageRecord } from "../general/messages/MessageRecord"; import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; @@ -13,19 +15,19 @@ export type MessageStoreAction = ExtractAction extends FluxStore { static displayName: "MessageStore"; - focusedMessageId(e?: any): any; // TEMP - getLastCommandMessage(e?: any): any; // TEMP - getLastEditableMessage(e?: any): any; // TEMP - getLastMessage(e?: any): any; // TEMP - getLastNonCurrentUserMessage(e?: any): any; // TEMP - getMessage(e?: any, t?: any): any; // TEMP - getMessages(guildId?: string | Nullish): any; // TEMP - hasCurrentUserSentMessage(e?: any): any; // TEMP - hasCurrentUserSentMessageSinceAppStart(): any; // TEMP - hasPresent(e?: any): any; // TEMP + focusedMessageId(channelId: string): string | undefined; + getLastCommandMessage(channelId: string): MessageRecord | undefined; + getLastEditableMessage(channelId: string): MessageRecord | undefined; + getLastMessage(channelId: string): MessageRecord | undefined; + getLastNonCurrentUserMessage(channelId: string): MessageRecord | undefined; + getMessage(channelId: string, messageId: string): MessageRecord | undefined; + getMessages(channelId: string): ChannelMessages; + hasCurrentUserSentMessage(channelId: string): boolean; + hasCurrentUserSentMessageSinceAppStart(): boolean; + hasPresent(channelId: string): boolean; initialize(): void; - isLoadingMessages(e?: any): any; // TEMP - isReady(e?: any): any; // TEMP - jumpedMessageId(e?: any): any; // TEMP - whenReady(e?: any, t?: any): any; // TEMP + isLoadingMessages(channelId: string): boolean; + isReady(channelId: string): boolean; + jumpedMessageId(channelId: string): string | Nullish; + whenReady(channelId: string, callback: () => void): void; } diff --git a/packages/discord-types/src/stores/PermissionStore.d.ts b/packages/discord-types/src/stores/PermissionStore.d.ts index 455142355..3882f6617 100644 --- a/packages/discord-types/src/stores/PermissionStore.d.ts +++ b/packages/discord-types/src/stores/PermissionStore.d.ts @@ -73,6 +73,7 @@ export class PermissionStore getGuildPermissions(guild: GuildRecord): /* Permissions */ bigint; getGuildVersion(guildId: string): number; getHighestRole(guild: GuildRecord): Role; + initialize(): void; isRoleHigher(guild: GuildRecord, roleA: Role, roleB: Role): boolean; } diff --git a/packages/discord-types/src/stores/PresenceStore.d.ts b/packages/discord-types/src/stores/PresenceStore.d.ts index 57440e571..03829e9eb 100644 --- a/packages/discord-types/src/stores/PresenceStore.d.ts +++ b/packages/discord-types/src/stores/PresenceStore.d.ts @@ -60,6 +60,7 @@ export class PresenceStore exte defaultStatus?: StatusType | undefined /* = StatusType.OFFLINE */ ): StatusType; getUserIds(): string[]; + initialize(): void; isMobileOnline(userId: string): boolean; setCurrentUserOnConnectionOpen(status: StatusType, activities: Activity[]): void; } diff --git a/packages/discord-types/src/stores/ReadStateStore.d.ts b/packages/discord-types/src/stores/ReadStateStore.d.ts index 9a7a435d4..3fc5608b5 100644 --- a/packages/discord-types/src/stores/ReadStateStore.d.ts +++ b/packages/discord-types/src/stores/ReadStateStore.d.ts @@ -48,6 +48,7 @@ export class ReadStateStore ex hasTrackedUnread(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; hasUnread(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; hasUnreadPins(channelId: string): boolean; + initialize(): void; isEstimated(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; isForumPostUnread(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): boolean; isNewForumThread(forumThreadId: string, forumId: string, guild?: GuildRecord | Nullish): boolean; diff --git a/packages/discord-types/src/stores/UserProfileStore.d.ts b/packages/discord-types/src/stores/UserProfileStore.d.ts index 5f9afad4d..0cfe0ecb5 100644 --- a/packages/discord-types/src/stores/UserProfileStore.d.ts +++ b/packages/discord-types/src/stores/UserProfileStore.d.ts @@ -31,7 +31,8 @@ export class UserProfileStore< getGuildMemberProfile(userId: string, guildId?: string | Nullish): GuildMemberProfile | Nullish; getIsAccessibilityTooltipViewed(): boolean; getMutualFriends(userId: string): { - key: string; // userId + /** The ID of the user. */ + key: string; status: StatusType; user: UserRecord; }[] | undefined; @@ -41,6 +42,7 @@ export class UserProfileStore< nick: string | null; }[] | undefined; getUserProfile(userId: string): UserProfile | undefined; + initialize(): void; isFetchingFriends(userId: string): boolean; isFetchingProfile(userId: string): boolean; get isSubmitting(): boolean; diff --git a/packages/discord-types/src/stores/UserStore.d.ts b/packages/discord-types/src/stores/UserStore.d.ts index efdbe4712..fd5161540 100644 --- a/packages/discord-types/src/stores/UserStore.d.ts +++ b/packages/discord-types/src/stores/UserStore.d.ts @@ -35,9 +35,13 @@ export class UserStore< getUsers(): { [userId: string]: UserRecord; }; getUserStoreVersion(): number; handleLoadCache(cache: { - initialGuildChannels: any[]; // TEMP - privateChannels: any[]; // TEMP - users: any[] | Nullish; // TEMP + /** @todo */ + initialGuildChannels: any[]; + /** @todo */ + privateChannels: any[]; + /** @todo */ + users: any[] | Nullish; }): void; + initialize(): void; takeSnapshot(): FluxSnapshot; } diff --git a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts index ca00b7944..f715763d8 100644 --- a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts @@ -28,7 +28,8 @@ export abstract class FluxSnapshotStore< static allStores: FluxSnapshotStore[]; static clearAll(): void; - static displayName: string; // abstract + /** Not present on FluxSnapshotStore's constructor. */ + static displayName: string; clear(): void; getClass(): Constructor; diff --git a/packages/discord-types/src/stores/abstract/FluxStore.d.ts b/packages/discord-types/src/stores/abstract/FluxStore.d.ts index 685ed31a0..82ae12a61 100644 --- a/packages/discord-types/src/stores/abstract/FluxStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxStore.d.ts @@ -18,7 +18,8 @@ export abstract class FluxStore { ); static destroy(): void; - static displayName: string | undefined; // undefined on FluxStore's constructor + /** Undefined on FluxStore's constructor. */ + static displayName: string | undefined; static getAll(): FluxStore[]; static initialize(): void; static initialized: Promise; diff --git a/packages/vencord-types/package.json b/packages/vencord-types/package.json index dd8b6952f..015bf498a 100644 --- a/packages/vencord-types/package.json +++ b/packages/vencord-types/package.json @@ -19,15 +19,15 @@ "@types/lodash": "~4.17.4", "@types/node": "^18.19.34", "@types/react": "~18.2.79", - "@types/react-dom": "~18.2.24", + "@types/react-dom": "~18.2.25", "@vencord/discord-types": "workspace:^", "discord-types": "^1.3.26", "standalone-electron-types": "^1.0.0", - "type-fest": "^4.19.0" + "type-fest": "^4.20.0" }, "devDependencies": { "@types/fs-extra": "^11.0.4", "fs-extra": "^11.2.0", - "tsx": "^4.13.0" + "tsx": "^4.13.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58f0bb931..a4b26b7aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,7 +60,7 @@ importers: specifier: ~18.2.79 version: 18.2.79 '@types/react-dom': - specifier: ~18.2.24 + specifier: ~18.2.25 version: 18.2.25 '@types/yazl': specifier: ^2.4.2 @@ -123,11 +123,11 @@ importers: specifier: ^3.1.2 version: 3.1.2 tsx: - specifier: ^4.13.0 - version: 4.13.0 + specifier: ^4.13.3 + version: 4.13.3 type-fest: - specifier: ^4.19.0 - version: 4.19.0 + specifier: ^4.20.0 + version: 4.20.0 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -156,8 +156,8 @@ importers: specifier: 2.22.2 version: 2.22.2 type-fest: - specifier: ^4.19.0 - version: 4.19.0 + specifier: ^4.20.0 + version: 4.20.0 devDependencies: '@eslint-types/unicorn': specifier: ^52.0.0 @@ -199,7 +199,7 @@ importers: specifier: ~18.2.79 version: 18.2.79 '@types/react-dom': - specifier: ~18.2.24 + specifier: ~18.2.25 version: 18.2.25 '@vencord/discord-types': specifier: workspace:^ @@ -211,8 +211,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 type-fest: - specifier: ^4.19.0 - version: 4.19.0 + specifier: ^4.20.0 + version: 4.20.0 devDependencies: '@types/fs-extra': specifier: ^11.0.4 @@ -221,8 +221,8 @@ importers: specifier: ^11.2.0 version: 11.2.0 tsx: - specifier: ^4.13.0 - version: 4.13.0 + specifier: ^4.13.3 + version: 4.13.3 packages: @@ -2667,8 +2667,8 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsx@4.13.0: - resolution: {integrity: sha512-kNY70P2aLMdVBii1Err5ENxDhQ6Vz2PbQGX68DcvzY2/PWK5NLBO6vI7lPr1/2xG3IKSt2MN+KOAyWDQSRlbCA==} + tsx@4.13.3: + resolution: {integrity: sha512-FTAJJLQCMiIbt78kD5qhLjHIR5NOQDKC63wcdelWRDBE+d1xSrXYhXq4DzejnC2tGhFZHpDy2Ika0Ugf7sK8gA==} engines: {node: '>=18.0.0'} hasBin: true @@ -2692,8 +2692,8 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@4.19.0: - resolution: {integrity: sha512-CN2l+hWACRiejlnr68vY0/7734Kzu+9+TOslUXbSCQ1ruY9XIHDBSceVXCcHm/oXrdzhtLMMdJEKfemf1yXiZQ==} + type-fest@4.20.0: + resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} engines: {node: '>=16'} typed-array-buffer@1.0.2: @@ -5508,7 +5508,7 @@ snapshots: tslib@2.6.2: {} - tsx@4.13.0: + tsx@4.13.3: dependencies: esbuild: 0.20.2 get-tsconfig: 4.7.5 @@ -5527,7 +5527,7 @@ snapshots: type-fest@0.8.1: {} - type-fest@4.19.0: {} + type-fest@4.20.0: {} typed-array-buffer@1.0.2: dependencies: From 2090f62412376c32a067acae290c8f356d9dda2f Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Fri, 14 Jun 2024 22:43:09 -0400 Subject: [PATCH 032/126] @vencord/discord-types 1.0.0 --- package.json | 25 +- packages/discord-types/eslint.config.mjs | 52 +- packages/discord-types/package.json | 14 +- ...ndlers.d.ts => FluxActionHandlersGraph.ts} | 62 +- .../discord-types/src/flux/FluxActionLog.ts | 31 + .../src/flux/FluxActionLogger.ts | 35 + ...{FluxDispatcher.d.ts => FluxDispatcher.ts} | 15 +- .../flux/{FluxEmitter.d.ts => FluxEmitter.ts} | 5 +- .../discord-types/src/flux/fluxActions.d.ts | 94 -- .../discord-types/src/flux/fluxActions.ts | 58 + .../src/flux/{index.d.ts => index.ts} | 4 +- .../general/{Activity.d.ts => Activity.ts} | 9 +- ...tionCommand.d.ts => ApplicationCommand.ts} | 6 +- ...cationRecord.d.ts => ApplicationRecord.ts} | 21 +- .../src/general/{Clan.d.ts => Clan.ts} | 6 +- .../{CompanyRecord.d.ts => CompanyRecord.ts} | 2 +- .../src/general/{Draft.d.ts => Draft.ts} | 2 +- .../general/{Frecency.d.ts => Frecency.ts} | 2 +- .../{GuildMember.d.ts => GuildMember.ts} | 2 +- ...mberProfile.d.ts => GuildMemberProfile.ts} | 0 .../{GuildRecord.d.ts => GuildRecord.ts} | 31 +- ...mmutableRecord.d.ts => ImmutableRecord.ts} | 2 +- .../{Permissions.d.ts => Permissions.ts} | 5 +- .../general/{ReadState.d.ts => ReadState.ts} | 8 +- .../src/general/{Role.d.ts => Role.ts} | 20 +- .../{UserProfile.d.ts => UserProfile.ts} | 2 +- .../{UserRecord.d.ts => UserRecord.ts} | 16 +- .../{ChannelRecord.d.ts => ChannelRecord.ts} | 39 +- ...annelRecord.d.ts => ForumChannelRecord.ts} | 6 +- ...cord.d.ts => GuildTextualChannelRecord.ts} | 12 +- ...Record.d.ts => GuildVocalChannelRecord.ts} | 6 +- ...nelRecord.d.ts => PrivateChannelRecord.ts} | 6 +- ...nnelRecord.d.ts => ThreadChannelRecord.ts} | 2 +- ...nelRecord.d.ts => UnknownChannelRecord.ts} | 2 +- .../general/channels/{index.d.ts => index.ts} | 0 .../general/emojis/{Emoji.d.ts => Emoji.ts} | 4 +- ...iguations.d.ts => EmojiDisambiguations.ts} | 2 +- .../{GuildEmojis.d.ts => GuildEmojis.ts} | 2 +- .../general/emojis/{index.d.ts => index.ts} | 0 .../src/general/{index.d.ts => index.ts} | 1 + ...hannelMessages.d.ts => ChannelMessages.ts} | 4 +- ...actionRecord.d.ts => InteractionRecord.ts} | 4 +- .../{MessageCache.d.ts => MessageCache.ts} | 2 +- .../{MessageRecord.d.ts => MessageRecord.ts} | 47 +- ...otRecord.d.ts => MessageSnapshotRecord.ts} | 2 +- ...ageRecord.d.ts => MinimalMessageRecord.ts} | 28 +- .../general/messages/{index.d.ts => index.ts} | 0 .../src/general/{misc.d.ts => misc.ts} | 0 .../src/{index.d.ts => index.ts} | 0 .../src/{internal.d.ts => internal.ts} | 5 + ...licationStore.d.ts => ApplicationStore.ts} | 4 +- .../{ChannelStore.d.ts => ChannelStore.ts} | 2 +- .../stores/{DraftStore.d.ts => DraftStore.ts} | 2 +- .../stores/{EmojiStore.d.ts => EmojiStore.ts} | 6 +- ...ChannelStore.d.ts => GuildChannelStore.ts} | 35 +- ...ldMemberStore.d.ts => GuildMemberStore.ts} | 4 +- .../stores/{GuildStore.d.ts => GuildStore.ts} | 2 +- .../{MessageStore.d.ts => MessageStore.ts} | 4 +- ...ermissionStore.d.ts => PermissionStore.ts} | 3 +- .../{PresenceStore.d.ts => PresenceStore.ts} | 9 +- ...{ReadStateStore.d.ts => ReadStateStore.ts} | 4 +- ...ionshipStore.d.ts => RelationshipStore.ts} | 5 +- ...nnelStore.d.ts => SelectedChannelStore.ts} | 2 +- ...dGuildStore.d.ts => SelectedGuildStore.ts} | 2 +- ...rProfileStore.d.ts => UserProfileStore.ts} | 2 +- .../stores/{UserStore.d.ts => UserStore.ts} | 4 +- .../{WindowStore.d.ts => WindowStore.ts} | 4 +- ...sistedStore.d.ts => FluxPersistedStore.ts} | 4 +- ...napshotStore.d.ts => FluxSnapshotStore.ts} | 4 +- .../abstract/{FluxStore.d.ts => FluxStore.ts} | 16 +- .../stores/abstract/{index.d.ts => index.ts} | 0 .../src/stores/{index.d.ts => index.ts} | 0 .../src/stores/{utils.d.ts => utils.ts} | 0 packages/discord-types/tsconfig.json | 2 + packages/vencord-types/package.json | 6 +- pnpm-lock.yaml | 1069 +++++++++-------- 76 files changed, 1017 insertions(+), 881 deletions(-) rename packages/discord-types/src/flux/{fluxActionHandlers.d.ts => FluxActionHandlersGraph.ts} (69%) create mode 100644 packages/discord-types/src/flux/FluxActionLog.ts create mode 100644 packages/discord-types/src/flux/FluxActionLogger.ts rename packages/discord-types/src/flux/{FluxDispatcher.d.ts => FluxDispatcher.ts} (81%) rename packages/discord-types/src/flux/{FluxEmitter.d.ts => FluxEmitter.ts} (83%) delete mode 100644 packages/discord-types/src/flux/fluxActions.d.ts create mode 100644 packages/discord-types/src/flux/fluxActions.ts rename packages/discord-types/src/flux/{index.d.ts => index.ts} (65%) rename packages/discord-types/src/general/{Activity.d.ts => Activity.ts} (92%) rename packages/discord-types/src/general/{ApplicationCommand.d.ts => ApplicationCommand.ts} (97%) rename packages/discord-types/src/general/{ApplicationRecord.d.ts => ApplicationRecord.ts} (93%) rename packages/discord-types/src/general/{Clan.d.ts => Clan.ts} (92%) rename packages/discord-types/src/general/{CompanyRecord.d.ts => CompanyRecord.ts} (94%) rename packages/discord-types/src/general/{Draft.d.ts => Draft.ts} (97%) rename packages/discord-types/src/general/{Frecency.d.ts => Frecency.ts} (95%) rename packages/discord-types/src/general/{GuildMember.d.ts => GuildMember.ts} (97%) rename packages/discord-types/src/general/{GuildMemberProfile.d.ts => GuildMemberProfile.ts} (100%) rename packages/discord-types/src/general/{GuildRecord.d.ts => GuildRecord.ts} (94%) rename packages/discord-types/src/general/{ImmutableRecord.d.ts => ImmutableRecord.ts} (90%) rename packages/discord-types/src/general/{Permissions.d.ts => Permissions.ts} (95%) rename packages/discord-types/src/general/{ReadState.d.ts => ReadState.ts} (98%) rename packages/discord-types/src/general/{Role.d.ts => Role.ts} (65%) rename packages/discord-types/src/general/{UserProfile.d.ts => UserProfile.ts} (99%) rename packages/discord-types/src/general/{UserRecord.d.ts => UserRecord.ts} (92%) rename packages/discord-types/src/general/channels/{ChannelRecord.d.ts => ChannelRecord.ts} (91%) rename packages/discord-types/src/general/channels/{ForumChannelRecord.d.ts => ForumChannelRecord.ts} (91%) rename packages/discord-types/src/general/channels/{GuildTextualChannelRecord.d.ts => GuildTextualChannelRecord.ts} (85%) rename packages/discord-types/src/general/channels/{GuildVocalChannelRecord.d.ts => GuildVocalChannelRecord.ts} (90%) rename packages/discord-types/src/general/channels/{PrivateChannelRecord.d.ts => PrivateChannelRecord.ts} (92%) rename packages/discord-types/src/general/channels/{ThreadChannelRecord.d.ts => ThreadChannelRecord.ts} (94%) rename packages/discord-types/src/general/channels/{UnknownChannelRecord.d.ts => UnknownChannelRecord.ts} (97%) rename packages/discord-types/src/general/channels/{index.d.ts => index.ts} (100%) rename packages/discord-types/src/general/emojis/{Emoji.d.ts => Emoji.ts} (97%) rename packages/discord-types/src/general/emojis/{EmojiDisambiguations.d.ts => EmojiDisambiguations.ts} (98%) rename packages/discord-types/src/general/emojis/{GuildEmojis.d.ts => GuildEmojis.ts} (96%) rename packages/discord-types/src/general/emojis/{index.d.ts => index.ts} (100%) rename packages/discord-types/src/general/{index.d.ts => index.ts} (95%) rename packages/discord-types/src/general/messages/{ChannelMessages.d.ts => ChannelMessages.ts} (99%) rename packages/discord-types/src/general/messages/{InteractionRecord.d.ts => InteractionRecord.ts} (94%) rename packages/discord-types/src/general/messages/{MessageCache.d.ts => MessageCache.ts} (96%) rename packages/discord-types/src/general/messages/{MessageRecord.d.ts => MessageRecord.ts} (93%) rename packages/discord-types/src/general/messages/{MessageSnapshotRecord.d.ts => MessageSnapshotRecord.ts} (95%) rename packages/discord-types/src/general/messages/{MinimalMessageRecord.d.ts => MinimalMessageRecord.ts} (96%) rename packages/discord-types/src/general/messages/{index.d.ts => index.ts} (100%) rename packages/discord-types/src/general/{misc.d.ts => misc.ts} (100%) rename packages/discord-types/src/{index.d.ts => index.ts} (100%) rename packages/discord-types/src/{internal.d.ts => internal.ts} (84%) rename packages/discord-types/src/stores/{ApplicationStore.d.ts => ApplicationStore.ts} (79%) rename packages/discord-types/src/stores/{ChannelStore.d.ts => ChannelStore.ts} (95%) rename packages/discord-types/src/stores/{DraftStore.d.ts => DraftStore.ts} (98%) rename packages/discord-types/src/stores/{EmojiStore.d.ts => EmojiStore.ts} (97%) rename packages/discord-types/src/stores/{GuildChannelStore.d.ts => GuildChannelStore.ts} (74%) rename packages/discord-types/src/stores/{GuildMemberStore.d.ts => GuildMemberStore.ts} (86%) rename packages/discord-types/src/stores/{GuildStore.d.ts => GuildStore.ts} (92%) rename packages/discord-types/src/stores/{MessageStore.d.ts => MessageStore.ts} (85%) rename packages/discord-types/src/stores/{PermissionStore.d.ts => PermissionStore.ts} (95%) rename packages/discord-types/src/stores/{PresenceStore.d.ts => PresenceStore.ts} (91%) rename packages/discord-types/src/stores/{ReadStateStore.d.ts => ReadStateStore.ts} (95%) rename packages/discord-types/src/stores/{RelationshipStore.d.ts => RelationshipStore.ts} (85%) rename packages/discord-types/src/stores/{SelectedChannelStore.d.ts => SelectedChannelStore.ts} (90%) rename packages/discord-types/src/stores/{SelectedGuildStore.d.ts => SelectedGuildStore.ts} (96%) rename packages/discord-types/src/stores/{UserProfileStore.d.ts => UserProfileStore.ts} (98%) rename packages/discord-types/src/stores/{UserStore.d.ts => UserStore.ts} (85%) rename packages/discord-types/src/stores/{WindowStore.d.ts => WindowStore.ts} (80%) rename packages/discord-types/src/stores/abstract/{FluxPersistedStore.d.ts => FluxPersistedStore.ts} (96%) rename packages/discord-types/src/stores/abstract/{FluxSnapshotStore.d.ts => FluxSnapshotStore.ts} (90%) rename packages/discord-types/src/stores/abstract/{FluxStore.d.ts => FluxStore.ts} (79%) rename packages/discord-types/src/stores/abstract/{index.d.ts => index.ts} (100%) rename packages/discord-types/src/stores/{index.d.ts => index.ts} (100%) rename packages/discord-types/src/stores/{utils.d.ts => utils.ts} (100%) diff --git a/package.json b/package.json index 8504026a0..bfda119fd 100644 --- a/package.json +++ b/package.json @@ -49,38 +49,39 @@ }, "devDependencies": { "@types/chrome": "^0.0.246", - "@types/diff": "^5.0.3", - "@types/lodash": "~4.17.4", + "@types/diff": "^5.2.1", + "@types/html-minifier-terser": "^7.0.2", + "@types/lodash": "~4.17.5", "@types/node": "^18.19.34", "@types/react": "~18.2.79", "@types/react-dom": "~18.2.25", - "@types/yazl": "^2.4.2", - "@typescript-eslint/eslint-plugin": "^7.12.0", - "@typescript-eslint/parser": "^7.12.0", + "@types/yazl": "^2.4.5", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", "@vencord/discord-types": "workspace:^", - "diff": "^5.1.0", - "discord-types": "^1.3.26", + "diff": "^5.2.0", + "discord-types": "^1.3.3", "esbuild": "^0.15.18", "eslint": "^8.57.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-path-alias": "^1.1.0", "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-unused-imports": "^3.2.0", - "highlight.js": "11.7.0", + "highlight.js": "11.8.0", "html-minifier-terser": "^7.2.0", "moment": "2.22.2", "puppeteer-core": "^19.11.1", "standalone-electron-types": "^1.0.0", - "stylelint": "^15.6.0", + "stylelint": "^15.11.0", "stylelint-config-standard": "^33.0.0", - "ts-patch": "^3.1.2", - "tsx": "^4.13.3", + "ts-patch": "^3.2.0", + "tsx": "^4.15.4", "type-fest": "^4.20.0", "typescript": "^5.4.5", "typescript-transform-paths": "^3.4.7", "zip-local": "^0.3.5" }, - "packageManager": "pnpm@9.2.0", + "packageManager": "pnpm@9.3.0", "pnpm": { "patchedDependencies": { "eslint-plugin-path-alias@1.1.0": "patches/eslint-plugin-path-alias@1.1.0.patch", diff --git a/packages/discord-types/eslint.config.mjs b/packages/discord-types/eslint.config.mjs index 820c196b6..93f3338de 100644 --- a/packages/discord-types/eslint.config.mjs +++ b/packages/discord-types/eslint.config.mjs @@ -1,13 +1,15 @@ import stylistic from "@stylistic/eslint-plugin"; +import checkFile from "eslint-plugin-check-file"; import eslintPluginHeaders from "eslint-plugin-headers"; import eslintPluginImport from "eslint-plugin-import-x"; import simpleImportSort from "eslint-plugin-simple-import-sort"; import eslintPluginUnicorn from "eslint-plugin-unicorn"; +import unusedImports from "eslint-plugin-unused-imports"; import tseslint from "typescript-eslint"; export default tseslint.config( { - files: ["**/*.mjs", "**/*.ts"], + files: ["**/*.?(c|m)[jt]s?(x)"], languageOptions: { parser: tseslint.parser, parserOptions: { @@ -19,10 +21,12 @@ export default tseslint.config( plugins: { "@stylistic": stylistic, "@typescript-eslint": tseslint.plugin, + "check-file": checkFile, headers: eslintPluginHeaders, import: eslintPluginImport, "simple-import-sort": simpleImportSort, unicorn: eslintPluginUnicorn, + "unused-imports": unusedImports, }, rules: { "@stylistic/array-bracket-newline": ["error", "consistent"], @@ -49,7 +53,7 @@ export default tseslint.config( "@stylistic/no-extra-semi": "error", "@stylistic/no-floating-decimal": "error", "@stylistic/no-multi-spaces": "error", - "@stylistic/no-multiple-empty-lines": ["error", { max: 2, maxBOF: 0, maxEOF: 0 }], + "@stylistic/no-multiple-empty-lines": ["error", { max: 1, maxBOF: 0, maxEOF: 0 }], "@stylistic/no-trailing-spaces": "error", "@stylistic/no-whitespace-before-property": "error", "@stylistic/object-curly-newline": "error", @@ -94,7 +98,10 @@ export default tseslint.config( } }], "@typescript-eslint/method-signature-style": "error", - "@typescript-eslint/naming-convention": ["error", { selector: "typeLike", format: ["PascalCase"] }], + "@typescript-eslint/naming-convention": ["error", { + selector: "typeLike", + format: ["PascalCase"] + }], "@typescript-eslint/no-duplicate-enum-values": "error", "@typescript-eslint/no-duplicate-type-constituents": "error", "@typescript-eslint/no-empty-interface": "error", @@ -107,23 +114,19 @@ export default tseslint.config( "@typescript-eslint/no-unnecessary-type-arguments": "error", "@typescript-eslint/no-unnecessary-type-constraint": "error", "@typescript-eslint/no-unsafe-declaration-merging": "error", - "@typescript-eslint/no-unused-vars": ["error", { - args: "all", - argsIgnorePattern: "^_", - destructuredArrayIgnorePattern: "^_", - varsIgnorePattern: "^_" - }], "@typescript-eslint/no-useless-empty-export": "error", "@typescript-eslint/prefer-function-type": "error", "@typescript-eslint/triple-slash-reference": "error", "@typescript-eslint/unified-signatures": ["error", { ignoreDifferentlyNamedParameters: true }], + "check-file/filename-naming-convention": ["error", { "**/*.{mjs,ts}": "+([.0-9A-Za-z])" }], + "check-file/folder-naming-convention": ["error", { "**/": "CAMEL_CASE" }], "import/extensions": "error", "import/first": "error", "import/newline-after-import": ["error", { considerComments: true }], "import/no-absolute-path": "error", "import/no-duplicates": "error", "import/no-empty-named-blocks": "error", - "import/no-extraneous-dependencies": "error", + "import/no-extraneous-dependencies": ["error", { includeTypes: true }], "import/no-relative-packages": "error", "import/no-self-import": "error", "import/no-unassigned-import": "error", @@ -131,18 +134,25 @@ export default tseslint.config( "simple-import-sort/exports": "error", "simple-import-sort/imports": ["error", { groups: [["^[^.]"]] }], "unicorn/escape-case": "error", - "unicorn/filename-case": ["error", { cases: { camelCase: true, pascalCase: true } }], "unicorn/no-hex-escape": "error", "unicorn/no-zero-fractions": "error", "unicorn/number-literal-case": "error", "unicorn/numeric-separators-style": ["error", { number: { minimumDigits: 0 } }], "unicorn/prefer-export-from": ["error", { ignoreUsedVariables: true }], + "unused-imports/no-unused-imports": "error", + "unused-imports/no-unused-vars": ["error", { + args: "all", + argsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_" + }], } }, { - files: ["src/**/*.ts"], + files: ["src/**/*"], rules: { "@typescript-eslint/prefer-enum-initializers": "error", + "check-file/filename-blocklist": ["error", { "!**/!(*.d).ts": "!(*.d).ts" }], "headers/header-format": ["error", { source: "string", content: [ @@ -158,13 +168,25 @@ export default tseslint.config( } }], "import/no-default-export": "error", - "import/no-unused-modules": "error", + "import/no-extraneous-dependencies": ["error", { + devDependencies: false, + includeTypes: true + }], + "import/no-unassigned-import": "error", "no-restricted-globals": ["error", "_", "JSX", "React"], "no-restricted-syntax": [ "error", - "ImportDeclaration[importKind=value]", - "TSEnumDeclaration[const=false]", + ":expression:not([declare=true] *, [type=/^TS/] *, ExportAllDeclaration *, ImportDeclaration *)", + "ObjectPattern.params", + "TSEnumDeclaration:matches([const=true], [declare=true])", ], } }, + { + // https://github.com/import-js/eslint-plugin-import/issues/2414 + files: ["src/**/!(index.ts)"], + rules: { + "import/no-unused-modules": ["error", { missingExports: true }], + } + }, ); diff --git a/packages/discord-types/package.json b/packages/discord-types/package.json index 2acc52bd1..5009f9ff7 100644 --- a/packages/discord-types/package.json +++ b/packages/discord-types/package.json @@ -1,6 +1,6 @@ { "name": "@vencord/discord-types", - "version": "0.0.0-development", + "version": "1.0.0", "description": "", "license": "GPL-3.0-or-later", "author": "Vencord", @@ -9,6 +9,7 @@ "url": "https://github.com/Vendicated/Vencord.git", "directory": "packages/discord-types" }, + "main": "./src/index.ts", "files": ["src"], "scripts": { "lint": "eslint .", @@ -17,10 +18,9 @@ "test-ts": "tsc --noEmit" }, "sideEffects": false, - "types": "./src/index.d.ts", "dependencies": { "@types/events": "~3.0.3", - "@types/lodash": "~4.17.4", + "@types/lodash": "~4.17.5", "@types/react": "~18.2.79", "dependency-graph": "0.9.0", "moment": "2.22.2", @@ -29,12 +29,14 @@ "devDependencies": { "@eslint-types/unicorn": "^52.0.0", "@stylistic/eslint-plugin": "^2.1.0", - "eslint": "^9.4.0", + "eslint": "^9.5.0", + "eslint-plugin-check-file": "^2.8.0", "eslint-plugin-headers": "^1.1.2", "eslint-plugin-import-x": "^0.5.1", "eslint-plugin-simple-import-sort": "^12.1.0", - "eslint-plugin-unicorn": "^53.0.0", + "eslint-plugin-unicorn": "^54.0.0", + "eslint-plugin-unused-imports": "^4.0.0", "typescript": "^5.4.5", - "typescript-eslint": "^8.0.0-alpha.28" + "typescript-eslint": "^8.0.0-alpha.30" } } diff --git a/packages/discord-types/src/flux/fluxActionHandlers.d.ts b/packages/discord-types/src/flux/FluxActionHandlersGraph.ts similarity index 69% rename from packages/discord-types/src/flux/fluxActionHandlers.d.ts rename to packages/discord-types/src/flux/FluxActionHandlersGraph.ts index 20d6de8e3..7ba2a4a40 100644 --- a/packages/discord-types/src/flux/fluxActionHandlers.d.ts +++ b/packages/discord-types/src/flux/FluxActionHandlersGraph.ts @@ -5,41 +5,14 @@ */ import type { DepGraph } from "dependency-graph"; +import type { UnionToIntersection } from "type-fest"; import type { Nullish } from "../internal"; -import type { ExtractAction, FluxAction, FluxActionType } from "./fluxActions"; +import type { ExtractAction, FluxAction, FluxActionHandler, FluxActionType } from "./fluxActions"; import type { FluxDispatchBand } from "./FluxDispatcher"; -/* -export type FluxActionHandler = Action extends FluxAction - ? Exclude, "type"> extends never - ? (action: any) => Return - : (action: Action) => Return - : never; -*/ - -export type FluxActionHandler = (action: Action) => void; - -export type FluxActionHandlerMap - = { [ActionType in Action["type"]]: FluxActionHandler>; }; - -interface FluxActionHandlersGraphNode { - actionHandler: FluxActionHandlerMap; - band: FluxDispatchBand; - /** Name of a store. */ - name: string; - storeDidChange: FluxActionHandler; -} - -type FluxOrderedActionHandlers = { - actionHandler: FluxActionHandler; - /** Name of a store. */ - name: string; - storeDidChange: FluxActionHandler; -}[]; - // Original name: ActionHandlersGraph -export class FluxActionHandlersGraph { +export declare class FluxActionHandlersGraph { _addToBand(dispatchToken: string, dispatchBand: FluxDispatchBand): void; _bandToken(dispatchBand: FluxDispatchBand): string; _computeOrderedActionHandlers( @@ -50,7 +23,7 @@ export class FluxActionHandlersGraph { _validateDependencies(fromDispatchToken: string, toDispatchToken: string): void; addDependencies(fromDispatchToken: string, toDispatchTokens: string[]): void; createToken(): string; - getOrderedActionHandlers({ type }: { + getOrderedActionHandlers(partialAction: { type: ActionType; }): FluxOrderedActionHandlers>; register( @@ -58,7 +31,7 @@ export class FluxActionHandlersGraph { actionHandlers: FluxActionHandlerMap, storeDidChange: FluxActionHandler, dispatchBand: FluxDispatchBand, - dispatchToken?: string | undefined + dispatchToken?: string | undefined /* = this.createToken() */ ): string; _dependencyGraph: DepGraph; @@ -68,3 +41,28 @@ export class FluxActionHandlersGraph { }; _orderedCallbackTokens: string[] | Nullish; } + +export interface FluxActionHandlersGraphNode { + actionHandler: Partial; + band: FluxDispatchBand; + /** Name of a store. */ + name: string; + storeDidChange: FluxActionHandler; +} + +export type FluxActionHandlerMap + // Workaround to avoid ts(2589) + = UnionToIntersection< + Action extends unknown + ? { type: never; } extends Action + ? { [ActionType in Action["type"]]: (action: any) => void; } + : { [ActionType in Action["type"]]: (action: { type: ActionType; } & Omit) => void; } + : never + >; + +export type FluxOrderedActionHandlers = { + actionHandler: FluxActionHandler; + /** Name of a store. */ + name: string; + storeDidChange: FluxActionHandler; +}[]; diff --git a/packages/discord-types/src/flux/FluxActionLog.ts b/packages/discord-types/src/flux/FluxActionLog.ts new file mode 100644 index 000000000..ee1b384d3 --- /dev/null +++ b/packages/discord-types/src/flux/FluxActionLog.ts @@ -0,0 +1,31 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { FluxAction } from "./fluxActions"; + +// Original name: ActionLog +export declare class FluxActionLog { + constructor(actionType: Action["type"]); + + get name(): Action["type"]; + toJSON(): Pick & { + created_at: FluxActionLog["createdAt"]; + }; + + action: Action; + createdAt: Date; + error: Error | undefined; + id: number; + startTime: number; + totalTime: number; + traces: FluxActionLogTrace[]; +} + +export interface FluxActionLogTrace { + /** Name of a store. */ + name: string; + time: number; +} diff --git a/packages/discord-types/src/flux/FluxActionLogger.ts b/packages/discord-types/src/flux/FluxActionLogger.ts new file mode 100644 index 000000000..42ea13f05 --- /dev/null +++ b/packages/discord-types/src/flux/FluxActionLogger.ts @@ -0,0 +1,35 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { EventEmitter } from "events"; + +import type { Nullish } from "../internal"; +import type { FluxActionLog } from "./FluxActionLog"; +import type { FluxAction, FluxActionType } from "./fluxActions"; + +// Original name: ActionLogger +export declare class FluxActionLogger extends EventEmitter { + constructor(options?: { persist?: boolean | undefined; } | undefined); + + getLastActionMetrics( + title: string, + limit?: number | undefined /* = 20 */ + ): FluxActionMetric[]; + getSlowestActions( + actionType?: ActionType | Nullish, + limit?: number | undefined /* = 20 */ + ): FluxActionMetric[]; + log( + action: Action, + callback: (func: (storeName: string, func: () => T) => T) => void + ): FluxActionLog; + + logs: FluxActionLog[]; + persist: boolean; +} + +export type FluxActionMetric + = [storeName: string, actionType: ActionType, totalTime: number]; diff --git a/packages/discord-types/src/flux/FluxDispatcher.d.ts b/packages/discord-types/src/flux/FluxDispatcher.ts similarity index 81% rename from packages/discord-types/src/flux/FluxDispatcher.d.ts rename to packages/discord-types/src/flux/FluxDispatcher.ts index c903d404c..40a2702ea 100644 --- a/packages/discord-types/src/flux/FluxDispatcher.d.ts +++ b/packages/discord-types/src/flux/FluxDispatcher.ts @@ -5,11 +5,12 @@ */ import type { Nullish } from "../internal"; -import type { FluxActionHandler, FluxActionHandlerMap, FluxActionHandlersGraph } from "./fluxActionHandlers"; -import type { ExtractAction, FluxAction, FluxActionLogger, FluxActionType } from "./fluxActions"; +import type { FluxActionHandlerMap, FluxActionHandlersGraph } from "./FluxActionHandlersGraph"; +import type { FluxActionLogger } from "./FluxActionLogger"; +import type { ExtractAction, FluxAction, FluxActionHandler, FluxActionType } from "./fluxActions"; // Original name: Dispatcher -export class FluxDispatcher { +export declare class FluxDispatcher { constructor( defaultBand?: FluxDispatchBand | undefined /* = FluxDispatchBand.EARLY */, actionLogger?: FluxActionLogger | Nullish, @@ -32,8 +33,8 @@ export class FluxDispatcher { storeName: string, actionHandlers: FluxActionHandlerMap, storeDidChange: FluxActionHandler, - dispatchBand?: FluxDispatchBand | Nullish, - dispatchToken?: string | undefined + dispatchBand?: FluxDispatchBand | Nullish, /* = this._defaultBand */ + dispatchToken?: string | undefined /* = this._actionHandlers.createToken() */ ): string; subscribe( actionType: ActionType, @@ -56,12 +57,12 @@ export class FluxDispatcher { }; _waitQueue: (() => void)[]; actionLogger: FluxActionLogger; - functionCache: FluxActionHandlerMap; + functionCache: Partial; } // Original name: DispatchBand // Enum keys made screaming snake case for consistency. -export const enum FluxDispatchBand { +export enum FluxDispatchBand { EARLY = 0, DATABASE = 1, DEFAULT = 2, diff --git a/packages/discord-types/src/flux/FluxEmitter.d.ts b/packages/discord-types/src/flux/FluxEmitter.ts similarity index 83% rename from packages/discord-types/src/flux/FluxEmitter.d.ts rename to packages/discord-types/src/flux/FluxEmitter.ts index 6b81e293b..0b8984260 100644 --- a/packages/discord-types/src/flux/FluxEmitter.d.ts +++ b/packages/discord-types/src/flux/FluxEmitter.ts @@ -7,7 +7,7 @@ import type { FluxStore, FluxSyncWithFunction } from "../stores/abstract/FluxStore"; // Original name: Emitter -export class FluxEmitter { +export declare class FluxEmitter { batched(callback: () => T): T; destroy(): void; emit(): void; @@ -17,8 +17,9 @@ export class FluxEmitter { getIsPaused(): boolean; injectBatchEmitChanges(batchEmitChanges: () => unknown): void; markChanged(store: FluxStore): void; + /** If timeout is omitted, Emitter will pause until resume is called. */ pause(timeout?: number | undefined): void; - resume(shouldEmit?: boolean | undefined): void; + resume(shouldEmit?: boolean | undefined /* = true */): void; changedStores: Set; changeSentinel: number; diff --git a/packages/discord-types/src/flux/fluxActions.d.ts b/packages/discord-types/src/flux/fluxActions.d.ts deleted file mode 100644 index 221e0af51..000000000 --- a/packages/discord-types/src/flux/fluxActions.d.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* - * discord-types - * Copyright (C) 2024 Vencord project contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import type { EventEmitter } from "events"; - -import type { Nullish } from "../internal"; - -type FluxGenericAction = ActionType extends unknown - ? { type: ActionType; } - : never; - -export type FluxAction = FluxGenericAction; - -export type ExcludeAction - = Action extends unknown - ? Action["type"] extends ActionType - ? never - : Action - : never; - -export type ExtractAction - = Action extends unknown - ? Action["type"] extends ActionType - ? Action - : never - : never; - -// Original name: ActionLogger -export class FluxActionLogger extends EventEmitter { - constructor(options?: { persist?: boolean | undefined; } | undefined); - - getLastActionMetrics( - title: string, - limit?: number | undefined /* = 20 */ - ): FluxActionMetric[]; - getSlowestActions( - actionType?: ActionType | Nullish, - limit?: number | undefined /* = 20 */ - ): FluxActionMetric[]; - log( - action: Action, - callback: (func: (storeName: string, func: () => T) => T) => void - ): FluxActionLog; - - logs: FluxActionLog[]; - persist: boolean; -} - -export type FluxActionMetric - = [storeName: string, actionType: ActionType, totalTime: number]; - -// Original name: ActionLog -export class FluxActionLog { - constructor(actionType: Action["type"]); - - get name(): Action["type"]; - toJSON(): Pick & { - created_at: FluxActionLog["createdAt"]; - }; - - action: Action; - createdAt: Date; - error: Error | undefined; - id: number; - startTime: number; - totalTime: number; - traces: { - name: string; - time: number; - }[]; -} - -/* -function generateFluxActionType() { - const actionTypes = new Set(); - - const { FluxDispatcher } = Vencord.Webpack.Common; - for (const actionType in FluxDispatcher._subscriptions) - actionTypes.add(actionType); - for (const actionType in FluxDispatcher._actionHandlers._orderedActionHandlers) - actionTypes.add(actionType); - const { nodes } = FluxDispatcher._actionHandlers._dependencyGraph; - for (const dispatchToken in nodes) - for (const actionType in nodes[dispatchToken].actionHandler) - actionTypes.add(actionType); - - return `"${[...actionTypes].sort().join('" | "')}"`; -} -*/ - -export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_HIDE_TAGS" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "ADYEN_CREATE_CASH_APP_PAY_COMPONENT_SUCCESS" | "ADYEN_CREATE_CLIENT_SUCCESS" | "ADYEN_TEARDOWN_CLIENT" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTHENTICATOR_CREATE" | "AUTHENTICATOR_DELETE" | "AUTHENTICATOR_UPDATE" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCASTER_BUCKETS_RECEIVED" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_START" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECKING_FOR_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CLAN_SETTINGS_FETCH_START" | "CLAN_SETTINGS_FETCH_SUCCESS" | "CLAN_SETTINGS_SUBMIT" | "CLAN_SETTINGS_SUBMIT_ERROR" | "CLAN_SETTINGS_SUBMIT_SUCCESS" | "CLAN_SETTINGS_UPDATE" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_DEBUG_CLEAR_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_LOG_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_TOGGLE_FAST_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_INBOX_STALE" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FEED_STATE" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TRACK_ITEM_IMPRESSIONS" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETED_ENTITY_IDS" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISCOVER_GUILDS_FETCH_FAILURE" | "DISCOVER_GUILDS_FETCH_START" | "DISCOVER_GUILDS_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_DELETE" | "EMOJI_FETCH_FAILURE" | "EMOJI_FETCH_SUCCESS" | "EMOJI_INTERACTION_INITIATED" | "EMOJI_TRACK_USAGE" | "EMOJI_UPLOAD_START" | "EMOJI_UPLOAD_STOP" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_AUTH_SESSIONS_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_FAILURE" | "FETCH_STATIC_CLAN_LIST_START" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCHABLE_UPDATE" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GUILD_ACK" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_SUCCESS" | "GUILD_ANALYTICS_MEMBER_INSIGHTS_FETCH_SUCCESS" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_FAIL" | "GUILD_HOME_SETTINGS_UPDATE_START" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTIONS_CONFIGURATIONS_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_START" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_RESET" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_FAILED" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SUBMIT" | "GUILD_SETTINGS_DEFAULT_CHANNELS_TOGGLE" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_ADD_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_ADD_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_DELETE_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_DELETE_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_DISMISS_RESOURCE_CHANNEL_SUGGESTION" | "GUILD_SETTINGS_ONBOARDING_EDUCATION_UPSELL_DISMISSED" | "GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_EDIT" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_ERRORS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_FAILED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SUBMIT" | "GUILD_SETTINGS_ONBOARDING_REORDER_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_REORDER_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_ONBOARDING_STEP" | "GUILD_SETTINGS_ONBOARDING_UPDATE_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_UPDATE_NEW_MEMBER_ACTION_ICON_DATA" | "GUILD_SETTINGS_ONBOARDING_UPDATE_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_UPDATE_WELCOME_MESSAGE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS" | "GUILD_SETTINGS_ROLES_EDIT_SECTION_UPDATE" | "GUILD_SETTINGS_ROLES_INIT" | "GUILD_SETTINGS_ROLES_SAVE_FAIL" | "GUILD_SETTINGS_ROLES_SAVE_SUCCESS" | "GUILD_SETTINGS_ROLES_SORT_UPDATE" | "GUILD_SETTINGS_ROLES_SUBMITTING" | "GUILD_SETTINGS_ROLES_UPDATE_COLOR" | "GUILD_SETTINGS_ROLES_UPDATE_DESCRIPTION" | "GUILD_SETTINGS_ROLES_UPDATE_NAME" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSION_SET" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_CONNECTION_CONFIGURATIONS" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_ICON" | "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_SAFETY_PAGE" | "GUILD_SETTINGS_SAFETY_SET_SUBSECTION" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SETTINGS_VANITY_URL_CLOSE" | "GUILD_SETTINGS_VANITY_URL_ERROR" | "GUILD_SETTINGS_VANITY_URL_RESET" | "GUILD_SETTINGS_VANITY_URL_SET" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_TOP_READ_CHANNELS_FETCH_SUCCESS" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_PERMISSION_SETTINGS_APPLICATION_PERMISSIONS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_CLEAR" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_COMMAND_UPDATE" | "INTEGRATION_PERMISSION_SETTINGS_EDIT" | "INTEGRATION_PERMISSION_SETTINGS_INIT" | "INTEGRATION_PERMISSION_SETTINGS_RESET" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_COMMAND" | "INTEGRATION_SETTINGS_START_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_COMMAND" | "INTEGRATION_SETTINGS_STOP_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_INTEGRATION" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "INVITE_SUGGESTIONS_SEARCH" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_INVITE_SUGGESTIONS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGES_LOADED" | "LOCAL_MESSAGE_CREATE" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "LOGOUT_AUTH_SESSIONS_SUCCESS" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REQUEST_ACK" | "MESSAGE_REQUEST_CLEAR_ACK" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MFA_CLEAR_BACKUP_CODES" | "MFA_DISABLE_SUCCESS" | "MFA_ENABLE_EMAIL_TOKEN" | "MFA_ENABLE_SUCCESS" | "MFA_SEEN_BACKUP_CODE_PROMPT" | "MFA_SEND_VERIFICATION_KEY" | "MFA_SMS_TOGGLE" | "MFA_SMS_TOGGLE_COMPLETE" | "MFA_VIEW_BACKUP_CODES" | "MFA_WEBAUTHN_CREDENTIALS_LOADED" | "MFA_WEBAUTHN_CREDENTIALS_LOADING" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MODAL_POP" | "MODAL_PUSH" | "MOD_VIEW_SEARCH_FINISH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTIONS_SEEN" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V2" | "PASSWORDLESS_FAILURE" | "PASSWORDLESS_START" | "PASSWORD_UPDATED" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCES_REPLACE" | "PRESENCE_UPDATES" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DELIVERY_OVERRIDE" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUESTS_USER_STATUS_UPDATE" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_CLIENT_DISCONNECT" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_DEBUG_SET_SIMULCAST_OVERRIDE" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAMES_CHANGE" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAFETY_HUB_APPEAL_CLOSE" | "SAFETY_HUB_APPEAL_OPEN" | "SAFETY_HUB_APPEAL_SIGNAL_CUSTOM_INPUT_CHANGE" | "SAFETY_HUB_APPEAL_SIGNAL_SELECT" | "SAFETY_HUB_FETCH_CLASSIFICATION_FAILURE" | "SAFETY_HUB_FETCH_CLASSIFICATION_START" | "SAFETY_HUB_FETCH_CLASSIFICATION_SUCCESS" | "SAFETY_HUB_FETCH_FAILURE" | "SAFETY_HUB_FETCH_START" | "SAFETY_HUB_FETCH_SUCCESS" | "SAFETY_HUB_REQUEST_REVIEW_FAILURE" | "SAFETY_HUB_REQUEST_REVIEW_START" | "SAFETY_HUB_REQUEST_REVIEW_SUCCESS" | "SAVED_MESSAGES_UPDATE" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKUS_FETCH_SUCCESS" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPEED_TEST_CREATE" | "SPEED_TEST_DELETE" | "SPEED_TEST_SERVER_UPDATE" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTINGS_FETCH_SUCCESS" | "STORE_LISTING_FETCH_SUCCESS" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBERS_UPDATE" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRACK" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR" | "USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOADED" | "USER_NOTE_LOAD_START" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SETTINGS_CLEAR" | "WELCOME_SCREEN_SETTINGS_RESET" | "WELCOME_SCREEN_SETTINGS_UPDATE" | "WELCOME_SCREEN_SUBMIT" | "WELCOME_SCREEN_SUBMIT_FAILURE" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/packages/discord-types/src/flux/fluxActions.ts b/packages/discord-types/src/flux/fluxActions.ts new file mode 100644 index 000000000..dddf4ab80 --- /dev/null +++ b/packages/discord-types/src/flux/fluxActions.ts @@ -0,0 +1,58 @@ +/* + * discord-types + * Copyright (C) 2024 Vencord project contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export type FluxActionHandler = Action extends FluxAction + ? { type: never; } extends Action + ? (action: any) => Return + : (action: Action) => Return + : never; + +// Workaround to avoid ts(2589) +type FluxGenericAction = { type: ActionType; } & Record; + +export type FluxAction = FluxGenericAction; + +export type ExcludeAction + = Action extends unknown + // Workaround to avoid ts(2589) + ? [Exclude] extends [never] + ? never + : { type: Exclude; } & Omit + : never; + +export type ExtractAction + = Action extends unknown + // Workaround to avoid ts(2589) + ? [Extract] extends [never] + ? never + : { type: Extract; } & Omit + : never; + +/* +// Retrieves action types only from imported modules that have registered action handlers or subscribed to actions. +function generateFluxActionType() { + const actionTypes = new Set([...""]); + + const { FluxDispatcher } = Vencord.Webpack.Common; + for (const actionType in FluxDispatcher._subscriptions) + actionTypes.add(actionType); + for (const actionType in FluxDispatcher._actionHandlers._orderedActionHandlers) + actionTypes.add(actionType); + const { nodes } = FluxDispatcher._actionHandlers._dependencyGraph; + for (const dispatchToken in nodes) + for (const actionType in nodes[dispatchToken].actionHandler) + actionTypes.add(actionType); + + const sortedActionTypes = [...actionTypes].sort((a, b) => { + const x = a.toLowerCase(); + const y = b.toLowerCase(); + return x < y ? -1 : x > y ? 1 : 0; + }); + return `"${sortedActionTypes.join('" | "')}"`; +} +*/ + +export type FluxActionType = "ACCESSIBILITY_COLORBLIND_TOGGLE" | "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" | "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" | "ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN" | "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" | "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" | "ACCESSIBILITY_LOW_CONTRAST_TOGGLE" | "ACCESSIBILITY_RESET_TO_DEFAULT" | "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS" | "ACCESSIBILITY_SET_CONTRAST" | "ACCESSIBILITY_SET_FONT_SIZE" | "ACCESSIBILITY_SET_HIDE_TAGS" | "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING" | "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION" | "ACCESSIBILITY_SET_ROLE_STYLE" | "ACCESSIBILITY_SET_SATURATION" | "ACCESSIBILITY_SET_SYNC_FORCED_COLORS" | "ACCESSIBILITY_SET_ZOOM" | "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" | "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" | "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED" | "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED" | "ACK_APPROVED_GUILD_JOIN_REQUEST" | "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP" | "ACTIVE_BOGO_PROMOTION_FETCH" | "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" | "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS" | "ACTIVE_CHANNELS_FETCH_FAILURE" | "ACTIVE_CHANNELS_FETCH_START" | "ACTIVE_CHANNELS_FETCH_SUCCESS" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" | "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS" | "ACTIVITIES_WHATS_NEW_ACKNOWLEDGE_SECTION" | "ACTIVITIES_WHATS_NEW_MARK_OPENED_SECTION" | "ACTIVITY_INVITE_EDUCATION_DISMISS" | "ACTIVITY_INVITE_MODAL_CLOSE" | "ACTIVITY_INVITE_MODAL_OPEN" | "ACTIVITY_JOIN" | "ACTIVITY_JOIN_FAILED" | "ACTIVITY_JOIN_LOADING" | "ACTIVITY_LAUNCH_FAIL" | "ACTIVITY_LAYOUT_MODE_UPDATE" | "ACTIVITY_METADATA_UPDATE" | "ACTIVITY_PLAY" | "ACTIVITY_SCREEN_ORIENTATION_UPDATE" | "ACTIVITY_START" | "ACTIVITY_SYNC" | "ACTIVITY_SYNC_STOP" | "ACTIVITY_UPDATE_FAIL" | "ACTIVITY_UPDATE_START" | "ACTIVITY_UPDATE_SUCCESS" | "ADD_STICKER_PREVIEW" | "ADMIN_ONBOARDING_GUIDE_HIDE" | "ADYEN_CASH_APP_PAY_SUBMIT_SUCCESS" | "ADYEN_CREATE_CASH_APP_PAY_COMPONENT_SUCCESS" | "ADYEN_CREATE_CLIENT_SUCCESS" | "ADYEN_TEARDOWN_CLIENT" | "AFK" | "AGE_GATE_FAILURE_MODAL_OPEN" | "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" | "AGE_GATE_MODAL_CLOSE" | "AGE_GATE_MODAL_OPEN" | "AGE_GATE_SUCCESS_MODAL_OPEN" | "APP_ICON_EDITOR_CLOSE" | "APP_ICON_EDITOR_OPEN" | "APP_ICON_TRACK_IMPRESSION" | "APP_ICON_UPDATED" | "APP_LAUNCHER_DISMISS_APP_DETAIL" | "APP_LAUNCHER_DISMISS_POPUP" | "APP_LAUNCHER_SET_ACTIVE_COMMAND" | "APP_LAUNCHER_SHOW_APP_DETAIL" | "APP_LAUNCHER_SHOW_POPUP" | "APP_STATE_UPDATE" | "APP_VIEW_SET_HOME_LINK" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_START" | "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "APPLICATION_ASSETS_FETCH" | "APPLICATION_ASSETS_FETCH_SUCCESS" | "APPLICATION_ASSETS_UPDATE" | "APPLICATION_BRANCHES_FETCH_FAIL" | "APPLICATION_BRANCHES_FETCH_SUCCESS" | "APPLICATION_BUILD_FETCH_START" | "APPLICATION_BUILD_FETCH_SUCCESS" | "APPLICATION_BUILD_NOT_FOUND" | "APPLICATION_BUILD_SIZE_FETCH_FAIL" | "APPLICATION_BUILD_SIZE_FETCH_START" | "APPLICATION_BUILD_SIZE_FETCH_SUCCESS" | "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST" | "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE" | "APPLICATION_COMMAND_EXECUTE_BAD_VERSION" | "APPLICATION_COMMAND_INDEX_FETCH_FAILURE" | "APPLICATION_COMMAND_INDEX_FETCH_REQUEST" | "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS" | "APPLICATION_COMMAND_SET_ACTIVE_COMMAND" | "APPLICATION_COMMAND_SET_PREFERRED_COMMAND" | "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE" | "APPLICATION_COMMAND_UPDATE_OPTIONS" | "APPLICATION_COMMAND_USED" | "APPLICATION_DIRECTORY_FETCH_APPLICATION" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE" | "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SEARCH" | "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE" | "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS" | "APPLICATION_FETCH" | "APPLICATION_FETCH_FAIL" | "APPLICATION_FETCH_SUCCESS" | "APPLICATION_STORE_ACCEPT_EULA" | "APPLICATION_STORE_ACCEPT_STORE_TERMS" | "APPLICATION_STORE_CLEAR_DATA" | "APPLICATION_STORE_LOCATION_CHANGE" | "APPLICATION_STORE_MATURE_AGREE" | "APPLICATION_STORE_RESET_NAVIGATION" | "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "APPLICATIONS_FETCH" | "APPLICATIONS_FETCH_FAIL" | "APPLICATIONS_FETCH_SUCCESS" | "APPLICATIONS_SHELF_FETCH_FAIL" | "APPLICATIONS_SHELF_FETCH_START" | "APPLICATIONS_SHELF_FETCH_SUCCESS" | "APPLIED_BOOSTS_COOLDOWN_FETCH_SUCCESS" | "APPLIED_GUILD_BOOST_COUNT_UPDATE" | "AUDIO_INPUT_DETECTED" | "AUDIO_RESET" | "AUDIO_SET_ATTENUATION" | "AUDIO_SET_AUTOMATIC_GAIN_CONTROL" | "AUDIO_SET_DEBUG_LOGGING" | "AUDIO_SET_DISPLAY_SILENCE_WARNING" | "AUDIO_SET_ECHO_CANCELLATION" | "AUDIO_SET_INPUT_DEVICE" | "AUDIO_SET_INPUT_VOLUME" | "AUDIO_SET_LOCAL_PAN" | "AUDIO_SET_LOCAL_VIDEO_DISABLED" | "AUDIO_SET_LOCAL_VOLUME" | "AUDIO_SET_LOOPBACK" | "AUDIO_SET_MODE" | "AUDIO_SET_NOISE_CANCELLATION" | "AUDIO_SET_NOISE_SUPPRESSION" | "AUDIO_SET_OUTPUT_DEVICE" | "AUDIO_SET_OUTPUT_VOLUME" | "AUDIO_SET_QOS" | "AUDIO_SET_SELF_MUTE" | "AUDIO_SET_SUBSYSTEM" | "AUDIO_SET_TEMPORARY_SELF_MUTE" | "AUDIO_TOGGLE_LOCAL_MUTE" | "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE" | "AUDIO_TOGGLE_SELF_DEAF" | "AUDIO_TOGGLE_SELF_MUTE" | "AUDIO_VOLUME_CHANGE" | "AUDIT_LOG_FETCH_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL" | "AUDIT_LOG_FETCH_NEXT_PAGE_START" | "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS" | "AUDIT_LOG_FETCH_START" | "AUDIT_LOG_FETCH_SUCCESS" | "AUDIT_LOG_FILTER_BY_ACTION" | "AUDIT_LOG_FILTER_BY_TARGET" | "AUDIT_LOG_FILTER_BY_USER" | "AUTH_INVITE_UPDATE" | "AUTH_SESSION_CHANGE" | "AUTHENTICATOR_CREATE" | "AUTHENTICATOR_DELETE" | "AUTHENTICATOR_UPDATE" | "AUTO_MODERATION_MENTION_RAID_DETECTION" | "AUTO_MODERATION_MENTION_RAID_NOTICE_DISMISS" | "BACKGROUND_SYNC" | "BACKGROUND_SYNC_CHANNEL_MESSAGES" | "BILLING_ANNUAL_USER_OFFER_FETCH_FAIL" | "BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS" | "BILLING_CREATE_REFERRAL_PREVIEW_FAIL" | "BILLING_CREATE_REFERRAL_PREVIEW_START" | "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS" | "BILLING_CREATE_REFERRAL_SUCCESS" | "BILLING_IP_COUNTRY_CODE_FAILURE" | "BILLING_IP_COUNTRY_CODE_FETCH_START" | "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" | "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED" | "BILLING_NITRO_AFFINITY_FETCHED" | "BILLING_PAYMENT_FETCH_SUCCESS" | "BILLING_PAYMENT_SOURCE_CREATE_FAIL" | "BILLING_PAYMENT_SOURCE_CREATE_START" | "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS" | "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_REMOVE_FAIL" | "BILLING_PAYMENT_SOURCE_REMOVE_START" | "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS" | "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" | "BILLING_PAYMENT_SOURCE_UPDATE_FAIL" | "BILLING_PAYMENT_SOURCE_UPDATE_START" | "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS" | "BILLING_PAYMENT_SOURCES_FETCH_FAIL" | "BILLING_PAYMENT_SOURCES_FETCH_START" | "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS" | "BILLING_PAYMENTS_FETCH_SUCCESS" | "BILLING_PERKS_RELEVANCE_FETCH_FAIL" | "BILLING_PERKS_RELEVANCE_FETCH_START" | "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS" | "BILLING_POPUP_BRIDGE_CALLBACK" | "BILLING_POPUP_BRIDGE_STATE_UPDATE" | "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" | "BILLING_REFERRAL_RESOLVE_FAIL" | "BILLING_REFERRAL_RESOLVE_SUCCESS" | "BILLING_REFERRAL_TRIAL_OFFER_UPDATE" | "BILLING_REFERRALS_REMAINING_FETCH_FAIL" | "BILLING_REFERRALS_REMAINING_FETCH_START" | "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS" | "BILLING_SET_IP_COUNTRY_CODE" | "BILLING_SET_LOCALIZED_PRICING_PROMO" | "BILLING_SUBSCRIPTION_CANCEL_FAIL" | "BILLING_SUBSCRIPTION_CANCEL_START" | "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" | "BILLING_SUBSCRIPTION_FETCH_FAIL" | "BILLING_SUBSCRIPTION_FETCH_START" | "BILLING_SUBSCRIPTION_FETCH_SUCCESS" | "BILLING_SUBSCRIPTION_RESET" | "BILLING_SUBSCRIPTION_UPDATE_FAIL" | "BILLING_SUBSCRIPTION_UPDATE_START" | "BILLING_SUBSCRIPTION_UPDATE_SUCCESS" | "BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_OFFER_FETCH_FAIL" | "BILLING_USER_OFFER_FETCH_SUCCESS" | "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS" | "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" | "BLOCKED_DOMAIN_LIST_FETCHED" | "BOOSTED_GUILD_GRACE_PERIOD_NOTICE_DISMISS" | "BRAINTREE_CREATE_CLIENT_SUCCESS" | "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS" | "BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS" | "BRAINTREE_TEARDOWN_PAYPAL_CLIENT" | "BRAINTREE_TEARDOWN_VENMO_CLIENT" | "BRAINTREE_TOKENIZE_PAYPAL_FAIL" | "BRAINTREE_TOKENIZE_PAYPAL_START" | "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS" | "BRAINTREE_TOKENIZE_VENMO_FAIL" | "BRAINTREE_TOKENIZE_VENMO_START" | "BRAINTREE_TOKENIZE_VENMO_SUCCESS" | "BROADCAST_START" | "BROADCAST_STOP" | "BROADCAST_VIEWERS_UPDATE" | "BROADCASTER_BUCKETS_RECEIVED" | "BROWSER_HANDOFF_BEGIN" | "BROWSER_HANDOFF_FROM_APP" | "BROWSER_HANDOFF_SET_USER" | "BROWSER_HANDOFF_UNAVAILABLE" | "BUILD_OVERRIDE_RESOLVED" | "BULK_ACK" | "BULK_CLEAR_RECENTS" | "BURST_REACTION_ANIMATION_ADD" | "BURST_REACTION_EFFECT_CLEAR" | "BURST_REACTION_EFFECT_PLAY" | "BURST_REACTION_PICKER_ANIMATION_ADD" | "BURST_REACTION_PICKER_ANIMATION_CLEAR" | "CACHE_LOADED" | "CACHE_LOADED_LAZY" | "CACHE_LOADED_LAZY_NO_CACHE" | "CACHED_EMOJIS_LOADED" | "CACHED_STICKERS_LOADED" | "CALL_CHAT_TOASTS_SET_ENABLED" | "CALL_CONNECT" | "CALL_CONNECT_MULTIPLE" | "CALL_CREATE" | "CALL_DELETE" | "CALL_ENQUEUE_RING" | "CALL_UPDATE" | "CANDIDATE_GAMES_CHANGE" | "CATEGORY_COLLAPSE" | "CATEGORY_COLLAPSE_ALL" | "CATEGORY_EXPAND" | "CATEGORY_EXPAND_ALL" | "CERTIFIED_DEVICES_SET" | "CHANGE_LOG_FETCH_FAILED" | "CHANGE_LOG_FETCH_SUCCESS" | "CHANGE_LOG_LOCK" | "CHANGE_LOG_MARK_SEEN" | "CHANGE_LOG_SET_CONFIG" | "CHANGE_LOG_SET_OVERRIDE" | "CHANGE_LOG_UNLOCK" | "CHANNEL_ACK" | "CHANNEL_CALL_POPOUT_WINDOW_OPEN" | "CHANNEL_COLLAPSE" | "CHANNEL_CREATE" | "CHANNEL_DELETE" | "CHANNEL_FOLLOWER_CREATED" | "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE" | "CHANNEL_FOLLOWER_STATS_FETCH_START" | "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED" | "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY" | "CHANNEL_LOCAL_ACK" | "CHANNEL_MUTE_EXPIRED" | "CHANNEL_PINS_ACK" | "CHANNEL_PINS_UPDATE" | "CHANNEL_PRELOAD" | "CHANNEL_RECIPIENT_ADD" | "CHANNEL_RECIPIENT_REMOVE" | "CHANNEL_RTC_ACTIVE_CHANNELS" | "CHANNEL_RTC_SELECT_PARTICIPANT" | "CHANNEL_RTC_UPDATE_CHAT_OPEN" | "CHANNEL_RTC_UPDATE_LAYOUT" | "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN" | "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE" | "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED" | "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN" | "CHANNEL_SAFETY_WARNING_FEEDBACK" | "CHANNEL_SELECT" | "CHANNEL_SETTINGS_CLOSE" | "CHANNEL_SETTINGS_INIT" | "CHANNEL_SETTINGS_LOADED_INVITES" | "CHANNEL_SETTINGS_OPEN" | "CHANNEL_SETTINGS_OVERWRITE_SELECT" | "CHANNEL_SETTINGS_PERMISSIONS_INIT" | "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS" | "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION" | "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE" | "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" | "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION" | "CHANNEL_SETTINGS_SET_SECTION" | "CHANNEL_SETTINGS_SUBMIT" | "CHANNEL_SETTINGS_SUBMIT_FAILURE" | "CHANNEL_SETTINGS_SUBMIT_SUCCESS" | "CHANNEL_SETTINGS_UPDATE" | "CHANNEL_STATUSES" | "CHANNEL_TOGGLE_MEMBERS_SECTION" | "CHANNEL_TOGGLE_SUMMARIES_SECTION" | "CHANNEL_UPDATES" | "CHECK_LAUNCHABLE_GAME" | "CHECKING_FOR_UPDATES" | "CLAN_SETTINGS_FETCH_START" | "CLAN_SETTINGS_FETCH_SUCCESS" | "CLAN_SETTINGS_SUBMIT" | "CLAN_SETTINGS_SUBMIT_ERROR" | "CLAN_SETTINGS_SUBMIT_SUCCESS" | "CLAN_SETTINGS_UPDATE" | "CLAN_SETUP_ERROR" | "CLAN_SETUP_RESET" | "CLAN_SETUP_SUBMIT" | "CLAN_SETUP_SUCCESS" | "CLAN_SETUP_UPDATE" | "CLEAR_AUTHENTICATION_ERRORS" | "CLEAR_CACHES" | "CLEAR_CHANNEL_SAFETY_WARNINGS" | "CLEAR_CONVERSATION_SUMMARIES" | "CLEAR_HANG_STATUS" | "CLEAR_INTERACTION_MODAL_STATE" | "CLEAR_LAST_SESSION_VOICE_CHANNEL_ID" | "CLEAR_MENTIONS" | "CLEAR_MESSAGES" | "CLEAR_OLDEST_UNREAD_MESSAGE" | "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES" | "CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID" | "CLEAR_STICKER_PREVIEW" | "CLIENT_THEMES_EDITOR_CLOSE" | "CLIENT_THEMES_EDITOR_OPEN" | "CLIPS_CLASSIFY_HARDWARE" | "CLIPS_CLEAR_CLIPS_SESSION" | "CLIPS_CLEAR_NEW_CLIP_IDS" | "CLIPS_DELETE_CLIP" | "CLIPS_DISMISS_EDUCATION" | "CLIPS_INIT" | "CLIPS_INIT_FAILURE" | "CLIPS_LOAD_DIRECTORY_SUCCESS" | "CLIPS_RESTART" | "CLIPS_SAVE_ANIMATION_END" | "CLIPS_SAVE_CLIP" | "CLIPS_SAVE_CLIP_ERROR" | "CLIPS_SAVE_CLIP_PLACEHOLDER" | "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR" | "CLIPS_SAVE_CLIP_START" | "CLIPS_SETTINGS_UPDATE" | "CLIPS_SHOW_CALL_WARNING" | "CLIPS_UPDATE_METADATA" | "CLOSE_SUSPENDED_USER" | "COLLECTIBLES_CATEGORIES_FETCH" | "COLLECTIBLES_CATEGORIES_FETCH_FAILURE" | "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS" | "COLLECTIBLES_CATEGORY_ITEMS_VIEWED" | "COLLECTIBLES_CLAIM" | "COLLECTIBLES_CLAIM_FAILURE" | "COLLECTIBLES_CLAIM_SUCCESS" | "COLLECTIBLES_PRODUCT_DETAILS_OPEN" | "COLLECTIBLES_PRODUCT_FETCH" | "COLLECTIBLES_PRODUCT_FETCH_FAILURE" | "COLLECTIBLES_PRODUCT_FETCH_SUCCESS" | "COLLECTIBLES_PURCHASES_FETCH" | "COLLECTIBLES_PURCHASES_FETCH_FAILURE" | "COLLECTIBLES_PURCHASES_FETCH_SUCCESS" | "COLLECTIBLES_SHOP_CLOSE" | "COLLECTIBLES_SHOP_OPEN" | "COMMANDS_MIGRATION_NOTICE_DISMISSED" | "COMMANDS_MIGRATION_OVERVIEW_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_TOGGLE_TOOLTIP_DISMISSED" | "COMMANDS_MIGRATION_UPDATE_SUCCESS" | "COMPLETE_NEW_MEMBER_ACTION" | "COMPLETE_SIGN_UP" | "CONNECTED_DEVICE_IGNORE" | "CONNECTED_DEVICE_NEVER_SHOW_MODAL" | "CONNECTED_DEVICE_SET" | "CONNECTION_CLOSED" | "CONNECTION_INTERRUPTED" | "CONNECTION_OPEN" | "CONNECTION_OPEN_SUPPLEMENTAL" | "CONNECTION_RESUMED" | "CONNECTIONS_GRID_MODAL_HIDE" | "CONNECTIONS_GRID_MODAL_SHOW" | "CONSOLE_COMMAND_UPDATE" | "CONTENT_INVENTORY_CLEAR_FEED" | "CONTENT_INVENTORY_DEBUG_CLEAR_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_LOG_IMPRESSIONS" | "CONTENT_INVENTORY_DEBUG_TOGGLE_FAST_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING" | "CONTENT_INVENTORY_INBOX_STALE" | "CONTENT_INVENTORY_MANUAL_REFRESH" | "CONTENT_INVENTORY_SET_FEED" | "CONTENT_INVENTORY_SET_FEED_STATE" | "CONTENT_INVENTORY_SET_FILTERS" | "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN" | "CONTENT_INVENTORY_TRACK_ITEM_IMPRESSIONS" | "CONTEXT_MENU_CLOSE" | "CONTEXT_MENU_OPEN" | "CONVERSATION_SUMMARY_UPDATE" | "CREATE_PENDING_REPLY" | "CREATE_REFERRALS_SUCCESS" | "CREATE_SHALLOW_PENDING_REPLY" | "CREATOR_MONETIZATION_NAG_ACTIVATE_ELIGIBLITY_FETCH_SUCCESS" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_FAILURE" | "CREATOR_MONETIZATION_PRICE_TIERS_FETCH_SUCCESS" | "CURRENT_BUILD_OVERRIDE_RESOLVED" | "CURRENT_USER_UPDATE" | "DCF_DAILY_CAP_OVERRIDE" | "DCF_HANDLE_DC_DISMISSED" | "DCF_HANDLE_DC_SHOWN" | "DCF_RESET" | "DECAY_READ_STATES" | "DELETE_PENDING_REPLY" | "DELETE_SUMMARY" | "DELETED_ENTITY_IDS" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE" | "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS" | "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS" | "DEV_TOOLS_DESIGN_TOGGLE_SET" | "DEV_TOOLS_DESIGN_TOGGLE_WEB_SET" | "DEV_TOOLS_DEV_SETTING_SET" | "DEV_TOOLS_SETTINGS_UPDATE" | "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" | "DEVELOPER_ACTIVITY_SHELF_FETCH_START" | "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS" | "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED" | "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" | "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER" | "DEVELOPER_OPTIONS_UPDATE_SETTINGS" | "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL" | "DEVELOPER_TEST_MODE_AUTHORIZATION_START" | "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS" | "DEVELOPER_TEST_MODE_RESET" | "DEVELOPER_TEST_MODE_RESET_ERROR" | "DISABLE_AUTOMATIC_ACK" | "DISCOVER_CHECKLIST_FETCH_FAILURE" | "DISCOVER_CHECKLIST_FETCH_START" | "DISCOVER_CHECKLIST_FETCH_SUCCESS" | "DISCOVER_GUILDS_FETCH_FAILURE" | "DISCOVER_GUILDS_FETCH_START" | "DISCOVER_GUILDS_FETCH_SUCCESS" | "DISMISS_CHANNEL_SAFETY_WARNINGS" | "DISMISS_FAVORITE_SUGGESTION" | "DISMISS_MEDIA_POST_SHARE_PROMPT" | "DISMISS_SIGN_UP" | "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS" | "DISPATCH_APPLICATION_CANCEL" | "DISPATCH_APPLICATION_ERROR" | "DISPATCH_APPLICATION_INSTALL" | "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" | "DISPATCH_APPLICATION_LAUNCH_SETUP_START" | "DISPATCH_APPLICATION_MOVE_UP" | "DISPATCH_APPLICATION_REMOVE_FINISHED" | "DISPATCH_APPLICATION_REPAIR" | "DISPATCH_APPLICATION_STATE_UPDATE" | "DISPATCH_APPLICATION_UNINSTALL" | "DISPATCH_APPLICATION_UPDATE" | "DISPLAYED_INVITE_CLEAR" | "DISPLAYED_INVITE_SHOW" | "DOMAIN_MIGRATION_FAILURE" | "DOMAIN_MIGRATION_SKIP" | "DOMAIN_MIGRATION_START" | "DRAFT_CHANGE" | "DRAFT_CLEAR" | "DRAFT_SAVE" | "DRAWER_CLOSE" | "DRAWER_OPEN" | "DRAWER_SELECT_TAB" | "DROPS_ELIGIBILITY_FETCH_SUCCESS" | "DROPS_ENROLLED_USER_FETCH_SUCCESS" | "DROPS_FETCH_PROGRESS_FAILURE" | "DROPS_FETCH_PROGRESS_SUCCESS" | "DROPS_HEARTBEAT_FAILURE" | "DROPS_HEARTBEAT_SUCCESS" | "DROPS_PLATFORM_AVAILABILITY_SUCCESS" | "DROPS_UNENROLL_USER" | "DROPS_USER_STATUS_FETCH_FAILURE" | "DROPS_USER_STATUS_FETCH_SUCCESS" | "EMAIL_SETTINGS_FETCH_SUCCESS" | "EMAIL_SETTINGS_UPDATE" | "EMAIL_SETTINGS_UPDATE_SUCCESS" | "EMAIL_VERIFICATION_MODAL_CLOSE" | "EMBEDDED_ACTIVITY_CLOSE" | "EMBEDDED_ACTIVITY_DEFERRED_OPEN" | "EMBEDDED_ACTIVITY_DISCONNECT" | "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" | "EMBEDDED_ACTIVITY_FETCH_SHELF" | "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL" | "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS" | "EMBEDDED_ACTIVITY_LAUNCH_FAIL" | "EMBEDDED_ACTIVITY_LAUNCH_START" | "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS" | "EMBEDDED_ACTIVITY_OPEN" | "EMBEDDED_ACTIVITY_SET_CONFIG" | "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT" | "EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE" | "EMBEDDED_ACTIVITY_SET_PANEL_MODE" | "EMBEDDED_ACTIVITY_UPDATE" | "EMBEDDED_ACTIVITY_UPDATE_V2" | "EMOJI_AUTOSUGGESTION_UPDATE" | "EMOJI_CAPTIONS_FETCH" | "EMOJI_CAPTIONS_FETCH_ERROR" | "EMOJI_CAPTIONS_FETCH_SUCCESS" | "EMOJI_DELETE" | "EMOJI_FETCH_FAILURE" | "EMOJI_FETCH_SUCCESS" | "EMOJI_INTERACTION_INITIATED" | "EMOJI_TRACK_USAGE" | "EMOJI_UPLOAD_START" | "EMOJI_UPLOAD_STOP" | "ENABLE_AUTOMATIC_ACK" | "ENABLE_GUILD_SIGN_UP" | "ENABLE_USER_SIGN_UP" | "ENTITLEMENT_CREATE" | "ENTITLEMENT_DELETE" | "ENTITLEMENT_FETCH_APPLICATION_FAIL" | "ENTITLEMENT_FETCH_APPLICATION_START" | "ENTITLEMENT_FETCH_APPLICATION_SUCCESS" | "ENTITLEMENT_UPDATE" | "ENTITLEMENTS_FETCH_FOR_USER_FAIL" | "ENTITLEMENTS_FETCH_FOR_USER_START" | "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS" | "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS" | "EVENT_DIRECTORY_FETCH_FAILURE" | "EVENT_DIRECTORY_FETCH_START" | "EVENT_DIRECTORY_FETCH_SUCCESS" | "EXPERIMENT_OVERRIDE_BUCKET" | "EXPERIMENTS_FETCH" | "EXPERIMENTS_FETCH_FAILURE" | "EXPERIMENTS_FETCH_SUCCESS" | "FAMILY_CENTER_FETCH_START" | "FAMILY_CENTER_HANDLE_TAB_SELECT" | "FAMILY_CENTER_INITIAL_LOAD" | "FAMILY_CENTER_LINK_CODE_FETCH_SUCCESS" | "FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_REMOVE_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_SUCCESS" | "FAMILY_CENTER_REQUEST_LINK_UPDATE_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS" | "FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS" | "FETCH_AUTH_SESSIONS_SUCCESS" | "FETCH_CLAN_DISCOVERY_SEARCH_RESULT_SUCCESS" | "FETCH_GUILD_EVENT" | "FETCH_GUILD_EVENTS_FOR_GUILD" | "FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE" | "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START" | "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS" | "FETCH_STATIC_CLAN_LIST_FAILURE" | "FETCH_STATIC_CLAN_LIST_START" | "FETCH_STATIC_CLAN_LIST_SUCCESS" | "FINGERPRINT" | "FORCE_INVISIBLE" | "FORGOT_PASSWORD_REQUEST" | "FORGOT_PASSWORD_SENT" | "FORUM_SEARCH_CLEAR" | "FORUM_SEARCH_FAILURE" | "FORUM_SEARCH_QUERY_UPDATED" | "FORUM_SEARCH_START" | "FORUM_SEARCH_SUCCESS" | "FORUM_UNREADS" | "FRIEND_INVITE_CREATE_FAILURE" | "FRIEND_INVITE_CREATE_REQUEST" | "FRIEND_INVITE_CREATE_SUCCESS" | "FRIEND_INVITE_REVOKE_REQUEST" | "FRIEND_INVITE_REVOKE_SUCCESS" | "FRIEND_INVITES_FETCH_REQUEST" | "FRIEND_INVITES_FETCH_RESPONSE" | "FRIEND_SUGGESTION_CREATE" | "FRIEND_SUGGESTION_DELETE" | "FRIENDS_SET_INITIAL_SECTION" | "FRIENDS_SET_SECTION" | "GAME_CLOUD_SYNC_COMPLETE" | "GAME_CLOUD_SYNC_CONFLICT" | "GAME_CLOUD_SYNC_ERROR" | "GAME_CLOUD_SYNC_START" | "GAME_CLOUD_SYNC_UPDATE" | "GAME_CONSOLE_FETCH_DEVICES_FAIL" | "GAME_CONSOLE_FETCH_DEVICES_START" | "GAME_CONSOLE_FETCH_DEVICES_SUCCESS" | "GAME_CONSOLE_SELECT_DEVICE" | "GAME_DETECTION_WATCH_CANDIDATE_GAMES_START" | "GAME_ICON_UPDATE" | "GAME_INVITE_CLEAR_UNSEEN" | "GAME_INVITE_CREATE" | "GAME_INVITE_DELETE" | "GAME_INVITE_DELETE_MANY" | "GAME_INVITE_UPDATE_STATUS" | "GAME_LAUNCH_FAIL" | "GAME_LAUNCH_START" | "GAME_LAUNCH_SUCCESS" | "GAME_LAUNCHABLE_UPDATE" | "GAMES_DATABASE_FETCH" | "GAMES_DATABASE_FETCH_FAIL" | "GAMES_DATABASE_UPDATE" | "GENERIC_PUSH_NOTIFICATION_SENT" | "GIF_PICKER_INITIALIZE" | "GIF_PICKER_QUERY" | "GIF_PICKER_QUERY_FAILURE" | "GIF_PICKER_QUERY_SUCCESS" | "GIF_PICKER_SUGGESTIONS_SUCCESS" | "GIF_PICKER_TRENDING_FETCH_SUCCESS" | "GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS" | "GIFT_CODE_CREATE" | "GIFT_CODE_CREATE_SUCCESS" | "GIFT_CODE_REDEEM" | "GIFT_CODE_REDEEM_FAILURE" | "GIFT_CODE_REDEEM_SUCCESS" | "GIFT_CODE_RESOLVE" | "GIFT_CODE_RESOLVE_FAILURE" | "GIFT_CODE_RESOLVE_SUCCESS" | "GIFT_CODE_REVOKE_SUCCESS" | "GIFT_CODE_UPDATE" | "GIFT_CODES_FETCH" | "GIFT_CODES_FETCH_FAILURE" | "GIFT_CODES_FETCH_SUCCESS" | "GUILD_ACK" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_ENGAGEMENT_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_OVERVIEW_FETCH_SUCCESS" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_FAILURE" | "GUILD_ANALYTICS_GROWTH_ACTIVATION_RETENTION_FETCH_SUCCESS" | "GUILD_ANALYTICS_MEMBER_INSIGHTS_FETCH_SUCCESS" | "GUILD_APPLICATION_COMMAND_INDEX_UPDATE" | "GUILD_APPLICATIONS_FETCH_SUCCESS" | "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS" | "GUILD_APPLY_BOOST_FAIL" | "GUILD_APPLY_BOOST_START" | "GUILD_APPLY_BOOST_SUCCESS" | "GUILD_BAN_ADD" | "GUILD_BAN_REMOVE" | "GUILD_BOOST_SLOT_CREATE" | "GUILD_BOOST_SLOT_UPDATE" | "GUILD_BOOST_SLOT_UPDATE_SUCCESS" | "GUILD_BOOST_SLOTS_FETCH_SUCCESS" | "GUILD_CREATE" | "GUILD_DELETE" | "GUILD_DIRECTORY_ADMIN_ENTRIES_FETCH_SUCCESS" | "GUILD_DIRECTORY_CACHED_SEARCH" | "GUILD_DIRECTORY_CATEGORY_SELECT" | "GUILD_DIRECTORY_COUNTS_FETCH_SUCCESS" | "GUILD_DIRECTORY_ENTRY_CREATE" | "GUILD_DIRECTORY_ENTRY_DELETE" | "GUILD_DIRECTORY_ENTRY_UPDATE" | "GUILD_DIRECTORY_FETCH_FAILURE" | "GUILD_DIRECTORY_FETCH_START" | "GUILD_DIRECTORY_FETCH_SUCCESS" | "GUILD_DIRECTORY_SEARCH_CLEAR" | "GUILD_DIRECTORY_SEARCH_FAILURE" | "GUILD_DIRECTORY_SEARCH_START" | "GUILD_DIRECTORY_SEARCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_ADD" | "GUILD_DISCOVERY_CATEGORY_DELETE" | "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS" | "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL" | "GUILD_DISCOVERY_CLEAR_SEARCH" | "GUILD_DISCOVERY_CLEAR_SEEN_GUILDS" | "GUILD_DISCOVERY_FETCH_FAILURE" | "GUILD_DISCOVERY_FETCH_START" | "GUILD_DISCOVERY_FETCH_SUCCESS" | "GUILD_DISCOVERY_GUILD_SEEN" | "GUILD_DISCOVERY_METADATA_FETCH_FAIL" | "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE" | "GUILD_DISCOVERY_POPULAR_FETCH_START" | "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL" | "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE" | "GUILD_DISCOVERY_SEARCH_FETCH_START" | "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS" | "GUILD_DISCOVERY_SEARCH_INIT" | "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS" | "GUILD_DISCOVERY_SELECT_CATEGORY" | "GUILD_DISCOVERY_SLUG_FETCH_FAIL" | "GUILD_DISCOVERY_SLUG_FETCH_SUCCESS" | "GUILD_EMOJIS_UPDATE" | "GUILD_FEATURE_ACK" | "GUILD_FEED_FEATURE_ITEM" | "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE" | "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS" | "GUILD_FEED_FETCH_FAILURE" | "GUILD_FEED_FETCH_FRESH_START" | "GUILD_FEED_FETCH_PAGE_START" | "GUILD_FEED_FETCH_SUCCESS" | "GUILD_FEED_ITEM_HIDE" | "GUILD_FEED_ITEM_READ_ACK" | "GUILD_FEED_ITEM_REMOVE" | "GUILD_FEED_ITEM_UNHIDE" | "GUILD_FEED_UNFEATURE_ITEM" | "GUILD_FOLDER_COLLAPSE" | "GUILD_FOLDER_CREATE_LOCAL" | "GUILD_FOLDER_DELETE_LOCAL" | "GUILD_FOLDER_EDIT_LOCAL" | "GUILD_GEO_RESTRICTED" | "GUILD_HOME_ENSURE_HOME_SESSION" | "GUILD_HOME_SET_SCROLL_POSITION" | "GUILD_HOME_SET_SOURCE" | "GUILD_HOME_SETTINGS_FETCH_FAIL" | "GUILD_HOME_SETTINGS_FETCH_START" | "GUILD_HOME_SETTINGS_FETCH_SUCCESS" | "GUILD_HOME_SETTINGS_TOGGLE_ENABLED" | "GUILD_HOME_SETTINGS_UPDATE_FAIL" | "GUILD_HOME_SETTINGS_UPDATE_START" | "GUILD_HOME_SETTINGS_UPDATE_SUCCESS" | "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" | "GUILD_IDENTITY_SETTINGS_CLOSE" | "GUILD_IDENTITY_SETTINGS_INIT" | "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" | "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" | "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "GUILD_IDENTITY_SETTINGS_SET_GUILD" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS" | "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS" | "GUILD_IDENTITY_SETTINGS_SUBMIT" | "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE" | "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" | "GUILD_INTEGRATIONS_UPDATE" | "GUILD_JOIN" | "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS" | "GUILD_JOIN_REQUEST_CREATE" | "GUILD_JOIN_REQUEST_DELETE" | "GUILD_JOIN_REQUEST_UPDATE" | "GUILD_JOIN_REQUESTS_BULK_ACTION" | "GUILD_JOIN_REQUESTS_FETCH_FAILURE" | "GUILD_JOIN_REQUESTS_FETCH_START" | "GUILD_JOIN_REQUESTS_FETCH_SUCCESS" | "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB" | "GUILD_JOIN_REQUESTS_SET_SELECTED" | "GUILD_JOIN_REQUESTS_SET_SORT_ORDER" | "GUILD_MEMBER_ADD" | "GUILD_MEMBER_LIST_UPDATE" | "GUILD_MEMBER_PROFILE_UPDATE" | "GUILD_MEMBER_REMOVE" | "GUILD_MEMBER_UPDATE" | "GUILD_MEMBER_UPDATE_LOCAL" | "GUILD_MEMBERS_CHUNK_BATCH" | "GUILD_MEMBERS_REQUEST" | "GUILD_MOVE_BY_ID" | "GUILD_MUTE_EXPIRED" | "GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_START" | "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS" | "GUILD_NSFW_AGREE" | "GUILD_ONBOARDING_COMPLETE" | "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE" | "GUILD_ONBOARDING_PROMPTS_FETCH_START" | "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS" | "GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE" | "GUILD_ONBOARDING_SELECT_OPTION" | "GUILD_ONBOARDING_SET_STEP" | "GUILD_ONBOARDING_START" | "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS" | "GUILD_POPOUT_FETCH_FAILURE" | "GUILD_POPOUT_FETCH_START" | "GUILD_POPOUT_FETCH_SUCCESS" | "GUILD_PRODUCT_CREATE" | "GUILD_PRODUCT_DELETE" | "GUILD_PRODUCT_FETCH" | "GUILD_PRODUCT_FETCH_FAILURE" | "GUILD_PRODUCT_FETCH_SUCCESS" | "GUILD_PRODUCT_UPDATE" | "GUILD_PRODUCTS_FETCH" | "GUILD_PRODUCTS_FETCH_FAILURE" | "GUILD_PRODUCTS_FETCH_SUCCESS" | "GUILD_PROGRESS_COMPLETED_SEEN" | "GUILD_PROGRESS_DISMISS" | "GUILD_PROGRESS_INITIALIZE" | "GUILD_PROMPT_VIEWED" | "GUILD_RECOMMENDATION_FETCH" | "GUILD_RECOMMENDATION_FETCH_FAILURE" | "GUILD_RECOMMENDATION_FETCH_SUCCESS" | "GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS" | "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS" | "GUILD_ROLE_CONNECTIONS_CONFIGURATIONS_FETCH_SUCCESS" | "GUILD_ROLE_CREATE" | "GUILD_ROLE_DELETE" | "GUILD_ROLE_MEMBER_ADD" | "GUILD_ROLE_MEMBER_BULK_ADD" | "GUILD_ROLE_MEMBER_COUNT_FETCH_START" | "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS" | "GUILD_ROLE_MEMBER_COUNT_UPDATE" | "GUILD_ROLE_MEMBER_REMOVE" | "GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS" | "GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES" | "GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL" | "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS" | "GUILD_ROLE_UPDATE" | "GUILD_SCHEDULED_EVENT_CREATE" | "GUILD_SCHEDULED_EVENT_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE" | "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE" | "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE" | "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS" | "GUILD_SCHEDULED_EVENT_UPDATE" | "GUILD_SCHEDULED_EVENT_USER_ADD" | "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS" | "GUILD_SCHEDULED_EVENT_USER_REMOVE" | "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS" | "GUILD_SEARCH_RECENT_MEMBERS" | "GUILD_SETTINGS_CANCEL_CHANGES" | "GUILD_SETTINGS_CLOSE" | "GUILD_SETTINGS_DEFAULT_CHANNELS_RESET" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_FAILED" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS" | "GUILD_SETTINGS_DEFAULT_CHANNELS_SUBMIT" | "GUILD_SETTINGS_DEFAULT_CHANNELS_TOGGLE" | "GUILD_SETTINGS_INIT" | "GUILD_SETTINGS_LOADED_BANS" | "GUILD_SETTINGS_LOADED_BANS_BATCH" | "GUILD_SETTINGS_LOADED_INTEGRATIONS" | "GUILD_SETTINGS_LOADED_INVITES" | "GUILD_SETTINGS_ONBOARDING_ADD_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_ADD_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_DELETE_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_DELETE_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_DISMISS_RESOURCE_CHANNEL_SUGGESTION" | "GUILD_SETTINGS_ONBOARDING_EDUCATION_UPSELL_DISMISSED" | "GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_EDIT" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_ERRORS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_RESET" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_FAILED" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS" | "GUILD_SETTINGS_ONBOARDING_PROMPTS_SUBMIT" | "GUILD_SETTINGS_ONBOARDING_REORDER_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_REORDER_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_SET_MODE" | "GUILD_SETTINGS_ONBOARDING_STEP" | "GUILD_SETTINGS_ONBOARDING_UPDATE_NEW_MEMBER_ACTION" | "GUILD_SETTINGS_ONBOARDING_UPDATE_NEW_MEMBER_ACTION_ICON_DATA" | "GUILD_SETTINGS_ONBOARDING_UPDATE_RESOURCE_CHANNEL" | "GUILD_SETTINGS_ONBOARDING_UPDATE_WELCOME_MESSAGE" | "GUILD_SETTINGS_OPEN" | "GUILD_SETTINGS_ROLE_SELECT" | "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS" | "GUILD_SETTINGS_ROLES_EDIT_SECTION_UPDATE" | "GUILD_SETTINGS_ROLES_INIT" | "GUILD_SETTINGS_ROLES_SAVE_FAIL" | "GUILD_SETTINGS_ROLES_SAVE_SUCCESS" | "GUILD_SETTINGS_ROLES_SORT_UPDATE" | "GUILD_SETTINGS_ROLES_SUBMITTING" | "GUILD_SETTINGS_ROLES_UPDATE_COLOR" | "GUILD_SETTINGS_ROLES_UPDATE_DESCRIPTION" | "GUILD_SETTINGS_ROLES_UPDATE_NAME" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSION_SET" | "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_CONNECTION_CONFIGURATIONS" | "GUILD_SETTINGS_ROLES_UPDATE_ROLE_ICON" | "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS" | "GUILD_SETTINGS_SAFETY_PAGE" | "GUILD_SETTINGS_SAFETY_SET_SUBSECTION" | "GUILD_SETTINGS_SAVE_ROUTE_STACK" | "GUILD_SETTINGS_SET_MFA_SUCCESS" | "GUILD_SETTINGS_SET_SEARCH_QUERY" | "GUILD_SETTINGS_SET_SECTION" | "GUILD_SETTINGS_SET_VANITY_URL" | "GUILD_SETTINGS_SET_WIDGET" | "GUILD_SETTINGS_SUBMIT" | "GUILD_SETTINGS_SUBMIT_FAILURE" | "GUILD_SETTINGS_SUBMIT_SUCCESS" | "GUILD_SETTINGS_UPDATE" | "GUILD_SETTINGS_VANITY_URL_CLOSE" | "GUILD_SETTINGS_VANITY_URL_ERROR" | "GUILD_SETTINGS_VANITY_URL_RESET" | "GUILD_SETTINGS_VANITY_URL_SET" | "GUILD_SOUNDBOARD_FETCH" | "GUILD_SOUNDBOARD_SOUND_CREATE" | "GUILD_SOUNDBOARD_SOUND_DELETE" | "GUILD_SOUNDBOARD_SOUND_PLAY_END" | "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY" | "GUILD_SOUNDBOARD_SOUND_PLAY_START" | "GUILD_SOUNDBOARD_SOUND_UPDATE" | "GUILD_SOUNDBOARD_SOUNDS_UPDATE" | "GUILD_STICKERS_CREATE_SUCCESS" | "GUILD_STICKERS_FETCH_SUCCESS" | "GUILD_STICKERS_UPDATE" | "GUILD_STOP_LURKING" | "GUILD_STOP_LURKING_FAILURE" | "GUILD_SUBSCRIPTIONS" | "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES" | "GUILD_SUBSCRIPTIONS_CHANNEL" | "GUILD_SUBSCRIPTIONS_FLUSH" | "GUILD_SUBSCRIPTIONS_MEMBERS_ADD" | "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE" | "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES" | "GUILD_TEMPLATE_ACCEPT" | "GUILD_TEMPLATE_ACCEPT_FAILURE" | "GUILD_TEMPLATE_ACCEPT_SUCCESS" | "GUILD_TEMPLATE_CREATE_SUCCESS" | "GUILD_TEMPLATE_DELETE_SUCCESS" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE" | "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH" | "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS" | "GUILD_TEMPLATE_MODAL_HIDE" | "GUILD_TEMPLATE_MODAL_SHOW" | "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" | "GUILD_TEMPLATE_RESOLVE" | "GUILD_TEMPLATE_RESOLVE_FAILURE" | "GUILD_TEMPLATE_RESOLVE_SUCCESS" | "GUILD_TEMPLATE_SYNC_SUCCESS" | "GUILD_TOGGLE_COLLAPSE_MUTED" | "GUILD_TOP_READ_CHANNELS_FETCH_SUCCESS" | "GUILD_UNAPPLY_BOOST_FAIL" | "GUILD_UNAPPLY_BOOST_START" | "GUILD_UNAPPLY_BOOST_SUCCESS" | "GUILD_UNAVAILABLE" | "GUILD_UPDATE" | "GUILD_UPDATE_DISCOVERY_METADATA" | "GUILD_UPDATE_DISCOVERY_METADATA_FAIL" | "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER" | "GUILD_VERIFICATION_CHECK" | "HABITUAL_DND_CLEAR" | "HIDE_ACTION_SHEET" | "HIDE_ACTION_SHEET_QUICK_SWITCHER" | "HIDE_KEYBOARD_SHORTCUTS" | "HIGH_FIVE_COMPLETE" | "HIGH_FIVE_COMPLETE_CLEAR" | "HIGH_FIVE_QUEUE" | "HIGH_FIVE_REMOVE" | "HIGH_FIVE_SET_ENABLED" | "HOTSPOT_HIDE" | "HOTSPOT_OVERRIDE_CLEAR" | "HOTSPOT_OVERRIDE_SET" | "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS" | "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS" | "I18N_LOAD_ERROR" | "I18N_LOAD_START" | "I18N_LOAD_SUCCESS" | "IDLE" | "IMPERSONATE_STOP" | "IMPERSONATE_UPDATE" | "INBOX_OPEN" | "INCOMING_CALL_MOVE" | "INITIALIZE_MEMBER_SAFETY_STORE" | "INSTALLATION_LOCATION_ADD" | "INSTALLATION_LOCATION_FETCH_METADATA" | "INSTALLATION_LOCATION_REMOVE" | "INSTALLATION_LOCATION_UPDATE" | "INSTANT_INVITE_CLEAR" | "INSTANT_INVITE_CREATE" | "INSTANT_INVITE_CREATE_FAILURE" | "INSTANT_INVITE_CREATE_SUCCESS" | "INSTANT_INVITE_REVOKE_SUCCESS" | "INTEGRATION_CREATE" | "INTEGRATION_DELETE" | "INTEGRATION_PERMISSION_SETTINGS_APPLICATION_PERMISSIONS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_CLEAR" | "INTEGRATION_PERMISSION_SETTINGS_COMMAND_UPDATE" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_FAILURE" | "INTEGRATION_PERMISSION_SETTINGS_COMMANDS_FETCH_SUCCESS" | "INTEGRATION_PERMISSION_SETTINGS_EDIT" | "INTEGRATION_PERMISSION_SETTINGS_INIT" | "INTEGRATION_PERMISSION_SETTINGS_RESET" | "INTEGRATION_QUERY" | "INTEGRATION_QUERY_FAILURE" | "INTEGRATION_QUERY_SUCCESS" | "INTEGRATION_SETTINGS_INIT" | "INTEGRATION_SETTINGS_SAVE_FAILURE" | "INTEGRATION_SETTINGS_SAVE_SUCCESS" | "INTEGRATION_SETTINGS_SET_SECTION" | "INTEGRATION_SETTINGS_START_EDITING_COMMAND" | "INTEGRATION_SETTINGS_START_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_START_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_STOP_EDITING_COMMAND" | "INTEGRATION_SETTINGS_STOP_EDITING_INTEGRATION" | "INTEGRATION_SETTINGS_STOP_EDITING_WEBHOOK" | "INTEGRATION_SETTINGS_SUBMITTING" | "INTEGRATION_SETTINGS_UPDATE_INTEGRATION" | "INTEGRATION_SETTINGS_UPDATE_WEBHOOK" | "INTERACTION_CREATE" | "INTERACTION_FAILURE" | "INTERACTION_IFRAME_MODAL_CLOSE" | "INTERACTION_IFRAME_MODAL_CREATE" | "INTERACTION_IFRAME_MODAL_KEY_CREATE" | "INTERACTION_MODAL_CREATE" | "INTERACTION_QUEUE" | "INTERACTION_SUCCESS" | "INVITE_ACCEPT" | "INVITE_ACCEPT_FAILURE" | "INVITE_ACCEPT_SUCCESS" | "INVITE_APP_NOT_OPENED" | "INVITE_APP_OPENED" | "INVITE_APP_OPENING" | "INVITE_MODAL_CLOSE" | "INVITE_MODAL_ERROR" | "INVITE_MODAL_OPEN" | "INVITE_RESOLVE" | "INVITE_RESOLVE_FAILURE" | "INVITE_RESOLVE_SUCCESS" | "INVITE_SUGGESTIONS_SEARCH" | "KEYBINDS_ADD_KEYBIND" | "KEYBINDS_DELETE_KEYBIND" | "KEYBINDS_ENABLE_ALL_KEYBINDS" | "KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS" | "KEYBINDS_SET_KEYBIND" | "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" | "LAYER_POP" | "LAYER_POP_ALL" | "LAYER_PUSH" | "LAYOUT_CREATE" | "LAYOUT_CREATE_WIDGETS" | "LAYOUT_DELETE_ALL_WIDGETS" | "LAYOUT_DELETE_WIDGET" | "LAYOUT_SET_PINNED" | "LAYOUT_SET_TOP_WIDGET" | "LAYOUT_UPDATE_WIDGET" | "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE" | "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE" | "LIBRARY_APPLICATION_FILTER_UPDATE" | "LIBRARY_APPLICATION_FLAGS_UPDATE_START" | "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS" | "LIBRARY_APPLICATION_UPDATE" | "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED" | "LIBRARY_FETCH_SUCCESS" | "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE" | "LIBRARY_TABLE_SORT_UPDATE" | "LIGHTNING_CHECKOUT_CLOSE" | "LIGHTNING_CHECKOUT_OPEN" | "LIVE_CHANNEL_NOTICE_HIDE" | "LOAD_ARCHIVED_THREADS" | "LOAD_ARCHIVED_THREADS_FAIL" | "LOAD_ARCHIVED_THREADS_SUCCESS" | "LOAD_CHANNELS" | "LOAD_FORUM_POSTS" | "LOAD_FRIEND_SUGGESTIONS_FAILURE" | "LOAD_FRIEND_SUGGESTIONS_SUCCESS" | "LOAD_GUILD_AFFINITIES_SUCCESS" | "LOAD_INVITE_SUGGESTIONS" | "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_ERROR" | "LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS" | "LOAD_MESSAGES" | "LOAD_MESSAGES_AROUND_SUCCESS" | "LOAD_MESSAGES_FAILURE" | "LOAD_MESSAGES_SUCCESS" | "LOAD_MESSAGES_SUCCESS_CACHED" | "LOAD_NOTIFICATION_CENTER_ITEMS" | "LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE" | "LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS" | "LOAD_PINNED_MESSAGES" | "LOAD_PINNED_MESSAGES_FAILURE" | "LOAD_PINNED_MESSAGES_SUCCESS" | "LOAD_RECENT_MENTIONS" | "LOAD_RECENT_MENTIONS_FAILURE" | "LOAD_RECENT_MENTIONS_SUCCESS" | "LOAD_REGIONS" | "LOAD_RELATIONSHIPS_FAILURE" | "LOAD_RELATIONSHIPS_SUCCESS" | "LOAD_THREADS_SUCCESS" | "LOAD_USER_AFFINITIES" | "LOAD_USER_AFFINITIES_FAILURE" | "LOAD_USER_AFFINITIES_SUCCESS" | "LOCAL_ACTIVITY_UPDATE" | "LOCAL_MESSAGE_CREATE" | "LOCAL_MESSAGES_LOADED" | "LOGIN" | "LOGIN_ACCOUNT_DISABLED" | "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION" | "LOGIN_ATTEMPTED" | "LOGIN_FAILURE" | "LOGIN_MFA" | "LOGIN_MFA_FAILURE" | "LOGIN_MFA_SMS" | "LOGIN_MFA_SMS_FAILURE" | "LOGIN_MFA_SMS_REQUEST_SUCCESS" | "LOGIN_MFA_STEP" | "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" | "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" | "LOGIN_RESET" | "LOGIN_STATUS_RESET" | "LOGIN_SUCCESS" | "LOGIN_SUSPENDED_USER" | "LOGOUT" | "LOGOUT_AUTH_SESSIONS_SUCCESS" | "MASKED_LINK_ADD_TRUSTED_DOMAIN" | "MASKED_LINK_ADD_TRUSTED_PROTOCOL" | "MAX_MEMBER_COUNT_NOTICE_DISMISS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" | "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" | "MEDIA_ENGINE_DEVICES" | "MEDIA_ENGINE_INTERACTION_REQUIRED" | "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" | "MEDIA_ENGINE_PERMISSION" | "MEDIA_ENGINE_SET_AEC_DUMP" | "MEDIA_ENGINE_SET_AUDIO_ENABLED" | "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS" | "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE" | "MEDIA_ENGINE_SET_GO_LIVE_SOURCE" | "MEDIA_ENGINE_SET_HARDWARE_H264" | "MEDIA_ENGINE_SET_OPEN_H264" | "MEDIA_ENGINE_SET_VIDEO_DEVICE" | "MEDIA_ENGINE_SET_VIDEO_ENABLED" | "MEDIA_ENGINE_SET_VIDEO_HOOK" | "MEDIA_ENGINE_SOUNDSHARE_FAILED" | "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" | "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED" | "MEDIA_ENGINE_VIDEO_STATE_CHANGED" | "MEDIA_POST_EMBED_FETCH" | "MEDIA_POST_EMBED_FETCH_FAILURE" | "MEDIA_POST_EMBED_FETCH_SUCCESS" | "MEDIA_SESSION_JOINED" | "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS" | "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH" | "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH" | "MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE" | "MEMBER_SAFETY_PAGINATION_UPDATE" | "MEMBER_SAFETY_SEARCH_STATE_UPDATE" | "MEMBER_VERIFICATION_FORM_FETCH_FAIL" | "MEMBER_VERIFICATION_FORM_UPDATE" | "MENTION_MODAL_CLOSE" | "MENTION_MODAL_OPEN" | "MESSAGE_ACK" | "MESSAGE_ACKED" | "MESSAGE_CREATE" | "MESSAGE_DELETE" | "MESSAGE_DELETE_BULK" | "MESSAGE_EDIT_FAILED_AUTOMOD" | "MESSAGE_END_EDIT" | "MESSAGE_EXPLICIT_CONTENT_FP_CREATE" | "MESSAGE_EXPLICIT_CONTENT_FP_SUBMIT" | "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT" | "MESSAGE_LENGTH_UPSELL" | "MESSAGE_NOTIFICATION_SHOWN" | "MESSAGE_PREVIEWS_LOADED" | "MESSAGE_PREVIEWS_LOCALLY_LOADED" | "MESSAGE_REACTION_ADD" | "MESSAGE_REACTION_ADD_MANY" | "MESSAGE_REACTION_ADD_USERS" | "MESSAGE_REACTION_REMOVE" | "MESSAGE_REACTION_REMOVE_ALL" | "MESSAGE_REACTION_REMOVE_EMOJI" | "MESSAGE_REMINDER_NOTIFIED" | "MESSAGE_REMINDER_TOGGLE" | "MESSAGE_REQUEST_ACCEPT_OPTIMISTIC" | "MESSAGE_REQUEST_ACK" | "MESSAGE_REQUEST_CLEAR_ACK" | "MESSAGE_REVEAL" | "MESSAGE_SEND_FAILED" | "MESSAGE_SEND_FAILED_AUTOMOD" | "MESSAGE_START_EDIT" | "MESSAGE_UPDATE" | "MESSAGE_UPDATE_EDIT" | "MFA_CLEAR_BACKUP_CODES" | "MFA_DISABLE_SUCCESS" | "MFA_ENABLE_EMAIL_TOKEN" | "MFA_ENABLE_SUCCESS" | "MFA_SEEN_BACKUP_CODE_PROMPT" | "MFA_SEND_VERIFICATION_KEY" | "MFA_SMS_TOGGLE" | "MFA_SMS_TOGGLE_COMPLETE" | "MFA_VIEW_BACKUP_CODES" | "MFA_WEBAUTHN_CREDENTIALS_LOADED" | "MFA_WEBAUTHN_CREDENTIALS_LOADING" | "MOBILE_NATIVE_UPDATE_CHECK_FINISHED" | "MOBILE_WEB_SIDEBAR_CLOSE" | "MOBILE_WEB_SIDEBAR_OPEN" | "MOD_VIEW_SEARCH_FINISH" | "MODAL_POP" | "MODAL_POP_ALL" | "MODAL_PUSH" | "MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS" | "MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE" | "MULTI_ACCOUNT_MOVE_ACCOUNT" | "MULTI_ACCOUNT_REMOVE_ACCOUNT" | "MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN" | "MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE" | "MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST" | "MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS" | "MUTUAL_FRIENDS_FETCH_FAILURE" | "MUTUAL_FRIENDS_FETCH_START" | "MUTUAL_FRIENDS_FETCH_SUCCESS" | "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE" | "NEW_PAYMENT_SOURCE_CLEAR_ERROR" | "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE" | "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED" | "NEWLY_ADDED_EMOJI_SEEN_PENDING" | "NEWLY_ADDED_EMOJI_SEEN_UPDATED" | "NOTICE_DISABLE" | "NOTICE_DISMISS" | "NOTICE_SHOW" | "NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS" | "NOTIFICATION_CENTER_ITEM_COMPLETED" | "NOTIFICATION_CENTER_ITEM_CREATE" | "NOTIFICATION_CENTER_ITEM_DELETE" | "NOTIFICATION_CENTER_ITEM_DELETE_FAILURE" | "NOTIFICATION_CENTER_ITEMS_ACK" | "NOTIFICATION_CENTER_ITEMS_ACK_FAILURE" | "NOTIFICATION_CENTER_ITEMS_LOCAL_ACK" | "NOTIFICATION_CENTER_REFRESH" | "NOTIFICATION_CENTER_SET_ACTIVE" | "NOTIFICATION_CENTER_SET_TAB" | "NOTIFICATION_CENTER_TAB_FOCUSED" | "NOTIFICATION_CLICK" | "NOTIFICATION_CREATE" | "NOTIFICATION_SETTINGS_MODAL_CLOSE" | "NOTIFICATION_SETTINGS_UPDATE" | "NOTIFICATIONS_SET_DESKTOP_TYPE" | "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE" | "NOTIFICATIONS_SET_DISABLED_SOUNDS" | "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL" | "NOTIFICATIONS_SET_PERMISSION_STATE" | "NOTIFICATIONS_SET_TASKBAR_FLASH" | "NOTIFICATIONS_SET_TTS_TYPE" | "NOTIFICATIONS_TOGGLE_ALL_DISABLED" | "NOW_PLAYING_MOUNTED" | "NOW_PLAYING_UNMOUNTED" | "NUF_COMPLETE" | "NUF_NEW_USER" | "OAUTH2_TOKEN_REVOKE" | "ONLINE_GUILD_MEMBER_COUNT_UPDATE" | "OUTBOUND_PROMOTION_NOTICE_DISMISS" | "OUTBOUND_PROMOTIONS_SEEN" | "OVERLAY_ACTIVATE_REGION" | "OVERLAY_CALL_PRIVATE_CHANNEL" | "OVERLAY_CRASHED" | "OVERLAY_DEACTIVATE_ALL_REGIONS" | "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" | "OVERLAY_FOCUSED" | "OVERLAY_INCOMPATIBLE_APP" | "OVERLAY_INITIALIZE" | "OVERLAY_JOIN_GAME" | "OVERLAY_MESSAGE_EVENT_ACTION" | "OVERLAY_NOTIFICATION_EVENT" | "OVERLAY_NOTIFY_READY_TO_SHOW" | "OVERLAY_READY" | "OVERLAY_SELECT_CALL" | "OVERLAY_SELECT_CHANNEL" | "OVERLAY_SET_ASSOCIATED_GAME" | "OVERLAY_SET_AVATAR_SIZE_MODE" | "OVERLAY_SET_CLICK_ZONES" | "OVERLAY_SET_DISPLAY_NAME_MODE" | "OVERLAY_SET_DISPLAY_USER_MODE" | "OVERLAY_SET_ENABLED" | "OVERLAY_SET_INPUT_LOCKED" | "OVERLAY_SET_NOT_IDLE" | "OVERLAY_SET_NOTIFICATION_POSITION_MODE" | "OVERLAY_SET_PREVIEW_IN_GAME_MODE" | "OVERLAY_SET_SHOW_KEYBIND_INDICATORS" | "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE" | "OVERLAY_SET_TEXT_WIDGET_OPACITY" | "OVERLAY_SET_UI_LOCKED" | "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" | "OVERLAY_START_SESSION" | "OVERLAY_SUCCESSFULLY_SHOWN" | "OVERLAY_WIDGET_CHANGED" | "PASSIVE_UPDATE_V2" | "PASSWORD_UPDATED" | "PASSWORDLESS_FAILURE" | "PASSWORDLESS_START" | "PAYMENT_AUTHENTICATION_CLEAR_ERROR" | "PAYMENT_AUTHENTICATION_ERROR" | "PAYMENT_UPDATE" | "PERMISSION_CLEAR_ELEVATED_PROCESS" | "PERMISSION_CLEAR_PTT_ADMIN_WARNING" | "PERMISSION_CLEAR_SUPPRESS_WARNING" | "PERMISSION_CLEAR_VAD_WARNING" | "PERMISSION_CONTINUE_NONELEVATED_PROCESS" | "PERMISSION_REQUEST_ELEVATED_PROCESS" | "PHONE_SET_COUNTRY_CODE" | "PICTURE_IN_PICTURE_CLOSE" | "PICTURE_IN_PICTURE_HIDE" | "PICTURE_IN_PICTURE_MOVE" | "PICTURE_IN_PICTURE_OPEN" | "PICTURE_IN_PICTURE_SHOW" | "PICTURE_IN_PICTURE_UPDATE_RECT" | "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW" | "POGGERMODE_ACHIEVEMENT_UNLOCK" | "POGGERMODE_SETTINGS_UPDATE" | "POGGERMODE_TEMPORARILY_DISABLED" | "POGGERMODE_UPDATE_COMBO" | "POGGERMODE_UPDATE_MESSAGE_COMBO" | "POPOUT_WINDOW_CLOSE" | "POPOUT_WINDOW_OPEN" | "POPOUT_WINDOW_SET_ALWAYS_ON_TOP" | "POST_CONNECTION_OPEN" | "PREMIUM_MARKETING_DATA_READY" | "PREMIUM_MARKETING_PREVIEW" | "PREMIUM_PAYMENT_ERROR_CLEAR" | "PREMIUM_PAYMENT_MODAL_CLOSE" | "PREMIUM_PAYMENT_MODAL_OPEN" | "PREMIUM_PAYMENT_SUBSCRIBE_FAIL" | "PREMIUM_PAYMENT_SUBSCRIBE_START" | "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS" | "PREMIUM_PAYMENT_UPDATE_FAIL" | "PREMIUM_PAYMENT_UPDATE_SUCCESS" | "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE" | "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS" | "PREMIUM_PERKS_DEMO_COMPLETE" | "PREMIUM_PERKS_DEMO_OVERRIDE" | "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" | "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS" | "PREMIUM_REQUIRED_MODAL_CLOSE" | "PREMIUM_REQUIRED_MODAL_OPEN" | "PRESENCE_UPDATES" | "PRESENCES_REPLACE" | "PRIVATE_CHANNEL_INTEGRATION_CREATE" | "PRIVATE_CHANNEL_INTEGRATION_DELETE" | "PRIVATE_CHANNEL_INTEGRATION_UPDATE" | "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY" | "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT" | "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER" | "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL" | "PROFILE_EFFECTS_SET_TRY_IT_OUT" | "PROFILE_PANEL_TOGGLE_SECTION" | "PROXY_BLOCKED_REQUEST" | "PUBLIC_UPSELL_NOTICE_DISMISS" | "PURCHASED_ITEMS_FESTIVITY_FETCH_WOW_MOMENT_MEDIA_SUCCESS" | "PURCHASED_ITEMS_FESTIVITY_IS_FETCHING_WOW_MOMENT_MEDIA" | "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT" | "PUSH_NOTIFICATION_CLICK" | "QUESTS_CLAIM_REWARD_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_BEGIN" | "QUESTS_CLAIM_REWARD_CODE_FAILURE" | "QUESTS_CLAIM_REWARD_CODE_SUCCESS" | "QUESTS_CLAIM_REWARD_FAILURE" | "QUESTS_CLAIM_REWARD_SUCCESS" | "QUESTS_DELIVERY_OVERRIDE" | "QUESTS_DISMISS_CONTENT_BEGIN" | "QUESTS_DISMISS_CONTENT_FAILURE" | "QUESTS_DISMISS_CONTENT_SUCCESS" | "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE" | "QUESTS_ENROLL_BEGIN" | "QUESTS_ENROLL_FAILURE" | "QUESTS_ENROLL_SUCCESS" | "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" | "QUESTS_FETCH_CURRENT_QUESTS_FAILURE" | "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS" | "QUESTS_FETCH_REWARD_CODE_BEGIN" | "QUESTS_FETCH_REWARD_CODE_FAILURE" | "QUESTS_FETCH_REWARD_CODE_SUCCESS" | "QUESTS_OPTIMISTIC_PROGRESS_UPDATE" | "QUESTS_PREVIEW_UPDATE_SUCCESS" | "QUESTS_SEND_HEARTBEAT_FAILURE" | "QUESTS_SEND_HEARTBEAT_SUCCESS" | "QUESTS_USER_STATUS_UPDATE" | "QUEUE_INTERACTION_COMPONENT_STATE" | "QUICKSWITCHER_HIDE" | "QUICKSWITCHER_SEARCH" | "QUICKSWITCHER_SELECT" | "QUICKSWITCHER_SHOW" | "QUICKSWITCHER_SWITCH_TO" | "RECEIVE_CHANNEL_AFFINITIES" | "RECEIVE_CHANNEL_SUMMARIES" | "RECEIVE_CHANNEL_SUMMARIES_BULK" | "RECEIVE_CHANNEL_SUMMARY" | "RECENT_MENTION_DELETE" | "RECOMPUTE_READ_STATES" | "REFERRALS_FETCH_ELIGIBLE_USER_FAIL" | "REFERRALS_FETCH_ELIGIBLE_USER_START" | "REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS" | "REGISTER" | "REGISTER_FAILURE" | "REGISTER_SAVE_FORM" | "REGISTER_SUCCESS" | "RELATIONSHIP_ADD" | "RELATIONSHIP_PENDING_INCOMING_REMOVED" | "RELATIONSHIP_REMOVE" | "RELATIONSHIP_UPDATE" | "REMOTE_COMMAND" | "REMOTE_SESSION_CONNECT" | "REMOTE_SESSION_DISCONNECT" | "REMOVE_AUTOMOD_MESSAGE_NOTICE" | "REQUEST_CHANNEL_AFFINITIES" | "REQUEST_CHANNEL_SUMMARIES" | "REQUEST_CHANNEL_SUMMARIES_BULK" | "REQUEST_CHANNEL_SUMMARY" | "REQUEST_FORUM_UNREADS" | "REQUEST_SOUNDBOARD_SOUNDS" | "RESET_NOTIFICATION_CENTER" | "RESET_PAYMENT_ID" | "RESET_PREVIEW_CLIENT_THEME" | "RESET_SOCKET" | "RESORT_THREADS" | "RPC_APP_AUTHENTICATED" | "RPC_APP_CONNECTED" | "RPC_APP_DISCONNECTED" | "RPC_NOTIFICATION_CREATE" | "RPC_SERVER_READY" | "RTC_CONNECTION_CLIENT_DISCONNECT" | "RTC_CONNECTION_FLAGS" | "RTC_CONNECTION_LOSS_RATE" | "RTC_CONNECTION_PING" | "RTC_CONNECTION_PLATFORM" | "RTC_CONNECTION_STATE" | "RTC_CONNECTION_UPDATE_ID" | "RTC_CONNECTION_USER_CREATE" | "RTC_CONNECTION_VIDEO" | "RTC_DEBUG_MODAL_CLOSE" | "RTC_DEBUG_MODAL_OPEN" | "RTC_DEBUG_MODAL_OPEN_REPLAY" | "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH" | "RTC_DEBUG_MODAL_SET_SECTION" | "RTC_DEBUG_MODAL_UPDATE" | "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT" | "RTC_DEBUG_POPOUT_WINDOW_OPEN" | "RTC_DEBUG_SET_RECORDING_FLAG" | "RTC_DEBUG_SET_SIMULCAST_OVERRIDE" | "RTC_LATENCY_TEST_COMPLETE" | "RTC_SPEED_TEST_START_TEST" | "RTC_SPEED_TEST_STOP_TEST" | "RUNNING_GAME_ADD_OVERRIDE" | "RUNNING_GAME_DELETE_ENTRY" | "RUNNING_GAME_EDIT_NAME" | "RUNNING_GAME_TOGGLE_DETECTION" | "RUNNING_GAME_TOGGLE_OVERLAY" | "RUNNING_GAMES_CHANGE" | "RUNNING_STREAMER_TOOLS_CHANGE" | "SAFETY_HUB_APPEAL_CLOSE" | "SAFETY_HUB_APPEAL_OPEN" | "SAFETY_HUB_APPEAL_SIGNAL_CUSTOM_INPUT_CHANGE" | "SAFETY_HUB_APPEAL_SIGNAL_SELECT" | "SAFETY_HUB_FETCH_CLASSIFICATION_FAILURE" | "SAFETY_HUB_FETCH_CLASSIFICATION_START" | "SAFETY_HUB_FETCH_CLASSIFICATION_SUCCESS" | "SAFETY_HUB_FETCH_FAILURE" | "SAFETY_HUB_FETCH_START" | "SAFETY_HUB_FETCH_SUCCESS" | "SAFETY_HUB_REQUEST_REVIEW_FAILURE" | "SAFETY_HUB_REQUEST_REVIEW_START" | "SAFETY_HUB_REQUEST_REVIEW_SUCCESS" | "SAVE_LAST_NON_VOICE_ROUTE" | "SAVE_LAST_ROUTE" | "SAVED_MESSAGES_UPDATE" | "SEARCH_ADD_HISTORY" | "SEARCH_AUTOCOMPLETE_QUERY_UPDATE" | "SEARCH_CLEAR_HISTORY" | "SEARCH_EDITOR_STATE_CHANGE" | "SEARCH_EDITOR_STATE_CLEAR" | "SEARCH_ENSURE_SEARCH_STATE" | "SEARCH_FINISH" | "SEARCH_INDEXING" | "SEARCH_MODAL_CLOSE" | "SEARCH_MODAL_OPEN" | "SEARCH_REMOVE_HISTORY" | "SEARCH_SCREEN_OPEN" | "SEARCH_SET_SHOW_BLOCKED_RESULTS" | "SEARCH_START" | "SELECT_HOME_RESOURCE_CHANNEL" | "SELECT_NEW_MEMBER_ACTION_CHANNEL" | "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE" | "SELF_PRESENCE_STORE_UPDATE" | "SESSIONS_REPLACE" | "SET_CHANNEL_BITRATE" | "SET_CHANNEL_VIDEO_QUALITY_MODE" | "SET_CONSENT_REQUIRED" | "SET_CREATED_AT_OVERRIDE" | "SET_GUILD_FOLDER_EXPANDED" | "SET_HIGHLIGHTED_SUMMARY" | "SET_INTERACTION_COMPONENT_STATE" | "SET_LOCATION_METADATA" | "SET_LOGIN_CREDENTIALS" | "SET_NATIVE_PERMISSION" | "SET_PENDING_REPLY_SHOULD_MENTION" | "SET_PREMIUM_TYPE_OVERRIDE" | "SET_RECENT_MENTIONS_FILTER" | "SET_RECENT_MENTIONS_STALE" | "SET_RECENTLY_ACTIVE_COLLAPSED" | "SET_SELECTED_SUMMARY" | "SET_SOUNDPACK" | "SET_STREAM_APP_INTENT" | "SET_SUMMARY_FEEDBACK" | "SET_TTS_SPEECH_RATE" | "SET_VAD_PERMISSION" | "SHARED_CANVAS_CLEAR_DRAWABLES" | "SHARED_CANVAS_DRAW_LINE_POINT" | "SHARED_CANVAS_SET_DRAW_MODE" | "SHARED_CANVAS_UPDATE_EMOJI_HOSE" | "SHARED_CANVAS_UPDATE_LINE_POINTS" | "SHOW_ACTION_SHEET" | "SHOW_ACTION_SHEET_QUICK_SWITCHER" | "SHOW_KEYBOARD_SHORTCUTS" | "SIDEBAR_CLOSE" | "SIDEBAR_CLOSE_GUILD" | "SIDEBAR_CREATE_THREAD" | "SIDEBAR_VIEW_CHANNEL" | "SIDEBAR_VIEW_GUILD" | "SKU_FETCH_FAIL" | "SKU_FETCH_START" | "SKU_FETCH_SUCCESS" | "SKU_PURCHASE_AWAIT_CONFIRMATION" | "SKU_PURCHASE_CLEAR_ERROR" | "SKU_PURCHASE_FAIL" | "SKU_PURCHASE_MODAL_CLOSE" | "SKU_PURCHASE_MODAL_OPEN" | "SKU_PURCHASE_PREVIEW_FETCH" | "SKU_PURCHASE_PREVIEW_FETCH_FAILURE" | "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS" | "SKU_PURCHASE_SHOW_CONFIRMATION_STEP" | "SKU_PURCHASE_START" | "SKU_PURCHASE_SUCCESS" | "SKU_PURCHASE_UPDATE_IS_GIFT" | "SKUS_FETCH_SUCCESS" | "SLOWMODE_RESET_COOLDOWN" | "SLOWMODE_SET_COOLDOWN" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" | "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS" | "SOUNDBOARD_MUTE_JOIN_SOUND" | "SOUNDBOARD_SET_OVERLAY_ENABLED" | "SOUNDBOARD_SOUNDS_RECEIVED" | "SPEAK_MESSAGE" | "SPEAK_TEXT" | "SPEAKING" | "SPEAKING_MESSAGE" | "SPEED_TEST_CREATE" | "SPEED_TEST_DELETE" | "SPEED_TEST_SERVER_UPDATE" | "SPELLCHECK_LEARN_WORD" | "SPELLCHECK_TOGGLE" | "SPELLCHECK_UNLEARN_WORD" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN" | "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE" | "SPOTIFY_NEW_TRACK" | "SPOTIFY_PLAYER_PAUSE" | "SPOTIFY_PLAYER_PLAY" | "SPOTIFY_PLAYER_STATE" | "SPOTIFY_PROFILE_UPDATE" | "SPOTIFY_SET_ACTIVE_DEVICE" | "SPOTIFY_SET_DEVICES" | "SPOTIFY_SET_PROTOCOL_REGISTERED" | "STAGE_INSTANCE_CREATE" | "STAGE_INSTANCE_DELETE" | "STAGE_INSTANCE_UPDATE" | "STAGE_MUSIC_MUTE" | "STAGE_MUSIC_PLAY" | "START_BROADCAST_STREAM" | "START_SESSION" | "STATUS_PAGE_INCIDENT" | "STATUS_PAGE_SCHEDULED_MAINTENANCE" | "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK" | "STICKER_FETCH_SUCCESS" | "STICKER_PACK_FETCH_SUCCESS" | "STICKER_PACKS_FETCH_START" | "STICKER_PACKS_FETCH_SUCCESS" | "STICKER_TRACK_USAGE" | "STOP_SPEAKING" | "STORE_LISTING_FETCH_SUCCESS" | "STORE_LISTINGS_FETCH_SUCCESS" | "STREAM_CLOSE" | "STREAM_CREATE" | "STREAM_DELETE" | "STREAM_LAYOUT_UPDATE" | "STREAM_PREVIEW_FETCH_FAIL" | "STREAM_PREVIEW_FETCH_START" | "STREAM_PREVIEW_FETCH_SUCCESS" | "STREAM_SERVER_UPDATE" | "STREAM_SET_PAUSED" | "STREAM_START" | "STREAM_STATS_UPDATE" | "STREAM_STOP" | "STREAM_TIMED_OUT" | "STREAM_UPDATE" | "STREAM_UPDATE_SELF_HIDDEN" | "STREAM_UPDATE_SETTINGS" | "STREAM_WATCH" | "STREAMER_MODE_UPDATE" | "STREAMING_UPDATE" | "STRIPE_TOKEN_FAILURE" | "SUBSCRIPTION_PLANS_FETCH" | "SUBSCRIPTION_PLANS_FETCH_FAILURE" | "SUBSCRIPTION_PLANS_FETCH_SUCCESS" | "SUBSCRIPTION_PLANS_RESET" | "SURVEY_FETCHED" | "SURVEY_HIDE" | "SURVEY_OVERRIDE" | "SURVEY_SEEN" | "SYSTEM_THEME_CHANGE" | "THERMAL_STATE_CHANGE" | "THREAD_CREATE" | "THREAD_CREATE_LOCAL" | "THREAD_DELETE" | "THREAD_LIST_SYNC" | "THREAD_MEMBER_LIST_UPDATE" | "THREAD_MEMBER_LOCAL_UPDATE" | "THREAD_MEMBER_UPDATE" | "THREAD_MEMBERS_UPDATE" | "THREAD_SETTINGS_DRAFT_CHANGE" | "THREAD_UPDATE" | "TOGGLE_GUILD_FOLDER_EXPAND" | "TOGGLE_OVERLAY_CANVAS" | "TOGGLE_TOPICS_BAR" | "TOP_EMOJIS_FETCH" | "TOP_EMOJIS_FETCH_SUCCESS" | "TRACK" | "TRUNCATE_MENTIONS" | "TRUNCATE_MESSAGES" | "TRY_ACK" | "TUTORIAL_INDICATOR_DISMISS" | "TUTORIAL_INDICATOR_HIDE" | "TUTORIAL_INDICATOR_SHOW" | "TUTORIAL_INDICATOR_SUPPRESS_ALL" | "TYPING_START" | "TYPING_START_LOCAL" | "TYPING_STOP" | "TYPING_STOP_LOCAL" | "UNREAD_SETTING_NOTICE_CHANNEL_VISIT" | "UNREAD_SETTING_NOTICE_RENDERED" | "UNSYNCED_USER_SETTINGS_UPDATE" | "UNVERIFIED_GAME_UPDATE" | "UPCOMING_GUILD_EVENT_NOTICE_HIDE" | "UPCOMING_GUILD_EVENT_NOTICE_SEEN" | "UPDATE_AVAILABLE" | "UPDATE_BACKGROUND_GRADIENT_PRESET" | "UPDATE_CHANNEL_DIMENSIONS" | "UPDATE_CHANNEL_LIST_DIMENSIONS" | "UPDATE_CHANNEL_LIST_SUBTITLES" | "UPDATE_CLIENT_PREMIUM_TYPE" | "UPDATE_CONSENTS" | "UPDATE_DOWNLOADED" | "UPDATE_ERROR" | "UPDATE_GUILD_LIST_DIMENSIONS" | "UPDATE_HANG_STATUS" | "UPDATE_HANG_STATUS_CUSTOM" | "UPDATE_MANUALLY" | "UPDATE_MOBILE_PENDING_THEME_INDEX" | "UPDATE_NOT_AVAILABLE" | "UPDATE_TOKEN" | "UPDATE_VISIBLE_MESSAGES" | "UPLOAD_ATTACHMENT_ADD_FILES" | "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES" | "UPLOAD_ATTACHMENT_POP_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILE" | "UPLOAD_ATTACHMENT_REMOVE_FILES" | "UPLOAD_ATTACHMENT_SET_FILE" | "UPLOAD_ATTACHMENT_SET_UPLOADS" | "UPLOAD_ATTACHMENT_UPDATE_FILE" | "UPLOAD_CANCEL_REQUEST" | "UPLOAD_COMPLETE" | "UPLOAD_COMPRESSION_PROGRESS" | "UPLOAD_FAIL" | "UPLOAD_FILE_UPDATE" | "UPLOAD_ITEM_CANCEL_REQUEST" | "UPLOAD_PROGRESS" | "UPLOAD_RESTORE_FAILED_UPLOAD" | "UPLOAD_START" | "USER_ACHIEVEMENT_UPDATE" | "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS" | "USER_APPLICATION_REMOVE" | "USER_APPLICATION_UPDATE" | "USER_APPLIED_BOOSTS_FETCH_START" | "USER_APPLIED_BOOSTS_FETCH_SUCCESS" | "USER_AUTHORIZED_APPS_UPDATE" | "USER_CONNECTION_UPDATE" | "USER_CONNECTIONS_INTEGRATION_JOINING" | "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR" | "USER_CONNECTIONS_UPDATE" | "USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR" | "USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW" | "USER_GUILD_JOIN_REQUEST_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE" | "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK" | "USER_GUILD_SETTINGS_FULL_UPDATE" | "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE" | "USER_GUILD_SETTINGS_GUILD_UPDATE" | "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES" | "USER_JOIN_REQUEST_GUILDS_FETCH" | "USER_NON_CHANNEL_ACK" | "USER_NOTE_LOAD_START" | "USER_NOTE_LOADED" | "USER_NOTE_UPDATE" | "USER_PAYMENT_BROWSER_CHECKOUT_DONE" | "USER_PAYMENT_BROWSER_CHECKOUT_STARTED" | "USER_PAYMENT_CLIENT_ADD" | "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" | "USER_PROFILE_EFFECTS_FETCH" | "USER_PROFILE_EFFECTS_FETCH_FAILURE" | "USER_PROFILE_EFFECTS_FETCH_SUCCESS" | "USER_PROFILE_FETCH_FAILURE" | "USER_PROFILE_FETCH_START" | "USER_PROFILE_FETCH_SUCCESS" | "USER_PROFILE_MODAL_CLOSE" | "USER_PROFILE_MODAL_OPEN" | "USER_PROFILE_UPDATE_FAILURE" | "USER_PROFILE_UPDATE_START" | "USER_PROFILE_UPDATE_SUCCESS" | "USER_RECENT_GAMES_FETCH_ERROR" | "USER_RECENT_GAMES_FETCH_START" | "USER_RECENT_GAMES_FETCH_SUCCESS" | "USER_RECENT_GAMES_UPDATE_LOCAL" | "USER_REQUIRED_ACTION_UPDATE" | "USER_SETTINGS_ACCOUNT_CLOSE" | "USER_SETTINGS_ACCOUNT_INIT" | "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" | "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER" | "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO" | "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS" | "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID" | "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS" | "USER_SETTINGS_ACCOUNT_SUBMIT" | "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE" | "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" | "USER_SETTINGS_CLEAR_ERRORS" | "USER_SETTINGS_LOCALE_OVERRIDE" | "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION" | "USER_SETTINGS_MODAL_CLEAR_SUBSECTION" | "USER_SETTINGS_MODAL_CLOSE" | "USER_SETTINGS_MODAL_INIT" | "USER_SETTINGS_MODAL_OPEN" | "USER_SETTINGS_MODAL_RESET" | "USER_SETTINGS_MODAL_SET_SECTION" | "USER_SETTINGS_MODAL_SUBMIT" | "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" | "USER_SETTINGS_MODAL_SUBMIT_FAILURE" | "USER_SETTINGS_MODAL_UPDATE_ACCOUNT" | "USER_SETTINGS_OVERRIDE_APPLY" | "USER_SETTINGS_OVERRIDE_CLEAR" | "USER_SETTINGS_PROTO_ENQUEUE_UPDATE" | "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY" | "USER_SETTINGS_PROTO_UPDATE" | "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO" | "USER_SETTINGS_RESET_ALL_PENDING" | "USER_SETTINGS_RESET_ALL_TRY_IT_OUT" | "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" | "USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION" | "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" | "USER_SOUNDBOARD_SET_VOLUME" | "USER_TENURE_REWARD_STATUS_DELETE" | "USER_TENURE_REWARD_STATUS_RESET" | "USER_TENURE_REWARD_SYNC_START" | "USER_TENURE_REWARD_SYNC_SUCCESS" | "USER_UPDATE" | "VERIFY_FAILURE" | "VERIFY_SUCCESS" | "VIDEO_FILTER_ASSET_DELETE_SUCCESS" | "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS" | "VIDEO_FILTER_ASSETS_FETCH_SUCCESS" | "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION" | "VIEW_HISTORY_MARK_VIEW" | "VOICE_CATEGORY_COLLAPSE" | "VOICE_CATEGORY_EXPAND" | "VOICE_CHANNEL_EFFECT_CLEAR" | "VOICE_CHANNEL_EFFECT_RECENT_EMOJI" | "VOICE_CHANNEL_EFFECT_SEND" | "VOICE_CHANNEL_EFFECT_SENT_LOCAL" | "VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE" | "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP" | "VOICE_CHANNEL_SELECT" | "VOICE_CHANNEL_STATUS_UPDATE" | "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATES" | "WAIT_FOR_REMOTE_SESSION" | "WEBHOOK_CREATE" | "WEBHOOK_DELETE" | "WEBHOOK_UPDATE" | "WEBHOOKS_FETCHING" | "WEBHOOKS_UPDATE" | "WELCOME_SCREEN_FETCH_FAIL" | "WELCOME_SCREEN_FETCH_START" | "WELCOME_SCREEN_FETCH_SUCCESS" | "WELCOME_SCREEN_SETTINGS_CLEAR" | "WELCOME_SCREEN_SETTINGS_RESET" | "WELCOME_SCREEN_SETTINGS_UPDATE" | "WELCOME_SCREEN_SUBMIT" | "WELCOME_SCREEN_SUBMIT_FAILURE" | "WELCOME_SCREEN_SUBMIT_SUCCESS" | "WELCOME_SCREEN_UPDATE" | "WELCOME_SCREEN_VIEW" | "WINDOW_FOCUS" | "WINDOW_FULLSCREEN_CHANGE" | "WINDOW_HIDDEN" | "WINDOW_INIT" | "WINDOW_RESIZED" | "WINDOW_UNLOAD" | "WINDOW_VISIBILITY_CHANGE" | "WRITE_CACHES"; diff --git a/packages/discord-types/src/flux/index.d.ts b/packages/discord-types/src/flux/index.ts similarity index 65% rename from packages/discord-types/src/flux/index.d.ts rename to packages/discord-types/src/flux/index.ts index 0262f50d3..8ede06f52 100644 --- a/packages/discord-types/src/flux/index.d.ts +++ b/packages/discord-types/src/flux/index.ts @@ -4,7 +4,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -export * from "./fluxActionHandlers"; +export * from "./FluxActionHandlersGraph"; +export * from "./FluxActionLog"; +export * from "./FluxActionLogger"; export * from "./fluxActions"; export * from "./FluxDispatcher"; export * from "./FluxEmitter"; diff --git a/packages/discord-types/src/general/Activity.d.ts b/packages/discord-types/src/general/Activity.ts similarity index 92% rename from packages/discord-types/src/general/Activity.d.ts rename to packages/discord-types/src/general/Activity.ts index a8b865daa..aa688b6c2 100644 --- a/packages/discord-types/src/general/Activity.d.ts +++ b/packages/discord-types/src/general/Activity.ts @@ -14,6 +14,7 @@ export interface Activity { emoji?: ActivityEmoji; flags?: ActivityFlags; id: string; + metadata?: Record; name: string; party?: ActivityParty; platform?: ActivityGamePlatform; @@ -45,7 +46,7 @@ export interface ActivityGuildEmoji { name: string; } -export const enum ActivityFlags { +export enum ActivityFlags { INSTANCE = 1 << 0, JOIN = 1 << 1, SYNC = 1 << 4, @@ -61,7 +62,7 @@ export interface ActivityParty { } // Original name: ActivityGamePlatforms -export const enum ActivityGamePlatform { +export enum ActivityGamePlatform { ANDROID = "android", DESKTOP = "desktop", EMBEDDED = "embedded", @@ -72,7 +73,7 @@ export const enum ActivityGamePlatform { XBOX = "xbox", } -export const enum ActivityPlatform { +export enum ActivityPlatform { DESKTOP = "desktop", MOBILE = "mobile", } @@ -83,7 +84,7 @@ export interface ActivityTimestamps { } // Original name: ActivityTypes -export const enum ActivityType { +export enum ActivityType { PLAYING = 0, STREAMING = 1, LISTENING = 2, diff --git a/packages/discord-types/src/general/ApplicationCommand.d.ts b/packages/discord-types/src/general/ApplicationCommand.ts similarity index 97% rename from packages/discord-types/src/general/ApplicationCommand.d.ts rename to packages/discord-types/src/general/ApplicationCommand.ts index 6ac061b59..f574d0693 100644 --- a/packages/discord-types/src/general/ApplicationCommand.d.ts +++ b/packages/discord-types/src/general/ApplicationCommand.ts @@ -26,13 +26,13 @@ export type ApplicationCommand; -export class ApplicationRecord< +export declare class ApplicationRecord< OwnProperties extends ApplicationRecordOwnProperties = ApplicationRecordOwnProperties > extends ImmutableRecord { /** @todo */ @@ -85,7 +85,7 @@ export interface EmbeddedActivityConfig { } // Original name: EmbeddedActivitySupportedPlatforms -export const enum EmbeddedActivitySupportedPlatform { +export enum EmbeddedActivitySupportedPlatform { ANDROID = "android", IOS = "ios", WEB = "web", @@ -99,13 +99,13 @@ export interface EmbeddedActivityClientPlatformConfig { } // Original name: EmbeddedActivityLabelTypes -export const enum EmbeddedActivityLabelType { +export enum EmbeddedActivityLabelType { NONE = 0, NEW = 1, UPDATED = 2, } -export const enum OrientationLockState { +export enum OrientationLockState { UNLOCKED = 1, PORTRAIT = 2, LANDSCAPE = 3, @@ -118,7 +118,7 @@ export interface ApplicationExecutable { os: string; } -export const enum ApplicationIntegrationType { +export enum ApplicationIntegrationType { GUILD_INSTALL = 0, USER_INSTALL = 1, } @@ -128,7 +128,8 @@ export interface ApplicationIntegrationTypeConfig { } // Original name: OAuth2Scopes -export const enum OAuth2Scope { +export enum OAuth2Scope { + ACCOUNT_GLOBAL_NAME_UPDATE = "account.global_name.update", ACTIVITIES_READ = "activities.read", ACTIVITIES_WRITE = "activities.write", APPLICATIONS_BUILDS_READ = "applications.builds.read", @@ -144,6 +145,7 @@ export const enum OAuth2Scope { DM_CHANNELS_MESSAGES_WRITE = "dm_channels.messages.write", DM_CHANNELS_READ = "dm_channels.read", EMAIL = "email", + GATEWAY_CONNECT = "gateway.connect", GDM_JOIN = "gdm.join", GUILDS = "guilds", GUILDS_JOIN = "guilds.join", @@ -151,6 +153,7 @@ export const enum OAuth2Scope { IDENTIFY = "identify", MESSAGES_READ = "messages.read", OPENID = "openid", + PAYMENT_SOURCES_COUNTRY_CODE = "payment_sources.country_code", PRESENCES_READ = "presences.read", PRESENCES_WRITE = "presences.write", RELATIONSHIPS_READ = "relationships.read", @@ -175,7 +178,7 @@ export interface ApplicationInstallParams { scopes: OAuth2Scope[]; } -export const enum ApplicationFlags { +export enum ApplicationFlags { EMBEDDED_RELEASED = 1 << 1, EMBEDDED_IAP = 1 << 3, APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE = 1 << 6, @@ -191,13 +194,13 @@ export const enum ApplicationFlags { SOCIAL_LAYER_INTEGRATION = 1 << 27, } -export const enum ApplicationOverlayMethodFlags { +export enum ApplicationOverlayMethodFlags { DEFAULT = 0, OUT_OF_PROCESS = 1 << 0, } // Original name: ApplicationTypes -export const enum ApplicationType { +export enum ApplicationType { GAME = 1, TICKETED_EVENTS = 3, GUILD_ROLE_SUBSCRIPTIONS = 4, diff --git a/packages/discord-types/src/general/Clan.d.ts b/packages/discord-types/src/general/Clan.ts similarity index 92% rename from packages/discord-types/src/general/Clan.d.ts rename to packages/discord-types/src/general/Clan.ts index bed54ad7b..74a8aa708 100644 --- a/packages/discord-types/src/general/Clan.d.ts +++ b/packages/discord-types/src/general/Clan.ts @@ -28,7 +28,7 @@ export interface Clan { wildcardDescriptors: string[]; } -export const enum ClanBadgeKind { +export enum ClanBadgeKind { SWORD = 0, WATER_DROP = 1, SKULL = 2, @@ -52,7 +52,7 @@ export const enum ClanBadgeKind { WIND = 20, } -export const enum ClanBannerKind { +export enum ClanBannerKind { NIGHT_SKY = 0, CASTLE = 1, WORLD_MAP = 2, @@ -65,7 +65,7 @@ export const enum ClanBannerKind { } // Original name: ClanPlaystyles -export const enum ClanPlaystyle { +export enum ClanPlaystyle { NONE = 0, SOCIAL = 1, CASUAL = 2, diff --git a/packages/discord-types/src/general/CompanyRecord.d.ts b/packages/discord-types/src/general/CompanyRecord.ts similarity index 94% rename from packages/discord-types/src/general/CompanyRecord.d.ts rename to packages/discord-types/src/general/CompanyRecord.ts index 81f403ab3..7a3a6e04c 100644 --- a/packages/discord-types/src/general/CompanyRecord.d.ts +++ b/packages/discord-types/src/general/CompanyRecord.ts @@ -8,7 +8,7 @@ import type { ImmutableRecord } from "./ImmutableRecord"; export type CompanyRecordOwnProperties = Pick; -export class CompanyRecord< +export declare class CompanyRecord< OwnProperties extends CompanyRecordOwnProperties = CompanyRecordOwnProperties > extends ImmutableRecord { constructor(companyProperties: CompanyRecordOwnProperties); diff --git a/packages/discord-types/src/general/Draft.d.ts b/packages/discord-types/src/general/Draft.ts similarity index 97% rename from packages/discord-types/src/general/Draft.d.ts rename to packages/discord-types/src/general/Draft.ts index b53ce0f67..d53329c14 100644 --- a/packages/discord-types/src/general/Draft.d.ts +++ b/packages/discord-types/src/general/Draft.ts @@ -11,7 +11,7 @@ export type Draft : never; // Enum keys made screaming snake case for consistency. -export const enum DraftType { +export enum DraftType { CHANNEL_MESSAGE = 0, THREAD_SETTINGS = 1, FIRST_THREAD_MESSAGE = 2, diff --git a/packages/discord-types/src/general/Frecency.d.ts b/packages/discord-types/src/general/Frecency.ts similarity index 95% rename from packages/discord-types/src/general/Frecency.d.ts rename to packages/discord-types/src/general/Frecency.ts index 0fc3b2a08..8d2b52f8c 100644 --- a/packages/discord-types/src/general/Frecency.d.ts +++ b/packages/discord-types/src/general/Frecency.ts @@ -6,7 +6,7 @@ import type { Nullish } from "../internal"; -export class Frecency { +export declare class Frecency { constructor(options: { afterCompute: Frecency["afterCompute"]; computeBonus: Frecency["computeBonus"]; diff --git a/packages/discord-types/src/general/GuildMember.d.ts b/packages/discord-types/src/general/GuildMember.ts similarity index 97% rename from packages/discord-types/src/general/GuildMember.d.ts rename to packages/discord-types/src/general/GuildMember.ts index dd66d25fa..d4ddbc447 100644 --- a/packages/discord-types/src/general/GuildMember.d.ts +++ b/packages/discord-types/src/general/GuildMember.ts @@ -28,7 +28,7 @@ export interface GuildMember { userId: string; } -export const enum GuildMemberFlags { +export enum GuildMemberFlags { DID_REJOIN = 1 << 0, COMPLETED_ONBOARDING = 1 << 1, BYPASSES_VERIFICATION = 1 << 2, diff --git a/packages/discord-types/src/general/GuildMemberProfile.d.ts b/packages/discord-types/src/general/GuildMemberProfile.ts similarity index 100% rename from packages/discord-types/src/general/GuildMemberProfile.d.ts rename to packages/discord-types/src/general/GuildMemberProfile.ts diff --git a/packages/discord-types/src/general/GuildRecord.d.ts b/packages/discord-types/src/general/GuildRecord.ts similarity index 94% rename from packages/discord-types/src/general/GuildRecord.d.ts rename to packages/discord-types/src/general/GuildRecord.ts index 3395813dc..4832a088c 100644 --- a/packages/discord-types/src/general/GuildRecord.d.ts +++ b/packages/discord-types/src/general/GuildRecord.ts @@ -12,7 +12,7 @@ import type { UserRecord } from "./UserRecord"; export type GuildRecordOwnProperties = Pick; -export class GuildRecord< +export declare class GuildRecord< OwnProperties extends GuildRecordOwnProperties = GuildRecordOwnProperties > extends ImmutableRecord { /** @todo */ @@ -22,8 +22,8 @@ export class GuildRecord< canHaveRaidActivityAlerts(): boolean; getApplicationId(): string | null; getEveryoneRoleId(): string; - getIconSource(iconSize?: number | undefined, canAnimate?: boolean | undefined): IconSource; - getIconURL(iconSize?: number | undefined, canAnimate?: boolean | undefined): string; + getIconSource(iconSize?: number | undefined, canAnimate?: boolean | undefined /* = false */): IconSource; + getIconURL(iconSize?: number | undefined, canAnimate?: boolean | undefined /* = false */): string; getMaxEmojiSlots(): number; getMaxRoleSubscriptionEmojiSlots(): number; getMaxSoundboardSlots(): number; @@ -76,7 +76,7 @@ export class GuildRecord< } // Original name: UserNotificationSettings -export const enum UserNotificationSetting { +export enum UserNotificationSetting { ALL_MESSAGES = 0, ONLY_MENTIONS = 1, NO_MESSAGES = 2, @@ -84,18 +84,18 @@ export const enum UserNotificationSetting { } // Original name: GuildExplicitContentFilterTypes -export const enum GuildExplicitContentFilterType { +export enum GuildExplicitContentFilterType { DISABLED = 0, MEMBERS_WITHOUT_ROLES = 1, ALL_MEMBERS = 2, } // Original name: GuildFeatures -export const enum GuildFeature { +export enum GuildFeature { ANIMATED_BANNER = "ANIMATED_BANNER", ANIMATED_ICON = "ANIMATED_ICON", - AUTOMOD_TRIGGER_USER_PROFILE = "AUTOMOD_TRIGGER_USER_PROFILE", AUTO_MODERATION = "AUTO_MODERATION", + AUTOMOD_TRIGGER_USER_PROFILE = "AUTOMOD_TRIGGER_USER_PROFILE", BANNER = "BANNER", BURST_REACTIONS = "BURST_REACTIONS", CHANNEL_ICON_EMOJIS_GENERATED = "CHANNEL_ICON_EMOJIS_GENERATED", @@ -131,14 +131,15 @@ export const enum GuildFeature { HAS_DIRECTORY_ENTRY = "HAS_DIRECTORY_ENTRY", HUB = "HUB", INTERNAL_EMPLOYEE_ONLY = "INTERNAL_EMPLOYEE_ONLY", - INVITES_DISABLED = "INVITES_DISABLED", INVITE_SPLASH = "INVITE_SPLASH", + INVITES_DISABLED = "INVITES_DISABLED", LINKED_TO_HUB = "LINKED_TO_HUB", MEMBER_VERIFICATION_GATE_ENABLED = "MEMBER_VERIFICATION_GATE_ENABLED", MORE_EMOJI = "MORE_EMOJI", + MORE_SOUNDBOARD = "MORE_SOUNDBOARD", MORE_STICKERS = "MORE_STICKERS", - NEWS = "NEWS", NEW_THREAD_PERMISSIONS = "NEW_THREAD_PERMISSIONS", + NEWS = "NEWS", NON_COMMUNITY_RAID_ALERTS = "NON_COMMUNITY_RAID_ALERTS", PARTNERED = "PARTNERED", PREVIEW_ENABLED = "PREVIEW_ENABLED", @@ -164,19 +165,19 @@ export const enum GuildFeature { } // Original name: GuildHubTypes -export const enum GuildHubType { +export enum GuildHubType { DEFAULT = 0, HIGH_SCHOOL = 1, COLLEGE = 2, } // Original name: MFALevels -export const enum MFALevel { +export enum MFALevel { NONE = 0, ELEVATED = 1, } -export const enum GuildNSFWContentLevel { +export enum GuildNSFWContentLevel { DEFAULT = 0, EXPLICIT = 1, SAFE = 2, @@ -184,14 +185,14 @@ export const enum GuildNSFWContentLevel { } // Original name: BoostedGuildTiers -export const enum BoostedGuildTier { +export enum BoostedGuildTier { NONE = 0, TIER_1 = 1, TIER_2 = 2, TIER_3 = 3, } -export const enum SystemChannelFlags { +export enum SystemChannelFlags { SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0, SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1, SUPPRESS_GUILD_REMINDER_NOTIFICATIONS = 1 << 2, @@ -202,7 +203,7 @@ export const enum SystemChannelFlags { } // Original name: VerificationLevels -export const enum VerificationLevel { +export enum VerificationLevel { NONE = 0, LOW = 1, MEDIUM = 2, diff --git a/packages/discord-types/src/general/ImmutableRecord.d.ts b/packages/discord-types/src/general/ImmutableRecord.ts similarity index 90% rename from packages/discord-types/src/general/ImmutableRecord.d.ts rename to packages/discord-types/src/general/ImmutableRecord.ts index 9785df86e..b725e2b9d 100644 --- a/packages/discord-types/src/general/ImmutableRecord.d.ts +++ b/packages/discord-types/src/general/ImmutableRecord.ts @@ -6,7 +6,7 @@ // Original name: Record // Renamed to avoid name conflicts with TypeScripts's Record utility type. -export class ImmutableRecord { +export declare class ImmutableRecord { merge(collection: Partial): this; set(key: Key, value: OwnProperties[Key]): this; toJS(): OwnProperties; diff --git a/packages/discord-types/src/general/Permissions.d.ts b/packages/discord-types/src/general/Permissions.ts similarity index 95% rename from packages/discord-types/src/general/Permissions.d.ts rename to packages/discord-types/src/general/Permissions.ts index 2ea586076..af48f258b 100644 --- a/packages/discord-types/src/general/Permissions.d.ts +++ b/packages/discord-types/src/general/Permissions.ts @@ -6,7 +6,7 @@ /* // bigint enums are not yet possible: https://github.com/microsoft/TypeScript/issues/37783 -export const enum Permissions { +export enum Permissions { CREATE_INSTANT_INVITE = 1n << 0n, KICK_MEMBERS = 1n << 1n, BAN_MEMBERS = 1n << 2n, @@ -57,6 +57,7 @@ export const enum Permissions { USE_CLYDE_AI = 1n << 47n, SET_VOICE_CHANNEL_STATUS = 1n << 48n, SEND_POLLS = 1n << 49n, + USE_EXTERNAL_APPS = 1n << 50n, } */ @@ -71,7 +72,7 @@ export interface PermissionOverwrite { type: PermissionOverwriteType; } -export const enum PermissionOverwriteType { +export enum PermissionOverwriteType { ROLE = 0, MEMBER = 1, } diff --git a/packages/discord-types/src/general/ReadState.d.ts b/packages/discord-types/src/general/ReadState.ts similarity index 98% rename from packages/discord-types/src/general/ReadState.d.ts rename to packages/discord-types/src/general/ReadState.ts index c9cd72ec9..569ebd135 100644 --- a/packages/discord-types/src/general/ReadState.d.ts +++ b/packages/discord-types/src/general/ReadState.ts @@ -8,7 +8,7 @@ import type { Nullish, Optional } from "../internal"; import type { BasicPermissionsObject } from "../stores/PermissionStore"; import type { GuildChannelRecord } from "./channels/ChannelRecord"; -export class ReadState { +export declare class ReadState { constructor(channelId: string, type?: ChannelIdReadStateType | undefined); constructor(userId: string, type: UserIdReadStateType); constructor(guildId: string, type: GuildIdReadStateType); @@ -175,7 +175,7 @@ export interface GuildChannelOverride { muted: boolean; } -export const enum ChannelNotificationSettingsFlags { +export enum ChannelNotificationSettingsFlags { UNREADS_ONLY_MENTIONS = 1 << 9, UNREADS_ALL_MESSAGES = 1 << 10, FAVORITED = 1 << 11, @@ -197,7 +197,7 @@ export interface ReadStateSnapshot { unread: boolean; } -export const enum ReadStateFlags { +export enum ReadStateFlags { IS_GUILD_CHANNEL = 1 << 0, IS_THREAD = 1 << 1, } @@ -209,7 +209,7 @@ export type UserIdReadStateType = ReadStateType.NOTIFICATION_CENTER | ReadStateT export type GuildIdReadStateType = ReadStateType.GUILD_EVENT | ReadStateType.GUILD_HOME | ReadStateType.GUILD_ONBOARDING_QUESTION; // Original name: ReadStateTypes -export const enum ReadStateType { +export enum ReadStateType { CHANNEL = 0, GUILD_EVENT = 1, NOTIFICATION_CENTER = 2, diff --git a/packages/discord-types/src/general/Role.d.ts b/packages/discord-types/src/general/Role.ts similarity index 65% rename from packages/discord-types/src/general/Role.d.ts rename to packages/discord-types/src/general/Role.ts index af9950ad4..b8dd6849c 100644 --- a/packages/discord-types/src/general/Role.d.ts +++ b/packages/discord-types/src/general/Role.ts @@ -17,17 +17,19 @@ export interface Role { originalPosition: number; permissions: /* Permissions */ bigint; position: number; - tags: { - available_for_purchase?: null; - bot_id?: string; - guild_connections?: null; - integration_id?: string; - premium_subscriber?: null; - subscription_listing_id?: string; - }; + tags: RoleTags; unicodeEmoji: string | null; } -export const enum RoleFlags { +export enum RoleFlags { IN_PROMPT = 1, } + +export interface RoleTags { + available_for_purchase?: null; + bot_id?: string; + guild_connections?: null; + integration_id?: string; + premium_subscriber?: null; + subscription_listing_id?: string; +} diff --git a/packages/discord-types/src/general/UserProfile.d.ts b/packages/discord-types/src/general/UserProfile.ts similarity index 99% rename from packages/discord-types/src/general/UserProfile.d.ts rename to packages/discord-types/src/general/UserProfile.ts index a60b05f5d..95298f3e3 100644 --- a/packages/discord-types/src/general/UserProfile.d.ts +++ b/packages/discord-types/src/general/UserProfile.ts @@ -81,7 +81,7 @@ export interface ProfileConnectedAccountData { } // Original name: PlatformTypes -export const enum PlatformType { +export enum PlatformType { AMAZON_MUSIC = "amazon-music", BATTLENET = "battlenet", BUNGIE = "bungie", diff --git a/packages/discord-types/src/general/UserRecord.d.ts b/packages/discord-types/src/general/UserRecord.ts similarity index 92% rename from packages/discord-types/src/general/UserRecord.d.ts rename to packages/discord-types/src/general/UserRecord.ts index 4d03e6a5b..c87d0fb92 100644 --- a/packages/discord-types/src/general/UserRecord.d.ts +++ b/packages/discord-types/src/general/UserRecord.ts @@ -10,7 +10,7 @@ import type { IconSource } from "./misc"; export type UserRecordOwnProperties = Pick; -export class UserRecord< +export declare class UserRecord< OwnProperties extends UserRecordOwnProperties = UserRecordOwnProperties > extends ImmutableRecord { /** @todo */ @@ -26,13 +26,13 @@ export class UserRecord< get createdAt(): Date; getAvatarSource( guildId?: string | Nullish, - canAnimate?: boolean | undefined, - avatarSize?: number | undefined + canAnimate?: boolean | undefined /* = false */, + avatarSize?: number | undefined /* = 128 */ ): IconSource; getAvatarURL( guildId?: string | Nullish, - avatarSize?: number | undefined, - canAnimate?: boolean | undefined + avatarSize?: number | undefined /* = 128 */, + canAnimate?: boolean | undefined /* = false */ ): string; hasAvatarForGuild(guildId?: string | Nullish): boolean; hasDisabledPremium(): boolean; @@ -97,7 +97,7 @@ export interface UserClanData { tag: string | null; } -export const enum UserFlags { +export enum UserFlags { STAFF = 1 << 0, PARTNER = 1 << 1, HYPESQUAD = 1 << 2, @@ -124,10 +124,10 @@ export const enum UserFlags { } // Original name: PremiumTypes -export const enum UserPremiumType { +export enum UserPremiumType { /** Nitro Classic */ TIER_1 = 1, - /** Nitro */ + /** Nitro Standard */ TIER_2 = 2, /** Nitro Basic */ TIER_0 = 3, diff --git a/packages/discord-types/src/general/channels/ChannelRecord.d.ts b/packages/discord-types/src/general/channels/ChannelRecord.ts similarity index 91% rename from packages/discord-types/src/general/channels/ChannelRecord.d.ts rename to packages/discord-types/src/general/channels/ChannelRecord.ts index 6f8bb81f8..471f30d6b 100644 --- a/packages/discord-types/src/general/channels/ChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ChannelRecord.ts @@ -19,13 +19,13 @@ export type ChannelRecord = GuildChannelRecord | PrivateChannelRecord | ThreadCh export type GuildChannelRecord = GuildTextualChannelRecord | GuildVocalChannelRecord | ForumChannelRecord; -export type GuildSelectableChannelRecord = Exclude; +export type GuildSelectableChannelRecord = Exclude; type ChannelRecordOwnPropertyKeys = "application_id" | "appliedTags" | "availableTags" | "bitrate_" | "defaultAutoArchiveDuration" | "defaultForumLayout" | "defaultReactionEmoji" | "defaultSortOrder" | "defaultThreadRateLimitPerUser" | "flags_" | "guild_id" | "icon" | "iconEmoji" | "id" | "isMessageRequest" | "isMessageRequestTimestamp" | "isSpam" | "lastMessageId" | "lastPinTimestamp" | "member" | "memberCount" | "memberIdsPreview" | "memberListId" | "messageCount" | "name" | "nicks" | "nsfw_" | "originChannelId" | "ownerId" | "parentChannelThreadType" | "parent_id" | "permissionOverwrites_" | "position_" | "rateLimitPerUser_" | "rawRecipients" | "recipients" | "rtcRegion" | "safetyWarnings" | "template" | "themeColor" | "threadMetadata" | "topic_" | "totalMessageSent" | "type" | "userLimit_" | "version" | "videoQualityMode"; -export type ChannelRecordOwnProperties = Pick; +export type ChannelRecordOwnProperties = Pick; -export abstract class ChannelRecordBase { +export declare abstract class ChannelRecordBase { /** @todo */ constructor(channelProperties: Record); @@ -34,7 +34,7 @@ export abstract class ChannelRecordBase { computeLurkerPermissionsAllowList(): /* Permissions */ bigint | undefined; get flags(): ChannelFlags; getApplicationId(): this["application_id"]; - getDefaultLayout(): FormLayout; + getDefaultLayout(): ForumLayout; getDefaultSortOrder(): ThreadSortOrder; getGuildId(): this["guild_id"]; hasFlag(flag: ChannelFlags): boolean; @@ -84,11 +84,8 @@ export abstract class ChannelRecordBase { availableTags?: ForumTag[] | undefined; bitrate_?: number | undefined; defaultAutoArchiveDuration?: number | undefined; - defaultForumLayout?: FormLayout | undefined; - defaultReactionEmoji?: { - emojiId: string | null; - emojiName: string | null; - } | undefined; + defaultForumLayout?: ForumLayout | undefined; + defaultReactionEmoji?: ForumDefaultReactionEmoji | undefined; defaultSortOrder?: ThreadSortOrder | Nullish; defaultThreadRateLimitPerUser?: number | undefined; flags_: ChannelFlags; @@ -132,6 +129,7 @@ export abstract class ChannelRecordBase { userLimit_?: number | undefined; version?: number | undefined; videoQualityMode?: VideoQualityMode | undefined; + /** @todo This seems to have been removed. */ voiceBackgroundDisplay?: { type: VoiceCallBackgroundType.EMPTY; } | { resourceId: string; type: VoiceCallBackgroundType.GRADIENT; } | Nullish; @@ -145,18 +143,23 @@ export interface ForumTag { name: string; } -export const enum FormLayout { +export enum ForumLayout { DEFAULT = 0, LIST = 1, GRID = 2, } -export const enum ThreadSortOrder { +export interface ForumDefaultReactionEmoji { + emojiId: string | null; + emojiName: string | null; +} + +export enum ThreadSortOrder { LATEST_ACTIVITY = 0, CREATION_DATE = 1, } -export const enum ChannelFlags { +export enum ChannelFlags { GUILD_FEED_REMOVED = 1 << 0, PINNED = 1 << 1, ACTIVE_CHANNELS_REMOVED = 1 << 2, @@ -183,13 +186,14 @@ export interface ThreadMember { muted: boolean; } -export const enum ThreadMemberFlags { +export enum ThreadMemberFlags { HAS_INTERACTED = 1 << 0, ALL_MESSAGES = 1 << 1, ONLY_MENTIONS = 1 << 2, NO_MESSAGES = 1 << 3, } +/** @todo This may just be a user object from the API. */ export interface ChannelRecipient { avatar: string | null; avatar_decoration_data: SnakeCasedProperties | null; @@ -210,7 +214,7 @@ export interface SafetyWarning { } // Original name: SafetyWarningTypes -export const enum SafetyWarningType { +export enum SafetyWarningType { STRANGER_DANGER = 1, INAPPROPRIATE_CONVERSATION_TIER_1 = 2, INAPPROPRIATE_CONVERSATION_TIER_2 = 3, @@ -226,7 +230,7 @@ export interface ThreadMetadata { } // Original name: ChannelTypes -export const enum ChannelType { +export enum ChannelType { GUILD_TEXT = 0, DM = 1, GUILD_VOICE = 2, @@ -244,13 +248,14 @@ export const enum ChannelType { UNKNOWN = 10_000, } -export const enum VideoQualityMode { +export enum VideoQualityMode { AUTO = 1, FULL = 2, } // Original name: VoiceCallBackgroundTypes -export const enum VoiceCallBackgroundType { +/** @todo This seems to have been removed. */ +export enum VoiceCallBackgroundType { EMPTY = 0, GRADIENT = 1, } diff --git a/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts b/packages/discord-types/src/general/channels/ForumChannelRecord.ts similarity index 91% rename from packages/discord-types/src/general/channels/ForumChannelRecord.d.ts rename to packages/discord-types/src/general/channels/ForumChannelRecord.ts index 554e37bd3..d9883388a 100644 --- a/packages/discord-types/src/general/channels/ForumChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ForumChannelRecord.ts @@ -9,7 +9,7 @@ import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; export type ForumChannelRecord = GuildForumChannelRecord | GuildMediaChannelRecord; -export abstract class ForumChannelRecordBase extends ChannelRecordBase { +export declare abstract class ForumChannelRecordBase extends ChannelRecordBase { /** @todo */ constructor(channelProperties: Record); @@ -63,10 +63,10 @@ export abstract class ForumChannelRecordBase extends ChannelRecordBase { voiceBackgroundDisplay?: undefined; } -export class GuildForumChannelRecord extends ForumChannelRecordBase { +export declare class GuildForumChannelRecord extends ForumChannelRecordBase { type: ChannelType.GUILD_FORUM; } -export class GuildMediaChannelRecord extends ForumChannelRecordBase { +export declare class GuildMediaChannelRecord extends ForumChannelRecordBase { type: ChannelType.GUILD_MEDIA; } diff --git a/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts b/packages/discord-types/src/general/channels/GuildTextualChannelRecord.ts similarity index 85% rename from packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts rename to packages/discord-types/src/general/channels/GuildTextualChannelRecord.ts index 88f3854b9..7b0913454 100644 --- a/packages/discord-types/src/general/channels/GuildTextualChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/GuildTextualChannelRecord.ts @@ -9,7 +9,7 @@ import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; export type GuildTextualChannelRecord = GuildTextChannelRecord | GuildCategoryChannelRecord | GuildAnnouncementChannelRecord | GuildStoreChannelRecord | GuildDirectoryChannelRecord; -export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { +export declare abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { /** @todo */ constructor(channelProperties: Record); @@ -63,11 +63,11 @@ export abstract class GuildTextualChannelRecordBase extends ChannelRecordBase { voiceBackgroundDisplay?: undefined; } -export class GuildTextChannelRecord extends GuildTextualChannelRecordBase { +export declare class GuildTextChannelRecord extends GuildTextualChannelRecordBase { type: ChannelType.GUILD_TEXT; } -export class GuildCategoryChannelRecord extends GuildTextualChannelRecordBase { +export declare class GuildCategoryChannelRecord extends GuildTextualChannelRecordBase { defaultAutoArchiveDuration: undefined; defaultThreadRateLimitPerUser: undefined; lastMessageId: undefined; @@ -79,14 +79,14 @@ export class GuildCategoryChannelRecord extends GuildTextualChannelRecordBase { type: ChannelType.GUILD_CATEGORY; } -export class GuildAnnouncementChannelRecord extends GuildTextualChannelRecordBase { +export declare class GuildAnnouncementChannelRecord extends GuildTextualChannelRecordBase { type: ChannelType.GUILD_ANNOUNCEMENT; } -export class GuildStoreChannelRecord extends GuildTextualChannelRecordBase { +export declare class GuildStoreChannelRecord extends GuildTextualChannelRecordBase { type: ChannelType.GUILD_STORE; } -export class GuildDirectoryChannelRecord extends GuildTextualChannelRecordBase { +export declare class GuildDirectoryChannelRecord extends GuildTextualChannelRecordBase { type: ChannelType.GUILD_DIRECTORY; } diff --git a/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts b/packages/discord-types/src/general/channels/GuildVocalChannelRecord.ts similarity index 90% rename from packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts rename to packages/discord-types/src/general/channels/GuildVocalChannelRecord.ts index c723c0eb9..9efaa76e9 100644 --- a/packages/discord-types/src/general/channels/GuildVocalChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/GuildVocalChannelRecord.ts @@ -9,7 +9,7 @@ import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; export type GuildVocalChannelRecord = GuildVoiceChannelRecord | GuildStageVoiceChannelRecord; -export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { +export declare abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { /** @todo */ constructor(channelProperties: Record); @@ -64,10 +64,10 @@ export abstract class GuildVocalChannelRecordBase extends ChannelRecordBase { voiceBackgroundDisplay: Defined; } -export class GuildVoiceChannelRecord extends GuildVocalChannelRecordBase { +export declare class GuildVoiceChannelRecord extends GuildVocalChannelRecordBase { type: ChannelType.GUILD_VOICE; } -export class GuildStageVoiceChannelRecord extends GuildVocalChannelRecordBase { +export declare class GuildStageVoiceChannelRecord extends GuildVocalChannelRecordBase { type: ChannelType.GUILD_STAGE_VOICE; } diff --git a/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts b/packages/discord-types/src/general/channels/PrivateChannelRecord.ts similarity index 92% rename from packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts rename to packages/discord-types/src/general/channels/PrivateChannelRecord.ts index 8c74d2059..8b032f007 100644 --- a/packages/discord-types/src/general/channels/PrivateChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/PrivateChannelRecord.ts @@ -9,7 +9,7 @@ import type { ChannelRecipient, ChannelRecordBase, ChannelType } from "./Channel export type PrivateChannelRecord = DMChannelRecord | GroupDMChannelRecord; -export abstract class PrivateChannelRecordBase extends ChannelRecordBase { +export declare abstract class PrivateChannelRecordBase extends ChannelRecordBase { /** @todo */ constructor(channelProperties: Record); @@ -68,7 +68,7 @@ export abstract class PrivateChannelRecordBase extends ChannelRecordBase { voiceBackgroundDisplay?: undefined; } -export class DMChannelRecord extends PrivateChannelRecordBase { +export declare class DMChannelRecord extends PrivateChannelRecordBase { application_id: undefined; icon: undefined; name: ""; @@ -76,7 +76,7 @@ export class DMChannelRecord extends PrivateChannelRecordBase { type: ChannelType.DM; } -export class GroupDMChannelRecord extends PrivateChannelRecordBase { +export declare class GroupDMChannelRecord extends PrivateChannelRecordBase { isMessageRequest: undefined; isMessageRequestTimestamp: undefined; ownerId: PrivateChannelRecordBase["ownerId"]; diff --git a/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts b/packages/discord-types/src/general/channels/ThreadChannelRecord.ts similarity index 94% rename from packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts rename to packages/discord-types/src/general/channels/ThreadChannelRecord.ts index 7551fa9c4..ffbb95417 100644 --- a/packages/discord-types/src/general/channels/ThreadChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/ThreadChannelRecord.ts @@ -9,7 +9,7 @@ import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; type ThreadChannelType = ChannelType.ANNOUNCEMENT_THREAD | ChannelType.PUBLIC_THREAD | ChannelType.PRIVATE_THREAD; -export class ThreadChannelRecord extends ChannelRecordBase { +export declare class ThreadChannelRecord extends ChannelRecordBase { /** @todo */ constructor(channelProperties: Record); diff --git a/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts b/packages/discord-types/src/general/channels/UnknownChannelRecord.ts similarity index 97% rename from packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts rename to packages/discord-types/src/general/channels/UnknownChannelRecord.ts index f43bd6790..3df422c52 100644 --- a/packages/discord-types/src/general/channels/UnknownChannelRecord.d.ts +++ b/packages/discord-types/src/general/channels/UnknownChannelRecord.ts @@ -7,7 +7,7 @@ import type { Defined, Nullish } from "../../internal"; import type { ChannelRecordBase, ChannelType } from "./ChannelRecord"; -export class UnknownChannelRecord extends ChannelRecordBase { +export declare class UnknownChannelRecord extends ChannelRecordBase { /** @todo */ constructor(channelProperties: Record); diff --git a/packages/discord-types/src/general/channels/index.d.ts b/packages/discord-types/src/general/channels/index.ts similarity index 100% rename from packages/discord-types/src/general/channels/index.d.ts rename to packages/discord-types/src/general/channels/index.ts diff --git a/packages/discord-types/src/general/emojis/Emoji.d.ts b/packages/discord-types/src/general/emojis/Emoji.ts similarity index 97% rename from packages/discord-types/src/general/emojis/Emoji.d.ts rename to packages/discord-types/src/general/emojis/Emoji.ts index 25c4014d6..125f73a51 100644 --- a/packages/discord-types/src/general/emojis/Emoji.d.ts +++ b/packages/discord-types/src/general/emojis/Emoji.ts @@ -9,7 +9,7 @@ import type { Nullish } from "../../internal"; export type Emoji = UnicodeEmoji | GuildEmoji; // Original name: Emoji -export class UnicodeEmoji { +export declare class UnicodeEmoji { constructor(emojiObject: UnicodeEmojiObject | UnicodeEmojiObjectDiversityChild); get allNamesString(): string; @@ -72,7 +72,7 @@ export interface GuildEmoji { } // Original name: EmojiTypes -export const enum EmojiType { +export enum EmojiType { UNICODE = 0, GUILD = 1, } diff --git a/packages/discord-types/src/general/emojis/EmojiDisambiguations.d.ts b/packages/discord-types/src/general/emojis/EmojiDisambiguations.ts similarity index 98% rename from packages/discord-types/src/general/emojis/EmojiDisambiguations.d.ts rename to packages/discord-types/src/general/emojis/EmojiDisambiguations.ts index 44d22e372..3f2f8415d 100644 --- a/packages/discord-types/src/general/emojis/EmojiDisambiguations.d.ts +++ b/packages/discord-types/src/general/emojis/EmojiDisambiguations.ts @@ -9,7 +9,7 @@ import type { CollectionChain } from "lodash"; import type { Defined, Nullish } from "../../internal"; import type { Emoji, EmojiType, GuildEmoji, UnicodeEmoji } from "./Emoji"; -export class EmojiDisambiguations { +export declare class EmojiDisambiguations { constructor(guildId: string | null); static _lastInstance: EmojiDisambiguations | null; diff --git a/packages/discord-types/src/general/emojis/GuildEmojis.d.ts b/packages/discord-types/src/general/emojis/GuildEmojis.ts similarity index 96% rename from packages/discord-types/src/general/emojis/GuildEmojis.d.ts rename to packages/discord-types/src/general/emojis/GuildEmojis.ts index a7761f684..bccb374c8 100644 --- a/packages/discord-types/src/general/emojis/GuildEmojis.d.ts +++ b/packages/discord-types/src/general/emojis/GuildEmojis.ts @@ -6,7 +6,7 @@ import type { GuildEmoji } from "./Emoji"; -export class GuildEmojis { +export declare class GuildEmojis { constructor( guildId: string, userId: string, diff --git a/packages/discord-types/src/general/emojis/index.d.ts b/packages/discord-types/src/general/emojis/index.ts similarity index 100% rename from packages/discord-types/src/general/emojis/index.d.ts rename to packages/discord-types/src/general/emojis/index.ts diff --git a/packages/discord-types/src/general/index.d.ts b/packages/discord-types/src/general/index.ts similarity index 95% rename from packages/discord-types/src/general/index.d.ts rename to packages/discord-types/src/general/index.ts index fe4ca2419..ce6cf5ec9 100644 --- a/packages/discord-types/src/general/index.d.ts +++ b/packages/discord-types/src/general/index.ts @@ -19,6 +19,7 @@ export * from "./GuildRecord"; export * from "./ImmutableRecord"; export * from "./messages"; export * from "./misc"; +export * from "./Permissions"; export * from "./ReadState"; export * from "./Role"; export * from "./UserProfile"; diff --git a/packages/discord-types/src/general/messages/ChannelMessages.d.ts b/packages/discord-types/src/general/messages/ChannelMessages.ts similarity index 99% rename from packages/discord-types/src/general/messages/ChannelMessages.d.ts rename to packages/discord-types/src/general/messages/ChannelMessages.ts index a8e2ad9f3..860ddf0c0 100644 --- a/packages/discord-types/src/general/messages/ChannelMessages.d.ts +++ b/packages/discord-types/src/general/messages/ChannelMessages.ts @@ -10,7 +10,7 @@ import type { MessageProperties, MessageRecord } from "./MessageRecord"; export type ChannelMessagesOwnProperties = Pick; -export class ChannelMessages { +export declare class ChannelMessages { constructor(channelId: string); static _channelMessages: { [channelId: string]: ChannelMessages; }; @@ -184,7 +184,7 @@ export class ChannelMessages { } // Original name: JumpTypes -export const enum JumpType { +export enum JumpType { ANIMATED = "ANIMATED", INSTANT = "INSTANT", } diff --git a/packages/discord-types/src/general/messages/InteractionRecord.d.ts b/packages/discord-types/src/general/messages/InteractionRecord.ts similarity index 94% rename from packages/discord-types/src/general/messages/InteractionRecord.d.ts rename to packages/discord-types/src/general/messages/InteractionRecord.ts index 949615556..9aa50415e 100644 --- a/packages/discord-types/src/general/messages/InteractionRecord.d.ts +++ b/packages/discord-types/src/general/messages/InteractionRecord.ts @@ -13,7 +13,7 @@ export type InteractionRecordOwnProperties = Pick & { name_localized?: string | Nullish; }; -export class InteractionRecord< +export declare class InteractionRecord< OwnProperties extends InteractionRecordOwnProperties = InteractionRecordOwnProperties > extends ImmutableRecord { constructor(interaction: InteractionProperties); @@ -33,7 +33,7 @@ export class InteractionRecord< } // Original name: InteractionTypes -export const enum InteractionType { +export enum InteractionType { PING = 1, APPLICATION_COMMAND = 2, MESSAGE_COMPONENT = 3, diff --git a/packages/discord-types/src/general/messages/MessageCache.d.ts b/packages/discord-types/src/general/messages/MessageCache.ts similarity index 96% rename from packages/discord-types/src/general/messages/MessageCache.d.ts rename to packages/discord-types/src/general/messages/MessageCache.ts index 2dfe0fcc9..3d2e99e59 100644 --- a/packages/discord-types/src/general/messages/MessageCache.d.ts +++ b/packages/discord-types/src/general/messages/MessageCache.ts @@ -6,7 +6,7 @@ import type { MessageRecord } from "./MessageRecord"; -export class MessageCache { +export declare class MessageCache { constructor(isCacheBefore: boolean); cache(messages: MessageRecord[], wasAtEdge?: boolean | undefined /* = false */): void; diff --git a/packages/discord-types/src/general/messages/MessageRecord.d.ts b/packages/discord-types/src/general/messages/MessageRecord.ts similarity index 93% rename from packages/discord-types/src/general/messages/MessageRecord.d.ts rename to packages/discord-types/src/general/messages/MessageRecord.ts index 0875b9a0f..71625b9cb 100644 --- a/packages/discord-types/src/general/messages/MessageRecord.d.ts +++ b/packages/discord-types/src/general/messages/MessageRecord.ts @@ -23,7 +23,7 @@ export type MessageProperties = Optional, Nullish>> & Partial>; -export class MessageRecord< +export declare class MessageRecord< OwnProperties extends MessageRecordOwnProperties = MessageRecordOwnProperties > extends MinimalMessageRecord { constructor(messageProperties: MessageProperties); @@ -95,8 +95,8 @@ export class MessageRecord< referralTrialOfferId: string | null; roleSubscriptionData: MessageRoleSubscriptionData | undefined; state: MessageStates; - stickerItems: MessageStickerItem[]; - stickers: MessageSticker[]; + stickerItems: StickerItem[]; + stickers: Sticker[]; tts: boolean; webhookId: string | null; } @@ -107,7 +107,7 @@ export interface MessageActivity { } // Original name: ActivityActionTypes -export const enum ActivityActionType { +export enum ActivityActionType { JOIN = 1, SPECTATE = 2, LISTEN = 3, @@ -126,7 +126,7 @@ export interface CodedLink { type: CodedLinkType; } -export const enum CodedLinkType { +export enum CodedLinkType { ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", BUILD_OVERRIDE = "BUILD_OVERRIDE", @@ -197,7 +197,7 @@ export interface MessagePollAnswer { } // Original name: PollLayoutTypes -export const enum PollLayoutType { +export enum PollLayoutType { UNKNOWN = 0, DEFAULT = 1, IMAGE_ONLY_ANSWERS = 2, @@ -228,7 +228,7 @@ export interface MessagePurchaseNotification { type: PurchaseNotificationType; } -export const enum PurchaseNotificationType { +export enum PurchaseNotificationType { GUILD_PRODUCT = 0, } @@ -280,7 +280,7 @@ export interface MessageVoteReactionCountDetails { } // Original name: ReactionTypes -export const enum ReactionType { +export enum ReactionType { NORMAL = 0, BURST = 1, VOTE = 2, @@ -293,42 +293,51 @@ export interface MessageRoleSubscriptionData { total_months_subscribed: number; } -export const enum MessageStates { +export enum MessageStates { SEND_FAILED = "SEND_FAILED", SENDING = "SENDING", SENT = "SENT", } -export interface MessageStickerItem { +export interface StickerItem { format_type: StickerFormat; id: string; name: string; } -export const enum StickerFormat { +export enum StickerFormat { PNG = 1, APNG = 2, LOTTIE = 3, GIF = 4, } -export interface MessageSticker { +export type Sticker = StandardSticker | GuildSticker; + +export interface StickerBase { asset?: ""; - available?: boolean; description: string | null; format_type: StickerFormat; - guild_id?: string; id: string; name: string; - pack_id?: string; - sort_value?: number; tags: string; type: MetaStickerType; - /** @todo This is not a UserRecord; it's a user object from the API. */ - user?: Record; } -export const enum MetaStickerType { +export interface StandardSticker extends StickerBase { + pack_id: string; + sort_value: number; +} + +export interface GuildSticker extends StickerBase { + /** @todo May actually not be optional. */ + available?: boolean; + guild_id: string; + /** @todo This is not a UserRecord; it's a user object from the API. */ + user: Record; +} + +export enum MetaStickerType { STANDARD = 1, GUILD = 2, } diff --git a/packages/discord-types/src/general/messages/MessageSnapshotRecord.d.ts b/packages/discord-types/src/general/messages/MessageSnapshotRecord.ts similarity index 95% rename from packages/discord-types/src/general/messages/MessageSnapshotRecord.d.ts rename to packages/discord-types/src/general/messages/MessageSnapshotRecord.ts index 3ab688709..66f7a0de1 100644 --- a/packages/discord-types/src/general/messages/MessageSnapshotRecord.d.ts +++ b/packages/discord-types/src/general/messages/MessageSnapshotRecord.ts @@ -12,7 +12,7 @@ export type MessageSnapshotRecordOwnProperties = Pick & { message: MinimalMessageProperties; }; -export class MessageSnapshotRecord< +export declare class MessageSnapshotRecord< OwnProperties extends MessageSnapshotRecordOwnProperties = MessageSnapshotRecordOwnProperties > extends ImmutableRecord { constructor(messageSnapshotProperties: MessageSnapshotProperties); diff --git a/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts b/packages/discord-types/src/general/messages/MinimalMessageRecord.ts similarity index 96% rename from packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts rename to packages/discord-types/src/general/messages/MinimalMessageRecord.ts index 4ab967586..67d287313 100644 --- a/packages/discord-types/src/general/messages/MinimalMessageRecord.d.ts +++ b/packages/discord-types/src/general/messages/MinimalMessageRecord.ts @@ -14,7 +14,7 @@ export type MinimalMessageRecordOwnProperties = Pick; -export class MinimalMessageRecord< +export declare class MinimalMessageRecord< OwnProperties extends MinimalMessageRecordOwnProperties = MinimalMessageRecordOwnProperties > extends ImmutableRecord { constructor(minimalMessageProperties: MinimalMessageProperties); @@ -50,7 +50,7 @@ export interface MessageAttachment { width?: number | null; } -export const enum MessageAttachmentFlags { +export enum MessageAttachmentFlags { IS_CLIP = 1 << 0, IS_THUMBNAIL = 1 << 1, IS_REMIX = 1 << 2, @@ -95,7 +95,7 @@ export interface MessageLinkButtonComponent extends MessageButtonComponentBase { } // Original name: ButtonStyle -export const enum MessageButtonComponentStyle { +export enum MessageButtonComponentStyle { PRIMARY = 1, SECONDARY = 2, SUCCESS = 3, @@ -132,7 +132,7 @@ export interface MessageSelectComponentMenuOption< } // Original name: SelectOptionType -export const enum MessageSelectComponentOptionType { +export enum MessageSelectComponentOptionType { STRING = 1, USER = 2, ROLE = 3, @@ -176,7 +176,7 @@ export interface MessageSelectComponentDefaultValue< } // Original name: SnowflakeSelectDefaultValueTypes -export const enum MessageSelectComponentDefaultValueType { +export enum MessageSelectComponentDefaultValueType { CHANNEL = "channel", ROLE = "role", USER = "user", @@ -196,7 +196,7 @@ export interface MessageTextInputComponent extends MessageComponentBase { } // Original name: TextComponentStyle -export const enum MessageTextInputComponentStyle { +export enum MessageTextInputComponentStyle { SMALL = 1, PARAGRAPH = 2, } @@ -233,7 +233,7 @@ export interface MessageMediaGalleryComponentItem { width: number; } -export const enum ContentScanFlags { +export enum ContentScanFlags { EXPLICIT = 1, } @@ -243,7 +243,7 @@ export interface MessageSeparatorComponent extends MessageComponentBase { type: MessageComponentType.SEPARATOR; } -export const enum SeparatorSpacingSize { +export enum SeparatorSpacingSize { SMALL = 1, LARGE = 2, } @@ -266,7 +266,7 @@ export interface MessageComponentGuildEmoji { // Original name: ComponentType // Renamed to avoid name conflicts with ComponentType from React. -export const enum MessageComponentType { +export enum MessageComponentType { ACTION_ROW = 1, BUTTON = 2, STRING_SELECT = 3, @@ -317,7 +317,7 @@ export interface MessageEmbedField { rawValue: string; } -export const enum MessageEmbedFlags { +export enum MessageEmbedFlags { CONTAINS_EXPLICIT_MEDIA = 1 << 4, } @@ -356,7 +356,7 @@ export type MessageEmbedThumbnail = { }); // Original name: MessageEmbedTypes -export const enum MessageEmbedType { +export enum MessageEmbedType { APPLICATION_NEWS = "application_news", ARTICLE = "article", AUTO_MODERATION_MESSAGE = "auto_moderation_message", @@ -392,7 +392,7 @@ export type MessageEmbedVideo = { url: string; }); -export const enum MessageFlags { +export enum MessageFlags { CROSSPOSTED = 1 << 0, IS_CROSSPOST = 1 << 1, SUPPRESS_EMBEDS = 1 << 2, @@ -402,6 +402,7 @@ export const enum MessageFlags { 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, @@ -410,7 +411,7 @@ export const enum MessageFlags { } // Original name: MessageTypes -export const enum MessageType { +export enum MessageType { DEFAULT = 0, RECIPIENT_ADD = 1, RECIPIENT_REMOVE = 2, @@ -458,4 +459,5 @@ export const enum MessageType { VOICE_HANGOUT_INVITE = 45, POLL_RESULT = 46, CHANGELOG = 47, + NITRO_NOTIFICATION = 48, } diff --git a/packages/discord-types/src/general/messages/index.d.ts b/packages/discord-types/src/general/messages/index.ts similarity index 100% rename from packages/discord-types/src/general/messages/index.d.ts rename to packages/discord-types/src/general/messages/index.ts diff --git a/packages/discord-types/src/general/misc.d.ts b/packages/discord-types/src/general/misc.ts similarity index 100% rename from packages/discord-types/src/general/misc.d.ts rename to packages/discord-types/src/general/misc.ts diff --git a/packages/discord-types/src/index.d.ts b/packages/discord-types/src/index.ts similarity index 100% rename from packages/discord-types/src/index.d.ts rename to packages/discord-types/src/index.ts diff --git a/packages/discord-types/src/internal.d.ts b/packages/discord-types/src/internal.ts similarity index 84% rename from packages/discord-types/src/internal.d.ts rename to packages/discord-types/src/internal.ts index e992901c6..77390b73c 100644 --- a/packages/discord-types/src/internal.d.ts +++ b/packages/discord-types/src/internal.ts @@ -4,6 +4,11 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +/** @internal */ +export type Bivariant unknown> + // eslint-disable-next-line @typescript-eslint/method-signature-style + = { _(...args: Parameters): ReturnType; }["_"]; + /** @internal */ export type Defined = Exclude; diff --git a/packages/discord-types/src/stores/ApplicationStore.d.ts b/packages/discord-types/src/stores/ApplicationStore.ts similarity index 79% rename from packages/discord-types/src/stores/ApplicationStore.d.ts rename to packages/discord-types/src/stores/ApplicationStore.ts index f884afee8..a303ba87f 100644 --- a/packages/discord-types/src/stores/ApplicationStore.d.ts +++ b/packages/discord-types/src/stores/ApplicationStore.ts @@ -9,9 +9,9 @@ import type { ApplicationRecord, ApplicationType } from "../general/ApplicationR import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; -export type ApplicationStoreAction = ExtractAction; +export type ApplicationStoreAction = ExtractAction; -export class ApplicationStore extends FluxStore { +export declare class ApplicationStore extends FluxStore { static displayName: "ApplicationStore"; _getAllApplications(): ApplicationRecord[]; diff --git a/packages/discord-types/src/stores/ChannelStore.d.ts b/packages/discord-types/src/stores/ChannelStore.ts similarity index 95% rename from packages/discord-types/src/stores/ChannelStore.d.ts rename to packages/discord-types/src/stores/ChannelStore.ts index ea49dcf43..10e700c67 100644 --- a/packages/discord-types/src/stores/ChannelStore.d.ts +++ b/packages/discord-types/src/stores/ChannelStore.ts @@ -13,7 +13,7 @@ import type { FluxStore } from "./abstract/FluxStore"; export type ChannelStoreAction = ExtractAction; -export class ChannelStore extends FluxStore { +export declare class ChannelStore extends FluxStore { static displayName: "ChannelStore"; getAllThreadsForParent(channelId: string): ThreadChannelRecord[]; diff --git a/packages/discord-types/src/stores/DraftStore.d.ts b/packages/discord-types/src/stores/DraftStore.ts similarity index 98% rename from packages/discord-types/src/stores/DraftStore.d.ts rename to packages/discord-types/src/stores/DraftStore.ts index 44f0196ee..ccd668032 100644 --- a/packages/discord-types/src/stores/DraftStore.d.ts +++ b/packages/discord-types/src/stores/DraftStore.ts @@ -15,7 +15,7 @@ export interface DraftStoreState { export type DraftStoreAction = ExtractAction; -export class DraftStore< +export declare class DraftStore< Constructor extends GenericConstructor = typeof DraftStore, State extends DraftStoreState = DraftStoreState, Action extends FluxAction = DraftStoreAction diff --git a/packages/discord-types/src/stores/EmojiStore.d.ts b/packages/discord-types/src/stores/EmojiStore.ts similarity index 97% rename from packages/discord-types/src/stores/EmojiStore.d.ts rename to packages/discord-types/src/stores/EmojiStore.ts index b291c707e..a512449b3 100644 --- a/packages/discord-types/src/stores/EmojiStore.d.ts +++ b/packages/discord-types/src/stores/EmojiStore.ts @@ -22,7 +22,7 @@ export interface EmojiStoreState { export type EmojiStoreAction = ExtractAction; -export class EmojiStore< +export declare class EmojiStore< Constructor extends GenericConstructor = typeof EmojiStore, State extends EmojiStoreState = EmojiStoreState, Action extends FluxAction = EmojiStoreAction @@ -34,7 +34,7 @@ export class EmojiStore< get diversitySurrogate(): string; get emojiFrecencyWithoutFetchingLatest(): Frecency; getCustomEmojiById(emojiId: string): GuildEmoji | undefined; - getDisambiguatedEmojiContext(guildId?: string | Nullish): EmojiDisambiguations | undefined; + getDisambiguatedEmojiContext(guildId?: string | Nullish): EmojiDisambiguations; getEmojiAutosuggestion(channel?: ChannelRecord): Emoji[]; getGuildEmoji(guildId: string): GuildEmoji[]; getGuilds(): { [guildId: string]: GuildEmojis; }; @@ -70,7 +70,7 @@ export interface GuildTopEmojisMetadata { topEmojisTTL: number; } -export const enum EmojiIntention { +export enum EmojiIntention { REACTION = 0, STATUS = 1, COMMUNITY_CONTENT = 2, diff --git a/packages/discord-types/src/stores/GuildChannelStore.d.ts b/packages/discord-types/src/stores/GuildChannelStore.ts similarity index 74% rename from packages/discord-types/src/stores/GuildChannelStore.d.ts rename to packages/discord-types/src/stores/GuildChannelStore.ts index 337e405ea..161849ae7 100644 --- a/packages/discord-types/src/stores/GuildChannelStore.d.ts +++ b/packages/discord-types/src/stores/GuildChannelStore.ts @@ -5,7 +5,7 @@ */ import type { ExtractAction, FluxAction } from "../flux/fluxActions"; -import type { ChannelType, GuildChannelRecord, GuildSelectableChannelRecord } from "../general/channels/ChannelRecord"; +import { ChannelType, type GuildChannelRecord, type GuildSelectableChannelRecord } from "../general/channels/ChannelRecord"; import type { GuildCategoryChannelRecord } from "../general/channels/GuildTextualChannelRecord"; import type { GuildVocalChannelRecord } from "../general/channels/GuildVocalChannelRecord"; import type { Nullish } from "../internal"; @@ -13,7 +13,7 @@ import type { FluxStore } from "./abstract/FluxStore"; export type GuildChannelStoreAction = ExtractAction; -export class GuildChannelStore extends FluxStore { +export declare class GuildChannelStore extends FluxStore { static displayName: "GuildChannelStore"; getAllGuilds(): { [guildId: string]: GuildChannels | undefined; }; @@ -22,33 +22,33 @@ export class GuildChannelStore; + ): ChannelFromSearchVocal | null; getDirectoryChannelIds(guildId: string): string[]; getFirstChannel( guildId: string, predicate: ( - value: GuildChannelFromSearchVocal, + value: ChannelFromSearchVocal, index: number, - array: GuildChannelFromSearchVocal[] + array: ChannelFromSearchVocal[] ) => unknown, searchVocal?: SearchVocal /* = false */ - ): GuildChannelFromSearchVocal | null; + ): ChannelFromSearchVocal | null; getFirstChannelOfType( guildId: string, predicate: ( - value: GuildChannelFromType, + value: ChannelFromGuildChannelType, index: number, - array: GuildChannelFromType[] + array: ChannelFromGuildChannelType[] ) => unknown, type: Type - ): GuildChannelFromType | null; + ): ChannelFromGuildChannelType | null; getSelectableChannelIds(guildId: string): string[]; getSelectableChannels(guildId: string): GuildChannel[]; getSFWDefaultChannel( guild: string, searchVocal?: SearchVocal /* = false */, permissions?: /* Permissions */ bigint | undefined /* = Permissions.VIEW_CHANNEL */ - ): GuildChannelFromSearchVocal; + ): ChannelFromSearchVocal | null; getTextChannelNameDisambiguations(guildId?: string | Nullish): { [channelId: string]: { id: string; name: string; }; }; @@ -70,7 +70,7 @@ export interface GuildChannels { } // Does not actually exist. -export const enum GuildChannelType { +export enum GuildChannelType { CATEGORY = ChannelType.GUILD_CATEGORY, SELECTABLE = "SELECTABLE", VOCAL = "VOCAL", @@ -81,10 +81,13 @@ export interface GuildChannel - = GuildChannel | (SearchVocal extends true - ? GuildChannel +type ChannelFromSearchVocal + = GuildSelectableChannelRecord | (SearchVocal extends true + ? GuildVocalChannelRecord : never); -type GuildChannelFromType - = GuildChannels[Type] extends (infer Channel)[] ? Channel : never; +type ChannelFromGuildChannelType = { + [GuildChannelType.CATEGORY]: GuildCategoryChannelRecord; + [GuildChannelType.SELECTABLE]: GuildSelectableChannelRecord; + [GuildChannelType.VOCAL]: GuildVocalChannelRecord; +}[Type]; diff --git a/packages/discord-types/src/stores/GuildMemberStore.d.ts b/packages/discord-types/src/stores/GuildMemberStore.ts similarity index 86% rename from packages/discord-types/src/stores/GuildMemberStore.d.ts rename to packages/discord-types/src/stores/GuildMemberStore.ts index 009912ce0..a6074c452 100644 --- a/packages/discord-types/src/stores/GuildMemberStore.d.ts +++ b/packages/discord-types/src/stores/GuildMemberStore.ts @@ -9,9 +9,9 @@ import type { GuildMember } from "../general/GuildMember"; import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; -export type GuildMemberStoreAction = ExtractAction; +export type GuildMemberStoreAction = ExtractAction; -export class GuildMemberStore extends FluxStore { +export declare class GuildMemberStore extends FluxStore { static displayName: "GuildMemberStore"; getCommunicationDisabledUserMap(): { [userId: string]: string; }; diff --git a/packages/discord-types/src/stores/GuildStore.d.ts b/packages/discord-types/src/stores/GuildStore.ts similarity index 92% rename from packages/discord-types/src/stores/GuildStore.d.ts rename to packages/discord-types/src/stores/GuildStore.ts index 2a3d24df9..55290049d 100644 --- a/packages/discord-types/src/stores/GuildStore.d.ts +++ b/packages/discord-types/src/stores/GuildStore.ts @@ -12,7 +12,7 @@ import type { FluxStore } from "./abstract/FluxStore"; export type GuildStoreAction = ExtractAction; -export class GuildStore extends FluxStore { +export declare class GuildStore extends FluxStore { static displayName: "GuildStore"; getAllGuildsRoles(): { [guildId: string]: { [roleId: string]: Role; }; }; diff --git a/packages/discord-types/src/stores/MessageStore.d.ts b/packages/discord-types/src/stores/MessageStore.ts similarity index 85% rename from packages/discord-types/src/stores/MessageStore.d.ts rename to packages/discord-types/src/stores/MessageStore.ts index f15f01b23..446174c50 100644 --- a/packages/discord-types/src/stores/MessageStore.d.ts +++ b/packages/discord-types/src/stores/MessageStore.ts @@ -10,9 +10,9 @@ import type { MessageRecord } from "../general/messages/MessageRecord"; import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; -export type MessageStoreAction = ExtractAction; +export type MessageStoreAction = ExtractAction; -export class MessageStore extends FluxStore { +export declare class MessageStore extends FluxStore { static displayName: "MessageStore"; focusedMessageId(channelId: string): string | undefined; diff --git a/packages/discord-types/src/stores/PermissionStore.d.ts b/packages/discord-types/src/stores/PermissionStore.ts similarity index 95% rename from packages/discord-types/src/stores/PermissionStore.d.ts rename to packages/discord-types/src/stores/PermissionStore.ts index 3882f6617..6d9d9df20 100644 --- a/packages/discord-types/src/stores/PermissionStore.d.ts +++ b/packages/discord-types/src/stores/PermissionStore.ts @@ -15,9 +15,10 @@ import type { FluxStore } from "./abstract/FluxStore"; export type PermissionStoreAction = ExtractAction; -export class PermissionStore extends FluxStore { +export declare class PermissionStore extends FluxStore { static displayName: "PermissionStore"; + /** Always returns false for private (non-guild) channels. */ can( permissions: /* Permissions */ bigint, context?: GuildRecord | ChannelRecord | Nullish, diff --git a/packages/discord-types/src/stores/PresenceStore.d.ts b/packages/discord-types/src/stores/PresenceStore.ts similarity index 91% rename from packages/discord-types/src/stores/PresenceStore.d.ts rename to packages/discord-types/src/stores/PresenceStore.ts index 03829e9eb..41c03922b 100644 --- a/packages/discord-types/src/stores/PresenceStore.d.ts +++ b/packages/discord-types/src/stores/PresenceStore.ts @@ -9,9 +9,9 @@ import type { Activity } from "../general/Activity"; import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; -export type PresenceStoreAction = ExtractAction; +export type PresenceStoreAction = ExtractAction; -export class PresenceStore extends FluxStore { +export declare class PresenceStore extends FluxStore { static displayName: "PresenceStore"; findActivity( @@ -68,15 +68,16 @@ export class PresenceStore exte export type ClientStatusMap = Partial>; // Original name: ClientTypes -export const enum ClientType { +export enum ClientType { DESKTOP = "desktop", + EMBEDDED = "embedded", // Undocumented MOBILE = "mobile", UNKNOWN = "unknown", WEB = "web", } // Original name: StatusTypes -export const enum StatusType { +export enum StatusType { DND = "dnd", IDLE = "idle", INVISIBLE = "invisible", diff --git a/packages/discord-types/src/stores/ReadStateStore.d.ts b/packages/discord-types/src/stores/ReadStateStore.ts similarity index 95% rename from packages/discord-types/src/stores/ReadStateStore.d.ts rename to packages/discord-types/src/stores/ReadStateStore.ts index 3fc5608b5..bb7d2fa8b 100644 --- a/packages/discord-types/src/stores/ReadStateStore.d.ts +++ b/packages/discord-types/src/stores/ReadStateStore.ts @@ -12,9 +12,9 @@ import type { Nullish } from "../internal"; import type { FluxStore } from "./abstract/FluxStore"; import type { BasicPermissionsObject } from "./PermissionStore"; -export type ReadStateStoreAction = ExtractAction; +export type ReadStateStoreAction = ExtractAction; -export class ReadStateStore extends FluxStore { +export declare class ReadStateStore extends FluxStore { static displayName: "ReadStateStore"; ackMessageId(id: string, type?: ReadStateType | undefined /* = ReadStateType.CHANNEL */): string | null; diff --git a/packages/discord-types/src/stores/RelationshipStore.d.ts b/packages/discord-types/src/stores/RelationshipStore.ts similarity index 85% rename from packages/discord-types/src/stores/RelationshipStore.d.ts rename to packages/discord-types/src/stores/RelationshipStore.ts index e5e9b516a..12a6f8d1e 100644 --- a/packages/discord-types/src/stores/RelationshipStore.d.ts +++ b/packages/discord-types/src/stores/RelationshipStore.ts @@ -9,10 +9,11 @@ import type { FluxStore } from "./abstract/FluxStore"; export type RelationshipStoreAction = ExtractAction; -export class RelationshipStore extends FluxStore { +export declare class RelationshipStore extends FluxStore { static displayName: "RelationshipStore"; getFriendCount(): number; + /** @todo May eventually be renamed to `getFriendIds`. */ getFriendIDs(): string[]; getNickname(userId: string): string | undefined; getOutgoingCount(): number; @@ -28,7 +29,7 @@ export class RelationshipStore; -export class SelectedChannelStore extends FluxStore { +export declare class SelectedChannelStore extends FluxStore { static displayName: "SelectedChannelStore"; getChannelId(guildId?: string | Nullish): string | undefined; diff --git a/packages/discord-types/src/stores/SelectedGuildStore.d.ts b/packages/discord-types/src/stores/SelectedGuildStore.ts similarity index 96% rename from packages/discord-types/src/stores/SelectedGuildStore.d.ts rename to packages/discord-types/src/stores/SelectedGuildStore.ts index 878a717f8..fdb927aa1 100644 --- a/packages/discord-types/src/stores/SelectedGuildStore.d.ts +++ b/packages/discord-types/src/stores/SelectedGuildStore.ts @@ -16,7 +16,7 @@ export interface SelectedGuildStoreState { export type SelectedGuildStoreAction = ExtractAction; -export class SelectedGuildStore< +export declare class SelectedGuildStore< Constructor extends GenericConstructor = typeof SelectedGuildStore, State extends SelectedGuildStoreState = SelectedGuildStoreState, Action extends FluxAction = SelectedGuildStoreAction diff --git a/packages/discord-types/src/stores/UserProfileStore.d.ts b/packages/discord-types/src/stores/UserProfileStore.ts similarity index 98% rename from packages/discord-types/src/stores/UserProfileStore.d.ts rename to packages/discord-types/src/stores/UserProfileStore.ts index 0cfe0ecb5..47ff405b4 100644 --- a/packages/discord-types/src/stores/UserProfileStore.d.ts +++ b/packages/discord-types/src/stores/UserProfileStore.ts @@ -20,7 +20,7 @@ export interface UserProfileStoreSnapshotData { export type UserProfileStoreAction = ExtractAction; -export class UserProfileStore< +export declare class UserProfileStore< Constructor extends GenericConstructor = typeof UserProfileStore > extends FluxSnapshotStore { constructor(); diff --git a/packages/discord-types/src/stores/UserStore.d.ts b/packages/discord-types/src/stores/UserStore.ts similarity index 85% rename from packages/discord-types/src/stores/UserStore.d.ts rename to packages/discord-types/src/stores/UserStore.ts index fd5161540..d33109f9e 100644 --- a/packages/discord-types/src/stores/UserStore.d.ts +++ b/packages/discord-types/src/stores/UserStore.ts @@ -13,9 +13,9 @@ export interface UserStoreSnapshotData { users: [UserRecord] | []; } -export type UserStoreAction = ExtractAction; +export type UserStoreAction = ExtractAction; -export class UserStore< +export declare class UserStore< Constructor extends GenericConstructor = typeof UserStore > extends FluxSnapshotStore { constructor(); diff --git a/packages/discord-types/src/stores/WindowStore.d.ts b/packages/discord-types/src/stores/WindowStore.ts similarity index 80% rename from packages/discord-types/src/stores/WindowStore.d.ts rename to packages/discord-types/src/stores/WindowStore.ts index a9fa79c65..b02211363 100644 --- a/packages/discord-types/src/stores/WindowStore.d.ts +++ b/packages/discord-types/src/stores/WindowStore.ts @@ -4,12 +4,12 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import type { ExtractAction, FluxAction } from "../flux"; +import type { ExtractAction, FluxAction } from "../flux/fluxActions"; import type { FluxStore } from "./abstract/FluxStore"; export type WindowStoreAction = ExtractAction; -export class WindowStore extends FluxStore { +export declare class WindowStore extends FluxStore { static displayName: "WindowStore"; getFocusedWindowId(): string | null; diff --git a/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts b/packages/discord-types/src/stores/abstract/FluxPersistedStore.ts similarity index 96% rename from packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts rename to packages/discord-types/src/stores/abstract/FluxPersistedStore.ts index 5f7a93550..940754ed7 100644 --- a/packages/discord-types/src/stores/abstract/FluxPersistedStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxPersistedStore.ts @@ -4,14 +4,14 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import type { FluxActionHandlerMap } from "../../flux/fluxActionHandlers"; +import type { FluxActionHandlerMap } from "../../flux/FluxActionHandlersGraph"; import type { FluxAction } from "../../flux/fluxActions"; import type { FluxDispatcher } from "../../flux/FluxDispatcher"; import type { GenericConstructor, Nullish } from "../../internal"; import type { FluxStore } from "./FluxStore"; // Original name: PersistedStore -export abstract class FluxPersistedStore< +export declare abstract class FluxPersistedStore< Constructor extends GenericConstructor = GenericConstructor, State = unknown, Action extends FluxAction = FluxAction diff --git a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.ts similarity index 90% rename from packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts rename to packages/discord-types/src/stores/abstract/FluxSnapshotStore.ts index f715763d8..914a2cb77 100644 --- a/packages/discord-types/src/stores/abstract/FluxSnapshotStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxSnapshotStore.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import type { FluxActionHandlerMap } from "../../flux/fluxActionHandlers"; +import type { FluxActionHandlerMap } from "../../flux/FluxActionHandlersGraph"; import type { ExcludeAction, ExtractAction, FluxAction } from "../../flux/fluxActions"; import type { GenericConstructor } from "../../internal"; import type { FluxStore } from "./FluxStore"; @@ -19,7 +19,7 @@ type CacheActionType = "CLEAR_CACHES" | "WRITE_CACHES"; export type FluxSnapshotStoreAction = ExcludeAction; // Original name: SnapshotStore -export abstract class FluxSnapshotStore< +export declare abstract class FluxSnapshotStore< Constructor extends GenericConstructor = GenericConstructor, SnapshotData = unknown, Action extends FluxSnapshotStoreAction = FluxSnapshotStoreAction diff --git a/packages/discord-types/src/stores/abstract/FluxStore.d.ts b/packages/discord-types/src/stores/abstract/FluxStore.ts similarity index 79% rename from packages/discord-types/src/stores/abstract/FluxStore.d.ts rename to packages/discord-types/src/stores/abstract/FluxStore.ts index 82ae12a61..2dbbd4249 100644 --- a/packages/discord-types/src/stores/abstract/FluxStore.d.ts +++ b/packages/discord-types/src/stores/abstract/FluxStore.ts @@ -4,17 +4,17 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import type { FluxActionHandlerMap } from "../../flux/fluxActionHandlers"; +import type { FluxActionHandlerMap } from "../../flux/FluxActionHandlersGraph"; import type { FluxAction } from "../../flux/fluxActions"; import type { FluxDispatchBand, FluxDispatcher } from "../../flux/FluxDispatcher"; -import type { Nullish } from "../../internal"; +import type { Bivariant, Nullish } from "../../internal"; // Original name: Store -export abstract class FluxStore { +export declare abstract class FluxStore { constructor( dispatcher: FluxDispatcher, - actionHandlers: FluxActionHandlerMap, - dispatchBand?: FluxDispatchBand | Nullish + actionHandlers?: FluxActionHandlerMap | Nullish, + dispatchBand?: FluxDispatchBand | Nullish /* = dispatcher._defaultBand */ ); static destroy(): void; @@ -34,7 +34,7 @@ export abstract class FluxStore { ): void; registerActionHandlers( actionHandlers: FluxActionHandlerMap, - dispatchBand?: FluxDispatchBand | Nullish + dispatchBand?: FluxDispatchBand | Nullish /* = this._dispatcher._defaultBand */ ): void; syncWith( stores: FluxStore[], @@ -48,7 +48,7 @@ export abstract class FluxStore { _dispatcher: FluxDispatcher; _dispatchToken: string; _isInitialized: boolean; - _mustEmitChanges: ((action: Action) => boolean) | Nullish; + _mustEmitChanges: Bivariant<((action: Action) => boolean)> | Nullish; _reactChangeCallbacks: FluxChangeListeners; _syncWiths: { func: FluxSyncWithFunction; @@ -64,7 +64,7 @@ export abstract class FluxStore { export type FluxSyncWithFunction = () => boolean | undefined; // Original name: ChangeListeners -export class FluxChangeListeners { +export declare class FluxChangeListeners { has(listener: FluxChangeListener): boolean; hasAny(): boolean; invokeAll(): void; diff --git a/packages/discord-types/src/stores/abstract/index.d.ts b/packages/discord-types/src/stores/abstract/index.ts similarity index 100% rename from packages/discord-types/src/stores/abstract/index.d.ts rename to packages/discord-types/src/stores/abstract/index.ts diff --git a/packages/discord-types/src/stores/index.d.ts b/packages/discord-types/src/stores/index.ts similarity index 100% rename from packages/discord-types/src/stores/index.d.ts rename to packages/discord-types/src/stores/index.ts diff --git a/packages/discord-types/src/stores/utils.d.ts b/packages/discord-types/src/stores/utils.ts similarity index 100% rename from packages/discord-types/src/stores/utils.d.ts rename to packages/discord-types/src/stores/utils.ts diff --git a/packages/discord-types/tsconfig.json b/packages/discord-types/tsconfig.json index e7f02b99f..7e540c840 100644 --- a/packages/discord-types/tsconfig.json +++ b/packages/discord-types/tsconfig.json @@ -11,6 +11,8 @@ "noEmit": true, + "isolatedModules": true, + "lib": [ "ES2019", "ES2020.BigInt", diff --git a/packages/vencord-types/package.json b/packages/vencord-types/package.json index 015bf498a..915dc51ad 100644 --- a/packages/vencord-types/package.json +++ b/packages/vencord-types/package.json @@ -16,18 +16,18 @@ "sideEffects": false, "types": "./index.d.ts", "dependencies": { - "@types/lodash": "~4.17.4", + "@types/lodash": "~4.17.5", "@types/node": "^18.19.34", "@types/react": "~18.2.79", "@types/react-dom": "~18.2.25", "@vencord/discord-types": "workspace:^", - "discord-types": "^1.3.26", + "discord-types": "^1.3.3", "standalone-electron-types": "^1.0.0", "type-fest": "^4.20.0" }, "devDependencies": { "@types/fs-extra": "^11.0.4", "fs-extra": "^11.2.0", - "tsx": "^4.13.3" + "tsx": "^4.15.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4b26b7aa..8e73bef35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,11 +48,14 @@ importers: specifier: ^0.0.246 version: 0.0.246 '@types/diff': - specifier: ^5.0.3 - version: 5.0.3 + specifier: ^5.2.1 + version: 5.2.1 + '@types/html-minifier-terser': + specifier: ^7.0.2 + version: 7.0.2 '@types/lodash': - specifier: ~4.17.4 - version: 4.17.4 + specifier: ~4.17.5 + version: 4.17.5 '@types/node': specifier: ^18.19.34 version: 18.19.34 @@ -63,22 +66,22 @@ importers: specifier: ~18.2.25 version: 18.2.25 '@types/yazl': - specifier: ^2.4.2 - version: 2.4.2 + specifier: ^2.4.5 + version: 2.4.5 '@typescript-eslint/eslint-plugin': - specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + specifier: ^7.13.0 + version: 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^7.12.0 - version: 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + specifier: ^7.13.0 + version: 7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) '@vencord/discord-types': specifier: workspace:^ version: link:packages/discord-types diff: - specifier: ^5.1.0 - version: 5.1.0 + specifier: ^5.2.0 + version: 5.2.0 discord-types: - specifier: ^1.3.26 + specifier: ^1.3.3 version: 1.3.26 esbuild: specifier: ^0.15.18 @@ -88,7 +91,7 @@ importers: version: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))) + version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))) eslint-plugin-path-alias: specifier: ^1.1.0 version: 1.1.0(patch_hash=yphe5vyevzdqcgyxunass7sxwe)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) @@ -97,10 +100,10 @@ importers: version: 12.1.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) eslint-plugin-unused-imports: specifier: ^3.2.0 - version: 3.2.0(@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + version: 3.2.0(@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) highlight.js: - specifier: 11.7.0 - version: 11.7.0 + specifier: 11.8.0 + version: 11.8.0 html-minifier-terser: specifier: ^7.2.0 version: 7.2.0 @@ -114,17 +117,17 @@ importers: specifier: ^1.0.0 version: 1.0.0 stylelint: - specifier: ^15.6.0 - version: 15.6.0 + specifier: ^15.11.0 + version: 15.11.0(typescript@5.4.5) stylelint-config-standard: specifier: ^33.0.0 - version: 33.0.0(stylelint@15.6.0) + version: 33.0.0(stylelint@15.11.0(typescript@5.4.5)) ts-patch: - specifier: ^3.1.2 - version: 3.1.2 + specifier: ^3.2.0 + version: 3.2.0 tsx: - specifier: ^4.13.3 - version: 4.13.3 + specifier: ^4.15.4 + version: 4.15.4 type-fest: specifier: ^4.20.0 version: 4.20.0 @@ -144,8 +147,8 @@ importers: specifier: ~3.0.3 version: 3.0.3 '@types/lodash': - specifier: ~4.17.4 - version: 4.17.4 + specifier: ~4.17.5 + version: 4.17.5 '@types/react': specifier: ~18.2.79 version: 18.2.79 @@ -164,34 +167,40 @@ importers: version: 52.0.0 '@stylistic/eslint-plugin': specifier: ^2.1.0 - version: 2.1.0(eslint@9.4.0)(typescript@5.4.5) + version: 2.1.0(eslint@9.5.0)(typescript@5.4.5) eslint: - specifier: ^9.4.0 - version: 9.4.0 + specifier: ^9.5.0 + version: 9.5.0 + eslint-plugin-check-file: + specifier: ^2.8.0 + version: 2.8.0(eslint@9.5.0) eslint-plugin-headers: specifier: ^1.1.2 - version: 1.1.2(eslint@9.4.0) + version: 1.1.2(eslint@9.5.0) eslint-plugin-import-x: specifier: ^0.5.1 - version: 0.5.1(eslint@9.4.0)(typescript@5.4.5) + version: 0.5.1(eslint@9.5.0)(typescript@5.4.5) eslint-plugin-simple-import-sort: specifier: ^12.1.0 - version: 12.1.0(eslint@9.4.0) + version: 12.1.0(eslint@9.5.0) eslint-plugin-unicorn: - specifier: ^53.0.0 - version: 53.0.0(eslint@9.4.0) + specifier: ^54.0.0 + version: 54.0.0(eslint@9.5.0) + eslint-plugin-unused-imports: + specifier: ^4.0.0 + version: 4.0.0(@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@9.5.0) typescript: specifier: ^5.4.5 version: 5.4.5 typescript-eslint: - specifier: ^8.0.0-alpha.28 - version: 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) + specifier: ^8.0.0-alpha.30 + version: 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) packages/vencord-types: dependencies: '@types/lodash': - specifier: ~4.17.4 - version: 4.17.4 + specifier: ~4.17.5 + version: 4.17.5 '@types/node': specifier: ^18.19.34 version: 18.19.34 @@ -205,7 +214,7 @@ importers: specifier: workspace:^ version: link:../discord-types discord-types: - specifier: ^1.3.26 + specifier: ^1.3.3 version: 1.3.26 standalone-electron-types: specifier: ^1.0.0 @@ -221,8 +230,8 @@ importers: specifier: ^11.2.0 version: 11.2.0 tsx: - specifier: ^4.13.3 - version: 4.13.3 + specifier: ^4.15.4 + version: 4.15.4 packages: @@ -234,10 +243,6 @@ packages: resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.19.1': - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.6': resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} engines: {node: '>=6.9.0'} @@ -246,37 +251,37 @@ packages: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} - '@csstools/css-parser-algorithms@2.1.1': - resolution: {integrity: sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA==} + '@csstools/css-parser-algorithms@2.6.3': + resolution: {integrity: sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-tokenizer': ^2.1.1 + '@csstools/css-tokenizer': ^2.3.1 - '@csstools/css-tokenizer@2.1.1': - resolution: {integrity: sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==} + '@csstools/css-tokenizer@2.3.1': + resolution: {integrity: sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==} engines: {node: ^14 || ^16 || >=18} - '@csstools/media-query-list-parser@2.0.4': - resolution: {integrity: sha512-GyYot6jHgcSDZZ+tLSnrzkR7aJhF2ZW6d+CXH66mjy5WpAQhZD4HDke2OQ36SivGRWlZJpAz7TzbW6OKlEpxAA==} + '@csstools/media-query-list-parser@2.1.11': + resolution: {integrity: sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-parser-algorithms': ^2.1.1 - '@csstools/css-tokenizer': ^2.1.1 + '@csstools/css-parser-algorithms': ^2.6.3 + '@csstools/css-tokenizer': ^2.3.1 - '@csstools/selector-specificity@2.2.0': - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + '@csstools/selector-specificity@3.1.1': + resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - postcss-selector-parser: ^6.0.10 + postcss-selector-parser: ^6.0.13 - '@esbuild/aix-ppc64@0.20.2': - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.20.2': - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -287,56 +292,56 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.20.2': - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.20.2': - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.20.2': - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.20.2': - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.20.2': - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.20.2': - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.20.2': - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.20.2': - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -347,74 +352,74 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.20.2': - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.20.2': - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.20.2': - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.20.2': - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.20.2': - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.20.2': - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.20.2': - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.20.2': - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.20.2': - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.20.2': - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.20.2': - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.20.2': - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -429,15 +434,11 @@ packages: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.6.2': - resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-types/unicorn@52.0.0': resolution: {integrity: sha512-1+Om/IekT0AwlPiARvhbtKsSgVMu3ZAtP99YCzhHkDSnF5f8sQegh8/3ZmMhlCnKipa7/x8qEC7Bn4rbaagnSA==} - '@eslint/config-array@0.15.1': - resolution: {integrity: sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==} + '@eslint/config-array@0.16.0': + resolution: {integrity: sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@2.1.4': @@ -452,12 +453,12 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.4.0': - resolution: {integrity: sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==} + '@eslint/js@9.5.0': + resolution: {integrity: sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.3': - resolution: {integrity: sha512-HAbhAYKfsAC2EkTqve00ibWIZlaU74Z1EHwAjYr4PXF0YU2VEA1zSIKSSpKszRLRWwHzzRZXvK632u+uXzvsvw==} + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanwhocodes/config-array@0.11.14': @@ -553,8 +554,8 @@ packages: '@types/chrome@0.0.246': resolution: {integrity: sha512-MxGxEomGxsJiL9xe/7ZwVgwdn8XVKWbPvxpVQl3nWOjrS0Ce63JsfzxUc4aU3GvRcUPYsfufHmJ17BFyKxeA4g==} - '@types/diff@5.0.3': - resolution: {integrity: sha512-amrLbRqTU9bXMCc6uX0sWpxsQzRIo9z6MJPkH1pkez/qOxuqSZVuryJAWoBRq94CeG8JxY+VK4Le9HtjQR5T9A==} + '@types/diff@5.2.1': + resolution: {integrity: sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==} '@types/eslint@8.56.10': resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} @@ -577,6 +578,9 @@ packages: '@types/har-format@1.2.13': resolution: {integrity: sha512-PwBsCBD3lDODn4xpje3Y1di0aDJp4Ww7aSfMRVw6ysnxD4I7Wmq2mBkSKaDtN403hqH5sp6c9xQUvFYY3+lkBg==} + '@types/html-minifier-terser@7.0.2': + resolution: {integrity: sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==} + '@types/json-schema@7.0.11': resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} @@ -586,8 +590,8 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - '@types/lodash@4.17.4': - resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} + '@types/lodash@4.17.5': + resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} '@types/minimist@1.2.2': resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} @@ -613,11 +617,11 @@ packages: '@types/yauzl@2.10.0': resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} - '@types/yazl@2.4.2': - resolution: {integrity: sha512-T+9JH8O2guEjXNxqmybzQ92mJUh2oCwDDMSSimZSe1P+pceZiFROZLYmcbqkzV5EUwz6VwcKXCO2S2yUpra6XQ==} + '@types/yazl@2.4.5': + resolution: {integrity: sha512-qpmPfx32HS7vlGJf7EsoM9qJnLZhXJBf1KH0hzfdc+D794rljQWh4H0I/UrZy+6Nhqn0l2jdBZXBGZtR1vnHqw==} - '@typescript-eslint/eslint-plugin@7.12.0': - resolution: {integrity: sha512-7F91fcbuDf/d3S8o21+r3ZncGIke/+eWk0EpO21LXhDfLahriZF9CGj4fbAetEjlaBdjdSm9a6VeXbpbT6Z40Q==} + '@typescript-eslint/eslint-plugin@7.13.0': + resolution: {integrity: sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -627,8 +631,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.0.0-alpha.28': - resolution: {integrity: sha512-LsTbTdXiF7rP/H/ni85ia+01WmLBkkOq5sAi60OqHRa7mv7FTbwmiPwQ3hcHmXWxZFkHVy7hXXfBhwZzbbsaIA==} + '@typescript-eslint/eslint-plugin@8.0.0-alpha.30': + resolution: {integrity: sha512-2CBUupdkfbE3eATph4QeZejvT+M+1bVur+zXlVx09WN31phap51ps/qemeclnCbGEz6kTgBDmScrr9XmmF8/Pg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -638,8 +642,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.12.0': - resolution: {integrity: sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==} + '@typescript-eslint/parser@7.13.0': + resolution: {integrity: sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -648,8 +652,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.0.0-alpha.28': - resolution: {integrity: sha512-44N1MlwmhMUJ0jyrGuWe093wywcCIVu7I7Ge1H15HXCRIB7ptpSf3GJZRCDpumuEUKkVxoL8rdLixMnVDWyT2w==} + '@typescript-eslint/parser@8.0.0-alpha.30': + resolution: {integrity: sha512-tAYgFmgXU1MlCK3nbblUvJlDSibBvxtAQXGrF3IG0KmnRza9FXILZifHWL0rrwacDn40K53K607Fk2QkMjiGgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -662,16 +666,16 @@ packages: resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@7.12.0': - resolution: {integrity: sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==} + '@typescript-eslint/scope-manager@7.13.0': + resolution: {integrity: sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.0.0-alpha.28': - resolution: {integrity: sha512-Iq8QFmJ2DH2tx7jfOraMZM1Y1axRfWh4t29JXRgbzvgiDQ2uHRHcaXqTulqsZXzJ0+vERNvNkOIPcQYGsNeGVQ==} + '@typescript-eslint/scope-manager@8.0.0-alpha.30': + resolution: {integrity: sha512-FGW/iPWGyPFamAVZ60oCAthMqQrqafUGebF8UKuq/ha+e9SVG6YhJoRzurlQXOVf8dHfOhJ0ADMXyFnMc53clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.12.0': - resolution: {integrity: sha512-lib96tyRtMhLxwauDWUp/uW3FMhLA6D0rJ8T7HmH7x23Gk1Gwwu8UZ94NMXBvOELn6flSPiBrCKlehkiXyaqwA==} + '@typescript-eslint/type-utils@7.13.0': + resolution: {integrity: sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -680,8 +684,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.0.0-alpha.28': - resolution: {integrity: sha512-Ta7vf3DtAakaeLEFGEnMGcfRtFV38PSLD+PvLT2xkof3vz5exKv4KYMyjAlNJmrhLzHwGWvHbt6IN8HoWwYnCw==} + '@typescript-eslint/type-utils@8.0.0-alpha.30': + resolution: {integrity: sha512-FrnhlCKEKZKRbpDviHkIU9tayIUGTOfa+SjvrRv6p/AJIUv6QT8oRboRjLH/cCuwUEbM0k5UtRWYug4albHUqQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -693,12 +697,12 @@ packages: resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.12.0': - resolution: {integrity: sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==} + '@typescript-eslint/types@7.13.0': + resolution: {integrity: sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.0.0-alpha.28': - resolution: {integrity: sha512-HYg+e0EWVShx0FEX0MAjDinYLmd+wD6nGMpbaddB1iACYwqaJFbf7vw0l+hdLTJvQC6UY8ndRkaEsL68QEoIZQ==} + '@typescript-eslint/types@8.0.0-alpha.30': + resolution: {integrity: sha512-4WzLlw27SO9pK9UFj/Hu7WGo8WveT0SEiIpFVsV2WwtQmLps6kouwtVCB8GJPZKJyurhZhcqCoQVQFmpv441Vg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.11.0': @@ -710,8 +714,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.12.0': - resolution: {integrity: sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==} + '@typescript-eslint/typescript-estree@7.13.0': + resolution: {integrity: sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -719,8 +723,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.0.0-alpha.28': - resolution: {integrity: sha512-I/5ODd4XJ+TO0XrKwDaB4tVGVi6kz2LAlN3WPd7mZVVtW21HHByCILRhOF9RbC69gJQ/TGHFpWCmAcsq2RZisg==} + '@typescript-eslint/typescript-estree@8.0.0-alpha.30': + resolution: {integrity: sha512-WSXbc9ZcXI+7yC+6q95u77i8FXz6HOLsw3ST+vMUlFy1lFbXyFL/3e6HDKQCm2Clt0krnoCPiTGvIn+GkYPn4Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -734,14 +738,14 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@7.12.0': - resolution: {integrity: sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==} + '@typescript-eslint/utils@7.13.0': + resolution: {integrity: sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.0.0-alpha.28': - resolution: {integrity: sha512-PnIz94+nbyjJisMI+KZqXMfw0wfIHvbyh0MGEx2M314wqm6SUWcxB5I8zduGQgJbRB0YFnboPS+MeSlBYPWrBQ==} + '@typescript-eslint/utils@8.0.0-alpha.30': + resolution: {integrity: sha512-rfhqfLqFyXhHNDwMnHiVGxl/Z2q/3guQ1jLlGQ0hi9Rb7inmwz42crM+NnLPR+2vEnwyw1P/g7fnQgQ3qvFx4g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -750,12 +754,12 @@ packages: resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@7.12.0': - resolution: {integrity: sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==} + '@typescript-eslint/visitor-keys@7.13.0': + resolution: {integrity: sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.0.0-alpha.28': - resolution: {integrity: sha512-+ewAOeKDycydKMlnfmW8zAURTA8PR5Csyvxy6PJt4XRYjoquode9/eWaMt9Sp4Rz1FGMSVU9KxDRR83ASH/xkQ==} + '@typescript-eslint/visitor-keys@8.0.0-alpha.30': + resolution: {integrity: sha512-XZuNurZxBqmr6ZIRIwWFq7j5RZd6ZlkId/HZEWyfciK+CWoyOxSF9Pv2VXH9Rlu2ZG2PfbhLz2Veszl4Pfn7yA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -772,11 +776,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} @@ -930,13 +929,13 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} + camelcase-keys@7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} caniuse-lite@1.0.30001625: resolution: {integrity: sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w==} @@ -1017,9 +1016,14 @@ packages: core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} - cosmiconfig@8.1.3: - resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} @@ -1028,9 +1032,9 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - css-functions-list@3.1.0: - resolution: {integrity: sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==} - engines: {node: '>=12.22'} + css-functions-list@3.2.2: + resolution: {integrity: sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==} + engines: {node: '>=12 || >=16'} css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} @@ -1089,6 +1093,10 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decamelize@5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + decode-uri-component@0.2.0: resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==} engines: {node: '>=0.10'} @@ -1123,8 +1131,8 @@ packages: devtools-protocol@0.0.1107588: resolution: {integrity: sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==} - diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} dir-glob@3.0.1: @@ -1313,15 +1321,11 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -1364,6 +1368,12 @@ packages: eslint-import-resolver-webpack: optional: true + eslint-plugin-check-file@2.8.0: + resolution: {integrity: sha512-FvvafMTam2WJYH9uj+FuMxQ1y+7jY3Z6P9T4j2214cH0FBxNzTcmeCiGTj1Lxp3mI6kbbgsXvmgewvf+llKYyw==} + engines: {node: '>=18'} + peerDependencies: + eslint: '>=7.28.0' + eslint-plugin-headers@1.1.2: resolution: {integrity: sha512-4A2B52MESwiv/pWrjNEEFI/bghbBGuDxUapjiwqJy8wC3lnginrOFKZ3cPLS9YyYbCr1R+/IeomF5ogfpyKEGA==} engines: {node: ^16.0.0 || >= 18.0.0} @@ -1399,8 +1409,8 @@ packages: peerDependencies: eslint: '>=5.0.0' - eslint-plugin-unicorn@53.0.0: - resolution: {integrity: sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==} + eslint-plugin-unicorn@54.0.0: + resolution: {integrity: sha512-XxYLRiYtAWiAjPv6z4JREby1TAE2byBC7wlh0V4vWDCpccOSU1KovWV//jqPXF6bq3WKxqX9rdjoRQ1EhdmNdQ==} engines: {node: '>=18.18'} peerDependencies: eslint: '>=8.56.0' @@ -1415,6 +1425,16 @@ packages: '@typescript-eslint/eslint-plugin': optional: true + eslint-plugin-unused-imports@4.0.0: + resolution: {integrity: sha512-mzM+y2B7XYpQryVa1usT+Y/BdNAtAZiXzwpSyDCboFoJN/LZRN67TNvQxKtuTK/Aplya3sLNQforiubzPPaIcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': '8' + eslint: '9' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + eslint-rule-composer@0.3.0: resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} engines: {node: '>=4.0.0'} @@ -1427,10 +1447,6 @@ packages: resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@3.4.2: - resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1444,8 +1460,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true - eslint@9.4.0: - resolution: {integrity: sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==} + eslint@9.5.0: + resolution: {integrity: sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -1492,8 +1508,8 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -1519,6 +1535,10 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@7.0.2: + resolution: {integrity: sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==} + engines: {node: '>=12.0.0'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1539,13 +1559,14 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -1575,9 +1596,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1625,6 +1643,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} @@ -1708,16 +1727,12 @@ packages: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - highlight.js@11.7.0: - resolution: {integrity: sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==} + highlight.js@11.8.0: + resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==} engines: {node: '>=12.0.0'} hosted-git-info@2.8.9: @@ -1743,10 +1758,6 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -1767,8 +1778,13 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -1815,9 +1831,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.12.0: - resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} - is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} @@ -2006,8 +2019,8 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - known-css-properties@0.27.0: - resolution: {integrity: sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==} + known-css-properties@0.29.0: + resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -2059,9 +2072,9 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - meow@9.0.0: - resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} - engines: {node: '>=10'} + meow@10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -2117,8 +2130,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2265,9 +2278,6 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -2287,9 +2297,6 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - postcss-media-query-parser@0.2.3: - resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} - postcss-resolve-nested-selector@0.1.1: resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} @@ -2299,15 +2306,15 @@ packages: peerDependencies: postcss: ^8.3.3 - postcss-selector-parser@6.0.12: - resolution: {integrity: sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==} + postcss-selector-parser@6.1.0: + resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} engines: {node: '>=4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.23: - resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2344,25 +2351,33 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} + read-pkg-up@8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} + read-pkg@6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + redent@4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} @@ -2421,6 +2436,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true run-parallel@1.2.0: @@ -2497,6 +2513,10 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated @@ -2569,6 +2589,10 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -2586,8 +2610,8 @@ packages: peerDependencies: stylelint: ^15.5.0 - stylelint@15.6.0: - resolution: {integrity: sha512-Cqzpc8tvJm77KaM8qUbhpJ/UYK55Ia0whQXj4b9IId9dlPICO7J8Lyo15SZWiHxKjlvy3p5FQor/3n6i8ignXg==} + stylelint@15.11.0: + resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true @@ -2647,9 +2671,9 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} + trim-newlines@4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} + engines: {node: '>=12'} ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} @@ -2657,8 +2681,8 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-patch@3.1.2: - resolution: {integrity: sha512-n58F5AqjUMdp9RAKq+E1YBkmONltPVbt1nN+wrmZXoYZek6QcvaTuqvKMhYhr5BxtC53kD/exxIPA1cP1RQxsA==} + ts-patch@3.2.0: + resolution: {integrity: sha512-fUGMkjGIlD4BFibDM+6pLYLXRguzCUY6fhP1KQzSnFJfAtTDT7DKyX0yHn3CJqfBv4mia/o3ZRte31UVf9Dl1A==} hasBin: true tsconfig-paths@3.15.0: @@ -2667,8 +2691,8 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsx@4.13.3: - resolution: {integrity: sha512-FTAJJLQCMiIbt78kD5qhLjHIR5NOQDKC63wcdelWRDBE+d1xSrXYhXq4DzejnC2tGhFZHpDy2Ika0Ugf7sK8gA==} + tsx@4.15.4: + resolution: {integrity: sha512-d++FLCwJLrXaBFtRcqdPBzu6FiVOJ2j+UsvUZPtoTrnYtCGU5CEW7iHXtNZfA2fcRTvJFWPqA6SWBuB0GSva9w==} engines: {node: '>=18.0.0'} hasBin: true @@ -2676,10 +2700,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -2692,6 +2712,10 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + type-fest@4.20.0: resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} engines: {node: '>=16'} @@ -2712,8 +2736,8 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript-eslint@8.0.0-alpha.28: - resolution: {integrity: sha512-hCJMQp3fOwt7o3V8ETQoMK+6yctfN++Rq9rQ8cukTfu/oCLkUycuez2TqBbkkkGxT/prqRNteU72RxiregqgWw==} + typescript-eslint@8.0.0-alpha.30: + resolution: {integrity: sha512-/vGhBMsK1TpadQh1eQ02c5pyiPGmKR9cVzX5C9plZ+LC0HPLpWoJbbTVfQN7BkIK7tUxDt2BFr3pFL5hDDrx7g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2772,9 +2796,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - v8-compile-cache@2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -2869,125 +2890,121 @@ snapshots: dependencies: '@babel/highlight': 7.18.6 - '@babel/helper-validator-identifier@7.19.1': {} - '@babel/helper-validator-identifier@7.24.6': {} '@babel/highlight@7.18.6': dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.24.6 chalk: 2.4.2 js-tokens: 4.0.0 - '@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1)': + '@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1)': dependencies: - '@csstools/css-tokenizer': 2.1.1 + '@csstools/css-tokenizer': 2.3.1 - '@csstools/css-tokenizer@2.1.1': {} + '@csstools/css-tokenizer@2.3.1': {} - '@csstools/media-query-list-parser@2.0.4(@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1))(@csstools/css-tokenizer@2.1.1)': + '@csstools/media-query-list-parser@2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)': dependencies: - '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) - '@csstools/css-tokenizer': 2.1.1 + '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) + '@csstools/css-tokenizer': 2.3.1 - '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.12)': + '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.0)': dependencies: - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.1.0 - '@esbuild/aix-ppc64@0.20.2': + '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/android-arm64@0.20.2': + '@esbuild/android-arm64@0.21.5': optional: true '@esbuild/android-arm@0.15.18': optional: true - '@esbuild/android-arm@0.20.2': + '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-x64@0.20.2': + '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.20.2': + '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-x64@0.20.2': + '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.20.2': + '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.20.2': + '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/linux-arm64@0.20.2': + '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm@0.20.2': + '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-ia32@0.20.2': + '@esbuild/linux-ia32@0.21.5': optional: true '@esbuild/linux-loong64@0.15.18': optional: true - '@esbuild/linux-loong64@0.20.2': + '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-mips64el@0.20.2': + '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-ppc64@0.20.2': + '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.20.2': + '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-s390x@0.20.2': + '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-x64@0.20.2': + '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.20.2': + '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.20.2': + '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.20.2': + '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/win32-arm64@0.20.2': + '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-ia32@0.20.2': + '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-x64@0.20.2': + '@esbuild/win32-x64@0.21.5': optional: true '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))': dependencies: eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) - eslint-visitor-keys: 3.4.2 + eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.0(eslint@9.4.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.5.0)': dependencies: - eslint: 9.4.0 - eslint-visitor-keys: 3.4.2 + eslint: 9.5.0 + eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.10.0': {} - '@eslint-community/regexpp@4.6.2': {} - '@eslint-types/unicorn@52.0.0': {} - '@eslint/config-array@0.15.1': + '@eslint/config-array@0.16.0': dependencies: - '@eslint/object-schema': 2.1.3 + '@eslint/object-schema': 2.1.4 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -3013,7 +3030,7 @@ snapshots: debug: 4.3.4 espree: 10.0.1 globals: 14.0.0 - ignore: 5.2.4 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -3023,9 +3040,9 @@ snapshots: '@eslint/js@8.57.0': {} - '@eslint/js@9.4.0': {} + '@eslint/js@9.5.0': {} - '@eslint/object-schema@2.1.3': {} + '@eslint/object-schema@2.1.4': {} '@humanwhocodes/config-array@0.11.14': dependencies: @@ -3092,49 +3109,49 @@ snapshots: '@sapphi-red/web-noise-suppressor@0.3.3': {} - '@stylistic/eslint-plugin-js@2.1.0(eslint@9.4.0)': + '@stylistic/eslint-plugin-js@2.1.0(eslint@9.5.0)': dependencies: '@types/eslint': 8.56.10 acorn: 8.11.3 - eslint: 9.4.0 + eslint: 9.5.0 eslint-visitor-keys: 4.0.0 espree: 10.0.1 - '@stylistic/eslint-plugin-jsx@2.1.0(eslint@9.4.0)': + '@stylistic/eslint-plugin-jsx@2.1.0(eslint@9.5.0)': dependencies: - '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) + '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.5.0) '@types/eslint': 8.56.10 - eslint: 9.4.0 + eslint: 9.5.0 estraverse: 5.3.0 picomatch: 4.0.2 - '@stylistic/eslint-plugin-plus@2.1.0(eslint@9.4.0)(typescript@5.4.5)': + '@stylistic/eslint-plugin-plus@2.1.0(eslint@9.5.0)(typescript@5.4.5)': dependencies: '@types/eslint': 8.56.10 - '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) - eslint: 9.4.0 + '@typescript-eslint/utils': 7.11.0(eslint@9.5.0)(typescript@5.4.5) + eslint: 9.5.0 transitivePeerDependencies: - supports-color - typescript - '@stylistic/eslint-plugin-ts@2.1.0(eslint@9.4.0)(typescript@5.4.5)': + '@stylistic/eslint-plugin-ts@2.1.0(eslint@9.5.0)(typescript@5.4.5)': dependencies: - '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) + '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.5.0) '@types/eslint': 8.56.10 - '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) - eslint: 9.4.0 + '@typescript-eslint/utils': 7.11.0(eslint@9.5.0)(typescript@5.4.5) + eslint: 9.5.0 transitivePeerDependencies: - supports-color - typescript - '@stylistic/eslint-plugin@2.1.0(eslint@9.4.0)(typescript@5.4.5)': + '@stylistic/eslint-plugin@2.1.0(eslint@9.5.0)(typescript@5.4.5)': dependencies: - '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) - '@stylistic/eslint-plugin-jsx': 2.1.0(eslint@9.4.0) - '@stylistic/eslint-plugin-plus': 2.1.0(eslint@9.4.0)(typescript@5.4.5) - '@stylistic/eslint-plugin-ts': 2.1.0(eslint@9.4.0)(typescript@5.4.5) + '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.5.0) + '@stylistic/eslint-plugin-jsx': 2.1.0(eslint@9.5.0) + '@stylistic/eslint-plugin-plus': 2.1.0(eslint@9.5.0)(typescript@5.4.5) + '@stylistic/eslint-plugin-ts': 2.1.0(eslint@9.5.0)(typescript@5.4.5) '@types/eslint': 8.56.10 - eslint: 9.4.0 + eslint: 9.5.0 transitivePeerDependencies: - supports-color - typescript @@ -3144,7 +3161,7 @@ snapshots: '@types/filesystem': 0.0.33 '@types/har-format': 1.2.13 - '@types/diff@5.0.3': {} + '@types/diff@5.2.1': {} '@types/eslint@8.56.10': dependencies: @@ -3168,6 +3185,8 @@ snapshots: '@types/har-format@1.2.13': {} + '@types/html-minifier-terser@7.0.2': {} + '@types/json-schema@7.0.11': {} '@types/json5@0.0.29': {} @@ -3176,7 +3195,7 @@ snapshots: dependencies: '@types/node': 18.19.34 - '@types/lodash@4.17.4': {} + '@types/lodash@4.17.5': {} '@types/minimist@1.2.2': {} @@ -3207,18 +3226,18 @@ snapshots: '@types/node': 18.19.34 optional: true - '@types/yazl@2.4.2': + '@types/yazl@2.4.5': dependencies: '@types/node': 18.19.34 - '@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.12.0 - '@typescript-eslint/type-utils': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) - '@typescript-eslint/utils': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.12.0 + '@typescript-eslint/parser': 7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.13.0 + '@typescript-eslint/type-utils': 7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/utils': 7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.13.0 eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) graphemer: 1.4.0 ignore: 5.3.1 @@ -3229,15 +3248,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.0.0-alpha.28(@typescript-eslint/parser@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.0.0-alpha.30(@typescript-eslint/parser@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5))(eslint@9.5.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.0.0-alpha.28 - '@typescript-eslint/type-utils': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 - eslint: 9.4.0 + '@typescript-eslint/parser': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.0.0-alpha.30 + '@typescript-eslint/type-utils': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 + eslint: 9.5.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -3247,12 +3266,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + '@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.12.0 - '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.12.0 + '@typescript-eslint/scope-manager': 7.13.0 + '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.13.0 debug: 4.3.4 eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) optionalDependencies: @@ -3260,14 +3279,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/parser@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.0.0-alpha.28 - '@typescript-eslint/types': 8.0.0-alpha.28 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.28(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 + '@typescript-eslint/scope-manager': 8.0.0-alpha.30 + '@typescript-eslint/types': 8.0.0-alpha.30 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.30(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 debug: 4.3.4 - eslint: 9.4.0 + eslint: 9.5.0 optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: @@ -3278,20 +3297,20 @@ snapshots: '@typescript-eslint/types': 7.11.0 '@typescript-eslint/visitor-keys': 7.11.0 - '@typescript-eslint/scope-manager@7.12.0': + '@typescript-eslint/scope-manager@7.13.0': dependencies: - '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/visitor-keys': 7.12.0 + '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/visitor-keys': 7.13.0 - '@typescript-eslint/scope-manager@8.0.0-alpha.28': + '@typescript-eslint/scope-manager@8.0.0-alpha.30': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.28 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 + '@typescript-eslint/types': 8.0.0-alpha.30 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 - '@typescript-eslint/type-utils@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) ts-api-utils: 1.3.0(typescript@5.4.5) @@ -3300,10 +3319,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.0-alpha.28(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.0.0-alpha.30(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) debug: 4.3.4 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -3314,9 +3333,9 @@ snapshots: '@typescript-eslint/types@7.11.0': {} - '@typescript-eslint/types@7.12.0': {} + '@typescript-eslint/types@7.13.0': {} - '@typescript-eslint/types@8.0.0-alpha.28': {} + '@typescript-eslint/types@8.0.0-alpha.30': {} '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': dependencies: @@ -3333,10 +3352,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.12.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.13.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/visitor-keys': 7.12.0 + '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/visitor-keys': 7.13.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3348,10 +3367,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.0.0-alpha.28(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.0.0-alpha.30(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.28 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 + '@typescript-eslint/types': 8.0.0-alpha.30 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3363,35 +3382,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.11.0(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.11.0(eslint@9.5.0)(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) '@typescript-eslint/scope-manager': 7.11.0 '@typescript-eslint/types': 7.11.0 '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) - eslint: 9.4.0 + eslint: 9.5.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': + '@typescript-eslint/utils@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) - '@typescript-eslint/scope-manager': 7.12.0 - '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.13.0 + '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) - '@typescript-eslint/scope-manager': 8.0.0-alpha.28 - '@typescript-eslint/types': 8.0.0-alpha.28 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.28(typescript@5.4.5) - eslint: 9.4.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) + '@typescript-eslint/scope-manager': 8.0.0-alpha.30 + '@typescript-eslint/types': 8.0.0-alpha.30 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.30(typescript@5.4.5) + eslint: 9.5.0 transitivePeerDependencies: - supports-color - typescript @@ -3401,14 +3420,14 @@ snapshots: '@typescript-eslint/types': 7.11.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.12.0': + '@typescript-eslint/visitor-keys@7.13.0': dependencies: - '@typescript-eslint/types': 7.12.0 + '@typescript-eslint/types': 7.13.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.0.0-alpha.28': + '@typescript-eslint/visitor-keys@8.0.0-alpha.30': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.28 + '@typescript-eslint/types': 8.0.0-alpha.30 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -3427,8 +3446,6 @@ snapshots: dependencies: acorn: 8.11.3 - acorn@8.10.0: {} - acorn@8.11.3: {} agent-base@6.0.2: @@ -3613,13 +3630,14 @@ snapshots: pascal-case: 3.1.2 tslib: 2.6.2 - camelcase-keys@6.2.2: + camelcase-keys@7.0.2: dependencies: - camelcase: 5.3.1 + camelcase: 6.3.0 map-obj: 4.3.0 - quick-lru: 4.0.1 + quick-lru: 5.1.1 + type-fest: 1.4.0 - camelcase@5.3.1: {} + camelcase@6.3.0: {} caniuse-lite@1.0.30001625: {} @@ -3697,12 +3715,14 @@ snapshots: dependencies: browserslist: 4.23.0 - cosmiconfig@8.1.3: + cosmiconfig@8.3.6(typescript@5.4.5): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + optionalDependencies: + typescript: 5.4.5 cross-fetch@3.1.5: dependencies: @@ -3716,7 +3736,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-functions-list@3.1.0: {} + css-functions-list@3.2.2: {} css-tree@2.3.1: dependencies: @@ -3764,6 +3784,8 @@ snapshots: decamelize@1.2.0: {} + decamelize@5.0.1: {} + decode-uri-component@0.2.0: {} deep-is@0.1.4: {} @@ -3797,7 +3819,7 @@ snapshots: devtools-protocol@0.0.1107588: {} - diff@5.1.0: {} + diff@5.2.0: {} dir-glob@3.0.1: dependencies: @@ -3995,33 +4017,31 @@ snapshots: esbuild-windows-64: 0.15.18 esbuild-windows-arm64: 0.15.18 - esbuild@0.20.2: + esbuild@0.21.5: optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - - escalade@3.1.1: {} + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 escalade@3.1.2: {} @@ -4029,9 +4049,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))): dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) eslint-import-resolver-node@0.3.9: dependencies: @@ -4041,26 +4061,32 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/parser': 7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-headers@1.1.2(eslint@9.4.0): + eslint-plugin-check-file@2.8.0(eslint@9.5.0): dependencies: - eslint: 9.4.0 + eslint: 9.5.0 + is-glob: 4.0.3 + micromatch: 4.0.5 - eslint-plugin-import-x@0.5.1(eslint@9.4.0)(typescript@5.4.5): + eslint-plugin-headers@1.1.2(eslint@9.5.0): dependencies: - '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + eslint: 9.5.0 + + eslint-plugin-import-x@0.5.1(eslint@9.5.0)(typescript@5.4.5): + dependencies: + '@typescript-eslint/utils': 7.11.0(eslint@9.5.0)(typescript@5.4.5) debug: 4.3.4 doctrine: 3.0.0 - eslint: 9.4.0 + eslint: 9.5.0 eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.7.5 is-glob: 4.0.3 @@ -4071,7 +4097,7 @@ snapshots: - supports-color - typescript - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -4081,7 +4107,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -4092,7 +4118,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/parser': 7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -4111,19 +4137,19 @@ snapshots: dependencies: eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) - eslint-plugin-simple-import-sort@12.1.0(eslint@9.4.0): + eslint-plugin-simple-import-sort@12.1.0(eslint@9.5.0): dependencies: - eslint: 9.4.0 + eslint: 9.5.0 - eslint-plugin-unicorn@53.0.0(eslint@9.4.0): + eslint-plugin-unicorn@54.0.0(eslint@9.5.0): dependencies: '@babel/helper-validator-identifier': 7.24.6 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) '@eslint/eslintrc': 3.1.0 ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.37.1 - eslint: 9.4.0 + eslint: 9.5.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -4137,12 +4163,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): dependencies: eslint: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint-rule-composer: 0.3.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) + + eslint-plugin-unused-imports@4.0.0(@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@9.5.0): + dependencies: + eslint: 9.5.0 + eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5))(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.4.5) eslint-rule-composer@0.3.0: {} @@ -4156,8 +4189,6 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-visitor-keys@3.4.2: {} - eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@4.0.0: {} @@ -4205,13 +4236,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.4.0: + eslint@9.5.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) - '@eslint-community/regexpp': 4.6.2 - '@eslint/config-array': 0.15.1 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/config-array': 0.16.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.4.0 + '@eslint/js': 9.5.0 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 @@ -4229,7 +4260,7 @@ snapshots: file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - ignore: 5.2.4 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4291,7 +4322,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-glob@3.2.12: + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -4319,6 +4350,10 @@ snapshots: dependencies: flat-cache: 3.0.4 + file-entry-cache@7.0.2: + dependencies: + flat-cache: 3.2.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -4339,7 +4374,13 @@ snapshots: flat-cache@3.0.4: dependencies: - flatted: 3.2.7 + flatted: 3.3.1 + rimraf: 3.0.2 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 flat-cache@4.0.1: @@ -4347,8 +4388,6 @@ snapshots: flatted: 3.3.1 keyv: 4.5.4 - flatted@3.2.7: {} - flatted@3.3.1: {} for-each@0.3.3: @@ -4374,8 +4413,6 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.1: {} - function-bind@1.1.2: {} function.prototype.name@1.1.6: @@ -4457,7 +4494,7 @@ snapshots: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.2 ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 @@ -4511,15 +4548,11 @@ snapshots: is-number: 3.0.0 kind-of: 4.0.0 - has@1.0.3: - dependencies: - function-bind: 1.1.1 - hasown@2.0.2: dependencies: function-bind: 1.1.2 - highlight.js@11.7.0: {} + highlight.js@11.8.0: {} hosted-git-info@2.8.9: {} @@ -4548,8 +4581,6 @@ snapshots: ieee754@1.2.1: {} - ignore@5.2.4: {} - ignore@5.3.1: {} import-fresh@3.3.0: @@ -4563,6 +4594,8 @@ snapshots: indent-string@4.0.0: {} + indent-string@5.0.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -4610,10 +4643,6 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.12.0: - dependencies: - has: 1.0.3 - is-core-module@2.13.1: dependencies: hasown: 2.0.2 @@ -4773,7 +4802,7 @@ snapshots: kind-of@6.0.3: {} - known-css-properties@0.27.0: {} + known-css-properties@0.29.0: {} levn@0.4.1: dependencies: @@ -4816,19 +4845,19 @@ snapshots: mdn-data@2.0.30: {} - meow@9.0.0: + meow@10.1.5: dependencies: '@types/minimist': 1.2.2 - camelcase-keys: 6.2.2 - decamelize: 1.2.0 + camelcase-keys: 7.0.2 + decamelize: 5.0.1 decamelize-keys: 1.1.1 hard-rejection: 2.1.0 minimist-options: 4.1.0 normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 + read-pkg-up: 8.0.0 + redent: 4.0.0 + trim-newlines: 4.1.1 + type-fest: 1.4.0 yargs-parser: 20.2.9 merge2@1.4.1: {} @@ -4877,7 +4906,7 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.6: {} + nanoid@3.3.7: {} nanoid@4.0.2: {} @@ -4920,7 +4949,7 @@ snapshots: normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.12.0 + is-core-module: 2.13.1 semver: 7.6.2 validate-npm-package-license: 3.0.4 @@ -5038,8 +5067,6 @@ snapshots: pend@1.2.0: {} - picocolors@1.0.0: {} - picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -5050,26 +5077,24 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-media-query-parser@0.2.3: {} - postcss-resolve-nested-selector@0.1.1: {} - postcss-safe-parser@6.0.0(postcss@8.4.23): + postcss-safe-parser@6.0.0(postcss@8.4.38): dependencies: - postcss: 8.4.23 + postcss: 8.4.38 - postcss-selector-parser@6.0.12: + postcss-selector-parser@6.1.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss@8.4.23: + postcss@8.4.38: dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 prelude-ls@1.2.1: {} @@ -5109,7 +5134,7 @@ snapshots: queue-microtask@1.2.3: {} - quick-lru@4.0.1: {} + quick-lru@5.1.1: {} read-pkg-up@7.0.1: dependencies: @@ -5117,6 +5142,12 @@ snapshots: read-pkg: 5.2.0 type-fest: 0.8.1 + read-pkg-up@8.0.0: + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.1 @@ -5124,16 +5155,23 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 + read-pkg@6.0.0: + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - redent@3.0.0: + redent@4.0.0: dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 + indent-string: 5.0.0 + strip-indent: 4.0.0 regex-not@1.0.2: dependencies: @@ -5271,6 +5309,8 @@ snapshots: source-map-js@1.0.2: {} + source-map-js@1.2.0: {} + source-map-resolve@0.5.3: dependencies: atob: 2.1.2 @@ -5356,53 +5396,56 @@ snapshots: dependencies: min-indent: 1.0.1 + strip-indent@4.0.0: + dependencies: + min-indent: 1.0.1 + strip-json-comments@3.1.1: {} style-search@0.1.0: {} - stylelint-config-recommended@12.0.0(stylelint@15.6.0): + stylelint-config-recommended@12.0.0(stylelint@15.11.0(typescript@5.4.5)): dependencies: - stylelint: 15.6.0 + stylelint: 15.11.0(typescript@5.4.5) - stylelint-config-standard@33.0.0(stylelint@15.6.0): + stylelint-config-standard@33.0.0(stylelint@15.11.0(typescript@5.4.5)): dependencies: - stylelint: 15.6.0 - stylelint-config-recommended: 12.0.0(stylelint@15.6.0) + stylelint: 15.11.0(typescript@5.4.5) + stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.4.5)) - stylelint@15.6.0: + stylelint@15.11.0(typescript@5.4.5): dependencies: - '@csstools/css-parser-algorithms': 2.1.1(@csstools/css-tokenizer@2.1.1) - '@csstools/css-tokenizer': 2.1.1 - '@csstools/media-query-list-parser': 2.0.4(@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1))(@csstools/css-tokenizer@2.1.1) - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.12) + '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) + '@csstools/css-tokenizer': 2.3.1 + '@csstools/media-query-list-parser': 2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.0) balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 8.1.3 - css-functions-list: 3.1.0 + cosmiconfig: 8.3.6(typescript@5.4.5) + css-functions-list: 3.2.2 css-tree: 2.3.1 debug: 4.3.4 - fast-glob: 3.2.12 + fast-glob: 3.3.2 fastest-levenshtein: 1.0.16 - file-entry-cache: 6.0.1 + file-entry-cache: 7.0.2 global-modules: 2.0.0 globby: 11.1.0 globjoin: 0.1.4 html-tags: 3.3.1 - ignore: 5.2.4 + ignore: 5.3.1 import-lazy: 4.0.0 imurmurhash: 0.1.4 is-plain-object: 5.0.0 - known-css-properties: 0.27.0 + known-css-properties: 0.29.0 mathml-tag-names: 2.1.3 - meow: 9.0.0 + meow: 10.1.5 micromatch: 4.0.5 normalize-path: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.23 - postcss-media-query-parser: 0.2.3 + picocolors: 1.0.1 + postcss: 8.4.38 postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 6.0.0(postcss@8.4.23) - postcss-selector-parser: 6.0.12 + postcss-safe-parser: 6.0.0(postcss@8.4.38) + postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 string-width: 4.2.3 @@ -5411,10 +5454,10 @@ snapshots: supports-hyperlinks: 3.0.0 svg-tags: 1.0.0 table: 6.8.1 - v8-compile-cache: 2.3.0 write-file-atomic: 5.0.1 transitivePeerDependencies: - supports-color + - typescript supports-color@5.5.0: dependencies: @@ -5459,7 +5502,7 @@ snapshots: terser@5.31.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.10.0 + acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 @@ -5484,13 +5527,13 @@ snapshots: tr46@0.0.3: {} - trim-newlines@3.0.1: {} + trim-newlines@4.1.1: {} ts-api-utils@1.3.0(typescript@5.4.5): dependencies: typescript: 5.4.5 - ts-patch@3.1.2: + ts-patch@3.2.0: dependencies: chalk: 4.1.2 global-prefix: 3.0.0 @@ -5508,9 +5551,9 @@ snapshots: tslib@2.6.2: {} - tsx@4.13.3: + tsx@4.15.4: dependencies: - esbuild: 0.20.2 + esbuild: 0.21.5 get-tsconfig: 4.7.5 optionalDependencies: fsevents: 2.3.3 @@ -5519,14 +5562,14 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.18.1: {} - type-fest@0.20.2: {} type-fest@0.6.0: {} type-fest@0.8.1: {} + type-fest@1.4.0: {} + type-fest@4.20.0: {} typed-array-buffer@1.0.2: @@ -5561,11 +5604,11 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript-eslint@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5): + typescript-eslint@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0-alpha.28(@typescript-eslint/parser@8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/parser': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.28(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.0.0-alpha.30(@typescript-eslint/parser@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5))(eslint@9.5.0)(typescript@5.4.5) + '@typescript-eslint/parser': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: @@ -5623,8 +5666,6 @@ snapshots: util-deprecate@1.0.2: {} - v8-compile-cache@2.3.0: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -5693,7 +5734,7 @@ snapshots: yargs@17.7.1: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 From c618bbbf90223ed8b9b68da8fb485c45bc0df2c2 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Sat, 15 Jun 2024 15:45:14 -0400 Subject: [PATCH 033/126] Migration --- .eslintrc.json | 41 ++ .../workflows/test-packages-discord-types.yml | 27 +- browser/VencordNativeStub.ts | 4 +- browser/monaco.ts | 1 + package.json | 12 +- packages/vencord-types/package.json | 4 +- packages/vencord-types/prepare.ts | 2 +- pnpm-lock.yaml | 346 +++++------------ scripts/build/build.mjs | 74 ++-- scripts/build/buildWeb.mjs | 147 ++++---- scripts/build/common.mjs | 49 +-- scripts/build/inject/react.mjs | 6 +- scripts/build/module/style.js | 2 + scripts/generatePluginList.ts | 230 ------------ scripts/generateReport.ts | 315 ---------------- scripts/runInstaller.mjs | 15 +- scripts/suppressExperimentalWarnings.js | 15 +- scripts/utils.mjs | 4 +- src/Vencord.ts | 36 +- src/VencordNative.ts | 22 +- src/api/Badges.ts | 25 +- src/api/ChatButtons.tsx | 14 +- src/api/Commands/commandHelpers.ts | 92 ++++- src/api/Commands/index.ts | 48 +-- src/api/Commands/types.ts | 30 +- src/api/ContextMenu.ts | 25 +- src/api/DataStore/index.ts | 8 +- src/api/MemberListDecorators.ts | 9 +- src/api/MessageAccessories.ts | 6 +- src/api/MessageDecorations.ts | 7 +- src/api/MessageEvents.ts | 42 ++- src/api/MessagePopover.ts | 24 +- src/api/MessageUpdater.ts | 23 +- .../Notifications/NotificationComponent.tsx | 56 +-- src/api/Notifications/Notifications.tsx | 23 +- src/api/Notifications/notificationLog.tsx | 31 +- src/api/ServerList.ts | 11 +- src/api/Settings.ts | 25 +- src/api/Styles.ts | 12 +- src/components/Badge.tsx | 4 +- src/components/CheckedTextInput.tsx | 8 +- src/components/CodeBlock.tsx | 16 +- src/components/DonateButton.tsx | 2 +- src/components/ErrorBoundary.tsx | 29 +- src/components/ErrorCard.tsx | 14 +- src/components/ExpandableHeader.css | 3 +- src/components/ExpandableHeader.tsx | 5 +- src/components/Flex.tsx | 10 +- src/components/Link.tsx | 6 +- .../PluginSettings/ContributorModal.tsx | 22 +- src/components/PluginSettings/PluginModal.tsx | 42 +-- .../components/SettingBooleanComponent.tsx | 12 +- .../components/SettingCustomComponent.tsx | 9 +- .../components/SettingNumericComponent.tsx | 14 +- .../components/SettingSelectComponent.tsx | 15 +- .../components/SettingSliderComponent.tsx | 16 +- .../components/SettingTextComponent.tsx | 14 +- .../PluginSettings/components/index.ts | 2 +- src/components/PluginSettings/index.tsx | 161 ++++---- src/components/Switch.tsx | 82 ++-- .../VencordSettings/BackupAndRestoreTab.tsx | 74 ++-- src/components/VencordSettings/CloudTab.tsx | 51 ++- .../VencordSettings/PatchHelperTab.tsx | 111 +++--- src/components/VencordSettings/ThemesTab.tsx | 294 +++++++-------- src/components/VencordSettings/UpdaterTab.tsx | 87 +++-- src/components/VencordSettings/VencordTab.tsx | 81 ++-- src/components/VencordSettings/shared.tsx | 31 +- src/debug/Tracer.ts | 4 +- src/debug/loadLazyChunks.ts | 12 +- src/debug/runReporter.ts | 2 +- src/globals.d.ts | 2 +- src/main/index.ts | 9 +- src/main/ipcMain.ts | 13 +- src/main/ipcPlugins.ts | 4 +- src/main/patchWin32Updater.ts | 6 +- src/main/patcher.ts | 7 +- src/main/themes/index.ts | 4 +- src/main/updater/http.ts | 2 +- src/main/utils/crxToZip.ts | 6 +- src/main/utils/extensions.ts | 14 +- src/main/utils/simpleGet.ts | 21 +- src/plugins/_api/badges/index.tsx | 26 +- src/plugins/_api/commands.ts | 2 +- src/plugins/_api/messageEvents.ts | 2 +- src/plugins/_api/serverList.ts | 2 +- src/plugins/_core/settings.tsx | 11 +- src/plugins/_core/supportHelper.tsx | 29 +- src/plugins/anonymiseFileNames/index.tsx | 14 +- src/plugins/appleMusic.desktop/index.tsx | 62 +-- src/plugins/appleMusic.desktop/native.ts | 14 +- src/plugins/arRPC.web/index.tsx | 22 +- src/plugins/automodContext/index.tsx | 18 +- src/plugins/betterFolders/FolderSideBar.tsx | 11 +- src/plugins/betterFolders/index.tsx | 27 +- src/plugins/betterNotes/index.tsx | 6 +- src/plugins/betterRoleContext/index.tsx | 14 +- src/plugins/betterRoleDot/index.ts | 10 +- .../components/RenameButton.tsx | 51 ++- .../betterSessions/components/RenameModal.tsx | 16 +- .../betterSessions/components/icons.tsx | 18 +- src/plugins/betterSessions/index.tsx | 24 +- src/plugins/betterSessions/utils.ts | 19 +- src/plugins/betterSettings/index.tsx | 9 +- src/plugins/biggerStreamPreview/index.tsx | 93 +++-- .../biggerStreamPreview/webpack/stores.ts | 2 +- .../webpack/types/stores.ts | 26 +- src/plugins/blurNsfw/index.ts | 4 +- src/plugins/callTimer/index.tsx | 13 +- src/plugins/clearURLs/index.ts | 22 +- src/plugins/clientTheme/index.tsx | 68 ++-- src/plugins/consoleShortcuts/index.ts | 19 +- src/plugins/consoleShortcuts/native.ts | 2 +- src/plugins/copyEmojiMarkdown/index.tsx | 2 +- src/plugins/copyUserURLs/index.tsx | 33 +- src/plugins/crashHandler/index.ts | 19 +- src/plugins/customRPC/index.tsx | 125 ++++--- src/plugins/dearrow/index.tsx | 27 +- src/plugins/decor/index.tsx | 13 +- .../decor/lib/stores/AuthorizationStore.tsx | 34 +- .../lib/stores/CurrentUserDecorationsStore.ts | 18 +- .../decor/lib/stores/UsersDecorationsStore.ts | 21 +- src/plugins/decor/lib/utils/decoration.ts | 15 +- src/plugins/decor/settings.tsx | 39 +- .../DecorDecorationGridDecoration.tsx | 26 +- .../decor/ui/components/DecorSection.tsx | 63 ++-- .../ui/components/DecorationContextMenu.tsx | 64 ++-- .../ui/components/DecorationGridCreate.tsx | 30 +- .../ui/components/DecorationGridNone.tsx | 28 +- src/plugins/decor/ui/components/Grid.tsx | 25 +- .../decor/ui/components/SectionedGridList.tsx | 37 +- src/plugins/decor/ui/components/index.ts | 11 +- .../decor/ui/modals/ChangeDecorationModal.tsx | 354 ++++++++++-------- .../decor/ui/modals/CreateDecorationModal.tsx | 204 +++++----- .../decor/ui/modals/GuidelinesModal.tsx | 10 +- src/plugins/devCompanion.dev/index.tsx | 34 +- src/plugins/emoteCloner/index.tsx | 245 ++++++------ src/plugins/experiments/index.tsx | 14 +- src/plugins/fakeNitro/index.tsx | 167 ++++----- src/plugins/fakeProfileThemes/index.tsx | 71 ++-- src/plugins/favEmojiFirst/index.ts | 8 +- src/plugins/favGifSearch/index.tsx | 12 +- src/plugins/forceOwnerCrown/index.ts | 8 +- src/plugins/friendInvites/index.ts | 18 +- src/plugins/friendsSince/index.tsx | 9 +- src/plugins/gameActivityToggle/index.tsx | 8 +- src/plugins/greetStickerPicker/index.tsx | 44 +-- src/plugins/hideAttachments/index.tsx | 10 +- src/plugins/ignoreActivities/index.tsx | 159 ++++---- .../imageZoom/components/Magnifier.tsx | 10 +- src/plugins/imageZoom/index.tsx | 59 +-- src/plugins/imageZoom/utils/waitFor.ts | 2 +- src/plugins/implicitRelationships/index.ts | 27 +- src/plugins/index.ts | 103 ++--- .../components/DecryptionModal.tsx | 15 +- .../components/EncryptionModal.tsx | 39 +- src/plugins/invisibleChat.desktop/index.tsx | 104 +++-- src/plugins/keepCurrentChannel/index.ts | 40 +- src/plugins/lastfm/index.tsx | 57 +-- src/plugins/maskedLinkPaste/index.ts | 2 +- src/plugins/memberCount/MemberCount.tsx | 7 +- .../memberCount/OnlineMemberCountStore.ts | 31 +- src/plugins/memberCount/index.tsx | 15 +- src/plugins/messageClickActions/index.ts | 25 +- src/plugins/messageLatency/index.tsx | 106 +++--- src/plugins/messageLinkEmbeds/index.tsx | 186 ++++----- src/plugins/messageLogger/index.tsx | 87 +++-- src/plugins/messageTags/index.ts | 48 +-- src/plugins/moreCommands/index.ts | 2 +- src/plugins/moreUserTags/index.tsx | 72 ++-- src/plugins/moyai/index.ts | 14 +- src/plugins/mutualGroupDMs/index.tsx | 52 +-- src/plugins/noBlockedMessages/index.ts | 13 +- src/plugins/noReplyMention/index.tsx | 4 +- src/plugins/onePingPerDM/index.ts | 17 +- src/plugins/openInApp/index.ts | 11 +- src/plugins/openInApp/native.ts | 7 +- src/plugins/pauseInvitesForever/index.tsx | 8 +- .../components/RolesAndUsersPermissions.tsx | 39 +- .../components/UserPermissions.tsx | 48 +-- .../permissionsViewer/components/icons.tsx | 71 ++-- src/plugins/permissionsViewer/index.tsx | 24 +- src/plugins/permissionsViewer/utils.ts | 23 +- src/plugins/petpet/index.ts | 29 +- src/plugins/pictureInPicture/index.tsx | 84 ++--- .../pinDms/components/CreateCategoryModal.tsx | 39 +- src/plugins/pinDms/components/contextMenu.tsx | 62 ++- src/plugins/pinDms/constants.ts | 42 +-- src/plugins/pinDms/data.ts | 29 +- src/plugins/pinDms/index.tsx | 114 +++--- src/plugins/platformIndicators/index.tsx | 121 +++--- src/plugins/previewMessage/index.tsx | 37 +- .../components/PronounsAboutComponent.tsx | 6 +- .../components/PronounsChatComponent.tsx | 18 +- src/plugins/pronoundb/pronoundbUtils.ts | 32 +- src/plugins/quickMention/index.tsx | 17 +- src/plugins/quickReply/index.ts | 64 ++-- src/plugins/reactErrorDecoder/index.ts | 2 +- .../readAllNotificationsButton/index.tsx | 46 +-- src/plugins/relationshipNotifier/functions.ts | 42 +-- src/plugins/relationshipNotifier/index.ts | 12 +- src/plugins/relationshipNotifier/settings.ts | 2 +- src/plugins/relationshipNotifier/types.ts | 23 +- src/plugins/relationshipNotifier/utils.ts | 114 +++--- src/plugins/replaceGoogleSearch/index.tsx | 12 +- src/plugins/replyTimestamp/index.tsx | 25 +- src/plugins/resurrectHome/index.tsx | 58 +-- src/plugins/reverseImageSearch/index.tsx | 100 +++-- src/plugins/reviewDB/auth.tsx | 12 +- .../reviewDB/components/BlockedUserModal.tsx | 43 ++- .../reviewDB/components/MessageButton.tsx | 112 +++--- .../reviewDB/components/ReviewBadge.tsx | 6 +- .../reviewDB/components/ReviewComponent.tsx | 79 ++-- .../reviewDB/components/ReviewModal.tsx | 8 +- .../reviewDB/components/ReviewsView.tsx | 28 +- src/plugins/reviewDB/index.tsx | 68 ++-- src/plugins/reviewDB/reviewDbApi.ts | 22 +- src/plugins/reviewDB/settings.tsx | 2 +- src/plugins/reviewDB/utils.tsx | 54 --- src/plugins/roleColorEverywhere/index.tsx | 9 +- src/plugins/searchReply/index.tsx | 22 +- src/plugins/seeSummaries/index.tsx | 11 +- src/plugins/sendTimestamps/index.tsx | 16 +- src/plugins/sendTimestamps/styles.css | 3 +- src/plugins/serverInfo/GuildInfoModal.tsx | 94 +++-- src/plugins/serverInfo/index.tsx | 10 +- src/plugins/serverListIndicators/index.tsx | 31 +- .../shikiCodeblocks.desktop/api/languages.ts | 15 +- .../shikiCodeblocks.desktop/api/shiki.ts | 10 +- .../shikiCodeblocks.desktop/api/themes.ts | 2 +- .../components/ButtonRow.tsx | 5 +- .../components/Code.tsx | 13 +- .../components/CopyButton.tsx | 6 +- .../components/Header.tsx | 6 +- .../components/Highlighter.tsx | 20 +- .../hooks/useCopyCooldown.ts | 6 +- .../hooks/useShikiSettings.ts | 9 +- .../shikiCodeblocks.desktop/hooks/useTheme.ts | 13 +- src/plugins/shikiCodeblocks.desktop/index.ts | 11 +- .../previewExample.tsx | 20 +- .../utils/createStyle.ts | 6 +- .../shikiCodeblocks.desktop/utils/misc.ts | 3 +- src/plugins/showConnections/index.tsx | 44 +-- .../components/HiddenChannelLockScreen.tsx | 273 ++++++-------- src/plugins/showHiddenChannels/index.tsx | 46 ++- src/plugins/showMeYourName/index.tsx | 10 +- src/plugins/showTimeoutDuration/index.tsx | 19 +- src/plugins/silentMessageToggle/index.tsx | 34 +- src/plugins/silentTyping/index.tsx | 33 +- src/plugins/sortFriendRequests/index.tsx | 39 +- .../spotifyControls/PlayerComponent.tsx | 114 +++--- src/plugins/spotifyControls/SpotifyStore.ts | 32 +- src/plugins/spotifyControls/index.tsx | 36 +- src/plugins/spotifyControls/spotifyStyles.css | 3 +- src/plugins/spotifyShareCommands/index.ts | 23 +- .../startupTimings/StartupTimingPage.tsx | 42 ++- src/plugins/streamerModeOnStream/index.ts | 22 +- src/plugins/superReactionTweaks/index.ts | 4 +- src/plugins/textReplace/index.tsx | 63 ++-- src/plugins/themeAttributes/index.ts | 19 +- src/plugins/translate/TranslateIcon.tsx | 60 +-- src/plugins/translate/TranslateModal.tsx | 64 ++-- .../translate/TranslationAccessory.tsx | 35 +- src/plugins/translate/index.tsx | 9 +- src/plugins/translate/styles.css | 3 +- src/plugins/translate/utils.ts | 6 +- src/plugins/typingIndicator/index.tsx | 44 ++- src/plugins/typingTweaks/index.tsx | 87 +++-- src/plugins/unindent/index.ts | 6 +- src/plugins/unsuppressEmbeds/index.tsx | 19 +- src/plugins/urbanDictionary/index.ts | 31 +- .../components/VoiceChannelSection.tsx | 14 +- src/plugins/userVoiceShow/index.tsx | 10 +- src/plugins/validReply/index.ts | 45 ++- src/plugins/validUser/index.tsx | 58 +-- src/plugins/vcDoubleClick/index.ts | 16 +- src/plugins/vcNarrator/index.tsx | 77 ++-- src/plugins/vencordToolbox/index.tsx | 31 +- src/plugins/viewIcons/index.tsx | 59 +-- src/plugins/viewRaw/index.tsx | 85 +++-- src/plugins/voiceDownload/index.tsx | 2 +- src/plugins/voiceMessages/DesktopRecorder.tsx | 2 +- src/plugins/voiceMessages/index.tsx | 44 ++- src/plugins/voiceMessages/native.ts | 2 +- .../volumeBooster.discordDesktop/index.ts | 4 +- src/plugins/webContextMenus.web/index.ts | 7 +- src/plugins/webKeybinds.web/index.ts | 7 +- src/plugins/whoReacted/index.tsx | 58 +-- src/plugins/wikisearch/index.ts | 9 +- src/plugins/xsOverlay.desktop/index.ts | 156 +++----- src/plugins/xsOverlay.desktop/native.ts | 6 +- src/shared/SettingsStore.ts | 14 +- src/shared/debounce.ts | 2 +- src/shared/onceDefined.ts | 11 +- src/utils/Logger.ts | 16 +- src/utils/Queue.ts | 6 +- src/utils/cloud.tsx | 2 +- src/utils/discord.tsx | 69 ++-- src/utils/guards.ts | 8 +- src/utils/lazy.ts | 7 +- src/utils/lazyReact.tsx | 5 +- src/utils/margins.ts | 5 +- src/utils/misc.tsx | 21 +- src/utils/modal.tsx | 13 +- src/utils/onlyOnce.ts | 7 +- src/utils/patches.ts | 2 +- src/utils/quickCss.ts | 8 +- src/utils/react.tsx | 17 +- src/utils/settingsSync.ts | 11 +- src/utils/text.ts | 14 +- src/utils/types.ts | 37 +- src/utils/updater.ts | 7 +- src/utils/web-metadata.ts | 2 +- src/utils/web.ts | 7 +- src/webpack/common/classes.ts | 2 +- src/webpack/common/components.ts | 4 +- src/webpack/common/index.ts | 8 +- src/webpack/common/internal.tsx | 7 +- src/webpack/common/menu.ts | 1 + src/webpack/common/react.ts | 14 +- src/webpack/common/settingsStores.ts | 15 - src/webpack/common/stores.ts | 114 +++--- src/webpack/common/types/components.d.ts | 8 +- src/webpack/common/types/fluxEvents.d.ts | 40 -- src/webpack/common/types/i18nMessages.ts | 24 -- src/webpack/common/types/index.d.ts | 4 +- src/webpack/common/types/menu.d.ts | 3 +- src/webpack/common/types/settingsStores.ts | 11 - src/webpack/common/types/stores.d.ts | 226 ----------- src/webpack/common/types/utils.d.ts | 122 ++---- src/webpack/common/utils.ts | 122 +++--- src/webpack/patchWebpack.ts | 25 +- src/webpack/webpack.ts | 65 ++-- tsconfig.json | 52 +-- 333 files changed, 5724 insertions(+), 6464 deletions(-) delete mode 100644 scripts/generatePluginList.ts delete mode 100644 scripts/generateReport.ts delete mode 100644 src/plugins/reviewDB/utils.tsx delete mode 100644 src/webpack/common/settingsStores.ts delete mode 100644 src/webpack/common/types/fluxEvents.d.ts delete mode 100644 src/webpack/common/types/i18nMessages.ts delete mode 100644 src/webpack/common/types/settingsStores.ts delete mode 100644 src/webpack/common/types/stores.d.ts diff --git a/.eslintrc.json b/.eslintrc.json index 7885b8ede..63b3f2e69 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,9 @@ { "root": true, "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": true + }, "ignorePatterns": ["browser", "dist", "packages/discord-types", "packages/vencord-types"], "plugins": [ "@typescript-eslint", @@ -33,6 +36,31 @@ "templates": { "author": [".*", "Vendicated and contributors"] } } ], + "@typescript-eslint/array-type": "error", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/ban-types": "error", + "@typescript-eslint/consistent-generic-constructors": "error", + "@typescript-eslint/consistent-type-assertions": ["error", { + "assertionStyle": "as", + "objectLiteralTypeAssertions": "allow-as-parameter" + }], + "@typescript-eslint/consistent-type-exports": ["error", { + "fixMixedExportsWithInlineTypeSpecifier": true + }], + "@typescript-eslint/consistent-type-imports": ["error", { + "disallowTypeAnnotations": false, + "fixStyle": "inline-type-imports" + }], + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/non-nullable-type-assertion-style": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/require-await": "error", "quotes": ["error", "double", { "avoidEscape": true }], "jsx-quotes": ["error", "prefer-double"], "no-mixed-spaces-and-tabs": "error", @@ -80,6 +108,19 @@ "no-misleading-character-class": "error", "no-prototype-builtins": "error", "no-regex-spaces": "error", + "no-restricted-globals": ["error", "_", "Diff", "JSX", "React", "ReactDOM"], + "no-restricted-imports": ["error", { + "paths": [{ + "name": "discord-types", + "message": "Use @vencord/discord-types instead." + }], + "patterns": [{ + "group": ["discord-types/*"], + "importNamePattern": "^(?!WebpackInstance$)", + "message": "Use @vencord/discord-types instead." + }] + }], + "no-restricted-syntax": ["error", "[operator=void]"], "no-shadow-restricted-names": "error", "no-unexpected-multiline": "error", "no-unsafe-optional-chaining": "error", diff --git a/.github/workflows/test-packages-discord-types.yml b/.github/workflows/test-packages-discord-types.yml index 63844d239..4c5dff32b 100644 --- a/.github/workflows/test-packages-discord-types.yml +++ b/.github/workflows/test-packages-discord-types.yml @@ -12,27 +12,22 @@ jobs: steps: - uses: actions/checkout@v4 - with: - sparse-checkout: packages/discord-types - sparse-checkout-cone-mode: false + + - uses: pnpm/action-setup@v4 # Install pnpm using packageManager key in package.json - name: Use Node.js 20 uses: actions/setup-node@v4 with: node-version: ^20.11.0 - - - uses: pnpm/action-setup@v4 - with: - version: 9 - - - name: Move packages/discord-types to root - run: | - shopt -s dotglob - mv packages/discord-types/* . - rm -rf packages + cache: "pnpm" - name: Install dependencies - run: pnpm install --no-frozen-lockfile + run: pnpm install --frozen-lockfile - - name: Check for TypeScript errors and lint - run: pnpm test + - name: Check packages/discord-types for TypeScript errors and lint + run: | + cd packages/discord-types + pnpm test + + - name: Check if packages/discord-types is compatible with Vencord + run: "pnpm testTsc" diff --git a/browser/VencordNativeStub.ts b/browser/VencordNativeStub.ts index 79f0f2cd3..f0cde6658 100644 --- a/browser/VencordNativeStub.ts +++ b/browser/VencordNativeStub.ts @@ -36,7 +36,7 @@ const cssListeners = new Set<(css: string) => void>(); const NOOP = () => { }; const NOOP_ASYNC = async () => { }; -const setCssDebounced = debounce((css: string) => VencordNative.quickCss.set(css)); +const setCssDebounced = debounce((css: string) => { VencordNative.quickCss.set(css); }); const themeStore = DataStore.createStore("VencordThemes", "VencordThemeData"); @@ -69,7 +69,7 @@ window.VencordNative = { get: () => DataStore.get("VencordQuickCss").then(s => s ?? ""), set: async (css: string) => { await DataStore.set("VencordQuickCss", css); - cssListeners.forEach(l => l(css)); + cssListeners.forEach(l => { l(css); }); }, addChangeListener(cb) { cssListeners.add(cb); diff --git a/browser/monaco.ts b/browser/monaco.ts index ead061d65..b1a42deed 100644 --- a/browser/monaco.ts +++ b/browser/monaco.ts @@ -6,6 +6,7 @@ import "./patch-worker"; +// @ts-ignore import * as monaco from "monaco-editor/esm/vs/editor/editor.main.js"; declare global { diff --git a/package.json b/package.json index bfda119fd..a68d664f7 100644 --- a/package.json +++ b/package.json @@ -25,12 +25,12 @@ "buildReporterDesktop": "pnpm build --reporter", "watch": "pnpm build --watch", "watchWeb": "pnpm buildWeb --watch", - "generatePluginJson": "tsx scripts/generatePluginList.ts", + "generatePluginJson": "tsx scripts/generatePluginList.mts", "generateTypes": "tspc --emitDeclarationOnly --declaration --outDir packages/vencord-types", "inject": "node scripts/runInstaller.mjs", "uninject": "node scripts/runInstaller.mjs", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx --ignore-pattern src/userplugins", - "lint-styles": "stylelint \"src/**/*.css\" --ignore-pattern src/userplugins", + "lint": "eslint . --ext .mjs,.js,.jsx,.mts,.ts,.tsx --ignore-pattern src/userplugins", + "lint-styles": "stylelint \"src/**/*.css\" --ignore-pattern src/userplugins --quiet-deprecation-warnings", "lint:fix": "pnpm lint --fix", "test": "pnpm buildStandalone && pnpm lint && pnpm lint-styles && pnpm testTsc && pnpm generatePluginJson", "testWeb": "pnpm lint && pnpm buildWeb && pnpm testTsc", @@ -61,7 +61,7 @@ "@vencord/discord-types": "workspace:^", "diff": "^5.2.0", "discord-types": "^1.3.3", - "esbuild": "^0.15.18", + "esbuild": "^0.21.5", "eslint": "^8.57.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-path-alias": "^1.1.0", @@ -75,7 +75,7 @@ "stylelint": "^15.11.0", "stylelint-config-standard": "^33.0.0", "ts-patch": "^3.2.0", - "tsx": "^4.15.4", + "tsx": "^4.15.5", "type-fest": "^4.20.0", "typescript": "^5.4.5", "typescript-transform-paths": "^3.4.7", @@ -111,4 +111,4 @@ "node": ">=18", "pnpm": ">=9" } -} +} \ No newline at end of file diff --git a/packages/vencord-types/package.json b/packages/vencord-types/package.json index 915dc51ad..d7cb372be 100644 --- a/packages/vencord-types/package.json +++ b/packages/vencord-types/package.json @@ -28,6 +28,6 @@ "devDependencies": { "@types/fs-extra": "^11.0.4", "fs-extra": "^11.2.0", - "tsx": "^4.15.4" + "tsx": "^4.15.5" } -} +} \ No newline at end of file diff --git a/packages/vencord-types/prepare.ts b/packages/vencord-types/prepare.ts index de1f6b04b..a2eda1acf 100644 --- a/packages/vencord-types/prepare.ts +++ b/packages/vencord-types/prepare.ts @@ -20,7 +20,7 @@ import { cpSync, moveSync, readdirSync, rmSync } from "fs-extra"; import { join } from "path"; readdirSync(join(__dirname, "src")) - .forEach(child => moveSync(join(__dirname, "src", child), join(__dirname, child), { overwrite: true })); + .forEach(child => { moveSync(join(__dirname, "src", child), join(__dirname, child), { overwrite: true }); }); const VencordSrc = join(__dirname, "..", "..", "src"); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e73bef35..96c584c7e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ importers: specifier: ^1.3.3 version: 1.3.26 esbuild: - specifier: ^0.15.18 - version: 0.15.18 + specifier: ^0.21.5 + version: 0.21.5 eslint: specifier: ^8.57.0 version: 8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) @@ -126,8 +126,8 @@ importers: specifier: ^3.2.0 version: 3.2.0 tsx: - specifier: ^4.15.4 - version: 4.15.4 + specifier: ^4.13.3 + version: 4.13.3 type-fest: specifier: ^4.20.0 version: 4.20.0 @@ -230,8 +230,8 @@ importers: specifier: ^11.2.0 version: 11.2.0 tsx: - specifier: ^4.15.4 - version: 4.15.4 + specifier: ^4.13.3 + version: 4.13.3 packages: @@ -286,20 +286,20 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.15.18': - resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + '@esbuild/android-arm@0.20.2': + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.20.2': + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -346,20 +346,20 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.15.18': - resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + '@esbuild/linux-loong64@0.20.2': + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.20.2': + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1196,136 +1196,20 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - esbuild-android-64@0.15.18: - resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - esbuild-android-arm64@0.15.18: - resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - esbuild-darwin-64@0.15.18: - resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - esbuild-darwin-arm64@0.15.18: - resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - esbuild-freebsd-64@0.15.18: - resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - esbuild-freebsd-arm64@0.15.18: - resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - esbuild-linux-32@0.15.18: - resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - esbuild-linux-64@0.15.18: - resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - esbuild-linux-arm64@0.15.18: - resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - esbuild-linux-arm@0.15.18: - resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - esbuild-linux-mips64le@0.15.18: - resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - esbuild-linux-ppc64le@0.15.18: - resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - esbuild-linux-riscv64@0.15.18: - resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - esbuild-linux-s390x@0.15.18: - resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - esbuild-netbsd-64@0.15.18: - resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - esbuild-openbsd-64@0.15.18: - resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - esbuild-sunos-64@0.15.18: - resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - esbuild-windows-32@0.15.18: - resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - esbuild-windows-64@0.15.18: - resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - esbuild-windows-arm64@0.15.18: - resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - esbuild@0.15.18: - resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true + esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -2691,8 +2575,8 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsx@4.15.4: - resolution: {integrity: sha512-d++FLCwJLrXaBFtRcqdPBzu6FiVOJ2j+UsvUZPtoTrnYtCGU5CEW7iHXtNZfA2fcRTvJFWPqA6SWBuB0GSva9w==} + tsx@4.13.3: + resolution: {integrity: sha512-FTAJJLQCMiIbt78kD5qhLjHIR5NOQDKC63wcdelWRDBE+d1xSrXYhXq4DzejnC2tGhFZHpDy2Ika0Ugf7sK8gA==} engines: {node: '>=18.0.0'} hasBin: true @@ -2919,73 +2803,73 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm@0.15.18': - optional: true - '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-x64@0.21.5': + '@esbuild/android-arm@0.20.2': optional: true - '@esbuild/darwin-arm64@0.21.5': + '@esbuild/android-x64@0.20.2': optional: true - '@esbuild/darwin-x64@0.21.5': + '@esbuild/darwin-arm64@0.20.2': optional: true - '@esbuild/freebsd-arm64@0.21.5': + '@esbuild/darwin-x64@0.20.2': optional: true - '@esbuild/freebsd-x64@0.21.5': + '@esbuild/freebsd-arm64@0.20.2': optional: true - '@esbuild/linux-arm64@0.21.5': + '@esbuild/freebsd-x64@0.20.2': optional: true - '@esbuild/linux-arm@0.21.5': + '@esbuild/linux-arm64@0.20.2': optional: true - '@esbuild/linux-ia32@0.21.5': + '@esbuild/linux-arm@0.20.2': optional: true - '@esbuild/linux-loong64@0.15.18': - optional: true - - '@esbuild/linux-loong64@0.21.5': + '@esbuild/linux-ia32@0.20.2': optional: true '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-ppc64@0.21.5': + '@esbuild/linux-loong64@0.20.2': optional: true - '@esbuild/linux-riscv64@0.21.5': + '@esbuild/linux-mips64el@0.20.2': optional: true - '@esbuild/linux-s390x@0.21.5': + '@esbuild/linux-ppc64@0.20.2': optional: true - '@esbuild/linux-x64@0.21.5': + '@esbuild/linux-riscv64@0.20.2': optional: true - '@esbuild/netbsd-x64@0.21.5': + '@esbuild/linux-s390x@0.20.2': optional: true - '@esbuild/openbsd-x64@0.21.5': + '@esbuild/linux-x64@0.20.2': optional: true - '@esbuild/sunos-x64@0.21.5': + '@esbuild/netbsd-x64@0.20.2': optional: true - '@esbuild/win32-arm64@0.21.5': + '@esbuild/openbsd-x64@0.20.2': optional: true - '@esbuild/win32-ia32@0.21.5': + '@esbuild/sunos-x64@0.20.2': optional: true - '@esbuild/win32-x64@0.21.5': + '@esbuild/win32-arm64@0.20.2': + optional: true + + '@esbuild/win32-ia32@0.20.2': + optional: true + + '@esbuild/win32-x64@0.20.2': optional: true '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))': @@ -3932,67 +3816,7 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - esbuild-android-64@0.15.18: - optional: true - - esbuild-android-arm64@0.15.18: - optional: true - - esbuild-darwin-64@0.15.18: - optional: true - - esbuild-darwin-arm64@0.15.18: - optional: true - - esbuild-freebsd-64@0.15.18: - optional: true - - esbuild-freebsd-arm64@0.15.18: - optional: true - - esbuild-linux-32@0.15.18: - optional: true - - esbuild-linux-64@0.15.18: - optional: true - - esbuild-linux-arm64@0.15.18: - optional: true - - esbuild-linux-arm@0.15.18: - optional: true - - esbuild-linux-mips64le@0.15.18: - optional: true - - esbuild-linux-ppc64le@0.15.18: - optional: true - - esbuild-linux-riscv64@0.15.18: - optional: true - - esbuild-linux-s390x@0.15.18: - optional: true - - esbuild-netbsd-64@0.15.18: - optional: true - - esbuild-openbsd-64@0.15.18: - optional: true - - esbuild-sunos-64@0.15.18: - optional: true - - esbuild-windows-32@0.15.18: - optional: true - - esbuild-windows-64@0.15.18: - optional: true - - esbuild-windows-arm64@0.15.18: - optional: true - - esbuild@0.15.18: + esbuild@0.21.5: optionalDependencies: '@esbuild/android-arm': 0.15.18 '@esbuild/linux-loong64': 0.15.18 @@ -4017,31 +3841,33 @@ snapshots: esbuild-windows-64: 0.15.18 esbuild-windows-arm64: 0.15.18 - esbuild@0.21.5: + esbuild@0.20.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + + escalade@3.1.1: {} escalade@3.1.2: {} @@ -5551,7 +5377,7 @@ snapshots: tslib@2.6.2: {} - tsx@4.15.4: + tsx@4.13.3: dependencies: esbuild: 0.21.5 get-tsconfig: 4.7.5 diff --git a/scripts/build/build.mjs b/scripts/build/build.mjs index fcf56f66c..a89e9c567 100755 --- a/scripts/build/build.mjs +++ b/scripts/build/build.mjs @@ -21,8 +21,9 @@ import esbuild from "esbuild"; import { readdir } from "fs/promises"; import { join } from "path"; -import { BUILD_TIMESTAMP, commonOpts, exists, globPlugins, IS_DEV, IS_REPORTER, IS_STANDALONE, IS_UPDATER_DISABLED, VERSION, watch } from "./common.mjs"; +import { BUILD_TIMESTAMP, commonOpts, disposeAll, exists, globPlugins, IS_DEV, IS_REPORTER, IS_STANDALONE, IS_UPDATER_DISABLED, rebuildAll, VERSION, watch, watchAll } from "./common.mjs"; +/** @type {Record} */ const defines = { IS_STANDALONE, IS_DEV, @@ -39,9 +40,11 @@ if (defines.IS_STANDALONE === false) // for the specific platform we're on defines["process.platform"] = JSON.stringify(process.platform); -/** - * @type {esbuild.BuildOptions} - */ +// https://github.com/evanw/esbuild/releases/tag/v0.16.0#:~:text=esbuild%20now,parameter +for (const key in defines) + defines[key] = defines[key].toString(); + +/** @satisfies {esbuild.BuildOptions} */ const nodeCommonOpts = { ...commonOpts, format: "cjs", @@ -51,12 +54,11 @@ const nodeCommonOpts = { define: defines }; -const sourceMapFooter = s => watch ? "" : `//# sourceMappingURL=vencord://${s}.js.map`; +/** @param {string} fileName */ +const sourceMapFooter = fileName => watch ? "" : `//# sourceMappingURL=vencord://${fileName}.js.map`; const sourcemap = watch ? "inline" : "external"; -/** - * @type {import("esbuild").Plugin} - */ +/** @satisfies {import("esbuild").Plugin} */ const globNativesPlugin = { name: "glob-natives-plugin", setup: build => { @@ -87,6 +89,7 @@ const globNativesPlugin = { const nameParts = p.split("."); const namePartsWithoutTarget = nameParts.length === 1 ? nameParts : nameParts.slice(0, -1); // pluginName.thing.desktop -> PluginName.thing + // @ts-ignore const cleanPluginName = p[0].toUpperCase() + namePartsWithoutTarget.join(".").slice(1); const mod = `p${i}`; @@ -104,9 +107,9 @@ const globNativesPlugin = { } }; -await Promise.all([ +const contexts = await Promise.all([ // Discord Desktop main & renderer & preload - esbuild.build({ + esbuild.context({ ...nodeCommonOpts, entryPoints: ["src/main/index.ts"], outfile: "dist/patcher.js", @@ -114,15 +117,15 @@ await Promise.all([ sourcemap, define: { ...defines, - IS_DISCORD_DESKTOP: true, - IS_VESKTOP: false + IS_DISCORD_DESKTOP: "true", + IS_VESKTOP: "false" }, plugins: [ ...nodeCommonOpts.plugins, globNativesPlugin ] }), - esbuild.build({ + esbuild.context({ ...commonOpts, entryPoints: ["src/Vencord.ts"], outfile: "dist/renderer.js", @@ -137,11 +140,11 @@ await Promise.all([ ], define: { ...defines, - IS_DISCORD_DESKTOP: true, - IS_VESKTOP: false + IS_DISCORD_DESKTOP: "true", + IS_VESKTOP: "false" } }), - esbuild.build({ + esbuild.context({ ...nodeCommonOpts, entryPoints: ["src/preload.ts"], outfile: "dist/preload.js", @@ -149,13 +152,12 @@ await Promise.all([ sourcemap, define: { ...defines, - IS_DISCORD_DESKTOP: true, - IS_VESKTOP: false + IS_DISCORD_DESKTOP: "true", + IS_VESKTOP: "false" } }), - // Vencord Desktop main & renderer & preload - esbuild.build({ + esbuild.context({ ...nodeCommonOpts, entryPoints: ["src/main/index.ts"], outfile: "dist/vencordDesktopMain.js", @@ -163,15 +165,15 @@ await Promise.all([ sourcemap, define: { ...defines, - IS_DISCORD_DESKTOP: false, - IS_VESKTOP: true + IS_DISCORD_DESKTOP: "false", + IS_VESKTOP: "true" }, plugins: [ ...nodeCommonOpts.plugins, globNativesPlugin ] }), - esbuild.build({ + esbuild.context({ ...commonOpts, entryPoints: ["src/Vencord.ts"], outfile: "dist/vencordDesktopRenderer.js", @@ -186,11 +188,11 @@ await Promise.all([ ], define: { ...defines, - IS_DISCORD_DESKTOP: false, - IS_VESKTOP: true + IS_DISCORD_DESKTOP: "false", + IS_VESKTOP: "true" } }), - esbuild.build({ + esbuild.context({ ...nodeCommonOpts, entryPoints: ["src/preload.ts"], outfile: "dist/vencordDesktopPreload.js", @@ -198,14 +200,16 @@ await Promise.all([ sourcemap, define: { ...defines, - IS_DISCORD_DESKTOP: false, - IS_VESKTOP: true + IS_DISCORD_DESKTOP: "false", + IS_VESKTOP: "true" } }), -]).catch(err => { - console.error("Build failed"); - console.error(err.message); - // make ci fail - if (!commonOpts.watch) - process.exitCode = 1; -}); +]); + +await rebuildAll(contexts); + +// https://github.com/evanw/esbuild/releases/tag/v0.17.0 +if (watch) + await watchAll(contexts); +else + disposeAll(contexts); diff --git a/scripts/build/buildWeb.mjs b/scripts/build/buildWeb.mjs index bc15ccced..18ae58026 100644 --- a/scripts/build/buildWeb.mjs +++ b/scripts/build/buildWeb.mjs @@ -21,13 +21,12 @@ import esbuild from "esbuild"; import { readFileSync } from "fs"; import { appendFile, mkdir, readdir, readFile, rm, writeFile } from "fs/promises"; import { join } from "path"; +// @ts-ignore import Zip from "zip-local"; -import { BUILD_TIMESTAMP, commonOpts, globPlugins, IS_DEV, IS_REPORTER, VERSION } from "./common.mjs"; +import { BUILD_TIMESTAMP, commonOpts, disposeAll, globPlugins, IS_DEV, IS_REPORTER, rebuildAll, VERSION, watch, watchAll } from "./common.mjs"; -/** - * @type {esbuild.BuildOptions} - */ +/** @satisfies {esbuild.BuildOptions} */ const commonOptions = { ...commonOpts, entryPoints: ["browser/Vencord.ts"], @@ -39,17 +38,18 @@ const commonOptions = { ...commonOpts.plugins, ], target: ["esnext"], + // https://github.com/evanw/esbuild/releases/tag/v0.16.0#:~:text=esbuild%20now,parameter define: { - IS_WEB: true, - IS_EXTENSION: false, - IS_STANDALONE: true, - IS_DEV, - IS_REPORTER, - IS_DISCORD_DESKTOP: false, - IS_VESKTOP: false, - IS_UPDATER_DISABLED: true, + IS_WEB: "true", + IS_EXTENSION: "false", + IS_STANDALONE: "true", + IS_DEV: IS_DEV.toString(), + IS_REPORTER: IS_REPORTER.toString(), + IS_DISCORD_DESKTOP: "false", + IS_VESKTOP: "false", + IS_UPDATER_DISABLED: "true", VERSION: JSON.stringify(VERSION), - BUILD_TIMESTAMP + BUILD_TIMESTAMP: BUILD_TIMESTAMP.toString() } }; @@ -65,61 +65,68 @@ const RnNoiseFiles = [ "LICENSE" ]; -await Promise.all( - [ - esbuild.build({ - entryPoints: MonacoWorkerEntryPoints.map(entry => `node_modules/monaco-editor/esm/${entry}`), - bundle: true, - minify: true, - format: "iife", - outbase: "node_modules/monaco-editor/esm/", - outdir: "dist/monaco" - }), - esbuild.build({ - entryPoints: ["browser/monaco.ts"], - bundle: true, - minify: true, - format: "iife", - outfile: "dist/monaco/index.js", - loader: { - ".ttf": "file" - } - }), - esbuild.build({ - ...commonOptions, - outfile: "dist/browser.js", - footer: { js: "//# sourceURL=VencordWeb" } - }), - esbuild.build({ - ...commonOptions, - outfile: "dist/extension.js", - define: { - ...commonOptions?.define, - IS_EXTENSION: true, - }, - footer: { js: "//# sourceURL=VencordWeb" } - }), - esbuild.build({ - ...commonOptions, - inject: ["browser/GMPolyfill.js", ...(commonOptions?.inject || [])], - define: { - ...(commonOptions?.define), - window: "unsafeWindow", - }, - outfile: "dist/Vencord.user.js", - banner: { - js: readFileSync("browser/userscript.meta.js", "utf-8").replace("%version%", `${VERSION}.${new Date().getTime()}`) - }, - footer: { - // UserScripts get wrapped in an iife, so define Vencord prop on window that returns our local - js: "Object.defineProperty(unsafeWindow,'Vencord',{get:()=>Vencord});" - } - }) - ] -); +const contexts = await Promise.all([ + esbuild.context({ + entryPoints: MonacoWorkerEntryPoints.map(entry => `node_modules/monaco-editor/esm/${entry}`), + bundle: true, + minify: true, + format: "iife", + outbase: "node_modules/monaco-editor/esm/", + outdir: "dist/monaco" + }), + esbuild.context({ + entryPoints: ["browser/monaco.ts"], + bundle: true, + minify: true, + format: "iife", + outfile: "dist/monaco/index.js", + loader: { + ".ttf": "file" + } + }), + esbuild.context({ + ...commonOptions, + outfile: "dist/browser.js", + footer: { js: "//# sourceURL=VencordWeb" } + }), + esbuild.context({ + ...commonOptions, + outfile: "dist/extension.js", + define: { + ...commonOptions.define, + IS_EXTENSION: "true", + }, + footer: { js: "//# sourceURL=VencordWeb" } + }), + esbuild.context({ + ...commonOptions, + inject: ["browser/GMPolyfill.js", ...commonOptions.inject], + define: { + ...(commonOptions.define), + window: "unsafeWindow", + }, + outfile: "dist/Vencord.user.js", + banner: { + js: readFileSync("browser/userscript.meta.js", "utf-8").replace("%version%", `${VERSION}.${new Date().getTime()}`) + }, + footer: { + // UserScripts get wrapped in an iife, so define Vencord prop on window that returns our local + js: "Object.defineProperty(unsafeWindow,'Vencord',{get:()=>Vencord});" + } + }) +]); + +await rebuildAll(contexts); + +// https://github.com/evanw/esbuild/releases/tag/v0.17.0 +if (watch) + await watchAll(contexts); +else + disposeAll(contexts); /** - * @type {(dir: string) => Promise} + * @param {string} dir + * @returns {Promise} */ async function globDir(dir) { const files = []; @@ -136,7 +143,9 @@ async function globDir(dir) { } /** - * @type {(dir: string, basePath?: string) => Promise>} + * @param {string} dir + * @param {string} [basePath] + * @returns {Promise>} */ async function loadDir(dir, basePath = "") { const files = await globDir(dir); @@ -144,7 +153,8 @@ async function loadDir(dir, basePath = "") { } /** - * @type {(target: string, files: string[]) => Promise} + * @param {string} target + * @param {string[]} files */ async function buildExtension(target, files) { const entries = { @@ -159,6 +169,7 @@ async function buildExtension(target, files) { if (f.startsWith("manifest")) { const json = JSON.parse(content.toString("utf-8")); json.version = VERSION; + // @ts-ignore content = new TextEncoder().encode(JSON.stringify(json)); } diff --git a/scripts/build/common.mjs b/scripts/build/common.mjs index cdbb26eec..faf4b2195 100644 --- a/scripts/build/common.mjs +++ b/scripts/build/common.mjs @@ -30,7 +30,7 @@ import { promisify } from "util"; import { getPluginTarget } from "../utils.mjs"; /** @type {import("../../package.json")} */ -const PackageJSON = JSON.parse(readFileSync("package.json")); +const PackageJSON = JSON.parse(readFileSync("package.json", "utf-8")); export const VERSION = PackageJSON.version; // https://reproducible-builds.org/docs/source-date-epoch/ @@ -53,6 +53,7 @@ export const banner = { `.trim() }; +/** @param {string} path */ export async function exists(path) { return await access(path, FsConstants.F_OK) .then(() => true) @@ -60,9 +61,7 @@ export async function exists(path) { } // https://github.com/evanw/esbuild/issues/619#issuecomment-751995294 -/** - * @type {import("esbuild").Plugin} - */ +/** @satisfies {esbuild.Plugin} */ export const makeAllPackagesExternalPlugin = { name: "make-all-packages-external", setup(build) { @@ -121,9 +120,7 @@ export const globPlugins = kind => ({ } }); -/** - * @type {import("esbuild").Plugin} - */ +/** @satisfies {esbuild.Plugin} */ export const gitHashPlugin = { name: "git-hash-plugin", setup: build => { @@ -137,9 +134,7 @@ export const gitHashPlugin = { } }; -/** - * @type {import("esbuild").Plugin} - */ +/** @satisfies {esbuild.Plugin} */ export const gitRemotePlugin = { name: "git-remote-plugin", setup: build => { @@ -162,9 +157,7 @@ export const gitRemotePlugin = { } }; -/** - * @type {import("esbuild").Plugin} - */ +/** @satisfies {esbuild.Plugin} */ export const fileUrlPlugin = { name: "file-uri-plugin", setup: build => { @@ -174,6 +167,7 @@ export const fileUrlPlugin = { path: args.path, pluginData: { uri: args.path, + // @ts-ignore path: join(args.resolveDir, args.path.slice("file://".length).split("?")[0]) } })); @@ -208,6 +202,7 @@ export const fileUrlPlugin = { write: false, minify: true }); + // @ts-ignore content = res.outputFiles[0].text; } else { throw new Error(`Don't know how to minify file type: ${path}`); @@ -225,9 +220,7 @@ export const fileUrlPlugin = { }; const styleModule = readFileSync("./scripts/build/module/style.js", "utf-8"); -/** - * @type {import("esbuild").Plugin} - */ +/** @satisfies {esbuild.Plugin} */ export const stylePlugin = { name: "style-plugin", setup: ({ onResolve, onLoad }) => { @@ -249,15 +242,29 @@ export const stylePlugin = { } }; -/** - * @type {import("esbuild").BuildOptions} - */ +/** @param {esbuild.BuildContext[]} contexts */ +export const disposeAll = contexts => Promise.all(contexts.map(ctx => ctx.dispose())); + +/** @param {esbuild.BuildContext[]} contexts */ +export const rebuildAll = contexts => + Promise.all(contexts.map(ctx => ctx.rebuild().catch(error => { + disposeAll(contexts); + console.error("Build failed:"); + console.error(error.message); + process.exitCode = 1; + }))); + +/** @param {esbuild.BuildContext[]} contexts */ +export const watchAll = contexts => Promise.all(contexts.map(ctx => ctx.watch())); + +/** @satisfies {esbuild.BuildOptions} */ export const commonOpts = { + // Does not work with esbuild.BuildContext.rebuild: https://github.com/evanw/esbuild/issues/2886#issuecomment-1416397046 + // Errors will still get logged logLevel: "info", bundle: true, - watch, minify: !watch, - sourcemap: watch ? "inline" : "", + sourcemap: watch ? "inline" : undefined, legalComments: "linked", banner, plugins: [fileUrlPlugin, gitHashPlugin, gitRemotePlugin, stylePlugin], diff --git a/scripts/build/inject/react.mjs b/scripts/build/inject/react.mjs index 591a25b5a..d4a1bac3e 100644 --- a/scripts/build/inject/react.mjs +++ b/scripts/build/inject/react.mjs @@ -17,5 +17,7 @@ */ export const VencordFragment = /* #__PURE__*/ Symbol.for("react.fragment"); -export let VencordCreateElement = - (...args) => (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args); + +/** @param {Parameters} args */ +export let VencordCreateElement + = (...args) => (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args); diff --git a/scripts/build/module/style.js b/scripts/build/module/style.js index 5981a3de2..5dee12afc 100644 --- a/scripts/build/module/style.js +++ b/scripts/build/module/style.js @@ -16,6 +16,8 @@ * along with this program. If not, see . */ +// @ts-nocheck +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition (window.VencordStyles ??= new Map()).set(STYLE_NAME, { name: STYLE_NAME, source: STYLE_SOURCE, diff --git a/scripts/generatePluginList.ts b/scripts/generatePluginList.ts deleted file mode 100644 index e8aa33a46..000000000 --- a/scripts/generatePluginList.ts +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2023 Vendicated and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . -*/ - -import { Dirent, readdirSync, readFileSync, writeFileSync } from "fs"; -import { access, readFile } from "fs/promises"; -import { join, sep } from "path"; -import { normalize as posixNormalize, sep as posixSep } from "path/posix"; -import { BigIntLiteral, createSourceFile, Identifier, isArrayLiteralExpression, isCallExpression, isExportAssignment, isIdentifier, isObjectLiteralExpression, isPropertyAccessExpression, isPropertyAssignment, isSatisfiesExpression, isStringLiteral, isVariableStatement, NamedDeclaration, NodeArray, ObjectLiteralExpression, ScriptTarget, StringLiteral, SyntaxKind } from "typescript"; - -import { getPluginTarget } from "./utils.mjs"; - -interface Dev { - name: string; - id: string; -} - -interface PluginData { - name: string; - description: string; - tags: string[]; - authors: Dev[]; - dependencies: string[]; - hasPatches: boolean; - hasCommands: boolean; - required: boolean; - enabledByDefault: boolean; - target: "discordDesktop" | "vencordDesktop" | "web" | "dev"; - filePath: string; -} - -const devs = {} as Record; - -function getName(node: NamedDeclaration) { - return node.name && isIdentifier(node.name) ? node.name.text : undefined; -} - -function hasName(node: NamedDeclaration, name: string) { - return getName(node) === name; -} - -function getObjectProp(node: ObjectLiteralExpression, name: string) { - const prop = node.properties.find(p => hasName(p, name)); - if (prop && isPropertyAssignment(prop)) return prop.initializer; - return prop; -} - -function parseDevs() { - const file = createSourceFile("constants.ts", readFileSync("src/utils/constants.ts", "utf8"), ScriptTarget.Latest); - - for (const child of file.getChildAt(0).getChildren()) { - if (!isVariableStatement(child)) continue; - - const devsDeclaration = child.declarationList.declarations.find(d => hasName(d, "Devs")); - if (!devsDeclaration?.initializer || !isCallExpression(devsDeclaration.initializer)) continue; - - const value = devsDeclaration.initializer.arguments[0]; - - if (!isSatisfiesExpression(value) || !isObjectLiteralExpression(value.expression)) throw new Error("Failed to parse devs: not an object literal"); - - for (const prop of value.expression.properties) { - const name = (prop.name as Identifier).text; - const value = isPropertyAssignment(prop) ? prop.initializer : prop; - - if (!isObjectLiteralExpression(value)) throw new Error(`Failed to parse devs: ${name} is not an object literal`); - - devs[name] = { - name: (getObjectProp(value, "name") as StringLiteral).text, - id: (getObjectProp(value, "id") as BigIntLiteral).text.slice(0, -1) - }; - } - - return; - } - - throw new Error("Could not find Devs constant"); -} - -async function parseFile(fileName: string) { - const file = createSourceFile(fileName, await readFile(fileName, "utf8"), ScriptTarget.Latest); - - const fail = (reason: string) => { - return new Error(`Invalid plugin ${fileName}, because ${reason}`); - }; - - for (const node of file.getChildAt(0).getChildren()) { - if (!isExportAssignment(node) || !isCallExpression(node.expression)) continue; - - const call = node.expression; - if (!isIdentifier(call.expression) || call.expression.text !== "definePlugin") continue; - - const pluginObj = node.expression.arguments[0]; - if (!isObjectLiteralExpression(pluginObj)) throw fail("no object literal passed to definePlugin"); - - const data = { - hasPatches: false, - hasCommands: false, - enabledByDefault: false, - required: false, - tags: [] as string[] - } as PluginData; - - for (const prop of pluginObj.properties) { - const key = getName(prop); - const value = isPropertyAssignment(prop) ? prop.initializer : prop; - - switch (key) { - case "name": - case "description": - if (!isStringLiteral(value)) throw fail(`${key} is not a string literal`); - data[key] = value.text; - break; - case "patches": - data.hasPatches = true; - break; - case "commands": - data.hasCommands = true; - break; - case "authors": - if (!isArrayLiteralExpression(value)) throw fail("authors is not an array literal"); - data.authors = value.elements.map(e => { - if (!isPropertyAccessExpression(e)) throw fail("authors array contains non-property access expressions"); - const d = devs[getName(e)!]; - if (!d) throw fail(`couldn't look up author ${getName(e)}`); - return d; - }); - break; - case "tags": - if (!isArrayLiteralExpression(value)) throw fail("tags is not an array literal"); - data.tags = value.elements.map(e => { - if (!isStringLiteral(e)) throw fail("tags array contains non-string literals"); - return e.text; - }); - break; - case "dependencies": - if (!isArrayLiteralExpression(value)) throw fail("dependencies is not an array literal"); - const { elements } = value; - if (elements.some(e => !isStringLiteral(e))) throw fail("dependencies array contains non-string elements"); - data.dependencies = (elements as NodeArray).map(e => e.text); - break; - case "required": - case "enabledByDefault": - data[key] = value.kind === SyntaxKind.TrueKeyword; - break; - } - } - - if (!data.name || !data.description || !data.authors) throw fail("name, description or authors are missing"); - - const target = getPluginTarget(fileName); - if (target) { - if (!["web", "discordDesktop", "vencordDesktop", "desktop", "dev"].includes(target)) throw fail(`invalid target ${target}`); - data.target = target as any; - } - - data.filePath = posixNormalize(fileName) - .split(sep) - .join(posixSep) - .replace(/\/index\.([jt]sx?)$/, "") - .replace(/^src\/plugins\//, ""); - - let readme = ""; - try { - readme = readFileSync(join(fileName, "..", "README.md"), "utf-8"); - } catch { } - return [data, readme] as const; - } - - throw fail("no default export called 'definePlugin' found"); -} - -async function getEntryPoint(dir: string, dirent: Dirent) { - const base = join(dir, dirent.name); - if (!dirent.isDirectory()) return base; - - for (const name of ["index.ts", "index.tsx"]) { - const full = join(base, name); - try { - await access(full); - return full; - } catch { } - } - - throw new Error(`${dirent.name}: Couldn't find entry point`); -} - -function isPluginFile({ name }: { name: string; }) { - if (name === "index.ts") return false; - return !name.startsWith("_") && !name.startsWith("."); -} - -(async () => { - parseDevs(); - - const plugins = [] as PluginData[]; - const readmes = {} as Record; - - await Promise.all(["src/plugins", "src/plugins/_core"].flatMap(dir => - readdirSync(dir, { withFileTypes: true }) - .filter(isPluginFile) - .map(async dirent => { - const [data, readme] = await parseFile(await getEntryPoint(dir, dirent)); - plugins.push(data); - if (readme) readmes[data.name] = readme; - }) - )); - - const data = JSON.stringify(plugins); - - if (process.argv.length > 3) { - writeFileSync(process.argv[2], data); - writeFileSync(process.argv[3], JSON.stringify(readmes)); - } else { - console.log(data); - } -})(); diff --git a/scripts/generateReport.ts b/scripts/generateReport.ts deleted file mode 100644 index 2a802da8c..000000000 --- a/scripts/generateReport.ts +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2022 Vendicated and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . -*/ - -/* eslint-disable no-fallthrough */ - -// eslint-disable-next-line spaced-comment -/// -// eslint-disable-next-line spaced-comment -/// - -import { readFileSync } from "fs"; -import pup, { JSHandle } from "puppeteer-core"; - -for (const variable of ["DISCORD_TOKEN", "CHROMIUM_BIN"]) { - if (!process.env[variable]) { - console.error(`Missing environment variable ${variable}`); - process.exit(1); - } -} - -const CANARY = process.env.USE_CANARY === "true"; - -const browser = await pup.launch({ - headless: "new", - executablePath: process.env.CHROMIUM_BIN -}); - -const page = await browser.newPage(); -await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"); -await page.setBypassCSP(true); - -async function maybeGetError(handle: JSHandle): Promise { - return await (handle as JSHandle)?.getProperty("message") - .then(m => m?.jsonValue()); -} - -const report = { - badPatches: [] as { - plugin: string; - type: string; - id: string; - match: string; - error?: string; - }[], - badStarts: [] as { - plugin: string; - error: string; - }[], - otherErrors: [] as string[], - ignoredErrors: [] as string[], - badWebpackFinds: [] as string[] -}; - -const IGNORED_DISCORD_ERRORS = [ - "KeybindStore: Looking for callback action", - "Unable to process domain list delta: Client revision number is null", - "Downloading the full bad domains file", - /\[GatewaySocket\].{0,110}Cannot access '/, - "search for 'name' in undefined", - "Attempting to set fast connect zstd when unsupported" -] as Array; - -function toCodeBlock(s: string) { - s = s.replace(/```/g, "`\u200B`\u200B`"); - return "```" + s + " ```"; -} - -async function printReport() { - console.log(); - - console.log("# Vencord Report" + (CANARY ? " (Canary)" : "")); - - console.log(); - - console.log("## Bad Patches"); - report.badPatches.forEach(p => { - console.log(`- ${p.plugin} (${p.type})`); - console.log(` - ID: \`${p.id}\``); - console.log(` - Match: ${toCodeBlock(p.match)}`); - if (p.error) console.log(` - Error: ${toCodeBlock(p.error)}`); - }); - - console.log(); - - console.log("## Bad Webpack Finds"); - report.badWebpackFinds.forEach(p => console.log("- " + p)); - - console.log(); - - console.log("## Bad Starts"); - report.badStarts.forEach(p => { - console.log(`- ${p.plugin}`); - console.log(` - Error: ${toCodeBlock(p.error)}`); - }); - - console.log(); - - console.log("## Discord Errors"); - report.otherErrors.forEach(e => { - console.log(`- ${toCodeBlock(e)}`); - }); - - console.log(); - - console.log("## Ignored Discord Errors"); - report.ignoredErrors.forEach(e => { - console.log(`- ${toCodeBlock(e)}`); - }); - - console.log(); - - if (process.env.DISCORD_WEBHOOK) { - await fetch(process.env.DISCORD_WEBHOOK, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - description: "Here's the latest Vencord Report!", - username: "Vencord Reporter" + (CANARY ? " (Canary)" : ""), - avatar_url: "https://cdn.discordapp.com/avatars/1017176847865352332/c312b6b44179ae6817de7e4b09e9c6af.webp?size=512", - embeds: [ - { - title: "Bad Patches", - description: report.badPatches.map(p => { - const lines = [ - `**__${p.plugin} (${p.type}):__**`, - `ID: \`${p.id}\``, - `Match: ${toCodeBlock(p.match)}` - ]; - if (p.error) lines.push(`Error: ${toCodeBlock(p.error)}`); - return lines.join("\n"); - }).join("\n\n") || "None", - color: report.badPatches.length ? 0xff0000 : 0x00ff00 - }, - { - title: "Bad Webpack Finds", - description: report.badWebpackFinds.map(toCodeBlock).join("\n") || "None", - color: report.badWebpackFinds.length ? 0xff0000 : 0x00ff00 - }, - { - title: "Bad Starts", - description: report.badStarts.map(p => { - const lines = [ - `**__${p.plugin}:__**`, - toCodeBlock(p.error) - ]; - return lines.join("\n"); - } - ).join("\n\n") || "None", - color: report.badStarts.length ? 0xff0000 : 0x00ff00 - }, - { - title: "Discord Errors", - description: report.otherErrors.length ? toCodeBlock(report.otherErrors.join("\n")) : "None", - color: report.otherErrors.length ? 0xff0000 : 0x00ff00 - } - ] - }) - }).then(res => { - if (!res.ok) console.error(`Webhook failed with status ${res.status}`); - else console.error("Posted to Discord Webhook successfully"); - }); - } -} - -page.on("console", async e => { - const level = e.type(); - const rawArgs = e.args(); - - async function getText() { - try { - return await Promise.all( - e.args().map(async a => { - return await maybeGetError(a) || await a.jsonValue(); - }) - ).then(a => a.join(" ").trim()); - } catch { - return e.text(); - } - } - - const firstArg = await rawArgs[0]?.jsonValue(); - - const isVencord = firstArg === "[Vencord]"; - const isDebug = firstArg === "[PUP_DEBUG]"; - - outer: - if (isVencord) { - try { - var args = await Promise.all(e.args().map(a => a.jsonValue())); - } catch { - break outer; - } - - const [, tag, message, otherMessage] = args as Array; - - switch (tag) { - case "WebpackInterceptor:": - const patchFailMatch = message.match(/Patch by (.+?) (had no effect|errored|found no module) \(Module id is (.+?)\): (.+)/)!; - if (!patchFailMatch) break; - - console.error(await getText()); - process.exitCode = 1; - - const [, plugin, type, id, regex] = patchFailMatch; - report.badPatches.push({ - plugin, - type, - id, - match: regex.replace(/\[A-Za-z_\$\]\[\\w\$\]\*/g, "\\i"), - error: await maybeGetError(e.args()[3]) - }); - - break; - case "PluginManager:": - const failedToStartMatch = message.match(/Failed to start (.+)/); - if (!failedToStartMatch) break; - - console.error(await getText()); - process.exitCode = 1; - - const [, name] = failedToStartMatch; - report.badStarts.push({ - plugin: name, - error: await maybeGetError(e.args()[3]) ?? "Unknown error" - }); - - break; - case "LazyChunkLoader:": - console.error(await getText()); - - switch (message) { - case "A fatal error occurred:": - process.exit(1); - } - - break; - case "Reporter:": - console.error(await getText()); - - switch (message) { - case "A fatal error occurred:": - process.exit(1); - case "Webpack Find Fail:": - process.exitCode = 1; - report.badWebpackFinds.push(otherMessage); - break; - case "Finished test": - await browser.close(); - await printReport(); - process.exit(); - } - } - } - - if (isDebug) { - console.error(await getText()); - } else if (level === "error") { - const text = await getText(); - - if (text.length && !text.startsWith("Failed to load resource: the server responded with a status of") && !text.includes("Webpack")) { - if (IGNORED_DISCORD_ERRORS.some(regex => text.match(regex))) { - report.ignoredErrors.push(text); - } else { - console.error("[Unexpected Error]", text); - report.otherErrors.push(text); - } - } - } -}); - -page.on("error", e => console.error("[Error]", e.message)); -page.on("pageerror", e => { - if (!e.message.startsWith("Object") && !e.message.includes("Cannot find module")) { - console.error("[Page Error]", e.message); - report.otherErrors.push(e.message); - } else { - report.ignoredErrors.push(e.message); - } -}); - -async function reporterRuntime(token: string) { - Vencord.Webpack.waitFor( - "loginToken", - m => { - console.log("[PUP_DEBUG]", "Logging in with token..."); - m.loginToken(token); - } - ); -} - -await page.evaluateOnNewDocument(` - if (location.host.endsWith("discord.com")) { - ${readFileSync("./dist/browser.js", "utf-8")}; - (${reporterRuntime.toString()})(${JSON.stringify(process.env.DISCORD_TOKEN)}); - } -`); - -await page.goto(CANARY ? "https://canary.discord.com/login" : "https://discord.com/login"); diff --git a/scripts/runInstaller.mjs b/scripts/runInstaller.mjs index 145ea5a5e..8c9b0700b 100644 --- a/scripts/runInstaller.mjs +++ b/scripts/runInstaller.mjs @@ -60,11 +60,13 @@ async function ensureBinary() { ? readFileSync(ETAG_FILE, "utf-8") : null; + const headers = new Headers(); + headers.append("User-Agent", "Vencord (https://github.com/Vendicated/Vencord)"); + if (etag != null) + headers.append("If-None-Match", etag); + const res = await fetch(BASE_URL + filename, { - headers: { - "User-Agent": "Vencord (https://github.com/Vendicated/Vencord)", - "If-None-Match": etag - } + headers }); if (res.status === 304) { @@ -74,7 +76,7 @@ async function ensureBinary() { if (!res.ok) throw new Error(`Failed to download installer: ${res.status} ${res.statusText}`); - writeFileSync(ETAG_FILE, res.headers.get("etag")); + writeFileSync(ETAG_FILE, res.headers.get("etag") ?? ""); if (process.platform === "darwin") { console.log("Unzipping..."); @@ -85,11 +87,13 @@ async function ensureBinary() { filter: f => f.name === INSTALLER_PATH_DARWIN })[INSTALLER_PATH_DARWIN]; + // @ts-ignore writeFileSync(outputFile, bytes, { mode: 0o755 }); console.log("Overriding security policy for installer binary (this is required to run it)"); console.log("xattr might error, that's okay"); + /** @param {string} cmd */ const logAndRun = cmd => { console.log("Running", cmd); try { @@ -100,6 +104,7 @@ async function ensureBinary() { logAndRun(`sudo xattr -d com.apple.quarantine '${outputFile}'`); } else { // WHY DOES NODE FETCH RETURN A WEB STREAM OH MY GOD + // @ts-ignore const body = Readable.fromWeb(res.body); await finished(body.pipe(createWriteStream(outputFile, { mode: 0o755, diff --git a/scripts/suppressExperimentalWarnings.js b/scripts/suppressExperimentalWarnings.js index 978f033a4..021b20747 100644 --- a/scripts/suppressExperimentalWarnings.js +++ b/scripts/suppressExperimentalWarnings.js @@ -16,9 +16,14 @@ * along with this program. If not, see . */ -process.emit = (originalEmit => function (name, data) { - if (name === "warning" && data?.name === "ExperimentalWarning") - return false; +// @ts-ignore +process.emit = (originalEmit => + function (event, data) { + // @ts-ignore + if (event === "warning" && data?.name === "ExperimentalWarning") + return false; - return originalEmit.apply(process, arguments); -})(process.emit); + // @ts-ignore + return originalEmit.apply(process, arguments); + } +)(process.emit); diff --git a/scripts/utils.mjs b/scripts/utils.mjs index 5b84c9878..f5b304760 100644 --- a/scripts/utils.mjs +++ b/scripts/utils.mjs @@ -18,12 +18,14 @@ /** * @param {string} filePath - * @returns {string | null} + * @returns {string | null | undefined} */ export function getPluginTarget(filePath) { const pathParts = filePath.split(/[/\\]/); + // @ts-ignore if (/^index\.tsx?$/.test(pathParts.at(-1))) pathParts.pop(); + // @ts-ignore const identifier = pathParts.at(-1).replace(/\.tsx?$/, ""); const identiferBits = identifier.split("."); return identiferBits.length === 1 ? null : identiferBits.at(-1); diff --git a/src/Vencord.ts b/src/Vencord.ts index c4c6d4705..b0b8ef708 100644 --- a/src/Vencord.ts +++ b/src/Vencord.ts @@ -40,7 +40,7 @@ import { relaunch } from "./utils/native"; import { getCloudSettings, putCloudSettings } from "./utils/settingsSync"; import { checkForUpdates, update, UpdateLogger } from "./utils/updater"; import { onceReady } from "./webpack"; -import { SettingsRouter } from "./webpack/common"; +import { UserSettingsModalActionCreators } from "./webpack/common"; if (IS_REPORTER) { require("./debug/runReporter"); @@ -58,7 +58,7 @@ async function syncSettings() { body: "We've noticed you have cloud integrations enabled in another client! Due to limitations, you will " + "need to re-authenticate to continue using them. Click here to go to the settings page to do so!", color: "var(--yellow-360)", - onClick: () => SettingsRouter.open("VencordCloud") + onClick: () => { UserSettingsModalActionCreators.open("VencordCloud"); } }); return; } @@ -99,23 +99,27 @@ async function init() { if (Settings.autoUpdate) { await update(); if (Settings.autoUpdateNotification) - setTimeout(() => showNotification({ - title: "Vencord has been updated!", - body: "Click here to restart", - permanent: true, - noPersist: true, - onClick: relaunch - }), 10_000); + setTimeout(() => { + showNotification({ + title: "Vencord has been updated!", + body: "Click here to restart", + permanent: true, + noPersist: true, + onClick: relaunch + }); + }, 10_000); return; } - setTimeout(() => showNotification({ - title: "A Vencord update is available!", - body: "Click here to view the update", - permanent: true, - noPersist: true, - onClick: openUpdaterModal! - }), 10_000); + setTimeout(() => { + showNotification({ + title: "A Vencord update is available!", + body: "Click here to view the update", + permanent: true, + noPersist: true, + onClick: openUpdaterModal! + }); + }, 10_000); } catch (err) { UpdateLogger.error("Failed to check for updates", err); } diff --git a/src/VencordNative.ts b/src/VencordNative.ts index 42e697452..f3da4a8bd 100644 --- a/src/VencordNative.ts +++ b/src/VencordNative.ts @@ -4,28 +4,28 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { PluginIpcMappings } from "@main/ipcPlugins"; +import type { PluginIpcMappings } from "@main/ipcPlugins"; import type { UserThemeHeader } from "@main/themes"; import { IpcEvents } from "@shared/IpcEvents"; -import { IpcRes } from "@utils/types"; +import type { IpcRes } from "@utils/types"; import type { Settings } from "api/Settings"; import { ipcRenderer } from "electron"; -function invoke(event: IpcEvents, ...args: any[]) { +function invoke(event: IpcEvents, ...args: unknown[]) { return ipcRenderer.invoke(event, ...args) as Promise; } -export function sendSync(event: IpcEvents, ...args: any[]) { +export function sendSync(event: IpcEvents, ...args: unknown[]) { return ipcRenderer.sendSync(event, ...args) as T; } -const PluginHelpers = {} as Record Promise>>; +const PluginHelpers: Record Promise>> = {}; const pluginIpcMap = sendSync(IpcEvents.GET_PLUGIN_IPC_METHOD_MAP); for (const [plugin, methods] of Object.entries(pluginIpcMap)) { - const map = PluginHelpers[plugin] = {}; + const map: typeof PluginHelpers[string] = PluginHelpers[plugin] = {}; for (const [methodName, method] of Object.entries(methods)) { - map[methodName] = (...args: any[]) => invoke(method as IpcEvents, ...args); + map[methodName] = (...args) => invoke(method as IpcEvents, ...args); } } @@ -34,7 +34,7 @@ export default { uploadTheme: (fileName: string, fileData: string) => invoke(IpcEvents.UPLOAD_THEME, fileName, fileData), deleteTheme: (fileName: string) => invoke(IpcEvents.DELETE_THEME, fileName), getThemesDir: () => invoke(IpcEvents.GET_THEMES_DIR), - getThemesList: () => invoke>(IpcEvents.GET_THEMES_LIST), + getThemesList: () => invoke(IpcEvents.GET_THEMES_LIST), getThemeData: (fileName: string) => invoke(IpcEvents.GET_THEME_DATA, fileName), getSystemValues: () => invoke>(IpcEvents.GET_THEME_SYSTEM_VALUES), }, @@ -57,11 +57,11 @@ export default { set: (css: string) => invoke(IpcEvents.SET_QUICK_CSS, css), addChangeListener(cb: (newCss: string) => void) { - ipcRenderer.on(IpcEvents.QUICK_CSS_UPDATE, (_, css) => cb(css)); + ipcRenderer.on(IpcEvents.QUICK_CSS_UPDATE, (_, css) => { cb(css); }); }, addThemeChangeListener(cb: () => void) { - ipcRenderer.on(IpcEvents.THEME_UPDATE, () => cb()); + ipcRenderer.on(IpcEvents.THEME_UPDATE, () => { cb(); }); }, openFile: () => invoke(IpcEvents.OPEN_QUICKCSS), @@ -69,7 +69,7 @@ export default { }, native: { - getVersions: () => process.versions as Partial, + getVersions: (): Partial => process.versions, openExternal: (url: string) => invoke(IpcEvents.OPEN_EXTERNAL, url) }, diff --git a/src/api/Badges.ts b/src/api/Badges.ts index 24c68c4ed..4d100481a 100644 --- a/src/api/Badges.ts +++ b/src/api/Badges.ts @@ -17,7 +17,7 @@ */ import ErrorBoundary from "@components/ErrorBoundary"; -import { ComponentType, HTMLProps } from "react"; +import type { ComponentType, HTMLProps, MouseEvent } from "react"; import Plugins from "~plugins"; @@ -35,9 +35,9 @@ export interface ProfileBadge { image?: string; link?: string; /** Action to perform when you click the badge */ - onClick?(event: React.MouseEvent, props: BadgeUserArgs): void; + onClick?: (event: MouseEvent, props: BadgeUserArgs) => void; /** Should the user display this badge? */ - shouldShow?(userInfo: BadgeUserArgs): boolean; + shouldShow?: (userInfo: BadgeUserArgs) => boolean; /** Optional props (e.g. style) for the badge, ignored for component badges */ props?: HTMLProps; /** Insert at start or end? */ @@ -70,7 +70,7 @@ export function removeBadge(badge: ProfileBadge) { * You probably don't need to use this. */ export function _getBadges(args: BadgeUserArgs) { - const badges = [] as ProfileBadge[]; + const badges: ProfileBadge[] = []; for (const badge of Badges) { if (!badge.shouldShow || badge.shouldShow(args)) { badge.position === BadgePosition.START @@ -88,20 +88,3 @@ export interface BadgeUserArgs { userId: string; guildId: string; } - -interface ConnectedAccount { - type: string; - id: string; - name: string; - verified: boolean; -} - -interface Profile { - connectedAccounts: ConnectedAccount[]; - premiumType: number; - premiumSince: string; - premiumGuildSince?: any; - lastFetched: number; - profileFetchFailed: boolean; - application?: any; -} diff --git a/src/api/ChatButtons.tsx b/src/api/ChatButtons.tsx index fcb76fffc..600243dc3 100644 --- a/src/api/ChatButtons.tsx +++ b/src/api/ChatButtons.tsx @@ -8,16 +8,16 @@ import "./ChatButton.css"; import ErrorBoundary from "@components/ErrorBoundary"; import { Logger } from "@utils/Logger"; +import type { ChannelRecord } from "@vencord/discord-types"; import { waitFor } from "@webpack"; import { Button, ButtonLooks, ButtonWrapperClasses, Tooltip } from "@webpack/common"; -import { Channel } from "discord-types/general"; -import { HTMLProps, MouseEventHandler, ReactNode } from "react"; +import type { HTMLProps, JSX, MouseEventHandler, ReactNode } from "react"; -let ChannelTextAreaClasses: Record<"button" | "buttonContainer", string>; +let ChannelTextAreaClasses: Record<"button" | "buttonContainer", string> | undefined; waitFor(["buttonContainer", "channelTextArea"], m => ChannelTextAreaClasses = m); export interface ChatBarProps { - channel: Channel; + channel: ChannelRecord; disabled: boolean; isEmpty: boolean; type: { @@ -84,7 +84,11 @@ export function _injectButtons(buttons: ReactNode[], props: ChatBarProps) { for (const [key, Button] of buttonFactories) { buttons.push( - logger.error(`Failed to render ${key}`, e.error)}> + { logger.error(`Failed to render ${key}`, e.error); }} + >
- {richBody ??

{body}

} + {richBody ??

{body}

}
- {image && } + {image && } {timeout !== 0 && !permanent && (
)} ); }, { - onError: ({ props }) => props.onClose!() + onError: ({ props }) => { props.onClose(); } }); diff --git a/src/api/Notifications/Notifications.tsx b/src/api/Notifications/Notifications.tsx index 1350e5bdc..95912ee02 100644 --- a/src/api/Notifications/Notifications.tsx +++ b/src/api/Notifications/Notifications.tsx @@ -27,7 +27,7 @@ import { persistNotification } from "./notificationLog"; const NotificationQueue = new Queue(); -let reactRoot: Root; +let reactRoot: Root | undefined; let id = 42; function getRoot() { @@ -52,8 +52,8 @@ export interface NotificationData { icon?: string; /** Large image. Optimally, this should be around 16x9 but it doesn't matter much. Desktop Notifications might not support this */ image?: string; - onClick?(): void; - onClose?(): void; + onClick?: () => void; + onClose?: () => void; color?: string; /** Whether this notification should not have a timeout */ permanent?: boolean; @@ -67,11 +67,15 @@ function _showNotification(notification: NotificationData, id: number) { const root = getRoot(); return new Promise(resolve => { root.render( - { - notification.onClose?.(); - root.render(null); - resolve(); - }} />, + { + notification.onClose?.(); + root.render(null); + resolve(); + }} + /> ); }); } @@ -100,9 +104,8 @@ export async function showNotification(data: NotificationData) { const n = new Notification(title, { body, icon, - // @ts-expect-error ts is drunk image - }); + } as NotificationOptions); n.onclick = onClick; n.onclose = onClose; } else { diff --git a/src/api/Notifications/notificationLog.tsx b/src/api/Notifications/notificationLog.tsx index 6f79ef70a..120deb4f0 100644 --- a/src/api/Notifications/notificationLog.tsx +++ b/src/api/Notifications/notificationLog.tsx @@ -19,9 +19,9 @@ import * as DataStore from "@api/DataStore"; import { Settings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; -import { closeModal, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal"; +import { closeModal, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, type ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal"; import { useAwaiter } from "@utils/react"; -import { Alerts, Button, Forms, React, Text, Timestamp, useEffect, useReducer, useState } from "@webpack/common"; +import { AlertActionCreators, Button, Forms, Text, Timestamp, useEffect, useReducer, useRef, useState } from "@webpack/common"; import { nanoid } from "nanoid"; import type { DispatchWithoutAction } from "react"; @@ -33,12 +33,9 @@ interface PersistentNotificationData extends Pick { - const log = await DataStore.get(KEY) as PersistentNotificationData[] | undefined; - return log ?? []; -}; +const getLog = async () => (await DataStore.get(DATA_KEY)) ?? []; const cl = classNameFactory("vc-notification-log-"); const signals = new Set(); @@ -49,7 +46,7 @@ export async function persistNotification(notification: NotificationData) { const limit = Settings.notifications.logLimit; if (limit === 0) return; - await DataStore.update(KEY, (old: PersistentNotificationData[] | undefined) => { + await DataStore.update(DATA_KEY, (old: PersistentNotificationData[] | undefined) => { const log = old ?? []; // Omit stuff we don't need @@ -70,7 +67,7 @@ export async function persistNotification(notification: NotificationData) { return log; }); - signals.forEach(x => x()); + signals.forEach(x => { x(); }); } export async function deleteNotification(timestamp: number) { @@ -79,8 +76,8 @@ export async function deleteNotification(timestamp: number) { if (index === -1) return; log.splice(index, 1); - await DataStore.set(KEY, log); - signals.forEach(x => x()); + await DataStore.set(DATA_KEY, log); + signals.forEach(x => { x(); }); } export function useLogs() { @@ -88,7 +85,7 @@ export function useLogs() { useEffect(() => { signals.add(setSignal); - return () => void signals.delete(setSignal); + return () => { signals.delete(setSignal); }; }, []); const [log, _, pending] = useAwaiter(getLog, { @@ -101,7 +98,7 @@ export function useLogs() { function NotificationEntry({ data }: { data: PersistentNotificationData; }) { const [removing, setRemoving] = useState(false); - const ref = React.useRef(null); + const ref = useRef(null); useEffect(() => { const div = ref.current!; @@ -173,12 +170,12 @@ function LogModal({ modalProps, close }: { modalProps: ModalProps; close(): void - - ) : ( - <> - Plugin Management - Press the cog wheel or info icon to get more info on a plugin - Plugins with a cog wheel have settings you can modify! - - )} - - ); -} +const ReloadRequiredCard = ({ required }: { required: boolean; }) => ( + + {required ? ( + <> + Restart required! + + Restart now to apply new plugins and their settings + + + + ) : ( + <> + Plugin Management + Press the cog wheel or info icon to get more info on a plugin + Plugins with a cog wheel have settings you can modify! + + )} + +); -interface PluginCardProps extends React.HTMLProps { +interface PluginCardProps extends HTMLProps { plugin: Plugin; disabled: boolean; - onRestartNeeded(name: string): void; + onRestartNeeded: (name: string) => void; isNew?: boolean; } export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, onMouseLeave, isNew }: PluginCardProps) { - const settings = Settings.plugins[plugin.name]; + const settings = Settings.plugins[plugin.name]!; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const isEnabled = () => settings.enabled ?? false; function openModal() { - openModalLazy(async () => { - return modalProps => { - return onRestartNeeded(plugin.name)} />; - }; - }); + openModalLazy(() => Promise.resolve(modalProps => ( + { onRestartNeeded(plugin.name); }} + /> + ))); } function toggleEnabled() { @@ -160,7 +162,11 @@ export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, on onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} infoButton={ - - +const BackupRestoreTab = () => ( + + + + Warning + Importing a settings file will overwrite your current settings. - - ); -} + + + You can import and export your Vencord settings as a JSON file. + This allows you to easily transfer your settings to another device, + or recover your settings after reinstalling Vencord or Discord. + + + Settings Export contains: +
    +
  • — Custom QuickCSS
  • +
  • — Theme Links
  • +
  • — Plugin Settings
  • +
+
+ + + + + +); export default wrapTab(BackupRestoreTab, "Backup & Restore"); diff --git a/src/components/VencordSettings/CloudTab.tsx b/src/components/VencordSettings/CloudTab.tsx index 080dd8dd9..3cedcaafb 100644 --- a/src/components/VencordSettings/CloudTab.tsx +++ b/src/components/VencordSettings/CloudTab.tsx @@ -23,7 +23,7 @@ import { Link } from "@components/Link"; import { authorizeCloud, cloudLogger, deauthorizeCloud, getCloudAuth, getCloudUrl } from "@utils/cloud"; import { Margins } from "@utils/margins"; import { deleteCloudSettings, getCloudSettings, putCloudSettings } from "@utils/settingsSync"; -import { Alerts, Button, Forms, Switch, Tooltip } from "@webpack/common"; +import { AlertActionCreators, Button, Forms, Switch, Tooltip } from "@webpack/common"; import { SettingsTab, wrapTab } from "./shared"; @@ -84,8 +84,10 @@ function SettingsSyncSection() { + onClick={() => { putCloudSettings(true); }} + > + Sync to Cloud + {({ onMouseLeave, onMouseEnter }) => ( + onClick={() => { getCloudSettings(true, true); }} + > + Sync from Cloud + )} + onClick={() => { deleteCloudSettings(); }} + > + Delete Cloud Settings +
); @@ -124,7 +130,12 @@ function CloudTab() { { v && authorizeCloud(); if (!v) settings.cloud.authenticated = v; }} + onChange={v => { + if (v) + authorizeCloud(); + else + settings.cloud.authenticated = v; + }} note="This will request authorization if you have not yet set up cloud integrations." > Enable Cloud Integrations @@ -136,7 +147,11 @@ function CloudTab() { { settings.cloud.url = v; settings.cloud.authenticated = false; deauthorizeCloud(); }} + onChange={v => { + settings.cloud.url = v; + settings.cloud.authenticated = false; + deauthorizeCloud(); + }} validate={validateUrl} /> diff --git a/src/components/VencordSettings/PatchHelperTab.tsx b/src/components/VencordSettings/PatchHelperTab.tsx index e09a1dbf3..cb6c372c0 100644 --- a/src/components/VencordSettings/PatchHelperTab.tsx +++ b/src/components/VencordSettings/PatchHelperTab.tsx @@ -21,9 +21,9 @@ import { debounce } from "@shared/debounce"; import { Margins } from "@utils/margins"; import { canonicalizeMatch, canonicalizeReplace } from "@utils/patches"; import { makeCodeblock } from "@utils/text"; -import { Patch, ReplaceFn } from "@utils/types"; +import type { Patch, ReplaceFn } from "@utils/types"; import { search } from "@webpack"; -import { Button, Clipboard, Forms, Parser, React, Switch, TextArea, TextInput } from "@webpack/common"; +import { Button, ClipboardUtils, Forms, MarkupUtils, Switch, TextArea, TextInput, useEffect, useMemo, useState } from "@webpack/common"; import { SettingsTab, wrapTab } from "./shared"; @@ -32,7 +32,12 @@ if (IS_DEV) { var differ = require("diff") as typeof import("diff"); } -const findCandidates = debounce(function ({ find, setModule, setError }) { +interface FindCandidatesOptions extends Pick { + setError: (error: string) => void; + setModule: (module: ReplacementComponentProps["module"]) => void; +} + +const findCandidates = debounce(({ find, setError, setModule }: FindCandidatesOptions) => { const candidates = search(find); const keys = Object.keys(candidates); const len = keys.length; @@ -41,21 +46,21 @@ const findCandidates = debounce(function ({ find, setModule, setError }) { else if (len !== 1) setError("Multiple matches. Please refine your filter"); else - setModule([keys[0], candidates[keys[0]]]); + setModule([keys[0]!, candidates[keys[0]!]!]); }); interface ReplacementComponentProps { - module: [id: number, factory: Function]; + module: [id: string | number, factory: (...args: unknown[]) => unknown]; match: string; replacement: string | ReplaceFn; - setReplacementError(error: any): void; + setReplacementError: (error: any) => void; } function ReplacementComponent({ module, match, replacement, setReplacementError }: ReplacementComponentProps) { const [id, fact] = module; - const [compileResult, setCompileResult] = React.useState<[boolean, string]>(); + const [compileResult, setCompileResult] = useState<[boolean, string]>(); - const [patchedCode, matchResult, diff] = React.useMemo(() => { + const [patchedCode, matchResult, diff] = useMemo(() => { const src: string = fact.toString().replaceAll("\n", ""); try { @@ -67,7 +72,7 @@ function ReplacementComponent({ module, match, replacement, setReplacementError try { const canonicalReplace = canonicalizeReplace(replacement, "YourPlugin"); var patched = src.replace(canonicalMatch, canonicalReplace as string); - setReplacementError(void 0); + setReplacementError(undefined); } catch (e) { setReplacementError((e as Error).message); return ["", [], []]; @@ -104,8 +109,8 @@ function ReplacementComponent({ module, match, replacement, setReplacementError return ( <> -
{Parser.parse(fullMatch)}
-
{Parser.parse(groups)}
+
{MarkupUtils.parse(fullMatch)}
+
{MarkupUtils.parse(groups)}
); } @@ -155,31 +160,38 @@ function ReplacementComponent({ module, match, replacement, setReplacementError ); } -function ReplacementInput({ replacement, setReplacement, replacementError }) { - const [isFunc, setIsFunc] = React.useState(false); - const [error, setError] = React.useState(); +interface ReplacementInputProps { + replacement: string | ReplaceFn; + setReplacement: (value: string | ReplaceFn) => void; + replacementError?: string; +} - function onChange(v: string) { - setError(void 0); +function ReplacementInput({ replacement, setReplacement, replacementError }: ReplacementInputProps) { + const [isFunc, setIsFunc] = useState(false); + const [error, setError] = useState(); + + function onChange(val: string | ReplaceFn) { + setError(undefined); if (isFunc) { try { - const func = (0, eval)(v); + // @ts-expect-error + const func = (0, eval)(val); if (typeof func === "function") setReplacement(() => func); else setError("Replacement must be a function"); } catch (e) { - setReplacement(v); + setReplacement(val); setError((e as Error).message); } } else { - setReplacement(v); + setReplacement(val); } } - React.useEffect( - () => void (isFunc ? onChange(replacement) : setError(void 0)), + useEffect( + () => { (isFunc ? onChange(replacement) : setError(undefined)); }, [isFunc] ); @@ -188,7 +200,7 @@ function ReplacementInput({ replacement, setReplacement, replacementError }) { {/* FormTitle adds a class if className is not set, so we set it to an empty string to prevent that */} replacement @@ -205,7 +217,7 @@ function ReplacementInput({ replacement, setReplacement, replacementError }) { "$self": "Insert the plugin instance", }).map(([placeholder, desc]) => ( - {Parser.parse("`" + placeholder + "`")}: {desc} + {MarkupUtils.parse("`" + placeholder + "`")}: {desc} ))} @@ -225,15 +237,15 @@ function ReplacementInput({ replacement, setReplacement, replacementError }) { } interface FullPatchInputProps { - setFind(v: string): void; - setParsedFind(v: string | RegExp): void; - setMatch(v: string): void; - setReplacement(v: string | ReplaceFn): void; + setFind: (v: string) => void; + setParsedFind: (v: string | RegExp) => void; + setMatch: (v: string) => void; + setReplacement: (v: string | ReplaceFn) => void; } function FullPatchInput({ setFind, setParsedFind, setMatch, setReplacement }: FullPatchInputProps) { - const [fullPatch, setFullPatch] = React.useState(""); - const [fullPatchError, setFullPatchError] = React.useState(""); + const [fullPatch, setFullPatch] = useState(""); + const [fullPatchError, setFullPatchError] = useState(""); function update() { if (fullPatch === "") { @@ -247,12 +259,13 @@ function FullPatchInput({ setFind, setParsedFind, setMatch, setReplacement }: Fu } try { - const parsed = (0, eval)(`(${fullPatch})`) as Patch; + const parsed: Patch = (0, eval)(`(${fullPatch})`); if (!parsed.find) throw new Error("No 'find' field"); + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!parsed.replacement) throw new Error("No 'replacement' field"); - if (parsed.replacement instanceof Array) { + if (Array.isArray(parsed.replacement)) { if (parsed.replacement.length === 0) throw new Error("Invalid replacement"); parsed.replacement = { @@ -274,26 +287,28 @@ function FullPatchInput({ setFind, setParsedFind, setMatch, setReplacement }: Fu } } - return <> - Paste your full JSON patch here to fill out the fields -