@the-convocation/twitter-scraper 0.13.1 → 0.14.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 (104) hide show
  1. package/README.md +71 -38
  2. package/dist/default/cjs/index.js +2126 -0
  3. package/dist/default/cjs/index.js.map +1 -0
  4. package/dist/default/esm/index.mjs +2104 -0
  5. package/dist/default/esm/index.mjs.map +1 -0
  6. package/dist/node/cjs/index.cjs +2156 -0
  7. package/dist/node/cjs/index.cjs.map +1 -0
  8. package/dist/node/esm/index.mjs +2134 -0
  9. package/dist/node/esm/index.mjs.map +1 -0
  10. package/dist/{scraper.d.ts → types/index.d.ts} +284 -8
  11. package/examples/cors-proxy/package.json +18 -0
  12. package/examples/node-integration/package.json +12 -0
  13. package/examples/react-integration/README.md +30 -0
  14. package/examples/react-integration/index.html +13 -0
  15. package/examples/react-integration/package.json +29 -0
  16. package/examples/react-integration/public/vite.svg +1 -0
  17. package/examples/react-integration/tsconfig.node.json +11 -0
  18. package/examples/react-integration/vite.config.ts +7 -0
  19. package/package.json +20 -3
  20. package/rollup.config.mjs +61 -0
  21. package/test-setup.js +2 -0
  22. package/dist/_module.d.ts +0 -6
  23. package/dist/_module.d.ts.map +0 -1
  24. package/dist/_module.js +0 -8
  25. package/dist/_module.js.map +0 -1
  26. package/dist/api-data.d.ts +0 -47
  27. package/dist/api-data.d.ts.map +0 -1
  28. package/dist/api-data.js +0 -84
  29. package/dist/api-data.js.map +0 -1
  30. package/dist/api.d.ts +0 -32
  31. package/dist/api.d.ts.map +0 -1
  32. package/dist/api.js +0 -138
  33. package/dist/api.js.map +0 -1
  34. package/dist/auth-user.d.ts +0 -24
  35. package/dist/auth-user.d.ts.map +0 -1
  36. package/dist/auth-user.js +0 -307
  37. package/dist/auth-user.js.map +0 -1
  38. package/dist/auth.d.ts +0 -82
  39. package/dist/auth.d.ts.map +0 -1
  40. package/dist/auth.js +0 -122
  41. package/dist/auth.js.map +0 -1
  42. package/dist/errors.d.ts +0 -28
  43. package/dist/errors.d.ts.map +0 -1
  44. package/dist/errors.js +0 -26
  45. package/dist/errors.js.map +0 -1
  46. package/dist/profile.d.ts +0 -80
  47. package/dist/profile.d.ts.map +0 -1
  48. package/dist/profile.js +0 -127
  49. package/dist/profile.js.map +0 -1
  50. package/dist/relationships.d.ts +0 -8
  51. package/dist/relationships.d.ts.map +0 -1
  52. package/dist/relationships.js +0 -93
  53. package/dist/relationships.js.map +0 -1
  54. package/dist/requests.d.ts +0 -9
  55. package/dist/requests.d.ts.map +0 -1
  56. package/dist/requests.js +0 -26
  57. package/dist/requests.js.map +0 -1
  58. package/dist/scraper.d.ts.map +0 -1
  59. package/dist/scraper.js +0 -357
  60. package/dist/scraper.js.map +0 -1
  61. package/dist/search.d.ts +0 -19
  62. package/dist/search.d.ts.map +0 -1
  63. package/dist/search.js +0 -99
  64. package/dist/search.js.map +0 -1
  65. package/dist/timeline-async.d.ts +0 -15
  66. package/dist/timeline-async.d.ts.map +0 -1
  67. package/dist/timeline-async.js +0 -53
  68. package/dist/timeline-async.js.map +0 -1
  69. package/dist/timeline-list.d.ts +0 -19
  70. package/dist/timeline-list.d.ts.map +0 -1
  71. package/dist/timeline-list.js +0 -46
  72. package/dist/timeline-list.js.map +0 -1
  73. package/dist/timeline-relationship.d.ts +0 -39
  74. package/dist/timeline-relationship.d.ts.map +0 -1
  75. package/dist/timeline-relationship.js +0 -46
  76. package/dist/timeline-relationship.js.map +0 -1
  77. package/dist/timeline-search.d.ts +0 -20
  78. package/dist/timeline-search.d.ts.map +0 -1
  79. package/dist/timeline-search.js +0 -93
  80. package/dist/timeline-search.js.map +0 -1
  81. package/dist/timeline-tweet-util.d.ts +0 -9
  82. package/dist/timeline-tweet-util.d.ts.map +0 -1
  83. package/dist/timeline-tweet-util.js +0 -108
  84. package/dist/timeline-tweet-util.js.map +0 -1
  85. package/dist/timeline-v1.d.ts +0 -233
  86. package/dist/timeline-v1.d.ts.map +0 -1
  87. package/dist/timeline-v1.js +0 -197
  88. package/dist/timeline-v1.js.map +0 -1
  89. package/dist/timeline-v2.d.ts +0 -94
  90. package/dist/timeline-v2.d.ts.map +0 -1
  91. package/dist/timeline-v2.js +0 -253
  92. package/dist/timeline-v2.js.map +0 -1
  93. package/dist/trends.d.ts +0 -3
  94. package/dist/trends.d.ts.map +0 -1
  95. package/dist/trends.js +0 -39
  96. package/dist/trends.js.map +0 -1
  97. package/dist/tweets.d.ts +0 -117
  98. package/dist/tweets.d.ts.map +0 -1
  99. package/dist/tweets.js +0 -202
  100. package/dist/tweets.js.map +0 -1
  101. package/dist/type-util.d.ts +0 -6
  102. package/dist/type-util.d.ts.map +0 -1
  103. package/dist/type-util.js +0 -14
  104. package/dist/type-util.js.map +0 -1
