@cexy/hoonfca 1.0.1 → 1.0.2

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 (170) hide show
  1. package/.travis.yml +6 -0
  2. package/LICENSE-MIT +21 -0
  3. package/index.d.ts +620 -0
  4. package/index.js +778 -1
  5. package/package.json +31 -84
  6. package/src/{apis/addExternalModule.js → addExternalModule.js} +4 -5
  7. package/src/addUserToGroup.js +113 -0
  8. package/src/changeAdminStatus.js +95 -0
  9. package/src/changeApprovalMode.js +79 -0
  10. package/src/changeArchivedStatus.js +55 -0
  11. package/src/changeBio.js +76 -0
  12. package/src/changeBlockedStatus.js +47 -0
  13. package/src/changeBlockedStatusMqtt.js +86 -0
  14. package/src/changeGroupImage.js +133 -0
  15. package/src/changeNickname.js +59 -0
  16. package/src/changeThreadColor.js +71 -0
  17. package/src/{apis/changeThreadEmoji.js → changeThreadEmoji.js} +8 -6
  18. package/src/createNewGroup.js +88 -0
  19. package/src/createPoll.js +130 -0
  20. package/src/deleteMessage.js +56 -0
  21. package/src/deleteThread.js +56 -0
  22. package/src/editMessage.js +63 -0
  23. package/src/forwardAttachment.js +60 -0
  24. package/src/forwardMessage.js +63 -0
  25. package/src/getCurrentUserID.js +7 -0
  26. package/src/getEmojiUrl.js +29 -0
  27. package/src/getFriendsList.js +84 -0
  28. package/src/getGroupsList.js +83 -0
  29. package/src/getMarketplace.js +84 -0
  30. package/src/getNotifications.js +86 -0
  31. package/src/getPagesList.js +83 -0
  32. package/src/getStories.js +88 -0
  33. package/src/getThreadHistory.js +647 -0
  34. package/src/getThreadInfo.js +222 -0
  35. package/src/getThreadList.js +292 -0
  36. package/src/getThreadPictures.js +79 -0
  37. package/src/getUserID.js +66 -0
  38. package/src/getUserInfo.js +128 -0
  39. package/src/handleFriendRequest.js +57 -0
  40. package/src/handleMessageRequest.js +65 -0
  41. package/src/{apis/httpGet.js → httpGet.js} +15 -20
  42. package/src/httpPost.js +58 -0
  43. package/src/listenMqtt.js +1018 -0
  44. package/src/logout.js +75 -0
  45. package/src/markAsDelivered.js +58 -0
  46. package/src/{apis/markAsRead.js → markAsRead.js} +19 -30
  47. package/src/markAsReadAll.js +50 -0
  48. package/src/markAsSeen.js +61 -0
  49. package/src/muteThread.js +52 -0
  50. package/src/pinMessage.js +61 -0
  51. package/src/removeUserFromGroup.js +79 -0
  52. package/src/resolvePhotoUrl.js +45 -0
  53. package/src/searchForThread.js +53 -0
  54. package/src/searchUsers.js +89 -0
  55. package/src/sendComment.js +161 -0
  56. package/src/sendMessage.js +457 -0
  57. package/src/sendTypingIndicator.js +179 -0
  58. package/src/setBio.js +86 -0
  59. package/src/setMessageReaction.js +186 -0
  60. package/src/setPostReaction.js +71 -0
  61. package/src/setTheme.js +313 -0
  62. package/src/setTitle.js +90 -0
  63. package/src/shareContact.js +53 -0
  64. package/src/shareLink.js +62 -0
  65. package/src/threadColors.js +57 -0
  66. package/src/unfriend.js +53 -0
  67. package/src/unsendMessage.js +104 -0
  68. package/utils.js +1447 -0
  69. package/LICENSE +0 -3
  70. package/README.md +0 -491
  71. package/examples/login-with-cookies.js +0 -102
  72. package/examples/verify.js +0 -70
  73. package/src/apis/addUserToGroup.js +0 -108
  74. package/src/apis/changeAdminStatus.js +0 -148
  75. package/src/apis/changeArchivedStatus.js +0 -61
  76. package/src/apis/changeAvatar.js +0 -103
  77. package/src/apis/changeBio.js +0 -69
  78. package/src/apis/changeBlockedStatus.js +0 -54
  79. package/src/apis/changeGroupImage.js +0 -136
  80. package/src/apis/changeThreadColor.js +0 -116
  81. package/src/apis/comment.js +0 -207
  82. package/src/apis/createAITheme.js +0 -129
  83. package/src/apis/createNewGroup.js +0 -79
  84. package/src/apis/createPoll.js +0 -73
  85. package/src/apis/deleteMessage.js +0 -44
  86. package/src/apis/deleteThread.js +0 -52
  87. package/src/apis/e2ee.js +0 -17
  88. package/src/apis/editMessage.js +0 -70
  89. package/src/apis/emoji.js +0 -124
  90. package/src/apis/fetchThemeData.js +0 -82
  91. package/src/apis/follow.js +0 -81
  92. package/src/apis/forwardMessage.js +0 -52
  93. package/src/apis/friend.js +0 -243
  94. package/src/apis/gcmember.js +0 -122
  95. package/src/apis/gcname.js +0 -123
  96. package/src/apis/gcrule.js +0 -119
  97. package/src/apis/getAccess.js +0 -111
  98. package/src/apis/getBotInfo.js +0 -88
  99. package/src/apis/getBotInitialData.js +0 -43
  100. package/src/apis/getFriendsList.js +0 -79
  101. package/src/apis/getMessage.js +0 -423
  102. package/src/apis/getTheme.js +0 -95
  103. package/src/apis/getThemeInfo.js +0 -116
  104. package/src/apis/getThreadHistory.js +0 -239
  105. package/src/apis/getThreadInfo.js +0 -267
  106. package/src/apis/getThreadList.js +0 -232
  107. package/src/apis/getThreadPictures.js +0 -58
  108. package/src/apis/getUserID.js +0 -117
  109. package/src/apis/getUserInfo.js +0 -513
  110. package/src/apis/getUserInfoV2.js +0 -146
  111. package/src/apis/handleMessageRequest.js +0 -50
  112. package/src/apis/httpPost.js +0 -89
  113. package/src/apis/httpPostFormData.js +0 -69
  114. package/src/apis/listenMqtt.js +0 -1236
  115. package/src/apis/listenSpeed.js +0 -179
  116. package/src/apis/logout.js +0 -87
  117. package/src/apis/markAsDelivered.js +0 -47
  118. package/src/apis/markAsReadAll.js +0 -40
  119. package/src/apis/markAsSeen.js +0 -70
  120. package/src/apis/mqttDeltaValue.js +0 -278
  121. package/src/apis/muteThread.js +0 -45
  122. package/src/apis/nickname.js +0 -132
  123. package/src/apis/notes.js +0 -163
  124. package/src/apis/pinMessage.js +0 -150
  125. package/src/apis/produceMetaTheme.js +0 -180
  126. package/src/apis/realtime.js +0 -182
  127. package/src/apis/removeUserFromGroup.js +0 -117
  128. package/src/apis/resolvePhotoUrl.js +0 -58
  129. package/src/apis/searchForThread.js +0 -154
  130. package/src/apis/sendMessage.js +0 -354
  131. package/src/apis/sendMessageMqtt.js +0 -249
  132. package/src/apis/sendTypingIndicator.js +0 -91
  133. package/src/apis/setMessageReaction.js +0 -27
  134. package/src/apis/setMessageReactionMqtt.js +0 -61
  135. package/src/apis/setThreadTheme.js +0 -260
  136. package/src/apis/setThreadThemeMqtt.js +0 -94
  137. package/src/apis/share.js +0 -107
  138. package/src/apis/shareContact.js +0 -66
  139. package/src/apis/stickers.js +0 -257
  140. package/src/apis/story.js +0 -181
  141. package/src/apis/theme.js +0 -233
  142. package/src/apis/unfriend.js +0 -47
  143. package/src/apis/unsendMessage.js +0 -17
  144. package/src/engine/client.js +0 -92
  145. package/src/engine/models/buildAPI.js +0 -152
  146. package/src/engine/models/loginHelper.js +0 -519
  147. package/src/engine/models/setOptions.js +0 -88
  148. package/src/security/e2ee.js +0 -109
  149. package/src/types/index.d.ts +0 -498
  150. package/src/utils/antiSuspension.js +0 -506
  151. package/src/utils/auth-helpers.js +0 -149
  152. package/src/utils/autoReLogin.js +0 -336
  153. package/src/utils/axios.js +0 -436
  154. package/src/utils/cache.js +0 -54
  155. package/src/utils/clients.js +0 -282
  156. package/src/utils/constants.js +0 -410
  157. package/src/utils/formatters/data/formatAttachment.js +0 -370
  158. package/src/utils/formatters/data/formatDelta.js +0 -109
  159. package/src/utils/formatters/index.js +0 -159
  160. package/src/utils/formatters/value/formatCookie.js +0 -91
  161. package/src/utils/formatters/value/formatDate.js +0 -36
  162. package/src/utils/formatters/value/formatID.js +0 -16
  163. package/src/utils/formatters.js +0 -1373
  164. package/src/utils/headers.js +0 -230
  165. package/src/utils/index.js +0 -153
  166. package/src/utils/monitoring.js +0 -333
  167. package/src/utils/rateLimiter.js +0 -319
  168. package/src/utils/tokenRefresh.js +0 -657
  169. package/src/utils/user-agents.js +0 -238
  170. package/src/utils/validation.js +0 -157
