rettiwt-api 6.0.7 → 6.0.8

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.
@@ -45,6 +45,7 @@ export declare class FetcherService {
45
45
  * @returns The header containing the transaction ID.
46
46
  */
47
47
  private _getTransactionHeader;
48
+ private _handleXMigration;
48
49
  /**
49
50
  * Validates the given args against the given resource.
50
51
  *
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.FetcherService = void 0;
37
37
  const axios_1 = __importStar(require("axios"));
38
38
  const cookiejar_1 = require("cookiejar");
39
+ const jsdom_1 = require("jsdom");
39
40
  const x_client_transaction_id_glacier_1 = require("x-client-transaction-id-glacier");
40
41
  const Groups_1 = require("../../collections/Groups");
41
42
  const Requests_1 = require("../../collections/Requests");
@@ -118,7 +119,7 @@ class FetcherService {
118
119
  */
119
120
  async _getTransactionHeader(method, url) {
120
121
  // Get the X homepage HTML document (using utility function)
121
- const document = await (0, x_client_transaction_id_glacier_1.handleXMigration)();
122
+ const document = await this._handleXMigration();
122
123
  // Create and initialize ClientTransaction instance
123
124
  const transaction = await x_client_transaction_id_glacier_1.ClientTransaction.create(document);
124
125
  // Getting the URL path excluding all params
@@ -131,6 +132,66 @@ class FetcherService {
131
132
  /* eslint-enable @typescript-eslint/naming-convention */
132
133
  };
133
134
  }
135
+ async _handleXMigration() {
136
+ // Fetch X.com homepage
137
+ const homePageResponse = await axios_1.default.get('https://x.com', {
138
+ headers: this.config.headers,
139
+ httpAgent: this.config.httpsAgent,
140
+ httpsAgent: this.config.httpsAgent,
141
+ });
142
+ // Parse HTML using linkedom
143
+ let dom = new jsdom_1.JSDOM(homePageResponse.data);
144
+ let document = dom.window.document;
145
+ // Check for migration redirection links
146
+ const migrationRedirectionRegex = new RegExp('(http(?:s)?://(?:www\\.)?(twitter|x){1}\\.com(/x)?/migrate([/?])?tok=[a-zA-Z0-9%\\-_]+)+', 'i');
147
+ const metaRefresh = document.querySelector("meta[http-equiv='refresh']");
148
+ const metaContent = metaRefresh ? metaRefresh.getAttribute('content') || '' : '';
149
+ const migrationRedirectionUrl = migrationRedirectionRegex.exec(metaContent) || migrationRedirectionRegex.exec(homePageResponse.data);
150
+ if (migrationRedirectionUrl) {
151
+ // Follow redirection URL
152
+ const redirectResponse = await axios_1.default.get(migrationRedirectionUrl[0], {
153
+ httpAgent: this.config.httpsAgent,
154
+ httpsAgent: this.config.httpsAgent,
155
+ });
156
+ dom = new jsdom_1.JSDOM(redirectResponse.data);
157
+ document = dom.window.document;
158
+ }
159
+ // Handle migration form if present
160
+ const migrationForm = document.querySelector("form[name='f']") ||
161
+ document.querySelector("form[action='https://x.com/x/migrate']");
162
+ if (migrationForm) {
163
+ const url = migrationForm.getAttribute('action') || 'https://x.com/x/migrate';
164
+ const method = migrationForm.getAttribute('method') || 'POST';
165
+ // Collect form input fields
166
+ const requestPayload = new FormData();
167
+ const inputFields = migrationForm.querySelectorAll('input');
168
+ for (const element of Array.from(inputFields)) {
169
+ const name = element.getAttribute('name');
170
+ const value = element.getAttribute('value');
171
+ if (name && value) {
172
+ requestPayload.append(name, value);
173
+ }
174
+ }
175
+ // Submit form using POST request
176
+ const formResponse = await axios_1.default.request({
177
+ method: method,
178
+ url: url,
179
+ data: requestPayload,
180
+ headers: {
181
+ /* eslint-disable @typescript-eslint/naming-convention */
182
+ 'Content-Type': 'multipart/form-data',
183
+ ...this.config.headers,
184
+ /* eslint-enable @typescript-eslint/naming-convention */
185
+ },
186
+ httpAgent: this.config.httpsAgent,
187
+ httpsAgent: this.config.httpsAgent,
188
+ });
189
+ dom = new jsdom_1.JSDOM(formResponse.data);
190
+ document = dom.window.document;
191
+ }
192
+ // Return final DOM document
193
+ return document;
194
+ }
134
195
  /**
135
196
  * Validates the given args against the given resource.
136
197
  *
@@ -1 +1 @@
1
- {"version":3,"file":"FetcherService.js","sourceRoot":"","sources":["../../../src/services/public/FetcherService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FetcherService.js","sourceRoot":"","sources":["../../../src/services/public/FetcherService.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rettiwt-api",
3
- "version": "6.0.7",
3
+ "version": "6.0.8",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "An API for fetching data from TwitterAPI, without any rate limits!",
@@ -33,6 +33,7 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/cookiejar": "^2.1.5",
36
+ "@types/jsdom": "^27.0.0",
36
37
  "@types/node": "^22.13.1",
37
38
  "@typescript-eslint/eslint-plugin": "^8.24.0",
38
39
  "@typescript-eslint/parser": "^8.24.0",
@@ -50,6 +51,7 @@
50
51
  "commander": "^11.1.0",
51
52
  "cookiejar": "^2.1.4",
52
53
  "https-proxy-agent": "^7.0.6",
54
+ "jsdom": "^27.2.0",
53
55
  "node-html-parser": "^7.0.1",
54
56
  "x-client-transaction-id-glacier": "^1.0.0"
55
57
  }
@@ -1,6 +1,7 @@
1
1
  import axios, { isAxiosError } from 'axios';
2
2
  import { Cookie } from 'cookiejar';
3
- import { ClientTransaction, handleXMigration } from 'x-client-transaction-id-glacier';
3
+ import { JSDOM } from 'jsdom';
4
+ import { ClientTransaction } from 'x-client-transaction-id-glacier';
4
5
 
5
6
  import { AllowGuestAuthenticationGroup, FetchResourcesGroup, PostResourcesGroup } from '../../collections/Groups';
6
7
  import { Requests } from '../../collections/Requests';
@@ -103,7 +104,7 @@ export class FetcherService {
103
104
  */
104
105
  private async _getTransactionHeader(method: string, url: string): Promise<ITransactionHeader> {
105
106
  // Get the X homepage HTML document (using utility function)
106
- const document = await handleXMigration();
107
+ const document = await this._handleXMigration();
107
108
 
108
109
  // Create and initialize ClientTransaction instance
109
110
  const transaction = await ClientTransaction.create(document);
@@ -121,6 +122,87 @@ export class FetcherService {
121
122
  };
122
123
  }
123
124
 
125
+ private async _handleXMigration(): Promise<Document> {
126
+ // Fetch X.com homepage
127
+ const homePageResponse = await axios.get<string>('https://x.com', {
128
+ headers: this.config.headers,
129
+ httpAgent: this.config.httpsAgent,
130
+ httpsAgent: this.config.httpsAgent,
131
+ });
132
+
133
+ // Parse HTML using linkedom
134
+ let dom = new JSDOM(homePageResponse.data);
135
+ let document = dom.window.document;
136
+
137
+ // Check for migration redirection links
138
+ const migrationRedirectionRegex = new RegExp(
139
+ '(http(?:s)?://(?:www\\.)?(twitter|x){1}\\.com(/x)?/migrate([/?])?tok=[a-zA-Z0-9%\\-_]+)+',
140
+ 'i',
141
+ );
142
+
143
+ const metaRefresh = document.querySelector("meta[http-equiv='refresh']");
144
+ const metaContent = metaRefresh ? metaRefresh.getAttribute('content') || '' : '';
145
+
146
+ const migrationRedirectionUrl =
147
+ migrationRedirectionRegex.exec(metaContent) || migrationRedirectionRegex.exec(homePageResponse.data);
148
+
149
+ if (migrationRedirectionUrl) {
150
+ // Follow redirection URL
151
+ const redirectResponse = await axios.get<string>(migrationRedirectionUrl[0], {
152
+ httpAgent: this.config.httpsAgent,
153
+ httpsAgent: this.config.httpsAgent,
154
+ });
155
+
156
+ dom = new JSDOM(redirectResponse.data);
157
+ document = dom.window.document;
158
+ }
159
+
160
+ // Handle migration form if present
161
+ const migrationForm =
162
+ document.querySelector("form[name='f']") ||
163
+ document.querySelector("form[action='https://x.com/x/migrate']");
164
+
165
+ if (migrationForm) {
166
+ const url = migrationForm.getAttribute('action') || 'https://x.com/x/migrate';
167
+ const method = migrationForm.getAttribute('method') || 'POST';
168
+
169
+ // Collect form input fields
170
+ const requestPayload = new FormData();
171
+
172
+ const inputFields = migrationForm.querySelectorAll('input');
173
+ for (const element of Array.from(inputFields)) {
174
+ const name = element.getAttribute('name');
175
+ const value = element.getAttribute('value');
176
+ if (name && value) {
177
+ requestPayload.append(name, value);
178
+ }
179
+ }
180
+
181
+ // Submit form using POST request
182
+ const formResponse = await axios.request<string>({
183
+ method: method,
184
+ url: url,
185
+ data: requestPayload,
186
+ headers: {
187
+ /* eslint-disable @typescript-eslint/naming-convention */
188
+
189
+ 'Content-Type': 'multipart/form-data',
190
+ ...this.config.headers,
191
+
192
+ /* eslint-enable @typescript-eslint/naming-convention */
193
+ },
194
+ httpAgent: this.config.httpsAgent,
195
+ httpsAgent: this.config.httpsAgent,
196
+ });
197
+
198
+ dom = new JSDOM(formResponse.data);
199
+ document = dom.window.document;
200
+ }
201
+
202
+ // Return final DOM document
203
+ return document;
204
+ }
205
+
124
206
  /**
125
207
  * Validates the given args against the given resource.
126
208
  *