twitter-openapi-typescript 0.0.32 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/api.d.ts +7 -31
- package/dist/src/api.d.ts.map +1 -1
- package/dist/src/api.js +63 -38
- package/dist/src/api.js.map +1 -1
- package/package.json +2 -3
- package/src/api.ts +29 -27
- package/test/init.ts +12 -8
- package/dist/a.d.ts +0 -2
- package/dist/a.d.ts.map +0 -1
- package/dist/a.js +0 -57
- package/dist/a.js.map +0 -1
package/dist/src/api.d.ts
CHANGED
|
@@ -5,39 +5,15 @@ import { UsersApiUtils } from './apis/usersApi';
|
|
|
5
5
|
export declare class TwitterOpenApi {
|
|
6
6
|
static hash: string;
|
|
7
7
|
static url: string;
|
|
8
|
+
static header: string;
|
|
8
9
|
static twitter: string;
|
|
9
|
-
static userAgent: string;
|
|
10
10
|
static bearer: string;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
'sec-ch-ua': string;
|
|
18
|
-
'sec-ch-ua-mobile': string;
|
|
19
|
-
'sec-ch-ua-platform': string;
|
|
20
|
-
'sec-fetch-dest': string;
|
|
21
|
-
'sec-fetch-mode': string;
|
|
22
|
-
'sec-fetch-site': string;
|
|
23
|
-
'user-agent': string;
|
|
24
|
-
};
|
|
25
|
-
static api_key: {
|
|
26
|
-
accept: string;
|
|
27
|
-
'accept-encoding': string;
|
|
28
|
-
'accept-language': string;
|
|
29
|
-
'cache-control': string;
|
|
30
|
-
pragma: string;
|
|
31
|
-
'sec-ch-ua': string;
|
|
32
|
-
'sec-ch-ua-mobile': string;
|
|
33
|
-
'sec-ch-ua-platform': string;
|
|
34
|
-
'sec-fetch-dest': string;
|
|
35
|
-
'sec-fetch-mode': string;
|
|
36
|
-
'sec-fetch-site': string;
|
|
37
|
-
'user-agent': string;
|
|
38
|
-
'x-twitter-client-language': string;
|
|
39
|
-
'x-twitter-active-user': string;
|
|
40
|
-
};
|
|
11
|
+
get_browser_headers(): Promise<{
|
|
12
|
+
[key: string]: string;
|
|
13
|
+
}>;
|
|
14
|
+
get_api_key(): Promise<{
|
|
15
|
+
[key: string]: string;
|
|
16
|
+
}>;
|
|
41
17
|
static fetchApi: i.FetchAPI;
|
|
42
18
|
initOverrides: initOverrides;
|
|
43
19
|
setInitOverrides(initOverrides: initOverrides): void;
|
package/dist/src/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,cAAc,EACf,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,CAAC,MAAM,sCAAsC,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,cAAc;IACzB,MAAM,CAAC,IAAI,SAA8C;IACzD,MAAM,CAAC,GAAG,SAAuG;IACjH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,cAAc,EACf,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,CAAC,MAAM,sCAAsC,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,cAAc;IACzB,MAAM,CAAC,IAAI,SAA8C;IACzD,MAAM,CAAC,GAAG,SAAuG;IACjH,MAAM,CAAC,MAAM,SAAgF;IAC7F,MAAM,CAAC,OAAO,SAA8B;IAC5C,MAAM,CAAC,MAAM,SACgG;IAGvG,mBAAmB,IAAI,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAiBzD,WAAW,IAAI,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAUvD,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAA0B;IAErD,aAAa,EAAE,aAAa,CAAM;IAElC,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAIpD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAO7D,YAAY,CAAC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,MAAM;IAMvD,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,CAAC,CAAC,cAAc;IAQrF,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAiD/C,oBAAoB,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmBvF,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAOrE;AAED,qBAAa,oBAAoB;IAC/B,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;gBAEjB,MAAM,EAAE,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa;IAMpF,aAAa,IAAI,eAAe;IAIhC,WAAW,IAAI,aAAa;IAI5B,UAAU,IAAI,YAAY;IAI1B,WAAW,IAAI,aAAa;IAI5B,cAAc,IAAI,gBAAgB;IAIlC,UAAU,IAAI,YAAY;IAI1B,YAAY,IAAI,cAAc;IAI9B,aAAa,IAAI,eAAe;IAIhC,YAAY,IAAI,cAAc;IAI9B,kBAAkB,IAAI,oBAAoB;CAG3C"}
|
package/dist/src/api.js
CHANGED
|
@@ -80,6 +80,40 @@ var TwitterOpenApi = /** @class */ (function () {
|
|
|
80
80
|
function TwitterOpenApi() {
|
|
81
81
|
this.initOverrides = {};
|
|
82
82
|
}
|
|
83
|
+
TwitterOpenApi.prototype.get_browser_headers = function () {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
85
|
+
var raw, json, ignore, keys;
|
|
86
|
+
return __generator(this, function (_b) {
|
|
87
|
+
switch (_b.label) {
|
|
88
|
+
case 0: return [4 /*yield*/, _a.fetchApi(_a.header)];
|
|
89
|
+
case 1:
|
|
90
|
+
raw = _b.sent();
|
|
91
|
+
return [4 /*yield*/, raw.json()];
|
|
92
|
+
case 2:
|
|
93
|
+
json = _b.sent();
|
|
94
|
+
ignore = ["host", "connection"];
|
|
95
|
+
keys = Object.keys(json["chrome-fetch"]).filter(function (key) { return !ignore.includes(key); });
|
|
96
|
+
return [2 /*return*/, __assign(__assign({}, keys.reduce(function (a, b) {
|
|
97
|
+
var _b;
|
|
98
|
+
return (__assign(__assign({}, a), (_b = {}, _b[b] = json["chrome-fetch"][b], _b)));
|
|
99
|
+
}, {})), { 'accept-encoding': 'identity', "priority": "u=1, i", "referer": "https://twitter.com/home" })];
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
TwitterOpenApi.prototype.get_api_key = function () {
|
|
105
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
106
|
+
var data;
|
|
107
|
+
return __generator(this, function (_b) {
|
|
108
|
+
switch (_b.label) {
|
|
109
|
+
case 0: return [4 /*yield*/, this.get_browser_headers()];
|
|
110
|
+
case 1:
|
|
111
|
+
data = _b.sent();
|
|
112
|
+
return [2 /*return*/, __assign(__assign({}, data), { 'x-twitter-client-language': 'en', 'x-twitter-active-user': 'yes', authorization: "Bearer ".concat(_a.bearer) })];
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
};
|
|
83
117
|
TwitterOpenApi.prototype.setInitOverrides = function (initOverrides) {
|
|
84
118
|
this.initOverrides = initOverrides;
|
|
85
119
|
};
|
|
@@ -138,14 +172,16 @@ var TwitterOpenApi = /** @class */ (function () {
|
|
|
138
172
|
var _d = __read(_b, 2), key = _d[0], value = _d[1];
|
|
139
173
|
return (__assign(__assign({}, a), (_c = {}, _c[key] = value, _c)));
|
|
140
174
|
}, {});
|
|
141
|
-
if (!!cookies['gt']) return [3 /*break*/,
|
|
142
|
-
|
|
143
|
-
return [4 /*yield*/, _a.fetchApi('https://api.twitter.com/1.1/guest/activate.json', __assign({ method: 'POST', headers: activate_headers }, this.initOverrides)).then(function (response) { return response.json(); })];
|
|
175
|
+
if (!!cookies['gt']) return [3 /*break*/, 5];
|
|
176
|
+
return [4 /*yield*/, this.get_api_key()];
|
|
144
177
|
case 3:
|
|
178
|
+
activate_headers = _c.sent();
|
|
179
|
+
return [4 /*yield*/, _a.fetchApi('https://api.twitter.com/1.1/guest/activate.json', __assign({ method: 'POST', headers: activate_headers }, this.initOverrides)).then(function (response) { return response.json(); })];
|
|
180
|
+
case 4:
|
|
145
181
|
guest_token = (_c.sent()).guest_token;
|
|
146
182
|
cookies['gt'] = guest_token;
|
|
147
|
-
_c.label =
|
|
148
|
-
case
|
|
183
|
+
_c.label = 5;
|
|
184
|
+
case 5:
|
|
149
185
|
// const chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
|
|
150
186
|
// const csrfToken = [...Array(32)].reduce((a) => a + chars[Math.floor(Math.random() * chars.length)], '');
|
|
151
187
|
// cookies.push({ name: 'ct0', value: csrfToken });
|
|
@@ -159,23 +195,27 @@ var TwitterOpenApi = /** @class */ (function () {
|
|
|
159
195
|
var api_key, config;
|
|
160
196
|
var _this = this;
|
|
161
197
|
return __generator(this, function (_b) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
198
|
+
switch (_b.label) {
|
|
199
|
+
case 0: return [4 /*yield*/, this.get_api_key()];
|
|
200
|
+
case 1:
|
|
201
|
+
api_key = _b.sent();
|
|
202
|
+
if (cookies['ct0']) {
|
|
203
|
+
api_key['x-twitter-auth-type'] = 'OAuth2Session';
|
|
204
|
+
api_key['x-csrf-token'] = cookies['ct0'];
|
|
205
|
+
}
|
|
206
|
+
if (cookies['gt']) {
|
|
207
|
+
api_key['x-guest-token'] = cookies['gt'];
|
|
208
|
+
}
|
|
209
|
+
config = {
|
|
210
|
+
fetchApi: _a.fetchApi,
|
|
211
|
+
middleware: [{ pre: function (context) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_b) {
|
|
212
|
+
return [2 /*return*/, this.setCookies(context, cookies)];
|
|
213
|
+
}); }); } }],
|
|
214
|
+
apiKey: function (key) { return api_key[key.toLowerCase()]; },
|
|
215
|
+
accessToken: _a.bearer,
|
|
216
|
+
};
|
|
217
|
+
return [2 /*return*/, this.getClient(new i.Configuration(config))];
|
|
169
218
|
}
|
|
170
|
-
config = {
|
|
171
|
-
fetchApi: _a.fetchApi,
|
|
172
|
-
middleware: [{ pre: function (context) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_b) {
|
|
173
|
-
return [2 /*return*/, this.setCookies(context, cookies)];
|
|
174
|
-
}); }); } }],
|
|
175
|
-
apiKey: function (key) { return api_key[key.toLowerCase()]; },
|
|
176
|
-
accessToken: _a.bearer,
|
|
177
|
-
};
|
|
178
|
-
return [2 /*return*/, this.getClient(new i.Configuration(config))];
|
|
179
219
|
});
|
|
180
220
|
});
|
|
181
221
|
};
|
|
@@ -194,26 +234,11 @@ var TwitterOpenApi = /** @class */ (function () {
|
|
|
194
234
|
};
|
|
195
235
|
var _a;
|
|
196
236
|
_a = TwitterOpenApi;
|
|
197
|
-
TwitterOpenApi.hash = '
|
|
237
|
+
TwitterOpenApi.hash = 'fbfe847e9b3f11e2b25e294827f3637e316d41f0';
|
|
198
238
|
TwitterOpenApi.url = "https://raw.githubusercontent.com/fa0311/twitter-openapi/".concat(_a.hash, "/src/config/placeholder.json");
|
|
239
|
+
TwitterOpenApi.header = "https://raw.githubusercontent.com/fa0311/latest-user-agent/main/header.json";
|
|
199
240
|
TwitterOpenApi.twitter = 'https://twitter.com/home';
|
|
200
|
-
TwitterOpenApi.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36';
|
|
201
241
|
TwitterOpenApi.bearer = 'AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA';
|
|
202
|
-
TwitterOpenApi.browser_headers = {
|
|
203
|
-
accept: 'text/plain, */*; q=0.01',
|
|
204
|
-
'accept-encoding': 'gzip, deflate, br',
|
|
205
|
-
'accept-language': 'en-US,en;q=0.9',
|
|
206
|
-
'cache-control': 'no-cache',
|
|
207
|
-
pragma: 'no-cache',
|
|
208
|
-
'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"',
|
|
209
|
-
'sec-ch-ua-mobile': '?0',
|
|
210
|
-
'sec-ch-ua-platform': '"Windows"',
|
|
211
|
-
'sec-fetch-dest': 'empty',
|
|
212
|
-
'sec-fetch-mode': 'cors',
|
|
213
|
-
'sec-fetch-site': 'same-site',
|
|
214
|
-
'user-agent': _a.userAgent,
|
|
215
|
-
};
|
|
216
|
-
TwitterOpenApi.api_key = __assign({ 'x-twitter-client-language': 'en', 'x-twitter-active-user': 'yes' }, _a.browser_headers);
|
|
217
242
|
TwitterOpenApi.fetchApi = fetch.bind(globalThis);
|
|
218
243
|
return TwitterOpenApi;
|
|
219
244
|
}());
|
package/dist/src/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAUgB;AAEhB,wDAA0D;AAC1D,4CAAgD;AAEhD;IAAA;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "twitter-openapi-typescript",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.34",
|
|
4
4
|
"description": "Implementation of Twitter internal API in TypeScript",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -21,14 +21,13 @@
|
|
|
21
21
|
"main": "./dist/src/index.js",
|
|
22
22
|
"typings": "./dist/src/index.d.ts",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"twitter-openapi-typescript-generated": "^0.0.
|
|
24
|
+
"twitter-openapi-typescript-generated": "^0.0.22"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/jest": "*",
|
|
28
28
|
"@types/node": "*",
|
|
29
29
|
"@typescript-eslint/eslint-plugin": "*",
|
|
30
30
|
"@typescript-eslint/parser": "*",
|
|
31
|
-
"dotenv": "^16.3.0",
|
|
32
31
|
"eslint": "^8.50.0",
|
|
33
32
|
"eslint-config-standard-with-typescript": "*",
|
|
34
33
|
"eslint-plugin-import": "*",
|
package/src/api.ts
CHANGED
|
@@ -14,35 +14,40 @@ import * as i from 'twitter-openapi-typescript-generated';
|
|
|
14
14
|
import { UsersApiUtils } from './apis/usersApi';
|
|
15
15
|
|
|
16
16
|
export class TwitterOpenApi {
|
|
17
|
-
static hash = '
|
|
17
|
+
static hash = 'fbfe847e9b3f11e2b25e294827f3637e316d41f0';
|
|
18
18
|
static url = `https://raw.githubusercontent.com/fa0311/twitter-openapi/${this.hash}/src/config/placeholder.json`;
|
|
19
|
+
static header = "https://raw.githubusercontent.com/fa0311/latest-user-agent/main/header.json"
|
|
19
20
|
static twitter = 'https://twitter.com/home';
|
|
20
|
-
|
|
21
|
-
static userAgent =
|
|
22
|
-
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36';
|
|
23
21
|
static bearer =
|
|
24
22
|
'AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA';
|
|
25
23
|
|
|
26
|
-
static browser_headers = {
|
|
27
|
-
accept: 'text/plain, */*; q=0.01',
|
|
28
|
-
'accept-encoding': 'gzip, deflate, br',
|
|
29
|
-
'accept-language': 'en-US,en;q=0.9',
|
|
30
|
-
'cache-control': 'no-cache',
|
|
31
|
-
pragma: 'no-cache',
|
|
32
|
-
'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"',
|
|
33
|
-
'sec-ch-ua-mobile': '?0',
|
|
34
|
-
'sec-ch-ua-platform': '"Windows"',
|
|
35
|
-
'sec-fetch-dest': 'empty',
|
|
36
|
-
'sec-fetch-mode': 'cors',
|
|
37
|
-
'sec-fetch-site': 'same-site',
|
|
38
|
-
'user-agent': TwitterOpenApi.userAgent,
|
|
39
|
-
};
|
|
40
24
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
25
|
+
async get_browser_headers(): Promise<{ [key: string]: string }> {
|
|
26
|
+
const raw = await TwitterOpenApi.fetchApi(TwitterOpenApi.header);
|
|
27
|
+
const json = await raw.json();
|
|
28
|
+
|
|
29
|
+
const ignore = ["host", "connection"];
|
|
30
|
+
const keys = Object.keys(json["chrome-fetch"]).filter((key) => !ignore.includes(key));
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
...keys.reduce((a, b) => ({ ...a, [b]: json["chrome-fetch"][b] }), {}),
|
|
35
|
+
'accept-encoding': 'identity',
|
|
36
|
+
"priority": "u=1, i",
|
|
37
|
+
"referer":"https://twitter.com/home",
|
|
45
38
|
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
async get_api_key(): Promise<{ [key: string]: string }> {
|
|
43
|
+
const data = await this.get_browser_headers();
|
|
44
|
+
return {
|
|
45
|
+
...data,
|
|
46
|
+
'x-twitter-client-language': 'en',
|
|
47
|
+
'x-twitter-active-user': 'yes',
|
|
48
|
+
authorization: `Bearer ${TwitterOpenApi.bearer}`
|
|
49
|
+
};
|
|
50
|
+
}
|
|
46
51
|
|
|
47
52
|
static fetchApi: i.FetchAPI = fetch.bind(globalThis);
|
|
48
53
|
|
|
@@ -106,10 +111,7 @@ export class TwitterOpenApi {
|
|
|
106
111
|
.reduce((a, [key, value]) => ({ ...a, [key]: value }), {});
|
|
107
112
|
|
|
108
113
|
if (!cookies['gt']) {
|
|
109
|
-
const activate_headers =
|
|
110
|
-
...TwitterOpenApi.api_key,
|
|
111
|
-
authorization: `Bearer ${TwitterOpenApi.bearer}`,
|
|
112
|
-
};
|
|
114
|
+
const activate_headers = await this.get_api_key();
|
|
113
115
|
const { guest_token } = await TwitterOpenApi.fetchApi('https://api.twitter.com/1.1/guest/activate.json', {
|
|
114
116
|
method: 'POST',
|
|
115
117
|
headers: activate_headers,
|
|
@@ -126,7 +128,7 @@ export class TwitterOpenApi {
|
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
async getClientFromCookies(cookies: { [key: string]: string }): Promise<TwitterOpenApiClient> {
|
|
129
|
-
|
|
131
|
+
const api_key = await this.get_api_key();
|
|
130
132
|
if (cookies['ct0']) {
|
|
131
133
|
api_key['x-twitter-auth-type'] = 'OAuth2Session';
|
|
132
134
|
api_key['x-csrf-token'] = cookies['ct0'];
|
package/test/init.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { TwitterOpenApi } from '@/api';
|
|
2
|
-
import
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
3
|
import * as log4js from 'log4js';
|
|
4
4
|
|
|
5
|
-
dotenv.config();
|
|
6
5
|
|
|
7
|
-
const authToken = process.env.AUTH_TOKEN as string;
|
|
8
|
-
const CsrfToken = process.env.CSRF_TOKEN as string;
|
|
9
6
|
|
|
10
7
|
export const logger = log4js
|
|
11
8
|
.configure({
|
|
@@ -25,12 +22,19 @@ export const logger = log4js
|
|
|
25
22
|
})
|
|
26
23
|
.getLogger('Test');
|
|
27
24
|
|
|
25
|
+
export type Cookie = {
|
|
26
|
+
name: string;
|
|
27
|
+
domain: string;
|
|
28
|
+
value: string;
|
|
29
|
+
};
|
|
30
|
+
|
|
28
31
|
export const getClient = async () => {
|
|
29
32
|
const api = new TwitterOpenApi();
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
const data = await fs.readFile('cookies.json', 'utf-8');
|
|
34
|
+
const parsed = JSON.parse(data)
|
|
35
|
+
const cookies = parsed as Cookie[]
|
|
36
|
+
const json = Object.fromEntries(cookies.filter((e) => e.domain === '.twitter.com').map((e) => [e.name, e.value]));
|
|
37
|
+
const client = await api.getClientFromCookies(json);
|
|
34
38
|
return client;
|
|
35
39
|
};
|
|
36
40
|
export const getGuestClient = async () => {
|
package/dist/a.d.ts
DELETED
package/dist/a.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"a.d.ts","sourceRoot":"","sources":["../a.ts"],"names":[],"mappings":""}
|
package/dist/a.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
var api_1 = require("./src/api");
|
|
40
|
-
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
41
|
-
var api, client, res;
|
|
42
|
-
return __generator(this, function (_a) {
|
|
43
|
-
switch (_a.label) {
|
|
44
|
-
case 0:
|
|
45
|
-
api = new api_1.TwitterOpenApi();
|
|
46
|
-
return [4 /*yield*/, api.getGuestClient()];
|
|
47
|
-
case 1:
|
|
48
|
-
client = _a.sent();
|
|
49
|
-
return [4 /*yield*/, client.getDefaultApi().getTweetResultByRestId({ tweetId: "1771078537694601545" })];
|
|
50
|
-
case 2:
|
|
51
|
-
res = _a.sent();
|
|
52
|
-
console.log(res.data);
|
|
53
|
-
return [2 /*return*/];
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}); })();
|
|
57
|
-
//# sourceMappingURL=a.js.map
|
package/dist/a.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"a.js","sourceRoot":"","sources":["../a.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAAuC;AAEvC,CAAC;;;;;gBACS,GAAG,GAAG,IAAI,oBAAc,EAAE,CAAC;gBAClB,qBAAM,GAAG,CAAC,cAAc,EAAE,EAAA;;gBAAnC,MAAM,GAAG,SAA0B;gBAC7B,qBAAM,MAAM,CAAC,aAAa,EAAE,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,EAAA;;gBAA7F,GAAG,GAAG,SAAuF;gBACnG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;;;KACzB,CAAC,EAAE,CAAA"}
|