rettiwt-api 1.0.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.
Files changed (156) hide show
  1. package/.dockerignore +2 -0
  2. package/.gitattributes +3 -0
  3. package/Dockerfile +9 -0
  4. package/README.md +38 -0
  5. package/dist/config/env.d.ts +5 -0
  6. package/dist/config/env.js +9 -0
  7. package/dist/config/env.js.map +1 -0
  8. package/dist/index.d.ts +10 -0
  9. package/dist/index.js +23 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/models/graphql/Global.d.ts +4 -0
  12. package/dist/models/graphql/Global.js +13 -0
  13. package/dist/models/graphql/Global.js.map +1 -0
  14. package/dist/models/graphql/TweetTypes.d.ts +6 -0
  15. package/dist/models/graphql/TweetTypes.js +156 -0
  16. package/dist/models/graphql/TweetTypes.js.map +1 -0
  17. package/dist/models/graphql/UserTypes.d.ts +3 -0
  18. package/dist/models/graphql/UserTypes.js +139 -0
  19. package/dist/models/graphql/UserTypes.js.map +1 -0
  20. package/dist/queries/RootQuery.d.ts +4 -0
  21. package/dist/queries/RootQuery.js +59 -0
  22. package/dist/queries/RootQuery.js.map +1 -0
  23. package/dist/resolvers/ResolverBase.d.ts +5 -0
  24. package/dist/resolvers/ResolverBase.js +11 -0
  25. package/dist/resolvers/ResolverBase.js.map +1 -0
  26. package/dist/resolvers/TweetResolver.d.ts +54 -0
  27. package/dist/resolvers/TweetResolver.js +328 -0
  28. package/dist/resolvers/TweetResolver.js.map +1 -0
  29. package/dist/resolvers/UserResolver.d.ts +47 -0
  30. package/dist/resolvers/UserResolver.js +302 -0
  31. package/dist/resolvers/UserResolver.js.map +1 -0
  32. package/dist/server.d.ts +1 -0
  33. package/dist/server.js +75 -0
  34. package/dist/server.js.map +1 -0
  35. package/dist/services/AuthService.d.ts +17 -0
  36. package/dist/services/AuthService.js +103 -0
  37. package/dist/services/AuthService.js.map +1 -0
  38. package/dist/services/CacheService.d.ts +25 -0
  39. package/dist/services/CacheService.js +141 -0
  40. package/dist/services/CacheService.js.map +1 -0
  41. package/dist/services/FetcherService.d.ts +30 -0
  42. package/dist/services/FetcherService.js +171 -0
  43. package/dist/services/FetcherService.js.map +1 -0
  44. package/dist/services/data/TweetService.d.ts +43 -0
  45. package/dist/services/data/TweetService.js +229 -0
  46. package/dist/services/data/TweetService.js.map +1 -0
  47. package/dist/services/data/UserAccountService.d.ts +49 -0
  48. package/dist/services/data/UserAccountService.js +250 -0
  49. package/dist/services/data/UserAccountService.js.map +1 -0
  50. package/dist/services/helper/Deserializers.d.ts +19 -0
  51. package/dist/services/helper/Deserializers.js +115 -0
  52. package/dist/services/helper/Deserializers.js.map +1 -0
  53. package/dist/services/helper/Extractors.d.ts +101 -0
  54. package/dist/services/helper/Extractors.js +409 -0
  55. package/dist/services/helper/Extractors.js.map +1 -0
  56. package/dist/services/helper/Headers.d.ts +9 -0
  57. package/dist/services/helper/Headers.js +47 -0
  58. package/dist/services/helper/Headers.js.map +1 -0
  59. package/dist/services/helper/Parser.d.ts +28 -0
  60. package/dist/services/helper/Parser.js +104 -0
  61. package/dist/services/helper/Parser.js.map +1 -0
  62. package/dist/services/helper/Urls.d.ts +74 -0
  63. package/dist/services/helper/Urls.js +114 -0
  64. package/dist/services/helper/Urls.js.map +1 -0
  65. package/dist/test/Test.js +2 -0
  66. package/dist/test/Test.js.map +1 -0
  67. package/dist/types/Authentication.d.ts +15 -0
  68. package/dist/types/Authentication.js +5 -0
  69. package/dist/types/Authentication.js.map +1 -0
  70. package/dist/types/HTTP.d.ts +22 -0
  71. package/dist/types/HTTP.js +30 -0
  72. package/dist/types/HTTP.js.map +1 -0
  73. package/dist/types/Service.d.ts +27 -0
  74. package/dist/types/Service.js +19 -0
  75. package/dist/types/Service.js.map +1 -0
  76. package/dist/types/Tweet.d.ts +40 -0
  77. package/dist/types/Tweet.js +5 -0
  78. package/dist/types/Tweet.js.map +1 -0
  79. package/dist/types/UserAccount.d.ts +19 -0
  80. package/dist/types/UserAccount.js +4 -0
  81. package/dist/types/UserAccount.js.map +1 -0
  82. package/dist/types/graphql/Errors.d.ts +15 -0
  83. package/dist/types/graphql/Errors.js +23 -0
  84. package/dist/types/graphql/Errors.js.map +1 -0
  85. package/dist/types/raw/auth/Cookie.d.ts +16 -0
  86. package/dist/types/raw/auth/Cookie.js +3 -0
  87. package/dist/types/raw/auth/Cookie.js.map +1 -0
  88. package/dist/types/raw/tweet/Favouriters.d.ts +164 -0
  89. package/dist/types/raw/tweet/Favouriters.js +3 -0
  90. package/dist/types/raw/tweet/Favouriters.js.map +1 -0
  91. package/dist/types/raw/tweet/Retweeters.d.ts +171 -0
  92. package/dist/types/raw/tweet/Retweeters.js +3 -0
  93. package/dist/types/raw/tweet/Retweeters.js.map +1 -0
  94. package/dist/types/raw/tweet/Tweet.d.ts +746 -0
  95. package/dist/types/raw/tweet/Tweet.js +3 -0
  96. package/dist/types/raw/tweet/Tweet.js.map +1 -0
  97. package/dist/types/raw/tweet/Tweets.d.ts +386 -0
  98. package/dist/types/raw/tweet/Tweets.js +3 -0
  99. package/dist/types/raw/tweet/Tweets.js.map +1 -0
  100. package/dist/types/raw/user/Followers.d.ts +176 -0
  101. package/dist/types/raw/user/Followers.js +3 -0
  102. package/dist/types/raw/user/Followers.js.map +1 -0
  103. package/dist/types/raw/user/Following.d.ts +176 -0
  104. package/dist/types/raw/user/Following.js +3 -0
  105. package/dist/types/raw/user/Following.js.map +1 -0
  106. package/dist/types/raw/user/Likes.d.ts +1059 -0
  107. package/dist/types/raw/user/Likes.js +3 -0
  108. package/dist/types/raw/user/Likes.js.map +1 -0
  109. package/dist/types/raw/user/Tweets.d.ts +2428 -0
  110. package/dist/types/raw/user/Tweets.js +3 -0
  111. package/dist/types/raw/user/Tweets.js.map +1 -0
  112. package/dist/types/raw/user/User.d.ts +117 -0
  113. package/dist/types/raw/user/User.js +3 -0
  114. package/dist/types/raw/user/User.js.map +1 -0
  115. package/dist/types/raw/user/Users.d.ts +120 -0
  116. package/dist/types/raw/user/Users.js +3 -0
  117. package/dist/types/raw/user/Users.js.map +1 -0
  118. package/environment.d.ts +11 -0
  119. package/package.json +40 -0
  120. package/src/config/env.ts +5 -0
  121. package/src/index.ts +19 -0
  122. package/src/models/graphql/Global.ts +10 -0
  123. package/src/models/graphql/TweetTypes.ts +154 -0
  124. package/src/models/graphql/UserTypes.ts +137 -0
  125. package/src/queries/RootQuery.ts +56 -0
  126. package/src/resolvers/ResolverBase.ts +12 -0
  127. package/src/resolvers/TweetResolver.ts +257 -0
  128. package/src/resolvers/UserResolver.ts +239 -0
  129. package/src/server.ts +36 -0
  130. package/src/services/AuthService.ts +58 -0
  131. package/src/services/CacheService.ts +70 -0
  132. package/src/services/FetcherService.ts +84 -0
  133. package/src/services/data/TweetService.ts +163 -0
  134. package/src/services/data/UserAccountService.ts +187 -0
  135. package/src/services/helper/Deserializers.ts +95 -0
  136. package/src/services/helper/Extractors.ts +455 -0
  137. package/src/services/helper/Headers.ts +45 -0
  138. package/src/services/helper/Parser.ts +108 -0
  139. package/src/services/helper/Urls.ts +109 -0
  140. package/src/types/Authentication.ts +16 -0
  141. package/src/types/HTTP.ts +23 -0
  142. package/src/types/Service.ts +36 -0
  143. package/src/types/Tweet.ts +44 -0
  144. package/src/types/UserAccount.ts +21 -0
  145. package/src/types/graphql/Errors.ts +16 -0
  146. package/src/types/raw/auth/Cookie.ts +16 -0
  147. package/src/types/raw/tweet/Favouriters.ts +193 -0
  148. package/src/types/raw/tweet/Retweeters.ts +201 -0
  149. package/src/types/raw/tweet/Tweet.ts +882 -0
  150. package/src/types/raw/tweet/Tweets.ts +444 -0
  151. package/src/types/raw/user/Followers.ts +208 -0
  152. package/src/types/raw/user/Following.ts +208 -0
  153. package/src/types/raw/user/Likes.ts +1247 -0
  154. package/src/types/raw/user/Tweets.ts +2847 -0
  155. package/src/types/raw/user/User.ts +135 -0
  156. package/tsconfig.json +95 -0
