@the-convocation/twitter-scraper 0.1.4 → 0.2.0

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.
Files changed (49) hide show
  1. package/README.md +4 -1
  2. package/dist/api.d.ts +2 -2
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +39 -43
  5. package/dist/api.js.map +1 -1
  6. package/dist/auth-user.d.ts +14 -0
  7. package/dist/auth-user.d.ts.map +1 -0
  8. package/dist/auth-user.js +204 -0
  9. package/dist/auth-user.js.map +1 -0
  10. package/dist/auth.d.ts +45 -28
  11. package/dist/auth.d.ts.map +1 -1
  12. package/dist/auth.js +62 -81
  13. package/dist/auth.js.map +1 -1
  14. package/dist/errors.d.ts +5 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +11 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/profile.d.ts +3 -3
  19. package/dist/profile.d.ts.map +1 -1
  20. package/dist/profile.js +56 -67
  21. package/dist/profile.js.map +1 -1
  22. package/dist/requests.d.ts +9 -0
  23. package/dist/requests.d.ts.map +1 -0
  24. package/dist/requests.js +26 -0
  25. package/dist/requests.js.map +1 -0
  26. package/dist/scraper.d.ts +50 -4
  27. package/dist/scraper.d.ts.map +1 -1
  28. package/dist/scraper.js +88 -27
  29. package/dist/scraper.js.map +1 -1
  30. package/dist/search.d.ts +5 -5
  31. package/dist/search.d.ts.map +1 -1
  32. package/dist/search.js +46 -58
  33. package/dist/search.js.map +1 -1
  34. package/dist/timeline-async.d.ts.map +1 -1
  35. package/dist/timeline-async.js +34 -56
  36. package/dist/timeline-async.js.map +1 -1
  37. package/dist/timeline.d.ts +19 -1
  38. package/dist/timeline.d.ts.map +1 -1
  39. package/dist/timeline.js +157 -116
  40. package/dist/timeline.js.map +1 -1
  41. package/dist/trends.d.ts +2 -2
  42. package/dist/trends.d.ts.map +1 -1
  43. package/dist/trends.js +31 -42
  44. package/dist/trends.js.map +1 -1
  45. package/dist/tweets.d.ts +19 -5
  46. package/dist/tweets.d.ts.map +1 -1
  47. package/dist/tweets.js +54 -46
  48. package/dist/tweets.js.map +1 -1
  49. package/package.json +21 -13
package/dist/auth.js CHANGED
@@ -1,112 +1,93 @@
1
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
- });
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
4
  };
11
5
  Object.defineProperty(exports, "__esModule", { value: true });
12
6
  exports.TwitterGuestAuth = void 0;
13
- const got_scraping_1 = require("got-scraping");
7
+ const tough_cookie_1 = require("tough-cookie");
8
+ const requests_1 = require("./requests");
9
+ const headers_polyfill_1 = require("headers-polyfill");
10
+ const cross_fetch_1 = __importDefault(require("cross-fetch"));
14
11
  /**
15
12
  * A guest authentication token manager. Automatically handles token refreshes.
16
13
  */
