@the-convocation/twitter-scraper 0.1.4 → 0.1.5
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/README.md +4 -1
- package/dist/api.d.ts +4 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +7 -5
- package/dist/api.js.map +1 -1
- package/dist/auth-user.d.ts +15 -0
- package/dist/auth-user.d.ts.map +1 -0
- package/dist/auth-user.js +216 -0
- package/dist/auth-user.js.map +1 -0
- package/dist/auth.d.ts +45 -25
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +28 -43
- package/dist/auth.js.map +1 -1
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -0
- package/dist/profile.d.ts +3 -3
- package/dist/profile.d.ts.map +1 -1
- package/dist/profile.js +1 -1
- package/dist/profile.js.map +1 -1
- package/dist/scraper.d.ts +50 -4
- package/dist/scraper.d.ts.map +1 -1
- package/dist/scraper.js +92 -8
- package/dist/scraper.js.map +1 -1
- package/dist/search.d.ts +5 -5
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +4 -1
- package/dist/search.js.map +1 -1
- package/dist/timeline-async.d.ts.map +1 -1
- package/dist/timeline-async.js +0 -6
- package/dist/timeline-async.js.map +1 -1
- package/dist/timeline.d.ts +19 -1
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +146 -100
- package/dist/timeline.js.map +1 -1
- package/dist/trends.d.ts +2 -2
- package/dist/trends.d.ts.map +1 -1
- package/dist/trends.js.map +1 -1
- package/dist/tweets.d.ts +19 -5
- package/dist/tweets.d.ts.map +1 -1
- package/dist/tweets.js +58 -10
- package/dist/tweets.js.map +1 -1
- package/package.json +13 -12
package/README.md
CHANGED
|
@@ -7,8 +7,11 @@ A port of [n0madic/twitter-scraper](https://github.com/n0madic/twitter-scraper)
|
|
|
7
7
|
>
|
|
8
8
|
> You can use this library to get the text of any user's Tweets trivially.
|
|
9
9
|
|
|
10
|
+
Note that some API operations, such as search, require logging in with a real user account.
|
|
11
|
+
Refer to the [original README](https://github.com/n0madic/twitter-scraper) for details.
|
|
12
|
+
|
|
10
13
|
## Installation
|
|
11
|
-
This package requires Node.js
|
|
14
|
+
This package requires Node.js v16.0.0 or greater.
|
|
12
15
|
|
|
13
16
|
NPM:
|
|
14
17
|
```sh
|
package/dist/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TwitterAuth } from './auth';
|
|
2
2
|
export declare const bearerToken = "AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw";
|
|
3
3
|
export declare const bearerToken2 = "AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA";
|
|
4
4
|
/**
|
|
@@ -11,6 +11,8 @@ export type RequestApiResult<T> = {
|
|
|
11
11
|
success: false;
|
|
12
12
|
err: Error;
|
|
13
13
|
};
|
|
14
|
-
|
|
14
|
+
type GotRequestMethod = 'get' | 'post';
|
|
15
|
+
export declare function requestApi<T>(url: string, auth: TwitterAuth, method?: GotRequestMethod): Promise<RequestApiResult<T>>;
|
|
15
16
|
export declare function addApiParams(params: URLSearchParams, includeTweetReplies: boolean): URLSearchParams;
|
|
17
|
+
export {};
|
|
16
18
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAGrC,eAAO,MAAM,WAAW,uHAC8F,CAAC;AACvH,eAAO,MAAM,YAAY,6GACmF,CAAC;AAE7G;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,KAAK,CAAA;CAAE,CAAC;AAEnC,KAAK,gBAAgB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,wBAAsB,UAAU,CAAC,CAAC,EAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,MAAM,GAAE,gBAAwB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAoC9B;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,EACvB,mBAAmB,EAAE,OAAO,GAC3B,eAAe,CAoCjB"}
|
package/dist/api.js
CHANGED
|
@@ -11,17 +11,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.addApiParams = exports.requestApi = exports.bearerToken2 = exports.bearerToken = void 0;
|
|
13
13
|
const got_scraping_1 = require("got-scraping");
|
|
14
|
+
const errors_1 = require("./errors");
|
|
14
15
|
exports.bearerToken = 'AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw';
|
|
15
16
|
exports.bearerToken2 = 'AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA';
|
|
16
|
-
function requestApi(url, auth) {
|
|
17
|
+
function requestApi(url, auth, method = 'get') {
|
|
17
18
|
return __awaiter(this, void 0, void 0, function* () {
|
|
18
19
|
const headers = {};
|
|
19
|
-
yield auth.installTo(headers);
|
|
20
|
+
yield auth.installTo(headers, url);
|
|
20
21
|
let res;
|
|
21
22
|
try {
|
|
22
|
-
res = yield got_scraping_1.gotScraping
|
|
23
|
+
res = yield got_scraping_1.gotScraping[method]({
|
|
23
24
|
url,
|
|
24
25
|
headers,
|
|
26
|
+
cookieJar: auth.cookieJar(),
|
|
25
27
|
});
|
|
26
28
|
}
|
|
27
29
|
catch (err) {
|
|
@@ -33,10 +35,10 @@ function requestApi(url, auth) {
|
|
|
33
35
|
err: new Error('Failed to perform request.'),
|
|
34
36
|
};
|
|
35
37
|
}
|
|
36
|
-
if (res.statusCode != 200
|
|
38
|
+
if (res.statusCode != 200) {
|
|
37
39
|
return {
|
|
38
40
|
success: false,
|
|
39
|
-
err: new
|
|
41
|
+
err: new errors_1.ApiError(res, `Response status: ${res.statusCode}`),
|
|
40
42
|
};
|
|
41
43
|
}
|
|
42
44
|
const value = JSON.parse(res.body);
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA8D;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TwitterGuestAuth } from './auth';
|
|
2
|
+
/**
|
|
3
|
+
* A user authentication token manager.
|
|
4
|
+
*/
|
|
5
|
+
export declare class TwitterUserAuth extends TwitterGuestAuth {
|
|
6
|
+
constructor(bearerToken: string);
|
|
7
|
+
isLoggedIn(): Promise<boolean>;
|
|
8
|
+
login(username: string, password: string, email?: string): Promise<void>;
|
|
9
|
+
logout(): Promise<void>;
|
|
10
|
+
installTo(headers: {
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}, url: string): Promise<void>;
|
|
13
|
+
private executeFlowTask;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=auth-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-user.d.ts","sourceRoot":"","sources":["../src/auth-user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AA4C1C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,WAAW,EAAE,MAAM;IAIzB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAa9B,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAgHV,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAcvB,SAAS,CACb,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EACnC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC;YAUF,eAAe;CAwE9B"}
|
|
@@ -0,0 +1,216 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TwitterUserAuth = void 0;
|
|
13
|
+
const got_scraping_1 = require("got-scraping");
|
|
14
|
+
const auth_1 = require("./auth");
|
|
15
|
+
const api_1 = require("./api");
|
|
16
|
+
const tough_cookie_1 = require("tough-cookie");
|
|
17
|
+
/**
|
|
18
|
+
* A user authentication token manager.
|
|
19
|
+
*/
|
|
20
|
+
class TwitterUserAuth extends auth_1.TwitterGuestAuth {
|
|
21
|
+
constructor(bearerToken) {
|
|
22
|
+
super(bearerToken);
|
|
23
|
+
}
|
|
24
|
+
isLoggedIn() {
|
|
25
|
+
var _a;
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
const res = yield (0, api_1.requestApi)('https://api.twitter.com/1.1/account/verify_credentials.json', this);
|
|
28
|
+
if (!res.success) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const { value: verify } = res;
|
|
32
|
+
return verify && !((_a = verify.errors) === null || _a === void 0 ? void 0 : _a.length);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
login(username, password, email) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
yield this.updateGuestToken();
|
|
38
|
+
// Executes the potential acid step in the login flow
|
|
39
|
+
const executeFlowAcid = (ft) => this.executeFlowTask({
|
|
40
|
+
flow_token: ft,
|
|
41
|
+
subtask_inputs: [
|
|
42
|
+
{
|
|
43
|
+
subtask_id: 'LoginAcid',
|
|
44
|
+
enter_text: {
|
|
45
|
+
text: email,
|
|
46
|
+
link: 'next_link',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
// Handles the result of a flow task
|
|
52
|
+
const handleFlowTokenResult = (p) => __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const result = yield p;
|
|
54
|
+
const { status } = result;
|
|
55
|
+
if (status === 'error') {
|
|
56
|
+
throw result.err;
|
|
57
|
+
}
|
|
58
|
+
else if (status === 'acid') {
|
|
59
|
+
return yield handleFlowTokenResult(executeFlowAcid(result.flowToken));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return result.flowToken;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// Executes a flow subtask and handles the result
|
|
66
|
+
const executeFlowSubtask = (data) => handleFlowTokenResult(this.executeFlowTask(data));
|
|
67
|
+
yield executeFlowSubtask({
|
|
68
|
+
flow_name: 'login',
|
|
69
|
+
input_flow_data: {
|
|
70
|
+
flow_context: {
|
|
71
|
+
debug_overrides: {},
|
|
72
|
+
start_location: {
|
|
73
|
+
location: 'splash_screen',
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
})
|
|
78
|
+
.then((ft) => executeFlowSubtask({
|
|
79
|
+
flow_token: ft,
|
|
80
|
+
subtask_inputs: [
|
|
81
|
+
{
|
|
82
|
+
subtask_id: 'LoginJsInstrumentationSubtask',
|
|
83
|
+
js_instrumentation: {
|
|
84
|
+
response: '{}',
|
|
85
|
+
link: 'next_link',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
}))
|
|
90
|
+
.then((ft) => executeFlowSubtask({
|
|
91
|
+
flow_token: ft,
|
|
92
|
+
subtask_inputs: [
|
|
93
|
+
{
|
|
94
|
+
subtask_id: 'LoginEnterUserIdentifierSSO',
|
|
95
|
+
settings_list: {
|
|
96
|
+
setting_responses: [
|
|
97
|
+
{
|
|
98
|
+
key: 'user_identifier',
|
|
99
|
+
response_data: {
|
|
100
|
+
text_data: { result: username },
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
link: 'next_link',
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
}))
|
|
109
|
+
.then((ft) => executeFlowSubtask({
|
|
110
|
+
flow_token: ft,
|
|
111
|
+
subtask_inputs: [
|
|
112
|
+
{
|
|
113
|
+
subtask_id: 'LoginEnterPassword',
|
|
114
|
+
enter_password: {
|
|
115
|
+
password,
|
|
116
|
+
link: 'next_link',
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
}))
|
|
121
|
+
.then((ft) => executeFlowSubtask({
|
|
122
|
+
flow_token: ft,
|
|
123
|
+
subtask_inputs: [
|
|
124
|
+
{
|
|
125
|
+
subtask_id: 'AccountDuplicationCheck',
|
|
126
|
+
check_logged_in_account: {
|
|
127
|
+
link: 'AccountDuplicationCheck_false',
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
}));
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
logout() {
|
|
135
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
if (!this.isLoggedIn()) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
yield (0, api_1.requestApi)('https://api.twitter.com/1.1/account/logout.json', this, 'post');
|
|
140
|
+
this.deleteToken();
|
|
141
|
+
this.jar = new tough_cookie_1.CookieJar();
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
installTo(headers, url) {
|
|
145
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
146
|
+
headers['authorization'] = `Bearer ${this.bearerToken}`;
|
|
147
|
+
const cookies = yield this.jar.getCookies(url);
|
|
148
|
+
const xCsrfToken = cookies.find((cookie) => cookie.key === 'ct0');
|
|
149
|
+
if (xCsrfToken) {
|
|
150
|
+
headers['x-csrf-token'] = xCsrfToken.value;
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
executeFlowTask(data) {
|
|
155
|
+
var _a, _b;
|
|
156
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
const token = this.guestToken;
|
|
158
|
+
if (token == null) {
|
|
159
|
+
throw new Error('Authentication token is null or undefined.');
|
|
160
|
+
}
|
|
161
|
+
const res = yield got_scraping_1.gotScraping.post({
|
|
162
|
+
url: 'https://api.twitter.com/1.1/onboarding/task.json',
|
|
163
|
+
headers: {
|
|
164
|
+
authorization: `Bearer ${this.bearerToken}`,
|
|
165
|
+
'content-type': 'application/json',
|
|
166
|
+
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Nokia G20) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.88 Mobile Safari/537.36',
|
|
167
|
+
'x-guest-token': token,
|
|
168
|
+
'x-twitter-auth-type': 'OAuth2Client',
|
|
169
|
+
'x-twitter-active-user': 'yes',
|
|
170
|
+
'x-twitter-client-language': 'en',
|
|
171
|
+
},
|
|
172
|
+
cookieJar: this.jar,
|
|
173
|
+
json: data,
|
|
174
|
+
});
|
|
175
|
+
if (res.statusCode != 200) {
|
|
176
|
+
return { status: 'error', err: new Error(res.body) };
|
|
177
|
+
}
|
|
178
|
+
const flow = JSON.parse(res.body);
|
|
179
|
+
if ((flow === null || flow === void 0 ? void 0 : flow.flow_token) == null) {
|
|
180
|
+
return { status: 'error', err: new Error('flow_token not found.') };
|
|
181
|
+
}
|
|
182
|
+
if ((_a = flow.errors) === null || _a === void 0 ? void 0 : _a.length) {
|
|
183
|
+
return {
|
|
184
|
+
status: 'error',
|
|
185
|
+
err: new Error(`Authentication error (${flow.errors[0].code}): ${flow.errors[0].message}`),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
if (typeof flow.flow_token !== 'string') {
|
|
189
|
+
return {
|
|
190
|
+
status: 'error',
|
|
191
|
+
err: new Error('flow_token was not a string.'),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if ((_b = flow.subtasks) === null || _b === void 0 ? void 0 : _b.length) {
|
|
195
|
+
if (flow.subtasks[0].subtask_id === 'LoginEnterAlternateIdentifierSubtask') {
|
|
196
|
+
return {
|
|
197
|
+
status: 'error',
|
|
198
|
+
err: new Error('Authentication error: LoginEnterAlternateIdentifierSubtask'),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
else if (flow.subtasks[0].subtask_id === 'LoginAcid') {
|
|
202
|
+
return {
|
|
203
|
+
status: 'acid',
|
|
204
|
+
flowToken: flow.flow_token,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
status: 'success',
|
|
210
|
+
flowToken: flow.flow_token,
|
|
211
|
+
};
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
exports.TwitterUserAuth = TwitterUserAuth;
|
|
216
|
+
//# sourceMappingURL=auth-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-user.js","sourceRoot":"","sources":["../src/auth-user.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { CookieJar } from 'tough-cookie';
|
|
2
|
+
export interface TwitterAuth {
|
|
3
|
+
/**
|
|
4
|
+
* Returns the current cookie jar.
|
|
5
|
+
*/
|
|
6
|
+
cookieJar(): CookieJar;
|
|
7
|
+
/**
|
|
8
|
+
* Returns if a user is logged-in to Twitter through this instance.
|
|
9
|
+
* @returns `true` if a user is logged-in; otherwise `false`.
|
|
10
|
+
*/
|
|
11
|
+
isLoggedIn(): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Logs into a Twitter account.
|
|
14
|
+
* @param username The username to log in with.
|
|
15
|
+
* @param password The password to log in with.
|
|
16
|
+
* @param email The password to log in with, if you have email confirmation enabled.
|
|
17
|
+
*/
|
|
18
|
+
login(username: string, password: string, email?: string): Promise<void>;
|
|
11
19
|
/**
|
|
12
|
-
*
|
|
20
|
+
* Logs out of the current session.
|
|
21
|
+
*/
|
|
22
|
+
logout(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Deletes the current guest token token.
|
|
13
25
|
*/
|
|
14
26
|
deleteToken(): void;
|
|
15
27
|
/**
|
|
@@ -22,30 +34,38 @@ export declare class TwitterGuestAuth {
|
|
|
22
34
|
* @returns The time at which the authentication token was created, or `null` if it hasn't been created yet.
|
|
23
35
|
*/
|
|
24
36
|
authenticatedAt(): Date | null;
|
|
25
|
-
/**
|
|
26
|
-
* Sets a cookie string for use in requests.
|
|
27
|
-
* @param value The new cookie to use in requests.
|
|
28
|
-
*/
|
|
29
|
-
useCookie(value: string): void;
|
|
30
|
-
/**
|
|
31
|
-
* Sets a new CSRF token for use in requests.
|
|
32
|
-
* @param value The new CSRF token to use in requests.
|
|
33
|
-
*/
|
|
34
|
-
useCsrfToken(value: string): void;
|
|
35
37
|
/**
|
|
36
38
|
* Installs the authentication information into a headers-like object. If needed, the
|
|
37
39
|
* authentication token will be updated from the API automatically.
|
|
38
40
|
* @param headers A key-value object representing a request's headers.
|
|
39
|
-
* @returns A builder that can be used to add or override other relevant data, or to
|
|
40
|
-
* complete the task.
|
|
41
41
|
*/
|
|
42
42
|
installTo(headers: {
|
|
43
43
|
[key: string]: unknown;
|
|
44
|
-
}): Promise<void>;
|
|
44
|
+
}, url: string): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A guest authentication token manager. Automatically handles token refreshes.
|
|
48
|
+
*/
|
|
49
|
+
export declare class TwitterGuestAuth implements TwitterAuth {
|
|
50
|
+
protected bearerToken: string;
|
|
51
|
+
protected jar: CookieJar;
|
|
52
|
+
protected guestToken?: string;
|
|
53
|
+
protected guestCreatedAt?: Date;
|
|
54
|
+
constructor(bearerToken: string);
|
|
55
|
+
cookieJar(): CookieJar;
|
|
56
|
+
isLoggedIn(): Promise<boolean>;
|
|
57
|
+
login(_username: string, _password: string, _email?: string): Promise<void>;
|
|
58
|
+
logout(): Promise<void>;
|
|
59
|
+
deleteToken(): void;
|
|
60
|
+
hasToken(): boolean;
|
|
61
|
+
authenticatedAt(): Date | null;
|
|
62
|
+
installTo(headers: {
|
|
63
|
+
[key: string]: unknown;
|
|
64
|
+
}, url: string): Promise<void>;
|
|
45
65
|
/**
|
|
46
66
|
* Updates the authentication state with a new guest token from the Twitter API.
|
|
47
67
|
*/
|
|
48
|
-
|
|
68
|
+
protected updateGuestToken(): Promise<void>;
|
|
49
69
|
/**
|
|
50
70
|
* Returns if the authentication token needs to be updated or not.
|
|
51
71
|
* @returns `true` if the token needs to be updated; `false` otherwise.
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,SAAS,IAAI,SAAS,CAAC;IAEvB;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/B;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,WAAW,IAAI,IAAI,CAAC;IAEpB;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC;IAEpB;;;OAGG;IACH,eAAe,IAAI,IAAI,GAAG,IAAI,CAAC;IAE/B;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;gBAEpB,WAAW,EAAE,MAAM;IAK/B,SAAS,IAAI,SAAS;IAItB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK9B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3E,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvB,WAAW;IAKX,QAAQ,IAAI,OAAO;IAInB,eAAe,IAAI,IAAI,GAAG,IAAI;IAQxB,SAAS,CACb,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EACnC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC;IAoBhB;;OAEG;cACa,gBAAgB;IA2BhC;;;OAGG;IACH,OAAO,CAAC,YAAY;CAQrB"}
|
package/dist/auth.js
CHANGED
|
@@ -11,87 +11,72 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.TwitterGuestAuth = void 0;
|
|
13
13
|
const got_scraping_1 = require("got-scraping");
|
|
14
|
+
const tough_cookie_1 = require("tough-cookie");
|
|
14
15
|
/**
|
|
15
16
|
* A guest authentication token manager. Automatically handles token refreshes.
|
|
16
17
|
*/
|
|
17
18
|
class TwitterGuestAuth {
|
|
18
|
-
constructor(bearerToken
|
|
19
|
+
constructor(bearerToken) {
|
|
19
20
|
this.bearerToken = bearerToken;
|
|
20
|
-
this.
|
|
21
|
-
|
|
21
|
+
this.jar = new tough_cookie_1.CookieJar();
|
|
22
|
+
}
|
|
23
|
+
cookieJar() {
|
|
24
|
+
return this.jar;
|
|
25
|
+
}
|
|
26
|
+
isLoggedIn() {
|
|
27
|
+
return Promise.resolve(false);
|
|
28
|
+
}
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
30
|
+
login(_username, _password, _email) {
|
|
31
|
+
return this.updateGuestToken();
|
|
32
|
+
}
|
|
33
|
+
logout() {
|
|
34
|
+
this.deleteToken();
|
|
35
|
+
this.jar = new tough_cookie_1.CookieJar();
|
|
36
|
+
return Promise.resolve();
|
|
22
37
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Deletes the authentication token.
|
|
25
|
-
*/
|
|
26
38
|
deleteToken() {
|
|
27
39
|
delete this.guestToken;
|
|
28
40
|
delete this.guestCreatedAt;
|
|
29
41
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Returns if the authentication state has a token.
|
|
32
|
-
* @returns `true` if the authentication state has a token; `false` otherwise.
|
|
33
|
-
*/
|
|
34
42
|
hasToken() {
|
|
35
43
|
return this.guestToken != null;
|
|
36
44
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Returns the time that authentication was performed.
|
|
39
|
-
* @returns The time at which the authentication token was created, or `null` if it hasn't been created yet.
|
|
40
|
-
*/
|
|
41
45
|
authenticatedAt() {
|
|
42
46
|
if (this.guestCreatedAt == null) {
|
|
43
47
|
return null;
|
|
44
48
|
}
|
|
45
49
|
return new Date(this.guestCreatedAt);
|
|
46
50
|
}
|
|
47
|
-
|
|
48
|
-
* Sets a cookie string for use in requests.
|
|
49
|
-
* @param value The new cookie to use in requests.
|
|
50
|
-
*/
|
|
51
|
-
useCookie(value) {
|
|
52
|
-
this.cookie = value;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Sets a new CSRF token for use in requests.
|
|
56
|
-
* @param value The new CSRF token to use in requests.
|
|
57
|
-
*/
|
|
58
|
-
useCsrfToken(value) {
|
|
59
|
-
this.xCsrfToken = value;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Installs the authentication information into a headers-like object. If needed, the
|
|
63
|
-
* authentication token will be updated from the API automatically.
|
|
64
|
-
* @param headers A key-value object representing a request's headers.
|
|
65
|
-
* @returns A builder that can be used to add or override other relevant data, or to
|
|
66
|
-
* complete the task.
|
|
67
|
-
*/
|
|
68
|
-
installTo(headers) {
|
|
51
|
+
installTo(headers, url) {
|
|
69
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
53
|
if (this.shouldUpdate()) {
|
|
71
|
-
yield this.
|
|
54
|
+
yield this.updateGuestToken();
|
|
72
55
|
}
|
|
73
56
|
const token = this.guestToken;
|
|
74
57
|
if (token == null) {
|
|
75
58
|
throw new Error('Authentication token is null or undefined.');
|
|
76
59
|
}
|
|
77
|
-
headers['
|
|
78
|
-
headers['
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
60
|
+
headers['authorization'] = `Bearer ${this.bearerToken}`;
|
|
61
|
+
headers['x-guest-token'] = token;
|
|
62
|
+
const cookies = yield this.jar.getCookies(url);
|
|
63
|
+
const xCsrfToken = cookies.find((cookie) => cookie.key === 'ct0');
|
|
64
|
+
if (xCsrfToken) {
|
|
65
|
+
headers['x-csrf-token'] = xCsrfToken.value;
|
|
82
66
|
}
|
|
83
67
|
});
|
|
84
68
|
}
|
|
85
69
|
/**
|
|
86
70
|
* Updates the authentication state with a new guest token from the Twitter API.
|
|
87
71
|
*/
|
|
88
|
-
|
|
72
|
+
updateGuestToken() {
|
|
89
73
|
return __awaiter(this, void 0, void 0, function* () {
|
|
90
74
|
const res = yield got_scraping_1.gotScraping.post({
|
|
91
75
|
url: 'https://api.twitter.com/1.1/guest/activate.json',
|
|
92
76
|
headers: {
|
|
93
77
|
Authorization: `Bearer ${this.bearerToken}`,
|
|
94
78
|
},
|
|
79
|
+
cookieJar: this.jar,
|
|
95
80
|
});
|
|
96
81
|
if (res.statusCode != 200) {
|
|
97
82
|
throw new Error(res.body);
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA2C;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,qBAAa,QAAQ,CAAC,CAAC,CAAE,SAAQ,KAAK;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAArB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM;CAG5D"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiError = void 0;
|
|
4
|
+
class ApiError extends Error {
|
|
5
|
+
constructor(response, message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.response = response;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.ApiError = ApiError;
|
|
11
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAY,SAAQ,KAAK;IACpC,YAAqB,QAAqB,EAAE,OAAe;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QADI,aAAQ,GAAR,QAAQ,CAAa;IAE1C,CAAC;CACF;AAJD,4BAIC"}
|
package/dist/profile.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RequestApiResult } from './api';
|
|
2
|
-
import {
|
|
2
|
+
import { TwitterAuth } from './auth';
|
|
3
3
|
export interface LegacyUserRaw {
|
|
4
4
|
created_at?: string;
|
|
5
5
|
description?: string;
|
|
@@ -62,6 +62,6 @@ export interface UserRaw {
|
|
|
62
62
|
}[];
|
|
63
63
|
}
|
|
64
64
|
export declare function parseProfile(user: LegacyUserRaw): Profile;
|
|
65
|
-
export declare function getProfile(username: string, auth:
|
|
66
|
-
export declare function getUserIdByScreenName(screenName: string, auth:
|
|
65
|
+
export declare function getProfile(username: string, auth: TwitterAuth): Promise<RequestApiResult<Profile>>;
|
|
66
|
+
export declare function getUserIdByScreenName(screenName: string, auth: TwitterAuth): Promise<RequestApiResult<string>>;
|
|
67
67
|
//# sourceMappingURL=profile.d.ts.map
|
package/dist/profile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE;YACJ,IAAI,CAAC,EAAE;gBACL,YAAY,CAAC,EAAE,MAAM,CAAC;aACvB,EAAE,CAAC;SACL,CAAC;KACH,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,MAAM,EAAE,aAAa,CAAC;SACvB,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;CACL;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CA+BzD;AAED,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CA0CpC;AAID,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAyBnC"}
|