rettiwt-api 6.0.8 → 6.1.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 (219) hide show
  1. package/.github/ISSUE_TEMPLATE/bug-report.yml +57 -0
  2. package/.github/ISSUE_TEMPLATE/feature-request.yml +20 -0
  3. package/.github/ISSUE_TEMPLATE/question.yml +15 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +32 -0
  5. package/.github/workflows/ci.yml +33 -0
  6. package/.nvmrc +1 -0
  7. package/README.md +30 -6
  8. package/dist/Rettiwt.d.ts +3 -0
  9. package/dist/Rettiwt.js +4 -0
  10. package/dist/Rettiwt.js.map +1 -1
  11. package/dist/cli.js +2 -0
  12. package/dist/cli.js.map +1 -1
  13. package/dist/collections/Extractors.d.ts +24 -0
  14. package/dist/collections/Extractors.js +14 -0
  15. package/dist/collections/Extractors.js.map +1 -1
  16. package/dist/collections/Groups.js +11 -0
  17. package/dist/collections/Groups.js.map +1 -1
  18. package/dist/collections/Requests.js +12 -0
  19. package/dist/collections/Requests.js.map +1 -1
  20. package/dist/commands/DirectMessage.d.ts +10 -0
  21. package/dist/commands/DirectMessage.js +57 -0
  22. package/dist/commands/DirectMessage.js.map +1 -0
  23. package/dist/commands/List.js +44 -3
  24. package/dist/commands/List.js.map +1 -1
  25. package/dist/commands/Tweet.js +29 -1
  26. package/dist/commands/Tweet.js.map +1 -1
  27. package/dist/commands/User.js +39 -1
  28. package/dist/commands/User.js.map +1 -1
  29. package/dist/enums/Data.d.ts +3 -1
  30. package/dist/enums/Data.js +2 -0
  31. package/dist/enums/Data.js.map +1 -1
  32. package/dist/enums/Resource.d.ts +11 -0
  33. package/dist/enums/Resource.js +12 -0
  34. package/dist/enums/Resource.js.map +1 -1
  35. package/dist/enums/raw/Analytics.d.ts +6 -3
  36. package/dist/enums/raw/Analytics.js +5 -2
  37. package/dist/enums/raw/Analytics.js.map +1 -1
  38. package/dist/index.d.ts +15 -0
  39. package/dist/index.js +8 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/models/args/FetchArgs.d.ts +9 -0
  42. package/dist/models/args/FetchArgs.js +16 -0
  43. package/dist/models/args/FetchArgs.js.map +1 -1
  44. package/dist/models/args/PostArgs.d.ts +1 -0
  45. package/dist/models/args/PostArgs.js +2 -0
  46. package/dist/models/args/PostArgs.js.map +1 -1
  47. package/dist/models/data/Analytics.d.ts +43 -0
  48. package/dist/models/data/Analytics.js +92 -0
  49. package/dist/models/data/Analytics.js.map +1 -0
  50. package/dist/models/data/Conversation.d.ts +93 -0
  51. package/dist/models/data/Conversation.js +293 -0
  52. package/dist/models/data/Conversation.js.map +1 -0
  53. package/dist/models/data/CursoredData.d.ts +2 -1
  54. package/dist/models/data/CursoredData.js +6 -1
  55. package/dist/models/data/CursoredData.js.map +1 -1
  56. package/dist/models/data/DirectMessage.d.ts +105 -0
  57. package/dist/models/data/DirectMessage.js +284 -0
  58. package/dist/models/data/DirectMessage.js.map +1 -0
  59. package/dist/models/data/Inbox.d.ts +44 -0
  60. package/dist/models/data/Inbox.js +106 -0
  61. package/dist/models/data/Inbox.js.map +1 -0
  62. package/dist/models/data/List.d.ts +20 -0
  63. package/dist/models/data/List.js +50 -1
  64. package/dist/models/data/List.js.map +1 -1
  65. package/dist/models/data/Tweet.d.ts +6 -6
  66. package/dist/models/data/Tweet.js +4 -2
  67. package/dist/models/data/Tweet.js.map +1 -1
  68. package/dist/models/data/User.d.ts +2 -0
  69. package/dist/models/data/User.js +6 -0
  70. package/dist/models/data/User.js.map +1 -1
  71. package/dist/requests/DirectMessage.d.ts +28 -0
  72. package/dist/requests/DirectMessage.js +149 -0
  73. package/dist/requests/DirectMessage.js.map +1 -0
  74. package/dist/requests/List.d.ts +10 -0
  75. package/dist/requests/List.js +52 -0
  76. package/dist/requests/List.js.map +1 -1
  77. package/dist/requests/Tweet.d.ts +8 -0
  78. package/dist/requests/Tweet.js +30 -0
  79. package/dist/requests/Tweet.js.map +1 -1
  80. package/dist/requests/User.d.ts +8 -1
  81. package/dist/requests/User.js +67 -8
  82. package/dist/requests/User.js.map +1 -1
  83. package/dist/services/public/DirectMessageService.d.ts +100 -0
  84. package/dist/services/public/DirectMessageService.js +143 -0
  85. package/dist/services/public/DirectMessageService.js.map +1 -0
  86. package/dist/services/public/FetcherService.d.ts +2 -2
  87. package/dist/services/public/FetcherService.js +2 -2
  88. package/dist/services/public/ListService.d.ts +85 -0
  89. package/dist/services/public/ListService.js +111 -0
  90. package/dist/services/public/ListService.js.map +1 -1
  91. package/dist/services/public/TweetService.d.ts +56 -0
  92. package/dist/services/public/TweetService.js +72 -0
  93. package/dist/services/public/TweetService.js.map +1 -1
  94. package/dist/services/public/UserService.d.ts +61 -2
  95. package/dist/services/public/UserService.js +89 -0
  96. package/dist/services/public/UserService.js.map +1 -1
  97. package/dist/types/args/FetchArgs.d.ts +69 -12
  98. package/dist/types/args/PostArgs.d.ts +29 -11
  99. package/dist/types/data/Analytics.d.ts +42 -0
  100. package/dist/types/data/Analytics.js +3 -0
  101. package/dist/types/data/Analytics.js.map +1 -0
  102. package/dist/types/data/Conversation.d.ts +32 -0
  103. package/dist/types/data/Conversation.js +3 -0
  104. package/dist/types/data/Conversation.js.map +1 -0
  105. package/dist/types/data/CursoredData.d.ts +4 -1
  106. package/dist/types/data/DirectMessage.d.ts +25 -0
  107. package/dist/types/data/DirectMessage.js +3 -0
  108. package/dist/types/data/DirectMessage.js.map +1 -0
  109. package/dist/types/data/Inbox.d.ts +18 -0
  110. package/dist/types/data/Inbox.js +3 -0
  111. package/dist/types/data/Inbox.js.map +1 -0
  112. package/dist/types/data/List.d.ts +5 -1
  113. package/dist/types/data/Tweet.d.ts +6 -6
  114. package/dist/types/data/User.d.ts +4 -0
  115. package/dist/types/raw/base/Analytic.d.ts +6 -1
  116. package/dist/types/raw/base/Message.d.ts +16 -0
  117. package/dist/types/raw/base/Message.js +4 -0
  118. package/dist/types/raw/base/Message.js.map +1 -0
  119. package/dist/types/raw/base/Tweet.d.ts +6 -6
  120. package/dist/types/raw/base/User.d.ts +2 -1
  121. package/dist/types/raw/composite/TimelineList.d.ts +9 -0
  122. package/dist/types/raw/composite/TimelineList.js +3 -0
  123. package/dist/types/raw/composite/TimelineList.js.map +1 -0
  124. package/dist/types/raw/dm/Conversation.d.ts +55 -0
  125. package/dist/types/raw/dm/Conversation.js +4 -0
  126. package/dist/types/raw/dm/Conversation.js.map +1 -0
  127. package/dist/types/raw/dm/InboxInitial.d.ts +137 -0
  128. package/dist/types/raw/dm/InboxInitial.js +4 -0
  129. package/dist/types/raw/dm/InboxInitial.js.map +1 -0
  130. package/dist/types/raw/dm/InboxTimeline.d.ts +287 -0
  131. package/dist/types/raw/dm/InboxTimeline.js +4 -0
  132. package/dist/types/raw/dm/InboxTimeline.js.map +1 -0
  133. package/dist/types/raw/dm/UserUpdates.d.ts +41 -0
  134. package/dist/types/raw/dm/UserUpdates.js +4 -0
  135. package/dist/types/raw/dm/UserUpdates.js.map +1 -0
  136. package/dist/types/raw/list/AddMember.d.ts +151 -0
  137. package/dist/types/raw/list/AddMember.js +4 -0
  138. package/dist/types/raw/list/AddMember.js.map +1 -0
  139. package/dist/types/raw/list/Details.d.ts +44 -13
  140. package/dist/types/raw/list/RemoveMember.d.ts +150 -0
  141. package/dist/types/raw/list/RemoveMember.js +4 -0
  142. package/dist/types/raw/list/RemoveMember.js.map +1 -0
  143. package/dist/types/raw/tweet/Bookmark.d.ts +12 -0
  144. package/dist/types/raw/tweet/Bookmark.js +4 -0
  145. package/dist/types/raw/tweet/Bookmark.js.map +1 -0
  146. package/dist/types/raw/tweet/Unbookmark.d.ts +11 -0
  147. package/dist/types/raw/tweet/Unbookmark.js +4 -0
  148. package/dist/types/raw/tweet/Unbookmark.js.map +1 -0
  149. package/dist/types/raw/user/Analytics.d.ts +6 -18
  150. package/dist/types/raw/user/Analytics.js +0 -1
  151. package/dist/types/raw/user/Analytics.js.map +1 -1
  152. package/dist/types/raw/user/Lists.d.ts +319 -0
  153. package/dist/types/raw/user/Lists.js +4 -0
  154. package/dist/types/raw/user/Lists.js.map +1 -0
  155. package/eslint.config.mjs +1 -1
  156. package/package.json +11 -6
  157. package/playground/.env.example +1 -0
  158. package/playground/README.md +53 -0
  159. package/playground/index.js +15 -0
  160. package/playground/package.json +15 -0
  161. package/src/Rettiwt.ts +5 -0
  162. package/src/cli.ts +2 -0
  163. package/src/collections/Extractors.ts +29 -0
  164. package/src/collections/Groups.ts +11 -0
  165. package/src/collections/Requests.ts +20 -0
  166. package/src/commands/DirectMessage.ts +62 -0
  167. package/src/commands/List.ts +44 -3
  168. package/src/commands/Tweet.ts +29 -1
  169. package/src/commands/User.ts +65 -1
  170. package/src/enums/Data.ts +2 -0
  171. package/src/enums/Resource.ts +13 -0
  172. package/src/enums/raw/Analytics.ts +5 -2
  173. package/src/index.ts +15 -0
  174. package/src/models/args/FetchArgs.ts +17 -0
  175. package/src/models/args/PostArgs.ts +2 -0
  176. package/src/models/data/Analytics.ts +97 -0
  177. package/src/models/data/Conversation.ts +344 -0
  178. package/src/models/data/CursoredData.ts +7 -2
  179. package/src/models/data/DirectMessage.ts +335 -0
  180. package/src/models/data/Inbox.ts +124 -0
  181. package/src/models/data/List.ts +60 -1
  182. package/src/models/data/Tweet.ts +10 -8
  183. package/src/models/data/User.ts +6 -0
  184. package/src/requests/DirectMessage.ts +233 -0
  185. package/src/requests/List.ts +58 -0
  186. package/src/requests/Tweet.ts +32 -0
  187. package/src/requests/User.ts +70 -7
  188. package/src/services/public/DirectMessageService.ts +159 -0
  189. package/src/services/public/FetcherService.ts +2 -2
  190. package/src/services/public/ListService.ts +127 -0
  191. package/src/services/public/TweetService.ts +82 -0
  192. package/src/services/public/UserService.ts +110 -2
  193. package/src/types/args/FetchArgs.ts +77 -12
  194. package/src/types/args/PostArgs.ts +31 -11
  195. package/src/types/data/Analytics.ts +58 -0
  196. package/src/types/data/Conversation.ts +44 -0
  197. package/src/types/data/CursoredData.ts +4 -1
  198. package/src/types/data/DirectMessage.ts +33 -0
  199. package/src/types/data/Inbox.ts +23 -0
  200. package/src/types/data/List.ts +7 -1
  201. package/src/types/data/Tweet.ts +6 -6
  202. package/src/types/data/User.ts +6 -0
  203. package/src/types/raw/base/Analytic.ts +7 -1
  204. package/src/types/raw/base/Message.ts +22 -0
  205. package/src/types/raw/base/Tweet.ts +6 -6
  206. package/src/types/raw/base/User.ts +2 -1
  207. package/src/types/raw/composite/TimelineList.ts +10 -0
  208. package/src/types/raw/dm/Conversation.ts +59 -0
  209. package/src/types/raw/dm/InboxInitial.ts +155 -0
  210. package/src/types/raw/dm/InboxTimeline.ts +301 -0
  211. package/src/types/raw/dm/UserUpdates.ts +46 -0
  212. package/src/types/raw/list/AddMember.ts +175 -0
  213. package/src/types/raw/list/Details.ts +52 -13
  214. package/src/types/raw/list/RemoveMember.ts +174 -0
  215. package/src/types/raw/tweet/Bookmark.ts +14 -0
  216. package/src/types/raw/tweet/Unbookmark.ts +14 -0
  217. package/src/types/raw/user/Analytics.ts +6 -22
  218. package/src/types/raw/user/Lists.ts +378 -0
  219. package/tsconfig.json +1 -1
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DirectMessage = void 0;
4
+ /**
5
+ * Type guard to check if the response is an IInboxInitialResponse
6
+ */
7
+ function isInboxInitialResponse(response) {
8
+ return 'inbox_initial_state' in response;
9
+ }
10
+ /**
11
+ * Type guard to check if the response is an IConversationTimelineResponse
12
+ */
13
+ function isConversationTimelineResponse(response) {
14
+ return 'conversation_timeline' in response;
15
+ }
16
+ /**
17
+ * Type guard to check if the response is an IInboxTimelineResponse
18
+ */
19
+ function isInboxTimelineResponse(response) {
20
+ return 'inbox_timeline' in response;
21
+ }
22
+ /**
23
+ * The details of a single direct message.
24
+ *
25
+ * @public
26
+ */
27
+ class DirectMessage {
28
+ /** The raw message details. */
29
+ _raw;
30
+ conversationId;
31
+ createdAt;
32
+ editCount;
33
+ id;
34
+ mediaUrls;
35
+ read;
36
+ recipientId;
37
+ senderId;
38
+ text;
39
+ /**
40
+ * @param message - The raw message details from the API response.
41
+ */
42
+ constructor(message) {
43
+ this._raw = message;
44
+ const parsedData = this._parseMessageData(message);
45
+ this.id = parsedData.id;
46
+ this.conversationId = parsedData.conversationId;
47
+ this.senderId = parsedData.senderId;
48
+ this.recipientId = parsedData.recipientId;
49
+ this.text = parsedData.text;
50
+ this.createdAt = parsedData.createdAt;
51
+ this.editCount = parsedData.editCount ?? 0;
52
+ this.mediaUrls = this._extractMediaUrls(message);
53
+ this.read = true; // Default to true, can be enhanced later
54
+ }
55
+ /** The raw message details. */
56
+ get raw() {
57
+ return this._raw;
58
+ }
59
+ /**
60
+ * Extract messages from conversation timeline response
61
+ */
62
+ static _extractFromConversationTimeline(response) {
63
+ const messages = [];
64
+ const entries = response.conversation_timeline?.entries ?? [];
65
+ for (const entry of entries) {
66
+ if ('message' in entry && entry.message) {
67
+ messages.push(new DirectMessage(entry.message));
68
+ }
69
+ }
70
+ return messages;
71
+ }
72
+ /**
73
+ * Extract messages from inbox initial response
74
+ */
75
+ static _extractFromInboxInitial(response) {
76
+ const messages = [];
77
+ const entries = response.inbox_initial_state?.entries ?? [];
78
+ for (const entry of entries) {
79
+ if ('message' in entry && entry.message) {
80
+ messages.push(new DirectMessage(entry.message));
81
+ }
82
+ }
83
+ return messages;
84
+ }
85
+ /**
86
+ * Extract messages from inbox timeline response
87
+ */
88
+ static _extractFromInboxTimeline(response) {
89
+ const messages = [];
90
+ const entries = response.inbox_timeline?.entries ?? [];
91
+ for (const entry of entries) {
92
+ if ('message' in entry && entry.message) {
93
+ messages.push(new DirectMessage(entry.message));
94
+ }
95
+ }
96
+ return messages;
97
+ }
98
+ /**
99
+ * Extract media URLs from message attachment data with proper type safety.
100
+ */
101
+ _extractMediaUrls(message) {
102
+ const urls = [];
103
+ const msg = message;
104
+ const messageData = msg.message_data;
105
+ // Check for card attachments with images
106
+ const attachment = messageData?.attachment;
107
+ const card = attachment?.card;
108
+ const bindingValues = card?.binding_values;
109
+ if (bindingValues) {
110
+ // Extract URLs from various image binding values
111
+ const imageBindings = [
112
+ 'thumbnail_image',
113
+ 'photo_image_full_size',
114
+ 'summary_photo_image',
115
+ 'thumbnail_image_original',
116
+ 'summary_photo_image_original',
117
+ 'photo_image_full_size_original',
118
+ ];
119
+ for (const bindingKey of imageBindings) {
120
+ const imageBinding = bindingValues[bindingKey];
121
+ const imageValue = imageBinding?.image_value;
122
+ if (imageValue?.url && typeof imageValue.url === 'string') {
123
+ urls.push(imageValue.url);
124
+ }
125
+ }
126
+ }
127
+ // Check for tweet attachments
128
+ const tweet = attachment?.tweet;
129
+ if (tweet?.expanded_url && typeof tweet.expanded_url === 'string') {
130
+ urls.push(tweet.expanded_url);
131
+ }
132
+ return urls.length > 0 ? [...new Set(urls)] : undefined; // Remove duplicates
133
+ }
134
+ /**
135
+ * Safely extract number value
136
+ */
137
+ _extractNumberValue(value) {
138
+ if (typeof value === 'number') {
139
+ return value;
140
+ }
141
+ if (typeof value === 'string') {
142
+ const parsed = Number(value);
143
+ return isNaN(parsed) ? undefined : parsed;
144
+ }
145
+ return undefined;
146
+ }
147
+ /**
148
+ * Safely extract string value with fallback
149
+ */
150
+ _extractStringValue(...values) {
151
+ for (const value of values) {
152
+ if (typeof value === 'string' && value.length > 0) {
153
+ return value;
154
+ }
155
+ }
156
+ return undefined;
157
+ }
158
+ /**
159
+ * Parse message data with proper type safety
160
+ */
161
+ _parseMessageData(message) {
162
+ const msg = message;
163
+ const messageData = msg.message_data;
164
+ const id = this._extractStringValue(messageData?.id, msg.id) ?? '';
165
+ const conversationId = this._extractStringValue(msg.conversation_id, messageData?.conversation_id) ?? '';
166
+ const senderId = this._extractStringValue(messageData?.sender_id, msg.sender_id) ?? '';
167
+ const recipientId = this._extractStringValue(messageData?.recipient_id, msg.recipient_id);
168
+ const text = this._extractStringValue(messageData?.text, msg.text) ?? '';
169
+ const createdAt = this._parseTimestamp(this._extractStringValue(messageData?.time, msg.time) ?? '');
170
+ const editCount = this._extractNumberValue(messageData?.edit_count);
171
+ return {
172
+ id,
173
+ conversationId,
174
+ senderId,
175
+ recipientId,
176
+ createdAt,
177
+ text,
178
+ editCount,
179
+ };
180
+ }
181
+ /**
182
+ * Parse timestamp with proper validation
183
+ */
184
+ _parseTimestamp(timestamp) {
185
+ const numericTimestamp = Number(timestamp);
186
+ if (!isNaN(numericTimestamp)) {
187
+ const date = new Date(numericTimestamp);
188
+ if (!isNaN(date.getTime())) {
189
+ return date.toISOString();
190
+ }
191
+ }
192
+ return new Date().toISOString();
193
+ }
194
+ /**
195
+ * Filter messages by conversation ID
196
+ */
197
+ static filterByConversation(messages, conversationId) {
198
+ return messages.filter((message) => message.conversationId === conversationId);
199
+ }
200
+ /**
201
+ * Filter messages by sender ID
202
+ */
203
+ static filterBySender(messages, senderId) {
204
+ return messages.filter((message) => message.isFromSender(senderId));
205
+ }
206
+ /**
207
+ * Extracts and deserializes the list of direct messages from the given raw response data.
208
+ *
209
+ * @param response - The raw response data.
210
+ *
211
+ * @returns The deserialized list of direct messages.
212
+ */
213
+ static list(response) {
214
+ const messages = [];
215
+ if (isInboxInitialResponse(response)) {
216
+ return DirectMessage._extractFromInboxInitial(response);
217
+ }
218
+ else if (isConversationTimelineResponse(response)) {
219
+ return DirectMessage._extractFromConversationTimeline(response);
220
+ }
221
+ else if (isInboxTimelineResponse(response)) {
222
+ return DirectMessage._extractFromInboxTimeline(response);
223
+ }
224
+ return messages;
225
+ }
226
+ /**
227
+ * Generic method to extract messages from any supported response type
228
+ */
229
+ static listFromResponse(response) {
230
+ return DirectMessage.list(response);
231
+ }
232
+ /**
233
+ * Sort messages by creation time (oldest to newest)
234
+ */
235
+ static sortByTime(messages, ascending = true) {
236
+ return [...messages].sort((a, b) => {
237
+ const timeA = new Date(a.createdAt).getTime();
238
+ const timeB = new Date(b.createdAt).getTime();
239
+ return ascending ? timeA - timeB : timeB - timeA;
240
+ });
241
+ }
242
+ /**
243
+ * Get the age of this message in milliseconds
244
+ */
245
+ getAgeInMs() {
246
+ return Date.now() - new Date(this.createdAt).getTime();
247
+ }
248
+ /**
249
+ * Check if this message has media attachments
250
+ */
251
+ hasMedia() {
252
+ return Boolean(this.mediaUrls && this.mediaUrls.length > 0);
253
+ }
254
+ /**
255
+ * Check if this message is from a specific sender
256
+ */
257
+ isFromSender(senderId) {
258
+ return this.senderId === senderId;
259
+ }
260
+ /**
261
+ * @returns A serializable JSON representation of `this` object.
262
+ */
263
+ toJSON() {
264
+ return {
265
+ conversationId: this.conversationId,
266
+ createdAt: this.createdAt,
267
+ editCount: this.editCount,
268
+ id: this.id,
269
+ mediaUrls: this.mediaUrls,
270
+ read: this.read,
271
+ recipientId: this.recipientId,
272
+ senderId: this.senderId,
273
+ text: this.text,
274
+ };
275
+ }
276
+ /**
277
+ * Check if this message was edited
278
+ */
279
+ wasEdited() {
280
+ return Boolean(this.editCount && this.editCount > 0);
281
+ }
282
+ }
283
+ exports.DirectMessage = DirectMessage;
284
+ //# sourceMappingURL=DirectMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DirectMessage.js","sourceRoot":"","sources":["../../../src/models/data/DirectMessage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { IInbox } from '../../types/data/Inbox';
2
+ import { IInboxInitialResponse } from '../../types/raw/dm/InboxInitial';
3
+ import { IInboxTimelineResponse } from '../../types/raw/dm/InboxTimeline';
4
+ import { Conversation } from './Conversation';
5
+ /**
6
+ * The details of a DM inbox containing conversations and metadata.
7
+ *
8
+ * @public
9
+ */
10
+ export declare class Inbox implements IInbox {
11
+ /** The raw inbox details. */
12
+ private readonly _raw;
13
+ conversations: Conversation[];
14
+ cursor: string;
15
+ lastSeenEventId: string;
16
+ trustedLastSeenEventId: string;
17
+ untrustedLastSeenEventId: string;
18
+ /**
19
+ * @param response - The raw inbox response from the API.
20
+ */
21
+ constructor(response: IInboxInitialResponse | IInboxTimelineResponse);
22
+ /** The raw inbox details. */
23
+ get raw(): IInboxInitialResponse | IInboxTimelineResponse;
24
+ /**
25
+ * Get the raw inbox initial state if this inbox was created from one
26
+ */
27
+ getInitialState(): IInboxInitialResponse | undefined;
28
+ /**
29
+ * Get the raw inbox timeline if this inbox was created from one
30
+ */
31
+ getTimeline(): IInboxTimelineResponse | undefined;
32
+ /**
33
+ * Check if this inbox was created from an initial state response
34
+ */
35
+ isInitialState(): boolean;
36
+ /**
37
+ * Check if this inbox was created from a timeline response
38
+ */
39
+ isTimeline(): boolean;
40
+ /**
41
+ * @returns A serializable JSON representation of `this` object.
42
+ */
43
+ toJSON(): IInbox;
44
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Inbox = void 0;
4
+ const Conversation_1 = require("./Conversation");
5
+ /**
6
+ * Type guard to check if the response is an IInboxInitialResponse
7
+ */
8
+ function isInboxInitialResponse(response) {
9
+ return 'inbox_initial_state' in response;
10
+ }
11
+ /**
12
+ * Type guard to check if the response is an IInboxTimelineResponse
13
+ */
14
+ function isInboxTimelineResponse(response) {
15
+ return 'inbox_timeline' in response;
16
+ }
17
+ /**
18
+ * The details of a DM inbox containing conversations and metadata.
19
+ *
20
+ * @public
21
+ */
22
+ class Inbox {
23
+ /** The raw inbox details. */
24
+ _raw;
25
+ conversations;
26
+ cursor;
27
+ lastSeenEventId;
28
+ trustedLastSeenEventId;
29
+ untrustedLastSeenEventId;
30
+ /**
31
+ * @param response - The raw inbox response from the API.
32
+ */
33
+ constructor(response) {
34
+ this._raw = response;
35
+ // Handle inbox initial state response
36
+ if (isInboxInitialResponse(response)) {
37
+ const inboxState = response.inbox_initial_state;
38
+ this.cursor = inboxState.cursor ?? '';
39
+ this.lastSeenEventId = inboxState.last_seen_event_id ?? '';
40
+ this.trustedLastSeenEventId = inboxState.trusted_last_seen_event_id ?? '';
41
+ this.untrustedLastSeenEventId = inboxState.untrusted_last_seen_event_id ?? '';
42
+ // Parse conversations from inbox initial state
43
+ this.conversations = Conversation_1.Conversation.listFromInboxInitial(response);
44
+ }
45
+ // Handle inbox timeline response
46
+ else if (isInboxTimelineResponse(response)) {
47
+ const inboxTimeline = response.inbox_timeline;
48
+ this.cursor = inboxTimeline.min_entry_id ?? '';
49
+ this.lastSeenEventId = '';
50
+ this.trustedLastSeenEventId = '';
51
+ this.untrustedLastSeenEventId = '';
52
+ // Parse conversations from inbox timeline
53
+ this.conversations = Conversation_1.Conversation.listFromInboxTimeline(response);
54
+ }
55
+ else {
56
+ // Fallback defaults (this should never happen with proper typing)
57
+ this.cursor = '';
58
+ this.lastSeenEventId = '';
59
+ this.trustedLastSeenEventId = '';
60
+ this.untrustedLastSeenEventId = '';
61
+ this.conversations = [];
62
+ }
63
+ }
64
+ /** The raw inbox details. */
65
+ get raw() {
66
+ return this._raw;
67
+ }
68
+ /**
69
+ * Get the raw inbox initial state if this inbox was created from one
70
+ */
71
+ getInitialState() {
72
+ return this.isInitialState() ? this._raw : undefined;
73
+ }
74
+ /**
75
+ * Get the raw inbox timeline if this inbox was created from one
76
+ */
77
+ getTimeline() {
78
+ return this.isTimeline() ? this._raw : undefined;
79
+ }
80
+ /**
81
+ * Check if this inbox was created from an initial state response
82
+ */
83
+ isInitialState() {
84
+ return isInboxInitialResponse(this._raw);
85
+ }
86
+ /**
87
+ * Check if this inbox was created from a timeline response
88
+ */
89
+ isTimeline() {
90
+ return isInboxTimelineResponse(this._raw);
91
+ }
92
+ /**
93
+ * @returns A serializable JSON representation of `this` object.
94
+ */
95
+ toJSON() {
96
+ return {
97
+ conversations: this.conversations.map((conv) => conv.toJSON()),
98
+ cursor: this.cursor,
99
+ lastSeenEventId: this.lastSeenEventId,
100
+ trustedLastSeenEventId: this.trustedLastSeenEventId,
101
+ untrustedLastSeenEventId: this.untrustedLastSeenEventId,
102
+ };
103
+ }
104
+ }
105
+ exports.Inbox = Inbox;
106
+ //# sourceMappingURL=Inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inbox.js","sourceRoot":"","sources":["../../../src/models/data/Inbox.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { IList } from '../../types/data/List';
2
2
  import { IList as IRawList } from '../../types/raw/base/List';
3
+ import { IListDetailsResponse } from '../../types/raw/list/Details';
3
4
  /**
4
5
  * The details of a single Twitter List.
5
6
  *
@@ -12,6 +13,8 @@ export declare class List implements IList {
12
13
  createdBy: string;
13
14
  description?: string;
14
15
  id: string;
16
+ isFollowing: boolean;
17
+ isMember: boolean;
15
18
  memberCount: number;
16
19
  name: string;
17
20
  subscriberCount: number;
@@ -21,6 +24,23 @@ export declare class List implements IList {
21
24
  constructor(list: IRawList);
22
25
  /** The raw list details. */
23
26
  get raw(): IRawList;
27
+ /**
28
+ * Extracts and deserializes a single target list from the given raw response data.
29
+ *
30
+ * @param response - The raw response data.
31
+ * @param id - The id of the target list.
32
+ *
33
+ * @returns The target deserialized list.
34
+ */
35
+ static single(response: IListDetailsResponse, id: string): List | undefined;
36
+ /**
37
+ * Extracts and deserializes the timeline of lists followed from the given raw response data.
38
+ *
39
+ * @param response - The raw response data.
40
+ *
41
+ * @returns The deserialized timeline of lists.
42
+ */
43
+ static timeline(response: NonNullable<unknown>): List[];
24
44
  /**
25
45
  * @returns A serializable JSON representation of `this` object.
26
46
  */
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.List = void 0;
4
+ const Logging_1 = require("../../enums/Logging");
5
+ const JsonUtils_1 = require("../../helper/JsonUtils");
6
+ const LogService_1 = require("../../services/internal/LogService");
4
7
  /**
5
8
  * The details of a single Twitter List.
6
9
  *
@@ -13,6 +16,8 @@ class List {
13
16
  createdBy;
14
17
  description;
15
18
  id;
19
+ isFollowing;
20
+ isMember;
16
21
  memberCount;
17
22
  name;
18
23
  subscriberCount;
@@ -25,14 +30,56 @@ class List {
25
30
  this.name = list.name;
26
31
  this.createdAt = new Date(list.created_at).toISOString();
27
32
  this.description = list.description.length ? list.description : undefined;
33
+ this.isFollowing = list.following;
34
+ this.isMember = list.is_member;
28
35
  this.memberCount = list.member_count;
29
36
  this.subscriberCount = list.subscriber_count;
30
- this.createdBy = list.user_results.result.id;
37
+ this.createdBy = list.user_results.result.rest_id;
31
38
  }
32
39
  /** The raw list details. */
33
40
  get raw() {
34
41
  return { ...this._raw };
35
42
  }
43
+ /**
44
+ * Extracts and deserializes a single target list from the given raw response data.
45
+ *
46
+ * @param response - The raw response data.
47
+ * @param id - The id of the target list.
48
+ *
49
+ * @returns The target deserialized list.
50
+ */
51
+ static single(response, id) {
52
+ // If list found
53
+ if (response.data.list.id_str === id) {
54
+ return new List(response.data.list);
55
+ }
56
+ // If not found
57
+ else {
58
+ return undefined;
59
+ }
60
+ }
61
+ /**
62
+ * Extracts and deserializes the timeline of lists followed from the given raw response data.
63
+ *
64
+ * @param response - The raw response data.
65
+ *
66
+ * @returns The deserialized timeline of lists.
67
+ */
68
+ static timeline(response) {
69
+ const lists = [];
70
+ // Extracting the matching data
71
+ const extract = (0, JsonUtils_1.findByFilter)(response, '__typename', 'TimelineTwitterList').map((item) => item.list);
72
+ // Deserializing valid data
73
+ for (const item of extract) {
74
+ // If valid list
75
+ if (item !== undefined && item.id !== undefined && item.following === true) {
76
+ // Logging
77
+ LogService_1.LogService.log(Logging_1.LogActions.DESERIALIZE, { id: item.id });
78
+ lists.push(new List(item));
79
+ }
80
+ }
81
+ return lists;
82
+ }
36
83
  /**
37
84
  * @returns A serializable JSON representation of `this` object.
38
85
  */
@@ -42,6 +89,8 @@ class List {
42
89
  createdBy: this.createdBy,
43
90
  description: this.description,
44
91
  id: this.id,
92
+ isFollowing: this.isFollowing,
93
+ isMember: this.isMember,
45
94
  memberCount: this.memberCount,
46
95
  name: this.name,
47
96
  subscriberCount: this.subscriberCount,
@@ -1 +1 @@
1
- {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../src/models/data/List.ts"],"names":[],"mappings":";;;AAGA;;;;GAIG;AACH,MAAa,IAAI;IAChB,4BAA4B;IACX,IAAI,CAAW;IAEzB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,WAAW,CAAU;IACrB,EAAE,CAAS;IACX,WAAW,CAAS;IACpB,IAAI,CAAS;IACb,eAAe,CAAS;IAE/B;;OAEG;IACH,YAAmB,IAAc;QAChC,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED,4BAA4B;IAC5B,IAAW,GAAG;QACb,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,MAAM;QACZ,OAAO;YACN,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,eAAe,EAAE,IAAI,CAAC,eAAe;SACrC,CAAC;IACH,CAAC;CACD;AA7CD,oBA6CC"}
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../src/models/data/List.ts"],"names":[],"mappings":"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"}
@@ -11,24 +11,24 @@ import { User } from './User';
11
11
  export declare class Tweet implements ITweet {
12
12
  /** The raw tweet details. */
13
13
  private readonly _raw;
14
- bookmarkCount: number;
14
+ bookmarkCount?: number;
15
15
  conversationId: string;
16
16
  createdAt: string;
17
17
  entities: TweetEntities;
18
18
  fullText: string;
19
19
  id: string;
20
20
  lang: string;
21
- likeCount: number;
21
+ likeCount?: number;
22
22
  media?: TweetMedia[];
23
- quoteCount: number;
23
+ quoteCount?: number;
24
24
  quoted?: Tweet;
25
- replyCount: number;
25
+ replyCount?: number;
26
26
  replyTo?: string;
27
- retweetCount: number;
27
+ retweetCount?: number;
28
28
  retweetedTweet?: Tweet;
29
29
  tweetBy: User;
30
30
  url: string;
31
- viewCount: number;
31
+ viewCount?: number;
32
32
  /**
33
33
  * @param tweet - The raw tweet details.
34
34
  */
@@ -45,14 +45,16 @@ class Tweet {
45
45
  this.entities = new TweetEntities(tweet.legacy.entities);
46
46
  this.media = tweet.legacy.extended_entities?.media?.map((media) => new TweetMedia(media));
47
47
  this.quoted = this._getQuotedTweet(tweet);
48
- this.fullText = tweet.note_tweet ? tweet.note_tweet.note_tweet_results.result.text : tweet.legacy.full_text;
48
+ this.fullText = tweet.note_tweet?.note_tweet_results?.result?.text
49
+ ? tweet.note_tweet.note_tweet_results.result.text
50
+ : tweet.legacy.full_text;
49
51
  this.replyTo = tweet.legacy.in_reply_to_status_id_str;
50
52
  this.lang = tweet.legacy.lang;
51
53
  this.quoteCount = tweet.legacy.quote_count;
52
54
  this.replyCount = tweet.legacy.reply_count;
53
55
  this.retweetCount = tweet.legacy.retweet_count;
54
56
  this.likeCount = tweet.legacy.favorite_count;
55
- this.viewCount = tweet.views.count ? parseInt(tweet.views.count) : 0;
57
+ this.viewCount = tweet.views?.count ? parseInt(tweet.views.count) : undefined;
56
58
  this.bookmarkCount = tweet.legacy.bookmark_count;
57
59
  this.retweetedTweet = this._getRetweetedTweet(tweet);
58
60
  this.url = `https://x.com/${this.tweetBy.userName}/status/${this.id}`;