export type Config = { debug: boolean debugLogTimelineStats: boolean version?: 'desktop' | 'mobile' // Shared addAddMutedWordMenuItem: boolean // XXX This is now more like "use the Following tab by default" alwaysUseLatestTweets: boolean defaultToLatestSearch: boolean disableHomeTimeline: boolean disabledHomeTimelineRedirect: 'notifications' | 'messages' disableTweetTextFormatting: boolean dontUseChirpFont: boolean dropdownMenuFontWeight: boolean fastBlock: boolean followButtonStyle: 'monochrome' | 'themed' hideAdsNav: boolean hideBlueReplyFollowedBy: boolean hideBlueReplyFollowing: boolean hideBookmarkButton: boolean hideBookmarkMetrics: boolean hideBookmarksNav: boolean hideCommunitiesNav: boolean hideComposeTweet: boolean hideExplorePageContents: boolean hideFollowingMetrics: boolean hideForYouTimeline: boolean hideGrokNav: boolean hideInlinePrompts: boolean hideJobsNav: boolean hideLikeMetrics: boolean hideListsNav: boolean hideMetrics: boolean hideMonetizationNav: boolean // XXX This now controls hiding all "Discover" suggestions hideMoreTweets: boolean hideNotifications: 'ignore' | 'badges' | 'hide' hideProfileRetweets: boolean hideQuoteTweetMetrics: boolean hideQuotesFrom: string[] hideReplyMetrics: boolean hideRetweetMetrics: boolean hideSeeNewTweets: boolean hideShareTweetButton: boolean hideSpacesNav: boolean hideSubscriptions: boolean hideTimelineTweetBox: boolean hideTotalTweetsMetrics: boolean hideTweetAnalyticsLinks: boolean hideTwitterBlueReplies: boolean hideTwitterBlueUpsells: boolean hideUnavailableQuoteTweets: boolean // XXX This now also controls hiding Verified Followers hideVerifiedNotificationsTab: boolean hideViews: boolean hideWhoToFollowEtc: boolean listRetweets: 'ignore' | 'hide' mutableQuoteTweets: boolean mutedQuotes: QuotedTweet[] quoteTweets: SharedTweetsConfig redirectToTwitter: boolean reducedInteractionMode: boolean // XXX This now controls all replacement of X brand changes replaceLogo: boolean restoreLinkHeadlines: boolean restoreQuoteTweetsLink: boolean restoreOtherInteractionLinks: boolean retweets: SharedTweetsConfig showBlueReplyFollowersCountAmount: string showBlueReplyFollowersCount: boolean showBlueReplyVerifiedAccounts: boolean showBookmarkButtonUnderFocusedTweets: boolean sortReplies: 'relevant' | 'recent' | 'liked' tweakNewLayout: boolean tweakQuoteTweetsPage: boolean twitterBlueChecks: 'ignore' | 'replace' | 'hide' unblurSensitiveContent: boolean uninvertFollowButtons: boolean // Experiments customCss: string // Desktop only fullWidthContent: boolean fullWidthMedia: boolean hideAccountSwitcher: boolean hideExploreNav: boolean hideExploreNavWithSidebar: boolean hideMessagesDrawer: boolean hideProNav: boolean hideSidebarContent: boolean hideToggleNavigation: boolean navBaseFontSize: boolean navDensity: 'default' | 'comfortable' | 'compact' showRelevantPeople: boolean // Mobile only hideMessagesBottomNavItem: boolean } export type Locale = { [key in LocaleKey]?: string } export type LocaleKey = | 'ADD_ANOTHER_TWEET' | 'ADD_MUTED_WORD' | 'GROK_ACTIONS' | 'HOME' | 'LIKES' | 'MOST_RELEVANT' | 'MUTE_THIS_CONVERSATION' | 'POST_ALL' | 'POST_UNAVAILABLE' | 'PROFILE_SUMMARY' | 'QUOTE' | 'QUOTES' | 'QUOTE_TWEET' | 'QUOTE_TWEETS' | 'REPOST' | 'REPOSTS' | 'RETWEET' | 'RETWEETED_BY' | 'RETWEETS' | 'SHARED' | 'SHARED_TWEETS' | 'SHOW' | 'SHOW_MORE_REPLIES' | 'SORT_REPLIES_BY' | 'TURN_OFF_QUOTE_TWEETS' | 'TURN_OFF_RETWEETS' | 'TURN_ON_RETWEETS' | 'TWEET' | 'TWEETS' | 'TWEET_ALL' | 'TWEET_INTERACTIONS' | 'TWEET_YOUR_REPLY' | 'TWITTER' | 'UNDO_RETWEET' | 'VIEW' | 'WHATS_HAPPENING' export type NamedMutationObserver = MutationObserver & {name?: string} export type Disconnectable = NamedMutationObserver|{disconnect(): void} export type QuotedTweet = { quotedBy: string user: string time: string text?: string } export type SharedTweetsConfig = 'separate' | 'hide' | 'ignore' export type TweetType = | 'PINNED_TWEET' | 'PROMOTED_TWEET' | 'QUOTE_TWEET' | 'RETWEET' | 'RETWEETED_QUOTE_TWEET' | 'TWEET' | 'UNAVAILABLE' | 'UNAVAILABLE_QUOTE_TWEET' | 'UNAVAILABLE_RETWEET' export type TimelineItemType = | TweetType | 'BLUE_REPLY' | 'VERIFIED_ORG_REPLY' | 'DISCOVER_MORE_HEADING' | 'DISCOVER_MORE_TWEET' | 'FOCUSED_TWEET' | 'HEADING' | 'INLINE_PROMPT' | 'SHOW_MORE' | 'SUBSEQUENT_ITEM' | 'UNAVAILABLE' export type TimelineOptions = { classifyTweets?: boolean hideHeadings?: boolean isTabbed?: boolean isUserTimeline?: boolean onTabChanged?: () => void onTimelineAppeared?: () => void tabbedTimelineContainerSelector?: string timelineSelector?: string } export type IndividualTweetTimelineOptions = { observers: Disconnectable[] } export type UserInfo = { following: boolean followedBy: boolean followersCount: number } export type UserInfoObject = {[index: string]: UserInfo} export type VerifiedType = 'BLUE' | 'VERIFIED_ORG'