@@ -60,26 +60,26 @@ export class TwitterOpenApi {
6060 const response = await this . fetchApi ( TwitterOpenApi . twitter , { method : 'GET' , redirect : 'manual' } ) ;
6161 const chars = [ '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' ] ;
6262 const csrfToken = [ ...Array ( 32 ) ] . reduce ( ( a ) => a + chars [ Math . floor ( Math . random ( ) * chars . length ) ] , '' ) ;
63- const cookie = this . cookieDecode ( response . headers . get ( 'set-cookie' ) ! ) ;
64- cookie . push ( { name : 'ct0' , value : csrfToken } ) ;
63+ const cookies = this . cookieDecode ( response . headers . get ( 'set-cookie' ) ! ) ;
64+ cookies . push ( { name : 'ct0' , value : csrfToken } ) ;
6565
6666 const html = await this . fetchApi ( TwitterOpenApi . twitter , {
6767 method : 'GET' ,
68- headers : { Cookie : this . cookieEncode ( cookie ) } ,
68+ headers : { Cookie : this . cookieEncode ( cookies ) } ,
6969 } ) . then ( ( response ) => response . text ( ) ) ;
7070
7171 const re = new RegExp ( '<script nonce="([a-zA-Z0-9]{48})">(document.cookie="(.*?)";)+<\\/script>' ) ;
7272
7373 const script = html . match ( re ) [ 0 ] ;
74- const document = script
74+ script
7575 . split ( 'document.cookie="' )
7676 . slice ( 1 )
7777 . map ( ( e ) => e . replace ( '</script>' , '' ) . replace ( '";' , '' ) )
7878 . map ( ( e ) => this . cookieDecode ( e ) [ 0 ] )
79- . filter ( ( e ) => cookie . findIndex ( ( c ) => c . name == e . name ) == - 1 )
80- . forEach ( ( e ) => cookie . push ( e ) ) ;
79+ . filter ( ( e ) => cookies . findIndex ( ( c ) => c . name == e . name ) == - 1 )
80+ . forEach ( ( e ) => cookies . push ( e ) ) ;
8181
82- return cookie ;
82+ return cookies ;
8383 }
8484
8585 setCookies ( context : i . RequestContext , cookies : TwitterOpenApiCookie [ ] ) : i . RequestContext {
@@ -101,6 +101,7 @@ export class TwitterOpenApi {
101101 'x-twitter-client-language' : this . param . lang ?? 'en' ,
102102 'x-twitter-active-user' : 'yes' ,
103103 'x-csrf-token' : cookies . find ( ( cookie ) => cookie . name === 'ct0' ) ?. value ,
104+ 'x-guest-token' : cookies . find ( ( cookie ) => cookie . name === 'gt' ) ?. value ,
104105 } [ key ] ! ;
105106 } ,
106107 accessToken : TwitterOpenApi . bearer ,
@@ -110,11 +111,14 @@ export class TwitterOpenApi {
110111 }
111112
112113 async getClientFromCookies ( ct0 : string , authToken : string ) : Promise < TwitterOpenApiClient > {
113- const cookies : TwitterOpenApiCookie [ ] = [
114- ... ( await this . getGuestSession ( ) ) ,
114+ const cookies : TwitterOpenApiCookie [ ] = await this . getGuestSession ( ) ;
115+ [
115116 { name : 'auth_token' , value : authToken } ,
116117 { name : 'ct0' , value : ct0 } ,
117- ] ;
118+ ]
119+ . filter ( ( e ) => cookies . findIndex ( ( c ) => c . name == e . name ) == - 1 )
120+ . forEach ( ( e ) => cookies . push ( e ) ) ;
121+
118122 const config : i . ConfigurationParameters = {
119123 fetchApi : this . param . fetchApi || fetch ,
120124 middleware : [ { pre : async ( context ) => this . setCookies ( context , cookies ) } ] ,
@@ -124,7 +128,7 @@ export class TwitterOpenApi {
124128 'x-twitter-client-language' : this . param . lang ?? 'en' ,
125129 'x-twitter-active-user' : 'yes' ,
126130 'x-twitter-auth-type' : 'OAuth2Session' ,
127- 'x-csrf-token' : ct0 ,
131+ 'x-csrf-token' : cookies . find ( ( cookie ) => cookie . name === ' ct0' ) ?. value ,
128132 } [ key ] ! ;
129133 } ,
130134 accessToken : TwitterOpenApi . bearer ,
0 commit comments