Skip to content

Commit 7b41dfe

Browse files
committed
twitter: cache token, get new one & retry on error
1 parent 02b67a3 commit 7b41dfe

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

src/modules/processing/services/twitter.js

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,20 @@ const commonHeaders = {
3131
"accept-language": "en"
3232
}
3333

34-
const getGuestToken = async () => {
34+
let _cachedToken
35+
const getGuestToken = async (forceReload = false) => {
36+
if (_cachedToken && !forceReload) {
37+
return _cachedToken;
38+
}
39+
3540
const tokenResponse = await fetch(
3641
'https://api.twitter.com/1.1/guest/activate.json',
3742
{ method: 'POST', headers: commonHeaders }
3843
).then(r => r.status === 200 && r.json()).catch(() => {})
3944

40-
if (tokenResponse?.guest_token)
41-
return tokenResponse.guest_token
45+
if (tokenResponse?.guest_token) {
46+
return _cachedToken = tokenResponse.guest_token
47+
}
4248
}
4349

4450
const requestTweet = (tweetId, token) => {
@@ -69,8 +75,15 @@ export default async function({ id }) {
6975
let guestToken = await getGuestToken();
7076
if (!guestToken) return { error: 'ErrorCouldntFetch' };
7177

72-
const tweet = await requestTweet(id, guestToken).then(t => t.json());
73-
78+
let tweet = await requestTweet(id, guestToken);
79+
80+
if ([403, 429].includes(tweet.status)) { // get new token & retry
81+
guestToken = await getGuestToken(true);
82+
tweet = await requestTweet(id, guestToken);
83+
}
84+
85+
tweet = await tweet.json();
86+
7487
// {"data":{"tweetResult":{"result":{"__typename":"TweetUnavailable","reason":"Protected"}}}}
7588
if (tweet?.data?.tweetResult?.result?.__typename !== "Tweet") {
7689
return { error: 'ErrorTweetUnavailable' }

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy