@cexy/hoonfca 1.0.4 → 1.0.5

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 (135) hide show
  1. package/CHANGELOG.md +181 -0
  2. package/DOCS.md +2636 -0
  3. package/LICENSE-MIT +21 -21
  4. package/README.md +632 -0
  5. package/func/checkUpdate.js +222 -0
  6. package/func/logger.js +48 -0
  7. package/index.d.ts +731 -605
  8. package/index.js +6 -774
  9. package/module/config.js +34 -0
  10. package/module/login.js +136 -0
  11. package/module/loginHelper.js +1034 -0
  12. package/module/options.js +45 -0
  13. package/package.json +54 -19
  14. package/src/api/action/addExternalModule.js +25 -0
  15. package/src/api/action/changeAvatar.js +137 -0
  16. package/src/{changeBio.js → api/action/changeBio.js} +75 -76
  17. package/src/api/action/enableAutoSaveAppState.js +73 -0
  18. package/src/{getCurrentUserID.js → api/action/getCurrentUserID.js} +7 -7
  19. package/src/{handleFriendRequest.js → api/action/handleFriendRequest.js} +57 -57
  20. package/src/api/action/logout.js +76 -0
  21. package/src/api/action/refreshFb_dtsg.js +48 -0
  22. package/src/api/action/setPostReaction.js +106 -0
  23. package/src/api/action/unfriend.js +54 -0
  24. package/src/api/http/httpGet.js +46 -0
  25. package/src/api/http/httpPost.js +52 -0
  26. package/src/api/http/postFormData.js +47 -0
  27. package/src/api/messaging/addUserToGroup.js +68 -0
  28. package/src/api/messaging/changeAdminStatus.js +122 -0
  29. package/src/api/messaging/changeArchivedStatus.js +55 -0
  30. package/src/api/messaging/changeBlockedStatus.js +48 -0
  31. package/src/api/messaging/changeGroupImage.js +90 -0
  32. package/src/api/messaging/changeNickname.js +70 -0
  33. package/src/api/messaging/changeThreadColor.js +79 -0
  34. package/src/api/messaging/changeThreadEmoji.js +106 -0
  35. package/src/{createNewGroup.js → api/messaging/createNewGroup.js} +88 -88
  36. package/src/api/messaging/createPoll.js +43 -0
  37. package/src/api/messaging/createThemeAI.js +98 -0
  38. package/src/{deleteMessage.js → api/messaging/deleteMessage.js} +56 -56
  39. package/src/{deleteThread.js → api/messaging/deleteThread.js} +56 -56
  40. package/src/api/messaging/editMessage.js +68 -0
  41. package/src/api/messaging/forwardAttachment.js +51 -0
  42. package/src/{getEmojiUrl.js → api/messaging/getEmojiUrl.js} +8 -8
  43. package/src/{getFriendsList.js → api/messaging/getFriendsList.js} +82 -84
  44. package/src/api/messaging/getMessage.js +829 -0
  45. package/src/api/messaging/getThemePictures.js +62 -0
  46. package/src/api/messaging/handleMessageRequest.js +65 -0
  47. package/src/{markAsDelivered.js → api/messaging/markAsDelivered.js} +57 -58
  48. package/src/{markAsRead.js → api/messaging/markAsRead.js} +88 -88
  49. package/src/{markAsReadAll.js → api/messaging/markAsReadAll.js} +49 -50
  50. package/src/api/messaging/markAsSeen.js +61 -0
  51. package/src/{muteThread.js → api/messaging/muteThread.js} +50 -52
  52. package/src/api/messaging/removeUserFromGroup.js +106 -0
  53. package/src/{resolvePhotoUrl.js → api/messaging/resolvePhotoUrl.js} +43 -45
  54. package/src/api/messaging/scheduler.js +264 -0
  55. package/src/{searchForThread.js → api/messaging/searchForThread.js} +52 -53
  56. package/src/api/messaging/sendMessage.js +272 -0
  57. package/src/api/messaging/sendTypingIndicator.js +67 -0
  58. package/src/api/messaging/setMessageReaction.js +76 -0
  59. package/src/api/messaging/setTitle.js +119 -0
  60. package/src/{shareContact.js → api/messaging/shareContact.js} +49 -53
  61. package/src/api/messaging/threadColors.js +128 -0
  62. package/src/api/messaging/unsendMessage.js +81 -0
  63. package/src/api/messaging/uploadAttachment.js +94 -0
  64. package/src/api/socket/core/connectMqtt.js +255 -0
  65. package/src/api/socket/core/emitAuth.js +106 -0
  66. package/src/api/socket/core/getSeqID.js +40 -0
  67. package/src/api/socket/core/getTaskResponseData.js +22 -0
  68. package/src/api/socket/core/markDelivery.js +12 -0
  69. package/src/api/socket/core/parseDelta.js +391 -0
  70. package/src/api/socket/detail/buildStream.js +208 -0
  71. package/src/api/socket/detail/constants.js +24 -0
  72. package/src/api/socket/listenMqtt.js +364 -0
  73. package/src/api/socket/middleware/index.js +216 -0
  74. package/src/{getThreadHistory.js → api/threads/getThreadHistory.js} +664 -647
  75. package/src/api/threads/getThreadInfo.js +438 -0
  76. package/src/{getThreadList.js → api/threads/getThreadList.js} +293 -292
  77. package/src/{getThreadPictures.js → api/threads/getThreadPictures.js} +78 -79
  78. package/src/{getUserID.js → api/users/getUserID.js} +65 -66
  79. package/src/api/users/getUserInfo.js +327 -0
  80. package/src/api/users/getUserInfoV2.js +134 -0
  81. package/src/core/sendReqMqtt.js +96 -0
  82. package/src/database/models/index.js +87 -0
  83. package/src/database/models/thread.js +45 -0
  84. package/src/database/models/user.js +46 -0
  85. package/src/database/threadData.js +98 -0
  86. package/src/database/userData.js +89 -0
  87. package/src/utils/client.js +320 -0
  88. package/src/utils/constants.js +23 -0
  89. package/{utils.js → src/utils/format.js} +1115 -1447
  90. package/src/utils/headers.js +115 -0
  91. package/src/utils/request.js +305 -0
  92. package/.travis.yml +0 -6
  93. package/src/addExternalModule.js +0 -23
  94. package/src/addUserToGroup.js +0 -113
  95. package/src/changeAdminStatus.js +0 -95
  96. package/src/changeApprovalMode.js +0 -79
  97. package/src/changeArchivedStatus.js +0 -55
  98. package/src/changeBlockedStatus.js +0 -47
  99. package/src/changeBlockedStatusMqtt.js +0 -86
  100. package/src/changeGroupImage.js +0 -133
  101. package/src/changeNickname.js +0 -59
  102. package/src/changeThreadColor.js +0 -71
  103. package/src/changeThreadEmoji.js +0 -55
  104. package/src/createPoll.js +0 -130
  105. package/src/editMessage.js +0 -63
  106. package/src/forwardAttachment.js +0 -60
  107. package/src/forwardMessage.js +0 -63
  108. package/src/getGroupsList.js +0 -83
  109. package/src/getMarketplace.js +0 -84
  110. package/src/getNotifications.js +0 -86
  111. package/src/getPagesList.js +0 -83
  112. package/src/getStories.js +0 -88
  113. package/src/getThreadInfo.js +0 -222
  114. package/src/getUserInfo.js +0 -128
  115. package/src/handleMessageRequest.js +0 -65
  116. package/src/httpGet.js +0 -58
  117. package/src/httpPost.js +0 -58
  118. package/src/listenMqtt.js +0 -1018
  119. package/src/logout.js +0 -75
  120. package/src/markAsSeen.js +0 -61
  121. package/src/pinMessage.js +0 -61
  122. package/src/removeUserFromGroup.js +0 -79
  123. package/src/searchUsers.js +0 -89
  124. package/src/sendComment.js +0 -161
  125. package/src/sendMessage.js +0 -457
  126. package/src/sendTypingIndicator.js +0 -179
  127. package/src/setBio.js +0 -86
  128. package/src/setMessageReaction.js +0 -186
  129. package/src/setPostReaction.js +0 -71
  130. package/src/setTheme.js +0 -313
  131. package/src/setTitle.js +0 -90
  132. package/src/shareLink.js +0 -62
  133. package/src/threadColors.js +0 -57
  134. package/src/unfriend.js +0 -53
  135. package/src/unsendMessage.js +0 -104