17
14
  class TwitterGuestAuth {
18
- constructor(bearerToken, cookie, xCsrfToken) {
15
+ constructor(bearerToken) {
19
16
  this.bearerToken = bearerToken;
20
- this.cookie = cookie;
21
- this.xCsrfToken = xCsrfToken;
17
+ this.jar = new tough_cookie_1.CookieJar();
18
+ }
19
+ cookieJar() {
20
+ return this.jar;
21
+ }
22
+ isLoggedIn() {
23
+ return Promise.resolve(false);
24
+ }
25
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
26
+ login(_username, _password, _email) {
27
+ return this.updateGuestToken();
28
+ }
29
+ logout() {
30
+ this.deleteToken();
31
+ this.jar = new tough_cookie_1.CookieJar();
32
+ return Promise.resolve();
22
33
  }
23
- /**
24
- * Deletes the authentication token.
25
- */
26
34
  deleteToken() {
27
35
  delete this.guestToken;
28
36
  delete this.guestCreatedAt;
29
37
  }
30
- /**
31
- * Returns if the authentication state has a token.
32
- * @returns `true` if the authentication state has a token; `false` otherwise.
33
- */
34
38
  hasToken() {
35
39
  return this.guestToken != null;
36
40
  }
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
41
  authenticatedAt() {
42
42
  if (this.guestCreatedAt == null) {
43
43
  return null;
44
44
  }
45
45
  return new Date(this.guestCreatedAt);
46
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
- });
47
+ async installTo(headers, url) {
48
+ if (this.shouldUpdate()) {
49
+ await this.updateGuestToken();
50
+ }
51
+ const token = this.guestToken;
52
+ if (token == null) {
53
+ throw new Error('Authentication token is null or undefined.');
54
+ }
55
+ headers.set('authorization', `Bearer ${this.bearerToken}`);
56
+ headers.set('x-guest-token', token);
57
+ const cookies = await this.jar.getCookies(url);
58
+ const xCsrfToken = cookies.find((cookie) => cookie.key === 'ct0');
59
+ if (xCsrfToken) {
60
+ headers.set('x-csrf-token', xCsrfToken.value);
61
+ }
62
+ headers.set('cookie', await this.jar.getCookieString(url));
84
63
  }
85
64
  /**
86
65
  * Updates the authentication state with a new guest token from the Twitter API.
87
66
  */
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();
67
+ async updateGuestToken() {
68
+ const guestActivateUrl = 'https://api.twitter.com/1.1/guest/activate.json';
69
+ const headers = new headers_polyfill_1.Headers({
70
+ Authorization: `Bearer ${this.bearerToken}`,
71
+ Cookie: await this.jar.getCookieString(guestActivateUrl),
72
+ });
73
+ const res = await (0, cross_fetch_1.default)(guestActivateUrl, {
74
+ method: 'POST',
75
+ headers: headers,
109
76
  });
77
+ await (0, requests_1.updateCookieJar)(this.jar, res.headers);
78
+ if (!res.ok) {
79
+ throw new Error(await res.text());
80
+ }
81
+ const o = await res.json();
82
+ if (o == null || o['guest_token'] == null) {
83
+ throw new Error('guest_token not found.');
84
+ }
85
+ const newGuestToken = o['guest_token'];
86
+ if (typeof newGuestToken !== 'string') {
87
+ throw new Error('guest_token was not a string.');
88
+ }
89
+ this.guestToken = newGuestToken;
90
+ this.guestCreatedAt = new Date();
110
91
  }
111
92
  /**
112
93
  * Returns if the authentication token needs to be updated or not.
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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"}
@@ -0,0 +1,5 @@
1
+ export declare class ApiError extends Error {
2
+ readonly response: Response;
3
+ constructor(response: Response, message: string);
4
+ }
5
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;gBAAlB,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;CAGzD"}
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":";;;AAAA,MAAa,QAAS,SAAQ,KAAK;IACjC,YAAqB,QAAkB,EAAE,OAAe;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QADI,aAAQ,GAAR,QAAQ,CAAU;IAEvC,CAAC;CACF;AAJD,4BAIC"}
package/dist/profile.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { RequestApiResult } from './api';
2
- import { TwitterGuestAuth } from './auth';
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: TwitterGuestAuth): Promise<RequestApiResult<Profile>>;
66
- export declare function getUserIdByScreenName(screenName: string, auth: TwitterGuestAuth): Promise<RequestApiResult<string>>;
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
@@ -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,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,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,gBAAgB,GACrB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CA0CpC;AAID,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAyBnC"}
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,CAgDpC;AAID,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAyBnC"}
package/dist/profile.js CHANGED
@@ -1,18 +1,8 @@
1
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
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.getUserIdByScreenName = exports.getProfile = exports.parseProfile = void 0;
13
4
  const api_1 = require("./api");
14
5
  function parseProfile(user) {
15
- var _a, _b;
16
6
  const profile = {
17
7
  avatar: user.profile_image_url_https,
18
8
  banner: user.profile_banner_url,
@@ -35,75 +25,74 @@ function parseProfile(user) {
35
25
  if (user.created_at != null) {
36
26
  profile.joined = new Date(Date.parse(user.created_at));
37
27
  }
38
- const urls = (_b = (_a = user.entities) === null || _a === void 0 ? void 0 : _a.url) === null || _b === void 0 ? void 0 : _b.urls;
39
- if ((urls === null || urls === void 0 ? void 0 : urls.length) != null && (urls === null || urls === void 0 ? void 0 : urls.length) > 0) {
28
+ const urls = user.entities?.url?.urls;
29
+ if (urls?.length != null && urls?.length > 0) {
40
30
  profile.website = urls[0].expanded_url;
41
31
  }
42
32
  return profile;
43
33
  }
44
34
  exports.parseProfile = parseProfile;
45
- function getProfile(username, auth) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- const res = yield (0, api_1.requestApi)('https://api.twitter.com/graphql/4S2ihIKfF3xhp-ENxvUAfQ/UserByScreenName?variables=%7B%22screen_name%22%3A%22' +
48
- username +
49
- '%22%2C%22withHighlightedLabel%22%3Atrue%7D', auth);
50
- if (!res.success) {
51
- throw res.err;
52
- }
53
- const { value } = res;
54
- const { errors } = value;
55
- if (errors != null && errors.length > 0) {
56
- return {
57
- success: false,
58
- err: new Error(errors[0].message),
59
- };
60
- }
61
- const { user } = value.data;
62
- const { legacy } = user;
63
- if (user.rest_id == null || user.rest_id.length === 0) {
64
- return {
65
- success: false,
66
- err: new Error('rest_id not found.'),
67
- };
68
- }
69
- legacy.id_str = user.rest_id;
70
- if (legacy.screen_name == null || legacy.screen_name.length === 0) {
71
- return {
72
- success: false,
73
- err: new Error(`Either ${username} does not exist or is private.`),
74
- };
75
- }
35
+ async function getProfile(username, auth) {
36
+ const params = new URLSearchParams();
37
+ params.set('variables', JSON.stringify({
38
+ screen_name: username,
39
+ withHighlightedLabel: true,
40
+ }));
41
+ const res = await (0, api_1.requestApi)(`https://api.twitter.com/graphql/4S2ihIKfF3xhp-ENxvUAfQ/UserByScreenName?${params}`, auth);
42
+ if (!res.success) {
43
+ return res;
44
+ }
45
+ const { value } = res;
46
+ const { errors } = value;
47
+ if (errors != null && errors.length > 0) {
76
48
  return {
77
- success: true,
78
- value: parseProfile(user.legacy),
49
+ success: false,
50
+ err: new Error(errors[0].message),
51
+ };
52
+ }
53
+ const { user } = value.data;
54
+ const { legacy } = user;
55
+ if (user.rest_id == null || user.rest_id.length === 0) {
56
+ return {
57
+ success: false,
58
+ err: new Error('rest_id not found.'),
79
59
  };
80
- });
60
+ }
61
+ legacy.id_str = user.rest_id;
62
+ if (legacy.screen_name == null || legacy.screen_name.length === 0) {
63
+ return {
64
+ success: false,
65
+ err: new Error(`Either ${username} does not exist or is private.`),
66
+ };
67
+ }
68
+ return {
69
+ success: true,
70
+ value: parseProfile(user.legacy),
71
+ };
81
72
  }
82
73
  exports.getProfile = getProfile;
83
74
  const idCache = new Map();
84
- function getUserIdByScreenName(screenName, auth) {
85
- return __awaiter(this, void 0, void 0, function* () {
86
- const cached = idCache.get(screenName);
87
- if (cached != null) {
88
- return { success: true, value: cached };
89
- }
90
- const profileRes = yield getProfile(screenName, auth);
91
- if (!profileRes.success) {
92
- return profileRes;
93
- }
94
- const profile = profileRes.value;
95
- if (profile.userId != null) {
96
- idCache.set(screenName, profile.userId);
97
- return {
98
- success: true,
99
- value: profile.userId,
100
- };
101
- }
75
+ async function getUserIdByScreenName(screenName, auth) {
76
+ const cached = idCache.get(screenName);
77
+ if (cached != null) {
78
+ return { success: true, value: cached };
79
+ }
80
+ const profileRes = await getProfile(screenName, auth);
81
+ if (!profileRes.success) {
82
+ return profileRes;
83
+ }
84
+ const profile = profileRes.value;
85
+ if (profile.userId != null) {
86
+ idCache.set(screenName, profile.userId);
102
87
  return {
103
- success: false,
104
- err: new Error('User ID is undefined.'),
88
+ success: true,
89
+ value: profile.userId,
105
90
  };
106
- });
91
+ }
92
+ return {
93
+ success: false,
94
+ err: new Error('User ID is undefined.'),
95
+ };
107
96
  }
108
97
  exports.getUserIdByScreenName = getUserIdByScreenName;
109
98
  //# sourceMappingURL=profile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { CookieJar } from 'tough-cookie';
2
+ import type { Headers as HeadersPolyfill } from 'headers-polyfill';
3
+ /**
4
+ * Updates a cookie jar with the Set-Cookie headers from the provided Headers instance.
5
+ * @param cookieJar The cookie jar to update.
6
+ * @param headers The response headers to populate the cookie jar with.
7
+ */
8
+ export declare function updateCookieJar(cookieJar: CookieJar, headers: Headers | HeadersPolyfill): Promise<void>;
9
+ //# sourceMappingURL=requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,SAAS,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnE;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,GAAG,eAAe,iBAanC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.updateCookieJar = void 0;
7
+ const tough_cookie_1 = require("tough-cookie");
8
+ const set_cookie_parser_1 = __importDefault(require("set-cookie-parser"));
9
+ /**
10
+ * Updates a cookie jar with the Set-Cookie headers from the provided Headers instance.
11
+ * @param cookieJar The cookie jar to update.
12
+ * @param headers The response headers to populate the cookie jar with.
13
+ */
14
+ async function updateCookieJar(cookieJar, headers) {
15
+ const setCookieHeader = headers.get('set-cookie');
16
+ if (setCookieHeader) {
17
+ const cookies = set_cookie_parser_1.default.splitCookiesString(setCookieHeader);
18
+ for (const cookie of cookies.map((c) => tough_cookie_1.Cookie.parse(c))) {
19
+ if (!cookie)
20
+ continue;
21
+ await cookieJar.setCookie(cookie, `${cookie.secure ? 'https' : 'http'}://${cookie.domain}${cookie.path}`);
22
+ }
23
+ }
24
+ }
25
+ exports.updateCookieJar = updateCookieJar;
26
+ //# sourceMappingURL=requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAiD;AACjD,0EAA0C;AAG1C;;;;GAIG;AACI,KAAK,UAAU,eAAe,CACnC,SAAoB,EACpB,OAAkC;IAElC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,eAAe,EAAE;QACnB,MAAM,OAAO,GAAG,2BAAS,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC9D,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACxD,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,SAAS,CAAC,SAAS,CACvB,MAAM,EACN,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CACvE,CAAC;SACH;KACF;AACH,CAAC;AAfD,0CAeC"}
package/dist/scraper.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Cookie } from 'tough-cookie';
1
2
  import { Profile } from './profile';
