/** * Generated by orval 🍺 * Do not edit manually. * Twitter OpenAPI * Twitter OpenAPI(Swagger) specification * OpenAPI spec version: 0.0.1 */ export type TypeName = (typeof TypeName)[keyof typeof TypeName] export const TypeName = { TimelineTweet: 'TimelineTweet', TimelineTimelineItem: 'TimelineTimelineItem', TimelineUser: 'TimelineUser', TimelineTimelineCursor: 'TimelineTimelineCursor', TweetWithVisibilityResults: 'TweetWithVisibilityResults', ContextualTweetInterstitial: 'ContextualTweetInterstitial', TimelineTimelineModule: 'TimelineTimelineModule', TweetTombstone: 'TweetTombstone', TimelinePrompt: 'TimelinePrompt', TimelineMessagePrompt: 'TimelineMessagePrompt', TimelineCommunity: 'TimelineCommunity', TimelineTombstone: 'TimelineTombstone', TimelineTrend: 'TimelineTrend', TimelineNotification: 'TimelineNotification', TimelineNotificationAggregateUserActions: 'TimelineNotificationAggregateUserActions', TweetUnavailable: 'TweetUnavailable', TweetPreviewDisplay: 'TweetPreviewDisplay', Tweet: 'Tweet', User: 'User', UserUnavailable: 'UserUnavailable', Community: 'Community', CommunityDeleteActionUnavailable: 'CommunityDeleteActionUnavailable', CommunityJoinAction: 'CommunityJoinAction', CommunityJoinActionUnavailable: 'CommunityJoinActionUnavailable', CommunityLeaveActionUnavailable: 'CommunityLeaveActionUnavailable', CommunityTweetPinActionUnavailable: 'CommunityTweetPinActionUnavailable', CommunityTweetUnpinActionUnavailable: 'CommunityTweetUnpinActionUnavailable', CommunityInvitesUnavailable: 'CommunityInvitesUnavailable', CommunityJoinRequestsUnavailable: 'CommunityJoinRequestsUnavailable', CommunityUnavailable: 'CommunityUnavailable', ApiImage: 'ApiImage', TimelineRichTextUser: 'TimelineRichTextUser', } as const export type ClientEventInfoDetails = { [key: string]: unknown } export interface ClientEventInfo { component?: string details?: ClientEventInfoDetails element?: string } export type ContentEntryType = (typeof ContentEntryType)[keyof typeof ContentEntryType] export const ContentEntryType = { TimelineTimelineItem: 'TimelineTimelineItem', TimelineTimelineCursor: 'TimelineTimelineCursor', TimelineTimelineModule: 'TimelineTimelineModule', } as const export interface TextHighlight { endIndex: number startIndex: number } export interface Highlight { textHighlights: TextHighlight[] } export type ContentItemType = (typeof ContentItemType)[keyof typeof ContentItemType] export const ContentItemType = { TimelineTweet: 'TimelineTweet', TimelineTimelineCursor: 'TimelineTimelineCursor', TimelineUser: 'TimelineUser', TimelinePrompt: 'TimelinePrompt', TimelineMessagePrompt: 'TimelineMessagePrompt', TimelineCommunity: 'TimelineCommunity', TimelineTombstone: 'TimelineTombstone', TimelineTrend: 'TimelineTrend', TimelineNotification: 'TimelineNotification', } as const export type TimelineGeneralContextContextType = (typeof TimelineGeneralContextContextType)[keyof typeof TimelineGeneralContextContextType] export const TimelineGeneralContextContextType = { Follow: 'Follow', Pin: 'Pin', Like: 'Like', Location: 'Location', Sparkle: 'Sparkle', Conversation: 'Conversation', List: 'List', Community: 'Community', Facepile: 'Facepile', } as const export type SocialContextLandingUrlUrlType = (typeof SocialContextLandingUrlUrlType)[keyof typeof SocialContextLandingUrlUrlType] export const SocialContextLandingUrlUrlType = { DeepLink: 'DeepLink', UrtEndpoint: 'UrtEndpoint', ExternalUrl: 'ExternalUrl', } as const export interface UrtEndpointRequestParams { key: string value: string } export interface UrtEndpointOptions { requestParams: UrtEndpointRequestParams[] title: string } export interface SocialContextLandingUrl { url?: string urlType?: SocialContextLandingUrlUrlType urtEndpointOptions?: UrtEndpointOptions } export type SocialContextUnionType = (typeof SocialContextUnionType)[keyof typeof SocialContextUnionType] export const SocialContextUnionType = { TimelineGeneralContext: 'TimelineGeneralContext', TimelineTopicContext: 'TimelineTopicContext', } as const export interface TimelineGeneralContext { contextImageUrls?: string[] contextType?: TimelineGeneralContextContextType landingUrl?: SocialContextLandingUrl text?: string type?: SocialContextUnionType } export type TimelineTopicContextFunctionalityType = (typeof TimelineTopicContextFunctionalityType)[keyof typeof TimelineTopicContextFunctionalityType] export const TimelineTopicContextFunctionalityType = { Basic: 'Basic', } as const export interface TopicContext { description?: string following?: boolean icon_url?: string id?: string name?: string not_interested?: boolean topic_id?: string } export interface TimelineTopicContext { functionalityType?: TimelineTopicContextFunctionalityType topic?: TopicContext type?: SocialContextUnionType } export type SocialContextUnion = TimelineGeneralContext | TimelineTopicContext export type TimelineTweetTweetDisplayType = (typeof TimelineTweetTweetDisplayType)[keyof typeof TimelineTweetTweetDisplayType] export const TimelineTweetTweetDisplayType = { Tweet: 'Tweet', SelfThread: 'SelfThread', MediaGrid: 'MediaGrid', CondensedTweet: 'CondensedTweet', } as const export interface ArticleCoverMediaColorInfoPaletteRGB { blue: number green: number red: number } export interface ArticleCoverMediaColorInfoPalette { percentage: number rgb: ArticleCoverMediaColorInfoPaletteRGB } export interface ArticleCoverMediaColorInfo { palette: ArticleCoverMediaColorInfoPalette[] } export interface ArticleCoverMediaInfo { __typename?: TypeName color_info: ArticleCoverMediaColorInfo original_img_height: number original_img_url: string original_img_width: number } export interface ArticleCoverMedia { id: string /** @pattern ^[0-9]+$ */ media_id: string media_info: ArticleCoverMediaInfo media_key: string } export interface ArticleLifecycleState { modified_at_secs: number } export interface ArticleMetadata { first_published_at_secs: number } export type ArticleResultContentState = { [key: string]: unknown } export interface ArticleResult { content_state?: ArticleResultContentState cover_media?: ArticleCoverMedia id: string is_grok_summary_eligible?: boolean lifecycle_state?: ArticleLifecycleState media_entities?: ArticleCoverMedia[] metadata: ArticleMetadata preview_text: string /** @pattern ^[0-9]+$ */ rest_id: string title: string } export interface ArticleResults { result: ArticleResult } export interface Article { article_results: ArticleResults } export type CommunityDeleteActionResultReason = (typeof CommunityDeleteActionResultReason)[keyof typeof CommunityDeleteActionResultReason] export const CommunityDeleteActionResultReason = { Unavailable: 'Unavailable', } as const export interface CommunityDeleteActionResult { __typename: TypeName reason: CommunityDeleteActionResultReason } export type _CommunityJoinActionTypename = (typeof _CommunityJoinActionTypename)[keyof typeof _CommunityJoinActionTypename] export const _CommunityJoinActionTypename = { CommunityJoinAction: 'CommunityJoinAction', } as const export interface CommunityJoinAction { __typename: _CommunityJoinActionTypename } export type _CommunityJoinActionUnavailableTypename = (typeof _CommunityJoinActionUnavailableTypename)[keyof typeof _CommunityJoinActionUnavailableTypename] export const _CommunityJoinActionUnavailableTypename = { CommunityJoinActionUnavailable: 'CommunityJoinActionUnavailable', } as const export type CommunityJoinActionUnavailableReason = (typeof CommunityJoinActionUnavailableReason)[keyof typeof CommunityJoinActionUnavailableReason] export const CommunityJoinActionUnavailableReason = { ViewerRequestRequired: 'ViewerRequestRequired', } as const export interface CommunityJoinActionUnavailable { __typename: _CommunityJoinActionUnavailableTypename message: string reason: CommunityJoinActionUnavailableReason } export type CommunityJoinActionResultUnion = | CommunityJoinAction | CommunityJoinActionUnavailable export type CommunityLeaveActionResultReason = (typeof CommunityLeaveActionResultReason)[keyof typeof CommunityLeaveActionResultReason] export const CommunityLeaveActionResultReason = { ViewerNotMember: 'ViewerNotMember', } as const export interface CommunityLeaveActionResult { __typename: TypeName message: string reason: CommunityLeaveActionResultReason } export interface CommunityPinActionResult { __typename: TypeName } export interface CommunityUnpinActionResult { __typename: TypeName } export interface CommunityActions { delete_action_result?: CommunityDeleteActionResult join_action_result?: CommunityJoinActionResultUnion leave_action_result?: CommunityLeaveActionResult pin_action_result?: CommunityPinActionResult unpin_action_result?: CommunityUnpinActionResult } export interface UserAvatar { image_url: string } /** * @pattern ^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0-3])(: ?)([0-5][0-9])(: ?)([0-5][0-9]) ([+-][0-9]{4}) ([0-9]{4})$ */ export type TwitterTimeFormat = string export interface UserCore { created_at: TwitterTimeFormat name: string screen_name: string } export interface UserDmPermissions { can_dm: boolean } export interface UserHighlightsInfo { can_highlight_tweets: boolean highlighted_tweets: string } export type UserLegacyVerifiedType = (typeof UserLegacyVerifiedType)[keyof typeof UserLegacyVerifiedType] export const UserLegacyVerifiedType = { Business: 'Business', Government: 'Government', } as const export type UserLegacyEntities = { [key: string]: unknown } export type UserLegacyProfileBannerExtensions = { [key: string]: unknown } export type UserLegacyProfileImageExtensions = { [key: string]: unknown } export interface UserLegacy { blocked_by?: boolean blocking?: boolean can_dm?: boolean can_media_tag?: boolean created_at?: TwitterTimeFormat default_profile: boolean default_profile_image: boolean description: string entities: UserLegacyEntities fast_followers_count: number favourites_count: number follow_request_sent?: boolean followed_by?: boolean followers_count: number following?: boolean friends_count: number has_custom_timelines: boolean is_translator: boolean listed_count: number location?: string media_count: number muting?: boolean name?: string normal_followers_count: number notifications?: boolean pinned_tweet_ids_str?: string[] possibly_sensitive: boolean profile_banner_extensions?: UserLegacyProfileBannerExtensions profile_banner_url?: string profile_image_extensions?: UserLegacyProfileImageExtensions profile_image_url_https?: string profile_interstitial_type: string protected?: boolean screen_name?: string statuses_count: number time_zone: string translator_type: string url?: string utc_offset: number verified?: boolean verified_type?: UserLegacyVerifiedType want_retweets?: boolean withheld_description: string withheld_in_countries?: string[] withheld_scope: string } export type UserLegacyExtendedProfileBirthdateVisibility = (typeof UserLegacyExtendedProfileBirthdateVisibility)[keyof typeof UserLegacyExtendedProfileBirthdateVisibility] export const UserLegacyExtendedProfileBirthdateVisibility = { Self: 'Self', Public: 'Public', MutualFollow: 'MutualFollow', Followers: 'Followers', Following: 'Following', } as const export type UserLegacyExtendedProfileBirthdateYearVisibility = (typeof UserLegacyExtendedProfileBirthdateYearVisibility)[keyof typeof UserLegacyExtendedProfileBirthdateYearVisibility] export const UserLegacyExtendedProfileBirthdateYearVisibility = { Self: 'Self', Public: 'Public', MutualFollow: 'MutualFollow', Followers: 'Followers', Following: 'Following', } as const export interface UserLegacyExtendedProfileBirthdate { day: number month: number visibility: UserLegacyExtendedProfileBirthdateVisibility year?: number year_visibility: UserLegacyExtendedProfileBirthdateYearVisibility } export interface UserLegacyExtendedProfile { birthdate?: UserLegacyExtendedProfileBirthdate } export interface UserLocation { location: string } export interface UserMediaPermissions { can_media_tag: boolean } export type UserParodyCommentaryFanLabel = (typeof UserParodyCommentaryFanLabel)[keyof typeof UserParodyCommentaryFanLabel] export const UserParodyCommentaryFanLabel = { None: 'None', Parody: 'Parody', Commentary: 'Commentary', Fan: 'Fan', } as const export interface UserPrivacy { protected: boolean } export interface UserProfessionalCategory { icon_name: string id: number name: string } export type UserProfessionalProfessionalType = (typeof UserProfessionalProfessionalType)[keyof typeof UserProfessionalProfessionalType] export const UserProfessionalProfessionalType = { Business: 'Business', Creator: 'Creator', } as const export interface UserProfessional { category?: UserProfessionalCategory[] professional_type: UserProfessionalProfessionalType /** @pattern ^[0-9]+$ */ rest_id: string } export interface ProfileBio { description: string } export type UserProfileImageShape = (typeof UserProfileImageShape)[keyof typeof UserProfileImageShape] export const UserProfileImageShape = { Circle: 'Circle', Square: 'Square', Hexagon: 'Hexagon', } as const export interface UserRelationshipPerspectives { blocked_by?: boolean blocking?: boolean followed_by?: boolean following?: boolean } export interface SuperFollowUserProfile { is_active: boolean } export interface UserProfile { super_follows_user_profile: SuperFollowUserProfile } export interface UserTipJarSettings { bandcamp_handle?: string bitcoin_handle?: string cash_app_handle?: string ethereum_handle?: string gofundme_handle?: string is_enabled?: boolean patreon_handle?: string pay_pal_handle?: string venmo_handle?: string } export type UserVerificationVerifiedType = (typeof UserVerificationVerifiedType)[keyof typeof UserVerificationVerifiedType] export const UserVerificationVerifiedType = { Business: 'Business', Government: 'Government', } as const export interface UserVerification { verified: boolean verified_type?: UserVerificationVerifiedType } export type UserVerificationInfoReasonDescriptionEntitiesRefUrlType = (typeof UserVerificationInfoReasonDescriptionEntitiesRefUrlType)[keyof typeof UserVerificationInfoReasonDescriptionEntitiesRefUrlType] export const UserVerificationInfoReasonDescriptionEntitiesRefUrlType = { ExternalUrl: 'ExternalUrl', } as const export interface UserVerificationInfoReasonDescriptionEntitiesRef { url: string url_type: UserVerificationInfoReasonDescriptionEntitiesRefUrlType } export interface UserVerificationInfoReasonDescriptionEntities { from_index: number ref: UserVerificationInfoReasonDescriptionEntitiesRef to_index: number } export interface UserVerificationInfoReasonDescription { entities: UserVerificationInfoReasonDescriptionEntities[] text: string } export interface UserVerificationInfoReason { description: UserVerificationInfoReasonDescription override_verified_year?: number /** @pattern ^-?[0-9]+$ */ verified_since_msec: string } export interface UserVerificationInfo { is_identity_verified: boolean reason?: UserVerificationInfoReason } export type UserAffiliatesHighlightedLabel = { [key: string]: unknown } export type UserBusinessAccount = { [key: string]: unknown } export interface User { __typename: TypeName affiliates_highlighted_label?: UserAffiliatesHighlightedLabel avatar?: UserAvatar business_account?: UserBusinessAccount core?: UserCore creator_subscriptions_count?: number dm_permissions?: UserDmPermissions has_graduated_access?: boolean has_hidden_likes_on_profile?: boolean has_hidden_subscriptions_on_profile?: boolean has_nft_avatar?: boolean highlights_info?: UserHighlightsInfo /** @pattern ^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$ */ id: string is_blue_verified: boolean is_profile_translatable?: boolean legacy: UserLegacy legacy_extended_profile?: UserLegacyExtendedProfile location?: UserLocation media_permissions?: UserMediaPermissions parody_commentary_fan_label?: UserParodyCommentaryFanLabel premium_gifting_eligible?: boolean privacy?: UserPrivacy professional?: UserProfessional profile_bio?: ProfileBio profile_description_language?: string profile_image_shape: UserProfileImageShape profile_sort_enabled?: boolean relationship_perspectives?: UserRelationshipPerspectives /** @pattern ^[0-9]+$ */ rest_id: string super_follow_eligible?: boolean super_followed_by?: boolean super_following?: boolean super_follows_user_profile?: UserProfile tipjar_settings?: UserTipJarSettings user_seed_tweet_count?: number verification?: UserVerification verification_info?: UserVerificationInfo verified_user_profiles?: UserProfile } export interface UserUnavailable { __typename: TypeName message?: string reason: string } export type UserUnion = User | UserUnavailable export interface UserResults { result?: UserUnion } export type CommunityInvitesPolicy = (typeof CommunityInvitesPolicy)[keyof typeof CommunityInvitesPolicy] export const CommunityInvitesPolicy = { MemberInvitesAllowed: 'MemberInvitesAllowed', ModeratorInvitesAllowed: 'ModeratorInvitesAllowed', } as const export type CommunityInvitesResultReason = (typeof CommunityInvitesResultReason)[keyof typeof CommunityInvitesResultReason] export const CommunityInvitesResultReason = { Unavailable: 'Unavailable', } as const export interface CommunityInvitesResult { __typename: TypeName message: string reason: CommunityInvitesResultReason } export type CommunityJoinPolicy = (typeof CommunityJoinPolicy)[keyof typeof CommunityJoinPolicy] export const CommunityJoinPolicy = { Open: 'Open', RestrictedJoinRequestsRequireModeratorApproval: 'RestrictedJoinRequestsRequireModeratorApproval', } as const export interface CommunityJoinRequestsResult { __typename: TypeName } export interface PrimaryCommunityTopic { /** @pattern ^[0-9]+$ */ topic_id: string topic_name: string } export type CommunityRole = (typeof CommunityRole)[keyof typeof CommunityRole] export const CommunityRole = { NonMember: 'NonMember', } as const export interface CommunityRule { description?: string name: string /** @pattern ^[0-9]+$ */ rest_id: string } export interface CommunityUrlsPermalink { url: string } export interface CommunityUrls { permalink: CommunityUrlsPermalink } export type CommunityCustomBannerMedia = { [key: string]: unknown } export type CommunityDefaultBannerMedia = { [key: string]: unknown } export type CommunityViewerRelationship = { [key: string]: unknown } export interface Community { __typename: TypeName actions?: CommunityActions admin_results?: UserResults created_at?: number creator_results?: UserResults custom_banner_media?: CommunityCustomBannerMedia default_banner_media?: CommunityDefaultBannerMedia description?: string /** @pattern ^[0-9]+$ */ id_str?: string invites_policy?: CommunityInvitesPolicy invites_result?: CommunityInvitesResult is_pinned?: boolean join_policy?: CommunityJoinPolicy join_requests_result?: CommunityJoinRequestsResult member_count?: number members_facepile_results?: UserResults[] moderator_count?: number name?: string primary_community_topic?: PrimaryCommunityTopic question?: string role?: CommunityRole rules?: CommunityRule[] search_tags?: string[] show_only_users_to_display?: string[] urls?: CommunityUrls viewer_relationship?: CommunityViewerRelationship } export interface CommunityUnavailable { __typename: TypeName } export type CommunityUnion = Community | CommunityUnavailable export interface CommunityResult { result: CommunityUnion } export type AuthorCommunityRelationshipRole = (typeof AuthorCommunityRelationshipRole)[keyof typeof AuthorCommunityRelationshipRole] export const AuthorCommunityRelationshipRole = { Member: 'Member', Moderator: 'Moderator', Admin: 'Admin', NonMember: 'NonMember', } as const export interface AuthorCommunityRelationship { community_results: CommunityResult role?: AuthorCommunityRelationshipRole user_results?: UserResults } export interface BirdwatchPivotCallToAction { destinationUrl: string prompt: string title: string } export type BirdwatchEntityRefType = (typeof BirdwatchEntityRefType)[keyof typeof BirdwatchEntityRefType] export const BirdwatchEntityRefType = { TimelineUrl: 'TimelineUrl', TimelineRichTextHashtag: 'TimelineRichTextHashtag', } as const export type BirdwatchEntityRefUrlType = (typeof BirdwatchEntityRefUrlType)[keyof typeof BirdwatchEntityRefUrlType] export const BirdwatchEntityRefUrlType = { ExternalUrl: 'ExternalUrl', } as const export interface BirdwatchEntityRef { text?: string type: BirdwatchEntityRefType url?: string urlType?: BirdwatchEntityRefUrlType } export interface BirdwatchEntity { fromIndex: number ref: BirdwatchEntityRef toIndex: number } export interface BirdwatchPivotFooter { entities: BirdwatchEntity[] text: string } export type BirdwatchPivotFooterIconType = (typeof BirdwatchPivotFooterIconType)[keyof typeof BirdwatchPivotFooterIconType] export const BirdwatchPivotFooterIconType = { BirdwatchEyeOff: 'BirdwatchEyeOff', } as const export type BirdwatchPivotIconType = (typeof BirdwatchPivotIconType)[keyof typeof BirdwatchPivotIconType] export const BirdwatchPivotIconType = { BirdwatchV1Icon: 'BirdwatchV1Icon', BirdwatchCameraVideo: 'BirdwatchCameraVideo', } as const export type GrokEntityRefType = (typeof GrokEntityRefType)[keyof typeof GrokEntityRefType] export const GrokEntityRefType = { TimelineUrl: 'TimelineUrl', TimelineRichTextHashtag: 'TimelineRichTextHashtag', } as const export type GrokEntityRefUrlType = (typeof GrokEntityRefUrlType)[keyof typeof GrokEntityRefUrlType] export const GrokEntityRefUrlType = { ExternalUrl: 'ExternalUrl', } as const export interface GrokEntityRef { display_url?: string expanded_url?: string text?: string type: GrokEntityRefType url?: string url_type?: GrokEntityRefUrlType } export interface GrokEntity { from_index: string ref: GrokEntityRef to_index: string } export interface GrokTranslatedCommunityNote { destination_language: string rich_text_entities?: GrokEntity[] source_language: string translation: string translation_available: boolean } export interface GrokTranslatedCommunityNoteWithAvailability { data?: GrokTranslatedCommunityNote is_available: boolean } export interface BirdwatchPivotNote { grok_translated_community_note_with_availability?: GrokTranslatedCommunityNoteWithAvailability is_community_note_translatable?: boolean language?: string /** @pattern ^[0-9]+$ */ rest_id: string } export interface BirdwatchPivotSubtitle { entities: BirdwatchEntity[] text: string } export type BirdwatchPivotVisualStyle = (typeof BirdwatchPivotVisualStyle)[keyof typeof BirdwatchPivotVisualStyle] export const BirdwatchPivotVisualStyle = { Default: 'Default', Tentative: 'Tentative', } as const export interface BirdwatchPivot { callToAction?: BirdwatchPivotCallToAction destinationUrl: string footer?: BirdwatchPivotFooter footerIconType?: BirdwatchPivotFooterIconType iconType: BirdwatchPivotIconType note?: BirdwatchPivotNote shorttitle?: string subtitle?: BirdwatchPivotSubtitle title: string titleDetail?: string visualStyle?: BirdwatchPivotVisualStyle } export interface TweetCardLegacyBindingValueDataImage { alt?: string height: number url: string width: number } export interface UserValue { /** @pattern ^[0-9]+$ */ id_str: string } export type TweetCardLegacyBindingValueDataImageColorValue = { [key: string]: unknown } export interface TweetCardLegacyBindingValueData { boolean_value?: boolean image_color_value?: TweetCardLegacyBindingValueDataImageColorValue image_value?: TweetCardLegacyBindingValueDataImage scribe_key?: string string_value?: string type: string user_value?: UserValue } export interface TweetCardLegacyBindingValue { key: string value: TweetCardLegacyBindingValueData } export type TweetCardPlatformAudienceName = (typeof TweetCardPlatformAudienceName)[keyof typeof TweetCardPlatformAudienceName] export const TweetCardPlatformAudienceName = { production: 'production', } as const export interface TweetCardPlatformAudience { name: TweetCardPlatformAudienceName } export interface TweetCardPlatformDevice { name: string /** @pattern ^[0-9]+$ */ version: string } export interface TweetCardPlatform { audience: TweetCardPlatformAudience device: TweetCardPlatformDevice } export interface TweetCardPlatformData { platform: TweetCardPlatform } export interface TweetCardLegacy { binding_values: TweetCardLegacyBindingValue[] card_platform?: TweetCardPlatformData name: string url: string user_refs_results?: UserResults[] } export interface TweetCard { legacy?: TweetCardLegacy rest_id?: string } export type CommunityRelationshipModerationState = { [key: string]: unknown } export interface CommunityRelationship { actions: CommunityActions id: string moderation_state: CommunityRelationshipModerationState /** @pattern ^[0-9]+$ */ rest_id: string } export interface ContentDisclosureAdvertisingDisclosure { is_paid_promotion: boolean } export type ContentDisclosureAiGeneratedDisclosureAiGeneratedDetectionSource = (typeof ContentDisclosureAiGeneratedDisclosureAiGeneratedDetectionSource)[keyof typeof ContentDisclosureAiGeneratedDisclosureAiGeneratedDetectionSource] export const ContentDisclosureAiGeneratedDisclosureAiGeneratedDetectionSource = { C2paClient: 'C2paClient', ContentDisclosureAiGeneratedDisclosure: 'ContentDisclosureAiGeneratedDisclosure', UserDeclared: 'UserDeclared', } as const export interface ContentDisclosureAiGeneratedDisclosure { ai_generated_detection_source?: ContentDisclosureAiGeneratedDisclosureAiGeneratedDetectionSource can_edit: boolean has_ai_generated_media: boolean } export interface ContentDisclosure { advertising_disclosure?: ContentDisclosureAdvertisingDisclosure ai_generated_disclosure?: ContentDisclosureAiGeneratedDisclosure } export interface UserResultCore { user_results: UserResults } export interface TweetEditControlInitial { /** @items.pattern ^[0-9]+$ */ edit_tweet_ids: string[] /** @pattern ^[0-9]+$ */ editable_until_msecs: string /** @pattern ^[0-9]+$ */ edits_remaining: string is_edit_eligible: boolean } export interface TweetEditControl { edit_control_initial?: TweetEditControlInitial /** @items.pattern ^[0-9]+$ */ edit_tweet_ids?: string[] /** @pattern ^[0-9]+$ */ editable_until_msecs?: string /** @pattern ^[0-9]+$ */ edits_remaining?: string /** @pattern ^[0-9]+$ */ initial_tweet_id?: string is_edit_eligible?: boolean } export interface TweetEditPrespective { favorited?: boolean retweeted?: boolean } export interface GrokAnnotation { is_image_editable_by_grok?: boolean } export interface AnalysisResults { result: Tweet } export type GrokShareAttachmentItemDeepsearchHeadersItem = { [key: string]: unknown } export interface GrokShareAttachmentItem { analysis_post_id_results?: AnalysisResults deepsearch_headers?: GrokShareAttachmentItemDeepsearchHeadersItem[] media_urls: string[] message: string } export interface GrokShareAttachment { items: GrokShareAttachmentItem[] } export interface Hashtag { [key: string]: unknown } export interface AdditionalMediaInfoCallToActionsUrl { url: string } export interface AdditionalMediaInfoCallToActions { visit_site?: AdditionalMediaInfoCallToActionsUrl watch_now?: AdditionalMediaInfoCallToActionsUrl } export interface AdditionalMediaInfo { call_to_actions?: AdditionalMediaInfoCallToActions description?: string embeddable?: boolean monetizable: boolean source_user?: UserResultCore title?: string } export interface AllowDownloadStatus { allow_download?: boolean } export type ExtMediaAvailabilityStatus = (typeof ExtMediaAvailabilityStatus)[keyof typeof ExtMediaAvailabilityStatus] export const ExtMediaAvailabilityStatus = { Available: 'Available', Unavailable: 'Unavailable', } as const export interface ExtMediaAvailability { reason?: string status?: ExtMediaAvailabilityStatus } export interface GrokImageAnnotation { prompt: string upsampled_prompt: string } export interface MediaResult { grok_image_annotation?: GrokImageAnnotation media_key: string } export interface MediaResults { result: MediaResult } export interface MediaOriginalInfoFocusRect { h: number w: number x: number y: number } export interface MediaOriginalInfo { focus_rects?: MediaOriginalInfoFocusRect[] height: number width: number } export interface SensitiveMediaWarning { adult_content?: boolean graphic_violence?: boolean other?: boolean } export type MediaSizeResize = (typeof MediaSizeResize)[keyof typeof MediaSizeResize] export const MediaSizeResize = { crop: 'crop', fit: 'fit', } as const export interface MediaSize { h: number resize: MediaSizeResize w: number } export interface MediaSizes { large: MediaSize medium: MediaSize small: MediaSize thumb: MediaSize } export type MediaType = (typeof MediaType)[keyof typeof MediaType] export const MediaType = { photo: 'photo', video: 'video', animated_gif: 'animated_gif', } as const export interface MediaVideoInfoVariant { bitrate?: number content_type: string url: string } export interface MediaVideoInfo { aspect_ratio: number[] duration_millis?: number variants: MediaVideoInfoVariant[] } export type MediaFeatures = { [key: string]: unknown } export interface Media { additional_media_info?: AdditionalMediaInfo allow_download_status?: AllowDownloadStatus display_url: string expanded_url: string ext_alt_text?: string ext_media_availability: ExtMediaAvailability features?: MediaFeatures grok_post_id?: string /** @pattern ^[0-9]+$ */ id_str: string indices: number[] media_key: string media_results?: MediaResults media_url_https: string original_info: MediaOriginalInfo sensitive_media_warning?: SensitiveMediaWarning sizes: MediaSizes /** @pattern ^[0-9]+$ */ source_status_id_str?: string /** @pattern ^[0-9]+$ */ source_user_id_str?: string type: MediaType url: string video_info?: MediaVideoInfo } export type SmarttagTagInfo = { [key: string]: unknown } export interface SmarttagTag { info: SmarttagTagInfo } export interface Smarttag { indices: number[] tag: SmarttagTag text: string } export interface Symbol { [key: string]: unknown } export interface Timestamp { indices: number[] seconds: number text: string } export interface Url { display_url: string expanded_url?: string indices: number[] url: string } export interface UserMention { [key: string]: unknown } export interface Entities { hashtags?: Hashtag[] media?: Media[] smarttags?: Smarttag[] symbols?: Symbol[] timestamps?: Timestamp[] urls?: Url[] user_mentions?: UserMention[] } export type GrokTranslatedPostAssociatedData = { [key: string]: unknown } export interface GrokTranslatedPost { associated_data?: GrokTranslatedPostAssociatedData destination_language?: string entities?: Entities preview_translation?: string source_language?: string translation?: string } export interface GrokTranslatedPostWithAvailability { data?: GrokTranslatedPost is_available: boolean } export interface MediaStats { viewCount: number } export type MediaExtendedType = (typeof MediaExtendedType)[keyof typeof MediaExtendedType] export const MediaExtendedType = { photo: 'photo', video: 'video', animated_gif: 'animated_gif', } as const export type MediaExtendedFeatures = { [key: string]: unknown } export interface MediaExtended { additional_media_info?: AdditionalMediaInfo allow_download_status?: AllowDownloadStatus display_url: string expanded_url: string ext_alt_text?: string ext_media_availability?: ExtMediaAvailability features?: MediaExtendedFeatures grok_post_id?: string /** @pattern ^[0-9]+$ */ id_str: string indices: number[] mediaStats?: MediaStats media_key: string media_results?: MediaResults media_url_https: string original_info: MediaOriginalInfo sensitive_media_warning?: SensitiveMediaWarning sizes: MediaSizes /** @pattern ^[0-9]+$ */ source_status_id_str?: string /** @pattern ^[0-9]+$ */ source_user_id_str?: string type: MediaExtendedType url: string video_info?: MediaVideoInfo } export interface ExtendedEntities { media: MediaExtended[] } export type TweetLegacyLimitedActions = (typeof TweetLegacyLimitedActions)[keyof typeof TweetLegacyLimitedActions] export const TweetLegacyLimitedActions = { limited_replies: 'limited_replies', non_compliant: 'non_compliant', dynamic_product_ad: 'dynamic_product_ad', stale_tweet: 'stale_tweet', community_tweet_non_member_public_community: 'community_tweet_non_member_public_community', community_tweet_non_member_closed_community: 'community_tweet_non_member_closed_community', blocked_viewer: 'blocked_viewer', } as const export interface QuotedStatusPermalink { display: string expanded: string url: string } export interface TweetLegacyScopes { followers: boolean } export interface SelfThread { /** @pattern ^[0-9]+$ */ id_str: string } export type TweetLegacyConversationControl = { [key: string]: unknown } export type TweetLegacyPlace = { [key: string]: unknown } export interface TweetLegacy { bookmark_count: number bookmarked: boolean conversation_control?: TweetLegacyConversationControl /** @pattern ^[0-9]+$ */ conversation_id_str: string created_at: TwitterTimeFormat display_text_range: number[] entities?: Entities extended_entities?: ExtendedEntities favorite_count: number favorited: boolean full_text: string /** @pattern ^[0-9]+$ */ id_str: string in_reply_to_screen_name?: string /** @pattern ^[0-9]+$ */ in_reply_to_status_id_str?: string /** @pattern ^[0-9]+$ */ in_reply_to_user_id_str?: string is_quote_status: boolean lang: string limited_actions?: TweetLegacyLimitedActions place?: TweetLegacyPlace possibly_sensitive?: boolean possibly_sensitive_editable?: boolean quote_count: number /** @pattern ^[0-9]+$ */ quoted_status_id_str?: string quoted_status_permalink?: QuotedStatusPermalink reply_count: number retweet_count: number retweeted: boolean retweeted_status_result?: ItemResult scopes?: TweetLegacyScopes self_thread?: SelfThread /** @pattern ^[0-9]+$ */ user_id_str: string } export interface NoteTweetResultMediaInlineMedia { index: number /** @pattern ^[0-9]+$ */ media_id: string } export interface NoteTweetResultMedia { inline_media: NoteTweetResultMediaInlineMedia[] } export type NoteTweetResultRichTextTagRichtextTypesItem = (typeof NoteTweetResultRichTextTagRichtextTypesItem)[keyof typeof NoteTweetResultRichTextTagRichtextTypesItem] export const NoteTweetResultRichTextTagRichtextTypesItem = { Bold: 'Bold', Italic: 'Italic', } as const export interface NoteTweetResultRichTextTag { from_index: number richtext_types: NoteTweetResultRichTextTagRichtextTypesItem[] to_index: number } export interface NoteTweetResultRichText { richtext_tags: NoteTweetResultRichTextTag[] } export interface NoteTweetResultData { entity_set: Entities /** @pattern ^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$ */ id: string media?: NoteTweetResultMedia richtext?: NoteTweetResultRichText text: string } export interface NoteTweetResult { result: NoteTweetResultData } export interface NoteTweet { is_expandable?: boolean note_tweet_results: NoteTweetResult } export type TweetPostCtaDisplayLocationsItem = (typeof TweetPostCtaDisplayLocationsItem)[keyof typeof TweetPostCtaDisplayLocationsItem] export const TweetPostCtaDisplayLocationsItem = { TweetDetails: 'TweetDetails', ForYouTimeline: 'ForYouTimeline', RepliesTimeline: 'RepliesTimeline', } as const export interface PostCtaUserResultsAvatar { image_url: string } export interface PostCtaUserResultsResult { __typename: TypeName avatar: PostCtaUserResultsAvatar } export interface PostCtaUserResults { result: PostCtaUserResultsResult } export interface PostCtaTitleTextEntityRef { __typename: TypeName user_results?: PostCtaUserResults } export interface PostCtaTitleTextEntity { fromIndex: number ref: PostCtaTitleTextEntityRef toIndex: number } export interface PostCtaTitleText { entities: PostCtaTitleTextEntity[] text: string } export interface PostCta { action_url: string background_color: string show_chevron: boolean stroke_color: string title_text: PostCtaTitleText } export interface TweetPostCta { display_locations: TweetPostCtaDisplayLocationsItem[] post_cta: PostCta scribe_id?: string } export interface TweetPreviousCounts { bookmark_count: number favorite_count: number quote_count: number reply_count: number retweet_count: number } export interface QuotedRefResult { result?: TweetUnion } export interface SuperFollowsReplyUserResultCore { screen_name: string } export interface SuperFollowsReplyUserResultData { __typename: TypeName core?: SuperFollowsReplyUserResultCore } export interface SuperFollowsReplyUserResult { result: SuperFollowsReplyUserResultData } export interface TrendResults { /** @pattern ^[0-9]+$ */ rest_id: string } export type UnifiedCardCardFetchState = (typeof UnifiedCardCardFetchState)[keyof typeof UnifiedCardCardFetchState] export const UnifiedCardCardFetchState = { NoCard: 'NoCard', } as const export interface UnifiedCard { card_fetch_state: UnifiedCardCardFetchState } export type TweetViewState = (typeof TweetViewState)[keyof typeof TweetViewState] export const TweetViewState = { Enabled: 'Enabled', EnabledWithCount: 'EnabledWithCount', } as const export interface TweetView { /** @pattern ^[0-9]+$ */ count?: string state: TweetViewState } export type TweetQuickPromoteEligibility = { [key: string]: unknown } export type TweetUnmentionData = { [key: string]: unknown } export interface Tweet { __typename?: TypeName article?: Article author_community_relationship?: AuthorCommunityRelationship birdwatch_pivot?: BirdwatchPivot card?: TweetCard community_relationship?: CommunityRelationship community_results?: CommunityResult content_disclosure?: ContentDisclosure core?: UserResultCore edit_control?: TweetEditControl edit_prespective?: TweetEditPrespective grok_analysis_button?: boolean grok_analysis_followups?: string[] grok_annotations?: GrokAnnotation grok_share_attachment?: GrokShareAttachment grok_translated_post_with_availability?: GrokTranslatedPostWithAvailability has_birdwatch_notes?: boolean is_translatable?: boolean legacy?: TweetLegacy note_tweet?: NoteTweet postCta?: TweetPostCta post_image_description?: string post_video_description?: string previous_counts?: TweetPreviousCounts quick_promote_eligibility?: TweetQuickPromoteEligibility quotedRefResult?: QuotedRefResult quoted_status_result?: ItemResult /** @pattern ^[0-9]+$ */ rest_id: string source?: string superFollowsReplyUserResult?: SuperFollowsReplyUserResult trend_results?: TrendResults unified_card?: UnifiedCard unmention_data?: TweetUnmentionData views?: TweetView } export type TweetInterstitialTextEntityRefType = (typeof TweetInterstitialTextEntityRefType)[keyof typeof TweetInterstitialTextEntityRefType] export const TweetInterstitialTextEntityRefType = { TimelineUrl: 'TimelineUrl', } as const export type TweetInterstitialTextEntityRefUrlType = (typeof TweetInterstitialTextEntityRefUrlType)[keyof typeof TweetInterstitialTextEntityRefUrlType] export const TweetInterstitialTextEntityRefUrlType = { ExternalUrl: 'ExternalUrl', } as const export interface TweetInterstitialTextEntityRef { type: TweetInterstitialTextEntityRefType url: string urlType: TweetInterstitialTextEntityRefUrlType } export interface TweetInterstitialTextEntity { fromIndex: number ref: TweetInterstitialTextEntityRef toIndex: number } export interface TweetInterstitialText { entities: TweetInterstitialTextEntity[] rtl: boolean text: string } export interface MediaVisibilityResultsBlurredImageInterstitial { opacity: number text: TweetInterstitialText title: TweetInterstitialText } export interface MediaVisibilityResults { blurred_image_interstitial: MediaVisibilityResultsBlurredImageInterstitial } export type TweetInterstitialDisplayType = (typeof TweetInterstitialDisplayType)[keyof typeof TweetInterstitialDisplayType] export const TweetInterstitialDisplayType = { NonCompliant: 'NonCompliant', EntireTweet: 'EntireTweet', } as const export interface TweetInterstitialRevealText { entities: TweetInterstitialTextEntity[] rtl: boolean text: string } export interface TweetInterstitial { __typename: TypeName displayType: TweetInterstitialDisplayType revealText: TweetInterstitialRevealText text: TweetInterstitialText } export type TweetWithVisibilityResultsLimitedActionResults = { [key: string]: unknown } export interface TweetWithVisibilityResults { __typename: TypeName limitedActionResults?: TweetWithVisibilityResultsLimitedActionResults mediaVisibilityResults?: MediaVisibilityResults tweet: Tweet tweetInterstitial?: TweetInterstitial } export interface TweetTombstone { __typename?: TypeName [key: string]: unknown } export interface TweetUnavailable { __typename?: TypeName reason?: string } export type TweetPreviewDisplayCtaUrlUrlType = (typeof TweetPreviewDisplayCtaUrlUrlType)[keyof typeof TweetPreviewDisplayCtaUrlUrlType] export const TweetPreviewDisplayCtaUrlUrlType = { DeepLink: 'DeepLink', UrtEndpoint: 'UrtEndpoint', ExternalUrl: 'ExternalUrl', } as const export interface TweetPreviewDisplayCtaUrl { url: string urlType: TweetPreviewDisplayCtaUrlUrlType } export interface TweetPreviewDisplayCta { title: string url: TweetPreviewDisplayCtaUrl } export type LimitedActionResultsDataAction = (typeof LimitedActionResultsDataAction)[keyof typeof LimitedActionResultsDataAction] export const LimitedActionResultsDataAction = { Reply: 'Reply', Retweet: 'Retweet', QuoteTweet: 'QuoteTweet', Like: 'Like', React: 'React', AddToBookmarks: 'AddToBookmarks', AddToMoment: 'AddToMoment', PinToProfile: 'PinToProfile', ViewHiddenReplies: 'ViewHiddenReplies', VoteOnPoll: 'VoteOnPoll', ShowRetweetActionMenu: 'ShowRetweetActionMenu', ReplyDownVote: 'ReplyDownVote', SendViaDm: 'SendViaDm', ViewPostEngagements: 'ViewPostEngagements', } as const export interface LimitedActionResultsData { action: LimitedActionResultsDataAction } export interface TweetLimitedActionResults { limited_actions: LimitedActionResultsData[] } export interface ArticlePreview { article_id: number cover_media?: ArticleCoverMedia preview_text: string title: string } export interface TweetPreviewDisplayTweetViewCount { /** @pattern ^[0-9]+$ */ count: string } export type TweetPreviewDisplayTweetEntities = { [key: string]: unknown } export interface TweetPreviewDisplayTweet { article_preview?: ArticlePreview bookmark_count: number core: UserResultCore created_at: TwitterTimeFormat entities: TweetPreviewDisplayTweetEntities favorite_count: number quote_count: number reply_count: number /** @pattern ^[0-9]+$ */ rest_id: string retweet_count: number text: string view_count: TweetPreviewDisplayTweetViewCount } export interface TweetPreviewDisplay { __typename: TypeName cta: TweetPreviewDisplayCta limited_action_results: TweetLimitedActionResults tweet: TweetPreviewDisplayTweet } export type TweetUnion = | Tweet | TweetWithVisibilityResults | TweetTombstone | TweetUnavailable | TweetPreviewDisplay export interface ItemResult { __typename?: TypeName result?: TweetUnion } export type TimelineTweetPromotedMetadata = { [key: string]: unknown } export interface TimelineTweet { __typename: TypeName hasModeratedReplies?: boolean highlights?: Highlight itemType: ContentItemType promotedMetadata?: TimelineTweetPromotedMetadata socialContext?: SocialContextUnion tweetDisplayType: TimelineTweetTweetDisplayType tweet_results: ItemResult } export type CursorType = (typeof CursorType)[keyof typeof CursorType] export const CursorType = { Top: 'Top', Bottom: 'Bottom', ShowMore: 'ShowMore', ShowMoreThreads: 'ShowMoreThreads', Gap: 'Gap', ShowMoreThreadsPrompt: 'ShowMoreThreadsPrompt', } as const export interface DisplayTreatment { actionText: string labelText?: string } export interface TimelineTimelineCursor { __typename: TypeName cursorType: CursorType displayTreatment?: DisplayTreatment entryType?: ContentEntryType itemType?: ContentEntryType stopOnEmptyResponse?: boolean value: string } export type TimelineUserUserDisplayType = (typeof TimelineUserUserDisplayType)[keyof typeof TimelineUserUserDisplayType] export const TimelineUserUserDisplayType = { User: 'User', UserDetailed: 'UserDetailed', SubscribableUser: 'SubscribableUser', UserConcise: 'UserConcise', } as const export interface TimelineUser { __typename: TypeName itemType: ContentItemType socialContext?: SocialContextUnion userDisplayType: TimelineUserUserDisplayType user_results: UserResults } export interface TimelinePrompt { __typename?: TypeName [key: string]: unknown } export interface TimelineMessagePrompt { __typename?: TypeName [key: string]: unknown } export interface TimelineCommunity { __typename?: TypeName [key: string]: unknown } export type TimelineTombstoneTombstoneDisplayType = (typeof TimelineTombstoneTombstoneDisplayType)[keyof typeof TimelineTombstoneTombstoneDisplayType] export const TimelineTombstoneTombstoneDisplayType = { Inline: 'Inline', } as const export type TombstoneRefType = (typeof TombstoneRefType)[keyof typeof TombstoneRefType] export const TombstoneRefType = { TimelineUrl: 'TimelineUrl', } as const export type TombstoneRefUrlType = (typeof TombstoneRefUrlType)[keyof typeof TombstoneRefUrlType] export const TombstoneRefUrlType = { ExternalUrl: 'ExternalUrl', } as const export interface TombstoneRef { type?: TombstoneRefType url?: string urlType?: TombstoneRefUrlType } export interface TombstoneEntity { fromIndex?: number ref?: TombstoneRef toIndex?: number } export interface TombstoneRichText { entities?: TombstoneEntity[] rtl?: boolean text?: string } export interface TombstoneInfo { richText?: TombstoneRichText text?: string } export interface TimelineTombstone { __typename?: TypeName itemType?: ContentItemType tombstoneDisplayType?: TimelineTombstoneTombstoneDisplayType tombstoneInfo?: TombstoneInfo } export interface TrendImage { url?: string } export interface ThumbnailImage { original_img_height?: number original_img_url?: string original_img_width?: number } export interface TrendMetadata { url?: SocialContextLandingUrl } export interface TimelineTrend { __typename: TypeName images?: TrendImage[] is_ai_trend?: boolean itemType?: ContentItemType name: string social_context?: SocialContextUnion thumbnail_image?: ThumbnailImage trend_metadata: TrendMetadata trend_url: SocialContextLandingUrl } export interface RichMessage { rtl?: boolean text?: string } export type NotificationTemplateFromUsersItem = { [key: string]: unknown } export type NotificationTemplateTargetObjectsItem = { [key: string]: unknown } export interface NotificationTemplate { __typename?: TypeName from_users?: NotificationTemplateFromUsersItem[] target_objects?: NotificationTemplateTargetObjectsItem[] } export interface TimelineNotification { __typename: TypeName id: string itemType: ContentItemType notification_icon: string notification_url: SocialContextLandingUrl rich_message: RichMessage template: NotificationTemplate timestamp_ms: string } export type ItemContentUnion = | TimelineTweet | TimelineTimelineCursor | TimelineUser | TimelinePrompt | TimelineMessagePrompt | TimelineCommunity | TimelineTombstone | TimelineTrend | TimelineNotification export type TimelineTimelineItemFeedbackInfo = { [key: string]: unknown } export interface TimelineTimelineItem { __typename: TypeName clientEventInfo?: ClientEventInfo entryType: ContentEntryType feedbackInfo?: TimelineTimelineItemFeedbackInfo itemContent: ItemContentUnion } export type DisplayType = (typeof DisplayType)[keyof typeof DisplayType] export const DisplayType = { Vertical: 'Vertical', VerticalConversation: 'VerticalConversation', VerticalGrid: 'VerticalGrid', Carousel: 'Carousel', } as const export interface FeedbackInfo { clientEventInfo?: ClientEventInfo feedbackKeys?: string[] } export interface ModuleEntry { clientEventInfo?: ClientEventInfo feedbackInfo?: FeedbackInfo itemContent: ItemContentUnion } export interface ModuleItem { dispensable?: boolean /** @pattern ^(([a-zA-Z]+|[0-9]+|[0-9a-f]+)(-|$))+ */ entryId: string item: ModuleEntry } export type TimelineTimelineModuleFooter = { [key: string]: unknown } export type TimelineTimelineModuleHeader = { [key: string]: unknown } export type TimelineTimelineModuleMetadata = { [key: string]: unknown } export interface TimelineTimelineModule { __typename: TypeName clientEventInfo?: ClientEventInfo displayType: DisplayType entryType: ContentEntryType feedbackInfo?: FeedbackInfo footer?: TimelineTimelineModuleFooter header?: TimelineTimelineModuleHeader items?: ModuleItem[] metadata?: TimelineTimelineModuleMetadata } export type ContentUnion = | TimelineTimelineItem | TimelineTimelineModule | TimelineTimelineCursor export interface TimelineAddEntry { content: ContentUnion /** @pattern ^(([a-zA-Z]+|[0-9]+|[0-9a-f]+)(-|$))+ */ entryId: string /** @pattern [0-9]+$ */ sortIndex: string } export type InstructionType = (typeof InstructionType)[keyof typeof InstructionType] export const InstructionType = { TimelineAddEntries: 'TimelineAddEntries', TimelineAddToModule: 'TimelineAddToModule', TimelineClearCache: 'TimelineClearCache', TimelinePinEntry: 'TimelinePinEntry', TimelineReplaceEntry: 'TimelineReplaceEntry', TimelineShowAlert: 'TimelineShowAlert', TimelineTerminateTimeline: 'TimelineTerminateTimeline', TimelineShowCover: 'TimelineShowCover', TimelineClearEntriesUnreadState: 'TimelineClearEntriesUnreadState', TimelineMarkEntriesUnreadGreaterThanSortIndex: 'TimelineMarkEntriesUnreadGreaterThanSortIndex', } as const export interface TimelineAddEntries { entries: TimelineAddEntry[] type: InstructionType } export interface TimelineAddToModule { moduleEntryId: string moduleItems: ModuleItem[] prepend?: boolean type: InstructionType } export interface TimelineClearCache { type: InstructionType } export interface TimelinePinEntry { entry: TimelineAddEntry type: InstructionType } export interface TimelineReplaceEntry { entry: TimelineAddEntry entry_id_to_replace: string type: InstructionType } export type TimelineShowAlertAlertType = (typeof TimelineShowAlertAlertType)[keyof typeof TimelineShowAlertAlertType] export const TimelineShowAlertAlertType = { NewTweets: 'NewTweets', } as const export type TimelineShowAlertDisplayLocation = (typeof TimelineShowAlertDisplayLocation)[keyof typeof TimelineShowAlertDisplayLocation] export const TimelineShowAlertDisplayLocation = { Top: 'Top', } as const export type TimelineShowAlertColorConfig = { [key: string]: unknown } export type TimelineShowAlertIconDisplayInfo = { [key: string]: unknown } export type TimelineShowAlertRichTextEntitiesItem = { [key: string]: unknown } export type TimelineShowAlertRichText = { entities?: TimelineShowAlertRichTextEntitiesItem[] text?: string } export interface TimelineShowAlert { alertType?: TimelineShowAlertAlertType clientEventInfo?: ClientEventInfo colorConfig?: TimelineShowAlertColorConfig displayDurationMs?: number displayLocation?: TimelineShowAlertDisplayLocation iconDisplayInfo?: TimelineShowAlertIconDisplayInfo richText: TimelineShowAlertRichText triggerDelayMs?: number type: InstructionType usersResults: UserResults[] } export type TimelineTerminateTimelineDirection = (typeof TimelineTerminateTimelineDirection)[keyof typeof TimelineTerminateTimelineDirection] export const TimelineTerminateTimelineDirection = { Top: 'Top', Bottom: 'Bottom', TopAndBottom: 'TopAndBottom', } as const export interface TimelineTerminateTimeline { direction: TimelineTerminateTimelineDirection type: InstructionType } export type TimelineHalfCoverHalfCoverDisplayType = (typeof TimelineHalfCoverHalfCoverDisplayType)[keyof typeof TimelineHalfCoverHalfCoverDisplayType] export const TimelineHalfCoverHalfCoverDisplayType = { Cover: 'Cover', } as const export interface Callback { endpoint: string } export type CoverCtaButtonStyle = (typeof CoverCtaButtonStyle)[keyof typeof CoverCtaButtonStyle] export const CoverCtaButtonStyle = { Primary: 'Primary', } as const export type CtaClientEventInfoAction = (typeof CtaClientEventInfoAction)[keyof typeof CtaClientEventInfoAction] export const CtaClientEventInfoAction = { primary_cta: 'primary_cta', } as const export interface CtaClientEventInfo { action: CtaClientEventInfoAction } export type TimelineCoverBehaviorType = (typeof TimelineCoverBehaviorType)[keyof typeof TimelineCoverBehaviorType] export const TimelineCoverBehaviorType = { TimelineCoverBehaviorDismiss: 'TimelineCoverBehaviorDismiss', TimelineCoverBehaviorNavigate: 'TimelineCoverBehaviorNavigate', } as const export type TimelineCoverBehaviorUrlUrlType = (typeof TimelineCoverBehaviorUrlUrlType)[keyof typeof TimelineCoverBehaviorUrlUrlType] export const TimelineCoverBehaviorUrlUrlType = { ExternalUrl: 'ExternalUrl', } as const export interface TimelineCoverBehaviorUrl { url: string url_type: TimelineCoverBehaviorUrlUrlType } export interface TimelineCoverBehavior { type: TimelineCoverBehaviorType url?: TimelineCoverBehaviorUrl } export interface CoverCta { Text?: string buttonStyle?: CoverCtaButtonStyle callbacks: Callback[] clientEventInfo: CtaClientEventInfo ctaBehavior: TimelineCoverBehavior } export type TextEntityRefType = (typeof TextEntityRefType)[keyof typeof TextEntityRefType] export const TextEntityRefType = { TimelineUrl: 'TimelineUrl', } as const export type TextEntityRefUrlType = (typeof TextEntityRefUrlType)[keyof typeof TextEntityRefUrlType] export const TextEntityRefUrlType = { ExternalUrl: 'ExternalUrl', } as const export interface TextEntityRef { type: TextEntityRefType url: string urlType: TextEntityRefUrlType } export interface TextEntity { fromIndex: number ref: TextEntityRef toIndex: number } export interface Text { entities: TextEntity[] text: string } export type TimelineHalfCoverType = (typeof TimelineHalfCoverType)[keyof typeof TimelineHalfCoverType] export const TimelineHalfCoverType = { TimelineHalfCover: 'TimelineHalfCover', } as const export interface TimelineHalfCover { dismissible: boolean halfCoverDisplayType: TimelineHalfCoverHalfCoverDisplayType impressionCallbacks: Callback[] primaryCoverCta: CoverCta primaryText: Text secondaryText: Text type: TimelineHalfCoverType } export interface TimelineShowCover { clientEventInfo: ClientEventInfo cover: TimelineHalfCover type: InstructionType } export interface TimelineClearEntriesUnreadState { type: InstructionType } export interface TimelineMarkEntriesUnreadGreaterThanSortIndex { /** @pattern [0-9]+$ */ sort_index?: string type: InstructionType } export type InstructionUnion = | TimelineAddEntries | TimelineAddToModule | TimelineClearCache | TimelinePinEntry | TimelineReplaceEntry | TimelineShowAlert | TimelineTerminateTimeline | TimelineShowCover | TimelineClearEntriesUnreadState | TimelineMarkEntriesUnreadGreaterThanSortIndex export type TimelineMetadata = { [key: string]: unknown } export type TimelineResponseObjects = { [key: string]: unknown } export interface Timeline { instructions: InstructionUnion[] metadata?: TimelineMetadata responseObjects?: TimelineResponseObjects } export interface TimelineResult { id?: string timeline?: Timeline } export interface ListTweetsTimelineList { tweets_timeline: TimelineResult } export interface ListTweetsTimelineData { list: ListTweetsTimelineList } export interface Tracing { /** @pattern ^[0-9a-f]{16}$ */ trace_id: string } export interface ErrorExtensions { code: number kind: string name: string retry_after?: number source: string tracing: Tracing } export interface Location { column: number line: number } export interface ErrorResponse { code: number extensions: ErrorExtensions kind: string locations: Location[] message: string name: string path: (string | number)[] retry_after?: number source: string tracing: Tracing } export interface ListLatestTweetsTimelineResponse { data: ListTweetsTimelineData errors?: ErrorResponse[] } export interface SearchTimeline { timeline: Timeline } export interface SearchByRawQuery { search_timeline: SearchTimeline } export interface SearchTimelineData { search_by_raw_query: SearchByRawQuery } export interface SearchTimelineResponse { data: SearchTimelineData errors?: ErrorResponse[] } export interface TweetDetailResponseData { threaded_conversation_with_injections_v2?: Timeline } export interface TweetDetailResponse { data: TweetDetailResponseData errors?: ErrorResponse[] } export interface UserResponseData { user?: UserResults } export interface UserResponse { data: UserResponseData errors?: ErrorResponse[] } export interface UserTweetsResultV1 { __typename: TypeName timeline: TimelineResult } export interface UserTweetsUser { result: UserTweetsResultV1 } export interface UserTweetsData { user?: UserTweetsUser } export interface UserTweetsResponse { data: UserTweetsData errors?: ErrorResponse[] } export type GetListLatestTweetsTimelineParams = { variables: { count: number listId: string } features: { articles_preview_enabled: boolean c9s_tweet_anatomy_moderator_badge_enabled: boolean communities_web_enable_tweet_community_results_fetch: boolean creator_subscriptions_quote_tweet_preview_enabled: boolean creator_subscriptions_tweet_preview_api_enabled: boolean freedom_of_speech_not_reach_fetch_enabled: boolean graphql_is_translatable_rweb_tweet_is_translatable_enabled: boolean longform_notetweets_consumption_enabled: boolean longform_notetweets_inline_media_enabled: boolean longform_notetweets_rich_text_read_enabled: boolean payments_enabled: boolean premium_content_api_read_enabled: boolean profile_label_improvements_pcf_label_in_post_enabled: boolean responsive_web_edit_tweet_api_enabled: boolean responsive_web_enhance_cards_enabled: boolean responsive_web_graphql_skip_user_profile_image_extensions_enabled: boolean responsive_web_graphql_timeline_navigation_enabled: boolean responsive_web_grok_analysis_button_from_backend: boolean responsive_web_grok_analyze_button_fetch_trends_enabled: boolean responsive_web_grok_analyze_post_followups_enabled: boolean responsive_web_grok_community_note_auto_translation_is_enabled: boolean responsive_web_grok_image_annotation_enabled: boolean responsive_web_grok_imagine_annotation_enabled: boolean responsive_web_grok_share_attachment_enabled: boolean responsive_web_grok_show_grok_translated_post: boolean responsive_web_jetfuel_frame: boolean responsive_web_profile_redirect_enabled: boolean responsive_web_twitter_article_tweet_consumption_enabled: boolean rweb_tipjar_consumption_enabled: boolean rweb_video_screen_enabled: boolean standardized_nudges_misinfo: boolean tweet_awards_web_tipping_enabled: boolean tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: boolean verified_phone_label_enabled: boolean view_counts_everywhere_api_enabled: boolean } } export type GetSearchTimelineParams = { variables: { count: number product: string querySource: string rawQuery: string } features: { articles_preview_enabled: boolean c9s_tweet_anatomy_moderator_badge_enabled: boolean communities_web_enable_tweet_community_results_fetch: boolean content_disclosure_ai_generated_indicator_enabled: boolean content_disclosure_indicator_enabled: boolean creator_subscriptions_tweet_preview_api_enabled: boolean freedom_of_speech_not_reach_fetch_enabled: boolean graphql_is_translatable_rweb_tweet_is_translatable_enabled: boolean longform_notetweets_consumption_enabled: boolean longform_notetweets_inline_media_enabled: boolean longform_notetweets_rich_text_read_enabled: boolean post_ctas_fetch_enabled: boolean premium_content_api_read_enabled: boolean profile_label_improvements_pcf_label_in_post_enabled: boolean responsive_web_edit_tweet_api_enabled: boolean responsive_web_enhance_cards_enabled: boolean responsive_web_graphql_skip_user_profile_image_extensions_enabled: boolean responsive_web_graphql_timeline_navigation_enabled: boolean responsive_web_grok_analysis_button_from_backend: boolean responsive_web_grok_analyze_button_fetch_trends_enabled: boolean responsive_web_grok_analyze_post_followups_enabled: boolean responsive_web_grok_annotations_enabled: boolean responsive_web_grok_community_note_auto_translation_is_enabled: boolean responsive_web_grok_image_annotation_enabled: boolean responsive_web_grok_imagine_annotation_enabled: boolean responsive_web_grok_share_attachment_enabled: boolean responsive_web_grok_show_grok_translated_post: boolean responsive_web_jetfuel_frame: boolean responsive_web_profile_redirect_enabled: boolean responsive_web_twitter_article_tweet_consumption_enabled: boolean rweb_cashtags_composer_attachment_enabled: boolean rweb_cashtags_enabled: boolean rweb_conversational_replies_downvote_enabled: boolean rweb_tipjar_consumption_enabled: boolean rweb_video_screen_enabled: boolean standardized_nudges_misinfo: boolean tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: boolean verified_phone_label_enabled: boolean view_counts_everywhere_api_enabled: boolean } } export type GetTweetDetailParams = { variables: { focalTweetId: string includePromotedContent: boolean rankingMode: string referrer: string withBirdwatchNotes: boolean withCommunity: boolean withQuickPromoteEligibilityTweetFields: boolean withVoice: boolean with_rux_injections: boolean } features: { articles_preview_enabled: boolean c9s_tweet_anatomy_moderator_badge_enabled: boolean communities_web_enable_tweet_community_results_fetch: boolean content_disclosure_ai_generated_indicator_enabled: boolean content_disclosure_indicator_enabled: boolean creator_subscriptions_tweet_preview_api_enabled: boolean freedom_of_speech_not_reach_fetch_enabled: boolean graphql_is_translatable_rweb_tweet_is_translatable_enabled: boolean longform_notetweets_consumption_enabled: boolean longform_notetweets_inline_media_enabled: boolean longform_notetweets_rich_text_read_enabled: boolean post_ctas_fetch_enabled: boolean premium_content_api_read_enabled: boolean profile_label_improvements_pcf_label_in_post_enabled: boolean responsive_web_edit_tweet_api_enabled: boolean responsive_web_enhance_cards_enabled: boolean responsive_web_graphql_skip_user_profile_image_extensions_enabled: boolean responsive_web_graphql_timeline_navigation_enabled: boolean responsive_web_grok_analysis_button_from_backend: boolean responsive_web_grok_analyze_button_fetch_trends_enabled: boolean responsive_web_grok_analyze_post_followups_enabled: boolean responsive_web_grok_annotations_enabled: boolean responsive_web_grok_community_note_auto_translation_is_enabled: boolean responsive_web_grok_image_annotation_enabled: boolean responsive_web_grok_imagine_annotation_enabled: boolean responsive_web_grok_share_attachment_enabled: boolean responsive_web_grok_show_grok_translated_post: boolean responsive_web_jetfuel_frame: boolean responsive_web_profile_redirect_enabled: boolean responsive_web_twitter_article_tweet_consumption_enabled: boolean rweb_cashtags_composer_attachment_enabled: boolean rweb_cashtags_enabled: boolean rweb_conversational_replies_downvote_enabled: boolean rweb_tipjar_consumption_enabled: boolean rweb_video_screen_enabled: boolean standardized_nudges_misinfo: boolean tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: boolean verified_phone_label_enabled: boolean view_counts_everywhere_api_enabled: boolean } fieldToggles: { withArticlePlainText: boolean withArticleRichContentState: boolean withArticleSummaryText: boolean withArticleVoiceOver: boolean withDisallowedReplyControls: boolean withGrokAnalyze: boolean } } export type GetUserByScreenNameParams = { variables: { screen_name: string } features: { creator_subscriptions_tweet_preview_api_enabled: boolean hidden_profile_subscriptions_enabled: boolean highlights_tweets_tab_ui_enabled: boolean profile_label_improvements_pcf_label_in_post_enabled: boolean responsive_web_graphql_skip_user_profile_image_extensions_enabled: boolean responsive_web_graphql_timeline_navigation_enabled: boolean responsive_web_profile_redirect_enabled: boolean responsive_web_twitter_article_notes_tab_enabled: boolean rweb_tipjar_consumption_enabled: boolean subscriptions_feature_can_gift_premium: boolean subscriptions_verification_info_is_identity_verified_enabled: boolean subscriptions_verification_info_verified_since_enabled: boolean verified_phone_label_enabled: boolean } fieldToggles: { withAuxiliaryUserLabels: boolean withPayments: boolean } } export type GetUserTweetsParams = { variables: { count: number includePromotedContent: boolean userId: string withQuickPromoteEligibilityTweetFields: boolean withVoice: boolean } features: { articles_preview_enabled: boolean c9s_tweet_anatomy_moderator_badge_enabled: boolean communities_web_enable_tweet_community_results_fetch: boolean content_disclosure_ai_generated_indicator_enabled: boolean content_disclosure_indicator_enabled: boolean creator_subscriptions_tweet_preview_api_enabled: boolean freedom_of_speech_not_reach_fetch_enabled: boolean graphql_is_translatable_rweb_tweet_is_translatable_enabled: boolean longform_notetweets_consumption_enabled: boolean longform_notetweets_inline_media_enabled: boolean longform_notetweets_rich_text_read_enabled: boolean post_ctas_fetch_enabled: boolean premium_content_api_read_enabled: boolean profile_label_improvements_pcf_label_in_post_enabled: boolean responsive_web_edit_tweet_api_enabled: boolean responsive_web_enhance_cards_enabled: boolean responsive_web_graphql_skip_user_profile_image_extensions_enabled: boolean responsive_web_graphql_timeline_navigation_enabled: boolean responsive_web_grok_analysis_button_from_backend: boolean responsive_web_grok_analyze_button_fetch_trends_enabled: boolean responsive_web_grok_analyze_post_followups_enabled: boolean responsive_web_grok_annotations_enabled: boolean responsive_web_grok_community_note_auto_translation_is_enabled: boolean responsive_web_grok_image_annotation_enabled: boolean responsive_web_grok_imagine_annotation_enabled: boolean responsive_web_grok_share_attachment_enabled: boolean responsive_web_grok_show_grok_translated_post: boolean responsive_web_jetfuel_frame: boolean responsive_web_profile_redirect_enabled: boolean responsive_web_twitter_article_tweet_consumption_enabled: boolean rweb_cashtags_composer_attachment_enabled: boolean rweb_cashtags_enabled: boolean rweb_conversational_replies_downvote_enabled: boolean rweb_tipjar_consumption_enabled: boolean rweb_video_screen_enabled: boolean standardized_nudges_misinfo: boolean tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: boolean verified_phone_label_enabled: boolean view_counts_everywhere_api_enabled: boolean } fieldToggles: { withArticlePlainText: boolean } } export type getListLatestTweetsTimelineResponse200 = { data: ListLatestTweetsTimelineResponse status: 200 } export type getListLatestTweetsTimelineResponseSuccess = getListLatestTweetsTimelineResponse200 & { headers: Headers } export type getListLatestTweetsTimelineResponse = getListLatestTweetsTimelineResponseSuccess export const getGetListLatestTweetsTimelineUrl = ( params: GetListLatestTweetsTimelineParams, pathQueryId: string = 'FVWmROVvhgjRPC-4jAUh8A', ) => { const normalizedParams = new URLSearchParams() Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? 'null' : String(value)) } }) const stringifiedParams = normalizedParams.toString() return stringifiedParams.length > 0 ? `/graphql/${pathQueryId}/ListLatestTweetsTimeline?${stringifiedParams}` : `/graphql/${pathQueryId}/ListLatestTweetsTimeline` } /** * get tweet list of timeline */ export const getListLatestTweetsTimeline = async ( params: GetListLatestTweetsTimelineParams, pathQueryId: string = 'FVWmROVvhgjRPC-4jAUh8A', options?: RequestInit, ): Promise => { const res = await fetch( getGetListLatestTweetsTimelineUrl(params, pathQueryId), { ...options, method: 'GET', }, ) const body = [204, 205, 304].includes(res.status) ? null : await res.text() const data: getListLatestTweetsTimelineResponse['data'] = body ? JSON.parse(body) : {} return { data, status: res.status, headers: res.headers, } as getListLatestTweetsTimelineResponse } export type getSearchTimelineResponse200 = { data: SearchTimelineResponse status: 200 } export type getSearchTimelineResponseSuccess = getSearchTimelineResponse200 & { headers: Headers } export type getSearchTimelineResponse = getSearchTimelineResponseSuccess export const getGetSearchTimelineUrl = ( params: GetSearchTimelineParams, pathQueryId: string = 'Yw6L66Pw54NHKuq4Dp7b4Q', ) => { const normalizedParams = new URLSearchParams() Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? 'null' : String(value)) } }) const stringifiedParams = normalizedParams.toString() return stringifiedParams.length > 0 ? `/graphql/${pathQueryId}/SearchTimeline?${stringifiedParams}` : `/graphql/${pathQueryId}/SearchTimeline` } /** * search tweet list. product:[Top, Latest, People, Photos, Videos] */ export const getSearchTimeline = async ( params: GetSearchTimelineParams, pathQueryId: string = 'Yw6L66Pw54NHKuq4Dp7b4Q', options?: RequestInit, ): Promise => { const res = await fetch(getGetSearchTimelineUrl(params, pathQueryId), { ...options, method: 'GET', }) const body = [204, 205, 304].includes(res.status) ? null : await res.text() const data: getSearchTimelineResponse['data'] = body ? JSON.parse(body) : {} return { data, status: res.status, headers: res.headers, } as getSearchTimelineResponse } export type getTweetDetailResponse200 = { data: TweetDetailResponse status: 200 } export type getTweetDetailResponseSuccess = getTweetDetailResponse200 & { headers: Headers } export type getTweetDetailResponse = getTweetDetailResponseSuccess export const getGetTweetDetailUrl = ( params: GetTweetDetailParams, pathQueryId: string = 'oCon7R-cgWRFy6EfZjaKfg', ) => { const normalizedParams = new URLSearchParams() Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? 'null' : String(value)) } }) const stringifiedParams = normalizedParams.toString() return stringifiedParams.length > 0 ? `/graphql/${pathQueryId}/TweetDetail?${stringifiedParams}` : `/graphql/${pathQueryId}/TweetDetail` } /** * get TweetDetail */ export const getTweetDetail = async ( params: GetTweetDetailParams, pathQueryId: string = 'oCon7R-cgWRFy6EfZjaKfg', options?: RequestInit, ): Promise => { const res = await fetch(getGetTweetDetailUrl(params, pathQueryId), { ...options, method: 'GET', }) const body = [204, 205, 304].includes(res.status) ? null : await res.text() const data: getTweetDetailResponse['data'] = body ? JSON.parse(body) : {} return { data, status: res.status, headers: res.headers, } as getTweetDetailResponse } export type getUserByScreenNameResponse200 = { data: UserResponse status: 200 } export type getUserByScreenNameResponseSuccess = getUserByScreenNameResponse200 & { headers: Headers } export type getUserByScreenNameResponse = getUserByScreenNameResponseSuccess export const getGetUserByScreenNameUrl = ( params: GetUserByScreenNameParams, pathQueryId: string = 'IGgvgiOx4QZndDHuD3x9TQ', ) => { const normalizedParams = new URLSearchParams() Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? 'null' : String(value)) } }) const stringifiedParams = normalizedParams.toString() return stringifiedParams.length > 0 ? `/graphql/${pathQueryId}/UserByScreenName?${stringifiedParams}` : `/graphql/${pathQueryId}/UserByScreenName` } /** * get user by screen name */ export const getUserByScreenName = async ( params: GetUserByScreenNameParams, pathQueryId: string = 'IGgvgiOx4QZndDHuD3x9TQ', options?: RequestInit, ): Promise => { const res = await fetch(getGetUserByScreenNameUrl(params, pathQueryId), { ...options, method: 'GET', }) const body = [204, 205, 304].includes(res.status) ? null : await res.text() const data: getUserByScreenNameResponse['data'] = body ? JSON.parse(body) : {} return { data, status: res.status, headers: res.headers, } as getUserByScreenNameResponse } export type getUserTweetsResponse200 = { data: UserTweetsResponse status: 200 } export type getUserTweetsResponseSuccess = getUserTweetsResponse200 & { headers: Headers } export type getUserTweetsResponse = getUserTweetsResponseSuccess export const getGetUserTweetsUrl = ( params: GetUserTweetsParams, pathQueryId: string = '36rb3Xj3iJ64Q-9wKDjCcQ', ) => { const normalizedParams = new URLSearchParams() Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? 'null' : String(value)) } }) const stringifiedParams = normalizedParams.toString() return stringifiedParams.length > 0 ? `/graphql/${pathQueryId}/UserTweets?${stringifiedParams}` : `/graphql/${pathQueryId}/UserTweets` } /** * get user tweets */ export const getUserTweets = async ( params: GetUserTweetsParams, pathQueryId: string = '36rb3Xj3iJ64Q-9wKDjCcQ', options?: RequestInit, ): Promise => { const res = await fetch(getGetUserTweetsUrl(params, pathQueryId), { ...options, method: 'GET', }) const body = [204, 205, 304].includes(res.status) ? null : await res.text() const data: getUserTweetsResponse['data'] = body ? JSON.parse(body) : {} return { data, status: res.status, headers: res.headers, } as getUserTweetsResponse }