@lazyneoaz/testfca 1.0.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 (120) hide show
  1. package/CHANGELOG.md +229 -0
  2. package/COOKIE_LOGIN.md +208 -0
  3. package/LICENSE +3 -0
  4. package/README.md +492 -0
  5. package/index.js +2 -0
  6. package/package.json +120 -0
  7. package/scripts/build-go.mjs +54 -0
  8. package/scripts/detect-platform.mjs +36 -0
  9. package/scripts/download-prebuilt.mjs +119 -0
  10. package/scripts/package.mjs +6 -0
  11. package/scripts/postinstall.mjs +113 -0
  12. package/src/apis/addExternalModule.js +24 -0
  13. package/src/apis/addUserToGroup.js +108 -0
  14. package/src/apis/changeAdminStatus.js +148 -0
  15. package/src/apis/changeArchivedStatus.js +61 -0
  16. package/src/apis/changeAvatar.js +103 -0
  17. package/src/apis/changeBio.js +69 -0
  18. package/src/apis/changeBlockedStatus.js +54 -0
  19. package/src/apis/changeGroupImage.js +136 -0
  20. package/src/apis/changeThreadColor.js +116 -0
  21. package/src/apis/changeThreadEmoji.js +53 -0
  22. package/src/apis/comment.js +207 -0
  23. package/src/apis/createAITheme.js +129 -0
  24. package/src/apis/createNewGroup.js +79 -0
  25. package/src/apis/createPoll.js +73 -0
  26. package/src/apis/deleteMessage.js +52 -0
  27. package/src/apis/deleteThread.js +52 -0
  28. package/src/apis/e2ee.js +170 -0
  29. package/src/apis/editMessage.js +78 -0
  30. package/src/apis/emoji.js +124 -0
  31. package/src/apis/fetchThemeData.js +82 -0
  32. package/src/apis/follow.js +81 -0
  33. package/src/apis/forwardMessage.js +52 -0
  34. package/src/apis/friend.js +243 -0
  35. package/src/apis/gcmember.js +122 -0
  36. package/src/apis/gcname.js +123 -0
  37. package/src/apis/gcrule.js +119 -0
  38. package/src/apis/getAccess.js +111 -0
  39. package/src/apis/getBotInfo.js +88 -0
  40. package/src/apis/getBotInitialData.js +43 -0
  41. package/src/apis/getFriendsList.js +79 -0
  42. package/src/apis/getMessage.js +423 -0
  43. package/src/apis/getTheme.js +95 -0
  44. package/src/apis/getThemeInfo.js +116 -0
  45. package/src/apis/getThreadHistory.js +239 -0
  46. package/src/apis/getThreadInfo.js +267 -0
  47. package/src/apis/getThreadList.js +232 -0
  48. package/src/apis/getThreadPictures.js +58 -0
  49. package/src/apis/getUserID.js +117 -0
  50. package/src/apis/getUserInfo.js +513 -0
  51. package/src/apis/getUserInfoV2.js +146 -0
  52. package/src/apis/handleMessageRequest.js +50 -0
  53. package/src/apis/httpGet.js +63 -0
  54. package/src/apis/httpPost.js +89 -0
  55. package/src/apis/httpPostFormData.js +69 -0
  56. package/src/apis/listenMqtt.js +1236 -0
  57. package/src/apis/listenSpeed.js +179 -0
  58. package/src/apis/logout.js +93 -0
  59. package/src/apis/markAsDelivered.js +47 -0
  60. package/src/apis/markAsRead.js +115 -0
  61. package/src/apis/markAsReadAll.js +40 -0
  62. package/src/apis/markAsSeen.js +70 -0
  63. package/src/apis/mqttDeltaValue.js +250 -0
  64. package/src/apis/muteThread.js +45 -0
  65. package/src/apis/nickname.js +132 -0
  66. package/src/apis/notes.js +163 -0
  67. package/src/apis/pinMessage.js +150 -0
  68. package/src/apis/produceMetaTheme.js +180 -0
  69. package/src/apis/realtime.js +182 -0
  70. package/src/apis/removeUserFromGroup.js +117 -0
  71. package/src/apis/resolvePhotoUrl.js +58 -0
  72. package/src/apis/searchForThread.js +154 -0
  73. package/src/apis/sendMessage.js +346 -0
  74. package/src/apis/sendMessageMqtt.js +248 -0
  75. package/src/apis/sendTypingIndicator.js +105 -0
  76. package/src/apis/setMessageReaction.js +38 -0
  77. package/src/apis/setMessageReactionMqtt.js +61 -0
  78. package/src/apis/setThreadTheme.js +260 -0
  79. package/src/apis/setThreadThemeMqtt.js +94 -0
  80. package/src/apis/share.js +107 -0
  81. package/src/apis/shareContact.js +66 -0
  82. package/src/apis/stickers.js +257 -0
  83. package/src/apis/story.js +181 -0
  84. package/src/apis/theme.js +233 -0
  85. package/src/apis/unfriend.js +47 -0
  86. package/src/apis/unsendMessage.js +25 -0
  87. package/src/database/appStateBackup.js +298 -0
  88. package/src/database/models/index.js +56 -0
  89. package/src/database/models/thread.js +31 -0
  90. package/src/database/models/user.js +32 -0
  91. package/src/database/threadData.js +101 -0
  92. package/src/database/userData.js +90 -0
  93. package/src/e2ee/bridge.js +275 -0
  94. package/src/e2ee/index.js +60 -0
  95. package/src/engine/client.js +95 -0
  96. package/src/engine/models/buildAPI.js +152 -0
  97. package/src/engine/models/loginHelper.js +574 -0
  98. package/src/engine/models/setOptions.js +88 -0
  99. package/src/types/index.d.ts +574 -0
  100. package/src/utils/antiSuspension.js +529 -0
  101. package/src/utils/auth-helpers.js +149 -0
  102. package/src/utils/autoReLogin.js +336 -0
  103. package/src/utils/axios.js +436 -0
  104. package/src/utils/cache.js +54 -0
  105. package/src/utils/clients.js +282 -0
  106. package/src/utils/constants.js +410 -0
  107. package/src/utils/formatters/data/formatAttachment.js +370 -0
  108. package/src/utils/formatters/data/formatDelta.js +109 -0
  109. package/src/utils/formatters/index.js +159 -0
  110. package/src/utils/formatters/value/formatCookie.js +91 -0
  111. package/src/utils/formatters/value/formatDate.js +36 -0
  112. package/src/utils/formatters/value/formatID.js +16 -0
  113. package/src/utils/formatters.js +1373 -0
  114. package/src/utils/headers.js +235 -0
  115. package/src/utils/index.js +153 -0
  116. package/src/utils/monitoring.js +333 -0
  117. package/src/utils/rateLimiter.js +319 -0
  118. package/src/utils/tokenRefresh.js +680 -0
  119. package/src/utils/user-agents.js +238 -0
  120. package/src/utils/validation.js +157 -0