2
3
  import { SearchMode } from './search';
3
4
  import { QueryProfilesResponse, QueryTweetsResponse } from './timeline';
@@ -73,6 +74,22 @@ export declare class Scraper {
73
74
  * @returns An async generator of tweets from the provided user.
74
75
  */
75
76
  getTweets(user: string, maxTweets: number, includeReplies: boolean): AsyncGenerator<Tweet>;
77
+ /**
78
+ * Fetches tweets from a Twitter user using their ID.
79
+ * @param userId The user whose tweets should be returned.
80
+ * @param maxTweets The maximum number of tweets to return.
81
+ * @param includeReplies Whether or not to include tweet replies.
82
+ * @returns An async generator of tweets from the provided user.
83
+ */
84
+ getTweetsByUserId(userId: string, maxTweets: number, includeReplies: boolean): AsyncGenerator<Tweet>;
85
+ /**
86
+ * Fetches the most recent tweet from a Twitter user.
87
+ * @param user The user whose latest tweet should be returned.
88
+ * @param includeReplies Whether or not to include tweet replies.
89
+ * @param includeRetweets Whether or not to include retweets.
90
+ * @returns The {@link Tweet} object or `null` if it couldn't be fetched.
91
+ */
92
+ getLatestTweet(user: string, includeReplies: boolean, includeRetweets: boolean): Promise<Tweet | null>;
76
93
  /**
77
94
  * Fetches a single tweet.
78
95
  * @param id The ID of the tweet to fetch.
@@ -85,18 +102,47 @@ export declare class Scraper {
85
102
  * @returns `true` if the scraper has a guest token; otherwise `false`.
86
103
  */
87
104
  hasGuestToken(): boolean;
105
+ /**
106
+ * Returns if the scraper is logged in as a real user.
107
+ * @returns `true` if the scraper is logged in with a real user account; otherwise `false`.
108
+ */
109
+ isLoggedIn(): Promise<boolean>;
110
+ /**
111
+ * Login to Twitter as a real Twitter account. This enables running
112
+ * searches.
113
+ * @param username The username of the Twitter account to login with.
114
+ * @param password The password of the Twitter account to login with.
115
+ * @param email The password to log in with, if you have email confirmation enabled.
116
+ */
117
+ login(username: string, password: string, email?: string): Promise<void>;
118
+ /**
119
+ * Log out of Twitter.
120
+ */
121
+ logout(): Promise<void>;
122
+ /**
123
+ * Retrieves all cookies for the current session.
124
+ * @returns All cookies for the current session.
125
+ */
126
+ getCookies(): Promise<Cookie[]>;
127
+ /**
128
+ * Set cookies for the current session.
129
+ * @param cookies The cookies to set for the current session.
130
+ */
131
+ setCookies(cookies: (string | Cookie)[]): Promise<void>;
88
132
  /**
89
133
  * Sets the optional cookie to be used in requests.
90
- * @param cookie The cookie to be used in requests.
134
+ * @param _cookie The cookie to be used in requests.
135
+ * @deprecated This function no longer represents any part of Twitter's auth flow.
91
136
  * @returns This scraper instance.
92
137
  */
93
- withCookie(cookie: string): Scraper;
138
+ withCookie(_cookie: string): Scraper;
94
139
  /**
95
140
  * Sets the optional CSRF token to be used in requests.
96
- * @param token The CSRF token to be used in requests.
141
+ * @param _token The CSRF token to be used in requests.
142
+ * @deprecated This function no longer represents any part of Twitter's auth flow.
97
143
  * @returns This scraper instance.
98
144
  */
99
- withXCsrfToken(token: string): Scraper;
145
+ withXCsrfToken(_token: string): Scraper;
100
146
  private handleResponse;
101
147
  }