@@ -0,0 +1,409 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ exports.__esModule = true;
26
+ exports.extractTweetReplies = exports.extractTweetRetweeters = exports.extractTweetLikers = exports.extractTweet = exports.extractTweets = exports.extractUserTweets = exports.extractUserLikes = exports.extractUserFollow = exports.extractUserAccountDetails = void 0;
27
+ // TYPES
28
+ var Errors_1 = require("../../types/graphql/Errors");
29
+ // PARSERS
30
+ var Parsers = __importStar(require("./Parser"));
31
+ /* USERS */
32
+ /**
33
+ * @returns The raw user account data formatted and sorted into required and additional data
34
+ * @param res The raw response received from Twitter
35
+ */
36
+ function extractUserAccountDetails(res) {
37
+ var required = []; // To store the reqruied raw data
38
+ var cursor = ''; // To store the cursor to next batch
39
+ var users = []; // To store additional user data
40
+ var tweets = []; // To store additional tweet data
41
+ // If user not found or account suspended
42
+ if (Parsers.isJSONEmpty(res.data) || Parsers.isJSONEmpty(res.data.user) || res.data.user.result.__typename !== 'User') {
43
+ throw new Error(Errors_1.DataErrors.UserNotFound);
44
+ }
45
+ // Destructuring user account data
46
+ required.push(res.data.user.result);
47
+ users.push(res.data.user.result);
48
+ // Returning the data
49
+ return {
50
+ required: required,
51
+ cursor: cursor,
52
+ users: users,
53
+ tweets: tweets
54
+ };
55
+ }
56
+ exports.extractUserAccountDetails = extractUserAccountDetails;
57
+ /**
58
+ * @returns The raw user following/followers data formatted and sorted into required and additional data
59
+ * @param res The raw response received from TwitterAPI
60
+ */
61
+ function extractUserFollow(res) {
62
+ var required = []; // To store the reqruied raw data
63
+ var cursor = ''; // To store the cursor to next batch
64
+ var users = []; // To store additional user data
65
+ var tweets = []; // To store additional tweet data
66
+ // If user does not exist
67
+ if (Parsers.isJSONEmpty(res.data.user)) {
68
+ throw new Error(Errors_1.DataErrors.UserNotFound);
69
+ }
70
+ // Extracting the raw list
71
+ res.data.user.result.timeline.timeline.instructions.forEach(function (item) {
72
+ var _a;
73
+ if (item.type === 'TimelineAddEntries') {
74
+ // Destructuring data
75
+ (_a = item.entries) === null || _a === void 0 ? void 0 : _a.forEach(function (entry) {
76
+ var _a, _b;
77
+ // If entry is of type user and user account exists
78
+ if (entry.entryId.indexOf('user') != -1 && ((_a = entry.content.itemContent) === null || _a === void 0 ? void 0 : _a.user_results.result.__typename) === 'User') {
79
+ required.push(entry.content.itemContent.user_results.result);
80
+ users.push(entry.content.itemContent.user_results.result);
81
+ }
82
+ // If entry is of type cursor
83
+ else if (entry.entryId.indexOf('cursor-bottom') != -1) {
84
+ cursor = (_b = entry.content.value) !== null && _b !== void 0 ? _b : '';
85
+ }
86
+ });
87
+ }
88
+ });
89
+ // Returning the data
90
+ return {
91
+ required: required,
92
+ cursor: cursor,
93
+ users: users,
94
+ tweets: tweets
95
+ };
96
+ }
97
+ exports.extractUserFollow = extractUserFollow;
98
+ /**
99
+ * @returns The raw user likes data formatted and sorted into required and additional data
100
+ * @param res The raw response received from TwitterAPI
101
+ */
102
+ function extractUserLikes(res) {
103
+ var required = []; // To store the reqruied raw data
104
+ var cursor = ''; // To store the cursor to next batch
105
+ var users = []; // To store additional user data
106
+ var tweets = []; // To store additional tweet data
107
+ // If user does not exist
108
+ if (Parsers.isJSONEmpty(res.data.user)) {
109
+ throw new Error(Errors_1.DataErrors.UserNotFound);
110
+ }
111
+ // Extracting the raw list
112
+ res.data.user.result.timeline_v2.timeline.instructions.forEach(function (item) {
113
+ if (item.type === 'TimelineAddEntries') {
114
+ // Destructuring data
115
+ item.entries.forEach(function (entry) {
116
+ var _a, _b;
117
+ // If entry is of type tweet and tweet exists
118
+ if (entry.entryId.indexOf('tweet') != -1 && ((_a = entry.content.itemContent) === null || _a === void 0 ? void 0 : _a.tweet_results.result.__typename) === 'Tweet') {
119
+ required.push(entry.content.itemContent.tweet_results.result);
120
+ users.push(entry.content.itemContent.tweet_results.result.core.user_results.result);
121
+ tweets.push(entry.content.itemContent.tweet_results.result);
122
+ }
123
+ // If entry is of type cursor
124
+ else if (entry.entryId.indexOf('cursor-bottom') != -1) {
125
+ cursor = (_b = entry.content.value) !== null && _b !== void 0 ? _b : '';
126
+ }
127
+ });
128
+ }
129
+ });
130
+ // Returning the data
131
+ return {
132
+ required: required,
133
+ cursor: cursor,
134
+ users: users,
135
+ tweets: tweets
136
+ };
137
+ }
138
+ exports.extractUserLikes = extractUserLikes;
139
+ /**
140
+ * @returns The raw tweets data formatted and sorted into required and additional data
141
+ * @param res The raw response received from TwitterAPI
142
+ */
143
+ function extractUserTweets(res) {
144
+ var _a, _b, _c;
145
+ var required = []; // To store the reqruied raw data
146
+ var cursor = ''; // To store the cursor to next batch
147
+ var users = []; // To store additional user data
148
+ var tweets = []; // To store additional tweet data
149
+ // Getting the raw tweet list
150
+ var dataTweets = res.data.user.result.timeline_v2.timeline.instructions.filter(function (item) { return item.type === 'TimelineAddEntries'; })[0].entries;
151
+ // Destructuring tweets, if not empty
152
+ if (!Parsers.isJSONEmpty(dataTweets)) {
153
+ // Iterating through the json array of tweets
154
+ for (var _i = 0, dataTweets_1 = dataTweets; _i < dataTweets_1.length; _i++) {
155
+ var entry = dataTweets_1[_i];
156
+ // If the entry is a tweet
157
+ if (entry.entryId.indexOf('tweet') != -1) {
158
+ required.push((_a = entry.content.itemContent) === null || _a === void 0 ? void 0 : _a.tweet_results.result);
159
+ tweets.push((_b = entry.content.itemContent) === null || _b === void 0 ? void 0 : _b.tweet_results.result);
160
+ users.push((_c = entry.content.itemContent) === null || _c === void 0 ? void 0 : _c.tweet_results.result.core.user_results.result);
161
+ }
162
+ // If the entry is a cursor
163
+ else if (entry.entryId.indexOf('cursor-bottom') != -1) {
164
+ cursor = entry.content.value;
165
+ }
166
+ }
167
+ }
168
+ return {
169
+ required: required,
170
+ cursor: cursor,
171
+ users: users,
172
+ tweets: tweets
173
+ };
174
+ }
175
+ exports.extractUserTweets = extractUserTweets;
176
+ /* TWEETS */
177
+ /**
178
+ * @returns The raw tweets data formatted and sorted into required and additional data
179
+ * @param res The raw response received from TwitterAPI
180
+ */
181
+ function extractTweets(res) {
182
+ var _a, _b, _c, _d, _e, _f;
183
+ var required = []; // To store the reqruied raw data
184
+ var cursor = ''; // To store the cursor to next batch
185
+ var users = []; // To store additional user data
186
+ var tweets = []; // To store additional tweet data
187
+ // Getting raw tweet list
188
+ var dataTweets = res.globalObjects.tweets;
189
+ // Getting raw users list
190
+ var dataUsers = res.globalObjects.users;
191
+ // Destructuring tweets, if not empty
192
+ if (!Parsers.isJSONEmpty(dataTweets)) {
193
+ // Iterating through the json array of tweets
194
+ for (var _i = 0, _g = Object.keys(dataTweets); _i < _g.length; _i++) {
195
+ var key = _g[_i];
196
+ required.push({ rest_id: dataTweets[key].id_str, legacy: dataTweets[key] });
197
+ tweets.push({ rest_id: dataTweets[key].id_str, legacy: dataTweets[key] });
198
+ }
199
+ }
200
+ // Destructuring users, if not empty
201
+ if (!Parsers.isJSONEmpty(dataUsers)) {
202
+ // Iterating through the json array of users
203
+ for (var _h = 0, _j = Object.keys(dataUsers); _h < _j.length; _h++) {
204
+ var key = _j[_h];
205
+ users.push({ rest_id: dataUsers[key].id_str, legacy: dataUsers[key] });
206
+ }
207
+ }
208
+ // Getting the cursor to next batch
209
+ // If not first batch
210
+ if (res.timeline.instructions.length > 2) {
211
+ cursor = (_c = (_b = (_a = res.timeline.instructions[2]) === null || _a === void 0 ? void 0 : _a.replaceEntry.entry.content.operation) === null || _b === void 0 ? void 0 : _b.cursor.value) !== null && _c !== void 0 ? _c : '';
212
+ }
213
+ // If first batch
214
+ else {
215
+ cursor = (_f = (_e = (_d = res.timeline.instructions[0].addEntries) === null || _d === void 0 ? void 0 : _d.entries.filter(function (item) { return item.entryId.indexOf('cursor-bottom') != -1; })[0].content.operation) === null || _e === void 0 ? void 0 : _e.cursor.value) !== null && _f !== void 0 ? _f : '';
216
+ }
217
+ // Returning the data
218
+ return {
219
+ required: required,
220
+ cursor: cursor,
221
+ users: users,
222
+ tweets: tweets
223
+ };
224
+ }
225
+ exports.extractTweets = extractTweets;
226
+ /**
227
+ * @returns The raw tweet data formatted and sorted into required and additional data
228
+ * @param res The raw response received from TwitterAPI
229
+ * @param tweetId The rest id of the tweet to fetch
230
+ */
231
+ function extractTweet(res, tweetId) {
232
+ var _a;
233
+ var required = []; // To store the reqruied raw data
234
+ var cursor = ''; // To store the cursor to next batch
235
+ var users = []; // To store additional user data
236
+ var tweets = []; // To store additional tweet data
237
+ // If tweet does not exist
238
+ if (Parsers.isJSONEmpty(res.data)) {
239
+ throw new Error(Errors_1.DataErrors.TweetNotFound);
240
+ }
241
+ // Destructuring the received raw data
242
+ (_a = res.data.threaded_conversation_with_injections.instructions.filter(function (item) { return item['type'] === 'TimelineAddEntries'; })[0].entries) === null || _a === void 0 ? void 0 : _a.forEach(function (entry) {
243
+ var _a, _b, _c;
244
+ // If entry is of type tweet and tweet exists
245
+ if (entry.entryId.indexOf('tweet') != -1 && ((_b = (_a = entry.content.itemContent) === null || _a === void 0 ? void 0 : _a.tweet_results) === null || _b === void 0 ? void 0 : _b.result.__typename) === 'Tweet') {
246
+ // If this is the required tweet
247
+ if (entry.entryId.indexOf(tweetId) != -1) {
248
+ required.push(entry.content.itemContent.tweet_results.result);
249
+ }
250
+ tweets.push(entry.content.itemContent.tweet_results.result);
251
+ users.push(entry.content.itemContent.tweet_results.result.core.user_results.result);
252
+ }
253
+ // If entry if of type conversation
254
+ else if (entry.entryId.indexOf('conversationthread') != -1) {
255
+ // Iterating over the conversation
256
+ (_c = entry.content.items) === null || _c === void 0 ? void 0 : _c.forEach(function (item) {
257
+ var _a;
258
+ // If item is of type tweet and tweet exists
259
+ if (item.entryId.indexOf('tweet') != -1 && ((_a = item.item.itemContent.tweet_results) === null || _a === void 0 ? void 0 : _a.result.__typename) === 'Tweet') {
260
+ required.push(item.item.itemContent.tweet_results.result);
261
+ tweets.push(item.item.itemContent.tweet_results.result);
262
+ users.push(item.item.itemContent.tweet_results.result.core.user_results.result);
263
+ }
264
+ });
265
+ }
266
+ });
267
+ // Returning the data
268
+ return {
269
+ required: required,
270
+ cursor: cursor,
271
+ users: users,
272
+ tweets: tweets
273
+ };
274
+ }
275
+ exports.extractTweet = extractTweet;
276
+ /**
277
+ * @returns The raw tweet likers data formatted and sorted into required and additional data
278
+ * @param res The raw response received from TwitterAPI
279
+ */
280
+ function extractTweetLikers(res) {
281
+ var required = []; // To store the reqruied raw data
282
+ var cursor = ''; // To store the cursor to next batch
283
+ var users = []; // To store additional user data
284
+ var tweets = []; // To store additional tweet data
285
+ // If tweet does not exist
286
+ if (Parsers.isJSONEmpty(res.data.favoriters_timeline)) {
287
+ throw new Error(Errors_1.DataErrors.TweetNotFound);
288
+ }
289
+ // Destructuring raw list of likers
290
+ res.data.favoriters_timeline.timeline.instructions.filter(function (item) { return item.type === 'TimelineAddEntries'; })[0].entries.forEach(function (entry) {
291
+ var _a, _b;
292
+ // If entry is of type user and user exists
293
+ if (entry.entryId.indexOf('user') != -1 && ((_a = entry.content.itemContent) === null || _a === void 0 ? void 0 : _a.user_results.result.__typename) === 'User') {
294
+ required.push(entry.content.itemContent.user_results.result);
295
+ users.push(entry.content.itemContent.user_results.result);
296
+ }
297
+ // If entry is of type cursor
298
+ else if (entry.entryId.indexOf('cursor-bottom') != -1) {
299
+ cursor = (_b = entry.content.value) !== null && _b !== void 0 ? _b : '';
300
+ }
301
+ });
302
+ // Returning the data
303
+ return {
304
+ required: required,
305
+ cursor: cursor,
306
+ users: users,
307
+ tweets: tweets
308
+ };
309
+ }
310
+ exports.extractTweetLikers = extractTweetLikers;
311
+ /**
312
+ * @returns The raw tweet retweeters data formatted and sorted into required and additional data
313
+ * @param res The raw response received from TwitterAPI
314
+ */
315
+ function extractTweetRetweeters(res) {
316
+ var required = []; // To store the reqruied raw data
317
+ var cursor = ''; // To store the cursor to next batch
318
+ var users = []; // To store additional user data
319
+ var tweets = []; // To store additional tweet data
320
+ // If tweet does not exist
321
+ if (Parsers.isJSONEmpty(res.data.retweeters_timeline)) {
322
+ throw new Error(Errors_1.DataErrors.TweetNotFound);
323
+ }
324
+ // Destructuring raw list of retweeters
325
+ res.data.retweeters_timeline.timeline.instructions.filter(function (item) { return item.type === 'TimelineAddEntries'; })[0].entries.forEach(function (entry) {
326
+ var _a, _b;
327
+ // If entry is of type user and user exists
328
+ if (entry.entryId.indexOf('user') != -1 && ((_a = entry.content.itemContent) === null || _a === void 0 ? void 0 : _a.user_results.result.__typename) === 'User') {
329
+ required.push(entry.content.itemContent.user_results.result);
330
+ users.push(entry.content.itemContent.user_results.result);
331
+ }
332
+ // If entry is of type cursor
333
+ else if (entry.entryId.indexOf('cursor-bottom') != -1) {
334
+ cursor = (_b = entry.content.value) !== null && _b !== void 0 ? _b : '';
335
+ }
336
+ });
337
+ // Returning the data
338
+ return {
339
+ required: required,
340
+ cursor: cursor,
341
+ users: users,
342
+ tweets: tweets
343
+ };
344
+ }
345
+ exports.extractTweetRetweeters = extractTweetRetweeters;
346
+ /**
347
+ * @returns The raw tweet replies data formatted and sorted into required and additional data
348
+ * @param res The raw response received from TwitterAPI
349
+ * @param tweetId The id of the tweet whose replies must be extracted
350
+ */
351
+ function extractTweetReplies(res, tweetId) {
352
+ var required = []; // To store the reqruied raw data
353
+ var cursor = ''; // To store the cursor to next batch
354
+ var users = []; // To store additional user data
355
+ var tweets = []; // To store additional tweet data
356
+ // If tweet does not exist
357
+ if (Parsers.isJSONEmpty(res.data)) {
358
+ throw new Error(Errors_1.DataErrors.TweetNotFound);
359
+ }
360
+ // Destructuring the received raw data
361
+ //@ts-ignore
362
+ res.data.threaded_conversation_with_injections.instructions.filter(function (item) { return item.type === 'TimelineAddEntries'; })[0].entries.map(function (entry) {
363
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
364
+ // If entry is of type tweet
365
+ if (entry.entryId.indexOf('tweet') != -1) {
366
+ // If tweet exists
367
+ if (((_b = (_a = entry.content.itemContent) === null || _a === void 0 ? void 0 : _a.tweet_results) === null || _b === void 0 ? void 0 : _b.result.__typename) === 'Tweet') {
368
+ tweets.push(entry.content.itemContent.tweet_results.result);
369
+ users.push(entry.content.itemContent.tweet_results.result.core.user_results.result);
370
+ }
371
+ }
372
+ // If entry if of type conversation/reply
373
+ else if (entry.entryId.indexOf('conversationthread') != -1) {
374
+ // If tweet exists
375
+ if (((_e = (_d = (_c = entry.content.items) === null || _c === void 0 ? void 0 : _c.at(0)) === null || _d === void 0 ? void 0 : _d.item.itemContent.tweet_results) === null || _e === void 0 ? void 0 : _e.result.__typename) === 'Tweet') {
376
+ // Adding the 1st entry, which is a reply, to required list
377
+ required.push((_f = entry.content.items[0].item.itemContent.tweet_results) === null || _f === void 0 ? void 0 : _f.result);
378
+ tweets.push((_g = entry.content.items[0].item.itemContent.tweet_results) === null || _g === void 0 ? void 0 : _g.result);
379
+ users.push((_h = entry.content.items[0].item.itemContent.tweet_results) === null || _h === void 0 ? void 0 : _h.result.core.user_results.result);
380
+ }
381
+ // Iterating over the rest of the conversation
382
+ //@ts-ignore
383
+ entry.content.items.forEach(function (item) {
384
+ var _a;
385
+ // If item is of type tweet
386
+ if (item.entryId.indexOf('tweet') != -1) {
387
+ // If tweet exists
388
+ if (((_a = item.item.itemContent.tweet_results) === null || _a === void 0 ? void 0 : _a.result.__typename) === 'Tweet') {
389
+ tweets.push(item.item.itemContent.tweet_results.result);
390
+ users.push(item.item.itemContent.tweet_results.result.core.user_results.result);
391
+ }
392
+ }
393
+ });
394
+ }
395
+ // If entry is of type bottom cursor
396
+ else if (entry.entryId.indexOf('cursor-bottom') != -1) {
397
+ cursor = (_k = (_j = entry.content.itemContent) === null || _j === void 0 ? void 0 : _j.value) !== null && _k !== void 0 ? _k : '';
398
+ }
399
+ });
400
+ // Returning the data
401
+ return {
402
+ required: required,
403
+ cursor: cursor,
404
+ users: users,
405
+ tweets: tweets
406
+ };
407
+ }
408
+ exports.extractTweetReplies = extractTweetReplies;
409
+ //# sourceMappingURL=Extractors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Extractors.js","sourceRoot":"","sources":["../../../src/services/helper/Extractors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { GuestCredentials, AuthCredentials } from '../../types/Authentication';
2
+ /**
3
+ * @returns The header required for making authorized HTTP requests
4
+ * @param authToken The authentication token received from Twitter
5
+ * @param csrfToken The csrf token received from Twitter
6
+ * @param cookie The cookie associated with the logged in account
7
+ */
8
+ export declare function authorizedHeader(authCred: AuthCredentials): any;
9
+ export declare function guestHeader(guestCred: GuestCredentials): any;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.guestHeader = exports.authorizedHeader = void 0;
4
+ /**
5
+ * @returns The header required for making authorized HTTP requests
6
+ * @param authToken The authentication token received from Twitter
7
+ * @param csrfToken The csrf token received from Twitter
8
+ * @param cookie The cookie associated with the logged in account
9
+ */
10
+ function authorizedHeader(authCred) {
11
+ return [
12
+ "sec-ch-ua: \"Not_A Brand\";v=\"99\", \"Microsoft Edge\";v=\"109\", \"Chromium\";v=\"109\"",
13
+ "x-twitter-client-language: en",
14
+ "x-csrf-token: ".concat(authCred.csrfToken),
15
+ "sec-ch-ua-mobile: ?0",
16
+ "authorization: ".concat(authCred.authToken),
17
+ "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61",
18
+ "x-twitter-auth-type: OAuth2Session",
19
+ "x-twitter-active-user: yes",
20
+ "sec-ch-ua-platform: \"Windows\"",
21
+ "Accept: */*",
22
+ "host: api.twitter.com",
23
+ "Cookie: ".concat(authCred.cookie)
24
+ ];
25
+ }
26
+ exports.authorizedHeader = authorizedHeader;
27
+ function guestHeader(guestCred) {
28
+ return [
29
+ 'authority: api.twitter.com',
30
+ 'accept: */*',
31
+ 'accept-language: en-US,en;q=0.9',
32
+ "authorization: ".concat(guestCred.authToken),
33
+ 'content-type: application/json',
34
+ 'origin: https://twitter.com',
35
+ 'referer: https://twitter.com/',
36
+ 'sec-ch-ua: ^\^"Not_A Brand^\^";v=^\^"99^\^", ^\^"Microsoft Edge^\^";v=^\^"109^\^", ^\^"Chromium^\^";v=^\^"109^\^"',
37
+ 'sec-ch-ua-mobile: ?0',
38
+ 'sec-ch-ua-platform: ^\^"Windows^\^"',
39
+ 'sec-fetch-dest: empty',
40
+ 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.70',
41
+ "x-guest-token: ".concat(guestCred.guestToken),
42
+ 'x-twitter-active-user: yes',
43
+ 'x-twitter-client-language: en'
44
+ ];
45
+ }
46
+ exports.guestHeader = guestHeader;
47
+ //# sourceMappingURL=Headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Headers.js","sourceRoot":"","sources":["../../../src/services/helper/Headers.ts"],"names":[],"mappings":";;;AAGA;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,QAAyB;IACtD,OAAO;QACH,2FAA+E;QAC/E,+BAA+B;QAC/B,wBAAiB,QAAQ,CAAC,SAAS,CAAE;QACrC,sBAAsB;QACtB,yBAAkB,QAAQ,CAAC,SAAS,CAAE;QACtC,+IAA+I;QAC/I,oCAAoC;QACpC,4BAA4B;QAC5B,iCAA+B;QAC/B,aAAa;QACb,uBAAuB;QACvB,kBAAW,QAAQ,CAAC,MAAM,CAAE;KAC/B,CAAC;AACN,CAAC;AAfD,4CAeC;AAED,SAAgB,WAAW,CAAC,SAA2B;IACnD,OAAO;QACH,4BAA4B;QAC5B,aAAa;QACb,iCAAiC;QACjC,yBAAkB,SAAS,CAAC,SAAS,CAAE;QACvC,gCAAgC;QAChC,6BAA6B;QAC7B,+BAA+B;QAC/B,mHAAmH;QACnH,sBAAsB;QACtB,qCAAqC;QACrC,uBAAuB;QACvB,+IAA+I;QAC/I,yBAAkB,SAAS,CAAC,UAAU,CAAE;QACxC,4BAA4B;QAC5B,+BAA+B;KAClC,CAAC;AACN,CAAC;AAlBD,kCAkBC"}
@@ -0,0 +1,28 @@
1
+ import { TweetFilter } from '../../types/Tweet';
2
+ /**
3
+ * @returns Whether the given json object is empty or not
4
+ * @param data The input JSON object which needs to be checked
5
+ */
6
+ export declare function isJSONEmpty(data: any): boolean;
7
+ /**
8
+ * @returns The value associated with the given key inside the given json
9
+ * @param data The json data within which to search for the value
10
+ * @param key The key to search for
11
+ * @param last Whether to begin searching from the end
12
+ */
13
+ export declare function findJSONKey(data: any, key: string, last?: boolean): any;
14
+ /**
15
+ * @returns A list of data from a singleton data
16
+ * @param data The data to be converted to a list
17
+ */
18
+ export declare function dataToList(data: any | any[]): any[];
19
+ /**
20
+ * @param text The text to be normalized
21
+ * @returns The text after being formatted to remove unnecessary characters
22
+ */
23
+ export declare function normalizeText(text: string): string;
24
+ /**
25
+ * @param filter The tweet filter to use for getting filtered tweets
26
+ * @returns The same tweet filter, in a URL query format string
27
+ */
28
+ export declare function toQueryString(filter: TweetFilter): string;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.toQueryString = exports.normalizeText = exports.dataToList = exports.findJSONKey = exports.isJSONEmpty = void 0;
4
+ /**
5
+ * @returns Whether the given json object is empty or not
6
+ * @param data The input JSON object which needs to be checked
7
+ */
8
+ function isJSONEmpty(data) {
9
+ // If the JSON has any keys, it's not empty
10
+ if (Object.keys(data).length == 0) {
11
+ return true;
12
+ }
13
+ // Else, it's empty
14
+ else {
15
+ return false;
16
+ }
17
+ }
18
+ exports.isJSONEmpty = isJSONEmpty;
19
+ /**
20
+ * @returns The value associated with the given key inside the given json
21
+ * @param data The json data within which to search for the value
22
+ * @param key The key to search for
23
+ * @param last Whether to begin searching from the end
24
+ */
25
+ function findJSONKey(data, key, last) {
26
+ if (last === void 0) { last = false; }
27
+ var jsonStr = JSON.stringify(data); // To store the input data as string
28
+ var extStr = ''; // To store the extracted string
29
+ var len = jsonStr.length; // To store length of input data
30
+ /**
31
+ * Getting the position to start extracting data from
32
+ * This the position just after the key plus ":"
33
+ * */
34
+ var start = !last ? (jsonStr.indexOf("\"".concat(key, "\"")) + "\"".concat(key, "\":").length) : (jsonStr.lastIndexOf("\"".concat(key, "\"")) + "\"".concat(key, "\":").length);
35
+ for (var i = start; i < len; i++) {
36
+ // Getting each character
37
+ var char = jsonStr[i];
38
+ // If not ending of value
39
+ if (char != ',' && char != '\n') {
40
+ extStr += char;
41
+ }
42
+ // If ending of value
43
+ else {
44
+ break;
45
+ }
46
+ }
47
+ // Removing begginning and ending quotes from string
48
+ /**
49
+ * I don't know how this regex I used works. I just copied it from StackOverflow
50
+ * Here is the link to the thread: https://stackoverflow.com/q/19156148
51
+ */
52
+ extStr = extStr.replace(/^"|"$/g, '');
53
+ return extStr;
54
+ }
55
+ exports.findJSONKey = findJSONKey;
56
+ /**
57
+ * @returns A list of data from a singleton data
58
+ * @param data The data to be converted to a list
59
+ */
60
+ function dataToList(data) {
61
+ // If data is already a list
62
+ if (Array.isArray(data)) {
63
+ return data;
64
+ }
65
+ // If data is not array
66
+ else {
67
+ return [data];
68
+ }
69
+ }
70
+ exports.dataToList = dataToList;
71
+ /**
72
+ * @param text The text to be normalized
73
+ * @returns The text after being formatted to remove unnecessary characters
74
+ */
75
+ function normalizeText(text) {
76
+ var normalizedText = ''; // To store the normalized text
77
+ // Removing unnecessary full stops, and other characters
78
+ normalizedText = text.replace(/\n/g, '.').replace(/[.]+[\s+.\s+]+/g, '. ');
79
+ // Adding full-stop to the end if does not exist already
80
+ normalizedText = normalizedText.endsWith('.') ? normalizedText : (normalizedText + '.');
81
+ return normalizedText;
82
+ }
83
+ exports.normalizeText = normalizeText;
84
+ /**
85
+ * @param filter The tweet filter to use for getting filtered tweets
86
+ * @returns The same tweet filter, in a URL query format string
87
+ */
88
+ function toQueryString(filter) {
89
+ // Concatenating the input filter arguments to a URL query formatted string
90
+ return [
91
+ filter.words ? filter.words.join(' ') : '',
92
+ filter.hashtags ? "(".concat(filter.hashtags.map(function (hashtag) { return '%23' + hashtag; }).join(' OR '), ")") : '',
93
+ filter.fromUsers ? "(".concat(filter.fromUsers.map(function (user) { return "from:".concat(user); }).join(' OR '), ")") : '',
94
+ filter.toUsers ? "(".concat(filter.toUsers.map(function (user) { return "to:".concat(user); }).join(' OR '), ")") : '',
95
+ filter.mentions ? "(".concat(filter.mentions.map(function (mention) { return '%40' + mention; }).join(' OR '), ")") : '',
96
+ filter.startDate ? "since:".concat(filter.startDate) : '',
97
+ filter.endDate ? "until:".concat(filter.endDate) : '',
98
+ filter.quoted ? "quoted_tweet_id:".concat(filter.quoted) : ''
99
+ ]
100
+ .filter(function (item) { return item !== '()' && item !== ''; })
101
+ .join(' ') + (!filter.links ? '%20-filter%3Alinks' : '');
102
+ }
103
+ exports.toQueryString = toQueryString;
104
+ //# sourceMappingURL=Parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../src/services/helper/Parser.ts"],"names":[],"mappings":"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"}