rettiwt-api 6.0.8 → 6.1.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/.github/ISSUE_TEMPLATE/bug-report.yml +57 -0
- package/.github/ISSUE_TEMPLATE/feature-request.yml +20 -0
- package/.github/ISSUE_TEMPLATE/question.yml +15 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +32 -0
- package/.github/workflows/ci.yml +33 -0
- package/.nvmrc +1 -0
- package/README.md +30 -6
- package/dist/Rettiwt.d.ts +3 -0
- package/dist/Rettiwt.js +4 -0
- package/dist/Rettiwt.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/collections/Extractors.d.ts +24 -0
- package/dist/collections/Extractors.js +14 -0
- package/dist/collections/Extractors.js.map +1 -1
- package/dist/collections/Groups.js +11 -0
- package/dist/collections/Groups.js.map +1 -1
- package/dist/collections/Requests.js +12 -0
- package/dist/collections/Requests.js.map +1 -1
- package/dist/commands/DirectMessage.d.ts +10 -0
- package/dist/commands/DirectMessage.js +57 -0
- package/dist/commands/DirectMessage.js.map +1 -0
- package/dist/commands/List.js +44 -3
- package/dist/commands/List.js.map +1 -1
- package/dist/commands/Tweet.js +29 -1
- package/dist/commands/Tweet.js.map +1 -1
- package/dist/commands/User.js +39 -1
- package/dist/commands/User.js.map +1 -1
- package/dist/enums/Data.d.ts +3 -1
- package/dist/enums/Data.js +2 -0
- package/dist/enums/Data.js.map +1 -1
- package/dist/enums/Resource.d.ts +11 -0
- package/dist/enums/Resource.js +12 -0
- package/dist/enums/Resource.js.map +1 -1
- package/dist/enums/raw/Analytics.d.ts +6 -3
- package/dist/enums/raw/Analytics.js +5 -2
- package/dist/enums/raw/Analytics.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/models/args/FetchArgs.d.ts +9 -0
- package/dist/models/args/FetchArgs.js +16 -0
- package/dist/models/args/FetchArgs.js.map +1 -1
- package/dist/models/args/PostArgs.d.ts +1 -0
- package/dist/models/args/PostArgs.js +2 -0
- package/dist/models/args/PostArgs.js.map +1 -1
- package/dist/models/data/Analytics.d.ts +43 -0
- package/dist/models/data/Analytics.js +92 -0
- package/dist/models/data/Analytics.js.map +1 -0
- package/dist/models/data/Conversation.d.ts +93 -0
- package/dist/models/data/Conversation.js +293 -0
- package/dist/models/data/Conversation.js.map +1 -0
- package/dist/models/data/CursoredData.d.ts +2 -1
- package/dist/models/data/CursoredData.js +6 -1
- package/dist/models/data/CursoredData.js.map +1 -1
- package/dist/models/data/DirectMessage.d.ts +105 -0
- package/dist/models/data/DirectMessage.js +284 -0
- package/dist/models/data/DirectMessage.js.map +1 -0
- package/dist/models/data/Inbox.d.ts +44 -0
- package/dist/models/data/Inbox.js +106 -0
- package/dist/models/data/Inbox.js.map +1 -0
- package/dist/models/data/List.d.ts +20 -0
- package/dist/models/data/List.js +50 -1
- package/dist/models/data/List.js.map +1 -1
- package/dist/models/data/Tweet.d.ts +6 -6
- package/dist/models/data/Tweet.js +4 -2
- package/dist/models/data/Tweet.js.map +1 -1
- package/dist/models/data/User.d.ts +2 -0
- package/dist/models/data/User.js +6 -0
- package/dist/models/data/User.js.map +1 -1
- package/dist/requests/DirectMessage.d.ts +28 -0
- package/dist/requests/DirectMessage.js +149 -0
- package/dist/requests/DirectMessage.js.map +1 -0
- package/dist/requests/List.d.ts +10 -0
- package/dist/requests/List.js +52 -0
- package/dist/requests/List.js.map +1 -1
- package/dist/requests/Tweet.d.ts +8 -0
- package/dist/requests/Tweet.js +30 -0
- package/dist/requests/Tweet.js.map +1 -1
- package/dist/requests/User.d.ts +8 -1
- package/dist/requests/User.js +67 -8
- package/dist/requests/User.js.map +1 -1
- package/dist/services/public/DirectMessageService.d.ts +100 -0
- package/dist/services/public/DirectMessageService.js +143 -0
- package/dist/services/public/DirectMessageService.js.map +1 -0
- package/dist/services/public/FetcherService.d.ts +2 -2
- package/dist/services/public/FetcherService.js +4 -4
- package/dist/services/public/FetcherService.js.map +1 -1
- package/dist/services/public/ListService.d.ts +85 -0
- package/dist/services/public/ListService.js +111 -0
- package/dist/services/public/ListService.js.map +1 -1
- package/dist/services/public/TweetService.d.ts +56 -0
- package/dist/services/public/TweetService.js +72 -0
- package/dist/services/public/TweetService.js.map +1 -1
- package/dist/services/public/UserService.d.ts +61 -2
- package/dist/services/public/UserService.js +89 -0
- package/dist/services/public/UserService.js.map +1 -1
- package/dist/types/args/FetchArgs.d.ts +69 -12
- package/dist/types/args/PostArgs.d.ts +29 -11
- package/dist/types/data/Analytics.d.ts +42 -0
- package/dist/types/data/Analytics.js +3 -0
- package/dist/types/data/Analytics.js.map +1 -0
- package/dist/types/data/Conversation.d.ts +32 -0
- package/dist/types/data/Conversation.js +3 -0
- package/dist/types/data/Conversation.js.map +1 -0
- package/dist/types/data/CursoredData.d.ts +4 -1
- package/dist/types/data/DirectMessage.d.ts +25 -0
- package/dist/types/data/DirectMessage.js +3 -0
- package/dist/types/data/DirectMessage.js.map +1 -0
- package/dist/types/data/Inbox.d.ts +18 -0
- package/dist/types/data/Inbox.js +3 -0
- package/dist/types/data/Inbox.js.map +1 -0
- package/dist/types/data/List.d.ts +5 -1
- package/dist/types/data/Tweet.d.ts +6 -6
- package/dist/types/data/User.d.ts +4 -0
- package/dist/types/raw/base/Analytic.d.ts +6 -1
- package/dist/types/raw/base/Message.d.ts +16 -0
- package/dist/types/raw/base/Message.js +4 -0
- package/dist/types/raw/base/Message.js.map +1 -0
- package/dist/types/raw/base/Tweet.d.ts +6 -6
- package/dist/types/raw/base/User.d.ts +2 -1
- package/dist/types/raw/composite/TimelineList.d.ts +9 -0
- package/dist/types/raw/composite/TimelineList.js +3 -0
- package/dist/types/raw/composite/TimelineList.js.map +1 -0
- package/dist/types/raw/dm/Conversation.d.ts +55 -0
- package/dist/types/raw/dm/Conversation.js +4 -0
- package/dist/types/raw/dm/Conversation.js.map +1 -0
- package/dist/types/raw/dm/InboxInitial.d.ts +137 -0
- package/dist/types/raw/dm/InboxInitial.js +4 -0
- package/dist/types/raw/dm/InboxInitial.js.map +1 -0
- package/dist/types/raw/dm/InboxTimeline.d.ts +287 -0
- package/dist/types/raw/dm/InboxTimeline.js +4 -0
- package/dist/types/raw/dm/InboxTimeline.js.map +1 -0
- package/dist/types/raw/dm/UserUpdates.d.ts +41 -0
- package/dist/types/raw/dm/UserUpdates.js +4 -0
- package/dist/types/raw/dm/UserUpdates.js.map +1 -0
- package/dist/types/raw/list/AddMember.d.ts +151 -0
- package/dist/types/raw/list/AddMember.js +4 -0
- package/dist/types/raw/list/AddMember.js.map +1 -0
- package/dist/types/raw/list/Details.d.ts +44 -13
- package/dist/types/raw/list/RemoveMember.d.ts +150 -0
- package/dist/types/raw/list/RemoveMember.js +4 -0
- package/dist/types/raw/list/RemoveMember.js.map +1 -0
- package/dist/types/raw/tweet/Bookmark.d.ts +12 -0
- package/dist/types/raw/tweet/Bookmark.js +4 -0
- package/dist/types/raw/tweet/Bookmark.js.map +1 -0
- package/dist/types/raw/tweet/Unbookmark.d.ts +11 -0
- package/dist/types/raw/tweet/Unbookmark.js +4 -0
- package/dist/types/raw/tweet/Unbookmark.js.map +1 -0
- package/dist/types/raw/user/Analytics.d.ts +6 -18
- package/dist/types/raw/user/Analytics.js +0 -1
- package/dist/types/raw/user/Analytics.js.map +1 -1
- package/dist/types/raw/user/Lists.d.ts +319 -0
- package/dist/types/raw/user/Lists.js +4 -0
- package/dist/types/raw/user/Lists.js.map +1 -0
- package/eslint.config.mjs +1 -1
- package/package.json +11 -6
- package/playground/.env.example +1 -0
- package/playground/README.md +53 -0
- package/playground/index.js +15 -0
- package/playground/package.json +15 -0
- package/src/Rettiwt.ts +5 -0
- package/src/cli.ts +2 -0
- package/src/collections/Extractors.ts +29 -0
- package/src/collections/Groups.ts +11 -0
- package/src/collections/Requests.ts +20 -0
- package/src/commands/DirectMessage.ts +62 -0
- package/src/commands/List.ts +44 -3
- package/src/commands/Tweet.ts +29 -1
- package/src/commands/User.ts +65 -1
- package/src/enums/Data.ts +2 -0
- package/src/enums/Resource.ts +13 -0
- package/src/enums/raw/Analytics.ts +5 -2
- package/src/index.ts +15 -0
- package/src/models/args/FetchArgs.ts +17 -0
- package/src/models/args/PostArgs.ts +2 -0
- package/src/models/data/Analytics.ts +97 -0
- package/src/models/data/Conversation.ts +344 -0
- package/src/models/data/CursoredData.ts +7 -2
- package/src/models/data/DirectMessage.ts +335 -0
- package/src/models/data/Inbox.ts +124 -0
- package/src/models/data/List.ts +60 -1
- package/src/models/data/Tweet.ts +10 -8
- package/src/models/data/User.ts +6 -0
- package/src/requests/DirectMessage.ts +233 -0
- package/src/requests/List.ts +58 -0
- package/src/requests/Tweet.ts +32 -0
- package/src/requests/User.ts +70 -7
- package/src/services/public/DirectMessageService.ts +159 -0
- package/src/services/public/FetcherService.ts +3 -3
- package/src/services/public/ListService.ts +127 -0
- package/src/services/public/TweetService.ts +82 -0
- package/src/services/public/UserService.ts +110 -2
- package/src/types/args/FetchArgs.ts +77 -12
- package/src/types/args/PostArgs.ts +31 -11
- package/src/types/data/Analytics.ts +58 -0
- package/src/types/data/Conversation.ts +44 -0
- package/src/types/data/CursoredData.ts +4 -1
- package/src/types/data/DirectMessage.ts +33 -0
- package/src/types/data/Inbox.ts +23 -0
- package/src/types/data/List.ts +7 -1
- package/src/types/data/Tweet.ts +6 -6
- package/src/types/data/User.ts +6 -0
- package/src/types/raw/base/Analytic.ts +7 -1
- package/src/types/raw/base/Message.ts +22 -0
- package/src/types/raw/base/Tweet.ts +6 -6
- package/src/types/raw/base/User.ts +2 -1
- package/src/types/raw/composite/TimelineList.ts +10 -0
- package/src/types/raw/dm/Conversation.ts +59 -0
- package/src/types/raw/dm/InboxInitial.ts +155 -0
- package/src/types/raw/dm/InboxTimeline.ts +301 -0
- package/src/types/raw/dm/UserUpdates.ts +46 -0
- package/src/types/raw/list/AddMember.ts +175 -0
- package/src/types/raw/list/Details.ts +52 -13
- package/src/types/raw/list/RemoveMember.ts +174 -0
- package/src/types/raw/tweet/Bookmark.ts +14 -0
- package/src/types/raw/tweet/Unbookmark.ts +14 -0
- package/src/types/raw/user/Analytics.ts +6 -22
- package/src/types/raw/user/Lists.ts +378 -0
- 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
|
*/
|
package/dist/models/data/List.js
CHANGED
|
@@ -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.
|
|
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":";;;
|
|
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
|
|
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
|
|
21
|
+
likeCount?: number;
|
|
22
22
|
media?: TweetMedia[];
|
|
23
|
-
quoteCount
|
|
23
|
+
quoteCount?: number;
|
|
24
24
|
quoted?: Tweet;
|
|
25
|
-
replyCount
|
|
25
|
+
replyCount?: number;
|
|
26
26
|
replyTo?: string;
|
|
27
|
-
retweetCount
|
|
27
|
+
retweetCount?: number;
|
|
28
28
|
retweetedTweet?: Tweet;
|
|
29
29
|
tweetBy: User;
|
|
30
30
|
url: string;
|
|
31
|
-
viewCount
|
|
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
|
|
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
|
|
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}`;
|