102
148
  //# sourceMappingURL=scraper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scraper.d.ts","sourceRoot":"","sources":["../src/scraper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,OAAO,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAGL,UAAU,EAGX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExE,OAAO,EAAuB,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtD;;;GAGG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,UAAU,CAAmB;IAErC;;;OAGG;;IAMH;;;;OAIG;IACU,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3D;;;;OAIG;IACU,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvE;;;;;;;OAOG;IACI,YAAY,CACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,EACvB,UAAU,GAAE,UAA2B,GACtC,cAAc,CAAC,KAAK,CAAC;IAUxB;;;;;OAKG;IACI,cAAc,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,OAAO,CAAC;IAI1B;;;;;;;;OAQG;IACI,iBAAiB,CACtB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC;IAW/B;;;;;;OAMG;IACI,mBAAmB,CACxB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC;IAIjC;;;OAGG;IACI,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC;;;;;;OAMG;IACI,SAAS,CACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,GACtB,cAAc,CAAC,KAAK,CAAC;IAIxB;;;;;OAKG;IACI,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAI3E;;;OAGG;IACI,aAAa,IAAI,OAAO;IAI/B;;;;OAIG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAM1C;;;;OAIG;IACI,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAM7C,OAAO,CAAC,cAAc;CAOvB"}
1
+ {"version":3,"file":"scraper.d.ts","sourceRoot":"","sources":["../src/scraper.ts"],"names":[],"mappings":"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"}