@the-convocation/twitter-scraper 0.0.9 → 0.1.1

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/api.js CHANGED
@@ -1,77 +1,82 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { gotScraping } from 'got-scraping';
11
- export const bearerToken = 'AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw';
12
- export const bearerToken2 = 'AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA';
13
- export function requestApi(url, auth) {
14
- return __awaiter(this, void 0, void 0, function* () {
15
- const headers = {};
16
- yield auth.installTo(headers);
17
- let res;
18
- try {
19
- res = yield gotScraping.get({
20
- url,
21
- headers,
22
- });
23
- }
24
- catch (err) {
25
- if (!(err instanceof Error)) {
26
- throw err;
27
- }
28
- return {
29
- success: false,
30
- err: new Error('Failed to perform request.'),
31
- };
32
- }
33
- if (res.statusCode != 200 && res.statusCode != 403) {
34
- return {
35
- success: false,
36
- err: new Error(`Response status: ${res.statusCode}`),
37
- };
38
- }
39
- const value = JSON.parse(res.body);
40
- if (res.headers['x-rate-limit-incoming'] == '0') {
41
- auth.deleteToken();
42
- return { success: true, value };
43
- }
44
- else {
45
- return { success: true, value };
46
- }
47
- });
48
- }
49
- export function addApiParams(params, includeTweetReplies) {
50
- params.set('include_profile_interstitial_type', '1');
51
- params.set('include_blocking', '1');
52
- params.set('include_blocked_by', '1');
53
- params.set('include_followed_by', '1');
54
- params.set('include_want_retweets', '1');
55
- params.set('include_mute_edge', '1');
56
- params.set('include_can_dm', '1');
57
- params.set('include_can_media_tag', '1');
58
- params.set('include_ext_has_nft_avatar', '1');
59
- params.set('skip_status', '1');
60
- params.set('cards_platform', 'Web-12');
61
- params.set('include_cards', '1');
62
- params.set('include_ext_alt_text', 'true');
63
- params.set('include_quote_count', 'true');
64
- params.set('include_reply_count', '1');
65
- params.set('tweet_mode', 'extended');
66
- params.set('include_entities', 'true');
67
- params.set('include_user_entities', 'true');
68
- params.set('include_ext_media_color', 'true');
69
- params.set('include_ext_media_availability', 'true');
70
- params.set('include_ext_sensitive_media_warning', 'true');
71
- params.set('send_error_codes', 'true');
72
- params.set('simple_quoted_tweet', 'true');
73
- params.set('include_tweet_replies', `${includeTweetReplies}`);
74
- params.set('ext', 'mediaStats,highlightedLabel,hasNftAvatar,voiceInfo,superFollowMetadata');
75
- return params;
76
- }
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.addApiParams = exports.requestApi = exports.bearerToken2 = exports.bearerToken = void 0;
13
+ const got_scraping_1 = require("got-scraping");
14
+ exports.bearerToken = 'AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw';
15
+ exports.bearerToken2 = 'AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA';
16
+ function requestApi(url, auth) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ const headers = {};
19
+ yield auth.installTo(headers);
20
+ let res;
21
+ try {
22
+ res = yield got_scraping_1.gotScraping.get({
23
+ url,
24
+ headers,
25
+ });
26
+ }
27
+ catch (err) {
28
+ if (!(err instanceof Error)) {
29
+ throw err;
30
+ }
31
+ return {
32
+ success: false,
33
+ err: new Error('Failed to perform request.'),
34
+ };
35
+ }
36
+ if (res.statusCode != 200 && res.statusCode != 403) {
37
+ return {
38
+ success: false,
39
+ err: new Error(`Response status: ${res.statusCode}`),
40
+ };
41
+ }
42
+ const value = JSON.parse(res.body);
43
+ if (res.headers['x-rate-limit-incoming'] == '0') {
44
+ auth.deleteToken();
45
+ return { success: true, value };
46
+ }
47
+ else {
48
+ return { success: true, value };
49
+ }
50
+ });
51
+ }
52
+ exports.requestApi = requestApi;
53
+ function addApiParams(params, includeTweetReplies) {
54
+ params.set('include_profile_interstitial_type', '1');
55
+ params.set('include_blocking', '1');
56
+ params.set('include_blocked_by', '1');
57
+ params.set('include_followed_by', '1');
58
+ params.set('include_want_retweets', '1');
59
+ params.set('include_mute_edge', '1');
60
+ params.set('include_can_dm', '1');
61
+ params.set('include_can_media_tag', '1');
62
+ params.set('include_ext_has_nft_avatar', '1');
63
+ params.set('skip_status', '1');
64
+ params.set('cards_platform', 'Web-12');
65
+ params.set('include_cards', '1');
66
+ params.set('include_ext_alt_text', 'true');
67
+ params.set('include_quote_count', 'true');
68
+ params.set('include_reply_count', '1');
69
+ params.set('tweet_mode', 'extended');
70
+ params.set('include_entities', 'true');
71
+ params.set('include_user_entities', 'true');
72
+ params.set('include_ext_media_color', 'true');
73
+ params.set('include_ext_media_availability', 'true');
74
+ params.set('include_ext_sensitive_media_warning', 'true');
75
+ params.set('send_error_codes', 'true');
76
+ params.set('simple_quoted_tweet', 'true');
77
+ params.set('include_tweet_replies', `${includeTweetReplies}`);
78
+ params.set('ext', 'mediaStats,highlightedLabel,hasNftAvatar,voiceInfo,superFollowMetadata');
79
+ return params;
80
+ }
81
+ exports.addApiParams = addApiParams;
77
82
  //# sourceMappingURL=api.js.map
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,cAAc,CAAC;AAG9D,MAAM,CAAC,MAAM,WAAW,GACtB,oHAAoH,CAAC;AACvH,MAAM,CAAC,MAAM,YAAY,GACvB,0GAA0G,CAAC;AAS7G,MAAM,UAAgB,UAAU,CAC9B,GAAW,EACX,IAAsB;;QAEtB,MAAM,OAAO,GAAY,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE9B,IAAI,GAAqB,CAAC;QAC1B,IAAI;YACF,GAAG,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC;gBAC1B,GAAG;gBACH,OAAO;aACR,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE;gBAC3B,MAAM,GAAG,CAAC;aACX;YAED,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,IAAI,KAAK,CAAC,4BAA4B,CAAC;aAC7C,CAAC;SACH;QAED,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE;YAClD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,UAAU,EAAE,CAAC;aACrD,CAAC;SACH;QAED,MAAM,KAAK,GAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,GAAG,EAAE;YAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SACjC;aAAM;YACL,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SACjC;IACH,CAAC;CAAA;AAED,MAAM,UAAU,YAAY,CAC1B,MAAuB,EACvB,mBAA4B;IAE5B,MAAM,CAAC,GAAG,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,mBAAmB,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,CACR,KAAK,EACL,wEAAwE,CACzE,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/auth.js CHANGED
@@ -1,119 +1,123 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { gotScraping } from 'got-scraping';
11
- /**
12
- * A guest authentication token manager. Automatically handles token refreshes.
13
- */
14
- export class TwitterGuestAuth {
15
- constructor(bearerToken, cookie, xCsrfToken) {
16
- this.bearerToken = bearerToken;
17
- this.cookie = cookie;
18
- this.xCsrfToken = xCsrfToken;
19
- }
20
- /**
21
- * Deletes the authentication token.
22
- */
23
- deleteToken() {
24
- delete this.guestToken;
25
- delete this.guestCreatedAt;
26
- }
27
- /**
28
- * Returns if the authentication state has a token.
29
- * @returns `true` if the authentication state has a token; `false` otherwise.
30
- */
31
- hasToken() {
32
- return this.guestToken != null;
33
- }
34
- /**
35
- * Returns the time that authentication was performed.
36
- * @returns The time at which the authentication token was created, or `null` if it hasn't been created yet.
37
- */
38
- authenticatedAt() {
39
- if (this.guestCreatedAt == null) {
40
- return null;
41
- }
42
- return new Date(this.guestCreatedAt);
43
- }
44
- /**
45
- * Sets a cookie string for use in requests.
46
- * @param value The new cookie to use in requests.
47
- */
48
- useCookie(value) {
49
- this.cookie = value;
50
- }
51
- /**
52
- * Sets a new CSRF token for use in requests.
53
- * @param value The new CSRF token to use in requests.
54
- */
55
- useCsrfToken(value) {
56
- this.xCsrfToken = value;
57
- }
58
- /**
59
- * Installs the authentication information into a headers-like object. If needed, the
60
- * authentication token will be updated from the API automatically.
61
- * @param headers A key-value object representing a request's headers.
62
- * @returns A builder that can be used to add or override other relevant data, or to
63
- * complete the task.
64
- */
65
- installTo(headers) {
66
- return __awaiter(this, void 0, void 0, function* () {
67
- if (this.shouldUpdate()) {
68
- yield this.updateToken();
69
- }
70
- const token = this.guestToken;
71
- if (token == null) {
72
- throw new Error('Authentication token is null or undefined.');
73
- }
74
- headers['Authorization'] = `Bearer ${this.bearerToken}`;
75
- headers['X-Guest-Token'] = token;
76
- if (this.cookie != null && this.xCsrfToken != null) {
77
- headers['Cookie'] = this.cookie;
78
- headers['x-csrf-token'] = this.xCsrfToken;
79
- }
80
- });
81
- }
82
- /**
83
- * Updates the authentication state with a new guest token from the Twitter API.
84
- */
85
- updateToken() {
86
- return __awaiter(this, void 0, void 0, function* () {
87
- const res = yield gotScraping.post({
88
- url: 'https://api.twitter.com/1.1/guest/activate.json',
89
- headers: {
90
- Authorization: `Bearer ${this.bearerToken}`,
91
- },
92
- });
93
- if (res.statusCode != 200) {
94
- throw new Error(res.body);
95
- }
96
- const o = JSON.parse(res.body);
97
- if (o == null || o['guest_token'] == null) {
98
- throw new Error('guest_token not found.');
99
- }
100
- const newGuestToken = o['guest_token'];
101
- if (typeof newGuestToken !== 'string') {
102
- throw new Error('guest_token was not a string.');
103
- }
104
- this.guestToken = newGuestToken;
105
- this.guestCreatedAt = new Date();
106
- });
107
- }
108
- /**
109
- * Returns if the authentication token needs to be updated or not.
110
- * @returns `true` if the token needs to be updated; `false` otherwise.
111
- */
112
- shouldUpdate() {
113
- return (!this.hasToken() ||
114
- (this.guestCreatedAt != null &&
115
- this.guestCreatedAt <
116
- new Date(new Date().valueOf() - 3 * 60 * 60 * 1000)));
117
- }
118
- }
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.TwitterGuestAuth = void 0;
13
+ const got_scraping_1 = require("got-scraping");
14
+ /**
15
+ * A guest authentication token manager. Automatically handles token refreshes.
16
+ */
17
+ class TwitterGuestAuth {
18
+ constructor(bearerToken, cookie, xCsrfToken) {
19
+ this.bearerToken = bearerToken;
20
+ this.cookie = cookie;
21
+ this.xCsrfToken = xCsrfToken;
22
+ }
23
+ /**
24
+ * Deletes the authentication token.
25
+ */
26
+ deleteToken() {
27
+ delete this.guestToken;
28
+ delete this.guestCreatedAt;
29
+ }
30
+ /**
31
+ * Returns if the authentication state has a token.
32
+ * @returns `true` if the authentication state has a token; `false` otherwise.
33
+ */
34
+ hasToken() {
35
+ return this.guestToken != null;
36
+ }
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
+ authenticatedAt() {
42
+ if (this.guestCreatedAt == null) {
43
+ return null;
44
+ }
45
+ return new Date(this.guestCreatedAt);
46
+ }
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) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ if (this.shouldUpdate()) {
71
+ yield this.updateToken();
72
+ }
73
+ const token = this.guestToken;
74
+ if (token == null) {
75
+ throw new Error('Authentication token is null or undefined.');
76
+ }
77
+ headers['Authorization'] = `Bearer ${this.bearerToken}`;
78
+ headers['X-Guest-Token'] = token;
79
+ if (this.cookie != null && this.xCsrfToken != null) {
80
+ headers['Cookie'] = this.cookie;
81
+ headers['x-csrf-token'] = this.xCsrfToken;
82
+ }
83
+ });
84
+ }
85
+ /**
86
+ * Updates the authentication state with a new guest token from the Twitter API.
87
+ */
88
+ updateToken() {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const res = yield got_scraping_1.gotScraping.post({
91
+ url: 'https://api.twitter.com/1.1/guest/activate.json',
92
+ headers: {
93
+ Authorization: `Bearer ${this.bearerToken}`,
94
+ },
95
+ });
96
+ if (res.statusCode != 200) {
97
+ throw new Error(res.body);
98
+ }
99
+ const o = JSON.parse(res.body);
100
+ if (o == null || o['guest_token'] == null) {
101
+ throw new Error('guest_token not found.');
102
+ }
103
+ const newGuestToken = o['guest_token'];
104
+ if (typeof newGuestToken !== 'string') {
105
+ throw new Error('guest_token was not a string.');
106
+ }
107
+ this.guestToken = newGuestToken;
108
+ this.guestCreatedAt = new Date();
109
+ });
110
+ }
111
+ /**
112
+ * Returns if the authentication token needs to be updated or not.
113
+ * @returns `true` if the token needs to be updated; `false` otherwise.
114
+ */
115
+ shouldUpdate() {
116
+ return (!this.hasToken() ||
117
+ (this.guestCreatedAt != null &&
118
+ this.guestCreatedAt <
119
+ new Date(new Date().valueOf() - 3 * 60 * 60 * 1000)));
120
+ }
121
+ }
122
+ exports.TwitterGuestAuth = TwitterGuestAuth;
119
123
  //# sourceMappingURL=auth.js.map
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}