bb-fca 2.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.
- package/LICENSE-MIT +21 -0
- package/README.md +0 -0
- package/dist/core/client.js +50 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/models/buildAPI.js +103 -0
- package/dist/core/models/buildAPI.js.map +1 -0
- package/dist/core/models/loginHelper.js +209 -0
- package/dist/core/models/loginHelper.js.map +1 -0
- package/dist/core/models/setOptions.js +47 -0
- package/dist/core/models/setOptions.js.map +1 -0
- package/dist/deltas/apis/create.js +30 -0
- package/dist/deltas/apis/create.js.map +1 -0
- package/dist/deltas/apis/extra/addExternalModule.js +23 -0
- package/dist/deltas/apis/extra/addExternalModule.js.map +1 -0
- package/dist/deltas/apis/extra/getAccess.js +110 -0
- package/dist/deltas/apis/extra/getAccess.js.map +1 -0
- package/dist/deltas/apis/http/httpGet.js +57 -0
- package/dist/deltas/apis/http/httpGet.js.map +1 -0
- package/dist/deltas/apis/http/httpPost.js +57 -0
- package/dist/deltas/apis/http/httpPost.js.map +1 -0
- package/dist/deltas/apis/http/httpPostFormData.js +61 -0
- package/dist/deltas/apis/http/httpPostFormData.js.map +1 -0
- package/dist/deltas/apis/login/GetBotInfo.js +83 -0
- package/dist/deltas/apis/login/GetBotInfo.js.map +1 -0
- package/dist/deltas/apis/login/getBotInitialData.js +46 -0
- package/dist/deltas/apis/login/getBotInitialData.js.map +1 -0
- package/dist/deltas/apis/login/logout.js +54 -0
- package/dist/deltas/apis/login/logout.js.map +1 -0
- package/dist/deltas/apis/messaging/editMessage.js +64 -0
- package/dist/deltas/apis/messaging/editMessage.js.map +1 -0
- package/dist/deltas/apis/messaging/emoji.js +120 -0
- package/dist/deltas/apis/messaging/emoji.js.map +1 -0
- package/dist/deltas/apis/messaging/gcmember.js +164 -0
- package/dist/deltas/apis/messaging/gcmember.js.map +1 -0
- package/dist/deltas/apis/messaging/gcname.js +119 -0
- package/dist/deltas/apis/messaging/gcname.js.map +1 -0
- package/dist/deltas/apis/messaging/gcrule.js +144 -0
- package/dist/deltas/apis/messaging/gcrule.js.map +1 -0
- package/dist/deltas/apis/messaging/markAsDelivered.js +44 -0
- package/dist/deltas/apis/messaging/markAsDelivered.js.map +1 -0
- package/dist/deltas/apis/messaging/markAsRead.js +84 -0
- package/dist/deltas/apis/messaging/markAsRead.js.map +1 -0
- package/dist/deltas/apis/messaging/markAsReadAll.js +34 -0
- package/dist/deltas/apis/messaging/markAsReadAll.js.map +1 -0
- package/dist/deltas/apis/messaging/markAsSeen.js +64 -0
- package/dist/deltas/apis/messaging/markAsSeen.js.map +1 -0
- package/dist/deltas/apis/messaging/nickname.js +129 -0
- package/dist/deltas/apis/messaging/nickname.js.map +1 -0
- package/dist/deltas/apis/messaging/notes.js +156 -0
- package/dist/deltas/apis/messaging/notes.js.map +1 -0
- package/dist/deltas/apis/messaging/resolvePhotoUrl.js +55 -0
- package/dist/deltas/apis/messaging/resolvePhotoUrl.js.map +1 -0
- package/dist/deltas/apis/messaging/sendMessage.js +239 -0
- package/dist/deltas/apis/messaging/sendMessage.js.map +1 -0
- package/dist/deltas/apis/messaging/sendTypingIndicator.js +41 -0
- package/dist/deltas/apis/messaging/sendTypingIndicator.js.map +1 -0
- package/dist/deltas/apis/messaging/setMessageReaction.js +30 -0
- package/dist/deltas/apis/messaging/setMessageReaction.js.map +1 -0
- package/dist/deltas/apis/messaging/shareContact.js +59 -0
- package/dist/deltas/apis/messaging/shareContact.js.map +1 -0
- package/dist/deltas/apis/messaging/stickers.js +246 -0
- package/dist/deltas/apis/messaging/stickers.js.map +1 -0
- package/dist/deltas/apis/messaging/theme.js +227 -0
- package/dist/deltas/apis/messaging/theme.js.map +1 -0
- package/dist/deltas/apis/messaging/unsendMessage.js +19 -0
- package/dist/deltas/apis/messaging/unsendMessage.js.map +1 -0
- package/dist/deltas/apis/mqtt/deltas/value.js +193 -0
- package/dist/deltas/apis/mqtt/deltas/value.js.map +1 -0
- package/dist/deltas/apis/mqtt/listenMqtt.js +306 -0
- package/dist/deltas/apis/mqtt/listenMqtt.js.map +1 -0
- package/dist/deltas/apis/mqtt/listenSpeed.js +166 -0
- package/dist/deltas/apis/mqtt/listenSpeed.js.map +1 -0
- package/dist/deltas/apis/mqtt/pinMessage.js +166 -0
- package/dist/deltas/apis/mqtt/pinMessage.js.map +1 -0
- package/dist/deltas/apis/mqtt/realtime.js +160 -0
- package/dist/deltas/apis/mqtt/realtime.js.map +1 -0
- package/dist/deltas/apis/mqtt/sendMessageMqtt.js +184 -0
- package/dist/deltas/apis/mqtt/sendMessageMqtt.js.map +1 -0
- package/dist/deltas/apis/mqtt/setMessageReactionMqtt.js +57 -0
- package/dist/deltas/apis/mqtt/setMessageReactionMqtt.js.map +1 -0
- package/dist/deltas/apis/posting/comment.js +195 -0
- package/dist/deltas/apis/posting/comment.js.map +1 -0
- package/dist/deltas/apis/posting/follow.js +82 -0
- package/dist/deltas/apis/posting/follow.js.map +1 -0
- package/dist/deltas/apis/posting/friend.js +253 -0
- package/dist/deltas/apis/posting/friend.js.map +1 -0
- package/dist/deltas/apis/posting/post.js +551 -0
- package/dist/deltas/apis/posting/post.js.map +1 -0
- package/dist/deltas/apis/posting/share.js +59 -0
- package/dist/deltas/apis/posting/share.js.map +1 -0
- package/dist/deltas/apis/posting/story.js +176 -0
- package/dist/deltas/apis/posting/story.js.map +1 -0
- package/dist/deltas/apis/threads/getThreadHistory.js +233 -0
- package/dist/deltas/apis/threads/getThreadHistory.js.map +1 -0
- package/dist/deltas/apis/threads/getThreadInfo.js +197 -0
- package/dist/deltas/apis/threads/getThreadInfo.js.map +1 -0
- package/dist/deltas/apis/threads/getThreadList.js +201 -0
- package/dist/deltas/apis/threads/getThreadList.js.map +1 -0
- package/dist/deltas/apis/users/getUserInfo.js +254 -0
- package/dist/deltas/apis/users/getUserInfo.js.map +1 -0
- package/dist/index.d.ts +696 -0
- package/dist/types/core/client.d.ts +2 -0
- package/dist/types/core/models/buildAPI.d.ts +13 -0
- package/dist/types/core/models/loginHelper.d.ts +15 -0
- package/dist/types/core/models/setOptions.d.ts +2 -0
- package/dist/types/deltas/apis/create.d.ts +23 -0
- package/dist/types/deltas/apis/extra/addExternalModule.d.ts +1 -0
- package/dist/types/deltas/apis/extra/getAccess.d.ts +1 -0
- package/dist/types/deltas/apis/http/httpGet.d.ts +1 -0
- package/dist/types/deltas/apis/http/httpPost.d.ts +1 -0
- package/dist/types/deltas/apis/http/httpPostFormData.d.ts +1 -0
- package/dist/types/deltas/apis/login/GetBotInfo.d.ts +32 -0
- package/dist/types/deltas/apis/login/getBotInitialData.d.ts +1 -0
- package/dist/types/deltas/apis/login/logout.d.ts +7 -0
- package/dist/types/deltas/apis/messaging/editMessage.d.ts +7 -0
- package/dist/types/deltas/apis/messaging/emoji.d.ts +1 -0
- package/dist/types/deltas/apis/messaging/gcmember.d.ts +1 -0
- package/dist/types/deltas/apis/messaging/gcname.d.ts +1 -0
- package/dist/types/deltas/apis/messaging/gcrule.d.ts +1 -0
- package/dist/types/deltas/apis/messaging/markAsDelivered.d.ts +7 -0
- package/dist/types/deltas/apis/messaging/markAsRead.d.ts +6 -0
- package/dist/types/deltas/apis/messaging/markAsReadAll.d.ts +7 -0
- package/dist/types/deltas/apis/messaging/markAsSeen.d.ts +6 -0
- package/dist/types/deltas/apis/messaging/nickname.d.ts +1 -0
- package/dist/types/deltas/apis/messaging/notes.d.ts +14 -0
- package/dist/types/deltas/apis/messaging/resolvePhotoUrl.d.ts +9 -0
- package/dist/types/deltas/apis/messaging/sendMessage.d.ts +1 -0
- package/dist/types/deltas/apis/messaging/sendTypingIndicator.d.ts +6 -0
- package/dist/types/deltas/apis/messaging/setMessageReaction.d.ts +1 -0
- package/dist/types/deltas/apis/messaging/shareContact.d.ts +8 -0
- package/dist/types/deltas/apis/messaging/stickers.d.ts +48 -0
- package/dist/types/deltas/apis/messaging/theme.d.ts +1 -0
- package/dist/types/deltas/apis/messaging/unsendMessage.d.ts +1 -0
- package/dist/types/deltas/apis/mqtt/deltas/value.d.ts +2 -0
- package/dist/types/deltas/apis/mqtt/listenMqtt.d.ts +20 -0
- package/dist/types/deltas/apis/mqtt/listenSpeed.d.ts +21 -0
- package/dist/types/deltas/apis/mqtt/pinMessage.d.ts +1 -0
- package/dist/types/deltas/apis/mqtt/realtime.d.ts +1 -0
- package/dist/types/deltas/apis/mqtt/sendMessageMqtt.d.ts +1 -0
- package/dist/types/deltas/apis/mqtt/setMessageReactionMqtt.d.ts +1 -0
- package/dist/types/deltas/apis/posting/comment.d.ts +9 -0
- package/dist/types/deltas/apis/posting/follow.d.ts +14 -0
- package/dist/types/deltas/apis/posting/friend.d.ts +61 -0
- package/dist/types/deltas/apis/posting/post.d.ts +20 -0
- package/dist/types/deltas/apis/posting/share.d.ts +1 -0
- package/dist/types/deltas/apis/posting/story.d.ts +39 -0
- package/dist/types/deltas/apis/threads/getThreadHistory.d.ts +7 -0
- package/dist/types/deltas/apis/threads/getThreadInfo.d.ts +7 -0
- package/dist/types/deltas/apis/threads/getThreadList.d.ts +7 -0
- package/dist/types/deltas/apis/users/getUserInfo.d.ts +1 -0
- package/dist/types/utils/axios.d.ts +7 -0
- package/dist/types/utils/clients.d.ts +4 -0
- package/dist/types/utils/constants.d.ts +24 -0
- package/dist/types/utils/formatters/data/formatAttachment.d.ts +2 -0
- package/dist/types/utils/formatters/data/formatDelta.d.ts +4 -0
- package/dist/types/utils/formatters/index.d.ts +17 -0
- package/dist/types/utils/formatters/value/formatCookie.d.ts +8 -0
- package/dist/types/utils/formatters/value/formatDate.d.ts +6 -0
- package/dist/types/utils/formatters/value/formatID.d.ts +7 -0
- package/dist/types/utils/headers.d.ts +2 -0
- package/dist/types/utils/index.d.ts +75 -0
- package/dist/types/utils/user-agents.d.ts +9 -0
- package/dist/utils/axios.js +148 -0
- package/dist/utils/axios.js.map +1 -0
- package/dist/utils/clients.js +120 -0
- package/dist/utils/clients.js.map +1 -0
- package/dist/utils/constants.js +249 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/formatters/data/formatAttachment.js +61 -0
- package/dist/utils/formatters/data/formatAttachment.js.map +1 -0
- package/dist/utils/formatters/data/formatDelta.js +67 -0
- package/dist/utils/formatters/data/formatDelta.js.map +1 -0
- package/dist/utils/formatters/index.js +132 -0
- package/dist/utils/formatters/index.js.map +1 -0
- package/dist/utils/formatters/value/formatCookie.js +13 -0
- package/dist/utils/formatters/value/formatCookie.js.map +1 -0
- package/dist/utils/formatters/value/formatDate.js +33 -0
- package/dist/utils/formatters/value/formatDate.js.map +1 -0
- package/dist/utils/formatters/value/formatID.js +17 -0
- package/dist/utils/formatters/value/formatID.js.map +1 -0
- package/dist/utils/headers.js +61 -0
- package/dist/utils/headers.js.map +1 -0
- package/dist/utils/index.js +105 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/user-agents.js +41 -0
- package/dist/utils/user-agents.js.map +1 -0
- package/examples/post.example.js +149 -0
- package/module/index.js +5 -0
- package/package.json +56 -0
- package/src/core/client.ts +66 -0
- package/src/core/models/buildAPI.ts +131 -0
- package/src/core/models/loginHelper.ts +226 -0
- package/src/core/models/setOptions.ts +48 -0
- package/src/deltas/apis/create.ts +28 -0
- package/src/deltas/apis/extra/addExternalModule.ts +23 -0
- package/src/deltas/apis/extra/getAccess.ts +141 -0
- package/src/deltas/apis/http/httpGet.ts +61 -0
- package/src/deltas/apis/http/httpPost.ts +61 -0
- package/src/deltas/apis/http/httpPostFormData.ts +67 -0
- package/src/deltas/apis/login/GetBotInfo.ts +88 -0
- package/src/deltas/apis/login/getBotInitialData.ts +42 -0
- package/src/deltas/apis/login/logout.ts +62 -0
- package/src/deltas/apis/messaging/editMessage.ts +69 -0
- package/src/deltas/apis/messaging/emoji.ts +135 -0
- package/src/deltas/apis/messaging/gcmember.ts +175 -0
- package/src/deltas/apis/messaging/gcname.ts +136 -0
- package/src/deltas/apis/messaging/gcrule.ts +152 -0
- package/src/deltas/apis/messaging/markAsDelivered.ts +47 -0
- package/src/deltas/apis/messaging/markAsRead.ts +94 -0
- package/src/deltas/apis/messaging/markAsReadAll.ts +38 -0
- package/src/deltas/apis/messaging/markAsSeen.ts +69 -0
- package/src/deltas/apis/messaging/nickname.ts +153 -0
- package/src/deltas/apis/messaging/notes.ts +165 -0
- package/src/deltas/apis/messaging/resolvePhotoUrl.ts +56 -0
- package/src/deltas/apis/messaging/sendMessage.ts +286 -0
- package/src/deltas/apis/messaging/sendTypingIndicator.ts +48 -0
- package/src/deltas/apis/messaging/setMessageReaction.ts +25 -0
- package/src/deltas/apis/messaging/shareContact.ts +63 -0
- package/src/deltas/apis/messaging/stickers.ts +255 -0
- package/src/deltas/apis/messaging/theme.ts +280 -0
- package/src/deltas/apis/messaging/unsendMessage.ts +15 -0
- package/src/deltas/apis/mqtt/deltas/value.ts +224 -0
- package/src/deltas/apis/mqtt/listenMqtt.ts +332 -0
- package/src/deltas/apis/mqtt/listenSpeed.ts +179 -0
- package/src/deltas/apis/mqtt/pinMessage.ts +135 -0
- package/src/deltas/apis/mqtt/realtime.ts +169 -0
- package/src/deltas/apis/mqtt/sendMessageMqtt.ts +206 -0
- package/src/deltas/apis/mqtt/setMessageReactionMqtt.ts +61 -0
- package/src/deltas/apis/posting/comment.ts +205 -0
- package/src/deltas/apis/posting/follow.ts +79 -0
- package/src/deltas/apis/posting/friend.ts +241 -0
- package/src/deltas/apis/posting/post.ts +599 -0
- package/src/deltas/apis/posting/share.ts +60 -0
- package/src/deltas/apis/posting/story.ts +207 -0
- package/src/deltas/apis/threads/getThreadHistory.ts +237 -0
- package/src/deltas/apis/threads/getThreadInfo.ts +210 -0
- package/src/deltas/apis/threads/getThreadList.ts +224 -0
- package/src/deltas/apis/users/getUserInfo.ts +244 -0
- package/src/types/index.d.ts +696 -0
- package/src/utils/axios.ts +178 -0
- package/src/utils/clients.ts +125 -0
- package/src/utils/constants.ts +281 -0
- package/src/utils/formatters/data/formatAttachment.ts +58 -0
- package/src/utils/formatters/data/formatDelta.ts +45 -0
- package/src/utils/formatters/index.ts +82 -0
- package/src/utils/formatters/value/formatCookie.ts +13 -0
- package/src/utils/formatters/value/formatDate.ts +34 -0
- package/src/utils/formatters/value/formatID.ts +14 -0
- package/src/utils/formatters.old.ts +1049 -0
- package/src/utils/headers.ts +65 -0
- package/src/utils/index.ts +65 -0
- package/src/utils/user-agents.ts +49 -0
- package/tsconfig.json +37 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// @ChoruOfficial
|
|
2
|
+
import utils = require("../../../utils");
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @param {Object} defaultFuncs
|
|
6
|
+
* @param {Object} api
|
|
7
|
+
* @param {Object} ctx
|
|
8
|
+
*/
|
|
9
|
+
export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
10
|
+
/**
|
|
11
|
+
* Marks a thread as read.
|
|
12
|
+
* @param {string} threadID - The ID of the thread to mark as read.
|
|
13
|
+
* @param {boolean} [read=true] - Whether to mark as read (true) or unread (false). Defaults to true.
|
|
14
|
+
* @param {Function} [callback] - The callback function.
|
|
15
|
+
* @returns {Promise<null|Error>} A Promise that resolves with null on success, or rejects with an Error.
|
|
16
|
+
*/
|
|
17
|
+
return async function markAsRead(threadID, read, callback) {
|
|
18
|
+
if (
|
|
19
|
+
utils.getType(read) === "Function" ||
|
|
20
|
+
utils.getType(read) === "AsyncFunction"
|
|
21
|
+
) {
|
|
22
|
+
callback = read;
|
|
23
|
+
read = true;
|
|
24
|
+
}
|
|
25
|
+
if (read == undefined) {
|
|
26
|
+
read = true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (!callback) {
|
|
30
|
+
callback = () => {};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const form = {};
|
|
34
|
+
|
|
35
|
+
if (typeof ctx.globalOptions.pageID !== "undefined") {
|
|
36
|
+
form["source"] = "PagesManagerMessagesInterface";
|
|
37
|
+
form["request_user_id"] = ctx.globalOptions.pageID;
|
|
38
|
+
form["ids[" + threadID + "]"] = read;
|
|
39
|
+
form["watermarkTimestamp"] = new Date().getTime();
|
|
40
|
+
form["shouldSendReadReceipt"] = true;
|
|
41
|
+
form["commerce_last_message_type"] = "";
|
|
42
|
+
|
|
43
|
+
let resData;
|
|
44
|
+
try {
|
|
45
|
+
resData = await defaultFuncs
|
|
46
|
+
.post(
|
|
47
|
+
"https://www.facebook.com/ajax/mercury/change_read_status.php",
|
|
48
|
+
ctx.jar,
|
|
49
|
+
form,
|
|
50
|
+
)
|
|
51
|
+
.then(utils.saveCookies(ctx.jar))
|
|
52
|
+
.then(utils.parseAndCheckLogin(ctx, defaultFuncs));
|
|
53
|
+
} catch (e) {
|
|
54
|
+
callback(e);
|
|
55
|
+
return e;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (resData.error) {
|
|
59
|
+
const err = resData.error;
|
|
60
|
+
utils.error("markAsRead", err);
|
|
61
|
+
callback(err);
|
|
62
|
+
return err;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
callback();
|
|
66
|
+
return null;
|
|
67
|
+
} else {
|
|
68
|
+
try {
|
|
69
|
+
if (ctx.mqttClient) {
|
|
70
|
+
const err = await new Promise((r) =>
|
|
71
|
+
ctx.mqttClient.publish(
|
|
72
|
+
"/mark_thread",
|
|
73
|
+
JSON.stringify({
|
|
74
|
+
threadID,
|
|
75
|
+
mark: "read",
|
|
76
|
+
state: read,
|
|
77
|
+
}),
|
|
78
|
+
{ qos: 1, retain: false },
|
|
79
|
+
r,
|
|
80
|
+
),
|
|
81
|
+
);
|
|
82
|
+
if (err) throw err;
|
|
83
|
+
} else {
|
|
84
|
+
throw {
|
|
85
|
+
error: "You can only use this function after you start listening.",
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
callback(e);
|
|
90
|
+
return e;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import utils = require('../../../utils');
|
|
2
|
+
|
|
3
|
+
// @ChoruOfficial
|
|
4
|
+
/**
|
|
5
|
+
* @param {Object} defaultFuncs
|
|
6
|
+
* @param {Object} api
|
|
7
|
+
* @param {Object} ctx
|
|
8
|
+
* @returns {function(): Promise<void>}
|
|
9
|
+
*/
|
|
10
|
+
export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
11
|
+
/**
|
|
12
|
+
* @returns {Promise<void>}
|
|
13
|
+
*/
|
|
14
|
+
return async function markAsReadAll() {
|
|
15
|
+
const form = {
|
|
16
|
+
folder: 'inbox',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
const resData = await defaultFuncs.post(
|
|
21
|
+
'https://www.facebook.com/ajax/mercury/mark_folder_as_read.php',
|
|
22
|
+
ctx.jar,
|
|
23
|
+
form,
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const parsedData = utils.parseAndCheckLogin(resData, defaultFuncs) as any;
|
|
27
|
+
|
|
28
|
+
if (parsedData.error) {
|
|
29
|
+
throw parsedData;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return;
|
|
33
|
+
} catch (err) {
|
|
34
|
+
utils.error('markAsReadAll', err);
|
|
35
|
+
throw err;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// @ChoruOfficial
|
|
2
|
+
import utils = require("../../../utils");
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @param {Object} defaultFuncs
|
|
6
|
+
* @param {Object} api
|
|
7
|
+
* @param {Object} ctx
|
|
8
|
+
*/
|
|
9
|
+
export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
10
|
+
/**
|
|
11
|
+
* Marks all messages as "seen" up to a specific timestamp.
|
|
12
|
+
* @param {number} [seen_timestamp=Date.now()] - The timestamp (in milliseconds) up to which messages should be marked as seen. If a function is provided, it's treated as the callback and the timestamp defaults to the current time.
|
|
13
|
+
* @param {Function} [callback] - The callback function.
|
|
14
|
+
* @returns {Promise<void>} A Promise that resolves on success or rejects with an error.
|
|
15
|
+
*/
|
|
16
|
+
return async function markAsRead(seen_timestamp, callback) {
|
|
17
|
+
let resolveFunc: Function = function () {};
|
|
18
|
+
let rejectFunc: Function = function () {};
|
|
19
|
+
const returnPromise = new Promise<any>(function (resolve, reject) {
|
|
20
|
+
resolveFunc = resolve;
|
|
21
|
+
rejectFunc = reject;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
if (utils.getType(seen_timestamp) == "Function" || utils.getType(seen_timestamp) == "AsyncFunction") {
|
|
25
|
+
callback = seen_timestamp;
|
|
26
|
+
seen_timestamp = Date.now();
|
|
27
|
+
} else if (seen_timestamp === undefined) {
|
|
28
|
+
seen_timestamp = Date.now();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!callback) {
|
|
32
|
+
callback = function (err, friendList) {
|
|
33
|
+
if (err) {
|
|
34
|
+
return rejectFunc(err);
|
|
35
|
+
}
|
|
36
|
+
resolveFunc(friendList);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const form = {
|
|
41
|
+
seen_timestamp: seen_timestamp,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const resData = await defaultFuncs
|
|
46
|
+
.post(
|
|
47
|
+
"https://www.facebook.com/ajax/mercury/mark_seen.php",
|
|
48
|
+
ctx.jar,
|
|
49
|
+
form,
|
|
50
|
+
)
|
|
51
|
+
.then(utils.saveCookies(ctx.jar))
|
|
52
|
+
.then(utils.parseAndCheckLogin(ctx, defaultFuncs));
|
|
53
|
+
|
|
54
|
+
if (resData.error) {
|
|
55
|
+
throw resData;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return callback();
|
|
59
|
+
} catch (err) {
|
|
60
|
+
utils.error("markAsSeen", err);
|
|
61
|
+
if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
|
|
62
|
+
ctx.loggedIn = false;
|
|
63
|
+
}
|
|
64
|
+
return callback(err);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return returnPromise;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import utils = require('../../../utils');
|
|
2
|
+
|
|
3
|
+
export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
4
|
+
/**
|
|
5
|
+
* Made by Choru Official
|
|
6
|
+
* Mqtt
|
|
7
|
+
* Sets a nickname for a participant in a Facebook thread via MQTT.
|
|
8
|
+
*
|
|
9
|
+
* @param {string} nickname The new nickname to set.
|
|
10
|
+
* @param {string} threadID The ID of the thread.
|
|
11
|
+
* @param {string} participantID The ID of the participant whose nickname will be changed. Defaults to the current user's ID if not provided or a function.
|
|
12
|
+
* @param {Function} [callback] Optional callback function to be invoked upon completion.
|
|
13
|
+
* @param {string} [initiatorID] The ID of the user who initiated the nickname change (e.g., from event.senderID).
|
|
14
|
+
* @returns {Promise<object>} A promise that resolves with a structured event object on success or rejects on error.
|
|
15
|
+
*/
|
|
16
|
+
return function setNickname(
|
|
17
|
+
nickname,
|
|
18
|
+
threadID,
|
|
19
|
+
participantID,
|
|
20
|
+
callback,
|
|
21
|
+
initiatorID,
|
|
22
|
+
) {
|
|
23
|
+
let _callback;
|
|
24
|
+
let _initiatorID;
|
|
25
|
+
|
|
26
|
+
let _resolvePromise;
|
|
27
|
+
let _rejectPromise;
|
|
28
|
+
const returnPromise = new Promise<any>((resolve, reject) => {
|
|
29
|
+
_resolvePromise = resolve;
|
|
30
|
+
_rejectPromise = reject;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
if (
|
|
34
|
+
utils.getType(callback) === 'Function' ||
|
|
35
|
+
utils.getType(callback) === 'AsyncFunction'
|
|
36
|
+
) {
|
|
37
|
+
_callback = callback;
|
|
38
|
+
_initiatorID = initiatorID;
|
|
39
|
+
} else if (
|
|
40
|
+
utils.getType(threadID) === 'Function' ||
|
|
41
|
+
utils.getType(threadID) === 'AsyncFunction'
|
|
42
|
+
) {
|
|
43
|
+
_callback = threadID;
|
|
44
|
+
threadID = null;
|
|
45
|
+
_initiatorID = callback;
|
|
46
|
+
} else if (
|
|
47
|
+
utils.getType(participantID) === 'Function' ||
|
|
48
|
+
utils.getType(participantID) === 'AsyncFunction'
|
|
49
|
+
) {
|
|
50
|
+
_callback = participantID;
|
|
51
|
+
participantID = ctx.userID;
|
|
52
|
+
_initiatorID = callback;
|
|
53
|
+
} else if (utils.getType(callback) === 'string') {
|
|
54
|
+
_initiatorID = callback;
|
|
55
|
+
_callback = undefined;
|
|
56
|
+
} else {
|
|
57
|
+
_callback = undefined;
|
|
58
|
+
_initiatorID = undefined;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!_callback) {
|
|
62
|
+
_callback = function(__err, __data) {
|
|
63
|
+
if (__err) _rejectPromise(__err);
|
|
64
|
+
else _resolvePromise(__data);
|
|
65
|
+
};
|
|
66
|
+
} else {
|
|
67
|
+
const originalCallback = _callback;
|
|
68
|
+
_callback = function(__err, __data) {
|
|
69
|
+
if (__err) {
|
|
70
|
+
originalCallback(__err);
|
|
71
|
+
_rejectPromise(__err);
|
|
72
|
+
} else {
|
|
73
|
+
originalCallback(null, __data);
|
|
74
|
+
_resolvePromise(__data);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
_initiatorID = _initiatorID || ctx.userID;
|
|
80
|
+
|
|
81
|
+
threadID = threadID || ctx.threadID;
|
|
82
|
+
participantID = participantID || ctx.userID;
|
|
83
|
+
|
|
84
|
+
if (!threadID) {
|
|
85
|
+
return _callback(new Error('threadID is required to set a nickname.'));
|
|
86
|
+
}
|
|
87
|
+
if (typeof nickname !== 'string') {
|
|
88
|
+
return _callback(new Error('nickname must be a string.'));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (!ctx.mqttClient) {
|
|
92
|
+
return _callback(new Error('Not connected to MQTT'));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
ctx.wsReqNumber += 1;
|
|
96
|
+
ctx.wsTaskNumber += 1;
|
|
97
|
+
|
|
98
|
+
const queryPayload = {
|
|
99
|
+
thread_key: threadID.toString(),
|
|
100
|
+
contact_id: participantID.toString(),
|
|
101
|
+
nickname: nickname,
|
|
102
|
+
sync_group: 1,
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const query = {
|
|
106
|
+
failure_count: null,
|
|
107
|
+
label: '44',
|
|
108
|
+
payload: JSON.stringify(queryPayload),
|
|
109
|
+
queue_name: 'thread_participant_nickname',
|
|
110
|
+
task_id: ctx.wsTaskNumber,
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const context: any = {
|
|
114
|
+
app_id: ctx.appID,
|
|
115
|
+
payload: {
|
|
116
|
+
epoch_id: parseInt(utils.generateOfflineThreadingID()),
|
|
117
|
+
tasks: [query],
|
|
118
|
+
version_id: '24631415369801570',
|
|
119
|
+
},
|
|
120
|
+
request_id: ctx.wsReqNumber,
|
|
121
|
+
type: 3,
|
|
122
|
+
};
|
|
123
|
+
context.payload = JSON.stringify(context.payload);
|
|
124
|
+
|
|
125
|
+
ctx.mqttClient.publish(
|
|
126
|
+
'/ls_req',
|
|
127
|
+
JSON.stringify(context),
|
|
128
|
+
{ qos: 1, retain: false },
|
|
129
|
+
(err) => {
|
|
130
|
+
if (err) {
|
|
131
|
+
return _callback(
|
|
132
|
+
new Error(
|
|
133
|
+
`MQTT publish failed for setNickname: ${err.message || err}`,
|
|
134
|
+
),
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const nicknameChangeEvent = {
|
|
139
|
+
type: 'thread_nickname_update',
|
|
140
|
+
threadID: threadID,
|
|
141
|
+
participantID: participantID,
|
|
142
|
+
newNickname: nickname,
|
|
143
|
+
senderID: _initiatorID,
|
|
144
|
+
BotID: ctx.userID,
|
|
145
|
+
timestamp: Date.now(),
|
|
146
|
+
};
|
|
147
|
+
_callback(null, nicknameChangeEvent);
|
|
148
|
+
},
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
return returnPromise;
|
|
152
|
+
};
|
|
153
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import utils = require('../../../utils');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @ChoruOfficial
|
|
5
|
+
* @description A module for interacting with Facebook Messenger Notes. This is not for creating notes on a user's profile page, but rather the temporary status-like notes in Messenger.
|
|
6
|
+
* @param {Object} defaultFuncs The default functions provided by the API wrapper.
|
|
7
|
+
* @param {Object} api The full API object.
|
|
8
|
+
* @param {Object} ctx The context object containing the user's session state (e.g., userID, jar).
|
|
9
|
+
* @returns {Object} An object containing methods to create, delete, recreate, and check notes.
|
|
10
|
+
*/
|
|
11
|
+
export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
12
|
+
/**
|
|
13
|
+
* @callback notesCallback
|
|
14
|
+
* @param {Error|null} error An error object if the request fails, otherwise null.
|
|
15
|
+
* @param {Object} [data] The data returned from the API.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Checks for the currently active note for the logged-in user.
|
|
20
|
+
* @param {notesCallback} callback A callback function that is executed after the request. It receives an error object (if any) and an object representing the current note.
|
|
21
|
+
*/
|
|
22
|
+
function checkNote(callback) {
|
|
23
|
+
if (typeof callback !== 'function') {
|
|
24
|
+
callback = () => {};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const form = {
|
|
28
|
+
fb_api_caller_class: 'RelayModern',
|
|
29
|
+
fb_api_req_friendly_name: 'MWInboxTrayNoteCreationDialogQuery',
|
|
30
|
+
variables: JSON.stringify({ scale: 2 }),
|
|
31
|
+
doc_id: '30899655739648624',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
defaultFuncs
|
|
35
|
+
.post('https://www.facebook.com/api/graphql/', ctx.jar, form)
|
|
36
|
+
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
37
|
+
.then((resData) => {
|
|
38
|
+
if (resData && resData.errors) throw resData.errors[0];
|
|
39
|
+
const currentNote = resData?.data?.viewer?.actor?.msgr_user_rich_status;
|
|
40
|
+
callback(null, currentNote);
|
|
41
|
+
})
|
|
42
|
+
.catch((err) => {
|
|
43
|
+
utils.error('notes.checkNote', err);
|
|
44
|
+
callback(err);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new note with the provided text. The note lasts for 24 hours (86400 seconds).
|
|
50
|
+
* @param {string} text The content of the note.
|
|
51
|
+
* @param {notesCallback} callback A callback function that is executed after the request. It receives an error object (if any) and an object confirming the note's creation status.
|
|
52
|
+
*/
|
|
53
|
+
function createNote(text, privacy = 'EVERYONE', callback?) {
|
|
54
|
+
if (typeof callback !== 'function') {
|
|
55
|
+
callback = () => {};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const variables = {
|
|
59
|
+
input: {
|
|
60
|
+
client_mutation_id: Math.round(Math.random() * 10).toString(),
|
|
61
|
+
actor_id: ctx.userID,
|
|
62
|
+
description: text,
|
|
63
|
+
duration: 86400, // 24 hours in seconds
|
|
64
|
+
note_type: 'TEXT_NOTE',
|
|
65
|
+
privacy,
|
|
66
|
+
session_id: utils.getGUID(),
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
const form = {
|
|
70
|
+
fb_api_caller_class: 'RelayModern',
|
|
71
|
+
fb_api_req_friendly_name:
|
|
72
|
+
'MWInboxTrayNoteCreationDialogCreationStepContentMutation',
|
|
73
|
+
variables: JSON.stringify(variables),
|
|
74
|
+
doc_id: '24060573783603122',
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
defaultFuncs
|
|
78
|
+
.post('https://www.facebook.com/api/graphql/', ctx.jar, form)
|
|
79
|
+
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
80
|
+
.then((resData) => {
|
|
81
|
+
if (resData && resData.errors) throw resData.errors[0];
|
|
82
|
+
const status = resData?.data?.xfb_rich_status_create?.status;
|
|
83
|
+
if (!status)
|
|
84
|
+
throw new Error('Could not find note status in the server response.');
|
|
85
|
+
callback(null, status);
|
|
86
|
+
})
|
|
87
|
+
.catch((err) => {
|
|
88
|
+
utils.error('notes.createNote', err);
|
|
89
|
+
callback(err);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Deletes a specific note by its ID.
|
|
95
|
+
* @param {string} noteID The ID of the note to be deleted.
|
|
96
|
+
* @param {notesCallback} callback A callback function that is executed after the request. It receives an error object (if any) and an object confirming the deletion.
|
|
97
|
+
*/
|
|
98
|
+
function deleteNote(noteID, callback) {
|
|
99
|
+
if (typeof callback !== 'function') {
|
|
100
|
+
callback = () => {};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const variables = {
|
|
104
|
+
input: {
|
|
105
|
+
client_mutation_id: Math.round(Math.random() * 10).toString(),
|
|
106
|
+
actor_id: ctx.userID,
|
|
107
|
+
rich_status_id: noteID,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
const form = {
|
|
111
|
+
fb_api_caller_class: 'RelayModern',
|
|
112
|
+
fb_api_req_friendly_name: 'useMWInboxTrayDeleteNoteMutation',
|
|
113
|
+
variables: JSON.stringify(variables),
|
|
114
|
+
doc_id: '9532619970198958',
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
defaultFuncs
|
|
118
|
+
.post('https://www.facebook.com/api/graphql/', ctx.jar, form)
|
|
119
|
+
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
120
|
+
.then((resData) => {
|
|
121
|
+
if (resData && resData.errors) throw resData.errors[0];
|
|
122
|
+
const deletedStatus = resData?.data?.xfb_rich_status_delete;
|
|
123
|
+
if (!deletedStatus)
|
|
124
|
+
throw new Error(
|
|
125
|
+
'Could not find deletion status in the server response.',
|
|
126
|
+
);
|
|
127
|
+
callback(null, deletedStatus);
|
|
128
|
+
})
|
|
129
|
+
.catch((err) => {
|
|
130
|
+
utils.error('notes.deleteNote', err);
|
|
131
|
+
callback(err);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* A convenience function that first deletes an old note and then creates a new one.
|
|
137
|
+
* @param {string} oldNoteID The ID of the note to delete.
|
|
138
|
+
* @param {string} newText The text for the new note.
|
|
139
|
+
* @param {notesCallback} callback A callback function that is executed after the request. It receives an error object (if any) and an object containing the deletion and creation statuses.
|
|
140
|
+
*/
|
|
141
|
+
function recreateNote(oldNoteID, newText, callback) {
|
|
142
|
+
if (typeof callback !== 'function') {
|
|
143
|
+
callback = () => {};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
deleteNote(oldNoteID, (err, deleted) => {
|
|
147
|
+
if (err) {
|
|
148
|
+
return callback(err);
|
|
149
|
+
}
|
|
150
|
+
createNote(newText, undefined, (err, created) => {
|
|
151
|
+
if (err) {
|
|
152
|
+
return callback(err);
|
|
153
|
+
}
|
|
154
|
+
callback(null, { deleted, created });
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return {
|
|
160
|
+
create: createNote,
|
|
161
|
+
delete: deleteNote,
|
|
162
|
+
recreate: recreateNote,
|
|
163
|
+
check: checkNote,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import utils = require("../../../utils");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @module resolvePhotoUrl
|
|
5
|
+
* @description Fetches the direct URL of a Facebook photo using its photo ID.
|
|
6
|
+
* @param {Object} defaultFuncs - An object containing default request functions.
|
|
7
|
+
* @param {Object} api - Facebook API object (unused here but kept for compatibility).
|
|
8
|
+
* @param {Object} ctx - Context object containing cookies (jar) and other session info.
|
|
9
|
+
* @returns {Function} resolvePhotoUrl - A function that takes a photo ID and optional callback, and returns a Promise resolving to the photo URL.
|
|
10
|
+
*/
|
|
11
|
+
export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
12
|
+
/**
|
|
13
|
+
* @function resolvePhotoUrl
|
|
14
|
+
* @param {string} photoID - The ID of the Facebook photo to resolve.
|
|
15
|
+
* @param {Function} [callback] - Optional Node-style callback function `(err, photoUrl)`.
|
|
16
|
+
* @returns {Promise<string>} A Promise that resolves to the direct photo URL.
|
|
17
|
+
*/
|
|
18
|
+
return function resolvePhotoUrl(photoID, callback) {
|
|
19
|
+
let resolveFunc: Function = function () {};
|
|
20
|
+
let rejectFunc: Function = function () {};
|
|
21
|
+
const returnPromise = new Promise<any>(function (resolve, reject) {
|
|
22
|
+
resolveFunc = resolve;
|
|
23
|
+
rejectFunc = reject;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
if (!callback) {
|
|
27
|
+
callback = function (err, photoUrl) {
|
|
28
|
+
if (err) {
|
|
29
|
+
return rejectFunc(err);
|
|
30
|
+
}
|
|
31
|
+
resolveFunc(photoUrl);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
defaultFuncs
|
|
36
|
+
.get("https://www.facebook.com/mercury/attachments/photo", ctx.jar, {
|
|
37
|
+
photo_id: photoID,
|
|
38
|
+
})
|
|
39
|
+
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
40
|
+
.then((resData) => {
|
|
41
|
+
if (resData.error) {
|
|
42
|
+
throw resData;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const photoUrl = resData.jsmods.require[0][3][0];
|
|
46
|
+
|
|
47
|
+
return callback(null, photoUrl);
|
|
48
|
+
})
|
|
49
|
+
.catch((err) => {
|
|
50
|
+
utils.error("resolvePhotoUrl", err);
|
|
51
|
+
return callback(err);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
return returnPromise;
|
|
55
|
+
};
|
|
56
|
+
};
|