package/dist/auth.d.ts DELETED
@@ -1,82 +0,0 @@
1
- import { CookieJar } from 'tough-cookie';
2
- import { Headers } from 'headers-polyfill';
3
- import fetch from 'cross-fetch';
4
- import { FetchTransformOptions } from './api';
5
- export interface TwitterAuthOptions {
6
- fetch: typeof fetch;
7
- transform: Partial<FetchTransformOptions>;
8
- }
9
- export interface TwitterAuth {
10
- fetch: typeof fetch;
11
- /**
12
- * Returns the current cookie jar.
13
- */
14
- cookieJar(): CookieJar;
15
- /**
16
- * Returns if a user is logged-in to Twitter through this instance.
17
- * @returns `true` if a user is logged-in; otherwise `false`.
18
- */
19
- isLoggedIn(): Promise<boolean>;
20
- /**
21
- * Logs into a Twitter account.
22
- * @param username The username to log in with.
23
- * @param password The password to log in with.
24
- * @param email The email to log in with, if you have email confirmation enabled.
25
- * @param twoFactorSecret The secret to generate two factor authentication tokens with, if you have two factor authentication enabled.
26
- */
27
- login(username: string, password: string, email?: string, twoFactorSecret?: string): Promise<void>;
28
- /**
29
- * Logs out of the current session.
30
- */
31
- logout(): Promise<void>;
32
- /**
33
- * Deletes the current guest token token.
34
- */
35
- deleteToken(): void;
36
- /**
37
- * Returns if the authentication state has a token.
38
- * @returns `true` if the authentication state has a token; `false` otherwise.
39
- */
40
- hasToken(): boolean;
41
- /**
42
- * Returns the time that authentication was performed.
43
- * @returns The time at which the authentication token was created, or `null` if it hasn't been created yet.
44
- */
45
- authenticatedAt(): Date | null;
46
- /**
47
- * Installs the authentication information into a headers-like object. If needed, the
48
- * authentication token will be updated from the API automatically.
49
- * @param headers A Headers instance representing a request's headers.
50
- */
51
- installTo(headers: Headers, url: string): Promise<void>;
52
- }
53
- /**
54
- * A guest authentication token manager. Automatically handles token refreshes.
55
- */
56
- export declare class TwitterGuestAuth implements TwitterAuth {
57
- protected readonly options?: Partial<TwitterAuthOptions> | undefined;
58
- protected bearerToken: string;
59
- protected jar: CookieJar;
60
- protected guestToken?: string;
61
- protected guestCreatedAt?: Date;
62
- fetch: typeof fetch;
63
- constructor(bearerToken: string, options?: Partial<TwitterAuthOptions> | undefined);
64
- cookieJar(): CookieJar;
65
- isLoggedIn(): Promise<boolean>;
66
- login(_username: string, _password: string, _email?: string): Promise<void>;
67
- logout(): Promise<void>;
68
- deleteToken(): void;
69
- hasToken(): boolean;
70
- authenticatedAt(): Date | null;
71
- installTo(headers: Headers, url: string): Promise<void>;
72
- /**
73
- * Updates the authentication state with a new guest token from the Twitter API.
74
- */
75
- protected updateGuestToken(): Promise<void>;
76
- /**
77
- * Returns if the authentication token needs to be updated or not.
78
- * @returns `true` if the token needs to be updated; `false` otherwise.
79
- */
80
- private shouldUpdate;
81
- }
82
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,KAAK,CAAC;IAEpB;;OAEG;IACH,SAAS,IAAI,SAAS,CAAC;IAEvB;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/B;;;;;;OAMG;IACH,KAAK,CACH,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;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,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAsBD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAUhD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;IAT7B,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;IAEhC,KAAK,EAAE,OAAO,KAAK,CAAC;gBAGlB,WAAW,EAAE,MAAM,EACA,OAAO,CAAC,yCAA6B;IAO1D,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,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7D;;OAEG;cACa,gBAAgB;IAiChC;;;OAGG;IACH,OAAO,CAAC,YAAY;CAQrB"}
package/dist/auth.js DELETED
@@ -1,122 +0,0 @@
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.TwitterGuestAuth = void 0;
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"));
11
- /**
12
- * Wraps the provided fetch function with transforms.
13
- * @param fetchFn The fetch function.
14
- * @param transform The transform options.
15
- * @returns The input fetch function, wrapped with the provided transforms.
16
- */
17
- function withTransform(fetchFn, transform) {
18
- return async (input, init) => {
19
- const fetchArgs = (await transform?.request?.(input, init)) ?? [
20
- input,
21
- init,
22
- ];
23
- const res = await fetchFn(...fetchArgs);
24
- return (await transform?.response?.(res)) ?? res;
25
- };
26
- }
27
- /**
28
- * A guest authentication token manager. Automatically handles token refreshes.
29
- */
30
- class TwitterGuestAuth {
31
- constructor(bearerToken, options) {
32
- this.options = options;
33
- this.fetch = withTransform(options?.fetch ?? cross_fetch_1.default, options?.transform);
34
- this.bearerToken = bearerToken;
35
- this.jar = new tough_cookie_1.CookieJar();
36
- }
37
- cookieJar() {
38
- return this.jar;
39
- }
40
- isLoggedIn() {
41
- return Promise.resolve(false);
42
- }
43
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
44
- login(_username, _password, _email) {
45
- return this.updateGuestToken();
46
- }
47
- logout() {
48
- this.deleteToken();
49
- this.jar = new tough_cookie_1.CookieJar();
50
- return Promise.resolve();
51
- }
52
- deleteToken() {
53
- delete this.guestToken;
54
- delete this.guestCreatedAt;
55
- }
56
- hasToken() {
57
- return this.guestToken != null;
58
- }
59
- authenticatedAt() {
60
- if (this.guestCreatedAt == null) {
61
- return null;
62
- }
63
- return new Date(this.guestCreatedAt);
64
- }
65
- async installTo(headers, url) {
66
- if (this.shouldUpdate()) {
67
- await this.updateGuestToken();
68
- }
69
- const token = this.guestToken;
70
- if (token == null) {
71
- throw new Error('Authentication token is null or undefined.');
72
- }
73
- headers.set('authorization', `Bearer ${this.bearerToken}`);
74
- headers.set('x-guest-token', token);
75
- const cookies = await this.jar.getCookies(url);
76
- const xCsrfToken = cookies.find((cookie) => cookie.key === 'ct0');
77
- if (xCsrfToken) {
78
- headers.set('x-csrf-token', xCsrfToken.value);
79
- }
80
- headers.set('cookie', await this.jar.getCookieString(url));
81
- }
82
- /**
83
- * Updates the authentication state with a new guest token from the Twitter API.
84
- */
85
- async updateGuestToken() {
86
- const guestActivateUrl = 'https://api.twitter.com/1.1/guest/activate.json';
87
- const headers = new headers_polyfill_1.Headers({
88
- Authorization: `Bearer ${this.bearerToken}`,
89
- Cookie: await this.jar.getCookieString(guestActivateUrl),
90
- });
91
- const res = await this.fetch(guestActivateUrl, {
92
- method: 'POST',
93
- headers: headers,
94
- });
95
- await (0, requests_1.updateCookieJar)(this.jar, res.headers);
96
- if (!res.ok) {
97
- throw new Error(await res.text());
98
- }
99
- const o = await res.json();
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
- * Returns if the authentication token needs to be updated or not.
112
- * @returns `true` if the token needs to be updated; `false` otherwise.
113
- */
114
- shouldUpdate() {
115
- return (!this.hasToken() ||
116
- (this.guestCreatedAt != null &&
117
- this.guestCreatedAt <
118
- new Date(new Date().valueOf() - 3 * 60 * 60 * 1000)));
119
- }
120
- }
121
- exports.TwitterGuestAuth = TwitterGuestAuth;
122
- //# sourceMappingURL=auth.js.map
package/dist/auth.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts DELETED
@@ -1,28 +0,0 @@
1
- export declare class ApiError extends Error {
2
- readonly response: Response;
3
- readonly data: any;
4
- private constructor();
5
- static fromResponse(response: Response): Promise<ApiError>;
6
- }
7
- interface Position {
8
- line: number;
9
- column: number;
10
- }
11
- interface TraceInfo {
12
- trace_id: string;
13
- }
14
- interface TwitterApiErrorExtensions {
15
- code?: number;
16
- kind?: string;
17
- name?: string;
18
- source?: string;
19
- tracing?: TraceInfo;
20
- }
21
- export interface TwitterApiErrorRaw extends TwitterApiErrorExtensions {
22
- message?: string;
23
- locations?: Position[];
24
- path?: string[];
25
- extensions?: TwitterApiErrorExtensions;
26
- }
27
- export {};
28
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IAE/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,IAAI,EAAE,GAAG;IAFpB,OAAO;WAQM,YAAY,CAAC,QAAQ,EAAE,QAAQ;CAa7C;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,yBAAyB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,yBAAyB;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACxC"}
package/dist/errors.js DELETED
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ApiError = void 0;
4
- class ApiError extends Error {
5
- constructor(response, data, message) {
6
- super(message);
7
- this.response = response;
8
- this.data = data;
9
- }
10
- static async fromResponse(response) {
11
- // Try our best to parse the result, but don't bother if we can't
12
- let data = undefined;
13
- try {
14
- data = await response.json();
15
- }
16
- catch {
17
- try {
18
- data = await response.text();
19
- }
20
- catch { }
21
- }
22
- return new ApiError(response, data, `Response status: ${response.status}`);
23
- }
24
- }
25
- exports.ApiError = ApiError;
26
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,QAAS,SAAQ,KAAK;IACjC,YACW,QAAkB,EAClB,IAAS,EAClB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,aAAQ,GAAR,QAAQ,CAAU;QAClB,SAAI,GAAJ,IAAI,CAAK;IAIpB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAkB;QAC1C,iEAAiE;QACjE,IAAI,IAAI,GAAgC,SAAS,CAAC;QAClD,IAAI;YACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC9B;QAAC,MAAM;YACN,IAAI;gBACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;aAC9B;YAAC,MAAM,GAAE;SACX;QAED,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,oBAAoB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;CACF;AAtBD,4BAsBC"}
package/dist/profile.d.ts DELETED
@@ -1,80 +0,0 @@
1
- import { RequestApiResult } from './api';
2
- import { TwitterAuth } from './auth';
3
- import { TwitterApiErrorRaw } from './errors';
4
- export interface LegacyUserRaw {
5
- created_at?: string;
6
- description?: string;
7
- entities?: {
8
- url?: {
9
- urls?: {
10
- expanded_url?: string;
11
- }[];
12
- };
13
- };
14
- favourites_count?: number;
15
- followers_count?: number;
16
- friends_count?: number;
17
- media_count?: number;
18
- statuses_count?: number;
19
- id_str?: string;
20
- listed_count?: number;
21
- name?: string;
22
- location: string;
23
- geo_enabled?: boolean;
24
- pinned_tweet_ids_str?: string[];
25
- profile_background_color?: string;
26
- profile_banner_url?: string;
27
- profile_image_url_https?: string;
28
- protected?: boolean;
29
- screen_name?: string;
30
- verified?: boolean;
31
- has_custom_timelines?: boolean;
32
- has_extended_profile?: boolean;
33
- url?: string;
34
- can_dm?: boolean;
35
- }
36
- /**
37
- * A parsed profile object.
38
- */
39
- export interface Profile {
40
- avatar?: string;
41
- banner?: string;
42
- biography?: string;
43
- birthday?: string;
44
- followersCount?: number;
45
- followingCount?: number;
46
- friendsCount?: number;
47
- mediaCount?: number;
48
- statusesCount?: number;
49
- isPrivate?: boolean;
50
- isVerified?: boolean;
51
- isBlueVerified?: boolean;
52
- joined?: Date;
53
- likesCount?: number;
54
- listedCount?: number;
55
- location: string;
56
- name?: string;
57
- pinnedTweetIds?: string[];
58
- tweetsCount?: number;
59
- url?: string;
60
- userId?: string;
61
- username?: string;
62
- website?: string;
63
- canDm?: boolean;
64
- }
65
- export interface UserRaw {
66
- data: {
67
- user: {
68
- result: {
69
- rest_id?: string;
70
- is_blue_verified?: boolean;
71
- legacy: LegacyUserRaw;
72
- };
73
- };
74
- };
75
- errors?: TwitterApiErrorRaw[];
76
- }
77
- export declare function parseProfile(user: LegacyUserRaw, isBlueVerified?: boolean): Profile;
78
- export declare function getProfile(username: string, auth: TwitterAuth): Promise<RequestApiResult<Profile>>;
79
- export declare function getUserIdByScreenName(screenName: string, auth: TwitterAuth): Promise<RequestApiResult<string>>;
80
- //# sourceMappingURL=profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
package/dist/profile.js DELETED
@@ -1,127 +0,0 @@
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.getUserIdByScreenName = exports.getProfile = exports.parseProfile = void 0;
7
- const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
8
- const api_1 = require("./api");
9
- function getAvatarOriginalSizeUrl(avatarUrl) {
10
- return avatarUrl ? avatarUrl.replace('_normal', '') : undefined;
11
- }
12
- function parseProfile(user, isBlueVerified) {
13
- const profile = {
14
- avatar: getAvatarOriginalSizeUrl(user.profile_image_url_https),
15
- banner: user.profile_banner_url,
16
- biography: user.description,
17
- followersCount: user.followers_count,
18
- followingCount: user.friends_count,
19
- friendsCount: user.friends_count,
20
- mediaCount: user.media_count,
21
- isPrivate: user.protected ?? false,
22
- isVerified: user.verified,
23
- likesCount: user.favourites_count,
24
- listedCount: user.listed_count,
25
- location: user.location,
26
- name: user.name,
27
- pinnedTweetIds: user.pinned_tweet_ids_str,
28
- tweetsCount: user.statuses_count,
29
- url: `https://twitter.com/${user.screen_name}`,
30
- userId: user.id_str,
31
- username: user.screen_name,
32
- isBlueVerified: isBlueVerified ?? false,
33
- canDm: user.can_dm,
34
- };
35
- if (user.created_at != null) {
36
- profile.joined = new Date(Date.parse(user.created_at));
37
- }
38
- const urls = user.entities?.url?.urls;
39
- if (urls?.length != null && urls?.length > 0) {
40
- profile.website = urls[0].expanded_url;
41
- }
42
- return profile;
43
- }
44
- exports.parseProfile = parseProfile;
45
- async function getProfile(username, auth) {
46
- const params = new URLSearchParams();
47
- params.set('variables', (0, json_stable_stringify_1.default)({
48
- screen_name: username,
49
- withSafetyModeUserFields: true,
50
- }));
51
- params.set('features', (0, json_stable_stringify_1.default)({
52
- hidden_profile_likes_enabled: false,
53
- hidden_profile_subscriptions_enabled: false,
54
- responsive_web_graphql_exclude_directive_enabled: true,
55
- verified_phone_label_enabled: false,
56
- subscriptions_verification_info_is_identity_verified_enabled: false,
57
- subscriptions_verification_info_verified_since_enabled: true,
58
- highlights_tweets_tab_ui_enabled: true,
59
- creator_subscriptions_tweet_preview_api_enabled: true,
60
- responsive_web_graphql_skip_user_profile_image_extensions_enabled: false,
61
- responsive_web_graphql_timeline_navigation_enabled: true,
62
- }));
63
- params.set('fieldToggles', (0, json_stable_stringify_1.default)({ withAuxiliaryUserLabels: false }));
64
- const res = await (0, api_1.requestApi)(`https://twitter.com/i/api/graphql/G3KGOASz96M-Qu0nwmGXNg/UserByScreenName?${params.toString()}`, auth);
65
- if (!res.success) {
66
- return res;
67
- }
68
- const { value } = res;
69
- const { errors } = value;
70
- if (errors != null && errors.length > 0) {
71
- return {
72
- success: false,
73
- err: new Error(errors[0].message),
74
- };
75
- }
76
- if (!value.data || !value.data.user || !value.data.user.result) {
77
- return {
78
- success: false,
79
- err: new Error('User not found.'),
80
- };
81
- }
82
- const { result: user } = value.data.user;
83
- const { legacy } = user;
84
- if (user.rest_id == null || user.rest_id.length === 0) {
85
- return {
86
- success: false,
87
- err: new Error('rest_id not found.'),
88
- };
89
- }
90
- legacy.id_str = user.rest_id;
91
- if (legacy.screen_name == null || legacy.screen_name.length === 0) {
92
- return {
93
- success: false,
94
- err: new Error(`Either ${username} does not exist or is private.`),
95
- };
96
- }
97
- return {
98
- success: true,
99
- value: parseProfile(user.legacy, user.is_blue_verified),
100
- };
101
- }
102
- exports.getProfile = getProfile;
103
- const idCache = new Map();
104
- async function getUserIdByScreenName(screenName, auth) {
105
- const cached = idCache.get(screenName);
106
- if (cached != null) {
107
- return { success: true, value: cached };
108
- }
109
- const profileRes = await getProfile(screenName, auth);
110
- if (!profileRes.success) {
111
- return profileRes;
112
- }
113
- const profile = profileRes.value;
114
- if (profile.userId != null) {
115
- idCache.set(screenName, profile.userId);
116
- return {
117
- success: true,
118
- value: profile.userId,
119
- };
120
- }
121
- return {
122
- success: false,
123
- err: new Error('User ID is undefined.'),
124
- };
125
- }
126
- exports.getUserIdByScreenName = getUserIdByScreenName;
127
- //# sourceMappingURL=profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { TwitterAuth } from './auth';
2
- import { Profile } from './profile';
3
- import { QueryProfilesResponse } from './timeline-v1';
4
- export declare function getFollowing(userId: string, maxProfiles: number, auth: TwitterAuth): AsyncGenerator<Profile, void>;
5
- export declare function getFollowers(userId: string, maxProfiles: number, auth: TwitterAuth): AsyncGenerator<Profile, void>;
6
- export declare function fetchProfileFollowing(userId: string, maxProfiles: number, auth: TwitterAuth, cursor?: string): Promise<QueryProfilesResponse>;
7
- export declare function fetchProfileFollowers(userId: string, maxProfiles: number, auth: TwitterAuth, cursor?: string): Promise<QueryProfilesResponse>;
8
- //# sourceMappingURL=relationships.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../src/relationships.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,OAAO,EAAyB,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAQtD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,GAChB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAI/B;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,GAChB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAI/B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC,CAShC;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC,CAShC"}
@@ -1,93 +0,0 @@
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.fetchProfileFollowers = exports.fetchProfileFollowing = exports.getFollowers = exports.getFollowing = void 0;
7
- const api_1 = require("./api");
8
- const timeline_async_1 = require("./timeline-async");
9
- const timeline_relationship_1 = require("./timeline-relationship");
10
- const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
11
- function getFollowing(userId, maxProfiles, auth) {
12
- return (0, timeline_async_1.getUserTimeline)(userId, maxProfiles, (q, mt, c) => {
13
- return fetchProfileFollowing(q, mt, auth, c);
14
- });
15
- }
16
- exports.getFollowing = getFollowing;
17
- function getFollowers(userId, maxProfiles, auth) {
18
- return (0, timeline_async_1.getUserTimeline)(userId, maxProfiles, (q, mt, c) => {
19
- return fetchProfileFollowers(q, mt, auth, c);
20
- });
21
- }
22
- exports.getFollowers = getFollowers;
23
- async function fetchProfileFollowing(userId, maxProfiles, auth, cursor) {
24
- const timeline = await getFollowingTimeline(userId, maxProfiles, auth, cursor);
25
- return (0, timeline_relationship_1.parseRelationshipTimeline)(timeline);
26
- }
27
- exports.fetchProfileFollowing = fetchProfileFollowing;
28
- async function fetchProfileFollowers(userId, maxProfiles, auth, cursor) {
29
- const timeline = await getFollowersTimeline(userId, maxProfiles, auth, cursor);
30
- return (0, timeline_relationship_1.parseRelationshipTimeline)(timeline);
31
- }
32
- exports.fetchProfileFollowers = fetchProfileFollowers;
33
- async function getFollowingTimeline(userId, maxItems, auth, cursor) {
34
- if (!auth.isLoggedIn()) {
35
- throw new Error('Scraper is not logged-in for profile following.');
36
- }
37
- if (maxItems > 50) {
38
- maxItems = 50;
39
- }
40
- const variables = {
41
- userId,
42
- count: maxItems,
43
- includePromotedContent: false,
44
- };
45
- const features = (0, api_1.addApiFeatures)({
46
- responsive_web_twitter_article_tweet_consumption_enabled: false,
47
- tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true,
48
- longform_notetweets_inline_media_enabled: true,
49
- responsive_web_media_download_video_enabled: false,
50
- });
51
- if (cursor != null && cursor != '') {
52
- variables['cursor'] = cursor;
53
- }
54
- const params = new URLSearchParams();
55
- params.set('features', (0, json_stable_stringify_1.default)(features));
56
- params.set('variables', (0, json_stable_stringify_1.default)(variables));
57
- const res = await (0, api_1.requestApi)(`https://twitter.com/i/api/graphql/iSicc7LrzWGBgDPL0tM_TQ/Following?${params.toString()}`, auth);
58
- if (!res.success) {
59
- throw res.err;
60
- }
61
- return res.value;
62
- }
63
- async function getFollowersTimeline(userId, maxItems, auth, cursor) {
64
- if (!auth.isLoggedIn()) {
65
- throw new Error('Scraper is not logged-in for profile followers.');
66
- }
67
- if (maxItems > 50) {
68
- maxItems = 50;
69
- }
70
- const variables = {
71
- userId,
72
- count: maxItems,
73
- includePromotedContent: false,
74
- };
75
- const features = (0, api_1.addApiFeatures)({
76
- responsive_web_twitter_article_tweet_consumption_enabled: false,
77
- tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true,
78
- longform_notetweets_inline_media_enabled: true,
79
- responsive_web_media_download_video_enabled: false,
80
- });
81
- if (cursor != null && cursor != '') {
82
- variables['cursor'] = cursor;
83
- }
84
- const params = new URLSearchParams();
85
- params.set('features', (0, json_stable_stringify_1.default)(features));
86
- params.set('variables', (0, json_stable_stringify_1.default)(variables));
87
- const res = await (0, api_1.requestApi)(`https://twitter.com/i/api/graphql/rRXFSG5vR6drKr5M37YOTw/Followers?${params.toString()}`, auth);
88
- if (!res.success) {
89
- throw res.err;
90
- }
91
- return res.value;
92
- }
93
- //# sourceMappingURL=relationships.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relationships.js","sourceRoot":"","sources":["../src/relationships.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}