@@ -0,0 +1,574 @@
1
+ /// <reference types="node" />
2
+ import { ReadStream } from "fs";
3
+ import { EventEmitter } from "events";
4
+
5
+ declare module "@lazyneoaz/testfca" {
6
+ export type UserID = string;
7
+ export type ThreadID = string;
8
+ export type MessageID = string;
9
+ export type Callback<T = any> = (err: any, result?: T) => void;
10
+
11
+ export interface Coordinates {
12
+ latitude: number;
13
+ longitude: number;
14
+ }
15
+
16
+ export interface Mention {
17
+ tag: string;
18
+ id: UserID;
19
+ fromIndex?: number;
20
+ }
21
+
22
+ export interface Reaction {
23
+ reaction: string;
24
+ userID: UserID;
25
+ }
26
+
27
+ export interface StickerPackInfo {
28
+ id: string;
29
+ name: string;
30
+ thumbnail?: string;
31
+ }
32
+
33
+ export interface StickerInfo {
34
+ type: "sticker";
35
+ ID: string;
36
+ url?: string;
37
+ animatedUrl?: string;
38
+ packID?: string;
39
+ label: string;
40
+ stickerID: string;
41
+ }
42
+
43
+ export interface AddedStickerPackInfo {
44
+ id: string;
45
+ name: string;
46
+ in_sticker_tray: boolean;
47
+ artist?: string;
48
+ preview_image?: { uri: string };
49
+ thumbnail_image?: { uri: string };
50
+ }
51
+
52
+ export interface CommentMessage {
53
+ body: string;
54
+ attachment?: ReadStream[];
55
+ mentions?: Mention[];
56
+ url?: string;
57
+ sticker?: string;
58
+ }
59
+
60
+ export interface CommentResult {
61
+ id: string;
62
+ url: string;
63
+ count: number;
64
+ }
65
+
66
+ export interface ShareResult {
67
+ postID: string;
68
+ url: string;
69
+ }
70
+
71
+ export interface Attachment {
72
+ type: "photo" | "animated_image" | "video" | "audio" | "file" | "sticker" | "share" | "location" | "unknown";
73
+ ID: string;
74
+ filename: string;
75
+ url?: string;
76
+ name?: string;
77
+ }
78
+
79
+ export interface PhotoAttachment extends Attachment {
80
+ type: "photo";
81
+ thumbnailUrl: string;
82
+ previewUrl: string;
83
+ previewWidth: number;
84
+ previewHeight: number;
85
+ largePreviewUrl: string;
86
+ largePreviewWidth: number;
87
+ largePreviewHeight: number;
88
+ width: number;
89
+ height: number;
90
+ }
91
+
92
+ export interface VideoAttachment extends Attachment {
93
+ type: "video";
94
+ duration: number;
95
+ width: number;
96
+ height: number;
97
+ previewUrl: string;
98
+ previewWidth: number;
99
+ previewHeight: number;
100
+ videoType: "file_attachment" | "native_video" | "unknown";
101
+ }
102
+
103
+ export interface AudioAttachment extends Attachment {
104
+ type: "audio";
105
+ duration: number;
106
+ audioType: string;
107
+ isVoiceMail: boolean;
108
+ }
109
+
110
+ export interface FileAttachment extends Attachment {
111
+ type: "file";
112
+ isMalicious: boolean;
113
+ contentType: string;
114
+ }
115
+
116
+ export interface StickerAttachment extends Attachment {
117
+ type: "sticker";
118
+ packID: string;
119
+ spriteUrl?: string;
120
+ spriteUrl2x?: string;
121
+ width: number;
122
+ height: number;
123
+ caption: string;
124
+ description: string;
125
+ frameCount: number;
126
+ frameRate: number;
127
+ framesPerRow: number;
128
+ framesPerCol: number;
129
+ }
130
+
131
+ export interface ShareAttachment extends Attachment {
132
+ type: "share";
133
+ title: string;
134
+ description?: string;
135
+ source?: string;
136
+ image?: string;
137
+ width?: number;
138
+ height?: number;
139
+ playable?: boolean;
140
+ subattachments?: any[];
141
+ properties: Record<string, any>;
142
+ }
143
+
144
+ export type AnyAttachment =
145
+ | PhotoAttachment
146
+ | VideoAttachment
147
+ | AudioAttachment
148
+ | FileAttachment
149
+ | StickerAttachment
150
+ | ShareAttachment;
151
+
152
+ export interface MessageReply {
153
+ messageID: MessageID;
154
+ senderID: UserID;
155
+ body: string;
156
+ attachments: AnyAttachment[];
157
+ timestamp: string;
158
+ isReply: true;
159
+ }
160
+
161
+ export interface Message {
162
+ type: "message";
163
+ senderID: UserID;
164
+ body: string;
165
+ threadID: ThreadID;
166
+ messageID: MessageID;
167
+ attachments: AnyAttachment[];
168
+ mentions: Record<string, string>;
169
+ timestamp: string;
170
+ isGroup: boolean;
171
+ participantIDs?: UserID[];
172
+ messageReply?: MessageReply;
173
+ isUnread?: boolean;
174
+ reactions?: Reaction[];
175
+ }
176
+
177
+ export interface Event {
178
+ type: "event";
179
+ threadID: ThreadID;
180
+ logMessageType: string;
181
+ logMessageData: any;
182
+ logMessageBody: string;
183
+ timestamp: string;
184
+ author: UserID;
185
+ }
186
+
187
+ export interface TypingIndicator {
188
+ type: "typ";
189
+ isTyping: boolean;
190
+ from: UserID;
191
+ threadID: ThreadID;
192
+ fromMobile: boolean;
193
+ }
194
+
195
+ export interface UnsendMessageEvent {
196
+ type: "unsend";
197
+ messageID: MessageID;
198
+ threadID: ThreadID;
199
+ senderID: UserID;
200
+ deletionTimestamp: string;
201
+ }
202
+
203
+ export interface EmojiEvent {
204
+ type: "change_thread_emoji";
205
+ threadID: ThreadID;
206
+ author: UserID;
207
+ emoji: string;
208
+ }
209
+
210
+ export interface GroupNameEvent {
211
+ type: "change_thread_name";
212
+ threadID: ThreadID;
213
+ author: UserID;
214
+ name: string;
215
+ }
216
+
217
+ export interface NicknameEvent {
218
+ type: "change_thread_nickname";
219
+ threadID: ThreadID;
220
+ author: UserID;
221
+ participantID: UserID;
222
+ nickname: string;
223
+ }
224
+
225
+ export type ListenEvent = Message | Event | TypingIndicator;
226
+
227
+ export interface UserInfo {
228
+ id: UserID;
229
+ name: string;
230
+ firstName: string;
231
+ lastName?: string;
232
+ vanity: string;
233
+ profileUrl: string;
234
+ profilePicUrl: string;
235
+ gender: string;
236
+ type: "user" | "page";
237
+ isFriend: boolean;
238
+ isBirthday: boolean;
239
+ bio?: string;
240
+ live_city?: string;
241
+ followers?: string;
242
+ following?: string;
243
+ coverPhoto?: string;
244
+ }
245
+
246
+ export interface ThreadInfo {
247
+ threadID: ThreadID;
248
+ threadName?: string;
249
+ participantIDs: UserID[];
250
+ userInfo: UserInfo[];
251
+ unreadCount: number;
252
+ messageCount: number;
253
+ imageSrc?: string;
254
+ timestamp: string;
255
+ muteUntil: number;
256
+ isGroup: boolean;
257
+ isArchived: boolean;
258
+ isSubscribed: boolean;
259
+ folder: string;
260
+ nicknames: Record<UserID, string>;
261
+ adminIDs: UserID[];
262
+ emoji?: string;
263
+ color?: string;
264
+ canReply: boolean;
265
+ inviteLink: {
266
+ enable: boolean;
267
+ link: string | null;
268
+ };
269
+ }
270
+
271
+ export interface MessageObject {
272
+ body?: string;
273
+ attachment?: ReadStream | ReadStream[];
274
+ sticker?: string;
275
+ emoji?: string;
276
+ emojiSize?: "small" | "medium" | "large";
277
+ mentions?: Mention[];
278
+ edit?: [string, number][];
279
+ url?: string;
280
+ location?: Coordinates;
281
+ }
282
+
283
+ export interface FriendInfo {
284
+ alternateName: string;
285
+ firstName: string;
286
+ gender: string;
287
+ userID: UserID;
288
+ isFriend: boolean;
289
+ fullName: string;
290
+ profilePicture: string;
291
+ type: string;
292
+ profileUrl: string;
293
+ vanity: string;
294
+ isBirthday: boolean;
295
+ }
296
+
297
+ export interface HealthStatus {
298
+ mqttConnected: boolean;
299
+ autoReconnect: boolean;
300
+ tokenRefresh: {
301
+ lastRefresh: number;
302
+ nextRefresh: number;
303
+ failureCount: number;
304
+ };
305
+ rateLimiter: {
306
+ activeRequests: number;
307
+ maxConcurrentRequests: number;
308
+ maxRequestsPerMinute: number;
309
+ threadCooldowns: number;
310
+ endpointCooldowns: number;
311
+ errorCacheSize: number;
312
+ } | null;
313
+ }
314
+
315
+ export interface E2EEConnectOptions {
316
+ devicePath?: string;
317
+ deviceData?: string;
318
+ logLevel?: "debug" | "info" | "warn" | "error";
319
+ platform?: "facebook" | "messenger";
320
+ [key: string]: any;
321
+ }
322
+
323
+ export interface E2EEConnectionStatus {
324
+ connected: boolean;
325
+ e2eeConnected: boolean;
326
+ }
327
+
328
+ export interface E2EEMediaOptions {
329
+ replyToId?: string;
330
+ replyToSenderJid?: string;
331
+ caption?: string;
332
+ [key: string]: any;
333
+ }
334
+
335
+ export interface E2EEUploadOptions {
336
+ chatJid?: string;
337
+ data: string | Buffer;
338
+ mimeType: string;
339
+ filename?: string;
340
+ [key: string]: any;
341
+ }
342
+
343
+ export interface E2EEUserInfo {
344
+ jid: string;
345
+ name?: string;
346
+ [key: string]: any;
347
+ }
348
+
349
+ export interface E2EEEvent {
350
+ type: string;
351
+ [key: string]: any;
352
+ }
353
+
354
+ export interface E2EEAPI {
355
+ isAvailable(): boolean;
356
+
357
+ connect(options?: E2EEConnectOptions): Promise<any>;
358
+ connectE2EE(options?: E2EEConnectOptions): Promise<any>;
359
+ disconnect(): Promise<void>;
360
+
361
+ isConnected(): E2EEConnectionStatus;
362
+
363
+ getDeviceData(): string;
364
+ setDeviceData(deviceData: string): void;
365
+ setDevicePath(devicePath: string): void;
366
+
367
+ pollEvents(timeoutMs?: number): Promise<E2EEEvent[]>;
368
+
369
+ sendE2EEMessage(chatJid: string, text: string, replyToId?: string, replyToSenderJid?: string): Promise<any>;
370
+ sendE2EEReaction(chatJid: string, messageId: string, senderJid: string, emoji: string): Promise<any>;
371
+ sendE2EETyping(chatJid: string, isTyping: boolean): Promise<any>;
372
+ editE2EEMessage(chatJid: string, messageId: string, newText: string): Promise<any>;
373
+ unsendE2EEMessage(chatJid: string, messageId: string): Promise<any>;
374
+
375
+ sendE2EEImage(chatJid: string, data: string | Buffer, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
376
+ sendE2EEVideo(chatJid: string, data: string | Buffer, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
377
+ sendE2EEAudio(chatJid: string, data: string | Buffer, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
378
+ sendE2EEDocument(chatJid: string, data: string | Buffer, filename: string, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
379
+ sendE2EESticker(chatJid: string, data: string | Buffer, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
380
+
381
+ downloadE2EEMedia(options: { url: string; mediaKey?: string; [key: string]: any }): Promise<Buffer>;
382
+
383
+ sendImage(chatJid: string, data: string | Buffer, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
384
+ sendVideo(chatJid: string, data: string | Buffer, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
385
+ sendVoice(chatJid: string, data: string | Buffer, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
386
+ sendFile(chatJid: string, data: string | Buffer, filename: string, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
387
+ sendSticker(chatJid: string, data: string | Buffer, mimeType: string, options?: E2EEMediaOptions): Promise<any>;
388
+
389
+ uploadMedia(options: E2EEUploadOptions): Promise<any>;
390
+
391
+ getCookies(): Record<string, string>;
392
+
393
+ getUserInfo(userId: string): Promise<E2EEUserInfo>;
394
+ createThread(userId: string): Promise<{ threadId: string; [key: string]: any }>;
395
+ searchUsers(query: string): Promise<E2EEUserInfo[]>;
396
+
397
+ markRead(chatJid: string, watermarkTs?: number): Promise<any>;
398
+
399
+ unload(): void;
400
+ }
401
+
402
+ export interface API {
403
+ setOptions(options: LoginOptions): void;
404
+ getAppState(): any[];
405
+ getCurrentUserID(): UserID;
406
+ getHealthStatus(): HealthStatus;
407
+
408
+ listen(callback: (err: any, event: ListenEvent) => void): EventEmitter;
409
+
410
+ listenMqtt(callback: (err: any, event: ListenEvent) => void): void;
411
+
412
+ sendMessage(
413
+ message: string | MessageObject,
414
+ threadID: ThreadID,
415
+ replyToMessage?: MessageID | Callback<Message>,
416
+ callback?: Callback<Message>,
417
+ ): Promise<Message> | void;
418
+
419
+ sendMessageMqtt(
420
+ message: string | MessageObject,
421
+ threadID: ThreadID,
422
+ replyToMessage?: MessageID,
423
+ callback?: Callback<Message>,
424
+ ): void;
425
+
426
+ editMessage(text: string, messageID: MessageID, callback?: Callback): void;
427
+
428
+ unsendMessage(messageID: MessageID, threadID: ThreadID, callback?: Callback<UnsendMessageEvent>): Promise<UnsendMessageEvent>;
429
+
430
+ forwardMessage(messageID: MessageID, threadID: ThreadID, callback?: Callback): Promise<void>;
431
+
432
+ deleteMessage(messageIDs: MessageID | MessageID[], callback?: Callback): Promise<void>;
433
+
434
+ setMessageReaction(reaction: string, messageID: MessageID, callback?: Callback, forceCustomReaction?: boolean): Promise<void>;
435
+ setMessageReactionMqtt(reaction: string, messageID: MessageID, threadID: ThreadID, callback?: Callback): Promise<void>;
436
+
437
+ shareContact(text: string, senderID: UserID, threadID: ThreadID, callback?: Callback): void;
438
+ shareContact(senderID: UserID, threadID: ThreadID, callback?: Callback): void;
439
+ resolvePhotoUrl(photoID: string, callback?: Callback<string>): Promise<string>;
440
+
441
+ pinMessage(action: "pin" | "unpin", threadID: ThreadID, messageID: MessageID): Promise<any>;
442
+ pinMessage(action: "list", threadID: ThreadID): Promise<Message[]>;
443
+
444
+ markAsRead(threadID: ThreadID, read?: boolean, callback?: Callback): Promise<any>;
445
+ markAsReadAll(callback?: Callback): Promise<void>;
446
+ markAsSeen(timestamp?: number, callback?: Callback): Promise<void>;
447
+ markAsDelivered(threadID: ThreadID, messageID: MessageID, callback?: Callback): Promise<void>;
448
+
449
+ muteThread(threadID: ThreadID, muteSeconds: number, callback?: Callback): Promise<void>;
450
+
451
+ sendTypingIndicator(sendTyping: boolean, threadID: ThreadID, callback?: Callback): Promise<void>;
452
+
453
+ getThreadInfo(threadID: ThreadID, callback?: Callback<ThreadInfo>): Promise<ThreadInfo>;
454
+ getThreadInfo(threadID: ThreadID[], callback?: Callback<Record<ThreadID, ThreadInfo>>): Promise<Record<ThreadID, ThreadInfo>>;
455
+
456
+ getThreadList(limit: number, timestamp: number | null, tags: string[], callback?: Callback<ThreadInfo[]>): Promise<ThreadInfo[]>;
457
+ getThreadHistory(threadID: ThreadID, amount: number, timestamp: number | null, callback?: Callback<Message[]>): Promise<Message[]>;
458
+ getThreadPictures(threadID: ThreadID, offset: number, limit: number, callback?: Callback<string[]>): Promise<string[]>;
459
+
460
+ getMessage(messageID: MessageID, callback?: Callback<Message>): Promise<Message>;
461
+
462
+ getUserInfo(id: UserID, usePayload?: boolean, callback?: Callback<UserInfo>): Promise<UserInfo>;
463
+ getUserInfo(id: UserID[], usePayload?: boolean, callback?: Callback<Record<UserID, UserInfo>>): Promise<Record<UserID, UserInfo>>;
464
+ getUserInfoV2(id: UserID, callback?: Callback<UserInfo>): Promise<UserInfo>;
465
+ getUserID(name: string, callback?: Callback<{ userID: UserID; [key: string]: any }[]>): Promise<{ userID: UserID; [key: string]: any }[]>;
466
+
467
+ getFriendsList(callback?: Callback<Record<UserID, FriendInfo>>): Promise<Record<UserID, FriendInfo>>;
468
+
469
+ searchForThread(name: string, callback?: Callback<ThreadInfo[]>): Promise<ThreadInfo[]>;
470
+
471
+ createNewGroup(participantIDs: UserID[], groupName?: string, callback?: Callback<ThreadID>): Promise<ThreadID>;
472
+
473
+ addUserToGroup(userID: UserID, threadID: ThreadID, callback?: Callback): Promise<void>;
474
+ removeUserFromGroup(userID: UserID, threadID: ThreadID, callback?: Callback): Promise<void>;
475
+ changeAdminStatus(threadID: ThreadID, userID: UserID, adminStatus: boolean, callback?: Callback): Promise<void>;
476
+
477
+ changeGroupImage(image: ReadStream, threadID: ThreadID, callback?: Callback): Promise<void>;
478
+ changeThreadColor(color: string, threadID: ThreadID, callback?: Callback): Promise<void>;
479
+ changeThreadEmoji(emoji: string, threadID: ThreadID, callback?: Callback): Promise<void>;
480
+
481
+ changeArchivedStatus(threadID: ThreadID | ThreadID[], archive: boolean, callback?: Callback): Promise<void>;
482
+ changeBlockedStatus(userID: UserID, block: boolean, callback?: Callback): Promise<void>;
483
+
484
+ changeAvatar(image: ReadStream, callback?: Callback): Promise<void>;
485
+ changeBio(bio: string, publish: boolean, callback?: Callback): Promise<void>;
486
+
487
+ handleMessageRequest(threadID: ThreadID | ThreadID[], accept: boolean, callback?: Callback): Promise<void>;
488
+
489
+ deleteThread(threadID: ThreadID | ThreadID[], callback?: Callback): Promise<void>;
490
+
491
+ createPoll(title: string, threadID: ThreadID, options?: Record<string, boolean>, callback?: Callback): Promise<void>;
492
+
493
+ logout(callback?: (err: any) => void): Promise<void>;
494
+
495
+ addExternalModule(moduleObj: Record<string, Function>): void;
496
+ getAccess(authCode?: string, callback?: Callback<string>): Promise<string>;
497
+
498
+ httpGet(url: string, form?: any, customHeader?: any, callback?: Callback<string>, notAPI?: boolean): Promise<string>;
499
+ httpPost(url: string, form?: any, customHeader?: any, callback?: Callback<string>, notAPI?: boolean): Promise<string>;
500
+ httpPostFormData(url: string, form?: any, customHeader?: any, callback?: Callback<string>, notAPI?: boolean): Promise<string>;
501
+
502
+ getTheme(threadID: ThreadID): Promise<any[]>;
503
+ getThemeInfo(threadID: ThreadID): Promise<{ threadName?: string; color?: string; emoji?: string; [key: string]: any }>;
504
+ setThreadTheme(threadID: ThreadID, themeID: string, callback?: Callback): Promise<void>;
505
+ setThreadThemeMqtt(threadID: ThreadID, themeID: string, callback?: Callback): Promise<void>;
506
+ createAITheme(prompt: string): Promise<{ id: string; [key: string]: any }[]>;
507
+
508
+ follow(senderID: UserID, follow: boolean, callback?: Callback): void;
509
+ unfriend(userID: UserID, callback?: Callback): Promise<void>;
510
+ friend(userID: UserID, callback?: Callback): Promise<void>;
511
+
512
+ emoji(emoji: string, threadID?: ThreadID, callback?: Callback<EmojiEvent>): Promise<EmojiEvent>;
513
+ gcname(newName: string, threadID?: ThreadID, callback?: Callback<GroupNameEvent>): Promise<GroupNameEvent>;
514
+ nickname(nickname: string, threadID: ThreadID, participantID: UserID, callback?: Callback<NicknameEvent>): Promise<NicknameEvent>;
515
+ theme(newName: string, threadID?: ThreadID, callback?: Callback<GroupNameEvent>): Promise<GroupNameEvent>;
516
+
517
+ comment(msg: string | CommentMessage, postID: string, replyCommentID?: string, callback?: Callback<CommentResult>): Promise<CommentResult>;
518
+ share(text: string, postID: string, callback?: Callback<ShareResult>): Promise<ShareResult>;
519
+ share(postID: string, callback?: Callback<ShareResult>): Promise<ShareResult>;
520
+
521
+ stickers: {
522
+ search(query: string): Promise<StickerInfo[]>;
523
+ listPacks(): Promise<StickerPackInfo[]>;
524
+ getStorePacks(): Promise<StickerPackInfo[]>;
525
+ listAllPacks(): Promise<StickerPackInfo[]>;
526
+ addPack(packID: string): Promise<AddedStickerPackInfo>;
527
+ getStickersInPack(packID: string): Promise<StickerInfo[]>;
528
+ getAiStickers(options?: { limit?: number }): Promise<StickerInfo[]>;
529
+ };
530
+
531
+ e2ee: E2EEAPI;
532
+
533
+ getBotInfo(callback?: Callback): Promise<any>;
534
+
535
+ [key: string]: any;
536
+ }
537
+
538
+ export interface LoginCredentials {
539
+ appState?: any;
540
+ email?: string;
541
+ password?: string;
542
+ }
543
+
544
+ export interface LoginOptions {
545
+ online?: boolean;
546
+ selfListen?: boolean;
547
+ listenEvents?: boolean;
548
+ updatePresence?: boolean;
549
+ forceLogin?: boolean;
550
+ autoMarkDelivery?: boolean;
551
+ autoMarkRead?: boolean;
552
+ listenTyping?: boolean;
553
+ proxy?: string;
554
+ autoReconnect?: boolean;
555
+ userAgent?: string;
556
+ emitReady?: boolean;
557
+ randomUserAgent?: boolean;
558
+ bypassRegion?: string;
559
+ simulateTyping?: boolean;
560
+ maxConcurrentRequests?: number;
561
+ maxRequestsPerMinute?: number;
562
+ requestCooldownMs?: number;
563
+ errorCacheTtlMs?: number;
564
+ stealthMode?: boolean;
565
+ persona?: "desktop" | "android" | "mobile";
566
+ logging?: boolean;
567
+ }
568
+
569
+ export function login(
570
+ credentials: LoginCredentials,
571
+ options: LoginOptions | Callback<API>,
572
+ callback?: Callback<API>
573
+ ): Promise<API> | void;
574
+ }