package/index.d.ts CHANGED
@@ -1,620 +1,746 @@
1
- // Origin: NOCOM-BOT/mod_fbmsg_legacy
2
-
3
- declare module 'dinovn-fca' {
4
- import type { Readable, Duplex, Transform } from "stream";
5
- import type EventEmitter from "events";
6
-
7
- type ReadableStream = Readable | Duplex | Transform;
8
- function login(credentials: Partial<{
9
- email: string,
10
- password: string,
11
- appState: AppstateData
12
- }>, options: Partial<IFCAU_Options>, callback: (err: Error | null, api: IFCAU_API) => void): void;
13
- function login(credentials: Partial<{
14
- email: string,
15
- password: string,
16
- appState: AppstateData
17
- }>, options: Partial<IFCAU_Options>): Promise<IFCAU_API>;
18
- function login(credentials: Partial<{
19
- email: string,
20
- password: string,
21
- appState: AppstateData
22
- }>, callback: (err: Error | null, api: IFCAU_API) => void): void;
23
- function login(credentials: Partial<{
24
- email: string,
25
- password: string,
26
- appState: AppstateData
27
- }>): Promise<IFCAU_API>;
28
-
29
- export default login;
30
-
31
- export type Cookie = {
32
- key: string,
33
- value: string,
34
- domain: string,
35
- path?: string,
36
- hostOnly?: boolean,
37
- creation?: string,
38
- lastAccessed?: string
39
- }
1
+ declare module '@dongdev/fca-unofficial' {
2
+ import type EventEmitter from "events";
3
+ import type { Duplex, Readable, Transform } from "stream";
40
4
 
41
- export type AppstateData = {
42
- appState: Cookie[]
43
- }
5
+ // ============================================================================
6
+ // Type Definitions
7
+ // ============================================================================
44
8
 
45
- export type MessageObject = {
46
- body: string,
47
- sticker?: string,
48
- attachment?: ReadableStream | ReadableStream[],
49
- url?: string,
50
- emoji?: string,
51
- emojiSize?: string,
52
- mentions?: {
53
- tag: string,
54
- id: string,
55
- fromIndex?: number
56
- }[],
57
- location?: {
58
- latitude: number,
59
- longitude: number,
60
- current?: boolean
61
- }
62
- }
9
+ type ReadableStream = Readable | Duplex | Transform;
63
10
 
64
- function sendMessage(
65
- message: string | MessageObject,
66
- threadID: string | string[],
67
- callback?: (err?: Error, data?: { threadID: string, messageID: string, timestamp: number }) => void,
68
- replyMessageID?: string,
69
- isGroup?: boolean
70
- ): Promise<{ threadID: string, messageID: string, timestamp: number }>;
71
- function sendMessage(
72
- message: string | MessageObject,
73
- threadID: string | string[],
74
- replyMessageID?: string,
75
- isGroup?: boolean
76
- ): Promise<{ threadID: string, messageID: string, timestamp: number }>;
77
-
78
- export type IFCAU_API = {
79
- addUserToGroup: (userID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
80
- changeAdminStatus: (threadID: string, adminIDs: string | string[], adminStatus: boolean, callback?: (err?: Error) => void) => Promise<void>,
81
- changeApprovalMode: (approvalMode: 0 | 1, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
82
- changeArchivedStatus: (threadOrThreads: string | string[], archive: boolean, callback?: (err?: Error) => void) => Promise<void>,
83
- changeBlockedStatus: (userID: string, blocked: boolean, callback?: (err?: Error) => void) => Promise<void>,
84
- changeBlockedStatusMqtt: (userID: string, status: boolean, type: string?, callback?: (err?: Error) => void) => Promise<void>,
85
- changeGroupImage: (image: ReadableStream, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
86
- changeNickname: (nickname: string, threadID: string, pariticipantID: string, callback?: (err?: Error) => void) => Promise<void>,
87
- changeThreadColor: (color: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
88
- changeThreadEmoji: (emoji: string | null, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
89
- createNewGroup: (participantIDs: string[], groupTitle?: string, callback?: (err: Error, threadID: string) => void) => Promise<string>,
90
- createPoll: (title: string, threadID: string, options?: { [item: string]: boolean }, callback?: (err?: Error) => void) => Promise<void>,
91
- deleteMessage: (messageOrMessages: string | string[], callback?: (err?: Error) => void) => Promise<void>,
92
- deleteThread: (threadOrThreads: string | string[], callback?: (err?: Error) => void) => Promise<void>,
93
- editMessage: (text: string, messageID: string, callback?: (err?: Error) => void) => Promise<void>,
94
- forwardAttachment: (attachmentID: string, userOrUsers: string | string[], callback?: (err?: Error) => void) => Promise<void>,
95
- forwardMessage: (messageID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
96
- getAppState: () => any,
97
- getCurrentUserID: () => string,
98
- getEmojiUrl: (c: string, size: number, pixelRatio: number) => string,
99
- getFriendsList: (callback?: (err: Error | null, friends: IFCAU_Friend[]) => void) => Promise<IFCAU_Friend[]>,
100
- getThreadHistory: (threadID: string, amount: number, time?: number, callback?: (err: Error | null, messages: any[]) => void) => Promise<any[]>,
101
- getThreadInfo: (threadID: string, callback?: (err: Error | null, thread: IFCAU_Thread) => void) => Promise<IFCAU_Thread>,
102
- getThreadList: (limit: number, timestamp: number | null, tags: string[], callback?: (err: Error | null, threads: IFCAU_ThreadList) => void) => Promise<IFCAU_ThreadList>,
103
- getThreadPictures: (threadID: string, offset: number, limit: number, callback?: (err: Error | null, pictures: string[]) => void) => Promise<string[]>,
104
- getUserID: (name: string, callback?: (err: Error | null, obj: IFCAU_UserIDResponse) => void) => Promise<IFCAU_UserIDResponse>,
105
- getUserInfo: (userOrUsers: string | string[], callback?: (err: Error | null, users: { [id: string]: IFCAU_User }) => void) => Promise<{ [id: string]: IFCAU_User }>,
106
- threadColors: {
107
- [color: string]: string
108
- },
109
- handleMessageRequest(threadOrThreads: string | string[], accept: boolean, callback: (err?: Error) => void): Promise<void>;
110
- listen(callback?: (err: Error | null, message: IFCAU_ListenMessage) => void): EventEmitter;
111
- listenMqtt(callback?: (err: Error | null, message: IFCAU_ListenMessage) => void): EventEmitter & { stopListening: (callback?: () => void) => void };
112
- logout: (callback?: (err?: Error) => void) => Promise<void>,
113
- markAsDelivered(threadID: string, messageID: string, callback?: (err?: Error) => void): Promise<void>,
114
- markAsRead(threadID: string, read?: boolean, callback?: (err?: Error) => void): Promise<void>,
115
- markAsReadAll: (callback?: (err?: Error) => void) => Promise<void>,
116
- markAsSeen(seenTimestamp?: number, callback?: (err?: Error) => void): Promise<void>,
117
- muteThread: (threadID: string, muteSeconds: number, callback?: (err?: Error) => void) => Promise<void>,
118
- pinMessage: (pinMode: boolean, messageID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
119
- removeUserFromGroup: (userID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
120
- resolvePhotoUrl: (photoID: string, callback?: (err: Error | null, url: string) => void) => Promise<string>,
121
- sendMessage: typeof sendMessage,
122
- sendComment: (message: string | {
123
- body: string,
124
- attachment?: ReadableStream,
125
- }, postID: string, callback?: (err?: Error) => void) => Promise<void>,
126
- sendTypingIndicator: (threadID: string, callback?: (err?: Error) => void | number, delay?: number) => Promise<void>,
127
- setMessageReaction: (reaction: string, messageID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
128
- setOptions: (options: Partial<IFCAU_Options>) => void,
129
- setTitle: (newTitle: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
130
- shareContact: (contactID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
131
- shareLink: (text: string, link: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
132
- setTheme: (themeID?: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
133
- unsendMessage: (messageID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>,
134
- }
11
+ // ============================================================================
12
+ // Login Function
13
+ // ============================================================================
135
14
 
136
- export type IFCAU_ListenMessage =
137
- {
138
- type: "message",
139
- attachments: IFCAU_Attachment[],
140
- args: string[],
141
- body: string,
142
- isGroup: boolean,
143
- mentions: { [id: string]: string },
144
- messageID: string,
145
- senderID: string,
146
- threadID: string,
147
- isUnread: boolean,
148
- participantIDs: string[]
149
- } |
150
- {
151
- type: "event",
152
- author: string,
153
- logMessageBody: string,
154
- logMessageData: {
155
- image: {
156
- attachmentID: string,
157
- width: number,
158
- height: number,
159
- url: string
160
- }
161
- },
162
- logMessageType: "log:thread-image",
163
- threadID: string
164
- } |
165
- {
166
- type: "event",
167
- author: string,
168
- logMessageBody: string,
169
- logMessageData: {
170
- addedParticipants: {
171
- fanoutPolicy: string,
172
- firstName: string,
173
- fullName: string,
174
- groupJoinStatus: string,
175
- initialFolder: string,
176
- initialFolderId: {
177
- systemFolderId: string,
178
- },
179
- lastUnsubscribeTimestampMs: string,
180
- userFbId: string,
181
- isMessengerUser: boolean
182
- }[],
183
- },
184
- logMessageType: "log:subscribe",
185
- threadID: string,
186
- participantIDs: string[]
187
- } |
188
- {
189
- type: "event",
190
- author: string,
191
- logMessageBody: string,
192
- logMessageData: { leftParticipantFbId: string },
193
- logMessageType: "log:unsubscribe",
194
- threadID: string,
195
- participantIDs: string[]
196
- } |
197
- {
198
- type: "event",
199
- author: string,
200
- logMessageBody: string,
201
- logMessageData: { name: string },
202
- logMessageType: "log:thread-name",
203
- threadID: string,
204
- participantIDs: string[]
205
- } |
206
- {
207
- type: "event",
208
- author: string,
209
- logMessageBody: string,
210
- logMessageData: {
211
- theme_color: string,
212
- gradient?: string,
213
- should_show_icon: string,
214
- theme_id: string,
215
- accessibility_label: string,
216
- theme_name_with_subtitle: string,
217
- theme_emoji?: string
218
- },
219
- logMessageType: "log:thread-color",
220
- threadID: string,
221
- participantIDs: string[]
222
- } |
223
- {
224
- type: "event",
225
- author: string,
226
- logMessageBody: string,
227
- logMessageData: {
228
- thread_quick_reaction_instruction_key_id: string,
229
- thread_quick_reaction_emoji: string,
230
- thread_quick_reaction_emoji_url: string
231
- },
232
- logMessageType: "log:thread-icon",
233
- threadID: string,
234
- participantIDs: string[]
235
- } |
236
- {
237
- type: "event",
238
- author: string,
239
- logMessageBody: string,
240
- logMessageData: {
241
- nickname: string,
242
- participant_id: string
243
- },
244
- logMessageType: "log:user-nickname",
245
- threadID: string,
246
- participantIDs: string[]
247
- } |
248
- {
249
- type: "event",
250
- author: string,
251
- logMessageBody: string,
252
- logMessageData: {
253
- THREAD_CATEGORY: string,
254
- TARGET_ID: string,
255
- ADMIN_TYPE: string,
256
- ADMIN_EVENT: 'add_admin' | 'remove_admin'
257
- },
258
- logMessageType: "log:thread-admins",
259
- threadID: string,
260
- participantIDs: string[]
261
- } |
262
- {
263
- type: "event",
264
- author: string,
265
- logMessageBody: string,
266
- logMessageData: {
267
- removed_option_ids: string,
268
- question_json: string,
269
- event_type: 'question_creation' | 'update_vote' | 'add_unvoted_option' | 'multiple_updates',
270
- added_option_ids: string,
271
- new_option_texts: string,
272
- new_option_ids: string,
273
- question_id: string,
274
- },
275
- logMessageType: "log:thread-poll",
276
- threadID: string,
277
- participantIDs: string[]
278
- } |
279
- {
280
- type: "event",
281
- author: string,
282
- logMessageBody: string,
283
- logMessageData: { APPROVAL_MODE: '0' | '1', THREAD_CATEGORY: string },
284
- logMessageType: "log:thread-approval-mode",
285
- threadID: string,
286
- participantIDs: string[]
287
- } |
288
- {
289
- type: "event",
290
- author: string,
291
- logMessageBody: string,
292
- logMessageData: any,
293
- logMessageType: "log:thread-call",
294
- threadID: string,
295
- participantIDs: string[]
296
- } |
297
- {
298
- type: "typ",
299
- from: string,
300
- fromMobile: boolean,
301
- isTyping: boolean,
302
- threadID: string
303
- } |
304
- {
305
- type: "read",
306
- threadID: string,
307
- time: number,
308
- } |
309
- {
310
- type: "read_receipt",
311
- reader: string,
312
- threadID: string,
313
- time: number
314
- } | {
315
- type: "message_reaction",
316
- threadID: string,
317
- messageID: string,
318
- reaction: string,
319
- senderID: string,
320
- userID: string,
321
- reactionTimestamp: number
322
- } | {
323
- type: "presence",
324
- statuses: number,
325
- timestamp: number,
326
- userID: string
327
- } | {
328
- type: "message_unsend",
329
- threadID: string,
330
- senderID: string,
331
- messageID: string,
332
- deletionnTimestamp: number
333
- } | {
334
- type: "message_reply"
335
- attachments: IFCAU_Attachment[],
336
- args: string[],
337
- body: string,
338
- isGroup: boolean,
339
- mentions: { [id: string]: string },
340
- messageID: string,
341
- senderID: string,
342
- threadID: string,
343
- isUnread: boolean,
344
- participantIDs: string[],
345
- messageReply: {
346
- attachments: IFCAU_Attachment[],
347
- body: string,
348
- isGroup: boolean,
349
- mentions: { [id: string]: string },
350
- messageID: string,
351
- senderID: string,
352
- threadID: string,
353
- isUnread: boolean
354
- }
355
- };
15
+ function login(
16
+ credentials: Partial<{
17
+ email: string;
18
+ password: string;
19
+ appState: AppstateData;
20
+ Cookie?: string | string[] | Record<string, string>;
21
+ }>,
22
+ options: Partial<IFCAU_Options>,
23
+ callback: (err: Error | null, api: IFCAU_API) => void
24
+ ): void;
25
+ function login(
26
+ credentials: Partial<{
27
+ email: string;
28
+ password: string;
29
+ appState: AppstateData;
30
+ Cookie?: string | string[] | Record<string, string>;
31
+ }>,
32
+ options: Partial<IFCAU_Options>
33
+ ): Promise<IFCAU_API>;
34
+ function login(
35
+ credentials: Partial<{
36
+ email: string;
37
+ password: string;
38
+ appState: AppstateData;
39
+ Cookie?: string | string[] | Record<string, string>;
40
+ }>,
41
+ callback: (err: Error | null, api: IFCAU_API) => void
42
+ ): void;
43
+ function login(
44
+ credentials: Partial<{
45
+ email: string;
46
+ password: string;
47
+ appState: AppstateData;
48
+ Cookie?: string | string[] | Record<string, string>;
49
+ }>
50
+ ): Promise<IFCAU_API>;
356
51
 
357
- export type IFCAU_Attachment =
358
- {
359
- type: "sticker",
360
- ID: string,
361
- url: string,
362
- packID: string,
363
- spriteUrl: string,
364
- spriteUrl2x: string,
365
- width: number,
366
- height: number,
367
- caption: string,
368
- description: string,
369
- frameCount: number,
370
- frameRate: number,
371
- framesPerRow: number,
372
- framesPerCol: number
373
- } |
374
- {
375
- type: "file",
376
- ID: string,
377
- filename: string,
378
- url: string,
379
- isMalicious: boolean,
380
- contentType: string
381
- } |
382
- {
383
- type: "photo",
384
- ID: string,
385
- filename: string,
386
- thumbnailUrl: string,
387
- previewUrl: string,
388
- previewWidth: number,
389
- previewHeight: number,
390
- largePreviewUrl: string,
391
- largePreviewWidth: number,
392
- largePreviewHeight: number,
393
- url: string,
394
- width: number,
395
- height: number
396
- } |
397
- {
398
- type: "animated_image",
399
- ID: string,
400
- filename: string,
401
- previewUrl: string,
402
- previewWidth: number,
403
- previewHeight: number,
404
- url: string,
405
- width: number,
406
- height: number
407
- } |
408
- {
409
- type: "video",
410
- ID: string,
411
- filename: string,
412
- previewUrl: string,
413
- previewWidth: number,
414
- previewHeight: number,
415
- url: string,
416
- width: number,
417
- height: number
418
- duration: number,
419
- videoType: string
420
- } |
421
- {
422
- type: "audio",
423
- ID: string,
424
- filename: string,
425
- audioType: string,
426
- duration: number,
427
- url: string,
428
- isVoiceMail: boolean
429
- } |
430
- {
431
- type: "location",
432
- ID: string,
433
- latitude: number,
434
- longitude: number,
435
- image: string,
436
- width: number,
437
- height: number,
438
- url: string,
439
- address: string
440
- } |
441
- {
442
- type: "share",
443
- ID: string,
444
- url: string,
445
- title: string,
446
- description: string,
447
- source: string,
448
- image: string,
449
- width: number,
450
- height: number,
451
- playable: boolean,
452
- duration: number,
453
- playableUrl: string,
454
- subattachments: any,
455
- properties: any
456
- }
457
-
458
- export type IFCAU_User = {
459
- name: string,
460
- firstName?: string,
461
- vanity?: string,
462
- thumbSrc: string,
463
- profileUrl: string | null,
464
- gender?: number,
465
- type: string,
466
- isFriend?: boolean,
467
- isBirthday: boolean,
468
- searchToken: any,
469
- alternateName?: string
470
- }
52
+ export default login;
53
+ export { login };
54
+
55
+ // ============================================================================
56
+ // Core Types
57
+ // ============================================================================
58
+
59
+ export type Cookie = {
60
+ key: string;
61
+ value: string;
62
+ domain: string;
63
+ path?: string;
64
+ hostOnly?: boolean;
65
+ creation?: string;
66
+ lastAccessed?: string;
67
+ };
68
+
69
+ export type AppstateData = {
70
+ appState: Cookie[];
71
+ };
471
72
 
472
- export type IFCAU_UserIDResponse = {
473
- userID: string,
474
- photoUrl: string,
475
- indexRank: number,
476
- name: string,
477
- isVerified: boolean,
478
- profileUrl: string,
479
- category: string,
480
- score: number,
481
- type: string
73
+ export type MessageObject = {
74
+ body: string;
75
+ sticker?: string;
76
+ attachment?: ReadableStream | ReadableStream[];
77
+ url?: string;
78
+ emoji?: string;
79
+ emojiSize?: string;
80
+ mentions?: {
81
+ tag: string;
82
+ id: string;
83
+ fromIndex?: number;
482
84
  }[];
85
+ location?: {
86
+ latitude: number;
87
+ longitude: number;
88
+ current?: boolean;
89
+ };
90
+ };
91
+
92
+ // ============================================================================
93
+ // Send Message Function
94
+ // ============================================================================
95
+
96
+ function sendMessage(
97
+ message: string | MessageObject,
98
+ threadID: string | string[],
99
+ callback?: (err?: Error, data?: { threadID: string; messageID: string; timestamp: number }) => void,
100
+ replyMessageID?: string,
101
+ isGroup?: boolean
102
+ ): Promise<{ threadID: string; messageID: string; timestamp: number }>;
103
+ function sendMessage(
104
+ message: string | MessageObject,
105
+ threadID: string | string[],
106
+ replyMessageID?: string,
107
+ isGroup?: boolean
108
+ ): Promise<{ threadID: string; messageID: string; timestamp: number }>;
109
+
110
+ // ============================================================================
111
+ // API Interface
112
+ // ============================================================================
113
+
114
+ export type IFCAU_API = {
115
+ // Group Management
116
+ addUserToGroup: (userID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
117
+ removeUserFromGroup: (userID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
118
+ createNewGroup: (participantIDs: string[], groupTitle?: string, callback?: (err: Error, threadID: string) => void) => Promise<string>;
119
+
120
+ // Admin & Permissions
121
+ changeAdminStatus: (threadID: string, adminIDs: string | string[], adminStatus: boolean, callback?: (err?: Error) => void) => Promise<void>;
122
+ changeApprovalMode: (approvalMode: 0 | 1, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
123
+
124
+ // Thread Management
125
+ changeArchivedStatus: (threadOrThreads: string | string[], archive: boolean, callback?: (err?: Error) => void) => Promise<void>;
126
+ changeBlockedStatus: (userID: string, blocked: boolean, callback?: (err?: Error) => void) => Promise<void>;
127
+ changeGroupImage: (image: ReadableStream, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
128
+ changeNickname: (nickname: string, threadID: string, participantID: string, callback?: (err?: Error) => void) => Promise<void>;
129
+ changeThreadColor: (color: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
130
+ changeThreadEmoji: (emoji: string | null, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
131
+ setTitle: (newTitle: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
132
+ deleteThread: (threadOrThreads: string | string[], callback?: (err?: Error) => void) => Promise<void>;
133
+ muteThread: (threadID: string, muteSeconds: number, callback?: (err?: Error) => void) => Promise<void>;
134
+
135
+ // Messages
136
+ sendMessage: typeof sendMessage;
137
+ editMessage: (text: string, messageID: string, callback?: (err?: Error) => void) => Promise<void>;
138
+ deleteMessage: (messageOrMessages: string | string[], callback?: (err?: Error) => void) => Promise<void>;
139
+ unsendMessage: (messageID: string, callback?: (err?: Error) => void) => Promise<void>;
140
+ unsendMessageMqtt: (messageID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
141
+ forwardMessage: (messageID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
142
+ forwardAttachment: (attachmentID: string, userOrUsers: string | string[], callback?: (err?: Error) => void) => Promise<void>;
143
+ pinMessage: (pinMode: boolean, messageID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
144
+
145
+ // Reactions & Interactions
146
+ setMessageReaction: (reaction: string, messageID: string, callback?: (err?: Error) => void, forceCustomReaction?: boolean) => Promise<void>;
147
+ setMessageReactionMqtt: (reaction: string, messageID: string, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
148
+ sendTypingIndicator: (threadID: string, callback?: (err?: Error) => void) => Promise<void>;
149
+ sendTypingIndicatorMqtt: (isTyping: boolean, threadID: string, callback?: (err?: Error) => void) => Promise<void>;
150
+
151
+ // Polls
152
+ createPoll: (title: string, threadID: string, options?: { [item: string]: boolean }, callback?: (err?: Error) => void) => Promise<void>;
483
153
 
484
- export type IFCAU_Options = {
485
- pauseLog: boolean,
486
- logLevel: "silly" | "verbose" | "info" | "http" | "warn" | "error" | "silent",
487
- selfListen: boolean,
488
- listenEvents: boolean,
489
- pageID: string,
490
- updatePresence: boolean,
491
- forceLogin: boolean,
492
- userAgent: string,
493
- autoMarkDelivery: boolean,
494
- autoMarkRead: boolean,
495
- proxy: string,
496
- online: boolean
154
+ // Read & Delivery Status
155
+ markAsRead: (threadID: string, read?: boolean, callback?: (err?: Error) => void) => Promise<void>;
156
+ markAsReadAll: (callback?: (err?: Error) => void) => Promise<void>;
157
+ markAsDelivered: (threadID: string, messageID: string, callback?: (err?: Error) => void) => Promise<void>;
158
+ markAsSeen: (seenTimestamp?: number, callback?: (err?: Error) => void) => Promise<void>;
159
+
160
+ // Thread Information
161
+ getThreadInfo: (threadID: string, callback?: (err: Error | null, thread: IFCAU_Thread) => void) => Promise<IFCAU_Thread>;
162
+ getThreadList: (limit: number, timestamp: number | null, tags: string[], callback?: (err: Error | null, threads: IFCAU_ThreadList) => void) => Promise<IFCAU_ThreadList>;
163
+ getThreadHistory: (threadID: string, amount: number, time?: number, callback?: (err: Error | null, messages: any[]) => void) => Promise<any[]>;
164
+ getThreadPictures: (threadID: string, offset: number, limit: number, callback?: (err: Error | null, pictures: string[]) => void) => Promise<string[]>;
165
+
166
+ // User Information
167
+ getUserInfo: (userOrUsers: string | string[], callback?: (err: Error | null, users: { [id: string]: IFCAU_User }) => void) => Promise<{ [id: string]: IFCAU_User }>;
168
+ getUserID: (name: string, callback?: (err: Error | null, obj: IFCAU_UserIDResponse) => void) => Promise<IFCAU_UserIDResponse>;
169
+ getFriendsList: (callback?: (err: Error | null, friends: IFCAU_Friend[]) => void) => Promise<IFCAU_Friend[]>;
170
+ getCurrentUserID: () => string;
171
+
172
+ // Utilities
173
+ getAppState: () => any;
174
+ getEmojiUrl: (c: string, size: number, pixelRatio: number) => string;
175
+ resolvePhotoUrl: (photoID: string, callback?: (err: Error | null, url: string) => void) => Promise<string>;
176
+ threadColors: {
177
+ [color: string]: string;
178
+ };
179
+
180
+ // Message Requests
181
+ handleMessageRequest: (threadOrThreads: string | string[], accept: boolean, callback?: (err?: Error) => void) => Promise<void>;
182
+
183
+ // Event Listeners
184
+ listen: (callback?: (err: Error | null, message: IFCAU_ListenMessage) => void) => EventEmitter;
185
+ listenMqtt: (callback?: (err: Error | null, message: IFCAU_ListenMessage) => void) => EventEmitter & { stopListening: (callback?: () => void) => void };
186
+
187
+ // Middleware System
188
+ useMiddleware: (middleware: IFCAU_Middleware | string, fn?: IFCAU_Middleware) => () => void;
189
+ removeMiddleware: (identifier: string | IFCAU_Middleware) => boolean;
190
+ clearMiddleware: () => void;
191
+ listMiddleware: () => string[];
192
+ setMiddlewareEnabled: (name: string, enabled: boolean) => boolean;
193
+ readonly middlewareCount: number;
194
+
195
+ // Configuration & Session
196
+ setOptions: (options: Partial<IFCAU_Options>) => void;
197
+ logout: (callback?: (err?: Error) => void) => Promise<void>;
198
+
199
+ // Message Scheduler
200
+ scheduler: {
201
+ scheduleMessage: (message: string | MessageObject, threadID: string | string[], when: Date | number | string, options?: { replyMessageID?: string; isGroup?: boolean; callback?: (err?: Error) => void }) => string;
202
+ cancelScheduledMessage: (id: string) => boolean;
203
+ getScheduledMessage: (id: string) => IFCAU_ScheduledMessage | null;
204
+ listScheduledMessages: () => IFCAU_ScheduledMessage[];
205
+ cancelAllScheduledMessages: () => number;
206
+ getScheduledCount: () => number;
207
+ cleanup: () => void;
208
+ };
209
+
210
+ // Auto-save AppState
211
+ enableAutoSaveAppState: (options?: { filePath?: string; interval?: number; saveOnLogin?: boolean }) => () => void;
212
+ };
213
+
214
+ // ============================================================================
215
+ // Listen Message Types
216
+ // ============================================================================
217
+
218
+ export type IFCAU_ListenMessage =
219
+ | {
220
+ type: "message";
221
+ attachments: IFCAU_Attachment[];
222
+ args: string[];
223
+ body: string;
224
+ isGroup: boolean;
225
+ mentions: { [id: string]: string };
226
+ messageID: string;
227
+ senderID: string;
228
+ threadID: string;
229
+ isUnread: boolean;
230
+ participantIDs: string[];
231
+ }
232
+ | {
233
+ type: "event";
234
+ author: string;
235
+ logMessageBody: string;
236
+ logMessageData: {
237
+ image: {
238
+ attachmentID: string;
239
+ width: number;
240
+ height: number;
241
+ url: string;
242
+ };
243
+ };
244
+ logMessageType: "log:thread-image";
245
+ threadID: string;
246
+ }
247
+ | {
248
+ type: "event";
249
+ author: string;
250
+ logMessageBody: string;
251
+ logMessageData: {
252
+ addedParticipants: {
253
+ fanoutPolicy: string;
254
+ firstName: string;
255
+ fullName: string;
256
+ groupJoinStatus: string;
257
+ initialFolder: string;
258
+ initialFolderId: {
259
+ systemFolderId: string;
260
+ };
261
+ lastUnsubscribeTimestampMs: string;
262
+ userFbId: string;
263
+ isMessengerUser: boolean;
264
+ }[];
265
+ };
266
+ logMessageType: "log:subscribe";
267
+ threadID: string;
268
+ participantIDs: string[];
269
+ }
270
+ | {
271
+ type: "event";
272
+ author: string;
273
+ logMessageBody: string;
274
+ logMessageData: { leftParticipantFbId: string };
275
+ logMessageType: "log:unsubscribe";
276
+ threadID: string;
277
+ participantIDs: string[];
278
+ }
279
+ | {
280
+ type: "event";
281
+ author: string;
282
+ logMessageBody: string;
283
+ logMessageData: { name: string };
284
+ logMessageType: "log:thread-name";
285
+ threadID: string;
286
+ participantIDs: string[];
287
+ }
288
+ | {
289
+ type: "event";
290
+ author: string;
291
+ logMessageBody: string;
292
+ logMessageData: {
293
+ theme_color: string;
294
+ gradient?: string;
295
+ should_show_icon: string;
296
+ theme_id: string;
297
+ accessibility_label: string;
298
+ theme_name_with_subtitle: string;
299
+ theme_emoji?: string;
300
+ };
301
+ logMessageType: "log:thread-color";
302
+ threadID: string;
303
+ participantIDs: string[];
497
304
  }
305
+ | {
306
+ type: "event";
307
+ author: string;
308
+ logMessageBody: string;
309
+ logMessageData: {
310
+ thread_quick_reaction_instruction_key_id: string;
311
+ thread_quick_reaction_emoji: string;
312
+ thread_quick_reaction_emoji_url: string;
313
+ };
314
+ logMessageType: "log:thread-icon";
315
+ threadID: string;
316
+ participantIDs: string[];
317
+ }
318
+ | {
319
+ type: "event";
320
+ author: string;
321
+ logMessageBody: string;
322
+ logMessageData: {
323
+ nickname: string;
324
+ participant_id: string;
325
+ };
326
+ logMessageType: "log:user-nickname";
327
+ threadID: string;
328
+ participantIDs: string[];
329
+ }
330
+ | {
331
+ type: "event";
332
+ author: string;
333
+ logMessageBody: string;
334
+ logMessageData: {
335
+ THREAD_CATEGORY: string;
336
+ TARGET_ID: string;
337
+ ADMIN_TYPE: string;
338
+ ADMIN_EVENT: 'add_admin' | 'remove_admin';
339
+ };
340
+ logMessageType: "log:thread-admins";
341
+ threadID: string;
342
+ participantIDs: string[];
343
+ }
344
+ | {
345
+ type: "event";
346
+ author: string;
347
+ logMessageBody: string;
348
+ logMessageData: {
349
+ removed_option_ids: string;
350
+ question_json: string;
351
+ event_type: 'question_creation' | 'update_vote' | 'add_unvoted_option' | 'multiple_updates';
352
+ added_option_ids: string;
353
+ new_option_texts: string;
354
+ new_option_ids: string;
355
+ question_id: string;
356
+ };
357
+ logMessageType: "log:thread-poll";
358
+ threadID: string;
359
+ participantIDs: string[];
360
+ }
361
+ | {
362
+ type: "event";
363
+ author: string;
364
+ logMessageBody: string;
365
+ logMessageData: { APPROVAL_MODE: '0' | '1'; THREAD_CATEGORY: string };
366
+ logMessageType: "log:thread-approval-mode";
367
+ threadID: string;
368
+ participantIDs: string[];
369
+ }
370
+ | {
371
+ type: "event";
372
+ author: string;
373
+ logMessageBody: string;
374
+ logMessageData: any;
375
+ logMessageType: "log:thread-call";
376
+ threadID: string;
377
+ participantIDs: string[];
378
+ }
379
+ | {
380
+ type: "typ";
381
+ from: string;
382
+ fromMobile: boolean;
383
+ isTyping: boolean;
384
+ threadID: string;
385
+ }
386
+ | {
387
+ type: "read";
388
+ threadID: string;
389
+ time: number;
390
+ }
391
+ | {
392
+ type: "read_receipt";
393
+ reader: string;
394
+ threadID: string;
395
+ time: number;
396
+ }
397
+ | {
398
+ type: "message_reaction";
399
+ threadID: string;
400
+ messageID: string;
401
+ reaction: string;
402
+ senderID: string;
403
+ userID: string;
404
+ reactionTimestamp: number;
405
+ }
406
+ | {
407
+ type: "presence";
408
+ statuses: number;
409
+ timestamp: number;
410
+ userID: string;
411
+ }
412
+ | {
413
+ type: "message_unsend";
414
+ threadID: string;
415
+ senderID: string;
416
+ messageID: string;
417
+ deletionTimestamp: number;
418
+ }
419
+ | {
420
+ type: "message_reply";
421
+ attachments: IFCAU_Attachment[];
422
+ args: string[];
423
+ body: string;
424
+ isGroup: boolean;
425
+ mentions: { [id: string]: string };
426
+ messageID: string;
427
+ senderID: string;
428
+ threadID: string;
429
+ isUnread: boolean;
430
+ participantIDs: string[];
431
+ messageReply: {
432
+ attachments: IFCAU_Attachment[];
433
+ body: string;
434
+ isGroup: boolean;
435
+ mentions: { [id: string]: string };
436
+ messageID: string;
437
+ senderID: string;
438
+ threadID: string;
439
+ isUnread: boolean;
440
+ };
441
+ };
498
442
 
499
- export type IFCAU_Friend = {
500
- alternativeName: string,
501
- firstName: string,
502
- gender: string,
503
- userID: string,
504
- isFriend: boolean,
505
- fullName: string,
506
- profilePicture: string,
507
- type: string,
508
- profileUrl: string,
509
- vanity: string,
510
- isBirthday: boolean
443
+ // ============================================================================
444
+ // Attachment Types
445
+ // ============================================================================
446
+
447
+ export type IFCAU_Attachment =
448
+ | {
449
+ type: "sticker";
450
+ ID: string;
451
+ url: string;
452
+ packID: string;
453
+ spriteUrl: string;
454
+ spriteUrl2x: string;
455
+ width: number;
456
+ height: number;
457
+ caption: string;
458
+ description: string;
459
+ frameCount: number;
460
+ frameRate: number;
461
+ framesPerRow: number;
462
+ framesPerCol: number;
463
+ }
464
+ | {
465
+ type: "file";
466
+ ID: string;
467
+ filename: string;
468
+ url: string;
469
+ isMalicious: boolean;
470
+ contentType: string;
471
+ }
472
+ | {
473
+ type: "photo";
474
+ ID: string;
475
+ filename: string;
476
+ thumbnailUrl: string;
477
+ previewUrl: string;
478
+ previewWidth: number;
479
+ previewHeight: number;
480
+ largePreviewUrl: string;
481
+ largePreviewWidth: number;
482
+ largePreviewHeight: number;
483
+ url: string;
484
+ width: number;
485
+ height: number;
486
+ }
487
+ | {
488
+ type: "animated_image";
489
+ ID: string;
490
+ filename: string;
491
+ previewUrl: string;
492
+ previewWidth: number;
493
+ previewHeight: number;
494
+ url: string;
495
+ width: number;
496
+ height: number;
497
+ }
498
+ | {
499
+ type: "video";
500
+ ID: string;
501
+ filename: string;
502
+ previewUrl: string;
503
+ previewWidth: number;
504
+ previewHeight: number;
505
+ url: string;
506
+ width: number;
507
+ height: number;
508
+ duration: number;
509
+ videoType: string;
510
+ }
511
+ | {
512
+ type: "audio";
513
+ ID: string;
514
+ filename: string;
515
+ audioType: string;
516
+ duration: number;
517
+ url: string;
518
+ isVoiceMail: boolean;
511
519
  }
520
+ | {
521
+ type: "location";
522
+ ID: string;
523
+ latitude: number;
524
+ longitude: number;
525
+ image: string;
526
+ width: number;
527
+ height: number;
528
+ url: string;
529
+ address: string;
530
+ }
531
+ | {
532
+ type: "share";
533
+ ID: string;
534
+ url: string;
535
+ title: string;
536
+ description: string;
537
+ source: string;
538
+ image: string;
539
+ width: number;
540
+ height: number;
541
+ playable: boolean;
542
+ duration: number;
543
+ playableUrl: string;
544
+ subattachments: any;
545
+ properties: any;
546
+ };
547
+
548
+ // ============================================================================
549
+ // User Types
550
+ // ============================================================================
551
+
552
+ export type IFCAU_User = {
553
+ name: string;
554
+ firstName?: string;
555
+ vanity?: string;
556
+ thumbSrc: string;
557
+ profileUrl: string | null;
558
+ gender?: number;
559
+ type: string;
560
+ isFriend?: boolean;
561
+ isBirthday: boolean;
562
+ searchToken: any;
563
+ alternateName?: string;
564
+ };
565
+
566
+ export type IFCAU_UserIDResponse = {
567
+ userID: string;
568
+ photoUrl: string;
569
+ indexRank: number;
570
+ name: string;
571
+ isVerified: boolean;
572
+ profileUrl: string;
573
+ category: string;
574
+ score: number;
575
+ type: string;
576
+ }[];
577
+
578
+ export type IFCAU_Friend = {
579
+ alternativeName: string;
580
+ firstName: string;
581
+ gender: string;
582
+ userID: string;
583
+ isFriend: boolean;
584
+ fullName: string;
585
+ profilePicture: string;
586
+ type: string;
587
+ profileUrl: string;
588
+ vanity: string;
589
+ isBirthday: boolean;
590
+ };
512
591
 
513
- export type IFCAU_Thread = {
514
- threadID: string,
515
- participantIDs: string[],
516
- threadName: string,
517
- userInfo: (IFCAU_User & { id: string })[],
518
- nicknames: { [id: string]: string } | null,
519
- unreadCount: number,
520
- messageCount: number,
521
- imageSrc: string,
522
- timestamp: number,
523
- muteUntil: number | null,
524
- isGroup: boolean,
525
- isSubscribed: boolean,
526
- folder: 'INBOX' | 'ARCHIVE' | string,
527
- isArchived: boolean,
528
- cannotReplyReason: string | null,
529
- lastReadTimestamp: number,
530
- emoji: string | null,
531
- color: string | null,
532
- adminIDs: string[],
533
- approvalMode: boolean,
534
- approvalQueue: { inviterID: string, requesterID: string, timestamp: string }[]
592
+ // ============================================================================
593
+ // Thread Types
594
+ // ============================================================================
595
+
596
+ export type IFCAU_Thread = {
597
+ threadID: string;
598
+ participantIDs: string[];
599
+ threadName: string;
600
+ userInfo: (IFCAU_User & { id: string })[];
601
+ nicknames: { [id: string]: string } | null;
602
+ unreadCount: number;
603
+ messageCount: number;
604
+ imageSrc: string;
605
+ timestamp: number;
606
+ muteUntil: number | null;
607
+ isGroup: boolean;
608
+ isSubscribed: boolean;
609
+ folder: 'INBOX' | 'ARCHIVE' | string;
610
+ isArchived: boolean;
611
+ cannotReplyReason: string | null;
612
+ lastReadTimestamp: number;
613
+ emoji: string | null;
614
+ color: string | null;
615
+ adminIDs: string[];
616
+ approvalMode: boolean;
617
+ approvalQueue: { inviterID: string; requesterID: string; timestamp: string }[];
618
+ };
619
+
620
+ export type IFCAU_ThreadList = {
621
+ threadID: string;
622
+ name: string;
623
+ unreadCount: number;
624
+ messageCount: number;
625
+ imageSrc: string;
626
+ emoji: string | null;
627
+ color: string | null;
628
+ nicknames: { userid: string; nickname: string }[];
629
+ muteUntil: number | null;
630
+ participants: IFCAU_ThreadList_Participants[];
631
+ adminIDs: string[];
632
+ folder: "INBOX" | "ARCHIVED" | "PENNDING" | "OTHER" | string;
633
+ isGroup: boolean;
634
+ customizationEnabled: boolean;
635
+ participantAddMode: string;
636
+ reactionMuteMode: string;
637
+ isArchived: boolean;
638
+ isSubscribed: boolean;
639
+ timestamp: number;
640
+ snippet: string;
641
+ snippetAttachments: string;
642
+ snippetSender: string;
643
+ lastMessageTimestamp: number;
644
+ listReadTimestamp: number | null;
645
+ cannotReplyReason: string | null;
646
+ approvalMode: string;
647
+ }[];
648
+
649
+ export type IFCAU_ThreadList_Participants =
650
+ | {
651
+ accountType: "User";
652
+ userID: string;
653
+ name: string;
654
+ shortName: string;
655
+ gender: string;
656
+ url: string;
657
+ profilePicture: string;
658
+ username: string | null;
659
+ isViewerFriend: boolean;
660
+ isMessengerUser: boolean;
661
+ isVerified: boolean;
662
+ isMessageBlockedByViewer: boolean;
663
+ isViewerCoworker: boolean;
664
+ }
665
+ | {
666
+ accountType: "Page";
667
+ userID: string;
668
+ name: string;
669
+ url: string;
670
+ profilePicture: string;
671
+ username: string | null;
672
+ acceptMessengerUserFeedback: boolean;
673
+ isMessengerUser: boolean;
674
+ isVerified: boolean;
675
+ isMessengerPlatformBot: boolean;
676
+ isMessageBlockedByViewer: boolean;
535
677
  }
678
+ | {
679
+ accountType: "ReducedMessagingActor";
680
+ userID: string;
681
+ name: string;
682
+ url: string;
683
+ profilePicture: string;
684
+ username: string | null;
685
+ acceptMessengerUserFeedback: boolean;
686
+ isMessageBlockedByViewer: boolean;
687
+ }
688
+ | {
689
+ accountType: "UnavailableMessagingActor";
690
+ userID: string;
691
+ name: string;
692
+ url: null;
693
+ profilePicture: string;
694
+ username: null;
695
+ acceptMessengerUserFeedback: boolean;
696
+ isMessageBlockedByViewer: boolean;
697
+ }
698
+ | {
699
+ accountType: string;
700
+ userID: string;
701
+ name: string;
702
+ };
536
703
 
537
- export type IFCAU_ThreadList = {
538
- threadID: string,
539
- name: string,
540
- unreadCount: number,
541
- messageCount: number,
542
- imageSrc: string,
543
- emoji: string | null,
544
- color: string | null,
545
- nicknames: { userid: string, nickname: string }[],
546
- muteUntil: number | null,
547
- participants: IFCAU_ThreadList_Participants[],
548
- adminIDs: string[],
549
- folder: "INBOX" | "ARCHIVED" | "PENNDING" | "OTHER" | string,
550
- isGroup: boolean,
551
- customizationEnabled: boolean,
552
- participantAddMode: string,
553
- reactionMuteMode: string,
554
- isArchived: boolean,
555
- isSubscribed: boolean,
556
- timestamp: number,
557
- snippet: string,
558
- snippetAttachments: string
559
- snippetSender: string,
560
- lastMessageTimestamp: number,
561
- listReadTimestamp: number | null,
562
- cannotReplyReason: string | null,
563
- approvalMode: string
564
- }[]
565
-
566
- export type IFCAU_ThreadList_Participants =
567
- {
568
- accountType: "User",
569
- userID: string,
570
- name: string,
571
- shortName: string,
572
- gender: string,
573
- url: string,
574
- profilePicture: string,
575
- username: string | null,
576
- isViewerFriend: boolean,
577
- isMessengerUser: boolean,
578
- isVerified: boolean,
579
- isMessageBlockedByViewer: boolean,
580
- isViewerCoworker: boolean
581
- } |
582
- {
583
- accountType: "Page",
584
- userID: string,
585
- name: string,
586
- url: string,
587
- profilePicture: string,
588
- username: string | null,
589
- acceptMessengerUserFeedback: boolean,
590
- isMessengerUser: boolean,
591
- isVerified: boolean,
592
- isMessengerPlatformBot: boolean,
593
- isMessageBlockedByViewer: boolean,
594
- } |
595
- {
596
- accountType: "ReducedMessagingActor",
597
- userID: string,
598
- name: string,
599
- url: string,
600
- profilePicture: string,
601
- username: string | null,
602
- acceptMessengerUserFeedback: boolean,
603
- isMessageBlockedByViewer: boolean
604
- } |
605
- {
606
- accountType: "UnavailableMessagingActor",
607
- userID: string,
608
- name: string,
609
- url: null,
610
- profilePicture: string,
611
- username: null,
612
- acceptMessengerUserFeedback: boolean,
613
- isMessageBlockedByViewer: boolean
614
- } |
615
- {
616
- accountType: string,
617
- userID: string,
618
- name: string
619
- };
704
+ // ============================================================================
705
+ // Middleware Types
706
+ // ============================================================================
707
+
708
+ export type IFCAU_Middleware = (event: IFCAU_ListenMessage, next: (err?: Error | false | null) => void) => void | Promise<void> | false | null;
709
+
710
+ // ============================================================================
711
+ // Scheduler Types
712
+ // ============================================================================
713
+
714
+ export type IFCAU_ScheduledMessage = {
715
+ id: string;
716
+ message: string | MessageObject;
717
+ threadID: string | string[];
718
+ timestamp: number;
719
+ createdAt: number;
720
+ options: {
721
+ replyMessageID?: string;
722
+ isGroup?: boolean;
723
+ callback?: (err?: Error) => void;
724
+ };
725
+ timeUntilSend: number;
726
+ };
727
+
728
+ // ============================================================================
729
+ // Options Type
730
+ // ============================================================================
731
+
732
+ export type IFCAU_Options = {
733
+ pauseLog: boolean;
734
+ logLevel: "silly" | "verbose" | "info" | "http" | "warn" | "error" | "silent";
735
+ selfListen: boolean;
736
+ listenEvents: boolean;
737
+ pageID: string;
738
+ updatePresence: boolean;
739
+ forceLogin: boolean;
740
+ userAgent: string;
741
+ autoMarkDelivery: boolean;
742
+ autoMarkRead: boolean;
743
+ proxy: string;
744
+ online: boolean;
745
+ };
620
746
  }