5
5
// Utils
6
6
import { getMessage } from '../background/api/locale_api'
7
7
8
+ interface TweetResonse {
9
+ text : string ,
10
+ user : {
11
+ name : string ,
12
+ screen_name : string ,
13
+ id_str : string
14
+ } ,
15
+ created_at : string
16
+ }
17
+
18
+ interface UserResonse {
19
+ id_str : string
20
+ }
21
+
8
22
let timeout : any = null
9
23
let newTwitter = true
10
24
@@ -13,37 +27,32 @@ const getTwitterAPICredentials = () => {
13
27
return new Promise ( resolve => chrome . runtime . sendMessage ( msg , resolve ) )
14
28
}
15
29
16
- const makeTwitterRequest = async ( url : string ) => {
30
+ const getTweetDetails = async ( tweetId : string ) => {
17
31
const credentialHeaders = await getTwitterAPICredentials ( )
18
32
if ( Object . keys ( credentialHeaders ) . length === 0 ) {
19
33
throw new Error ( `Unable to make Twitter API request: no credential headers` )
20
34
}
21
- const response = await fetch ( url , {
22
- credentials : 'include' ,
23
- headers : {
24
- ...credentialHeaders
25
- } ,
26
- referrerPolicy : 'no-referrer-when-downgrade' ,
27
- method : 'GET' ,
28
- mode : 'cors' ,
29
- redirect : 'follow'
30
- } )
31
- if ( ! response . ok ) {
32
- throw new Error ( `Twitter API request failed: ${ response . statusText } (${ response . status } )` )
33
- }
34
- return response . json ( )
35
- }
36
35
37
- const getTweetDetails = async ( tweetId : string ) => {
38
- const url = new URL ( 'https://api.twitter.com/1.1/statuses/show.json' )
39
- url . searchParams . append ( 'id' , tweetId )
40
- return makeTwitterRequest ( url . toString ( ) )
36
+ const msg = {
37
+ type : 'twitterGetTweetDetails' ,
38
+ tweetId,
39
+ credentialHeaders
40
+ }
41
+ return new Promise ( resolve => chrome . runtime . sendMessage ( msg , resolve ) )
41
42
}
42
43
43
44
const getUserDetails = async ( screenName : string ) => {
44
- const url = new URL ( 'https://api.twitter.com/1.1/users/show.json' )
45
- url . searchParams . append ( 'screen_name' , screenName )
46
- return makeTwitterRequest ( url . toString ( ) )
45
+ const credentialHeaders = await getTwitterAPICredentials ( )
46
+ if ( Object . keys ( credentialHeaders ) . length === 0 ) {
47
+ throw new Error ( `Unable to make Twitter API request: no credential headers` )
48
+ }
49
+
50
+ const msg = {
51
+ type : 'twitterGetUserDetails' ,
52
+ screenName,
53
+ credentialHeaders
54
+ }
55
+ return new Promise ( resolve => chrome . runtime . sendMessage ( msg , resolve ) )
47
56
}
48
57
49
58
function getTweetId ( tweet : Element ) {
@@ -67,7 +76,7 @@ const getTweetMetaData = (tweet: Element, tweetId: string): Promise<RewardsTip.M
67
76
}
68
77
69
78
return getTweetDetails ( tweetId )
70
- . then ( tweetDetails => {
79
+ . then ( ( tweetDetails : TweetResonse ) => {
71
80
const mediaMetadata : RewardsTip . MediaMetaData = {
72
81
mediaType : 'twitter' ,
73
82
twitterName : tweetDetails . user . name ,
@@ -317,7 +326,7 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
317
326
const screenName = msg . screenName
318
327
if ( newTwitter ) {
319
328
getUserDetails ( screenName )
320
- . then ( userDetails => {
329
+ . then ( ( userDetails : UserResonse ) => {
321
330
const userId = userDetails . id_str
322
331
const profileUrl = `https://twitter.com/intent/user?user_id=${ userId } &screen_name=${ screenName } `
323
332
sendResponse ( { profileUrl } )
0 commit comments