@@ -1,88 +0,0 @@
1
- "use strict";
2
-
3
- const utils = require('../../utils');
4
-
5
- /**
6
- * Sets global options for the API.
7
- *
8
- * @param {object} globalOptions The global options object to modify.
9
- * @param {object} [options={}] New options to apply.
10
- * @returns {Promise<void>}
11
- */
12
- async function setOptions(globalOptions, options = {}) {
13
- const optionHandlers = {
14
- online: (value) => (globalOptions.online = Boolean(value)),
15
- selfListen: (value) => (globalOptions.selfListen = Boolean(value)),
16
- selfListenEvent: (value) => (globalOptions.selfListenEvent = value),
17
- listenEvents: (value) => (globalOptions.listenEvents = Boolean(value)),
18
- updatePresence: (value) => (globalOptions.updatePresence = Boolean(value)),
19
- forceLogin: (value) => (globalOptions.forceLogin = Boolean(value)),
20
- userAgent: (value) => (globalOptions.userAgent = value),
21
- autoMarkDelivery: (value) => (globalOptions.autoMarkDelivery = Boolean(value)),
22
- autoMarkRead: (value) => (globalOptions.autoMarkRead = Boolean(value)),
23
- listenTyping: (value) => (globalOptions.listenTyping = Boolean(value)),
24
- proxy(value) {
25
- if (typeof value !== "string") {
26
- delete globalOptions.proxy;
27
- utils.setProxy();
28
- } else {
29
- globalOptions.proxy = value;
30
- utils.setProxy(value);
31
- }
32
- },
33
- autoReconnect: (value) => (globalOptions.autoReconnect = Boolean(value)),
34
- emitReady: (value) => (globalOptions.emitReady = Boolean(value)),
35
- randomUserAgent(value) {
36
- globalOptions.randomUserAgent = Boolean(value);
37
- if (value) {
38
- globalOptions.userAgent = utils.randomUserAgent();
39
- }
40
- },
41
- simulateTyping: (value) => (globalOptions.simulateTyping = Boolean(value)),
42
- bypassRegion(value) {
43
- if (value){
44
- value = value.toUpperCase();
45
- }
46
- globalOptions.bypassRegion = value;
47
- },
48
- maxConcurrentRequests(value) {
49
- if (typeof value === 'number') {
50
- globalOptions.maxConcurrentRequests = Math.floor(value);
51
- utils.configureRateLimiter({ maxConcurrentRequests: globalOptions.maxConcurrentRequests });
52
- }
53
- },
54
- maxRequestsPerMinute(value) {
55
- if (typeof value === 'number') {
56
- globalOptions.maxRequestsPerMinute = Math.floor(value);
57
- utils.configureRateLimiter({ maxRequestsPerMinute: globalOptions.maxRequestsPerMinute });
58
- }
59
- },
60
- requestCooldownMs(value) {
61
- if (typeof value === 'number') {
62
- globalOptions.requestCooldownMs = Math.floor(value);
63
- utils.configureRateLimiter({ requestCooldownMs: globalOptions.requestCooldownMs });
64
- }
65
- },
66
- errorCacheTtlMs(value) {
67
- if (typeof value === 'number') {
68
- globalOptions.errorCacheTtlMs = Math.floor(value);
69
- utils.configureRateLimiter({ errorCacheTtlMs: globalOptions.errorCacheTtlMs });
70
- }
71
- },
72
- stealthMode(value) {
73
- const enable = Boolean(value);
74
- globalOptions.stealthMode = enable;
75
- if (enable) {
76
- globalOptions.updatePresence = false;
77
- globalOptions.online = false;
78
- globalOptions.simulateTyping = false;
79
- utils.configureRateLimiter({ maxConcurrentRequests: 2, maxRequestsPerMinute: 60 });
80
- }
81
- }
82
- };
83
- Object.entries(options).forEach(([key, value]) => {
84
- if (optionHandlers[key]) optionHandlers[key](value);
85
- });
86
- }
87
-
88
- module.exports = setOptions;
@@ -1,109 +0,0 @@
1
- const crypto = require('crypto');
2
-
3
- function b64(buf) {
4
- return Buffer.from(buf).toString('base64');
5
- }
6
- function b64d(str) {
7
- return Buffer.from(str, 'base64');
8
- }
9
- function ensure(ctx) {
10
- if (!ctx.e2ee) {
11
- ctx.e2ee = { enabled: false, bot: null, peers: Object.create(null) };
12
- }
13
- return ctx.e2ee;
14
- }
15
- function genBot(ctx) {
16
- const e = ensure(ctx);
17
- if (!e.bot) {
18
- const { publicKey, privateKey } = crypto.generateKeyPairSync('x25519');
19
- e.bot = {
20
- publicKey: publicKey.export({ type: 'spki', format: 'der' }),
21
- privateKey: privateKey.export({ type: 'pkcs8', format: 'der' })
22
- };
23
- }
24
- }
25
- function enable(ctx) {
26
- const e = ensure(ctx);
27
- genBot(ctx);
28
- e.enabled = true;
29
- }
30
- function disable(ctx) {
31
- const e = ensure(ctx);
32
- e.enabled = false;
33
- }
34
- function getPublicKey(ctx) {
35
- genBot(ctx);
36
- return b64(ensure(ctx).bot.publicKey);
37
- }
38
- function setPeerKey(ctx, threadID, peerPublicKeyB64) {
39
- const e = ensure(ctx);
40
- e.peers[String(threadID)] = peerPublicKeyB64;
41
- }
42
- function clearPeerKey(ctx, threadID) {
43
- const e = ensure(ctx);
44
- delete e.peers[String(threadID)];
45
- }
46
- function hasPeer(ctx, threadID) {
47
- const e = ensure(ctx);
48
- return !!e.peers[String(threadID)];
49
- }
50
- function isEnabled(ctx) {
51
- const e = ensure(ctx);
52
- return !!e.enabled;
53
- }
54
- function deriveKey(ctx, threadID) {
55
- const e = ensure(ctx);
56
- if (!e.bot || !e.peers[String(threadID)]) {
57
- throw new Error('missing_keys');
58
- }
59
- const priv = crypto.createPrivateKey({ key: e.bot.privateKey, format: 'der', type: 'pkcs8' });
60
- const pub = crypto.createPublicKey({ key: b64d(e.peers[String(threadID)]), format: 'der', type: 'spki' });
61
- const shared = crypto.diffieHellman({ privateKey: priv, publicKey: pub });
62
- const salt = Buffer.from(String(threadID));
63
- return crypto.hkdfSync('sha256', shared, salt, Buffer.from('neokex-e2ee-v1'), 32);
64
- }
65
- function encrypt(ctx, threadID, plaintext) {
66
- const key = deriveKey(ctx, threadID);
67
- const iv = crypto.randomBytes(12);
68
- const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
69
- const ct = Buffer.concat([cipher.update(Buffer.from(String(plaintext))), cipher.final()]);
70
- const tag = cipher.getAuthTag();
71
- const payload = {
72
- v: 1,
73
- alg: 'X25519+HKDF+AES-256-GCM',
74
- n: b64(iv),
75
- t: b64(tag),
76
- c: b64(ct)
77
- };
78
- const body = Buffer.from(JSON.stringify(payload)).toString('base64');
79
- return '.NKX-E2EE|' + body;
80
- }
81
- function decrypt(ctx, threadID, armored) {
82
- const s = String(armored || '');
83
- if (!s.startsWith('.NKX-E2EE|')) return null;
84
- const raw = s.slice('.NKX-E2EE|'.length);
85
- let payload;
86
- try { payload = JSON.parse(Buffer.from(raw, 'base64').toString()); } catch (_) { return null; }
87
- if (!payload || payload.v !== 1) return null;
88
- const key = deriveKey(ctx, threadID);
89
- const iv = b64d(payload.n);
90
- const tag = b64d(payload.t);
91
- const ct = b64d(payload.c);
92
- const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);
93
- decipher.setAuthTag(tag);
94
- const pt = Buffer.concat([decipher.update(ct), decipher.final()]);
95
- return pt.toString();
96
- }
97
-
98
- module.exports = {
99
- ensure,
100
- enable,
101
- disable,
102
- isEnabled,
103
- getPublicKey,
104
- setPeerKey,
105
- clearPeerKey,
106
- hasPeer,
107
- encrypt,
108
- decrypt
109
- };
@@ -1,498 +0,0 @@
1
- /// <reference types="node" />
2
- import { ReadStream } from "fs";
3
- import { EventEmitter } from "events";
4
-
5
- declare module "@neoaz07/nkxfca" {
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 API {
316
- setOptions(options: LoginOptions): void;
317
- getAppState(): any[];
318
- getCurrentUserID(): UserID;
319
- getHealthStatus(): HealthStatus;
320
-
321
- listen(callback: (err: any, event: ListenEvent) => void): EventEmitter;
322
-
323
- listenMqtt(callback: (err: any, event: ListenEvent) => void): void;
324
-
325
- sendMessage(
326
- message: string | MessageObject,
327
- threadID: ThreadID,
328
- replyToMessage?: MessageID | Callback<Message>,
329
- callback?: Callback<Message>,
330
- ): Promise<Message> | void;
331
-
332
- sendMessageMqtt(
333
- message: string | MessageObject,
334
- threadID: ThreadID,
335
- replyToMessage?: MessageID,
336
- callback?: Callback<Message>,
337
- ): void;
338
-
339
- editMessage(text: string, messageID: MessageID, callback?: Callback): void;
340
-
341
- unsendMessage(messageID: MessageID, threadID: ThreadID, callback?: Callback<UnsendMessageEvent>): Promise<UnsendMessageEvent>;
342
-
343
- forwardMessage(messageID: MessageID, threadID: ThreadID, callback?: Callback): Promise<void>;
344
-
345
- deleteMessage(messageIDs: MessageID | MessageID[], callback?: Callback): Promise<void>;
346
-
347
- setMessageReaction(reaction: string, messageID: MessageID, callback?: Callback, forceCustomReaction?: boolean): Promise<void>;
348
- setMessageReactionMqtt(reaction: string, messageID: MessageID, threadID: ThreadID, callback?: Callback): Promise<void>;
349
-
350
- shareContact(text: string, senderID: UserID, threadID: ThreadID, callback?: Callback): void;
351
- shareContact(senderID: UserID, threadID: ThreadID, callback?: Callback): void;
352
- resolvePhotoUrl(photoID: string, callback?: Callback<string>): Promise<string>;
353
-
354
- pinMessage(action: "pin" | "unpin", threadID: ThreadID, messageID: MessageID): Promise<any>;
355
- pinMessage(action: "list", threadID: ThreadID): Promise<Message[]>;
356
-
357
- markAsRead(threadID: ThreadID, read?: boolean, callback?: Callback): Promise<any>;
358
- markAsReadAll(callback?: Callback): Promise<void>;
359
- markAsSeen(timestamp?: number, callback?: Callback): Promise<void>;
360
- markAsDelivered(threadID: ThreadID, messageID: MessageID, callback?: Callback): Promise<void>;
361
-
362
- muteThread(threadID: ThreadID, muteSeconds: number, callback?: Callback): Promise<void>;
363
-
364
- sendTypingIndicator(sendTyping: boolean, threadID: ThreadID, callback?: Callback): Promise<void>;
365
-
366
- getThreadInfo(threadID: ThreadID, callback?: Callback<ThreadInfo>): Promise<ThreadInfo>;
367
- getThreadInfo(threadID: ThreadID[], callback?: Callback<Record<ThreadID, ThreadInfo>>): Promise<Record<ThreadID, ThreadInfo>>;
368
-
369
- getThreadList(limit: number, timestamp: number | null, tags: string[], callback?: Callback<ThreadInfo[]>): Promise<ThreadInfo[]>;
370
- getThreadHistory(threadID: ThreadID, amount: number, timestamp: number | null, callback?: Callback<Message[]>): Promise<Message[]>;
371
- getThreadPictures(threadID: ThreadID, offset: number, limit: number, callback?: Callback<string[]>): Promise<string[]>;
372
-
373
- getMessage(messageID: MessageID, callback?: Callback<Message>): Promise<Message>;
374
-
375
- getUserInfo(id: UserID, usePayload?: boolean, callback?: Callback<UserInfo>): Promise<UserInfo>;
376
- getUserInfo(id: UserID[], usePayload?: boolean, callback?: Callback<Record<UserID, UserInfo>>): Promise<Record<UserID, UserInfo>>;
377
- getUserInfoV2(id: UserID, callback?: Callback<UserInfo>): Promise<UserInfo>;
378
- getUserID(name: string, callback?: Callback<{ userID: UserID; [key: string]: any }[]>): Promise<{ userID: UserID; [key: string]: any }[]>;
379
-
380
- getFriendsList(callback?: Callback<Record<UserID, FriendInfo>>): Promise<Record<UserID, FriendInfo>>;
381
-
382
- searchForThread(name: string, callback?: Callback<ThreadInfo[]>): Promise<ThreadInfo[]>;
383
-
384
- createNewGroup(participantIDs: UserID[], groupName?: string, callback?: Callback<ThreadID>): Promise<ThreadID>;
385
-
386
- addUserToGroup(userID: UserID, threadID: ThreadID, callback?: Callback): Promise<void>;
387
- removeUserFromGroup(userID: UserID, threadID: ThreadID, callback?: Callback): Promise<void>;
388
- changeAdminStatus(threadID: ThreadID, userID: UserID, adminStatus: boolean, callback?: Callback): Promise<void>;
389
-
390
- changeGroupImage(image: ReadStream, threadID: ThreadID, callback?: Callback): Promise<void>;
391
- changeThreadColor(color: string, threadID: ThreadID, callback?: Callback): Promise<void>;
392
- changeThreadEmoji(emoji: string, threadID: ThreadID, callback?: Callback): Promise<void>;
393
-
394
- changeArchivedStatus(threadID: ThreadID | ThreadID[], archive: boolean, callback?: Callback): Promise<void>;
395
- changeBlockedStatus(userID: UserID, block: boolean, callback?: Callback): Promise<void>;
396
-
397
- changeAvatar(image: ReadStream, callback?: Callback): Promise<void>;
398
- changeBio(bio: string, publish: boolean, callback?: Callback): Promise<void>;
399
-
400
- handleMessageRequest(threadID: ThreadID | ThreadID[], accept: boolean, callback?: Callback): Promise<void>;
401
-
402
- deleteThread(threadID: ThreadID | ThreadID[], callback?: Callback): Promise<void>;
403
-
404
- createPoll(title: string, threadID: ThreadID, options?: Record<string, boolean>, callback?: Callback): Promise<void>;
405
-
406
- logout(callback?: (err: any) => void): Promise<void>;
407
-
408
- addExternalModule(moduleObj: Record<string, Function>): void;
409
- getAccess(authCode?: string, callback?: Callback<string>): Promise<string>;
410
-
411
- httpGet(url: string, form?: any, customHeader?: any, callback?: Callback<string>, notAPI?: boolean): Promise<string>;
412
- httpPost(url: string, form?: any, customHeader?: any, callback?: Callback<string>, notAPI?: boolean): Promise<string>;
413
- httpPostFormData(url: string, form?: any, customHeader?: any, callback?: Callback<string>, notAPI?: boolean): Promise<string>;
414
-
415
- getTheme(threadID: ThreadID): Promise<any[]>;
416
- getThemeInfo(threadID: ThreadID): Promise<{ threadName?: string; color?: string; emoji?: string; [key: string]: any }>;
417
- setThreadTheme(threadID: ThreadID, themeID: string, callback?: Callback): Promise<void>;
418
- setThreadThemeMqtt(threadID: ThreadID, themeID: string, callback?: Callback): Promise<void>;
419
- createAITheme(prompt: string): Promise<{ id: string; [key: string]: any }[]>;
420
-
421
- follow(senderID: UserID, follow: boolean, callback?: Callback): void;
422
- unfriend(userID: UserID, callback?: Callback): Promise<void>;
423
- friend(userID: UserID, callback?: Callback): Promise<void>;
424
-
425
- emoji(emoji: string, threadID?: ThreadID, callback?: Callback<EmojiEvent>): Promise<EmojiEvent>;
426
- gcname(newName: string, threadID?: ThreadID, callback?: Callback<GroupNameEvent>): Promise<GroupNameEvent>;
427
- nickname(nickname: string, threadID: ThreadID, participantID: UserID, callback?: Callback<NicknameEvent>): Promise<NicknameEvent>;
428
- theme(newName: string, threadID?: ThreadID, callback?: Callback<GroupNameEvent>): Promise<GroupNameEvent>;
429
-
430
- comment(msg: string | CommentMessage, postID: string, replyCommentID?: string, callback?: Callback<CommentResult>): Promise<CommentResult>;
431
- share(text: string, postID: string, callback?: Callback<ShareResult>): Promise<ShareResult>;
432
- share(postID: string, callback?: Callback<ShareResult>): Promise<ShareResult>;
433
-
434
- stickers: {
435
- search(query: string): Promise<StickerInfo[]>;
436
- listPacks(): Promise<StickerPackInfo[]>;
437
- getStorePacks(): Promise<StickerPackInfo[]>;
438
- listAllPacks(): Promise<StickerPackInfo[]>;
439
- addPack(packID: string): Promise<AddedStickerPackInfo>;
440
- getStickersInPack(packID: string): Promise<StickerInfo[]>;
441
- getAiStickers(options?: { limit?: number }): Promise<StickerInfo[]>;
442
- };
443
-
444
- e2ee: {
445
- enable(): void;
446
- disable(): void;
447
- isEnabled(): boolean;
448
- getPublicKey(): string;
449
- setPeerKey(threadID: ThreadID, peerPublicKeyB64: string): void;
450
- clearPeerKey(threadID: ThreadID): void;
451
- hasPeer(threadID: ThreadID): boolean;
452
- encrypt(threadID: ThreadID, text: string): string;
453
- decrypt(threadID: ThreadID, armored: string): string | null;
454
- };
455
-
456
- getBotInfo(callback?: Callback): Promise<any>;
457
- getUserInfoV2(userID: UserID, callback?: Callback<UserInfo>): Promise<UserInfo>;
458
-
459
- [key: string]: any;
460
- }
461
-
462
- export interface LoginCredentials {
463
- appState?: any;
464
- email?: string;
465
- password?: string;
466
- }
467
-
468
- export interface LoginOptions {
469
- online?: boolean;
470
- selfListen?: boolean;
471
- listenEvents?: boolean;
472
- updatePresence?: boolean;
473
- forceLogin?: boolean;
474
- autoMarkDelivery?: boolean;
475
- autoMarkRead?: boolean;
476
- listenTyping?: boolean;
477
- proxy?: string;
478
- autoReconnect?: boolean;
479
- userAgent?: string;
480
- emitReady?: boolean;
481
- randomUserAgent?: boolean;
482
- bypassRegion?: string;
483
- simulateTyping?: boolean;
484
- maxConcurrentRequests?: number;
485
- maxRequestsPerMinute?: number;
486
- requestCooldownMs?: number;
487
- errorCacheTtlMs?: number;
488
- stealthMode?: boolean;
489
- persona?: "desktop" | "android" | "mobile";
490
- logging?: boolean;
491
- }
492
-
493
- export function login(
494
- credentials: LoginCredentials,
495
- options: LoginOptions | Callback<API>,
496
- callback?: Callback<API>
497
- ): Promise<API> | void;
498
- }