diff --git a/lib/routes/twitter/api/mobile-api/api.ts b/lib/routes/twitter/api/mobile-api/api.ts index 4f3e12ce554a..6e513c1e6e40 100644 --- a/lib/routes/twitter/api/mobile-api/api.ts +++ b/lib/routes/twitter/api/mobile-api/api.ts @@ -146,6 +146,32 @@ function gatherLegacyFromData(entries, filterNested, userId) { if (entry.entryId) { const content = entry.content || entry.item; let tweet = content?.content?.tweetResult?.result || content?.itemContent?.tweet_results?.result; + // Handle subscriber-only preview posts (must check before tweet.tweet reassignment) + if (tweet?.__typename === 'TweetPreviewDisplay') { + const preview = tweet.tweet; + if (preview?.rest_id) { + const userResult = preview.core?.user_results?.result; + const fakeLegacy = { + id_str: preview.rest_id, + full_text: `🔒 [Subscribers Only] ${preview.text ?? ''}`, + created_at: preview.created_at ?? '', + entities: { urls: [], hashtags: [], symbols: [], user_mentions: [] }, + user_id_str: userResult?.rest_id ?? '', + user: { + name: userResult?.core?.name ?? userResult?.core?.screen_name ?? '', + screen_name: userResult?.core?.screen_name ?? '', + profile_image_url_https: userResult?.avatar?.image_url ?? '', + }, + favorite_count: preview.favorite_count ?? 0, + reply_count: preview.reply_count ?? 0, + retweet_count: preview.retweet_count ?? 0, + }; + if (userId === undefined || fakeLegacy.user_id_str === userId + '') { + tweets.push(fakeLegacy); + } + } + continue; + } if (tweet && tweet.tweet) { tweet = tweet.tweet; } diff --git a/lib/routes/twitter/api/web-api/utils.ts b/lib/routes/twitter/api/web-api/utils.ts index 522cdb147d13..6b361e4de058 100644 --- a/lib/routes/twitter/api/web-api/utils.ts +++ b/lib/routes/twitter/api/web-api/utils.ts @@ -338,6 +338,28 @@ export function gatherLegacyFromData(entries: any[], filterNested?: string[], us if (entry.entryId) { const content = entry.content || entry.item; let tweet = content?.content?.tweetResult?.result || content?.itemContent?.tweet_results?.result; + // Handle subscriber-only preview posts (must check before tweet.tweet reassignment) + if (tweet?.__typename === 'TweetPreviewDisplay') { + const preview = tweet.tweet; + if (preview?.rest_id) { + const userResult = preview.core?.user_results?.result; + const fakeLegacy: any = { + id_str: preview.rest_id, + full_text: `🔒 [Subscribers Only] ${preview.text ?? ''}`, + created_at: preview.created_at ?? '', + entities: { urls: [], hashtags: [], symbols: [], user_mentions: [] }, + user_id_str: userResult?.rest_id ?? '', + favorite_count: preview.favorite_count ?? 0, + reply_count: preview.reply_count ?? 0, + retweet_count: preview.retweet_count ?? 0, + }; + hydrateLegacyUser(fakeLegacy, { core: preview.core, rest_id: preview.rest_id }); + if (userId === undefined || fakeLegacy.user_id_str === userId + '') { + tweets.push(fakeLegacy); + } + } + continue; + } if (tweet && tweet.tweet) { tweet = tweet.tweet; }