rettiwt-api 4.2.0 → 5.0.0-alpha.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/.eslintrc.js +2 -3
- package/.github/workflows/documentation.yml +1 -1
- package/.github/workflows/publish-alpha.yml +1 -1
- package/.github/workflows/publish.yml +1 -1
- package/.prettierignore +1 -1
- package/.tool-versions +1 -1
- package/README.md +100 -100
- package/dist/Rettiwt.d.ts +1 -1
- package/dist/Rettiwt.js +15 -8
- package/dist/Rettiwt.js.map +1 -1
- package/dist/cli.js +8 -11
- package/dist/cli.js.map +1 -1
- package/dist/collections/Extractors.d.ts +1 -0
- package/dist/collections/Extractors.js +38 -69
- package/dist/collections/Extractors.js.map +1 -1
- package/dist/collections/Groups.js +2 -1
- package/dist/collections/Groups.js.map +1 -1
- package/dist/collections/Requests.d.ts +3 -3
- package/dist/collections/Requests.js +36 -35
- package/dist/collections/Requests.js.map +1 -1
- package/dist/commands/List.js +21 -78
- package/dist/commands/List.js.map +1 -1
- package/dist/commands/Tweet.js +185 -370
- package/dist/commands/Tweet.js.map +1 -1
- package/dist/commands/User.js +129 -306
- package/dist/commands/User.js.map +1 -1
- package/dist/enums/Authentication.d.ts +18 -0
- package/dist/enums/Authentication.js +24 -0
- package/dist/enums/Authentication.js.map +1 -0
- package/dist/enums/Data.d.ts +12 -0
- package/dist/enums/Data.js +14 -1
- package/dist/enums/Data.js.map +1 -1
- package/dist/enums/Resource.d.ts +1 -0
- package/dist/enums/Resource.js +1 -0
- package/dist/enums/Resource.js.map +1 -1
- package/dist/helper/CliUtils.js +1 -2
- package/dist/helper/CliUtils.js.map +1 -1
- package/dist/helper/JsonUtils.js +6 -11
- package/dist/helper/JsonUtils.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/models/args/FetchArgs.d.ts +4 -133
- package/dist/models/args/FetchArgs.js +12 -416
- package/dist/models/args/FetchArgs.js.map +1 -1
- package/dist/models/args/PostArgs.d.ts +16 -101
- package/dist/models/args/PostArgs.js +26 -258
- package/dist/models/args/PostArgs.js.map +1 -1
- package/dist/models/auth/AccountCredential.d.ts +13 -0
- package/dist/models/auth/AccountCredential.js +21 -0
- package/dist/models/auth/AccountCredential.js.map +1 -0
- package/dist/models/auth/AuthCookie.d.ts +19 -0
- package/dist/models/auth/AuthCookie.js +53 -0
- package/dist/models/auth/AuthCookie.js.map +1 -0
- package/dist/models/auth/AuthCredential.d.ts +28 -0
- package/dist/models/auth/AuthCredential.js +76 -0
- package/dist/models/auth/AuthCredential.js.map +1 -0
- package/dist/models/data/CursoredData.d.ts +3 -4
- package/dist/models/data/CursoredData.js +19 -19
- package/dist/models/data/CursoredData.js.map +1 -1
- package/dist/models/data/List.d.ts +2 -8
- package/dist/models/data/List.js +10 -4
- package/dist/models/data/List.js.map +1 -1
- package/dist/models/data/Notification.d.ts +5 -21
- package/dist/models/data/Notification.js +24 -33
- package/dist/models/data/Notification.js.map +1 -1
- package/dist/models/data/Tweet.d.ts +4 -17
- package/dist/models/data/Tweet.js +83 -73
- package/dist/models/data/Tweet.js.map +1 -1
- package/dist/models/data/User.d.ts +2 -15
- package/dist/models/data/User.js +33 -23
- package/dist/models/data/User.js.map +1 -1
- package/dist/models/errors/ApiError.js +8 -24
- package/dist/models/errors/ApiError.js.map +1 -1
- package/dist/models/errors/HttpError.js +8 -24
- package/dist/models/errors/HttpError.js.map +1 -1
- package/dist/models/errors/RettiwtError.js +5 -23
- package/dist/models/errors/RettiwtError.js.map +1 -1
- package/dist/models/errors/TimeoutError.js +5 -22
- package/dist/models/errors/TimeoutError.js.map +1 -1
- package/dist/services/{public → internal}/AuthService.d.ts +5 -34
- package/dist/services/internal/AuthService.js +109 -0
- package/dist/services/internal/AuthService.js.map +1 -0
- package/dist/services/internal/ErrorService.js +38 -40
- package/dist/services/internal/ErrorService.js.map +1 -1
- package/dist/services/internal/LogService.d.ts +0 -6
- package/dist/services/internal/LogService.js +12 -32
- package/dist/services/internal/LogService.js.map +1 -1
- package/dist/services/public/FetcherService.d.ts +5 -3
- package/dist/services/public/FetcherService.js +96 -141
- package/dist/services/public/FetcherService.js.map +1 -1
- package/dist/services/public/ListService.js +31 -100
- package/dist/services/public/ListService.js.map +1 -1
- package/dist/services/public/TweetService.d.ts +29 -4
- package/dist/services/public/TweetService.js +208 -386
- package/dist/services/public/TweetService.js.map +1 -1
- package/dist/services/public/UserService.js +186 -385
- package/dist/services/public/UserService.js.map +1 -1
- package/dist/types/RettiwtConfig.d.ts +8 -0
- package/dist/types/args/FetchArgs.d.ts +59 -0
- package/dist/types/args/FetchArgs.js +3 -0
- package/dist/types/args/FetchArgs.js.map +1 -0
- package/dist/types/args/PostArgs.d.ts +56 -0
- package/dist/types/args/PostArgs.js +3 -0
- package/dist/types/args/PostArgs.js.map +1 -0
- package/dist/types/auth/AccountCredential.d.ts +11 -0
- package/dist/types/auth/AccountCredential.js +3 -0
- package/dist/types/auth/AccountCredential.js.map +1 -0
- package/dist/types/auth/AuthCookie.d.ts +13 -0
- package/dist/types/auth/AuthCookie.js +3 -0
- package/dist/types/auth/AuthCookie.js.map +1 -0
- package/dist/types/auth/AuthCredential.d.ts +21 -0
- package/dist/types/auth/AuthCredential.js +3 -0
- package/dist/types/auth/AuthCredential.js.map +1 -0
- package/dist/types/data/CursoredData.d.ts +25 -0
- package/dist/types/data/CursoredData.js +3 -0
- package/dist/types/data/CursoredData.js.map +1 -0
- package/dist/types/data/List.d.ts +21 -0
- package/dist/types/data/List.js +3 -0
- package/dist/types/data/List.js.map +1 -0
- package/dist/types/data/Notification.d.ts +20 -0
- package/dist/types/data/Notification.js +3 -0
- package/dist/types/data/Notification.js.map +1 -0
- package/dist/types/data/Tweet.d.ts +71 -0
- package/dist/types/data/Tweet.js +3 -0
- package/dist/types/data/Tweet.js.map +1 -0
- package/dist/types/data/User.d.ts +35 -0
- package/dist/types/data/User.js +3 -0
- package/dist/types/data/User.js.map +1 -0
- package/eslint.config.mjs +17 -0
- package/package.json +22 -19
- package/src/Rettiwt.ts +1 -1
- package/src/cli.ts +0 -2
- package/src/collections/Extractors.ts +2 -0
- package/src/collections/Groups.ts +1 -0
- package/src/collections/Requests.ts +37 -36
- package/src/enums/Authentication.ts +19 -0
- package/src/enums/Data.ts +13 -0
- package/src/enums/Resource.ts +1 -0
- package/src/helper/JsonUtils.ts +1 -1
- package/src/index.ts +1 -2
- package/src/models/args/FetchArgs.ts +4 -470
- package/src/models/args/PostArgs.ts +20 -285
- package/src/models/auth/AccountCredential.ts +19 -0
- package/src/models/auth/AuthCookie.ts +56 -0
- package/src/models/auth/AuthCredential.ts +83 -0
- package/src/models/data/CursoredData.ts +12 -9
- package/src/models/data/List.ts +3 -14
- package/src/models/data/Notification.ts +6 -28
- package/src/models/data/Tweet.ts +17 -43
- package/src/models/data/User.ts +5 -31
- package/src/services/{public → internal}/AuthService.ts +28 -55
- package/src/services/internal/LogService.ts +4 -19
- package/src/services/public/FetcherService.ts +18 -8
- package/src/services/public/TweetService.ts +44 -4
- package/src/services/public/UserService.ts +2 -2
- package/src/types/RettiwtConfig.ts +7 -0
- package/src/types/args/FetchArgs.ts +64 -0
- package/src/types/args/PostArgs.ts +62 -0
- package/src/types/auth/AccountCredential.ts +13 -0
- package/src/types/auth/AuthCookie.ts +20 -0
- package/src/types/auth/AuthCredential.ts +26 -0
- package/src/types/data/CursoredData.ts +28 -0
- package/src/types/data/List.ts +27 -0
- package/src/types/data/Notification.ts +26 -0
- package/src/types/data/Tweet.ts +96 -0
- package/src/types/data/User.ts +48 -0
- package/tsconfig.json +7 -5
- package/.eslintignore +0 -3
- package/dist/commands/Auth.d.ts +0 -10
- package/dist/commands/Auth.js +0 -101
- package/dist/commands/Auth.js.map +0 -1
- package/dist/models/errors/DataValidationError.d.ts +0 -30
- package/dist/models/errors/DataValidationError.js +0 -34
- package/dist/models/errors/DataValidationError.js.map +0 -1
- package/dist/services/public/AuthService.js +0 -205
- package/dist/services/public/AuthService.js.map +0 -1
- package/src/commands/Auth.ts +0 -46
- package/src/models/errors/DataValidationError.ts +0 -44
|
@@ -1,98 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __assign = (this && this.__assign) || function () {
|
|
18
|
-
__assign = Object.assign || function(t) {
|
|
19
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
-
s = arguments[i];
|
|
21
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
-
t[p] = s[p];
|
|
23
|
-
}
|
|
24
|
-
return t;
|
|
25
|
-
};
|
|
26
|
-
return __assign.apply(this, arguments);
|
|
27
|
-
};
|
|
28
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
31
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
32
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
33
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
34
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
38
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
39
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
40
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
41
|
-
function step(op) {
|
|
42
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
43
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
44
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
45
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
46
|
-
switch (op[0]) {
|
|
47
|
-
case 0: case 1: t = op; break;
|
|
48
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
49
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
50
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
51
|
-
default:
|
|
52
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
53
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
54
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
55
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
56
|
-
if (t[2]) _.ops.pop();
|
|
57
|
-
_.trys.pop(); continue;
|
|
58
|
-
}
|
|
59
|
-
op = body.call(thisArg, _);
|
|
60
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
61
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
65
|
-
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
66
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
67
|
-
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
68
|
-
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
69
|
-
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
|
70
|
-
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
71
|
-
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
72
|
-
function fulfill(value) { resume("next", value); }
|
|
73
|
-
function reject(value) { resume("throw", value); }
|
|
74
|
-
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
75
|
-
};
|
|
76
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
77
3
|
exports.TweetService = void 0;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const Extractors_1 = require("../../collections/Extractors");
|
|
6
|
+
const Resource_1 = require("../../enums/Resource");
|
|
7
|
+
const FetcherService_1 = require("./FetcherService");
|
|
82
8
|
/**
|
|
83
9
|
* Handles interacting with resources related to tweets.
|
|
84
10
|
*
|
|
85
11
|
* @public
|
|
86
12
|
*/
|
|
87
|
-
|
|
88
|
-
__extends(TweetService, _super);
|
|
13
|
+
class TweetService extends FetcherService_1.FetcherService {
|
|
89
14
|
/**
|
|
90
15
|
* @param config - The config object for configuring the Rettiwt instance.
|
|
91
16
|
*
|
|
92
17
|
* @internal
|
|
93
18
|
*/
|
|
94
|
-
|
|
95
|
-
|
|
19
|
+
constructor(config) {
|
|
20
|
+
super(config);
|
|
96
21
|
}
|
|
97
22
|
/**
|
|
98
23
|
* Get the details of a tweet.
|
|
@@ -120,30 +45,27 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
120
45
|
* });
|
|
121
46
|
* ```
|
|
122
47
|
*/
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
};
|
|
48
|
+
async details(id) {
|
|
49
|
+
let resource;
|
|
50
|
+
// If user is authenticated
|
|
51
|
+
if (this.userId != undefined) {
|
|
52
|
+
resource = Resource_1.EResourceType.TWEET_DETAILS_ALT;
|
|
53
|
+
// Fetching raw tweet details
|
|
54
|
+
const response = await this.request(resource, { id: id });
|
|
55
|
+
// Deserializing response
|
|
56
|
+
const data = Extractors_1.extractors[resource](response, id);
|
|
57
|
+
return data;
|
|
58
|
+
}
|
|
59
|
+
// If user is not authenticated
|
|
60
|
+
else {
|
|
61
|
+
resource = Resource_1.EResourceType.TWEET_DETAILS;
|
|
62
|
+
// Fetching raw tweet details
|
|
63
|
+
const response = await this.request(resource, { id: id });
|
|
64
|
+
// Deserializing response
|
|
65
|
+
const data = Extractors_1.extractors[resource](response, id);
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
147
69
|
/**
|
|
148
70
|
* Like a tweet.
|
|
149
71
|
*
|
|
@@ -168,25 +90,16 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
168
90
|
* });
|
|
169
91
|
* ```
|
|
170
92
|
*/
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
switch (_b.label) {
|
|
177
|
-
case 0:
|
|
178
|
-
resource = Resource_1.EResourceType.TWEET_LIKE;
|
|
179
|
-
return [4 /*yield*/, this.request(resource, {
|
|
180
|
-
id: id,
|
|
181
|
-
})];
|
|
182
|
-
case 1:
|
|
183
|
-
response = _b.sent();
|
|
184
|
-
data = (_a = Extractors_1.extractors[resource](response)) !== null && _a !== void 0 ? _a : false;
|
|
185
|
-
return [2 /*return*/, data];
|
|
186
|
-
}
|
|
187
|
-
});
|
|
93
|
+
async like(id) {
|
|
94
|
+
const resource = Resource_1.EResourceType.TWEET_LIKE;
|
|
95
|
+
// Favoriting the tweet
|
|
96
|
+
const response = await this.request(resource, {
|
|
97
|
+
id: id,
|
|
188
98
|
});
|
|
189
|
-
|
|
99
|
+
// Deserializing response
|
|
100
|
+
const data = Extractors_1.extractors[resource](response) ?? false;
|
|
101
|
+
return data;
|
|
102
|
+
}
|
|
190
103
|
/**
|
|
191
104
|
* Get the list of tweets from a tweet list.
|
|
192
105
|
*
|
|
@@ -215,28 +128,20 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
215
128
|
*
|
|
216
129
|
* @remarks Due a bug in Twitter API, the count is ignored when no cursor is provided and defaults to 100.
|
|
217
130
|
*/
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
return [4 /*yield*/, this.request(resource, {
|
|
226
|
-
id: id,
|
|
227
|
-
count: count,
|
|
228
|
-
cursor: cursor,
|
|
229
|
-
})];
|
|
230
|
-
case 1:
|
|
231
|
-
response = _a.sent();
|
|
232
|
-
data = Extractors_1.extractors[resource](response);
|
|
233
|
-
// Sorting the tweets by date, from recent to oldest
|
|
234
|
-
data.list.sort(function (a, b) { return new Date(b.createdAt).valueOf() - new Date(a.createdAt).valueOf(); });
|
|
235
|
-
return [2 /*return*/, data];
|
|
236
|
-
}
|
|
237
|
-
});
|
|
131
|
+
async list(id, count, cursor) {
|
|
132
|
+
const resource = Resource_1.EResourceType.LIST_TWEETS;
|
|
133
|
+
// Fetching raw list tweets
|
|
134
|
+
const response = await this.request(resource, {
|
|
135
|
+
id: id,
|
|
136
|
+
count: count,
|
|
137
|
+
cursor: cursor,
|
|
238
138
|
});
|
|
239
|
-
|
|
139
|
+
// Deserializing response
|
|
140
|
+
const data = Extractors_1.extractors[resource](response);
|
|
141
|
+
// Sorting the tweets by date, from recent to oldest
|
|
142
|
+
data.list.sort((a, b) => new Date(b.createdAt).valueOf() - new Date(a.createdAt).valueOf());
|
|
143
|
+
return data;
|
|
144
|
+
}
|
|
240
145
|
/**
|
|
241
146
|
* Post a tweet.
|
|
242
147
|
*
|
|
@@ -316,22 +221,50 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
316
221
|
* });
|
|
317
222
|
* ```
|
|
318
223
|
*/
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
224
|
+
async post(options) {
|
|
225
|
+
const resource = Resource_1.EResourceType.TWEET_POST;
|
|
226
|
+
// Posting the tweet
|
|
227
|
+
const response = await this.request(resource, { tweet: options });
|
|
228
|
+
// Deserializing response
|
|
229
|
+
const data = Extractors_1.extractors[resource](response);
|
|
230
|
+
return data;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get the list of replies to a tweet.
|
|
234
|
+
*
|
|
235
|
+
* @param id - The id of the target tweet.
|
|
236
|
+
* @param cursor - The cursor to the batch of replies to fetch.
|
|
237
|
+
*
|
|
238
|
+
* @returns The list of replies to the given tweet.
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```
|
|
242
|
+
* import { Rettiwt } from 'rettiwt-api';
|
|
243
|
+
*
|
|
244
|
+
* // Creating a new Rettiwt instance using the given 'API_KEY'
|
|
245
|
+
* const rettiwt = new Rettiwt({ apiKey: API_KEY });
|
|
246
|
+
*
|
|
247
|
+
* // Fetching the first 100 replies to the Tweet with id '1234567890'
|
|
248
|
+
* rettiwt.tweet.replies('1234567890')
|
|
249
|
+
* .then(res => {
|
|
250
|
+
* console.log(res);
|
|
251
|
+
* })
|
|
252
|
+
* .catch(err => {
|
|
253
|
+
* console.log(err);
|
|
254
|
+
* });
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
async replies(id, cursor) {
|
|
258
|
+
const resource = Resource_1.EResourceType.TWEET_REPLIES;
|
|
259
|
+
// Fetching raw list of replies
|
|
260
|
+
const response = await this.request(resource, {
|
|
261
|
+
id: id,
|
|
262
|
+
cursor: cursor,
|
|
333
263
|
});
|
|
334
|
-
|
|
264
|
+
// Deserializing response
|
|
265
|
+
const data = Extractors_1.extractors[resource](response);
|
|
266
|
+
return data;
|
|
267
|
+
}
|
|
335
268
|
/**
|
|
336
269
|
* Retweet a tweet.
|
|
337
270
|
*
|
|
@@ -356,23 +289,14 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
356
289
|
* });
|
|
357
290
|
* ```
|
|
358
291
|
*/
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
return [4 /*yield*/, this.request(resource, { id: id })];
|
|
368
|
-
case 1:
|
|
369
|
-
response = _b.sent();
|
|
370
|
-
data = (_a = Extractors_1.extractors[resource](response)) !== null && _a !== void 0 ? _a : false;
|
|
371
|
-
return [2 /*return*/, data];
|
|
372
|
-
}
|
|
373
|
-
});
|
|
374
|
-
});
|
|
375
|
-
};
|
|
292
|
+
async retweet(id) {
|
|
293
|
+
const resource = Resource_1.EResourceType.TWEET_RETWEET;
|
|
294
|
+
// Retweeting the tweet
|
|
295
|
+
const response = await this.request(resource, { id: id });
|
|
296
|
+
// Deserializing response
|
|
297
|
+
const data = Extractors_1.extractors[resource](response) ?? false;
|
|
298
|
+
return data;
|
|
299
|
+
}
|
|
376
300
|
/**
|
|
377
301
|
* Get the list of users who retweeted a tweet.
|
|
378
302
|
*
|
|
@@ -399,26 +323,18 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
399
323
|
* });
|
|
400
324
|
* ```
|
|
401
325
|
*/
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
return [4 /*yield*/, this.request(resource, {
|
|
410
|
-
id: id,
|
|
411
|
-
count: count,
|
|
412
|
-
cursor: cursor,
|
|
413
|
-
})];
|
|
414
|
-
case 1:
|
|
415
|
-
response = _a.sent();
|
|
416
|
-
data = Extractors_1.extractors[resource](response);
|
|
417
|
-
return [2 /*return*/, data];
|
|
418
|
-
}
|
|
419
|
-
});
|
|
326
|
+
async retweeters(id, count, cursor) {
|
|
327
|
+
const resource = Resource_1.EResourceType.TWEET_RETWEETERS;
|
|
328
|
+
// Fetching raw list of retweeters
|
|
329
|
+
const response = await this.request(resource, {
|
|
330
|
+
id: id,
|
|
331
|
+
count: count,
|
|
332
|
+
cursor: cursor,
|
|
420
333
|
});
|
|
421
|
-
|
|
334
|
+
// Deserializing response
|
|
335
|
+
const data = Extractors_1.extractors[resource](response);
|
|
336
|
+
return data;
|
|
337
|
+
}
|
|
422
338
|
/**
|
|
423
339
|
* Schedule a tweet.
|
|
424
340
|
*
|
|
@@ -447,22 +363,14 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
447
363
|
* @remarks
|
|
448
364
|
* Scheduling a tweet is similar to {@link post}ing, except that an extra parameter called `scheduleFor` is used.
|
|
449
365
|
*/
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
case 1:
|
|
459
|
-
response = _a.sent();
|
|
460
|
-
data = Extractors_1.extractors[resource](response);
|
|
461
|
-
return [2 /*return*/, data];
|
|
462
|
-
}
|
|
463
|
-
});
|
|
464
|
-
});
|
|
465
|
-
};
|
|
366
|
+
async schedule(options) {
|
|
367
|
+
const resource = Resource_1.EResourceType.TWEET_SCHEDULE;
|
|
368
|
+
// Scheduling the tweet
|
|
369
|
+
const response = await this.request(resource, { tweet: options });
|
|
370
|
+
// Deserializing response
|
|
371
|
+
const data = Extractors_1.extractors[resource](response);
|
|
372
|
+
return data;
|
|
373
|
+
}
|
|
466
374
|
/**
|
|
467
375
|
* Search for tweets using a filter.
|
|
468
376
|
*
|
|
@@ -492,29 +400,21 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
492
400
|
*
|
|
493
401
|
* @remarks For details about available filters, refer to {@link TweetFilter}
|
|
494
402
|
*/
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
filter: filter,
|
|
504
|
-
count: count,
|
|
505
|
-
cursor: cursor,
|
|
506
|
-
results: results,
|
|
507
|
-
})];
|
|
508
|
-
case 1:
|
|
509
|
-
response = _a.sent();
|
|
510
|
-
data = Extractors_1.extractors[resource](response);
|
|
511
|
-
// Sorting the tweets by date, from recent to oldest
|
|
512
|
-
data.list.sort(function (a, b) { return new Date(b.createdAt).valueOf() - new Date(a.createdAt).valueOf(); });
|
|
513
|
-
return [2 /*return*/, data];
|
|
514
|
-
}
|
|
515
|
-
});
|
|
403
|
+
async search(filter, count, cursor, results) {
|
|
404
|
+
const resource = Resource_1.EResourceType.TWEET_SEARCH;
|
|
405
|
+
// Fetching raw list of filtered tweets
|
|
406
|
+
const response = await this.request(resource, {
|
|
407
|
+
filter: filter,
|
|
408
|
+
count: count,
|
|
409
|
+
cursor: cursor,
|
|
410
|
+
results: results,
|
|
516
411
|
});
|
|
517
|
-
|
|
412
|
+
// Deserializing response
|
|
413
|
+
const data = Extractors_1.extractors[resource](response);
|
|
414
|
+
// Sorting the tweets by date, from recent to oldest
|
|
415
|
+
data.list.sort((a, b) => new Date(b.createdAt).valueOf() - new Date(a.createdAt).valueOf());
|
|
416
|
+
return data;
|
|
417
|
+
}
|
|
518
418
|
/**
|
|
519
419
|
* Stream tweets in pseudo real-time using a filter.
|
|
520
420
|
*
|
|
@@ -547,61 +447,35 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
547
447
|
* streamTweets();
|
|
548
448
|
* ```
|
|
549
449
|
*/
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
case 6:
|
|
580
|
-
_b.sent();
|
|
581
|
-
_b.label = 7;
|
|
582
|
-
case 7:
|
|
583
|
-
_i++;
|
|
584
|
-
return [3 /*break*/, 4];
|
|
585
|
-
case 8:
|
|
586
|
-
// Store the most recent tweet ID from this batch
|
|
587
|
-
if (tweets.list.length > 0 && cursor === undefined) {
|
|
588
|
-
nextSinceId = tweets.list[0].id;
|
|
589
|
-
}
|
|
590
|
-
// If there are more tweets to fetch, adjust the cursor value
|
|
591
|
-
if (tweets.list.length > 0 && tweets.next) {
|
|
592
|
-
cursor = tweets.next.value;
|
|
593
|
-
}
|
|
594
|
-
// Else, start the next iteration from this batch's most recent tweet
|
|
595
|
-
else {
|
|
596
|
-
sinceId = nextSinceId;
|
|
597
|
-
cursor = undefined;
|
|
598
|
-
}
|
|
599
|
-
return [3 /*break*/, 1];
|
|
600
|
-
case 9: return [2 /*return*/];
|
|
601
|
-
}
|
|
602
|
-
});
|
|
603
|
-
});
|
|
604
|
-
};
|
|
450
|
+
async *stream(filter, pollingInterval = 60000) {
|
|
451
|
+
const startDate = new Date();
|
|
452
|
+
let cursor = undefined;
|
|
453
|
+
let sinceId = undefined;
|
|
454
|
+
let nextSinceId = undefined;
|
|
455
|
+
while (true) {
|
|
456
|
+
// Pause execution for the specified polling interval before proceeding to the next iteration
|
|
457
|
+
await new Promise((resolve) => setTimeout(resolve, pollingInterval));
|
|
458
|
+
// Search for tweets
|
|
459
|
+
const tweets = await this.search({ ...filter, startDate: startDate, sinceId: sinceId }, undefined, cursor);
|
|
460
|
+
// Yield the matching tweets
|
|
461
|
+
for (const tweet of tweets.list) {
|
|
462
|
+
yield tweet;
|
|
463
|
+
}
|
|
464
|
+
// Store the most recent tweet ID from this batch
|
|
465
|
+
if (tweets.list.length > 0 && cursor === undefined) {
|
|
466
|
+
nextSinceId = tweets.list[0].id;
|
|
467
|
+
}
|
|
468
|
+
// If there are more tweets to fetch, adjust the cursor value
|
|
469
|
+
if (tweets.list.length > 0 && tweets.next) {
|
|
470
|
+
cursor = tweets.next.value;
|
|
471
|
+
}
|
|
472
|
+
// Else, start the next iteration from this batch's most recent tweet
|
|
473
|
+
else {
|
|
474
|
+
sinceId = nextSinceId;
|
|
475
|
+
cursor = undefined;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
605
479
|
/**
|
|
606
480
|
* Unlike a tweet.
|
|
607
481
|
*
|
|
@@ -626,23 +500,14 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
626
500
|
* });
|
|
627
501
|
* ```
|
|
628
502
|
*/
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
return [4 /*yield*/, this.request(resource, { id: id })];
|
|
638
|
-
case 1:
|
|
639
|
-
response = _b.sent();
|
|
640
|
-
data = (_a = Extractors_1.extractors[resource](response)) !== null && _a !== void 0 ? _a : false;
|
|
641
|
-
return [2 /*return*/, data];
|
|
642
|
-
}
|
|
643
|
-
});
|
|
644
|
-
});
|
|
645
|
-
};
|
|
503
|
+
async unlike(id) {
|
|
504
|
+
const resource = Resource_1.EResourceType.TWEET_UNLIKE;
|
|
505
|
+
// Unliking the tweet
|
|
506
|
+
const response = await this.request(resource, { id: id });
|
|
507
|
+
// Deserializing the response
|
|
508
|
+
const data = Extractors_1.extractors[resource](response) ?? false;
|
|
509
|
+
return data;
|
|
510
|
+
}
|
|
646
511
|
/**
|
|
647
512
|
* Unpost a tweet.
|
|
648
513
|
*
|
|
@@ -667,23 +532,14 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
667
532
|
* });
|
|
668
533
|
* ```
|
|
669
534
|
*/
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
return [4 /*yield*/, this.request(resource, { id: id })];
|
|
679
|
-
case 1:
|
|
680
|
-
response = _b.sent();
|
|
681
|
-
data = (_a = Extractors_1.extractors[resource](response)) !== null && _a !== void 0 ? _a : false;
|
|
682
|
-
return [2 /*return*/, data];
|
|
683
|
-
}
|
|
684
|
-
});
|
|
685
|
-
});
|
|
686
|
-
};
|
|
535
|
+
async unpost(id) {
|
|
536
|
+
const resource = Resource_1.EResourceType.TWEET_UNPOST;
|
|
537
|
+
// Unposting the tweet
|
|
538
|
+
const response = await this.request(resource, { id: id });
|
|
539
|
+
// Deserializing the response
|
|
540
|
+
const data = Extractors_1.extractors[resource](response) ?? false;
|
|
541
|
+
return data;
|
|
542
|
+
}
|
|
687
543
|
/**
|
|
688
544
|
* Unretweet a tweet.
|
|
689
545
|
*
|
|
@@ -708,23 +564,14 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
708
564
|
* });
|
|
709
565
|
* ```
|
|
710
566
|
*/
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
return [4 /*yield*/, this.request(resource, { id: id })];
|
|
720
|
-
case 1:
|
|
721
|
-
response = _b.sent();
|
|
722
|
-
data = (_a = Extractors_1.extractors[resource](response)) !== null && _a !== void 0 ? _a : false;
|
|
723
|
-
return [2 /*return*/, data];
|
|
724
|
-
}
|
|
725
|
-
});
|
|
726
|
-
});
|
|
727
|
-
};
|
|
567
|
+
async unretweet(id) {
|
|
568
|
+
const resource = Resource_1.EResourceType.TWEET_UNRETWEET;
|
|
569
|
+
// Unretweeting the tweet
|
|
570
|
+
const response = await this.request(resource, { id: id });
|
|
571
|
+
// Deserializing the response
|
|
572
|
+
const data = Extractors_1.extractors[resource](response) ?? false;
|
|
573
|
+
return data;
|
|
574
|
+
}
|
|
728
575
|
/**
|
|
729
576
|
* Unschedule a tweet.
|
|
730
577
|
*
|
|
@@ -749,23 +596,14 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
749
596
|
* });
|
|
750
597
|
* ```
|
|
751
598
|
*/
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
return [4 /*yield*/, this.request(resource, { id: id })];
|
|
761
|
-
case 1:
|
|
762
|
-
response = _b.sent();
|
|
763
|
-
data = (_a = Extractors_1.extractors[resource](response)) !== null && _a !== void 0 ? _a : false;
|
|
764
|
-
return [2 /*return*/, data];
|
|
765
|
-
}
|
|
766
|
-
});
|
|
767
|
-
});
|
|
768
|
-
};
|
|
599
|
+
async unschedule(id) {
|
|
600
|
+
const resource = Resource_1.EResourceType.TWEET_UNSCHEDULE;
|
|
601
|
+
// Unscheduling the tweet
|
|
602
|
+
const response = await this.request(resource, { id: id });
|
|
603
|
+
// Deserializing the response
|
|
604
|
+
const data = Extractors_1.extractors[resource](response) ?? false;
|
|
605
|
+
return data;
|
|
606
|
+
}
|
|
769
607
|
/**
|
|
770
608
|
* Upload a media file to Twitter.
|
|
771
609
|
*
|
|
@@ -795,34 +633,18 @@ var TweetService = /** @class */ (function (_super) {
|
|
|
795
633
|
* If not posted in a tweet within this period, the uploaded media is removed.
|
|
796
634
|
* - Instead of a path to the media, an ArrayBuffer containing the media can also be uploaded.
|
|
797
635
|
*/
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
return [4 /*yield*/, this.request(Resource_1.EResourceType.MEDIA_UPLOAD_APPEND, { upload: { id: id, media: media } })];
|
|
812
|
-
case 2:
|
|
813
|
-
// APPEND
|
|
814
|
-
_a.sent();
|
|
815
|
-
// FINALIZE
|
|
816
|
-
return [4 /*yield*/, this.request(Resource_1.EResourceType.MEDIA_UPLOAD_FINALIZE, { upload: { id: id } })];
|
|
817
|
-
case 3:
|
|
818
|
-
// FINALIZE
|
|
819
|
-
_a.sent();
|
|
820
|
-
return [2 /*return*/, id];
|
|
821
|
-
}
|
|
822
|
-
});
|
|
823
|
-
});
|
|
824
|
-
};
|
|
825
|
-
return TweetService;
|
|
826
|
-
}(FetcherService_1.FetcherService));
|
|
636
|
+
async upload(media) {
|
|
637
|
+
// INITIALIZE
|
|
638
|
+
const size = typeof media == 'string' ? (0, fs_1.statSync)(media).size : media.byteLength;
|
|
639
|
+
const id = (await this.request(Resource_1.EResourceType.MEDIA_UPLOAD_INITIALIZE, {
|
|
640
|
+
upload: { size: size },
|
|
641
|
+
})).media_id_string;
|
|
642
|
+
// APPEND
|
|
643
|
+
await this.request(Resource_1.EResourceType.MEDIA_UPLOAD_APPEND, { upload: { id: id, media: media } });
|
|
644
|
+
// FINALIZE
|
|
645
|
+
await this.request(Resource_1.EResourceType.MEDIA_UPLOAD_FINALIZE, { upload: { id: id } });
|
|
646
|
+
return id;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
827
649
|
exports.TweetService = TweetService;
|
|
828
650
|
//# sourceMappingURL=TweetService.js.map
|