@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.
- package/.travis.yml +6 -0
- package/LICENSE-MIT +21 -0
- package/index.d.ts +620 -0
- package/index.js +778 -1
- package/package.json +31 -84
- package/src/{apis/addExternalModule.js → addExternalModule.js} +4 -5
- package/src/addUserToGroup.js +113 -0
- package/src/changeAdminStatus.js +95 -0
- package/src/changeApprovalMode.js +79 -0
- package/src/changeArchivedStatus.js +55 -0
- package/src/changeBio.js +76 -0
- package/src/changeBlockedStatus.js +47 -0
- package/src/changeBlockedStatusMqtt.js +86 -0
- package/src/changeGroupImage.js +133 -0
- package/src/changeNickname.js +59 -0
- package/src/changeThreadColor.js +71 -0
- package/src/{apis/changeThreadEmoji.js → changeThreadEmoji.js} +8 -6
- package/src/createNewGroup.js +88 -0
- package/src/createPoll.js +130 -0
- package/src/deleteMessage.js +56 -0
- package/src/deleteThread.js +56 -0
- package/src/editMessage.js +63 -0
- package/src/forwardAttachment.js +60 -0
- package/src/forwardMessage.js +63 -0
- package/src/getCurrentUserID.js +7 -0
- package/src/getEmojiUrl.js +29 -0
- package/src/getFriendsList.js +84 -0
- package/src/getGroupsList.js +83 -0
- package/src/getMarketplace.js +84 -0
- package/src/getNotifications.js +86 -0
- package/src/getPagesList.js +83 -0
- package/src/getStories.js +88 -0
- package/src/getThreadHistory.js +647 -0
- package/src/getThreadInfo.js +222 -0
- package/src/getThreadList.js +292 -0
- package/src/getThreadPictures.js +79 -0
- package/src/getUserID.js +66 -0
- package/src/getUserInfo.js +128 -0
- package/src/handleFriendRequest.js +57 -0
- package/src/handleMessageRequest.js +65 -0
- package/src/{apis/httpGet.js → httpGet.js} +15 -20
- package/src/httpPost.js +58 -0
- package/src/listenMqtt.js +1018 -0
- package/src/logout.js +75 -0
- package/src/markAsDelivered.js +58 -0
- package/src/{apis/markAsRead.js → markAsRead.js} +19 -30
- package/src/markAsReadAll.js +50 -0
- package/src/markAsSeen.js +61 -0
- package/src/muteThread.js +52 -0
- package/src/pinMessage.js +61 -0
- package/src/removeUserFromGroup.js +79 -0
- package/src/resolvePhotoUrl.js +45 -0
- package/src/searchForThread.js +53 -0
- package/src/searchUsers.js +89 -0
- package/src/sendComment.js +161 -0
- package/src/sendMessage.js +457 -0
- package/src/sendTypingIndicator.js +179 -0
- package/src/setBio.js +86 -0
- package/src/setMessageReaction.js +186 -0
- package/src/setPostReaction.js +71 -0
- package/src/setTheme.js +313 -0
- package/src/setTitle.js +90 -0
- package/src/shareContact.js +53 -0
- package/src/shareLink.js +62 -0
- package/src/threadColors.js +57 -0
- package/src/unfriend.js +53 -0
- package/src/unsendMessage.js +104 -0
- package/utils.js +1447 -0
- package/LICENSE +0 -3
- package/README.md +0 -491
- package/examples/login-with-cookies.js +0 -102
- package/examples/verify.js +0 -70
- package/src/apis/addUserToGroup.js +0 -108
- package/src/apis/changeAdminStatus.js +0 -148
- package/src/apis/changeArchivedStatus.js +0 -61
- package/src/apis/changeAvatar.js +0 -103
- package/src/apis/changeBio.js +0 -69
- package/src/apis/changeBlockedStatus.js +0 -54
- package/src/apis/changeGroupImage.js +0 -136
- package/src/apis/changeThreadColor.js +0 -116
- package/src/apis/comment.js +0 -207
- package/src/apis/createAITheme.js +0 -129
- package/src/apis/createNewGroup.js +0 -79
- package/src/apis/createPoll.js +0 -73
- package/src/apis/deleteMessage.js +0 -44
- package/src/apis/deleteThread.js +0 -52
- package/src/apis/e2ee.js +0 -17
- package/src/apis/editMessage.js +0 -70
- package/src/apis/emoji.js +0 -124
- package/src/apis/fetchThemeData.js +0 -82
- package/src/apis/follow.js +0 -81
- package/src/apis/forwardMessage.js +0 -52
- package/src/apis/friend.js +0 -243
- package/src/apis/gcmember.js +0 -122
- package/src/apis/gcname.js +0 -123
- package/src/apis/gcrule.js +0 -119
- package/src/apis/getAccess.js +0 -111
- package/src/apis/getBotInfo.js +0 -88
- package/src/apis/getBotInitialData.js +0 -43
- package/src/apis/getFriendsList.js +0 -79
- package/src/apis/getMessage.js +0 -423
- package/src/apis/getTheme.js +0 -95
- package/src/apis/getThemeInfo.js +0 -116
- package/src/apis/getThreadHistory.js +0 -239
- package/src/apis/getThreadInfo.js +0 -267
- package/src/apis/getThreadList.js +0 -232
- package/src/apis/getThreadPictures.js +0 -58
- package/src/apis/getUserID.js +0 -117
- package/src/apis/getUserInfo.js +0 -513
- package/src/apis/getUserInfoV2.js +0 -146
- package/src/apis/handleMessageRequest.js +0 -50
- package/src/apis/httpPost.js +0 -89
- package/src/apis/httpPostFormData.js +0 -69
- package/src/apis/listenMqtt.js +0 -1236
- package/src/apis/listenSpeed.js +0 -179
- package/src/apis/logout.js +0 -87
- package/src/apis/markAsDelivered.js +0 -47
- package/src/apis/markAsReadAll.js +0 -40
- package/src/apis/markAsSeen.js +0 -70
- package/src/apis/mqttDeltaValue.js +0 -278
- package/src/apis/muteThread.js +0 -45
- package/src/apis/nickname.js +0 -132
- package/src/apis/notes.js +0 -163
- package/src/apis/pinMessage.js +0 -150
- package/src/apis/produceMetaTheme.js +0 -180
- package/src/apis/realtime.js +0 -182
- package/src/apis/removeUserFromGroup.js +0 -117
- package/src/apis/resolvePhotoUrl.js +0 -58
- package/src/apis/searchForThread.js +0 -154
- package/src/apis/sendMessage.js +0 -354
- package/src/apis/sendMessageMqtt.js +0 -249
- package/src/apis/sendTypingIndicator.js +0 -91
- package/src/apis/setMessageReaction.js +0 -27
- package/src/apis/setMessageReactionMqtt.js +0 -61
- package/src/apis/setThreadTheme.js +0 -260
- package/src/apis/setThreadThemeMqtt.js +0 -94
- package/src/apis/share.js +0 -107
- package/src/apis/shareContact.js +0 -66
- package/src/apis/stickers.js +0 -257
- package/src/apis/story.js +0 -181
- package/src/apis/theme.js +0 -233
- package/src/apis/unfriend.js +0 -47
- package/src/apis/unsendMessage.js +0 -17
- package/src/engine/client.js +0 -92
- package/src/engine/models/buildAPI.js +0 -152
- package/src/engine/models/loginHelper.js +0 -519
- package/src/engine/models/setOptions.js +0 -88
- package/src/security/e2ee.js +0 -109
- package/src/types/index.d.ts +0 -498
- package/src/utils/antiSuspension.js +0 -506
- package/src/utils/auth-helpers.js +0 -149
- package/src/utils/autoReLogin.js +0 -336
- package/src/utils/axios.js +0 -436
- package/src/utils/cache.js +0 -54
- package/src/utils/clients.js +0 -282
- package/src/utils/constants.js +0 -410
- package/src/utils/formatters/data/formatAttachment.js +0 -370
- package/src/utils/formatters/data/formatDelta.js +0 -109
- package/src/utils/formatters/index.js +0 -159
- package/src/utils/formatters/value/formatCookie.js +0 -91
- package/src/utils/formatters/value/formatDate.js +0 -36
- package/src/utils/formatters/value/formatID.js +0 -16
- package/src/utils/formatters.js +0 -1373
- package/src/utils/headers.js +0 -230
- package/src/utils/index.js +0 -153
- package/src/utils/monitoring.js +0 -333
- package/src/utils/rateLimiter.js +0 -319
- package/src/utils/tokenRefresh.js +0 -657
- package/src/utils/user-agents.js +0 -238
- 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;
|
package/src/security/e2ee.js
DELETED
|
@@ -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
|
-
};
|
package/src/types/index.d.ts
DELETED
|
@@ -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
|
-
}
|